From b5105a1e57bba3305d5dce93ab4d2f7faab6b34a Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 26 Aug 2024 17:45:13 +0200 Subject: [PATCH] Added preliminary Box32 support (#1760) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Improve the ReserveHigMemory helper function * [BOX32] Added some wrapping infrastructure * [BOX32] More wrapped 32bits lib infrastructure * [BOX32] Added callback and tls 32bits handling * [BOX32] Added more 32bits, around wrappers and elfs * [BOX32] Added the 32bits version of myalign * [BOX32] More wrapped libs and 32bits fixes and imrpovments * [BOX32] Added some 32bits tests * [BOX32] Try to enable some Box32 build and test on the CI * [BOX32] Disable Box32 testing on CI platform that use qemu * [BOX32] Another attempt to disable Box32 testing on CI platform that use qemu * [BOX32] Small fix for another attempt to disable Box32 testing on CI platform that use qemu * [BOX32] Yet another fix for another attempt to disable Box32 testing on CI platform that use qemu * [BOX32] Fixed a typo in CI script * [BOX32] Better scratch alighnment and enabled more tests * [BOX32] Added (partial) wrapped 32bits librt * [BOX32] Added mention of Box32 in README * [BOX32] Added phtread handling, and numerous fixes to 32bits handling. [ARM64_DYNAREC] Fixed access to segment with negative offset * [BOX32] Added system libs and cpp testing, plus some more fixes * [BOX32] Fix previous commit * [BOX32] Better stack adjustment for 32bits processes * [BOX32] Added getenv wrapped 32bits function and friends * [BOX32] Don't look for box86 for a Box32 build * [BOX32] Don't do 32bits cppThreads test for now on CI * [BOX32] Enabled a few more 32bits tests * [BOX32] For ld_lib_path for both CppThreads tests * [BOX32] [ANDROID] Some Fixes for Android Build * [BOX32] Still need to disable cppThread_32bits test on CI for some reason * [BOX32] [ANDROID] Don't show PreInit Array Warning (#1751) * [BOX32] [ANDROID] One More Fix for Android Build That I forgotten to … (#1752) * [BOX32] [ANDROID] One More Fix for Android Build That I forgotten to push before * [BOX32] [ANDROID] Try to Create __libc_init * [BOX32] [ANDROID] Try to disable NEEDED_LIBS for now (libdl is not wrapped) * [BOX32] Updated generated files * [BOX32] Added 32bits context functions * [BOX32] Added 32bits signal handling * [BOX32] Added some missing 32bits elfloader functions * [BOX32] Fix build on x86_64 machine * [BOX32] Better fix for x86_64 build * [BOX32] Actually added missing libs, and re-enabled cppThreads_32bits test * [BOX32] Added wrapped 32bits libdl * [BOX32] Try to re-enabled Box32 test on CI for ARM64 builds * [BOX32] fine-tuning Box32 test on CI for ARM64 builds * [BOX32] More fine-tuning to Box32 test on CI for ARM64 builds * [BOX32] Enabled Box32 test on CI for LA64 and RV64 builds too * [BOX32] re-Disabled Box32 test on CI for LA64 and RV64 builds, not working for now * [BOX32] Temporarily disabled cppThreads_32bits test on CI --------- Co-authored-by: KreitinnSoftware Co-authored-by: KreitinnSoftware <80591934+KreitinnSoftware@users.noreply.github.com> --- .github/workflows/release.yml | 31 +- CMakeLists.txt | 249 +- README.md | 2 + rebuild_wrappers.py | 7 +- rebuild_wrappers_32.py | 1616 ++++++++++ src/box32.c | 283 ++ src/box64context.c | 32 +- src/core.c | 105 +- src/custommem.c | 55 +- src/dynarec/arm64/arm64_emitter.h | 19 + src/dynarec/arm64/dynarec_arm64_64.c | 92 +- src/dynarec/arm64/dynarec_arm64_6664.c | 30 +- src/dynarec/arm64/dynarec_arm64_helper.h | 26 +- src/dynarec/dynarec.c | 19 +- src/dynarec/dynarec_native_pass.c | 2 +- src/elfs/elfhash.c | 14 +- src/elfs/elfhash32.c | 46 +- src/elfs/elfload_dump.c | 4 - src/elfs/elfloader.c | 101 +- src/elfs/elfloader32.c | 264 ++ src/elfs/elfloader_private.h | 6 +- src/elfs/elfparser32.c | 6 +- src/emu/x64emu.c | 57 +- src/emu/x64emu_private.h | 6 +- src/emu/x64int3.c | 14 +- src/emu/x64run.c | 10 +- src/emu/x64run64.c | 10 +- src/emu/x64run_private.c | 53 +- src/emu/x64run_private.h | 21 + src/emu/x64tls.c | 81 +- src/emu/x86int3.c | 347 ++ src/emu/x86syscall.c | 2 +- src/emu/x86syscall_32.c | 447 +++ src/emu/x87emu_private.c | 18 +- src/include/box32.h | 5 - src/include/box32context.h | 7 + src/include/box64context.h | 11 + src/include/debug.h | 2 +- src/include/elfload_dump.h | 4 + src/include/myalign32.h | 409 +++ src/include/regs.h | 1 + src/include/threads.h | 15 + src/include/x64emu.h | 7 +- src/include/x64run.h | 3 + src/librarian/librarian.c | 35 +- src/librarian/library.c | 108 +- src/librarian/library_private.h | 18 + src/library_list_32.h | 12 + src/library_list_static_32.h | 10 + src/libtools/myalign32.c | 935 ++++++ src/libtools/myalign64_32.c | 104 + src/libtools/signal32.c | 842 +++++ src/libtools/signals.c | 15 +- src/libtools/threads.c | 35 +- src/libtools/threads32.c | 854 +++++ src/tools/box32stack.c | 137 + src/tools/box64stack.c | 10 + src/tools/callback.c | 310 +- src/wrapped/generated/wrappedaluredefs.h | 2 +- src/wrapped/generated/wrappedaluretypes.h | 2 +- src/wrapped/generated/wrappedalureundefs.h | 2 +- src/wrapped/generated/wrappedalutdefs.h | 2 +- src/wrapped/generated/wrappedaluttypes.h | 2 +- src/wrapped/generated/wrappedalutundefs.h | 2 +- src/wrapped/generated/wrappedanldefs.h | 2 +- src/wrapped/generated/wrappedanltypes.h | 2 +- src/wrapped/generated/wrappedanlundefs.h | 2 +- src/wrapped/generated/wrappedatkbridgedefs.h | 2 +- src/wrapped/generated/wrappedatkbridgetypes.h | 2 +- .../generated/wrappedatkbridgeundefs.h | 2 +- src/wrapped/generated/wrappedatkdefs.h | 2 +- src/wrapped/generated/wrappedatktypes.h | 2 +- src/wrapped/generated/wrappedatkundefs.h | 2 +- src/wrapped/generated/wrappedatomicdefs.h | 2 +- src/wrapped/generated/wrappedatomictypes.h | 2 +- src/wrapped/generated/wrappedatomicundefs.h | 2 +- src/wrapped/generated/wrappedatspidefs.h | 2 +- src/wrapped/generated/wrappedatspitypes.h | 2 +- src/wrapped/generated/wrappedatspiundefs.h | 2 +- .../wrappedayatanaappindicator3defs.h | 2 +- .../wrappedayatanaappindicator3types.h | 2 +- .../wrappedayatanaappindicator3undefs.h | 2 +- src/wrapped/generated/wrappedbz2defs.h | 2 +- src/wrapped/generated/wrappedbz2types.h | 2 +- src/wrapped/generated/wrappedbz2undefs.h | 2 +- src/wrapped/generated/wrappedcairodefs.h | 2 +- .../generated/wrappedcairogobjectdefs.h | 2 +- .../generated/wrappedcairogobjecttypes.h | 2 +- .../generated/wrappedcairogobjectundefs.h | 2 +- src/wrapped/generated/wrappedcairotypes.h | 2 +- src/wrapped/generated/wrappedcairoundefs.h | 2 +- src/wrapped/generated/wrappedcapdefs.h | 2 +- src/wrapped/generated/wrappedcaptypes.h | 2 +- src/wrapped/generated/wrappedcapundefs.h | 2 +- .../generated/wrappedcrashhandlerdefs.h | 2 +- .../generated/wrappedcrashhandlertypes.h | 2 +- .../generated/wrappedcrashhandlerundefs.h | 2 +- src/wrapped/generated/wrappedcrypto3defs.h | 2 +- src/wrapped/generated/wrappedcrypto3types.h | 2 +- src/wrapped/generated/wrappedcrypto3undefs.h | 2 +- src/wrapped/generated/wrappedcryptodefs.h | 2 +- src/wrapped/generated/wrappedcryptotypes.h | 2 +- src/wrapped/generated/wrappedcryptoundefs.h | 2 +- src/wrapped/generated/wrappedcurldefs.h | 2 +- src/wrapped/generated/wrappedcurltypes.h | 2 +- src/wrapped/generated/wrappedcurlundefs.h | 2 +- .../generated/wrappedd3dadapter9defs.h | 2 +- .../generated/wrappedd3dadapter9types.h | 2 +- .../generated/wrappedd3dadapter9undefs.h | 2 +- src/wrapped/generated/wrappeddbusdefs.h | 2 +- src/wrapped/generated/wrappeddbusglib1defs.h | 2 +- src/wrapped/generated/wrappeddbusglib1types.h | 2 +- .../generated/wrappeddbusglib1undefs.h | 2 +- .../generated/wrappeddbusmenuglibdefs.h | 2 +- .../generated/wrappeddbusmenuglibtypes.h | 2 +- .../generated/wrappeddbusmenuglibundefs.h | 2 +- src/wrapped/generated/wrappeddbustypes.h | 2 +- src/wrapped/generated/wrappeddbusundefs.h | 2 +- src/wrapped/generated/wrappeddecor0defs.h | 2 +- src/wrapped/generated/wrappeddecor0types.h | 2 +- src/wrapped/generated/wrappeddecor0undefs.h | 2 +- src/wrapped/generated/wrappedevent21defs.h | 2 +- src/wrapped/generated/wrappedevent21types.h | 2 +- src/wrapped/generated/wrappedevent21undefs.h | 2 +- src/wrapped/generated/wrappedexpatdefs.h | 2 +- src/wrapped/generated/wrappedexpattypes.h | 2 +- src/wrapped/generated/wrappedexpatundefs.h | 2 +- src/wrapped/generated/wrappedfaudiodefs.h | 2 +- src/wrapped/generated/wrappedfaudiotypes.h | 2 +- src/wrapped/generated/wrappedfaudioundefs.h | 2 +- src/wrapped/generated/wrappedflacdefs.h | 2 +- src/wrapped/generated/wrappedflactypes.h | 2 +- src/wrapped/generated/wrappedflacundefs.h | 2 +- src/wrapped/generated/wrappedfontconfigdefs.h | 2 +- .../generated/wrappedfontconfigtypes.h | 2 +- .../generated/wrappedfontconfigundefs.h | 2 +- src/wrapped/generated/wrappedfreebl3defs.h | 2 +- src/wrapped/generated/wrappedfreebl3types.h | 2 +- src/wrapped/generated/wrappedfreebl3undefs.h | 2 +- src/wrapped/generated/wrappedfreetypedefs.h | 2 +- src/wrapped/generated/wrappedfreetypetypes.h | 2 +- src/wrapped/generated/wrappedfreetypeundefs.h | 2 +- src/wrapped/generated/wrappedgbmdefs.h | 2 +- src/wrapped/generated/wrappedgbmtypes.h | 2 +- src/wrapped/generated/wrappedgbmundefs.h | 2 +- src/wrapped/generated/wrappedgconf2defs.h | 2 +- src/wrapped/generated/wrappedgconf2types.h | 2 +- src/wrapped/generated/wrappedgconf2undefs.h | 2 +- src/wrapped/generated/wrappedgcryptdefs.h | 2 +- src/wrapped/generated/wrappedgcrypttypes.h | 2 +- src/wrapped/generated/wrappedgcryptundefs.h | 2 +- src/wrapped/generated/wrappedgdk3defs.h | 2 +- src/wrapped/generated/wrappedgdk3types.h | 2 +- src/wrapped/generated/wrappedgdk3undefs.h | 2 +- src/wrapped/generated/wrappedgdkpixbuf2defs.h | 2 +- .../generated/wrappedgdkpixbuf2types.h | 2 +- .../generated/wrappedgdkpixbuf2undefs.h | 2 +- src/wrapped/generated/wrappedgdkx112defs.h | 2 +- src/wrapped/generated/wrappedgdkx112types.h | 2 +- src/wrapped/generated/wrappedgdkx112undefs.h | 2 +- src/wrapped/generated/wrappedgio2defs.h | 2 +- src/wrapped/generated/wrappedgio2types.h | 2 +- src/wrapped/generated/wrappedgio2undefs.h | 2 +- src/wrapped/generated/wrappedglesv2defs.h | 2 +- src/wrapped/generated/wrappedglesv2types.h | 2 +- src/wrapped/generated/wrappedglesv2undefs.h | 2 +- src/wrapped/generated/wrappedglib2defs.h | 2 +- src/wrapped/generated/wrappedglib2types.h | 2 +- src/wrapped/generated/wrappedglib2undefs.h | 2 +- src/wrapped/generated/wrappedgmodule2defs.h | 2 +- src/wrapped/generated/wrappedgmodule2types.h | 2 +- src/wrapped/generated/wrappedgmodule2undefs.h | 2 +- src/wrapped/generated/wrappedgmpdefs.h | 2 +- src/wrapped/generated/wrappedgmptypes.h | 2 +- src/wrapped/generated/wrappedgmpundefs.h | 2 +- src/wrapped/generated/wrappedgnutlsdefs.h | 2 +- src/wrapped/generated/wrappedgnutlstypes.h | 2 +- src/wrapped/generated/wrappedgnutlsundefs.h | 2 +- src/wrapped/generated/wrappedgobject2defs.h | 2 +- src/wrapped/generated/wrappedgobject2types.h | 2 +- src/wrapped/generated/wrappedgobject2undefs.h | 2 +- src/wrapped/generated/wrappedgompdefs.h | 2 +- src/wrapped/generated/wrappedgomptypes.h | 2 +- src/wrapped/generated/wrappedgompundefs.h | 2 +- src/wrapped/generated/wrappedgssapidefs.h | 2 +- src/wrapped/generated/wrappedgssapikrb5defs.h | 2 +- .../generated/wrappedgssapikrb5types.h | 2 +- .../generated/wrappedgssapikrb5undefs.h | 2 +- src/wrapped/generated/wrappedgssapitypes.h | 2 +- src/wrapped/generated/wrappedgssapiundefs.h | 2 +- .../generated/wrappedgstallocatorsdefs.h | 2 +- .../generated/wrappedgstallocatorstypes.h | 2 +- .../generated/wrappedgstallocatorsundefs.h | 2 +- src/wrapped/generated/wrappedgstappdefs.h | 2 +- src/wrapped/generated/wrappedgstapptypes.h | 2 +- src/wrapped/generated/wrappedgstappundefs.h | 2 +- src/wrapped/generated/wrappedgstaudiodefs.h | 2 +- src/wrapped/generated/wrappedgstaudiotypes.h | 2 +- src/wrapped/generated/wrappedgstaudioundefs.h | 2 +- src/wrapped/generated/wrappedgstbasedefs.h | 2 +- src/wrapped/generated/wrappedgstbasetypes.h | 2 +- src/wrapped/generated/wrappedgstbaseundefs.h | 2 +- src/wrapped/generated/wrappedgstcheckdefs.h | 2 +- src/wrapped/generated/wrappedgstchecktypes.h | 2 +- src/wrapped/generated/wrappedgstcheckundefs.h | 2 +- .../generated/wrappedgstcontrollerdefs.h | 2 +- .../generated/wrappedgstcontrollertypes.h | 2 +- .../generated/wrappedgstcontrollerundefs.h | 2 +- src/wrapped/generated/wrappedgstfftdefs.h | 2 +- src/wrapped/generated/wrappedgstffttypes.h | 2 +- src/wrapped/generated/wrappedgstfftundefs.h | 2 +- src/wrapped/generated/wrappedgstgldefs.h | 2 +- src/wrapped/generated/wrappedgstgltypes.h | 2 +- src/wrapped/generated/wrappedgstglundefs.h | 2 +- src/wrapped/generated/wrappedgstnetdefs.h | 2 +- src/wrapped/generated/wrappedgstnettypes.h | 2 +- src/wrapped/generated/wrappedgstnetundefs.h | 2 +- src/wrapped/generated/wrappedgstpbutilsdefs.h | 2 +- .../generated/wrappedgstpbutilstypes.h | 2 +- .../generated/wrappedgstpbutilsundefs.h | 2 +- src/wrapped/generated/wrappedgstreamerdefs.h | 2 +- src/wrapped/generated/wrappedgstreamertypes.h | 2 +- .../generated/wrappedgstreamerundefs.h | 2 +- src/wrapped/generated/wrappedgstriffdefs.h | 2 +- src/wrapped/generated/wrappedgstrifftypes.h | 2 +- src/wrapped/generated/wrappedgstriffundefs.h | 2 +- src/wrapped/generated/wrappedgstrtpdefs.h | 2 +- src/wrapped/generated/wrappedgstrtptypes.h | 2 +- src/wrapped/generated/wrappedgstrtpundefs.h | 2 +- src/wrapped/generated/wrappedgstrtspdefs.h | 2 +- src/wrapped/generated/wrappedgstrtsptypes.h | 2 +- src/wrapped/generated/wrappedgstrtspundefs.h | 2 +- src/wrapped/generated/wrappedgstsdpdefs.h | 2 +- src/wrapped/generated/wrappedgstsdptypes.h | 2 +- src/wrapped/generated/wrappedgstsdpundefs.h | 2 +- src/wrapped/generated/wrappedgsttagdefs.h | 2 +- src/wrapped/generated/wrappedgsttagtypes.h | 2 +- src/wrapped/generated/wrappedgsttagundefs.h | 2 +- src/wrapped/generated/wrappedgstvideodefs.h | 2 +- src/wrapped/generated/wrappedgstvideotypes.h | 2 +- src/wrapped/generated/wrappedgstvideoundefs.h | 2 +- src/wrapped/generated/wrappedgthread2defs.h | 2 +- src/wrapped/generated/wrappedgthread2types.h | 2 +- src/wrapped/generated/wrappedgthread2undefs.h | 2 +- src/wrapped/generated/wrappedgtk3defs.h | 2 +- src/wrapped/generated/wrappedgtk3types.h | 2 +- src/wrapped/generated/wrappedgtk3undefs.h | 2 +- src/wrapped/generated/wrappedgtkx112defs.h | 2 +- src/wrapped/generated/wrappedgtkx112types.h | 2 +- src/wrapped/generated/wrappedgtkx112undefs.h | 2 +- src/wrapped/generated/wrappedicui18n64defs.h | 2 +- src/wrapped/generated/wrappedicui18n64types.h | 2 +- .../generated/wrappedicui18n64undefs.h | 2 +- src/wrapped/generated/wrappedicui18n66defs.h | 2 +- src/wrapped/generated/wrappedicui18n66types.h | 2 +- .../generated/wrappedicui18n66undefs.h | 2 +- src/wrapped/generated/wrappedicui18n67defs.h | 2 +- src/wrapped/generated/wrappedicui18n67types.h | 2 +- .../generated/wrappedicui18n67undefs.h | 2 +- src/wrapped/generated/wrappedicui18n72defs.h | 2 +- src/wrapped/generated/wrappedicui18n72types.h | 2 +- .../generated/wrappedicui18n72undefs.h | 2 +- src/wrapped/generated/wrappedicui18n73defs.h | 2 +- src/wrapped/generated/wrappedicui18n73types.h | 2 +- .../generated/wrappedicui18n73undefs.h | 2 +- src/wrapped/generated/wrappedicui18n74defs.h | 2 +- src/wrapped/generated/wrappedicui18n74types.h | 2 +- .../generated/wrappedicui18n74undefs.h | 2 +- src/wrapped/generated/wrappedicuuc64defs.h | 2 +- src/wrapped/generated/wrappedicuuc64types.h | 2 +- src/wrapped/generated/wrappedicuuc64undefs.h | 2 +- src/wrapped/generated/wrappedicuuc66defs.h | 2 +- src/wrapped/generated/wrappedicuuc66types.h | 2 +- src/wrapped/generated/wrappedicuuc66undefs.h | 2 +- src/wrapped/generated/wrappedicuuc67defs.h | 2 +- src/wrapped/generated/wrappedicuuc67types.h | 2 +- src/wrapped/generated/wrappedicuuc67undefs.h | 2 +- src/wrapped/generated/wrappedicuuc72defs.h | 2 +- src/wrapped/generated/wrappedicuuc72types.h | 2 +- src/wrapped/generated/wrappedicuuc72undefs.h | 2 +- src/wrapped/generated/wrappedicuuc73defs.h | 2 +- src/wrapped/generated/wrappedicuuc73types.h | 2 +- src/wrapped/generated/wrappedicuuc73undefs.h | 2 +- src/wrapped/generated/wrappedicuuc74defs.h | 2 +- src/wrapped/generated/wrappedicuuc74types.h | 2 +- src/wrapped/generated/wrappedicuuc74undefs.h | 2 +- src/wrapped/generated/wrappedidn2defs.h | 2 +- src/wrapped/generated/wrappedidn2types.h | 2 +- src/wrapped/generated/wrappedidn2undefs.h | 2 +- src/wrapped/generated/wrappedkrb5defs.h | 2 +- src/wrapped/generated/wrappedkrb5types.h | 2 +- src/wrapped/generated/wrappedkrb5undefs.h | 2 +- src/wrapped/generated/wrappedlberdefs.h | 2 +- src/wrapped/generated/wrappedlbertypes.h | 2 +- src/wrapped/generated/wrappedlberundefs.h | 2 +- src/wrapped/generated/wrappedlcms2defs.h | 2 +- src/wrapped/generated/wrappedlcms2types.h | 2 +- src/wrapped/generated/wrappedlcms2undefs.h | 2 +- src/wrapped/generated/wrappedldaprdefs.h | 2 +- src/wrapped/generated/wrappedldaprtypes.h | 2 +- src/wrapped/generated/wrappedldaprundefs.h | 2 +- src/wrapped/generated/wrappedldlinuxdefs.h | 2 +- src/wrapped/generated/wrappedldlinuxtypes.h | 2 +- src/wrapped/generated/wrappedldlinuxundefs.h | 2 +- src/wrapped/generated/wrappedlibasounddefs.h | 2 +- src/wrapped/generated/wrappedlibasoundtypes.h | 2 +- .../generated/wrappedlibasoundundefs.h | 2 +- src/wrapped/generated/wrappedlibbsddefs.h | 2 +- src/wrapped/generated/wrappedlibbsdtypes.h | 2 +- src/wrapped/generated/wrappedlibbsdundefs.h | 2 +- src/wrapped/generated/wrappedlibcdefs.h | 2 +- src/wrapped/generated/wrappedlibcmusldefs.h | 2 +- src/wrapped/generated/wrappedlibcmusltypes.h | 2 +- src/wrapped/generated/wrappedlibcmuslundefs.h | 2 +- src/wrapped/generated/wrappedlibcryptdefs.h | 2 +- src/wrapped/generated/wrappedlibcrypttypes.h | 2 +- src/wrapped/generated/wrappedlibcryptundefs.h | 2 +- src/wrapped/generated/wrappedlibctypes.h | 2 +- src/wrapped/generated/wrappedlibcundefs.h | 2 +- src/wrapped/generated/wrappedlibcupsdefs.h | 2 +- src/wrapped/generated/wrappedlibcupstypes.h | 2 +- src/wrapped/generated/wrappedlibcupsundefs.h | 2 +- src/wrapped/generated/wrappedlibdldefs.h | 2 +- src/wrapped/generated/wrappedlibdltypes.h | 2 +- src/wrapped/generated/wrappedlibdlundefs.h | 2 +- .../generated/wrappedlibdrmamdgpudefs.h | 2 +- .../generated/wrappedlibdrmamdgputypes.h | 2 +- .../generated/wrappedlibdrmamdgpuundefs.h | 2 +- src/wrapped/generated/wrappedlibdrmdefs.h | 2 +- src/wrapped/generated/wrappedlibdrmtypes.h | 2 +- src/wrapped/generated/wrappedlibdrmundefs.h | 2 +- src/wrapped/generated/wrappedlibegldefs.h | 2 +- src/wrapped/generated/wrappedlibegltypes.h | 2 +- src/wrapped/generated/wrappedlibeglundefs.h | 2 +- src/wrapped/generated/wrappedlibformdefs.h | 2 +- src/wrapped/generated/wrappedlibformtypes.h | 2 +- src/wrapped/generated/wrappedlibformundefs.h | 2 +- src/wrapped/generated/wrappedlibformw6defs.h | 2 +- src/wrapped/generated/wrappedlibformw6types.h | 2 +- .../generated/wrappedlibformw6undefs.h | 2 +- src/wrapped/generated/wrappedlibformwdefs.h | 2 +- src/wrapped/generated/wrappedlibformwtypes.h | 2 +- src/wrapped/generated/wrappedlibformwundefs.h | 2 +- src/wrapped/generated/wrappedlibfusedefs.h | 2 +- src/wrapped/generated/wrappedlibfusetypes.h | 2 +- src/wrapped/generated/wrappedlibfuseundefs.h | 2 +- src/wrapped/generated/wrappedlibgldefs.h | 2 +- src/wrapped/generated/wrappedlibgltypes.h | 2 +- src/wrapped/generated/wrappedlibgludefs.h | 2 +- src/wrapped/generated/wrappedlibglundefs.h | 2 +- src/wrapped/generated/wrappedlibglutypes.h | 2 +- src/wrapped/generated/wrappedlibgluundefs.h | 2 +- src/wrapped/generated/wrappedlibglxdefs.h | 2 +- src/wrapped/generated/wrappedlibglxtypes.h | 2 +- src/wrapped/generated/wrappedlibglxundefs.h | 2 +- .../generated/wrappedlibharfbuzzdefs.h | 2 +- .../generated/wrappedlibharfbuzztypes.h | 2 +- .../generated/wrappedlibharfbuzzundefs.h | 2 +- .../generated/wrappedlibhogweed6defs.h | 2 +- .../generated/wrappedlibhogweed6types.h | 2 +- .../generated/wrappedlibhogweed6undefs.h | 2 +- src/wrapped/generated/wrappedlibibusdefs.h | 2 +- src/wrapped/generated/wrappedlibibustypes.h | 2 +- src/wrapped/generated/wrappedlibibusundefs.h | 2 +- src/wrapped/generated/wrappedlibicedefs.h | 2 +- src/wrapped/generated/wrappedlibicetypes.h | 2 +- src/wrapped/generated/wrappedlibiceundefs.h | 2 +- src/wrapped/generated/wrappedlibmdefs.h | 2 +- src/wrapped/generated/wrappedlibmtypes.h | 2 +- src/wrapped/generated/wrappedlibmundefs.h | 2 +- .../generated/wrappedlibncurses6defs.h | 2 +- .../generated/wrappedlibncurses6types.h | 2 +- .../generated/wrappedlibncurses6undefs.h | 2 +- src/wrapped/generated/wrappedlibncursesdefs.h | 2 +- .../generated/wrappedlibncursestypes.h | 2 +- .../generated/wrappedlibncursesundefs.h | 2 +- .../generated/wrappedlibncursesw6defs.h | 2 +- .../generated/wrappedlibncursesw6types.h | 2 +- .../generated/wrappedlibncursesw6undefs.h | 2 +- .../generated/wrappedlibncurseswdefs.h | 2 +- .../generated/wrappedlibncurseswtypes.h | 2 +- .../generated/wrappedlibncurseswundefs.h | 2 +- src/wrapped/generated/wrappedlibnettle8defs.h | 2 +- .../generated/wrappedlibnettle8types.h | 2 +- .../generated/wrappedlibnettle8undefs.h | 2 +- src/wrapped/generated/wrappedlibnumadefs.h | 2 +- src/wrapped/generated/wrappedlibnumatypes.h | 2 +- src/wrapped/generated/wrappedlibnumaundefs.h | 2 +- src/wrapped/generated/wrappedliboggdefs.h | 2 +- src/wrapped/generated/wrappedliboggtypes.h | 2 +- src/wrapped/generated/wrappedliboggundefs.h | 2 +- src/wrapped/generated/wrappedlibpaneldefs.h | 2 +- src/wrapped/generated/wrappedlibpaneltypes.h | 2 +- src/wrapped/generated/wrappedlibpanelundefs.h | 2 +- src/wrapped/generated/wrappedlibpcidefs.h | 2 +- src/wrapped/generated/wrappedlibpcitypes.h | 2 +- src/wrapped/generated/wrappedlibpciundefs.h | 2 +- src/wrapped/generated/wrappedlibpcredefs.h | 2 +- src/wrapped/generated/wrappedlibpcretypes.h | 2 +- src/wrapped/generated/wrappedlibpcreundefs.h | 2 +- src/wrapped/generated/wrappedlibpthreaddefs.h | 2 +- .../generated/wrappedlibpthreadtypes.h | 2 +- .../generated/wrappedlibpthreadundefs.h | 2 +- src/wrapped/generated/wrappedlibresolvdefs.h | 2 +- src/wrapped/generated/wrappedlibresolvtypes.h | 2 +- .../generated/wrappedlibresolvundefs.h | 2 +- src/wrapped/generated/wrappedlibrtdefs.h | 2 +- src/wrapped/generated/wrappedlibrttypes.h | 2 +- src/wrapped/generated/wrappedlibrtundefs.h | 2 +- src/wrapped/generated/wrappedlibsmdefs.h | 2 +- src/wrapped/generated/wrappedlibsmtypes.h | 2 +- src/wrapped/generated/wrappedlibsmundefs.h | 2 +- src/wrapped/generated/wrappedlibsndfiledefs.h | 2 +- .../generated/wrappedlibsndfiletypes.h | 2 +- .../generated/wrappedlibsndfileundefs.h | 2 +- src/wrapped/generated/wrappedlibsqlite3defs.h | 2 +- .../generated/wrappedlibsqlite3types.h | 2 +- .../generated/wrappedlibsqlite3undefs.h | 2 +- src/wrapped/generated/wrappedlibssh2defs.h | 2 +- src/wrapped/generated/wrappedlibssh2types.h | 2 +- src/wrapped/generated/wrappedlibssh2undefs.h | 2 +- src/wrapped/generated/wrappedlibssl3defs.h | 2 +- src/wrapped/generated/wrappedlibssl3types.h | 2 +- src/wrapped/generated/wrappedlibssl3undefs.h | 2 +- src/wrapped/generated/wrappedlibssldefs.h | 2 +- src/wrapped/generated/wrappedlibssltypes.h | 2 +- src/wrapped/generated/wrappedlibsslundefs.h | 2 +- src/wrapped/generated/wrappedlibtasn1defs.h | 2 +- src/wrapped/generated/wrappedlibtasn1types.h | 2 +- src/wrapped/generated/wrappedlibtasn1undefs.h | 2 +- src/wrapped/generated/wrappedlibtiff5defs.h | 2 +- src/wrapped/generated/wrappedlibtiff5types.h | 2 +- src/wrapped/generated/wrappedlibtiff5undefs.h | 2 +- src/wrapped/generated/wrappedlibtinfo6defs.h | 2 +- src/wrapped/generated/wrappedlibtinfo6types.h | 2 +- .../generated/wrappedlibtinfo6undefs.h | 2 +- src/wrapped/generated/wrappedlibtinfodefs.h | 2 +- src/wrapped/generated/wrappedlibtinfotypes.h | 2 +- src/wrapped/generated/wrappedlibtinfoundefs.h | 2 +- .../generated/wrappedlibunistring2defs.h | 2 +- .../generated/wrappedlibunistring2types.h | 2 +- .../generated/wrappedlibunistring2undefs.h | 2 +- src/wrapped/generated/wrappedlibusb1defs.h | 2 +- src/wrapped/generated/wrappedlibusb1types.h | 2 +- src/wrapped/generated/wrappedlibusb1undefs.h | 2 +- src/wrapped/generated/wrappedlibuuiddefs.h | 2 +- src/wrapped/generated/wrappedlibuuidtypes.h | 2 +- src/wrapped/generated/wrappedlibuuidundefs.h | 2 +- src/wrapped/generated/wrappedlibvadefs.h | 2 +- src/wrapped/generated/wrappedlibvadrmdefs.h | 2 +- src/wrapped/generated/wrappedlibvadrmtypes.h | 2 +- src/wrapped/generated/wrappedlibvadrmundefs.h | 2 +- src/wrapped/generated/wrappedlibvatypes.h | 2 +- src/wrapped/generated/wrappedlibvaundefs.h | 2 +- .../generated/wrappedlibvawaylanddefs.h | 2 +- .../generated/wrappedlibvawaylandtypes.h | 2 +- .../generated/wrappedlibvawaylandundefs.h | 2 +- src/wrapped/generated/wrappedlibvax11defs.h | 2 +- src/wrapped/generated/wrappedlibvax11types.h | 2 +- src/wrapped/generated/wrappedlibvax11undefs.h | 2 +- src/wrapped/generated/wrappedlibvdpaudefs.h | 2 +- src/wrapped/generated/wrappedlibvdpautypes.h | 2 +- src/wrapped/generated/wrappedlibvdpauundefs.h | 2 +- src/wrapped/generated/wrappedlibvorbisdefs.h | 2 +- src/wrapped/generated/wrappedlibvorbistypes.h | 2 +- .../generated/wrappedlibvorbisundefs.h | 2 +- src/wrapped/generated/wrappedlibx11defs.h | 2 +- src/wrapped/generated/wrappedlibx11types.h | 2 +- src/wrapped/generated/wrappedlibx11undefs.h | 2 +- src/wrapped/generated/wrappedlibx11xcbdefs.h | 2 +- src/wrapped/generated/wrappedlibx11xcbtypes.h | 2 +- .../generated/wrappedlibx11xcbundefs.h | 2 +- src/wrapped/generated/wrappedlibxaudefs.h | 2 +- src/wrapped/generated/wrappedlibxautypes.h | 2 +- src/wrapped/generated/wrappedlibxauundefs.h | 2 +- .../generated/wrappedlibxcbcursordefs.h | 2 +- .../generated/wrappedlibxcbcursortypes.h | 2 +- .../generated/wrappedlibxcbcursorundefs.h | 2 +- src/wrapped/generated/wrappedlibxcbdefs.h | 2 +- src/wrapped/generated/wrappedlibxcbdri2defs.h | 2 +- .../generated/wrappedlibxcbdri2types.h | 2 +- .../generated/wrappedlibxcbdri2undefs.h | 2 +- src/wrapped/generated/wrappedlibxcbdri3defs.h | 2 +- .../generated/wrappedlibxcbdri3types.h | 2 +- .../generated/wrappedlibxcbdri3undefs.h | 2 +- src/wrapped/generated/wrappedlibxcbglxdefs.h | 2 +- src/wrapped/generated/wrappedlibxcbglxtypes.h | 2 +- .../generated/wrappedlibxcbglxundefs.h | 2 +- .../generated/wrappedlibxcbicccmdefs.h | 2 +- .../generated/wrappedlibxcbicccmtypes.h | 2 +- .../generated/wrappedlibxcbicccmundefs.h | 2 +- .../generated/wrappedlibxcbimagedefs.h | 2 +- .../generated/wrappedlibxcbimagetypes.h | 2 +- .../generated/wrappedlibxcbimageundefs.h | 2 +- .../generated/wrappedlibxcbkeysymsdefs.h | 2 +- .../generated/wrappedlibxcbkeysymstypes.h | 2 +- .../generated/wrappedlibxcbkeysymsundefs.h | 2 +- .../generated/wrappedlibxcbpresentdefs.h | 2 +- .../generated/wrappedlibxcbpresenttypes.h | 2 +- .../generated/wrappedlibxcbpresentundefs.h | 2 +- .../generated/wrappedlibxcbrandrdefs.h | 2 +- .../generated/wrappedlibxcbrandrtypes.h | 2 +- .../generated/wrappedlibxcbrandrundefs.h | 2 +- .../generated/wrappedlibxcbrenderdefs.h | 2 +- .../generated/wrappedlibxcbrendertypes.h | 2 +- .../generated/wrappedlibxcbrenderundefs.h | 2 +- .../generated/wrappedlibxcbrenderutildefs.h | 2 +- .../generated/wrappedlibxcbrenderutiltypes.h | 2 +- .../generated/wrappedlibxcbrenderutilundefs.h | 2 +- .../generated/wrappedlibxcbshapedefs.h | 2 +- .../generated/wrappedlibxcbshapetypes.h | 2 +- .../generated/wrappedlibxcbshapeundefs.h | 2 +- src/wrapped/generated/wrappedlibxcbshmdefs.h | 2 +- src/wrapped/generated/wrappedlibxcbshmtypes.h | 2 +- .../generated/wrappedlibxcbshmundefs.h | 2 +- src/wrapped/generated/wrappedlibxcbsyncdefs.h | 2 +- .../generated/wrappedlibxcbsynctypes.h | 2 +- .../generated/wrappedlibxcbsyncundefs.h | 2 +- src/wrapped/generated/wrappedlibxcbtypes.h | 2 +- src/wrapped/generated/wrappedlibxcbundefs.h | 2 +- src/wrapped/generated/wrappedlibxcbutildefs.h | 2 +- .../generated/wrappedlibxcbutiltypes.h | 2 +- .../generated/wrappedlibxcbutilundefs.h | 2 +- .../generated/wrappedlibxcbxfixesdefs.h | 2 +- .../generated/wrappedlibxcbxfixestypes.h | 2 +- .../generated/wrappedlibxcbxfixesundefs.h | 2 +- .../generated/wrappedlibxcbxineramadefs.h | 2 +- .../generated/wrappedlibxcbxineramatypes.h | 2 +- .../generated/wrappedlibxcbxineramaundefs.h | 2 +- .../generated/wrappedlibxcbxinputdefs.h | 2 +- .../generated/wrappedlibxcbxinputtypes.h | 2 +- .../generated/wrappedlibxcbxinputundefs.h | 2 +- src/wrapped/generated/wrappedlibxcbxkbdefs.h | 2 +- src/wrapped/generated/wrappedlibxcbxkbtypes.h | 2 +- .../generated/wrappedlibxcbxkbundefs.h | 2 +- .../generated/wrappedlibxcbxtestdefs.h | 2 +- .../generated/wrappedlibxcbxtesttypes.h | 2 +- .../generated/wrappedlibxcbxtestundefs.h | 2 +- .../generated/wrappedlibxcompositedefs.h | 2 +- .../generated/wrappedlibxcompositetypes.h | 2 +- .../generated/wrappedlibxcompositeundefs.h | 2 +- src/wrapped/generated/wrappedlibxcursordefs.h | 2 +- .../generated/wrappedlibxcursortypes.h | 2 +- .../generated/wrappedlibxcursorundefs.h | 2 +- src/wrapped/generated/wrappedlibxdamagedefs.h | 2 +- .../generated/wrappedlibxdamagetypes.h | 2 +- .../generated/wrappedlibxdamageundefs.h | 2 +- src/wrapped/generated/wrappedlibxdmcpdefs.h | 2 +- src/wrapped/generated/wrappedlibxdmcptypes.h | 2 +- src/wrapped/generated/wrappedlibxdmcpundefs.h | 2 +- src/wrapped/generated/wrappedlibxextdefs.h | 2 +- src/wrapped/generated/wrappedlibxexttypes.h | 2 +- src/wrapped/generated/wrappedlibxextundefs.h | 2 +- src/wrapped/generated/wrappedlibxfixesdefs.h | 2 +- src/wrapped/generated/wrappedlibxfixestypes.h | 2 +- .../generated/wrappedlibxfixesundefs.h | 2 +- src/wrapped/generated/wrappedlibxftdefs.h | 2 +- src/wrapped/generated/wrappedlibxfttypes.h | 2 +- src/wrapped/generated/wrappedlibxftundefs.h | 2 +- src/wrapped/generated/wrappedlibxidefs.h | 2 +- src/wrapped/generated/wrappedlibxitypes.h | 2 +- src/wrapped/generated/wrappedlibxiundefs.h | 2 +- src/wrapped/generated/wrappedlibxmudefs.h | 2 +- src/wrapped/generated/wrappedlibxmutypes.h | 2 +- src/wrapped/generated/wrappedlibxmuundefs.h | 2 +- src/wrapped/generated/wrappedlibxpmdefs.h | 2 +- src/wrapped/generated/wrappedlibxpmtypes.h | 2 +- src/wrapped/generated/wrappedlibxpmundefs.h | 2 +- .../generated/wrappedlibxpresentdefs.h | 2 +- .../generated/wrappedlibxpresenttypes.h | 2 +- .../generated/wrappedlibxpresentundefs.h | 2 +- src/wrapped/generated/wrappedlibxrandrdefs.h | 2 +- src/wrapped/generated/wrappedlibxrandrtypes.h | 2 +- .../generated/wrappedlibxrandrundefs.h | 2 +- src/wrapped/generated/wrappedlibxrenderdefs.h | 2 +- .../generated/wrappedlibxrendertypes.h | 2 +- .../generated/wrappedlibxrenderundefs.h | 2 +- src/wrapped/generated/wrappedlibxssdefs.h | 2 +- src/wrapped/generated/wrappedlibxsstypes.h | 2 +- src/wrapped/generated/wrappedlibxssundefs.h | 2 +- src/wrapped/generated/wrappedlibxtdefs.h | 2 +- src/wrapped/generated/wrappedlibxtstdefs.h | 2 +- src/wrapped/generated/wrappedlibxtsttypes.h | 2 +- src/wrapped/generated/wrappedlibxtstundefs.h | 2 +- src/wrapped/generated/wrappedlibxttypes.h | 2 +- src/wrapped/generated/wrappedlibxtundefs.h | 2 +- src/wrapped/generated/wrappedlibxxf86vmdefs.h | 2 +- .../generated/wrappedlibxxf86vmtypes.h | 2 +- .../generated/wrappedlibxxf86vmundefs.h | 2 +- src/wrapped/generated/wrappedlibzdefs.h | 2 +- src/wrapped/generated/wrappedlibztypes.h | 2 +- src/wrapped/generated/wrappedlibzundefs.h | 2 +- src/wrapped/generated/wrappedlzmadefs.h | 2 +- src/wrapped/generated/wrappedlzmatypes.h | 2 +- src/wrapped/generated/wrappedlzmaundefs.h | 2 +- src/wrapped/generated/wrappedmpg123defs.h | 2 +- src/wrapped/generated/wrappedmpg123types.h | 2 +- src/wrapped/generated/wrappedmpg123undefs.h | 2 +- src/wrapped/generated/wrappednotifydefs.h | 2 +- src/wrapped/generated/wrappednotifytypes.h | 2 +- src/wrapped/generated/wrappednotifyundefs.h | 2 +- src/wrapped/generated/wrappednsldefs.h | 2 +- src/wrapped/generated/wrappednsltypes.h | 2 +- src/wrapped/generated/wrappednslundefs.h | 2 +- src/wrapped/generated/wrappednspr4defs.h | 2 +- src/wrapped/generated/wrappednspr4types.h | 2 +- src/wrapped/generated/wrappednspr4undefs.h | 2 +- src/wrapped/generated/wrappednss3defs.h | 2 +- src/wrapped/generated/wrappednss3types.h | 2 +- src/wrapped/generated/wrappednss3undefs.h | 2 +- src/wrapped/generated/wrappednssutil3defs.h | 2 +- src/wrapped/generated/wrappednssutil3types.h | 2 +- src/wrapped/generated/wrappednssutil3undefs.h | 2 +- src/wrapped/generated/wrappedopenaldefs.h | 2 +- src/wrapped/generated/wrappedopenaltypes.h | 2 +- src/wrapped/generated/wrappedopenalundefs.h | 2 +- src/wrapped/generated/wrappedopencldefs.h | 2 +- src/wrapped/generated/wrappedopencltypes.h | 2 +- src/wrapped/generated/wrappedopenclundefs.h | 2 +- src/wrapped/generated/wrappedp11kitdefs.h | 2 +- src/wrapped/generated/wrappedp11kittypes.h | 2 +- src/wrapped/generated/wrappedp11kitundefs.h | 2 +- src/wrapped/generated/wrappedpamdefs.h | 2 +- src/wrapped/generated/wrappedpamtypes.h | 2 +- src/wrapped/generated/wrappedpamundefs.h | 2 +- src/wrapped/generated/wrappedpangocairodefs.h | 2 +- .../generated/wrappedpangocairotypes.h | 2 +- .../generated/wrappedpangocairoundefs.h | 2 +- src/wrapped/generated/wrappedpangodefs.h | 2 +- src/wrapped/generated/wrappedpangoft2defs.h | 2 +- src/wrapped/generated/wrappedpangoft2types.h | 2 +- src/wrapped/generated/wrappedpangoft2undefs.h | 2 +- src/wrapped/generated/wrappedpangotypes.h | 2 +- src/wrapped/generated/wrappedpangoundefs.h | 2 +- src/wrapped/generated/wrappedplc4defs.h | 2 +- src/wrapped/generated/wrappedplc4types.h | 2 +- src/wrapped/generated/wrappedplc4undefs.h | 2 +- src/wrapped/generated/wrappedplds4defs.h | 2 +- src/wrapped/generated/wrappedplds4types.h | 2 +- src/wrapped/generated/wrappedplds4undefs.h | 2 +- src/wrapped/generated/wrappedpng16defs.h | 2 +- src/wrapped/generated/wrappedpng16types.h | 2 +- src/wrapped/generated/wrappedpng16undefs.h | 2 +- src/wrapped/generated/wrappedpsl5defs.h | 2 +- src/wrapped/generated/wrappedpsl5types.h | 2 +- src/wrapped/generated/wrappedpsl5undefs.h | 2 +- src/wrapped/generated/wrappedpulsedefs.h | 2 +- .../generated/wrappedpulsemainloopglibdefs.h | 2 +- .../generated/wrappedpulsemainloopglibtypes.h | 2 +- .../wrappedpulsemainloopglibundefs.h | 2 +- .../generated/wrappedpulsesimpledefs.h | 2 +- .../generated/wrappedpulsesimpletypes.h | 2 +- .../generated/wrappedpulsesimpleundefs.h | 2 +- src/wrapped/generated/wrappedpulsetypes.h | 2 +- src/wrapped/generated/wrappedpulseundefs.h | 2 +- src/wrapped/generated/wrappedsdl1defs.h | 2 +- src/wrapped/generated/wrappedsdl1imagedefs.h | 2 +- src/wrapped/generated/wrappedsdl1imagetypes.h | 2 +- .../generated/wrappedsdl1imageundefs.h | 2 +- src/wrapped/generated/wrappedsdl1mixerdefs.h | 2 +- src/wrapped/generated/wrappedsdl1mixertypes.h | 2 +- .../generated/wrappedsdl1mixerundefs.h | 2 +- src/wrapped/generated/wrappedsdl1netdefs.h | 2 +- src/wrapped/generated/wrappedsdl1nettypes.h | 2 +- src/wrapped/generated/wrappedsdl1netundefs.h | 2 +- src/wrapped/generated/wrappedsdl1sounddefs.h | 2 +- src/wrapped/generated/wrappedsdl1soundtypes.h | 2 +- .../generated/wrappedsdl1soundundefs.h | 2 +- src/wrapped/generated/wrappedsdl1ttfdefs.h | 2 +- src/wrapped/generated/wrappedsdl1ttftypes.h | 2 +- src/wrapped/generated/wrappedsdl1ttfundefs.h | 2 +- src/wrapped/generated/wrappedsdl1types.h | 2 +- src/wrapped/generated/wrappedsdl1undefs.h | 2 +- src/wrapped/generated/wrappedsdl2defs.h | 2 +- src/wrapped/generated/wrappedsdl2imagedefs.h | 2 +- src/wrapped/generated/wrappedsdl2imagetypes.h | 2 +- .../generated/wrappedsdl2imageundefs.h | 2 +- src/wrapped/generated/wrappedsdl2mixerdefs.h | 2 +- src/wrapped/generated/wrappedsdl2mixertypes.h | 2 +- .../generated/wrappedsdl2mixerundefs.h | 2 +- src/wrapped/generated/wrappedsdl2netdefs.h | 2 +- src/wrapped/generated/wrappedsdl2nettypes.h | 2 +- src/wrapped/generated/wrappedsdl2netundefs.h | 2 +- src/wrapped/generated/wrappedsdl2ttfdefs.h | 2 +- src/wrapped/generated/wrappedsdl2ttftypes.h | 2 +- src/wrapped/generated/wrappedsdl2ttfundefs.h | 2 +- src/wrapped/generated/wrappedsdl2types.h | 2 +- src/wrapped/generated/wrappedsdl2undefs.h | 2 +- src/wrapped/generated/wrappedsecret1defs.h | 2 +- src/wrapped/generated/wrappedsecret1types.h | 2 +- src/wrapped/generated/wrappedsecret1undefs.h | 2 +- src/wrapped/generated/wrappedselinuxdefs.h | 2 +- src/wrapped/generated/wrappedselinuxtypes.h | 2 +- src/wrapped/generated/wrappedselinuxundefs.h | 2 +- src/wrapped/generated/wrappedsmime3defs.h | 2 +- src/wrapped/generated/wrappedsmime3types.h | 2 +- src/wrapped/generated/wrappedsmime3undefs.h | 2 +- src/wrapped/generated/wrappedsmpeg2defs.h | 2 +- src/wrapped/generated/wrappedsmpeg2types.h | 2 +- src/wrapped/generated/wrappedsmpeg2undefs.h | 2 +- src/wrapped/generated/wrappedsmpegdefs.h | 2 +- src/wrapped/generated/wrappedsmpegtypes.h | 2 +- src/wrapped/generated/wrappedsmpegundefs.h | 2 +- src/wrapped/generated/wrappedsoftokn3defs.h | 2 +- src/wrapped/generated/wrappedsoftokn3types.h | 2 +- src/wrapped/generated/wrappedsoftokn3undefs.h | 2 +- src/wrapped/generated/wrappedssl3defs.h | 2 +- src/wrapped/generated/wrappedssl3types.h | 2 +- src/wrapped/generated/wrappedssl3undefs.h | 2 +- src/wrapped/generated/wrappedtbbbinddefs.h | 2 +- src/wrapped/generated/wrappedtbbbindtypes.h | 2 +- src/wrapped/generated/wrappedtbbbindundefs.h | 2 +- src/wrapped/generated/wrappedtbbmallocdefs.h | 2 +- .../generated/wrappedtbbmallocproxydefs.h | 2 +- .../generated/wrappedtbbmallocproxytypes.h | 2 +- .../generated/wrappedtbbmallocproxyundefs.h | 2 +- src/wrapped/generated/wrappedtbbmalloctypes.h | 2 +- .../generated/wrappedtbbmallocundefs.h | 2 +- .../generated/wrappedtcmallocminimaldefs.h | 2 +- .../generated/wrappedtcmallocminimaltypes.h | 2 +- .../generated/wrappedtcmallocminimalundefs.h | 2 +- src/wrapped/generated/wrappedudev0defs.h | 2 +- src/wrapped/generated/wrappedudev0types.h | 2 +- src/wrapped/generated/wrappedudev0undefs.h | 2 +- src/wrapped/generated/wrappedudev1defs.h | 2 +- src/wrapped/generated/wrappedudev1types.h | 2 +- src/wrapped/generated/wrappedudev1undefs.h | 2 +- src/wrapped/generated/wrappedunwinddefs.h | 2 +- src/wrapped/generated/wrappedunwindtypes.h | 2 +- src/wrapped/generated/wrappedunwindundefs.h | 2 +- src/wrapped/generated/wrappedutildefs.h | 2 +- src/wrapped/generated/wrappedutiltypes.h | 2 +- src/wrapped/generated/wrappedutilundefs.h | 2 +- src/wrapped/generated/wrappedvorbisfiledefs.h | 2 +- .../generated/wrappedvorbisfiletypes.h | 2 +- .../generated/wrappedvorbisfileundefs.h | 2 +- src/wrapped/generated/wrappedvulkandefs.h | 2 +- src/wrapped/generated/wrappedvulkantypes.h | 2 +- src/wrapped/generated/wrappedvulkanundefs.h | 2 +- .../generated/wrappedwaylandclientdefs.h | 2 +- .../generated/wrappedwaylandclienttypes.h | 2 +- .../generated/wrappedwaylandclientundefs.h | 2 +- .../generated/wrappedwaylandcursordefs.h | 2 +- .../generated/wrappedwaylandcursortypes.h | 2 +- .../generated/wrappedwaylandcursorundefs.h | 2 +- src/wrapped/generated/wrappedwaylandegldefs.h | 2 +- .../generated/wrappedwaylandegltypes.h | 2 +- .../generated/wrappedwaylandeglundefs.h | 2 +- src/wrapped/generated/wrappedxineramadefs.h | 2 +- src/wrapped/generated/wrappedxineramatypes.h | 2 +- src/wrapped/generated/wrappedxineramaundefs.h | 2 +- src/wrapped/generated/wrappedxkbcommondefs.h | 2 +- src/wrapped/generated/wrappedxkbcommontypes.h | 2 +- .../generated/wrappedxkbcommonundefs.h | 2 +- .../generated/wrappedxkbcommonx11defs.h | 2 +- .../generated/wrappedxkbcommonx11types.h | 2 +- .../generated/wrappedxkbcommonx11undefs.h | 2 +- .../generated/wrappedxkbregistrydefs.h | 2 +- .../generated/wrappedxkbregistrytypes.h | 2 +- .../generated/wrappedxkbregistryundefs.h | 2 +- src/wrapped/generated/wrappedxml2defs.h | 2 +- src/wrapped/generated/wrappedxml2types.h | 2 +- src/wrapped/generated/wrappedxml2undefs.h | 2 +- src/wrapped/generated/wrappedxshmfencedefs.h | 2 +- src/wrapped/generated/wrappedxshmfencetypes.h | 2 +- .../generated/wrappedxshmfenceundefs.h | 2 +- src/wrapped/generated/wrappedxsltdefs.h | 2 +- src/wrapped/generated/wrappedxslttypes.h | 2 +- src/wrapped/generated/wrappedxsltundefs.h | 2 +- src/wrapped/generated/wrapper.c | 12 +- src/wrapped/generated/wrapper.h | 2 +- src/wrapped/wrappedlibdl.c | 46 + src/wrapped/wrappedlibrt.c | 5 + src/wrapped32/generated/converter32.c | 61 + src/wrapped32/generated/converter32.h | 37 + src/wrapped32/generated/functions_list.txt | 365 +++ .../generated/wrappedcrashhandlerdefs32.h | 8 + .../generated/wrappedcrashhandlertypes32.h | 17 + .../generated/wrappedcrashhandlerundefs32.h | 8 + .../generated/wrappedldlinuxdefs32.h | 8 + .../generated/wrappedldlinuxtypes32.h | 21 + .../generated/wrappedldlinuxundefs32.h | 8 + src/wrapped32/generated/wrappedlibcdefs32.h | 8 + src/wrapped32/generated/wrappedlibctypes32.h | 49 + src/wrapped32/generated/wrappedlibcundefs32.h | 8 + src/wrapped32/generated/wrappedlibdldefs32.h | 8 + src/wrapped32/generated/wrappedlibdltypes32.h | 36 + .../generated/wrappedlibdlundefs32.h | 8 + src/wrapped32/generated/wrappedlibmdefs32.h | 8 + src/wrapped32/generated/wrappedlibmtypes32.h | 90 + src/wrapped32/generated/wrappedlibmundefs32.h | 8 + .../generated/wrappedlibpthreaddefs32.h | 8 + .../generated/wrappedlibpthreadtypes32.h | 97 + .../generated/wrappedlibpthreadundefs32.h | 8 + src/wrapped32/generated/wrappedlibrtdefs32.h | 8 + src/wrapped32/generated/wrappedlibrttypes32.h | 17 + .../generated/wrappedlibrtundefs32.h | 8 + src/wrapped32/generated/wrapper32.c | 423 +++ src/wrapped32/generated/wrapper32.h | 200 ++ src/wrapped32/wrappedcrashhandler.c | 32 + src/wrapped32/wrappedcrashhandler_private.h | 49 + src/wrapped32/wrappedldlinux.c | 58 + src/wrapped32/wrappedldlinux_private.h | 25 + src/wrapped32/wrappedlib_init32.h | 325 ++ src/wrapped32/wrappedlibc.c | 2867 +++++++++++++++++ src/wrapped32/wrappedlibc_private.h | 2178 +++++++++++++ src/wrapped32/wrappedlibdl.c | 165 + src/wrapped32/wrappedlibdl_private.h | 15 + src/wrapped32/wrappedlibm.c | 154 + src/wrapped32/wrappedlibm_private.h | 446 +++ src/wrapped32/wrappedlibpthread.c | 97 + src/wrapped32/wrappedlibpthread_private.h | 187 ++ src/wrapped32/wrappedlibrt.c | 80 + src/wrapped32/wrappedlibrt_private.h | 50 + tests32/bash | Bin 0 -> 1367848 bytes tests32/benchfloat | Bin 0 -> 11776 bytes tests32/benchfloat.c | 888 +++++ tests32/extensions/mmx | Bin 0 -> 287144 bytes tests32/extensions/mmx.c | 674 ++++ tests32/extensions/mmx.txt | 106 + tests32/ref01.txt | 1 + tests32/ref02.txt | 1 + tests32/ref03.txt | 1 + tests32/ref04.txt | 1 + tests32/ref05.txt | 6 + tests32/ref06.txt | 4 + tests32/ref07.txt | 1 + tests32/ref08.txt | 1 + tests32/ref09.txt | 2 + tests32/ref10.txt | 10 + tests32/ref11.txt | 8 + tests32/ref12.txt | 4 + tests32/ref13.txt | 8 + tests32/ref14.txt | 5 + tests32/ref15.txt | 1 + tests32/ref16.txt | 1 + tests32/ref17.txt | 564 ++++ tests32/ref17_o2.txt | 840 +++++ tests32/ref18.txt | 2 + tests32/ref19.txt | 222 ++ tests32/ref20.txt | 11 + tests32/ref21.txt | 1 + tests32/ref22.txt | 1248 +++++++ tests32/ref23.txt | 5 + tests32/ref24.txt | 640 ++++ tests32/ref25.txt | 1062 ++++++ tests32/ref26.txt | 810 +++++ tests32/roundtest.h | 114 + tests32/test01 | Bin 0 -> 7360 bytes tests32/test01.c | 19 + tests32/test02 | Bin 0 -> 7268 bytes tests32/test02.c | 9 + tests32/test03 | Bin 0 -> 7180 bytes tests32/test03.c | 7 + tests32/test04 | Bin 0 -> 9976 bytes tests32/test04.c | 7 + tests32/test05 | Bin 0 -> 7384 bytes tests32/test05.c | 62 + tests32/test06 | Bin 0 -> 7724 bytes tests32/test06.c | 55 + tests32/test07 | Bin 0 -> 7220 bytes tests32/test07.c | 20 + tests32/test08 | Bin 0 -> 7312 bytes tests32/test08.c | 36 + tests32/test09 | Bin 0 -> 7316 bytes tests32/test09.c | 20 + tests32/test10 | Bin 0 -> 15844 bytes tests32/test10.cpp | 27 + tests32/test11 | Bin 0 -> 22496 bytes tests32/test11.c | 131 + tests32/test12 | Bin 0 -> 7424 bytes tests32/test12.c | 35 + tests32/test13 | Bin 0 -> 7512 bytes tests32/test13.c | 54 + tests32/test14 | Bin 0 -> 19276 bytes tests32/test14.c | 111 + tests32/test15 | Bin 0 -> 15376 bytes tests32/test15.c | 32 + tests32/test15_dv1.so | Bin 0 -> 14860 bytes tests32/test15_v1.so | Bin 0 -> 14796 bytes tests32/test15_v2.so | Bin 0 -> 14888 bytes tests32/test16 | Bin 0 -> 15368 bytes tests32/test16.c | 32 + tests32/test16_dv1.so | Bin 0 -> 14864 bytes tests32/test16_v1.so | Bin 0 -> 14888 bytes tests32/test16_v2.so | Bin 0 -> 14792 bytes tests32/test17 | Bin 0 -> 140776 bytes tests32/test17.c | 611 ++++ tests32/test17_o2 | Bin 0 -> 251636 bytes tests32/test18 | Bin 0 -> 15672 bytes tests32/test18.c | 30 + tests32/test19 | Bin 0 -> 15676 bytes tests32/test19.c | 148 + tests32/test20 | Bin 0 -> 15544 bytes tests32/test20.c | 48 + tests32/test21 | Bin 0 -> 15060 bytes tests32/test21.c | 41 + tests32/test21_v1.so | Bin 0 -> 14380 bytes tests32/test21_v2.so | Bin 0 -> 14376 bytes tests32/test22 | Bin 0 -> 20872 bytes tests32/test22.c | 70 + tests32/test23 | Bin 0 -> 15016 bytes tests32/test23.c | 52 + tests32/test24 | Bin 0 -> 39860 bytes tests32/test24.c | 104 + tests32/test25 | Bin 0 -> 264064 bytes tests32/test25.c | 130 + tests32/test26 | Bin 0 -> 68564 bytes tests32/test26.c | 116 + x86lib/libgcc_s.so.1 | Bin 0 -> 116256 bytes x86lib/libpng12.so.0 | Bin 0 -> 165756 bytes x86lib/libstdc++.so.5 | Bin 0 -> 757220 bytes x86lib/libstdc++.so.6 | Bin 0 -> 1582360 bytes x86lib/libunwind.so.8 | Bin 0 -> 58788 bytes 914 files changed, 25929 insertions(+), 1024 deletions(-) create mode 100755 rebuild_wrappers_32.py create mode 100644 src/box32.c create mode 100755 src/emu/x86int3.c create mode 100644 src/emu/x86syscall_32.c create mode 100644 src/include/box32context.h create mode 100755 src/include/myalign32.h create mode 100644 src/library_list_32.h create mode 100644 src/library_list_static_32.h create mode 100755 src/libtools/myalign32.c create mode 100755 src/libtools/myalign64_32.c create mode 100644 src/libtools/signal32.c create mode 100755 src/libtools/threads32.c create mode 100644 src/tools/box32stack.c create mode 100644 src/wrapped32/generated/converter32.c create mode 100644 src/wrapped32/generated/converter32.h create mode 100644 src/wrapped32/generated/functions_list.txt create mode 100644 src/wrapped32/generated/wrappedcrashhandlerdefs32.h create mode 100644 src/wrapped32/generated/wrappedcrashhandlertypes32.h create mode 100644 src/wrapped32/generated/wrappedcrashhandlerundefs32.h create mode 100644 src/wrapped32/generated/wrappedldlinuxdefs32.h create mode 100644 src/wrapped32/generated/wrappedldlinuxtypes32.h create mode 100644 src/wrapped32/generated/wrappedldlinuxundefs32.h create mode 100644 src/wrapped32/generated/wrappedlibcdefs32.h create mode 100644 src/wrapped32/generated/wrappedlibctypes32.h create mode 100644 src/wrapped32/generated/wrappedlibcundefs32.h create mode 100644 src/wrapped32/generated/wrappedlibdldefs32.h create mode 100644 src/wrapped32/generated/wrappedlibdltypes32.h create mode 100644 src/wrapped32/generated/wrappedlibdlundefs32.h create mode 100644 src/wrapped32/generated/wrappedlibmdefs32.h create mode 100644 src/wrapped32/generated/wrappedlibmtypes32.h create mode 100644 src/wrapped32/generated/wrappedlibmundefs32.h create mode 100644 src/wrapped32/generated/wrappedlibpthreaddefs32.h create mode 100644 src/wrapped32/generated/wrappedlibpthreadtypes32.h create mode 100644 src/wrapped32/generated/wrappedlibpthreadundefs32.h create mode 100644 src/wrapped32/generated/wrappedlibrtdefs32.h create mode 100644 src/wrapped32/generated/wrappedlibrttypes32.h create mode 100644 src/wrapped32/generated/wrappedlibrtundefs32.h create mode 100644 src/wrapped32/generated/wrapper32.c create mode 100644 src/wrapped32/generated/wrapper32.h create mode 100755 src/wrapped32/wrappedcrashhandler.c create mode 100755 src/wrapped32/wrappedcrashhandler_private.h create mode 100755 src/wrapped32/wrappedldlinux.c create mode 100755 src/wrapped32/wrappedldlinux_private.h create mode 100644 src/wrapped32/wrappedlib_init32.h create mode 100755 src/wrapped32/wrappedlibc.c create mode 100755 src/wrapped32/wrappedlibc_private.h create mode 100755 src/wrapped32/wrappedlibdl.c create mode 100755 src/wrapped32/wrappedlibdl_private.h create mode 100755 src/wrapped32/wrappedlibm.c create mode 100755 src/wrapped32/wrappedlibm_private.h create mode 100755 src/wrapped32/wrappedlibpthread.c create mode 100755 src/wrapped32/wrappedlibpthread_private.h create mode 100755 src/wrapped32/wrappedlibrt.c create mode 100755 src/wrapped32/wrappedlibrt_private.h create mode 100755 tests32/bash create mode 100755 tests32/benchfloat create mode 100755 tests32/benchfloat.c create mode 100755 tests32/extensions/mmx create mode 100644 tests32/extensions/mmx.c create mode 100644 tests32/extensions/mmx.txt create mode 100644 tests32/ref01.txt create mode 100644 tests32/ref02.txt create mode 100644 tests32/ref03.txt create mode 100644 tests32/ref04.txt create mode 100644 tests32/ref05.txt create mode 100644 tests32/ref06.txt create mode 100644 tests32/ref07.txt create mode 100644 tests32/ref08.txt create mode 100644 tests32/ref09.txt create mode 100644 tests32/ref10.txt create mode 100644 tests32/ref11.txt create mode 100644 tests32/ref12.txt create mode 100644 tests32/ref13.txt create mode 100644 tests32/ref14.txt create mode 100644 tests32/ref15.txt create mode 100644 tests32/ref16.txt create mode 100644 tests32/ref17.txt create mode 100644 tests32/ref17_o2.txt create mode 100644 tests32/ref18.txt create mode 100644 tests32/ref19.txt create mode 100644 tests32/ref20.txt create mode 100644 tests32/ref21.txt create mode 100644 tests32/ref22.txt create mode 100644 tests32/ref23.txt create mode 100644 tests32/ref24.txt create mode 100644 tests32/ref25.txt create mode 100644 tests32/ref26.txt create mode 100644 tests32/roundtest.h create mode 100755 tests32/test01 create mode 100644 tests32/test01.c create mode 100755 tests32/test02 create mode 100644 tests32/test02.c create mode 100755 tests32/test03 create mode 100644 tests32/test03.c create mode 100755 tests32/test04 create mode 100644 tests32/test04.c create mode 100755 tests32/test05 create mode 100755 tests32/test05.c create mode 100755 tests32/test06 create mode 100644 tests32/test06.c create mode 100755 tests32/test07 create mode 100644 tests32/test07.c create mode 100755 tests32/test08 create mode 100755 tests32/test08.c create mode 100755 tests32/test09 create mode 100755 tests32/test09.c create mode 100755 tests32/test10 create mode 100644 tests32/test10.cpp create mode 100755 tests32/test11 create mode 100644 tests32/test11.c create mode 100755 tests32/test12 create mode 100755 tests32/test12.c create mode 100755 tests32/test13 create mode 100644 tests32/test13.c create mode 100755 tests32/test14 create mode 100755 tests32/test14.c create mode 100755 tests32/test15 create mode 100644 tests32/test15.c create mode 100755 tests32/test15_dv1.so create mode 100755 tests32/test15_v1.so create mode 100755 tests32/test15_v2.so create mode 100755 tests32/test16 create mode 100644 tests32/test16.c create mode 100755 tests32/test16_dv1.so create mode 100755 tests32/test16_v1.so create mode 100755 tests32/test16_v2.so create mode 100755 tests32/test17 create mode 100644 tests32/test17.c create mode 100755 tests32/test17_o2 create mode 100755 tests32/test18 create mode 100644 tests32/test18.c create mode 100755 tests32/test19 create mode 100644 tests32/test19.c create mode 100755 tests32/test20 create mode 100644 tests32/test20.c create mode 100755 tests32/test21 create mode 100644 tests32/test21.c create mode 100755 tests32/test21_v1.so create mode 100755 tests32/test21_v2.so create mode 100755 tests32/test22 create mode 100644 tests32/test22.c create mode 100755 tests32/test23 create mode 100644 tests32/test23.c create mode 100755 tests32/test24 create mode 100644 tests32/test24.c create mode 100755 tests32/test25 create mode 100644 tests32/test25.c create mode 100755 tests32/test26 create mode 100644 tests32/test26.c create mode 100755 x86lib/libgcc_s.so.1 create mode 100644 x86lib/libpng12.so.0 create mode 100644 x86lib/libstdc++.so.5 create mode 100755 x86lib/libstdc++.so.6 create mode 100644 x86lib/libunwind.so.8 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0aa5e022..ca809f9f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,7 +28,7 @@ jobs: fail-fast: false matrix: platform: [X64, OTHER_ARM, RISCV, RPI4ARM64, RPI5ARM64, RK3326, RK3399, RK3588, PHYTIUM, SD845, SD888, ADLINK, ARM64, ANDROID, TERMUX, LARCH64] - type: [Release, Trace, StaticBuild] + type: [Release, Trace, StaticBuild, Box32] os: [ubuntu-latest] include: - platform: TEGRAX1 @@ -46,6 +46,10 @@ jobs: type: StaticBuild - platform: X64 type: StaticBuild + - platform: ANDROID + type: Box32 + - platform: TERMUX + type: Box32 runs-on: ${{ matrix.os }} steps: @@ -119,14 +123,22 @@ jobs: echo BOX64_BUILD_TYPE=Release >> $GITHUB_ENV echo BOX64_HAVE_TRACE=0 >> $GITHUB_ENV echo BOX64_STATICBUILD=0 >> $GITHUB_ENV + echo BOX64_BOX32=0 >> $GITHUB_ENV elif [[ ${{ matrix.type }} == 'StaticBuild' ]]; then echo BOX64_BUILD_TYPE=Release >> $GITHUB_ENV echo BOX64_HAVE_TRACE=0 >> $GITHUB_ENV echo BOX64_STATICBUILD=1 >> $GITHUB_ENV + echo BOX64_BOX32=0 >> $GITHUB_ENV + elif [[ ${{ matrix.type }} == 'Box32' ]]; then + echo BOX64_BUILD_TYPE=Release >> $GITHUB_ENV + echo BOX64_HAVE_TRACE=0 >> $GITHUB_ENV + echo BOX64_STATICBUILD=0 >> $GITHUB_ENV + echo BOX64_BOX32=1 >> $GITHUB_ENV else echo BOX64_BUILD_TYPE=RelWithDebInfo >> $GITHUB_ENV echo BOX64_HAVE_TRACE=1 >> $GITHUB_ENV echo BOX64_STATICBUILD=0 >> $GITHUB_ENV + echo BOX64_BOX32=0 >> $GITHUB_ENV fi - name: "Display Build info" @@ -136,6 +148,7 @@ jobs: echo "Build type: ${{ env.BOX64_BUILD_TYPE }}" echo "Trace Enabled: ${{ env.BOX64_HAVE_TRACE }}" echo "StaticBuild Enabled: ${{ env.BOX64_STATICBUILD }}" + echo "Box32 Enabled: ${{ env.BOX64_BOX32 }}" - name: "Build Box64" run: | @@ -147,11 +160,13 @@ jobs: -DCMAKE_BUILD_TYPE=${{ env.BOX64_BUILD_TYPE }}\ -DHAVE_TRACE=${{ env.BOX64_HAVE_TRACE }}\ -DSTATICBUILD=${{ env.BOX64_STATICBUILD }}\ + -DBOX32=${{ env.BOX64_BOX32 }}\ -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON\ -DCI=${{ matrix.platform != 'ANDROID' }} make -j$(nproc) VERBOSE=1 - name: "Test Box64" + ## Qemu doesn't like Box32 test, so disabling it on non-native platform if: ${{ matrix.platform != 'TEGRAX1' }} run: | if [[ ${{ matrix.platform }} != 'X64' ]]; then @@ -162,6 +177,7 @@ jobs: cd build if [[ ${{ matrix.platform }} == 'RISCV' ]]; then + if [[ ${{ env.BOX64_BOX32 }} != 1 ]]; then INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ ctest -j$(nproc) --output-on-failure INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ BOX64_DYNAREC_TEST=2 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ QEMU_CPU=rv64,v=false BOX64_DYNAREC=0 ctest -j$(nproc) --output-on-failure @@ -173,20 +189,29 @@ jobs: INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ BOX64_DYNAREC_TEST=2 QEMU_CPU=rv64,v=true,vlen=256,vext_spec=v1.0 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ QEMU_CPU=rv64,v=false,xtheadba=true,xtheadba=true,xtheadbb=true,xtheadbs=true,xtheadcondmov=true,xtheadmemidx=true,xtheadmempair=true,xtheadfmemidx=true,xtheadmac=true,xtheadfmv=true ctest -j$(nproc) --output-on-failure INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ BOX64_DYNAREC_TEST=2 QEMU_CPU=rv64,v=false,xtheadba=true,xtheadba=true,xtheadbb=true,xtheadbs=true,xtheadcondmov=true,xtheadmemidx=true,xtheadmempair=true,xtheadfmemidx=true,xtheadmac=true,xtheadfmv=true ctest -j$(nproc) --repeat until-pass:20 --output-on-failure + fi elif [[ ${{ matrix.platform }} == 'LARCH64' ]]; then + if [[ ${{ env.BOX64_BOX32 }} != 1 ]]; then INTERPRETER=qemu-loongarch64-static QEMU_LD_PREFIX=/usr/loongarch64-linux-gnu/ BOX64_DYNAREC_LA64NOEXT=1 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure INTERPRETER=qemu-loongarch64-static QEMU_LD_PREFIX=/usr/loongarch64-linux-gnu/ BOX64_DYNAREC_TEST=2 BOX64_DYNAREC_LA64NOEXT=1 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure INTERPRETER=qemu-loongarch64-static QEMU_LD_PREFIX=/usr/loongarch64-linux-gnu/ BOX64_DYNAREC=0 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure + fi elif [[ ${{ matrix.platform }} == 'ANDROID' ]]; then + if [[ ${{ env.BOX64_BOX32 }} != 1 ]]; then INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/system/lib64 BOX64_DYNAREC=0 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/system/lib64 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure + fi elif [[ ${{ matrix.platform }} == 'TERMUX' ]]; then + if [[ ${{ env.BOX64_BOX32 }} != 1 ]]; then INTERPRETER=qemu-aarch64-static QEMU_SET_ENV=LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib QEMU_LD_PREFIX=/system/lib64:/data/data/com.termux/files/usr/lib BOX64_DYNAREC=0 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure INTERPRETER=qemu-aarch64-static QEMU_SET_ENV=LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib QEMU_LD_PREFIX=/system/lib64:/data/data/com.termux/files/usr/lib ctest -j$(nproc) --repeat until-pass:20 --output-on-failure + fi elif [[ ${{ matrix.platform }} != 'X64' ]]; then # AArch64 - INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ BOX64_DYNAREC=0 ctest -j$(nproc) --output-on-failure - INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ ctest -j$(nproc) --output-on-failure + INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ BOX64_DYNAREC=0 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure + INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ ctest -j$(nproc) --repeat until-pass:20 --output-on-failure + if [[ ${{ env.BOX64_BOX32 }} != 1 ]]; then INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ BOX64_DYNAREC_TEST=2 ctest -j$(nproc) --output-on-failure + fi else ctest -j$(nproc) --output-on-failure fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 1715d9fb..31a39121 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,7 +37,7 @@ option(BAD_SIGNAL "Set to ON to activate the workaround for incoherent si_info o option(SW64 "Set ON if targeting an SW64 based device" ${SW64}) option(CI "Set to ON if running in CI" ${CI}) option(WITH_MOLD "Set to ON to use with mold" ${WITH_MOLD}) -option(BOX32 "Set to ON to add Linux 32bits support (experimental, do not use)" ${BOX32}) +option(BOX32 "Set to ON to add Linux 32bits support (experimental, do not use)" ${BO64}) if(TERMUX) set(TERMUX_PATH "/data/data/com.termux/files") @@ -302,6 +302,11 @@ include_directories( "${BOX64_ROOT}/src" "${BOX64_ROOT}/src/wrapped/generated" ) +if(BOX32) + include_directories( + "${BOX64_ROOT}/src/wrapped32/generated" + ) +endif() # git_head.h is a generated file set_source_files_properties( @@ -330,7 +335,6 @@ set(ELFLOADER_SRC "${BOX64_ROOT}/src/emu/x64run_private.c" "${BOX64_ROOT}/src/emu/x64shaext.c" "${BOX64_ROOT}/src/emu/x64syscall.c" - "${BOX64_ROOT}/src/emu/x86syscall.c" "${BOX64_ROOT}/src/emu/x64tls.c" "${BOX64_ROOT}/src/emu/x64trace.c" "${BOX64_ROOT}/src/librarian/librarian.c" @@ -365,10 +369,24 @@ if(NOT STATICBUILD) endif() if(BOX32) list(APPEND ELFLOADER_SRC + "${BOX64_ROOT}/src/box32.c" "${BOX64_ROOT}/src/elfs/elfhash32.c" "${BOX64_ROOT}/src/elfs/elfloader32.c" "${BOX64_ROOT}/src/elfs/elfparser32.c" "${BOX64_ROOT}/src/elfs/elfload_dump32.c" + "${BOX64_ROOT}/src/tools/box32stack.c" + "${BOX64_ROOT}/src/emu/x86int3.c" + "${BOX64_ROOT}/src/libtools/myalign32.c" + "${BOX64_ROOT}/src/libtools/myalign64_32.c" + "${BOX64_ROOT}/src/libtools/signal32.c" + "${BOX64_ROOT}/src/libtools/threads32.c" + "${BOX64_ROOT}/src/emu/x86syscall_32.c" + "${BOX64_ROOT}/src/wrapped32/generated/wrapper32.c" + "${BOX64_ROOT}/src/wrapped32/generated/converter32.c" + ) +else() + list(APPEND ELFLOADER_SRC + "${BOX64_ROOT}/src/emu/x86syscall.c" ) endif() if(NOT ANDROID) @@ -725,6 +743,57 @@ endif () add_custom_target(WRAPPERS DEPENDS "${BOX64_ROOT}/src/wrapped/generated/functions_list.txt") #add_custom_target(PRINTER DEPENDS "${BOX64_ROOT}/src/dynarec/last_run.txt") +if(BOX32) + if(STATICBUILD) + set(WRAPPEDS32 + "${BOX64_ROOT}/src/wrapped32/wrappedldlinux.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibc.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibdl.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibm.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibpthread.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibrt.c" + ) + else() + set(WRAPPEDS32 + "${BOX64_ROOT}/src/wrapped32/wrappedldlinux.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibc.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibdl.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibm.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibpthread.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibrt.c" + "${BOX64_ROOT}/src/wrapped32/wrappedcrashhandler.c" + ) + endif() + string(REPLACE ".c" "_private.h" MODROOT ${BOX64_ROOT}) + #set(WRAPPEDS32_HEAD "${BOX64_ROOT}/src/wrapped/wrappedd3dadapter9_genvate.h") + foreach(A ${WRAPPEDS32}) + string(REPLACE ".c" "_private.h" C ${A}) + string(REPLACE "${MODROOT}" "${BOX64_ROOT}" B ${C}) + set(WRAPPEDS32_HEAD ${WRAPPEDS32_HEAD} ${B}) + set_source_files_properties(${A} PROPERTIES OBJECT_DEPENDS ${B}) + endforeach() + + set(WRAPPER32 "${BOX64_ROOT}/src/wrapped32/generated/wrapper32.c" "${BOX64_ROOT}/src/wrapped32/generated/wrapper32.h") + + if(NOT CI) + add_custom_command( + OUTPUT "${BOX64_ROOT}/src/wrapped32/generated/functions_list.txt" + COMMAND "${PYTHON_EXECUTABLE}" "${BOX64_ROOT}/rebuild_wrappers_32.py" + "${BOX64_ROOT}" + "PANDORA" "HAVE_LD80BITS" "NOALIGN" "HAVE_TRACE" "ANDROID" "TERMUX" "STATICBUILD" "--" + ${WRAPPEDS32_HEAD} + MAIN_DEPENDENCY "${BOX64_ROOT}/rebuild_wrappers_32.py" + DEPENDS ${WRAPPEDS32} ${WRAPPEDS32_HEAD} + BYPRODUCTS ${WRAPPER32} + ) + endif() + + add_custom_target(WRAPPERS32 DEPENDS "${BOX64_ROOT}/src/wrapped32/generated/functions_list.txt") +else() + set(WRAPPEDS32) +endif() + + if(DYNAREC) set(DYNAREC_SRC "${BOX64_ROOT}/src/dynarec/dynablock.c" @@ -885,6 +954,11 @@ if(DYNAREC) ${DYNAREC_PASS} "${BOX64_ROOT}/src/dynarec/dynarec_native_pass.c" ) + if(BOX32) + list(APPEND DYNAREC_PASS + "${BOX64_ROOT}/src/wrapped32/generated/wrapper32.h" + ) + endif() add_library(dynarec_native OBJECT ${DYNAREC_SRC}) @@ -902,6 +976,12 @@ if(DYNAREC) add_dependencies(native_pass1 WRAPPERS) add_dependencies(native_pass2 WRAPPERS) add_dependencies(native_pass3 WRAPPERS) + if(BOX32) + add_dependencies(native_pass0 WRAPPERS32) + add_dependencies(native_pass1 WRAPPERS32) + add_dependencies(native_pass2 WRAPPERS32) + add_dependencies(native_pass3 WRAPPERS32) + endif() add_library(dynarec STATIC $ @@ -918,21 +998,24 @@ if(DYNAREC) add_custom_command( OUTPUT "${BOX64_ROOT}/src/git_head.h" COMMAND sh -c "echo \\\#define GITREV \\\"$(git rev-parse --short HEAD)\\\">\"${BOX64_ROOT}/src/git_head.h\"" - DEPENDS dynarec ${ELFLOADER_SRC} ${INTERPRETER} ${WRAPPEDS} + DEPENDS dynarec ${ELFLOADER_SRC} ${INTERPRETER} ${WRAPPEDS} ${WRAPPEDS32} VERBATIM) else() add_custom_command( OUTPUT "${BOX64_ROOT}/src/git_head.h" COMMAND sh -c "echo \\\#define GITREV \\\"$(git rev-parse --short HEAD)\\\">\"${BOX64_ROOT}/src/git_head.h\"" - DEPENDS ${ELFLOADER_SRC} ${INTERPRETER} ${WRAPPEDS} + DEPENDS ${ELFLOADER_SRC} ${INTERPRETER} ${WRAPPEDS} ${WRAPPEDS32} VERBATIM) endif() add_library(interpreter OBJECT ${INTERPRETER}) -add_executable(${BOX64} ${ELFLOADER_SRC} ${WRAPPEDS} "${BOX64_ROOT}/src/git_head.h") +add_executable(${BOX64} ${ELFLOADER_SRC} ${WRAPPEDS} ${WRAPPEDS32} "${BOX64_ROOT}/src/git_head.h") set_target_properties(${BOX64} PROPERTIES ENABLE_EXPORTS ON) add_dependencies(${BOX64} WRAPPERS) +if(BOX32) + add_dependencies(${BOX64} WRAPPERS32) +endif() #add_dependencies(${BOX64} PRINTER) #target_link_libraries(${BOX64} c m dl rt pthread resolv) if(STATICBUILD) @@ -1037,6 +1120,24 @@ if(NOT _x86 AND NOT _x86_64) install(FILES ${CMAKE_SOURCE_DIR}/x64lib/libmbedcrypto.so.3 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) endif() endif() + if(BOX32) + set(INSTALL_PATH "/usr/lib/i386-linux-gnu/") + if(NOT NO_LIB_INSTALL) + if(NOT TERMUX) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libstdc++.so.5 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libstdc++.so.6 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libgcc_s.so.1 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libpng12.so.0 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libunwind.so.8 DESTINATION ${INSTALL_PATH}) + else() + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libstdc++.so.5 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libstdc++.so.6 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libgcc_s.so.1 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libpng12.so.0 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libunwind.so.8 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + endif() + endif() + endif() endif() if(NOT TARGET uninstall) @@ -1149,6 +1250,8 @@ add_test(cppThreads ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64 -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref10.txt -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) +set_tests_properties(cppThreads PROPERTIES ENVIRONMENT "BOX64_LD_LIBRARY_PATH=${CMAKE_SOURCE_DIR}/x64lib") + add_test(tlsData ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests/test11 -D TEST_OUTPUT=tmpfile11.txt -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref11.txt @@ -1425,3 +1528,139 @@ foreach(file ${extension_tests}) -P ${CMAKE_SOURCE_DIR}/runTest.cmake) endforeach() endif() + +if(BOX32) + add_test(NAME bootSyscall_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test01 -D TEST_OUTPUT=tmpfile01.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref01.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME bootSyscallC_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test02 -D TEST_OUTPUT=tmpfile02.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref02.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME printf_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test03 -D TEST_OUTPUT=tmpfile03.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref03.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME args_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test04 -D TEST_ARGS2=yeah -D TEST_OUTPUT=tmpfile04.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref04.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME maths1_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test05 -D TEST_ARGS2=7 -D TEST_OUTPUT=tmpfile05.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref05.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME threadsStart_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test06 -D TEST_OUTPUT=tmpfile06.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref06.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME trig_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test07 -D TEST_OUTPUT=tmpfile07.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref07.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME pi_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test08 -D TEST_OUTPUT=tmpfile08.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref08.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME fork_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test09 -D TEST_OUTPUT=tmpfile09.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref09.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + if(NOT CI) + add_test(NAME cppThreads_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test10 -D TEST_OUTPUT=tmpfile10.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref10.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + set_tests_properties(cppThreads_32bits PROPERTIES ENVIRONMENT "BOX64_LD_LIBRARY_PATH=${CMAKE_SOURCE_DIR}/x86lib") + endif() + + add_test(NAME tlsData_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test11 -D TEST_OUTPUT=tmpfile11.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref11.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME fpu_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test12 -D TEST_OUTPUT=tmpfile12.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref12.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME contexts_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test13 -D TEST_OUTPUT=tmpfile13.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref13.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + if(NOT LD80BITS) + add_test(NAME conditionalThreads_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test14 -D TEST_OUTPUT=tmpfile14.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref14.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + endif() + + add_test(NAME linkingIndirectNoversion_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test15 -D TEST_OUTPUT=tmpfile15.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref15.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME linkingIndirectVersion_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test16 -D TEST_OUTPUT=tmpfile16.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref16.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME sse_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test17 -D TEST_OUTPUT=tmpfile17.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref17.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + set_tests_properties(sse_32bits PROPERTIES ENVIRONMENT "BOX64_DYNAREC_FASTNAN=0;BOX64_DYNAREC_FASTROUND=0") + + add_test(NAME longjumpInSignals_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test18 -D TEST_OUTPUT=tmpfile18.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref18.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME x87_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test19 -D TEST_OUTPUT=tmpfile19.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref19.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME idiv_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test20 -D TEST_OUTPUT=tmpfile20.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref20.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME multiple_dlopen_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test21 -D TEST_OUTPUT=tmpfile21.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref21.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + file(GLOB extension_tests "${CMAKE_SOURCE_DIR}/tests32/extensions/*.c") + foreach(file ${extension_tests}) + get_filename_component(testname "${file}" NAME_WE) + add_test(NAME "${testname}_32bits" COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/extensions/${testname} -D TEST_OUTPUT=tmpfile-${testname}.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/extensions/${testname}.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake) + endforeach() + + #add_test(NAME sse_optimized_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + # -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test17_o2 -D TEST_OUTPUT=tmpfile17_o2.txt + # -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref17_o2.txt + # -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + #set_tests_properties(sse_optimized_32bits PROPERTIES ENVIRONMENT "BOX64_DYNAREC_FASTNAN=0;BOX64_DYNAREC_FASTROUND=0") + + add_test(bswap_32bits ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test23 -D TEST_OUTPUT=tmpfile23.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref23.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) +endif() \ No newline at end of file diff --git a/README.md b/README.md index 0cc74804..b178d10a 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Box64 integrates with DynaRec (dynamic recompiler) for the ARM64 and RV64 platfo Some x64 internal opcodes use parts of "Realmode X86 Emulator Library", see [x64primop.c](src/emu/x64primop.c) for copyright details +Box64 now have an option Box32 part, that allows to run 32bits x86 program on 64bits system. Note that this option is experimental and a work in progress. Basically, nothing work with it yet, so unless you plan an helping with the development, don't bother enabling it (and don't create issue ticket about box32 not being able to run X or Y program). The main goals with box32 is to be able to run SteamCMD first. Then Linux Steam and Wine/Proton might come later. + Logo and Icon made by @grayduck, thanks! diff --git a/rebuild_wrappers.py b/rebuild_wrappers.py index 7e284194..ab6cb1da 100755 --- a/rebuild_wrappers.py +++ b/rebuild_wrappers.py @@ -1469,7 +1469,7 @@ def main(root: str, files: Iterable[Filename], ver: str): inttext = "" file.write("\n") for k1 in simple_idxs: - file.write("#{inttext}if defined({k1})\nint isSimpleWrapper(wrapper_t fun) {{\n".format(inttext=inttext, k1=k1)) + file.write("#{inttext}if defined({k1})\nint isSimpleWrapper(wrapper_t fun) {{\n\tif (box64_is32bits) return 0;\n".format(inttext=inttext, k1=k1)) inttext = "el" for k in simple_idxs[k1]: if k != str(Clauses()): @@ -1479,9 +1479,10 @@ def main(root: str, files: Iterable[Filename], ver: str): if k != str(Clauses()): file.write("#endif\n") file.write("\treturn 0;\n}\n") - file.write("\n#else\nint isSimpleWrapper(wrapper_t fun) {\n\treturn 0;\n}\n#endif\n") + file.write("#else\nint isSimpleWrapper(wrapper_t fun) {\n\treturn 0;\n}\n#endif\n") # Write the isRetX87Wrapper function + file.write("\nint isRetX87Wrapper32(wrapper_t fun)\n#ifndef BOX32\n{ return 0; }\n#else\n ;\n#endif\n") file.write("\nint isRetX87Wrapper(wrapper_t fun) {\n") for k in retx87_idxs: if k != str(Clauses()): @@ -1565,6 +1566,6 @@ if __name__ == '__main__': if v == "--": limit.append(i) Define.defines = list(map(DefineType, sys.argv[2:limit[0]])) - if main(sys.argv[1], sys.argv[limit[0]+1:], "2.4.0.21") != 0: + if main(sys.argv[1], sys.argv[limit[0]+1:], "2.4.0.23") != 0: exit(2) exit(0) diff --git a/rebuild_wrappers_32.py b/rebuild_wrappers_32.py new file mode 100755 index 00000000..d5b7b6c6 --- /dev/null +++ b/rebuild_wrappers_32.py @@ -0,0 +1,1616 @@ +#!/usr/bin/env python3 + +import os +import sys + +try: + assert(sys.version_info.major == 3) + if sys.version_info.minor >= 9: + # Python 3.9+ + from typing import Any, Generic, NewType, Optional, TypeVar, Union, final + from collections.abc import Callable, Iterable, Sequence + Dict = dict + List = list + Type = type + Tuple = tuple + elif sys.version_info.minor >= 8: + # Python [3.8, 3.9) + from typing import Any, Callable, Dict, Generic, Iterable, List, NewType, Optional, Sequence, Tuple, Type, TypeVar, Union, final + elif (sys.version_info.minor >= 5) and (sys.version_info.micro >= 2): + # Python [3.5.2, 3.8) + from typing import Any, Callable, Dict, Generic, Iterable, List, NewType, Optional, Sequence, Tuple, Type, TypeVar, Union + final = lambda fun: fun # type: ignore + elif sys.version_info.minor >= 5: + # Python [3.5, 3.5.2) + from typing import Any, Callable, Dict, Generic, Iterable, List, Optional, Sequence, Tuple, Type, TypeVar, Union + def NewType(_, b): return b # type: ignore + final = lambda fun: fun # type: ignore + else: + # Python < 3.5 + #print("Your Python version does not have the typing module, fallback to empty 'types'") + # Dummies + class GTDummy: + def __getitem__(self, _): + return self + Any = GTDummy() # type: ignore + Callable = GTDummy() # type: ignore + Dict = GTDummy() # type: ignore + Generic = GTDummy() # type: ignore + Iterable = GTDummy() # type: ignore + List = GTDummy() # type: ignore + def NewType(_, b): return b # type: ignore + Optional = GTDummy() # type: ignore + Sequence = GTDummy() # type: ignore + Tuple = GTDummy() # type: ignore + Type = GTDummy() # type: ignore + def TypeVar(T): return object # type: ignore + Union = GTDummy() # type: ignore + final = lambda fun: fun # type: ignore +except ImportError: + print("It seems your Python version is quite broken...") + assert(False) + +""" +Generates all files in src/wrapped/generated +=== + +TL;DR: Automagically creates type definitions (/.F.+/ functions/typedefs...). + All '//%' in the headers are used by the script. + +Reads each lines of each "_private.h" headers (plus wrappedd3dadapter9_genvate.h, derived from wrappedd3dadapter9_gen.h). +For each of them: +- If if starts with a #ifdef, #else, #ifndef, #endif, it memorizes which definition is required +- If it starts with a "GO", it will do multiple things: + - It memorizes the type used by the function (second macro argument) + - It memorizes the type it is mapped to, if needed (eg, iFvp is mapped to iFp: the first argument is dropped) + - It checks if the type given (both original and mapped to) are valid + - If the signature contains a 'E' but it is not a "GOM" command, it will throw an error* (and vice-versa) + - If the line also contains '//%', the script will parse what's attached to this comment start: + - If it is attached to a '%', the function will be skipped when generating the 'SUPER' macro in the *types.h + - *If it is attached to a 'noE' or attached to something that ends with ',noE', it will ignore functions that + don't have the emulator as an argument but are still GOM functions + To know more about the signatures, see also box86.org's article (TODO FOR NOW). +- If the line starts with a '//%S', it will memorize a structure declaration. + The structure of it is: "//%S " + NOTE: Those structure letters are "fake types" that are accepted in the macros. + +`gbl` contains the first list, `redirects` the second and + `filespec` constains file specific informations (eg, structures, typedefs required...). + +After sorting the data, it generates: + +wrapper32.c +--------- +(Private) type definitions (/.F.+_t/) +Function definitions (/.F.+/ functions, that actually execute the function given as argument) + +wrapper32.h +--------- +Generic "wrapper32_t" type definition +Function declarations (/.F._32+/ functions) + +*types32.h +-------- +Local types definition, for the original signatures +The SUPER() macro definition, used to generate and initialize the `*_my_t` library structure +(TODO: also automate this declaration/definition? It would require more metadata, + and may break sometime in the future due to the system changing...) + +*defs32.h +------- +Local `#define`s, for signature mapping + +*undefs32.h +--------- +Local `#undefine`s, for signature mapping + + +Example: +======== +In wrappedtest_private.h: + ---------------------- +//%S X TestLibStructure ppu + +GO(superfunction, pFX) +GOM(superFunction2, pFEpX) +GOM(functionWithoutE, pFppu) //%noE +GOM(functionWithoutEAndNotInTypes, pFpppu) //%%,noE +GOM(functionNotInTypes, pFEpppu) //%% + +[No output] +Generated files: +wrapper32.c: [snippet] +---------- +typedef void *(*pFppu_t)(void*, void*, uint32_t); +typedef void *(*pFpppu_t)(void*, void*, void*, uint32_t); +typedef void *(*pFEpppu_t)(x64emu_t*, void*, void*, void*, uint32_t); + +void pFppu_32(x64emu_t *emu, uintptr_t fcn) { pFppu_t *fn = (pFppu_t)fn; R_RAX=...; } +void pFpppu_32(x64emu_t *emu, uintptr_t fcn) { pFpppu_t *fn = (pFpppu_t)fn; R_RAX=...; } +void pFEpppu_32(x64emu_t *emu, uintptr_t fcn) { pFpppu_t *fn = (pFpppu_t)fn; R_RAX=...; } + +wrapper32.h: [snippet] +---------- +typedef void (*wrapper_t)(x64emu_t*, uintptr_t); + +void pFppu_32(x64emu_t *emu, uintptr_t fcn); +void pFpppu_32(x64emu_t *emu, uintptr_t fcn); +void pFEpppu_32(x64emu_t *emu, uintptr_t fcn); + +wrappedtesttypes32.h: +------------------- +typedef void *(*pFpX_32_t)(void*, TestLibStructure); +typedef void *(*pFppu_32_t)(void*, void*, uint32_t); +typedef void *(*pFpppu_32_t)(void*, void*, void*, uint32_t); + +#define SUPER() ADDED_FUNCTIONS() \\ + GO(superFunction2, pFpX) \\ + GO(functionWithoutE, pFppu) + +wrappedtestdefs32.h: +------------------ +#define pFX pFppu +#define pFpX pFpppu + +wrappedtestundefs32.h: +-------------------- +#undef pFX +#undef pFpX +""" + +# Free characters: +# FG J QR T XYZ e g jk mno q t xyz01 3456789 + +T = TypeVar('T') +U = TypeVar('U') + +Filename = str + +class CustOrderedDict(Generic[T, U], Iterable[T]): + __keys__: List[T] + __actdict__: Dict[T, U] + + def __init__(self, src: Optional[Dict[T, U]] = None) -> None: + if src is None: + self.__keys__ = [] + self.__actdict__ = {} + else: + self.__keys__ = list(src.keys()) + self.__actdict__ = src + + def sort(self, key: Callable[[T], Any] = lambda x: x) -> None: + self.__keys__.sort(key=key) + + def __iter__(self): + return iter(self.__keys__) + def __contains__(self, k: T) -> bool: + return k in self.__actdict__ + def __getitem__(self, k: T) -> U: + return self.__actdict__[k] + def __setitem__(self, k: T, v: U) -> None: + if k not in self.__keys__: self.__keys__.append(k) + self.__actdict__[k] = v +class CustOrderedDictList(CustOrderedDict[T, List[U]]): + def __getitem__(self, k: T) -> List[U]: + if k not in self: self[k] = [] + return super().__getitem__(k) + +class FirstArgumentSingletonMeta(Generic[T], type): + _singletons: Dict[T, Type['FirstArgumentSingletonMeta']] + + @classmethod + def __prepare__(metacls, __name: str, __bases: Tuple[type, ...], **kwds: Any) -> Dict[str, Any]: + return { "_singletons": {} } + + def __contains__(cls, k): + return k in cls._singletons + + def getSingletons(cls): + return cls._singletons + def __getitem__(cls, k): + return cls._singletons[k] + + def __call__(cls, fstarg, *largs, **kwargs): + if fstarg not in cls._singletons: + cls._singletons[fstarg] = super().__call__(fstarg, *largs, **kwargs) + return cls._singletons[fstarg] + +DefineType = NewType('DefineType', str) +@final +class Define: + name: DefineType + inverted_: bool + + defines: List[DefineType] = [] + + def __init__(self, name: DefineType, inverted_: bool) -> None: + # All values for "name" are in defines (throw otherwise) + if name not in Define.defines: + raise KeyError(name) + + self.name = name + self.inverted_ = inverted_ + def copy(self) -> "Define": + return Define(self.name, self.inverted_) + + def value(self) -> int: + return Define.defines.index(self.name)*2 + (1 if self.inverted_ else 0) + + def invert(self) -> "Define": + """ + invert -- Transform a `defined()` into a `!defined()` and vice-versa, in place. + """ + self.inverted_ = not self.inverted_ + return self + def inverted(self) -> "Define": + """ + inverted -- Transform a `defined()` into a `!defined()` and vice-versa, out-of-place. + """ + return Define(self.name, not self.inverted_) + + def __str__(self) -> str: + if self.inverted_: + return "!defined(" + self.name + ")" + else: + return "defined(" + self.name + ")" + def __eq__(self, o) -> bool: + return isinstance(o, Define) and (self.name == o.name) and (self.inverted_ == o.inverted_) +@final +class Clause: + defines: List[Define] + + def __init__(self, defines: Union[List[Define], str] = []) -> None: + if isinstance(defines, str): + if defines == "": + self.defines = [] + else: + self.defines = list( + map( + lambda x: + Define(DefineType(x[9:-1] if x[0] == '!' else x[8:-1]), x[0] == '!') + , defines.split(" && ") + ) + ) + else: + self.defines = [d.copy() for d in defines] + def copy(self) -> "Clause": + return Clause(self.defines) + + def append(self, define: Define) -> "Clause": + if any((define2.name == define.name) and (define2.inverted_ != define.inverted_) for define2 in self.defines): + raise ValueError("Tried to append an incompatible clause") + + self.defines.append(define) + return self + def invert_last(self) -> "Clause": + self.defines[-1].invert() + return self + def pop_last(self) -> "Clause": + if len(self.defines) > 0: self.defines.pop() + return self + + def empty(self) -> bool: + return self.defines == [] + + def __str__(self) -> str: + return " && ".join(map(str, self.defines)) + def __hash__(self): + return hash(str(self)) + def __eq__(self, o) -> bool: + return isinstance(o, Clause) and (self.defines == o.defines) +ClausesStr = str +@final +class Clauses: + """ + Represent a list of clauses, aka a list of or-ed together and-ed "defined()" + conditions + """ + clauses: List[Clause] + + def __init__(self, clauses: Union[List[Clause], str] = []) -> None: + if isinstance(clauses, str): + if clauses == "()": + self.clauses = [] + elif ") || (" in clauses: + self.clauses = list(map(Clause, clauses[1:-1].split(") || ("))) + else: + self.clauses = [Clause(clauses)] + else: + self.clauses = clauses[:] + def copy(self) -> "Clauses": + return Clauses(self.clauses[:]) + + def add(self, defines: Clause) -> "Clauses": + self.clauses.append(defines) + return self + + def empty(self) -> bool: + return self.clauses == [] + + def splitdef(self) -> Sequence[int]: + """ + splitdef -- Sorting key function for #ifdefs + + All #if defined(...) are sorted first by the length of its string + representation, then by the number of clauses, then by the number of + '&&' in each clause and then by the "key" of the tested names (left to + right, inverted placed after non-inverted). + """ + + ret = [len(str(self)), len(self.clauses)] if len(self.clauses) > 0 else [-1] + for cunj in self.clauses: + ret.append(len(cunj.defines)) + for cunj in self.clauses: + for d in cunj.defines: + ret.append(d.value()) + return ret + + def reduce(self) -> None: + """ + reduce -- Reduces the number of clauses in-place + + Removes the most possible number of conditions, both by removing + conditions and by removing entire clauses. + + As a side effect, sorts itself. + """ + # Early breaks + if any(c.empty() for c in self.clauses): + self.clauses = [] + return + if len(self.clauses) == 0: + return + elif len(self.clauses) == 1: + clause = Clause() + for define in self.clauses[0].defines: + if define in clause.defines: + continue + elif define.inverted() in clause.defines: + clause = Clause(',') # This should never happen (and never happens without breaking encapsulation) + else: + clause.append(define) + clause.defines.sort(key=lambda d: Define.defines.index(d.name)) + self.clauses = [clause] + return + elif len(self.clauses) == 2: + if len(self.clauses[0].defines) == len(self.clauses[1].defines) == 1: + if self.clauses[0].defines[0].inverted() == self.clauses[1].defines[0]: + self.clauses = [] + return + + # Quine-McCluskey algorithm + # matches: list of (matches, inverted_mask) + needed: List[Tuple[int, int]] = [ + (i, 0) + for i in range(1< 0: + combined: List[Tuple[int, int]] = [] + combinable: List[bool] = [False] * len(last_combined) + while len(last_combined) > 0: + attempt = last_combined[-1] + for idx, (i, m) in enumerate(last_combined): + if idx == len(last_combined) - 1: + if not combinable[idx]: + uncombinable.append(attempt) + elif m == attempt[1]: + if (i ^ attempt[0]) & ((i ^ attempt[0]) - 1) != 0: + continue # More than 1 bit of difference + + combinable[idx] = True + combinable[len(last_combined) - 1] = True + add = (i | attempt[0], m | (i ^ attempt[0])) + if add in combined: + continue # Aleady added + combined.append(add) + last_combined.pop() + last_combined = combined + + matches: Dict[int, List[Tuple[int, int]]] = { + i: [combination for combination in uncombinable if (i | combination[1]) == combination[0]] for i, _ in needed + } + self.clauses = [] + matches_size: int = 1 + while len(matches) != 0: + match_found = True + while match_found: + match_found = False + for i in matches: + if len(matches[i]) < matches_size: + raise NotImplementedError("There seems to be an error in the algorithm") + elif len(matches[i]) == matches_size: + match_found = True + self.clauses.append( + Clause([ + Define( + n, + matches[i][0][0] & (1 << j) == 0 + ) for j, n in enumerate(Define.defines) if matches[i][0][1] & (1 << j) == 0 + ])) + self.clauses[-1].defines.sort(key=lambda d: Define.defines.index(d.name)) + to_erase: List[int] = [] + for j in matches: + if matches[i][0] in matches[j]: + to_erase.append(j) + for j in to_erase: + del matches[j] + break + matches_size = matches_size + 1 + self.clauses.sort(key=lambda c: (len(c.defines), [Define.defines.index(d.name) for d in c.defines])) + + def __str__(self) -> ClausesStr: + if len(self.clauses) == 1: + return str(self.clauses[0]) + else: + return "(" + ") || (".join(map(str, self.clauses)) + ")" + def __hash__(self): + return hash(str(self)) + def __eq__(self, o) -> bool: + return isinstance(o, Clauses) and (self.clauses == o.clauses) + +class CType(metaclass=FirstArgumentSingletonMeta): + class ReadWrite: + none: 'CType.ReadWrite' + readonly: 'CType.ReadWrite' + writeonly: 'CType.ReadWrite' + readwrite: 'CType.ReadWrite' + def __init__(self, pre: bool, post: bool) -> None: + # pre is "need to convert before the call", post is "need to convert after the call" + self.pre = pre + self.post = post + + @staticmethod + def find_next(name: str) -> Tuple[str, Optional[Tuple['CType.ReadWrite', str, str]]]: + """ + Returns (pre, (type, str, post)) + where name == pre.('r' if type is readonly, 'b' if type is writeonly else 'B').str.'_'.post + Aka, pre contains no structure; type, str is the structure characterization (b fo writeonly). + If it returns (pre, None), it is guaranteed to have no structure in pre === name. + """ + beg: Optional[int] = None + t: Optional[CType.ReadWrite] = None + depth = 0 + + for i in range(len(name)): + if (name[i] == 'r') or (name[i] == 'b') or (name[i] == 'B'): + if beg is None: + beg = i + t = CType.ReadWrite.readonly if name[i] == 'r' else \ + CType.ReadWrite.writeonly if name[i] == 'B' else CType.ReadWrite.readwrite + depth = depth + 1 + elif name[i] == '_': + if depth == 0: + raise ValueError(f"Invalid type {name}") + elif depth == 1: + assert beg is not None, "Unreachable" + assert t is not None, "Unreachable" + return name[:beg], (t, name[beg+1:i], name[i+1:]) + depth = depth - 1 + + return name, None + + def __init__(self, name_t: Tuple[str, 'CType.ReadWrite'], clause: Clause, filespec: 'FileSpec') -> None: + self.name = name_t[0] + self.type = name_t[1] + if self.type is CType.ReadWrite.none: + self.structname = self.name + self.structname2 = self.name + elif self.type is CType.ReadWrite.readonly: + self.structname = "s" + self.name + "_" + self.structname2 = "struct_" + self.name + elif self.type is CType.ReadWrite.writeonly: + self.structname = "B" + self.name + "_" + self.structname2 = "struct_" + self.name + elif self.type is CType.ReadWrite.readwrite: + self.structname = "b" + self.name + "_" + self.structname2 = "struct_" + self.name + else: + self.structname = "//" + self.name + self.structname2 = "//" + self.name + self.recursive: List[CType] = [] + self.replaced = self.name + + if len(name_t[0]) != 1: + replaced = [] + pre, tmp = CType.find_next(self.name) + while tmp is not None: + self.recursive.extend(CType((c, CType.ReadWrite.none), clause, filespec) for c in pre) + self.recursive.append(CType((tmp[1], tmp[0]), clause, filespec)) + replaced.append(pre) + pre, tmp = CType.find_next(tmp[2]) + self.recursive.extend(CType((c, CType.ReadWrite.none), clause, filespec) for c in pre) + replaced.append(pre) + self.replaced = 'B'.join(replaced) + + self.asret: Optional[str] = None + self.aspre: Optional[str] = None + self.asarg: Optional[str] = None + self.aspost: Optional[str] = None + + def describe(self, spacer=""): + nl = "" if len(self.recursive) == 0 else f"\n{spacer}+-> " + if self.type is CType.ReadWrite.none: + t = "" + elif self.type is CType.ReadWrite.readonly: + t = " (r-)" + elif self.type is CType.ReadWrite.writeonly: + t = " (-w)" + elif self.type is CType.ReadWrite.readwrite: + t = " (rw)" + else: + t = " ?!?!" + return f"{self.structname} => {self.replaced}+{len(self.recursive)}{t}{nl}" + \ + f"\n{spacer}+-> ".join(r.describe(spacer + " ") for r in self.recursive) + + def generate_converters(self) -> None: + if self.asret is not None: + return # Already done: probably a base type + + self.asret = "\n#error TODO? Cannot return custom structure\n" + self.aspre = f"struct_{self.name}_t arg_{{p}}; " + ("" if not self.type.pre else \ + f"from_{self.structname2}(&arg_{{p}}, *(ptr_t*)(from_ptr((R_ESP + {{p}})))); ") + self.asarg = "*(ptr_t*)(from_ptr((R_ESP + {p}))) ? &arg_{p} : NULL, " + self.aspost = "" if not self.type.post else \ + (" if (*(ptr_t*)(from_ptr((R_ESP + {p})))) to_" + self.structname2 + \ + "(*(ptr_t*)(from_ptr((R_ESP + {p}))), &arg_{p});") + + for rec in self.recursive: + rec.generate_converters() +class CTypeNone(CType, metaclass=FirstArgumentSingletonMeta): + def __init__(self, name: str, clause: Clause, filespec: 'FileSpec') -> None: + super().__init__((name, CType.ReadWrite.none), clause, filespec) + +CType.ReadWrite.none = CType.ReadWrite(False, False) # Uppermost type +CType.ReadWrite.readonly = CType.ReadWrite(True, False) +CType.ReadWrite.writeonly = CType.ReadWrite(False, True) +CType.ReadWrite.readwrite = CType.ReadWrite(True, True) + +class FileSpec: + class Struct: + def __init__(self, name: str, repl: str) -> None: + self.name = name + self.repl = repl + + # CONSTANT- values: original set + # CONSTANT- rvalues: valid replacement values (outside of structures) + # CONSTANT- validrepl: valid replacement values (for structures) + # structs: structure ids and additional data + values: Sequence[str] = ['E', 'v', 'c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'D', 'K', 'l', 'L', 'p', 'h', 'H', 'a', 'A', 'V', 'O', 'S', '2', 'P', 'N', 'M', 's', 'r', 'b', 'B', '_'] + rvalues: Sequence[str] = ['E', 'v', 'c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'D', 'K', 'l', 'L', 'p', 'h', 'H', 'a', 'A', 'V', 'O', 'S', '2', 'P', 'N', 'M', 's', 'r', 'b', 'B', '_'] + validrepl: Sequence[str] = ['c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'D', 'K', 'l', 'L', 'p', 'h', 'H', 'a', 'A', 'V', 'O', 'S', '2', 'P', 'N', 'M', 's', 'r', 'b', 'B', '_'] + + def __init__(self) -> None: + self.structs: CustOrderedDict[str, FileSpec.Struct] = CustOrderedDict() + + self.typedefs: CustOrderedDictList[_BareFunctionType, Function] = CustOrderedDictList() + self.structsuses: List[FunctionType] = [] + + def registerStruct(self, id: str, name: str, repl: str) -> None: + if len(id) != 1: + # If you REALLY need it, consider opening a ticket + # Before you do, consider that everything that is a valid in a C token is valid here too + raise ValueError("Type ID \"" + id + "\" is too long!") + if id in self.rvalues: + raise ValueError("Type " + id + " is already reserved!") + if id in self.structs: + raise ValueError("Type " + id + " is already used!") + if any(c not in self.validrepl for c in repl): + raise ValueError("Invalid structure replacement value \"" + repl + "\" (note: recursive replacements are not supported)") + if repl == "": + # If you need this, please open an issue (also, this is never actually called, empty strings are removed at the calling site) + raise NotImplementedError("Invalid structure metadata supply (empty replacement)") + + self.structs[id] = FileSpec.Struct(name, repl) + +class FunctionType(metaclass=FirstArgumentSingletonMeta): + def __new__(cls, string: str, clause: Clause, filespec: FileSpec) -> 'FunctionType': + if ((string[0] not in FileSpec.values) or any(c not in FileSpec.values for c in string[2:])) \ + and ((string[0] in FileSpec.values) or (string[0] in filespec.structs)) \ + and all((c != 'v') and (c in FileSpec.values) or (c in filespec.structs) for c in string[2:]): + return super().__new__(StructFunctionType) + else: + return super().__new__(cls) + + def __init__(self, string: str, clause: Clause, filespec: FileSpec) -> None: + # Early fail + if 'VV' in string: + raise ValueError("'V' can only be at the end of the type (use 's' instead)") + + self.orig = CTypeNone(string, clause, filespec) + + self.hasemu = 'E' in self.orig.replaced + if self.hasemu: + if ("E" in self.orig.recursive[0].name) or any("E" in ct.name for ct in self.orig.recursive[3:]): + raise NotImplementedError("x64emu_t* not as the first parameter") + if len(self.orig.replaced) < 4: + raise NotImplementedError("Type {0} too short".format(self.orig.replaced)) + chk_type = self.orig.recursive[0].name + ''.join(map(lambda ct: ct.name, self.orig.recursive[3:])) + else: + if len(self.orig.replaced) < 3: + raise NotImplementedError("Type {0} too short".format(self.orig.replaced)) + chk_type = self.orig.recursive[0].name + ''.join(map(lambda ct: ct.name, self.orig.recursive[2:])) + self.withoutE = _BareFunctionType(string[0:2] + chk_type[1:], clause, filespec, isinstance(self, StructFunctionType)) + self._bare = _BareFunctionType(self.orig.name, clause, filespec, isinstance(self, StructFunctionType)) + if len(chk_type) < 2: + raise NotImplementedError("Type {0} too short".format(string)) + + if self.orig.recursive[1].structname != "F": + raise NotImplementedError("Bad middle letter {0}".format(self.orig.recursive[1].structname)) + + self.redirect = any(c not in FileSpec.values for c in chk_type) or (('v' in chk_type[1:]) and (len(chk_type) > 2)) + self.usestruct: bool = False + self.redirected: Optional[FunctionType] = None + if self.redirect: + if all(((i == 0) or (c != 'v')) and (c in FileSpec.values) or (c in filespec.structs) for i, c in enumerate(chk_type)): + # 'v' is never allowed here + self.redirect = False + self.usestruct = True + return + else: + if any(c not in FileSpec.rvalues for c in chk_type): + raise NotImplementedError("Invalid type {0}".format(string)) + + # Ok, this is acceptable: there is void + string = string[:2] + (string[2:] + .replace("v", "")) # void -> nothing + assert(len(string) >= 3) # If this raises, don't use 'vFvvvvvv' as a signature... + self.redirected = FunctionType(string, clause, filespec) + assert(not self.redirected.redirect and not self.redirected.usestruct) + + def getchar(self, c: str) -> int: + return self._bare.getchar(c) + def getcharidx(self, i: int) -> int: + return self._bare.getcharidx(i) + def splitchar(self) -> List[int]: + return self._bare.splitchar() + + def __hash__(self) -> int: + return str.__hash__(self.orig.name) + def __eq__(self, o: object): + return isinstance(o, FunctionType) and ((self.orig.name == o.orig.name) and (o is self or not isinstance(self, StructFunctionType))) +class StructFunctionType(FunctionType): + def __init__(self, string: str, clause: Clause, filespec: FileSpec) -> None: + super().__init__(string, clause, filespec) + assert(self.usestruct) + self.filespec = filespec + self.filespec.structsuses.append(self) + + self.returnsstruct = string[0] in self.filespec.structs + if self.returnsstruct: + if self.hasemu: + string = "pFEp" + string[3:] + else: + string = "pFp" + string[2:] + + for struct in self.filespec.structs: + string = string.replace(struct, self.filespec.structs[struct].repl) + self.redirected = FunctionType(string, clause, self.filespec) + +class _BareFunctionType(FunctionType): # Fake derived + def __new__(cls, *largs, **kwargs): + return object.__new__(cls) + def __init__(self, string: str, clause: Clause, filespec: FileSpec, isstruct: bool) -> None: + self.orig = CTypeNone(string, clause, filespec) + self.filespec = filespec + self.isstruct = isstruct + + def getchar(self, c: str) -> int: + if c in FileSpec.rvalues: + return FileSpec.rvalues.index(c) + else: + assert(self.isstruct) + return self.filespec.structs.__keys__.index(c) + len(FileSpec.rvalues) + def getcharidx(self, i: int) -> int: + return self.getchar(self.orig.replaced[i]) + + def splitchar(self) -> List[int]: + try: + ret = [ + len(self.orig.replaced), len(self.orig.name), self.getcharidx(0), + *map(self.getcharidx, range(2, len(self.orig.replaced))) + ] + return ret + except ValueError as e: + raise ValueError("Value is " + self.orig.replaced + ":\n" + self.orig.describe()) from e + except AssertionError as e: + raise ValueError("Value is " + self.orig.replaced + ":\n" + self.orig.describe()) from e + +# Allowed GOs: GO,GOM,GO2,GOS,GOW,GOWM,GOW2,GO2S +class Function: + def __init__(self, name: str, funtype: FunctionType, gotype: str, filespec: FileSpec, filename: Filename, line: str) -> None: + self._noE = False + + self.no_dlsym: bool = False + if "//%" in line: + additional_meta = line.split("//%")[1].split(" ")[0].strip() + + if additional_meta.endswith(",noE"): + self._noE = True + additional_meta = additional_meta[:-4] + + if additional_meta == 'noE': + assert not self._noE, "Duplicated 'noE'" + self._noE = True + elif additional_meta == '%': + self.no_dlsym = True + else: + raise NotImplementedError("Changing the function type 'on the fly' is not supported") + + funtypeerr = ValueError("Invalid function type " + gotype) + if not gotype.startswith("GO"): + raise funtypeerr + gotype = gotype[2:] + self.isweak = (len(gotype) > 0) and (gotype[0] == "W") + if self.isweak: + gotype = gotype[1:] + self.ismy = (len(gotype) > 0) and (gotype[0] == "M") + self.is2 = (len(gotype) > 0) and (gotype[0] == "2") + self.retS = (len(gotype) > 0) and (gotype[0] == "S") + if self.ismy or self.is2 or self.retS: + gotype = gotype[1:] + if self.retS: + self.ismy = True + assert isinstance(funtype, StructFunctionType) and funtype.returnsstruct, \ + "Maybe TODO? (Returns unregistered structure)" + self._noE = self._noE or self.no_dlsym + if isinstance(funtype, StructFunctionType) and funtype.returnsstruct and not self.retS: + gotype = "GO" + \ + ("W" if self.isweak else "") + \ + ("M" if self.ismy else "") + ("2" if self.is2 else "") + raise ValueError("Function " + name + " of type " + funtype.orig.name + \ + " needs to return a structure, but doesn't (currently " + gotype + ")") + if gotype != "": + raise funtypeerr + + self.name = name + self.type = funtype + self.filespec = filespec + assert(not isinstance(funtype, StructFunctionType) or filespec is funtype.filespec) # No reason why not, so assert() + + if self.is2: + self.fun2 = line.split(',')[2].split(')')[0].strip() + if ( self.type.hasemu != self.fun2.startswith("my32_") and self.type.hasemu != self.fun2.startswith("my_")) and not self._noE: + # If this raises because of a different prefix, open a pull request + print("\033[91mThis is probably not what you meant!\033[m ({0}:{1})".format(filename, line[:-1]), file=sys.stderr) + self.invalid = True + + if (self.ismy and not self.type.hasemu and not self.is2) and not self._noE: + # Probably invalid on box86; if not so, remove/comment this whole 'if' (and also open an issue) + print("\033[94mAre you sure of this?\033[m ({0}:{1})".format(filename, line[:-1]), file=sys.stderr) + self.invalid = True + return + if self.type.hasemu and not self.ismy and not self.is2: + # Certified invalid + print("\033[91mThis is probably not what you meant!\033[m ({0}:{1})".format(filename, line[:-1]), file=sys.stderr) + self.invalid = True + return + if self._noE and not self.ismy and not self.is2: + raise ValueError("Invalid meta: 'no E' provided but function is not a GOM") + + if self.ismy or self.is2: + # Add this to the typedefs + self.filespec.typedefs[self.type.withoutE].append(self) + +JumbledFunctions = CustOrderedDictList[Clause, Function] +FilesSpecific = Dict[Filename, FileSpec] + +SortedGlobals = CustOrderedDictList[Clauses, FunctionType] +SortedRedirects = CustOrderedDictList[Clauses, FunctionType] + +def readFiles(files: Iterable[str]) -> Tuple[JumbledFunctions, JumbledFunctions, FilesSpecific]: + """ + readFiles + + This function is the one that parses the files. + """ + + gbls: JumbledFunctions = CustOrderedDictList() + redirects: JumbledFunctions = CustOrderedDictList() + filespecs: FilesSpecific = {} + + symbols: Dict[str, Filename] = {} + need_halt: bool = False + + for filepath in files: + filename: Filename = filepath.split("/")[-1] + dependants: Clause = Clause() + + filespec = FileSpec() + filespecs[filename[:-10]] = filespec + + def add_symbol_name(symname: Optional[str], weak: bool = False, symsname: Dict[str, List[Tuple[str, bool]]] = {"": []}): + # Optional arguments are evaluated only once! + nonlocal need_halt + if symname is None: + for c in symsname: + if (c != "") and (len(symsname[c]) != 0): + # Note: if this condition ever raises, check the wrapper pointed by it. + # If you find no problem, comment the error below, add a "pass" below (so python is happy) + # and open a ticket so I can fix this. + raise NotImplementedError("Some symbols are only implemented under one condition '{0}' (probably) ({1}/{2})" + .format(c, symsname[c][0][0], filename) + " [extra note in the script]") + for s, w in symsname[c]: + if w: continue # Weak symbols never conflict with others in different libraries + + if s in ( + '_init', '_fini', + '__bss_start', '__bss_start__', '__bss_end__', '_bss_end__', + '__data_start', '_edata', + '_end', '__end__'): + continue # Always allow those symbols [TODO: check if OK] + if s in symbols: + # Check for resemblances between symbols[s] and filename + # if filename.startswith(symbols[s][:-12]) or symbols[s].startswith(filename[:-12]): + # # Probably OK + # continue + # Manual incompatible libs detection + match = lambda l, r: (filename[7:-10], symbols[s][7:-10]) in [(l, r), (r, l)] + if match("gdkx112", "gdk3") \ + or match("gtkx112", "gtk3") \ + or match("libjpeg", "libjpeg62") \ + or match("libncurses", "libncurses6") \ + or match("libncurses", "libncursesw") \ + or match("libncurses6", "libncursesw") \ + or match("libtinfo6", "libtinfo") \ + or match("png12", "png16") \ + or match("sdl1", "sdl2") \ + or match("sdl1image", "sdl2image") \ + or match("sdl1mixer", "sdl2mixer") \ + or match("sdl1net", "sdl2net") \ + or match("sdl1ttf", "sdl2ttf") \ + or match("smpeg", "smpeg2") \ + or match("udev0", "udev1") \ + or match("gstinterfaces010","gstvideo")\ + or match("gstinterfaces010","gstaudio")\ + or match("gstreamer010","gstreamer") \ + or match("appindicator","appindicator3")\ + \ + or match("libc", "tcmallocminimal") \ + or match("libc", "ldlinux") \ + : + # libc and ldlinux have some "__libc_" data symbols in common... TODO check if ok + continue + + # Note: this test is very (too) simple. If it ever raises, comment + # `need_halt = True` and open an issue. + print("The symbol {0} is declared in multiple files ({1}/{2})" + .format(s, symbols[s], filename) + " [extra note in the script]", file=sys.stderr) + need_halt = True + symbols[s] = filename + else: + symname = symname.strip() + if symname == "": + raise ValueError("This symbol name (\"\") is suspicious... ({0})".format(filename)) + + l = len(dependants.defines) + already_pst = any(s == symname for s, _ in symsname[""]) + if l == 1: + symsname.setdefault(str(dependants), []) + already_pst = already_pst or any(s == symname for s, _ in symsname[str(dependants)]) + if already_pst: + print("The symbol {0} is duplicated! ({1})".format(symname, filename), file=sys.stderr) + need_halt = True + return + if l == 1: + s = str(dependants.defines[0].inverted()) + if (s in symsname) and ((symname, weak) in symsname[s]): + symsname[s].remove((symname, weak)) + symsname[""].append((symname, weak)) + elif (s in symsname) and ((symname, not weak) in symsname[s]): + print("The symbol {0} doesn't have the same 'weakness' in different conditions! ({1})" + .format(symname, filename), file=sys.stderr) + need_halt = True + else: + symsname[str(dependants)].append((symname, weak)) + elif l == 0: + symsname[""].append((symname, weak)) + + with open(filepath, 'r') as file: + for line in file: + ln = line.strip() + + try: + # If the line is a `#' line (#ifdef LD80BITS/#ifndef LD80BITS/header) + if ln.startswith("#"): + preproc_cmd = ln[1:].strip() + if preproc_cmd.startswith("if defined(GO)"): + continue #if defined(GO) && defined(GOM)... + elif preproc_cmd.startswith("if !(defined(GO)"): + continue #if !(defined(GO) && defined(GOM)...) + elif preproc_cmd.startswith("error"): + continue #error meh! + elif preproc_cmd.startswith("include"): + continue #inherit other library + elif preproc_cmd.startswith("endif"): + dependants.pop_last() + elif preproc_cmd.startswith("ifdef"): + dependants.append(Define(DefineType(preproc_cmd[5:].strip()), False)) + elif preproc_cmd.startswith("ifndef"): + dependants.append(Define(DefineType(preproc_cmd[6:].strip()), True)) + elif preproc_cmd.startswith("else"): + dependants.invert_last() + else: + raise NotImplementedError("Unknown preprocessor directive: {0}".format(preproc_cmd.split(" ")[0])) + + # If the line is a `GO...' line (GO/GOM/GO2/...)... + elif ln.startswith("GO"): + # ... then look at the second parameter of the line + try: + gotype = ln.split("(")[0].strip() + funname = ln.split(",")[0].split("(")[1].strip() + ln = ln.split(",")[1].split(")")[0].strip() + except IndexError: + raise NotImplementedError("Invalid GO command") + + fun = Function(funname, FunctionType(ln, dependants, filespec), gotype, filespec, filename, line) + if not filename.endswith("_genvate.h"): + add_symbol_name(fun.name, fun.isweak) + + if hasattr(fun, 'invalid'): + need_halt = True + continue + + if fun.type.redirect or fun.type.usestruct: + redirects[dependants.copy()].append(fun) + else: + gbls[dependants.copy()].append(fun) + + # If the line is a structure metadata information... + elif ln.startswith("//%S"): + metadata = [e for e in ln.split() if e] + if len(metadata) != 4: + # If you need an empty replacement, please open a PR + raise NotImplementedError("Invalid structure metadata supply (too many/not enough fields)") + if metadata[0] != "//%S": + raise NotImplementedError("Invalid structure metadata supply (invalid signature)") + + filespec.registerStruct(metadata[1], metadata[2], metadata[3]) + + # If the line contains any symbol name... + elif ("GO" in ln) or ("DATA" in ln): + if filename.endswith("_genvate.h"): + continue + # Probably "//GO(..., " or "DATA(...," at least + try: + symname = ln.split('(')[1].split(',')[0].strip() + add_symbol_name(symname) + except IndexError: + # Oops, it wasn't... + pass + except Exception as e: + raise NotImplementedError("{0}:{1}".format(filename, line[:-1])) from e + + if filename.endswith("_genvate.h"): + del filespecs[filename[:-10]] + + add_symbol_name(None) + FunctionType.getSingletons().clear() + + if need_halt: + raise ValueError("Fix all previous errors before proceeding") + + return gbls, redirects, filespecs + +def sortArrays(gbl_funcs: JumbledFunctions, red_funcs: JumbledFunctions, filespecs: FilesSpecific) \ + -> Tuple[SortedGlobals, SortedRedirects]: + # First sort file specific stuff + for fn in filespecs: + filespecs[fn].typedefs.sort(key=_BareFunctionType.splitchar) + for funtype in filespecs[fn].typedefs: + filespecs[fn].typedefs[funtype].sort(key=lambda f: f.name) + + filespecs[fn].structs.sort() + filespecs[fn].structsuses.sort(key=FunctionType.splitchar) + + # Now, take all function types, and make a new table gbl_vals + # This table contains all #if conditions for when a function type needs to + # be generated. + def add_to_vals(vals: Dict[FunctionType, Clauses], t: FunctionType, clause: Clause) -> None: + vals.setdefault(t, Clauses()) + if clause in vals[t].clauses: return + vals[t].add(clause) + + gbl_vals: Dict[FunctionType, Clauses] = {} + for clause in gbl_funcs: + for f in gbl_funcs[clause]: + add_to_vals(gbl_vals, f.type, clause) + for clause in red_funcs: + for f in red_funcs[clause]: + assert(f.type.redirected is not None) + add_to_vals(gbl_vals, f.type.redirected, clause) + + # Remove duplicate/useless conditions (and sort) + for t in gbl_vals: + gbl_vals[t].reduce() + + # Now create a new gbls + # gbls will contain the final version of gbls (without duplicates, based on + # gbl_vals), meaning, a dict from clauses to function types to implement + gbls: SortedGlobals = CustOrderedDictList() + for funtype in gbl_vals: + gbls[gbl_vals[funtype]].append(funtype) + # Sort the #if clauses as defined in `splitdef` + gbls.sort(key=Clauses.splitdef) + + # Sort the function types as defined in `splitchar` + for clauses in gbls: + gbls[clauses].sort(key=FunctionType.splitchar) + + # This map will contain all additional function types that are "redirected" + # to an already defined type (with some remapping). + red_vals: Dict[FunctionType, Clauses] = {} + for clause in red_funcs: + for f in red_funcs[clause]: + if isinstance(f.type, StructFunctionType): continue + assert(f.type.redirected is not None) + add_to_vals(red_vals, f.type, clause) + + # Also do the same sorting as before (it also helps keep the order + # in the file deterministic) + for t in red_vals: + red_vals[t].reduce() + + redirects: SortedRedirects = CustOrderedDictList() + for funtype in red_vals: + redirects[red_vals[funtype]].append(funtype) + redirects.sort(key=Clauses.splitdef) + + def fail(): assert False, "value has no redirect" + for clauses in redirects: + redirects[clauses].sort(key=lambda v: fail() if v.redirected is None else v.splitchar() + v.redirected.splitchar()) + + return gbls, redirects + +def checkRun(root: str, gbls: SortedGlobals, redirects: SortedRedirects, filesspec: FilesSpecific) -> Optional[str]: + # Check if there was any new functions compared to last run + functions_list: str = "" + for clauses in gbls: + for v in gbls[clauses]: + functions_list = functions_list + "#" + str(clauses) + " " + v.orig.name + " -> " + v.orig.replaced + "\n" + for clauses in redirects: + for v in redirects[clauses]: + assert(v.redirected is not None) + functions_list = functions_list + "#" + str(clauses) + " " + v.orig.name + " -> " + v.redirected.orig.name + "\n" + for filename in sorted(filesspec.keys()): + functions_list = functions_list + filename + ":\n" + for st in filesspec[filename].structs: + struct = filesspec[filename].structs[st] + functions_list = functions_list + \ + "% " + st + " " + struct.name + " " + struct.repl + "\n" + for _bare in filesspec[filename].typedefs: + functions_list = functions_list + "- " + _bare.orig.name + ":\n" + for fn in filesspec[filename].typedefs[_bare]: + if fn.no_dlsym: continue + functions_list = functions_list + " - " + fn.name + "\n" + for funtype in filesspec[filename].structsuses: + assert(funtype.redirected is not None) + functions_list = functions_list + "% " + funtype.orig.name + " -> " + funtype.redirected.orig.name + "\n" + + # functions_list is a unique string, compare it with the last run + try: + last_run = "" + with open(os.path.join(root, "src", "wrapped32", "generated", "functions_list.txt"), 'r') as file: + last_run = file.read() + if last_run == functions_list: + # Mark as OK for CMake + with open(os.path.join(root, "src", "wrapped32", "generated", "functions_list.txt"), 'w') as file: + file.write(functions_list) + return None + except IOError: + # The file does not exist yet, first run + pass + + return functions_list + +def generate_files(root: str, files: Iterable[str], ver: str, gbls: SortedGlobals, redirects: SortedRedirects, \ + filespecs: FilesSpecific) -> None: + # Generate converters + asreturns = [ + "\n#error Invalid return type: emulator\n", # E + "fn({0});", # v + "R_EAX = fn({0});", # c + "R_EAX = fn({0});", # w + "R_EAX = fn({0});", # i + "ui64_t r; r.i = fn({0}); R_EAX = r.d[0]; R_EDX = r.d[1];", # I + "R_EAX = (unsigned char)fn({0});", # C + "R_EAX = (unsigned short)fn({0});", # W + "R_EAX = (uint32_t)fn({0});", # u + "ui64_t r; r.u = (uint64_t)fn({0}); R_EAX = r.d[0]; R_EDX = r.d[1];", # U + "float fl = fn({0}); fpu_do_push(emu); ST0val = fl;", # f + "double db = fn({0}); fpu_do_push(emu); ST0val = db;", # d + "long double ld = fn({0}); fpu_do_push(emu); ST0val = ld;", # D + "double db = fn({0}); fpu_do_push(emu); ST0val = db;", # K + "R_EAX = to_long(fn({0}));", # l + "R_EAX = to_ulong(fn({0}));", # L + "R_EAX = to_ptrv(fn({0}));", # p + "R_EAX = to_hash(fn({0}));", # h + "R_EAX = to_hash_d(fn({0}));", # H + "R_EAX = to_locale(fn({0}));", # a + "R_EAX = to_locale_d(fn({0}));", # A + "\n#error Invalid return type: va_list\n", # V + "\n#error Invalid return type: at_flags\n", # O + "\n#error Invalid return type: _io_file*\n", # S + "\n#error Invalid return type: _2uint_struct\n", # 2 + "\n#error Invalid return type: Vulkan Struct\n", # P + "\n#error Invalid return type: ... with 1 arg\n", # N + "\n#error Invalid return type: ... with 2 args\n", # M + "\n#error Invalid return type: address on the stack\n", # s + "\n#error Invalid return type: ro structure declaration\n", # r + "\n#error Invalid return type: rw structure declaration\n", # b + "\n#error Invalid return type: wo structure declaration\n", # B + "\n#error Invalid return type: end of structure declaration\n", # _ + ] + asargs = [ + "emu, ", # E + "", # v + "from_ptri(int8_t, R_ESP + {p}), ", # c + "from_ptri(int16_t, R_ESP + {p}), ", # w + "from_ptri(int32_t, R_ESP + {p}), ", # i + "from_ptri(int64_t, R_ESP + {p}), ", # I + "from_ptri(uint8_t, R_ESP + {p}), ", # C + "from_ptri(uint16_t, R_ESP + {p}), ", # W + "from_ptri(uint32_t, R_ESP + {p}), ", # u + "from_ptri(uint64_t, R_ESP + {p}), ", # U + "from_ptri(float, R_ESP + {p}), ", # f + "from_ptri(double, R_ESP + {p}), ", # d + "LD2localLD(from_ptrv(R_ESP + {p})), ", # D + "FromLD(from_ptrv(R_ESP + {p})), ", # K + "to_long(from_ptri(long_t, R_ESP + {p})), ", # l + "to_ulong(from_ptri(ulong_t, R_ESP + {p})), ", # L + "from_ptriv(R_ESP + {p}), ", # p + "from_hash(from_ptri(ptr_t, R_ESP + {p})), ", # h + "from_hash_d(from_ptri(ptr_t, R_ESP + {p})), ", # H + "from_locale(from_ptri(ptr_t, R_ESP + {p})), ", # a + "from_locale_d(from_ptri(ptr_t, R_ESP + {p})), ", # A + "from_ptrv(R_ESP + {p}), ", # V + "of_convert32(from_ptri(int32_t, R_ESP + {p})), ", # O + "io_convert32(from_ptriv(R_ESP + {p})), ", # S + "(_2uint_struct_t){{from_ptri(uint32_t, R_ESP + {p}),from_ptri(uint32_t, R_ESP + {p} + 4)}}, ", # 2 + "arg_{p}, ", # P + "from_ptriv(R_ESP + {p}), ", # N + "from_ptriv(R_ESP + {p}),from_ptriv(R_ESP + {p} + 4), ", # M + "from_ptrv(R_ESP + {p}), ", # s + "\n#error Invalid argument type: ro structure declaration\n", # r + "\n#error Invalid argument type: rw structure declaration\n", # b + "\n#error Invalid argument type: wo structure declaration\n", # B + "\n#error Invalid argument type: end of structure declaration\n", # _ + ] + if len(FileSpec.values) != len(asreturns): + raise NotImplementedError("len(values) = {lenval} != len(asreturns) = {lenvals}".format(lenval=len(FileSpec.values), lenvals=len(asreturns))) + if len(FileSpec.values) != len(asargs): + raise NotImplementedError("len(values) = {lenval} != len(asargs) = {lenarg}".format(lenval=len(FileSpec.values), lenarg=len(asargs))) + for value, asret, asarg in zip(FileSpec.values, asreturns, asargs): + for ctrw in (CType.ReadWrite.none, CType.ReadWrite.readonly, CType.ReadWrite.writeonly, CType.ReadWrite.readwrite): + if (value, CType.ReadWrite.none) not in CType: + continue # TODO: remove this and fail if one base type is missing? + CType[(value, CType.ReadWrite.none)].asret = asret + CType[(value, CType.ReadWrite.none)].aspre = "" + CType[(value, CType.ReadWrite.none)].asarg = asarg + CType[(value, CType.ReadWrite.none)].aspost = "" + for ctn in CType.getSingletons(): + CType[ctn].generate_converters() + + # Detect functions which return in an x87 register + return_x87: str = "DKdf" + if any(c not in FileSpec.values for c in return_x87): + raise NotImplementedError("Invalid character") + + # Files header and guard + files_header = { + "wrapper32.c": """ + #include + #include + #include + + #include "wrapper32.h" + #include "emu/x64emu_private.h" + #include "emu/x87emu_private.h" + #include "regs.h" + #include "x64emu.h" + #include "box32.h" + #include "converter32.h" + + typedef union ui64_s {lbr} + int64_t i; + uint64_t u; + uint32_t d[2]; + {rbr} ui64_t; + + typedef struct _2uint_struct_s {lbr} + uint32_t a; + uint32_t b; + {rbr} _2uint_struct_t; + + extern void* my__IO_2_1_stderr_; + extern void* my__IO_2_1_stdin_ ; + extern void* my__IO_2_1_stdout_; + + static void* io_convert(void* v) + {lbr} + if(!v) + return v; + if(v==my__IO_2_1_stderr_) + return stderr; + if(v==my__IO_2_1_stdin_) + return stdin; + if(v==my__IO_2_1_stdout_) + return stdout; + return v; + {rbr} + + typedef struct my_GValue_s + {lbr} + int g_type; + union {lbr} + int v_int; + int64_t v_int64; + uint64_t v_uint64; + float v_float; + double v_double; + void* v_pointer; + {rbr} data[2]; + {rbr} my_GValue_t; + + static void alignGValue(my_GValue_t* v, void* value) + {lbr} + v->g_type = *(int*)value; + memcpy(v->data, value+4, 2*sizeof(double)); + {rbr} + static void unalignGValue(void* value, my_GValue_t* v) + {lbr} + *(int*)value = v->g_type; + memcpy(value+4, v->data, 2*sizeof(double)); + {rbr} + + void* VulkanFromx86(void* src, void** save); + void VulkanTox86(void* src, void* save); + + #define ST0val ST0.d + + int of_convert32(int); + + """, + "wrapper32.h": """ + #ifndef __WRAPPER32_H_ + #define __WRAPPER32_H_ + #include + #include + + typedef struct x64emu_s x64emu_t; + + // the generic wrapper pointer functions + typedef void (*wrapper_t)(x64emu_t* emu, uintptr_t fnc); + + // list of defined wrappers + // E = current x64emu struct + // v = void + // C = unsigned byte c = char + // W = unsigned short w = short + // u = uint32, i = int32 + // U = uint64, I = int64 + // L = unsigned long, l = signed long (long is an int with the size of a pointer) + // p = pointer + // h = hash (32<->64bits) + // H = hash (32<->64bits) that will be deleted from hashmaps + // a = locale + // A = locale that will be deleted from hashmaps + // f = float, d = double, D = long double, K = fake long double + // V = vaargs, s = address on the stack (doesn't move forward the pointer) + // O = libc O_ flags bitfield + // o = stdout + // S = _IO_2_1_stdXXX_ pointer (or FILE*) + // 2 = struct of 2 uint + // N = ... automatically sending 1 arg + // M = ... automatically sending 2 args + // P = Vulkan struct pointer + // s..._ = pointer to read-only structure + // B..._ = pointer to write-only structure + // b..._ = pointer to read-write structure + + """, + "converter32.c": """ + #include "converter32.h" + """, + "converter32.h": """ + #ifndef __CONVERTER32_H_ + #define __CONVERTER32_H_ + """, + "fntypes32.h": """ + #ifndef __{filename}TYPES32_H_ + #define __{filename}TYPES32_H_ + + #ifndef LIBNAME + #error You should only #include this file inside a wrapped*.c file + #endif + #ifndef ADDED_FUNCTIONS + #define ADDED_FUNCTIONS() + #endif + + """, + "fndefs32.h": """ + #ifndef __{filename}DEFS32_H_ + #define __{filename}DEFS32_H_ + + """, + "fnundefs32.h": """ + #ifndef __{filename}UNDEFS32_H_ + #define __{filename}UNDEFS32_H_ + + """ + } + files_guard = { + "wrapper32.c": """ + """, + "wrapper32.h": """ + #endif // __WRAPPER32_H_ + """, + "converter32.c": """ + """, + "converter32.h": """ + #endif // __CONVERTER32_H_ + """, + "fntypes32.h": """ + #endif // __{filename}TYPES32_H_ + """, + "fndefs32.h": """ + + #endif // __{filename}DEFS32_H_ + """, + "fnundefs32.h": """ + + #endif // __{filename}UNDEFS32_H_ + """ + } + banner = "/********************************************************" + ('*'*len(ver)) + "***\n" \ + " * File automatically generated by rebuild_wrappers_32.py (v" + ver + ") *\n" \ + " ********************************************************" + ('*'*len(ver)) + "***/\n" + trim: Callable[[str], str] = lambda string: '\n'.join(line[2:] for line in string.splitlines())[1:] + # Yes, the for loops are inverted. This is because both dicts should have the same keys. + for fhdr in files_guard: + files_header[fhdr] = banner + trim(files_header[fhdr]) + for fhdr in files_header: + files_guard[fhdr] = trim(files_guard[fhdr]) + + # Typedefs + # E v c w i I C W u U f d D K l L p h H a A V O S 2 P N M s r b B _ + tdtypes = ["x64emu_t*", "void", "int8_t", "int16_t", "int32_t", "int64_t", "uint8_t", "uint16_t", "uint32_t", "uint64_t", "float", "double", "long double", "double", "intptr_t", "uintptr_t", "void*", "uintptr_t", "uintptr_t", "void*", "void*", "void*", "int32_t", "void*", "_2uint_struct_t", "void*", "...", "...", "void*", "\n#error _\n", "\n#error _\n", "\n#error _\n", "\n#error _\n"] + if len(FileSpec.values) != len(tdtypes): + raise NotImplementedError("len(values) = {lenval} != len(tdtypes) = {lentypes}".format(lenval=len(FileSpec.values), lentypes=len(tdtypes))) + def generate_typedefs(funs: Iterable[FunctionType], file): + for funtype in funs: + def getstr(i: int, ct: CType) -> str: + if ct.type != CType.ReadWrite.none: + return ct.structname2 + "_t*" + elif i < len(tdtypes): + return tdtypes[i] + else: + # We are in a *types.h file + assert(isinstance(funtype, _BareFunctionType) and funtype.isstruct) + return funtype.filespec.structs[funtype.filespec.structs.__keys__[i - len(tdtypes)]].name + if funtype.orig.name.endswith("Ev"): + file.write("typedef " + getstr(funtype.getcharidx(0), funtype.orig.recursive[0]) + + " (*" + funtype.orig.name + "_t)" + "(" + + getstr(funtype.getcharidx(2), funtype.orig.recursive[2]) + ");\n") + else: + file.write("typedef " + getstr(funtype.getcharidx(0), funtype.orig.recursive[0]) + + " (*" + funtype.orig.name + "_t)" + "(" + + ', '.join(getstr(funtype.getcharidx(i), funtype.orig.recursive[i]) + for i in range(2, len(funtype.orig.replaced))) + ");\n") + + # Wrappers + # E v c w i I C W u U f d D K l L p h H a A V O S 2 P N M s r b B _ + deltas = [0, 4, 4, 4, 4, 8, 4, 4, 4, 8, 4, 8, 12, 12, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 8, 4, 0, 0, 0, 1, 1, 4, 1] + # Asserts + if len(FileSpec.values) != len(deltas): + raise NotImplementedError("len(values) = {lenval} != len(deltas) = {lendeltas}".format(lenval=len(FileSpec.values), lendeltas=len(deltas))) + + # Helper functions to write the function definitions + def function_args(args: Iterable[Tuple[CType, str]], map: Callable[[CType], str], d: int = 4) -> str: + d = 4 + ret = "" + for arg, c in args: + if d % 4 != 0: + raise ValueError("{d} is not a multiple of 4. Did you try passing a V then something else?".format(d=d)) + + try: + ret = ret + map(arg).format(p=d) + d = d + deltas[FileSpec.values.index(c)] + except KeyError as e: + raise ValueError(arg.describe()) from e + return ret + + def function_writer(f, N: FunctionType, W: str) -> None: + f.write("void {0}_32(x64emu_t *emu, uintptr_t fcn) {2} {1} fn = ({1})fcn; ".format(N.orig.name, W, "{")) + + args = (N.orig.recursive[2:], N.orig.replaced[2:]) + if len(args[0]) == 0: + raise ValueError("Failed to properly parse {0}:\n{1}\nrecursive has length {2} < 3" + .format(N.orig.name, N.orig.describe(), len(N.orig.recursive))) + if len(args[1]) == 0: + raise ValueError("Failed to properly parse {0}:\n{1}\nreplaced ({2}) has length {3} < 3" + .format(N.orig.name, N.orig.describe(), N.orig.replaced, len(N.orig.replaced))) + if len(args[0]) != len(args[1]): + raise ValueError("Failed to properly parse {0}:\n{1}\nrecursive has length {2}, replaced has length {3}" + .format(N.orig.name, N.orig.describe(), len(args[0])+2, len(args[1])+2)) + if (len(args[0]) == 2) and (args[0][0].name == 'E') and (args[0][1].name == 'v'): args = ([args[0][0]], args[1][0]) + + #if any(c in 'PG' for c in args): + # # Vulkan struct or GValue pointer, need to unwrap functions at the end + # delta = 4 + # for c in args: + # if c == 'P': + # f.write("void* save{d} = NULL; void *arg{d} = VulkanFromx86(*(void**)(R_ESP + {d}), &save{d}); ".format(d=delta)) + # if c == 'G': + # f.write("my_GValue_t arg{d}; alignGValue(&arg{d}, *(void**)(R_ESP + {d})); ".format(d=delta)) + # delta = delta + deltas[FileSpec.values.index(c)] + # f.write(vals[FileSpec.values.index(N.orig[0])].format(function_args(args)[:-2])) + # delta = 4 + # for c in args: + # if c == 'P': + # f.write(" VulkanTox86(arg{d}, save{d});".format(d=delta)) + # if c == 'G': + # f.write(" unalignGValue(*(void**)(R_ESP + {d}), &arg{d});".format(d=delta)) + # delta = delta + deltas[FileSpec.values.index(c)] + # f.write(" }\n") + #else: + # # Generic function + # f.write(vals[FileSpec.values.index(N.orig[0])].format(function_args(args)[:-2]) + " }\n") + assert 'P' not in N.orig.name, "TODO: add back Vulkan compatibility" + def assertex(v: Optional[T]) -> T: + assert v is not None, "Value is None" + return v + f.write(function_args(zip(args[0], args[1]), lambda ct: assertex(ct.aspre))) + f.write(assertex(N.orig.recursive[0].asret).format(function_args(zip(args[0], args[1]), lambda ct: assertex(ct.asarg))[:-2])) + f.write(function_args(zip(args[0], args[1]), lambda ct: assertex(ct.aspost))) + f.write(" }\n") + + # TODO: src/wrapped/generated32/converter32.c&h + # Rewrite the wrapper.c file: + with open(os.path.join(root, "src", "wrapped32", "generated", "wrapper32.c"), 'w') as file: + file.write(files_header["wrapper32.c"].format(lbr="{", rbr="}", version=ver)) + + # First part: typedefs + for clauses in gbls: + if not clauses.empty(): + file.write("\n#if " + str(clauses) + "\n") + generate_typedefs(gbls[clauses], file) + if not clauses.empty(): + file.write("#endif\n") + + file.write("\n") + + # Next part: function definitions + + for clauses in gbls: + if not clauses.empty(): + file.write("\n#if " + str(clauses) + "\n") + for funtype in gbls[clauses]: + function_writer(file, funtype, funtype.orig.name + "_t") + if not clauses.empty(): + file.write("#endif\n") + file.write("\n") + for clauses in redirects: + if not clauses.empty(): + file.write("\n#if " + str(clauses) + "\n") + for funtype in redirects[clauses]: + assert(funtype.redirected is not None) + function_writer(file, funtype, funtype.redirected.orig.name + "_t") + if not clauses.empty(): + file.write("#endif\n") + + # Write the isRetX87Wrapper function + # isRetX87Wrapper + file.write("\nint isRetX87Wrapper32(wrapper_t fun) {\n") + for clauses in gbls: + empty = True + for funtype in gbls[clauses]: + if funtype.orig.name[0] in return_x87: # TODO: put this in a function (functions would request the ABI for more info) + if empty and (not clauses.empty()): + file.write("#if " + str(clauses) + "\n") + empty = False + file.write("\tif (fun == &" + funtype.orig.name + "_32) return 1;\n") + if not empty: + file.write("#endif\n") + file.write("\treturn 0;\n}\n") + + file.write(files_guard["wrapper32.c"].format(lbr="{", rbr="}", version=ver)) + + # Rewrite the wrapper32.h file: + with open(os.path.join(root, "src", "wrapped32", "generated", "wrapper32.h"), 'w') as file: + file.write(files_header["wrapper32.h"].format(lbr="{", rbr="}", version=ver)) + for clauses in gbls: + if not clauses.empty(): + file.write("\n#if " + str(clauses) + "\n") + for funtype in gbls[clauses]: + file.write("void " + funtype.orig.name + "_32(x64emu_t *emu, uintptr_t fnc);\n") + if not clauses.empty(): + file.write("#endif\n") + file.write("\n") + for clauses in redirects: + if not clauses.empty(): + file.write("\n#if " + str(clauses) + "\n") + for funtype in redirects[clauses]: + file.write("void " + funtype.orig.name + "_32(x64emu_t *emu, uintptr_t fnc);\n") + if not clauses.empty(): + file.write("#endif\n") + file.write(files_guard["wrapper32.h"].format(lbr="{", rbr="}", version=ver)) + + for fn in filespecs: + tdtypes[FileSpec.values.index('V')] = "..." + with open(os.path.join(root, "src", "wrapped32", "generated", fn + "types32.h"), 'w') as file: + file.write(files_header["fntypes32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + generate_typedefs(filespecs[fn].typedefs, file) + file.write("\n#define SUPER() ADDED_FUNCTIONS()") + for _bare in filespecs[fn].typedefs: + for fun in filespecs[fn].typedefs[_bare]: + if fun.no_dlsym: continue + file.write(" \\\n\tGO({0}, {1}_t)".format(fun.name, _bare.orig.name)) + file.write("\n\n") + file.write(files_guard["fntypes32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + + with open(os.path.join(root, "src", "wrapped32", "generated", fn + "defs32.h"), 'w') as file: + file.write(files_header["fndefs32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + for defined in filespecs[fn].structsuses: + assert defined.redirected is not None, "Unreachable?" + file.write("#define {defined} {define}\n".format(defined=defined.orig.name, define=defined.redirected.orig.name)) + file.write(files_guard["fndefs32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + + with open(os.path.join(root, "src", "wrapped32", "generated", fn + "undefs32.h"), 'w') as file: + file.write(files_header["fnundefs32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + for defined in filespecs[fn].structsuses: + file.write("#undef {defined}\n".format(defined=defined.orig)) + file.write(files_guard["fnundefs32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + +def main(root: str, files: Iterable[str], ver: str): + """ + main -- The main function + + root: the root path (where the CMakeLists.txt is located) + files: a list of files to parse (wrapped*.h) + ver: version number + """ + + # First read the files inside the headers + gbl_funcs, red_funcs, filespecs = readFiles(files) + + if all(not c.empty() for c in gbl_funcs) or all(not c.empty() for c in red_funcs): + print("\033[1;31mThere is suspiciously not many types...\033[m", file=sys.stderr) + print("Check the CMakeLists.txt file. If you are SURE there is nothing wrong" + " (as a random example, `set()` resets the variable...), then comment out the following return.", file=sys.stderr) + print("(Also, the program WILL crash later if you proceed.)", file=sys.stderr) + return 2 # Check what you did, not proceeding + + gbls, redirects = sortArrays(gbl_funcs, red_funcs, filespecs) + + # Check if there was any new functions + functions_list = checkRun(root, gbls, redirects, filespecs) + if functions_list is None: + print("Detected same build as last run, skipping") + return 0 + + # Now the files rebuilding part + generate_files(root, files, ver, gbls, redirects, filespecs) + + # Save the string for the next iteration, writing was successful + with open(os.path.join(root, "src", "wrapped32", "generated", "functions_list.txt"), 'w') as file: + file.write(functions_list) + + return 0 + +if __name__ == '__main__': + limit = [] + for i, v in enumerate(sys.argv): + if v == "--": + limit.append(i) + Define.defines = list(map(DefineType, sys.argv[2:limit[0]])) + if main(sys.argv[1], sys.argv[limit[0]+1:], "0.0.1.1") != 0: + exit(2) + exit(0) diff --git a/src/box32.c b/src/box32.c new file mode 100644 index 00000000..85a647a6 --- /dev/null +++ b/src/box32.c @@ -0,0 +1,283 @@ +#include +#include +#include + +#include "debug.h" +#include "box32.h" +#include "custommem.h" +#include "converter32.h" + +#include "khash.h" + +KHASH_MAP_INIT_INT64(to, ulong_t); +KHASH_MAP_INIT_INT(from, uintptr_t); + +static kh_from_t* hash_from; +static kh_to_t* hash_to; +#define CNT_INIT 0x80000001 +#define HASH_MASK 0x7fffffff +static uint32_t hash_cnt = CNT_INIT; +static pthread_rwlock_t hash_lock = {0}; +static int hash_running = 0; +// locale +static kh_from_t* locale_from; +static kh_to_t* locale_to; + + +void init_hash_helper() { + hash_from = kh_init(from); + hash_to = kh_init(to); + locale_from = kh_init(from); + locale_to = kh_init(to); + pthread_rwlock_init(&hash_lock, NULL); + hash_running = 1; +} +void fini_hash_helper() { + hash_running = 0; + kh_destroy(from, hash_from); + hash_from = NULL; + kh_destroy(to, hash_to); + hash_to = NULL; + hash_cnt = CNT_INIT; + kh_destroy(from, locale_from); + locale_from = NULL; + kh_destroy(to, locale_to); + locale_to = NULL; + pthread_rwlock_destroy(&hash_lock); +} + +// Convert from hash key to original 64bits value +uintptr_t from_hash(ulong_t l) { + // easy case first + if((l&HASH_MASK)==l) { + return (uintptr_t)l; + } + if(l==0xffffffff) { + return 0xffffffffffffffffll; + } + // get value from hash table second + uintptr_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, from_hash used but hash not running\n"); + return ret; + } + pthread_rwlock_rdlock(&hash_lock); + khint_t k = kh_get(from, hash_from, l); + if (k==kh_end(hash_from)) { + ret = (uintptr_t)l; + } else { + ret = kh_value(hash_from, k); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} +// same as from_hash +uintptr_t from_hash_d(ulong_t l) { + return from_hash(l); +} + +// Convert from 64bits to hash key, creating it if needed +ulong_t to_hash(uintptr_t p) { + if((p&(uintptr_t)HASH_MASK)==p) { + return (ulong_t)p; + } + if(p==0xffffffffffffffffll) { + return 0xffffffff; + } + ulong_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, to_hash used but hash not running\n"); + return ret; + } + khint_t k; + pthread_rwlock_rdlock(&hash_lock); + k = kh_get(to, hash_to, p); + if(k==kh_end(hash_to)) { + // create a new key, but need write lock! + pthread_rwlock_unlock(&hash_lock); + pthread_rwlock_wrlock(&hash_lock); + ret = hash_cnt++; + if(hash_cnt==0xffffffff) + hash_cnt = CNT_INIT; + int r; + k = kh_put(to, hash_to, p, &r); + kh_value(hash_to, k) = ret; + k = kh_put(from, hash_from, ret, &r); + kh_value(hash_from, k) = p; + } else { + ret = kh_value(hash_to, k); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} + +// Convert from 64bits to hash key and delete the entry from both hash table +ulong_t to_hash_d(uintptr_t p) { + if((p&(uintptr_t)HASH_MASK)==p) + return (ulong_t)p; + if(p==0xffffffffffffffffll) + return 0xffffffff; + ulong_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, to_hash_d used but hash not running\n"); + return ret; + } + khint_t k; + pthread_rwlock_wrlock(&hash_lock); + k = kh_get(to, hash_to, p); + if(k==kh_end(hash_to)) { + /// should this be an assert? + } else { + ret = kh_value(hash_to, k); + // delete both entries + k = kh_get(to, hash_to, p); + kh_del(to, hash_to, k); + k = kh_get(from, hash_from, ret); + kh_del(from, hash_from, k); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} + +typedef struct struct_locale_s { + void* p0[13]; + void* p1; + void* p2; + void* p3; + void* p4[13]; +} struct_locale_t; +void from_struct_locale(struct_locale_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + for(int i=0; i<13; ++i) { + dest->p0[i] = (void*)from_hash(*(ptr_t*)src); src += 4; + } + dest->p1 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p2 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p3 = from_ptrv(*(ptr_t*)src); src += 4; + for(int i=0; i<13; ++i) { + dest->p4[i] = (void*)from_hash(*(ptr_t*)src); src += 4; + } +} +void to_struct_locale(ptr_t d, const struct_locale_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + for(int i=0; i<13; ++i) { + *(ptr_t*)dest = to_hashv(src->p0[i]); dest += 4; + } + // copy the 3 ctype int (1st is short int, but int will do) + *(unsigned short int*)(d+(13+3+13)*sizeof(ptr_t)) = *(unsigned short int*)src->p1; + *(ptr_t*)dest = d+(13+3+13)*sizeof(ptr_t); dest += 4; + *(int*)(d+(13+3+13+1)*sizeof(ptr_t)) = *(int*)src->p2; + *(ptr_t*)dest = d+(13+3+13+1)*sizeof(ptr_t); dest += 4; + *(int*)(d+(13+3+13+3)*sizeof(ptr_t)) = *(int*)src->p3; + *(ptr_t*)dest = d+(13+3+13+2)*sizeof(ptr_t); dest += 4; + for(int i=0; i<13; ++i) { + *(ptr_t*)dest = to_hashv(src->p4[i]); dest += 4; + } +} +void free_struct_locale(const struct_locale_t *src) { + for(int i=0; i<13; ++i) { + to_hash_d((uintptr_t)src->p0[i]); + } + for(int i=0; i<13; ++i) { + to_hash_d((uintptr_t)src->p4[i]); + } +} + +// Convert from locale key to original 64bits value +void* from_locale(ptr_t l) { + // easy case first + if(l < 0x100) { + return from_ptrv(l); + } + if(l == 0xffffffff) { + return (void*)-1; + } + // get value from hash table second + void* ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, from_locale used but hash not running\n"); + return ret; + } + pthread_rwlock_rdlock(&hash_lock); + khint_t k = kh_get(from, locale_from, l); + if (k==kh_end(locale_from)) { + ret = from_ptrv(l); + } else { + ret = (void*)kh_value(locale_from, k); + } + pthread_rwlock_unlock(&hash_lock); + //from_struct_locale((struct_locale_t*)ret, l); + return ret; +} +// same as from_locale +void* from_locale_d(ptr_t l) { + return from_locale(l); +} + +// Convert from 64bits to locale key, creating it if needed +ptr_t to_locale(void* p) { + if((uintptr_t)p < 0x100) { + return to_ptrv(p); + } + if(p == (void*)-1) { + return 0xffffffff; + } + ptr_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, to_locale used but hash not running\n"); + return ret; + } + khint_t k; + pthread_rwlock_rdlock(&hash_lock); + k = kh_get(to, locale_to, (uintptr_t)p); + int conv = 0; + if(k==kh_end(locale_to)) { + // create a new key, but need write lock! + pthread_rwlock_unlock(&hash_lock); + pthread_rwlock_wrlock(&hash_lock); + // a locale_t is 5 pointer! + void* m = calloc(13+3+13+3, sizeof(ptr_t)); // the 3 ctype value are also inside the locale struct + ret = to_ptrv(m); + // add to hash maps + int r; + k = kh_put(to, locale_to, (uintptr_t)p, &r); + kh_value(locale_to, k) = ret; + k = kh_put(from, locale_from, ret, &r); + kh_value(locale_from, k) = (uintptr_t)p; + conv = 1; + } else { + ret = kh_value(locale_to, k); + } + pthread_rwlock_unlock(&hash_lock); + if(conv) + to_struct_locale(ret, (struct_locale_t*)p); + return ret; +} + +// Convert from 64bits to hash key and delete the entry from both hash table +ptr_t to_locale_d(void* p) { + if((uintptr_t)p < 0x100) + return to_ptrv(p); + ptr_t ret = 0; + if(!hash_running) + return ret; + khint_t k; + pthread_rwlock_wrlock(&hash_lock); + k = kh_get(to, locale_to, (uintptr_t)p); + if(k==kh_end(locale_to)) { + /// should this be an assert? + } else { + ret = kh_value(locale_to, k); + // free the memory + free_struct_locale(p); + free(from_ptrv(ret)); + // delete both entries + k = kh_get(to, locale_to, (uintptr_t)p); + kh_del(to, locale_to, k); + k = kh_get(from, locale_from, ret); + kh_del(from, locale_from, k); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} \ No newline at end of file diff --git a/src/box64context.c b/src/box64context.c index 5d5155fa..b52e41e3 100644 --- a/src/box64context.c +++ b/src/box64context.c @@ -23,6 +23,9 @@ #include "gltools.h" #include "rbtree.h" #include "dynarec.h" +#ifdef BOX32 +#include "box32.h" +#endif EXPORTDYN void initAllHelpers(box64context_t* context) @@ -31,6 +34,9 @@ void initAllHelpers(box64context_t* context) if(inited) return; my_context = context; + #ifdef BOX32 + init_hash_helper(); + #endif init_pthread_helper(); init_bridge_helper(); init_signal_helper(context); @@ -47,6 +53,9 @@ void finiAllHelpers(box64context_t* context) fini_pthread_helper(context); fini_signal_helper(); fini_bridge_helper(); + #ifdef BOX32 + fini_hash_helper(); + #endif fini_custommem_helper(context); finied = 1; } @@ -75,6 +84,7 @@ void free_tlsdatasize(void* p) } void x64Syscall(x64emu_t *emu); +void x86Syscall(x64emu_t *emu); int unlockMutex() { @@ -223,15 +233,21 @@ box64context_t *NewBox64Context(int argc) context->system = NewBridge(); // Cannot use Bridge name as the map is not initialized yet // create vsyscall - context->vsyscall = AddBridge(context->system, vFEv, x64Syscall, 0, NULL); + context->vsyscall = AddBridge(context->system, vFEv, box64_is32bits?x86Syscall:x64Syscall, 0, NULL); // create the vsyscalls - context->vsyscalls[0] = AddVSyscall(context->system, 96); - context->vsyscalls[1] = AddVSyscall(context->system, 201); - context->vsyscalls[2] = AddVSyscall(context->system, 309); - // create the alternate to map at address - addAlternate((void*)0xffffffffff600000, (void*)context->vsyscalls[0]); - addAlternate((void*)0xffffffffff600400, (void*)context->vsyscalls[1]); - addAlternate((void*)0xffffffffff600800, (void*)context->vsyscalls[2]); + if(box64_is32bits) { + #ifdef BOX32 + addAlternate((void*)0xffffe400, from_ptrv(context->vsyscall)); + #endif + } else { + context->vsyscalls[0] = AddVSyscall(context->system, 96); + context->vsyscalls[1] = AddVSyscall(context->system, 201); + context->vsyscalls[2] = AddVSyscall(context->system, 309); + // create the alternate to map at address + addAlternate((void*)0xffffffffff600000, (void*)context->vsyscalls[0]); + addAlternate((void*)0xffffffffff600400, (void*)context->vsyscalls[1]); + addAlternate((void*)0xffffffffff600800, (void*)context->vsyscalls[2]); + } // create exit bridge context->exit_bridge = AddBridge(context->system, NULL, NULL, 0, NULL); // get handle to box64 itself diff --git a/src/core.c b/src/core.c index 03859f12..5d85d08c 100644 --- a/src/core.c +++ b/src/core.c @@ -189,6 +189,7 @@ char* box64_custom_gstreamer = NULL; uintptr_t fmod_smc_start = 0; uintptr_t fmod_smc_end = 0; uint32_t default_gs = 0x53; +uint32_t default_fs = 0x53; int jit_gdb = 0; int box64_tcmalloc_minimal = 0; @@ -1269,7 +1270,11 @@ int GatherEnv(char*** dest, char** env, char* prog) (*dest)[idx++] = box_strdup("BOX64_PATH=.:bin"); } if(!ld_path) { + #ifdef BOX32 + (*dest)[idx++] = box_strdup("BOX64_LD_LIBRARY_PATH=.:lib:lib64:x86_64:bin64:libs64:i386:libs:bin"); + #else (*dest)[idx++] = box_strdup("BOX64_LD_LIBRARY_PATH=.:lib:lib64:x86_64:bin64:libs64"); + #endif } // add "_=prog" at the end... if(prog) { @@ -1382,24 +1387,7 @@ void LoadEnvVars(box64context_t *context) } } while(p); } - // check BOX64_LD_LIBRARY_PATH and load it - LoadEnvPath(&context->box64_ld_lib, ".:lib:lib64:x86_64:bin64:libs64", "BOX64_LD_LIBRARY_PATH"); - #ifndef TERMUX - if(FileExist("/lib/x86_64-linux-gnu", 0)) - AddPath("/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - if(FileExist("/usr/lib/x86_64-linux-gnu", 0)) - AddPath("/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - if(FileExist("/usr/x86_64-linux-gnu/lib", 0)) - AddPath("/usr/x86_64-linux-gnu/lib", &context->box64_ld_lib, 1); - if(FileExist("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", 0)) - AddPath("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - #else - //TODO: Add Termux Library Path - Lily - if(FileExist("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", 0)) - AddPath("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - #endif - if(getenv("LD_LIBRARY_PATH")) - PrependList(&context->box64_ld_lib, getenv("LD_LIBRARY_PATH"), 1); // in case some of the path are for x86 world + if(getenv("BOX64_EMULATED_LIBS")) { char* p = getenv("BOX64_EMULATED_LIBS"); ParseList(p, &context->box64_emulated_libs, 0); @@ -1497,6 +1485,54 @@ void LoadEnvVars(box64context_t *context) #endif } +EXPORTDYN +void LoadLDPath(box64context_t *context) +{ + // check BOX64_LD_LIBRARY_PATH and load it + #ifdef BOX32 + if(box64_is32bits) + LoadEnvPath(&context->box64_ld_lib, ".:lib:i386:bin:libs", "BOX64_LD_LIBRARY_PATH"); + else + #endif + LoadEnvPath(&context->box64_ld_lib, ".:lib:lib64:x86_64:bin64:libs64", "BOX64_LD_LIBRARY_PATH"); + #ifndef TERMUX + if(box64_is32bits) { + #ifdef BOX32 + if(FileExist("/lib/i386-linux-gnu", 0)) + AddPath("/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/lib/i386-linux-gnu", 0)) + AddPath("/usr/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/i386-linux-gnu/lib", 0)) + AddPath("/usr/i386-linux-gnu/lib", &context->box64_ld_lib, 1); + if(FileExist("/data/data/com.termux/files/usr/glibc/lib/i386-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/glibc/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + #endif + } else { + if(FileExist("/lib/x86_64-linux-gnu", 0)) + AddPath("/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/lib/x86_64-linux-gnu", 0)) + AddPath("/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/x86_64-linux-gnu/lib", 0)) + AddPath("/usr/x86_64-linux-gnu/lib", &context->box64_ld_lib, 1); + if(FileExist("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + } + #else + //TODO: Add Termux Library Path - Lily + if(box64_is32bits) { + #ifdef BOX32 + if(FileExist("/data/data/com.termux/files/usr/lib/i386-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + #endif + } else { + if(FileExist("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + } + #endif + if(getenv("LD_LIBRARY_PATH")) + PrependList(&context->box64_ld_lib, getenv("LD_LIBRARY_PATH"), 1); // in case some of the path are for x86 world +} + EXPORTDYN void setupTraceInit() { @@ -1957,12 +1993,14 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf // check if box86 is present { my_context->box86path = box_strdup(my_context->box64path); + #ifndef BOX32 char* p = strrchr(my_context->box86path, '6'); // get the 6 of box64 p[0] = '8'; p[1] = '6'; // change 64 to 86 if(!FileExist(my_context->box86path, IS_FILE)) { box_free(my_context->box86path); my_context->box86path = NULL; } + #endif } const char* prgname = strrchr(prog, '/'); if(!prgname) @@ -2089,9 +2127,12 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf box64_is32bits = FileIsX86ELF(my_context->fullpath); if(box64_is32bits) { printf_log(LOG_INFO, "BOX64: Using Box32 to load 32bits elf\n"); + loadProtectionFromMap(); reserveHighMem(); + init_pthread_helper_32(); } #endif + LoadLDPath(my_context); elfheader_t *elf_header = LoadAndCheckElfHeader(f, my_context->fullpath, 1); if(!elf_header) { int x86 = my_context->box86path?FileIsX86ELF(my_context->fullpath):0; @@ -2252,10 +2293,15 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf // stack setup is much more complicated then just that! SetupInitialStack(emu); // starting here, the argv[] don't need free anymore SetupX64Emu(emu, NULL); - SetRSI(emu, my_context->argc); - SetRDX(emu, (uint64_t)my_context->argv); - SetRCX(emu, (uint64_t)my_context->envv); - SetRBP(emu, 0); // Frame pointer so to "No more frame pointer" + if(box64_is32bits) { + SetEAX(emu, my_context->argc); + SetEBX(emu, my_context->argv32); + } else { + SetRSI(emu, my_context->argc); + SetRDX(emu, (uint64_t)my_context->argv); + SetRCX(emu, (uint64_t)my_context->envv); + SetRBP(emu, 0); // Frame pointer so to "No more frame pointer" + } // child fork to handle traces pthread_atfork(NULL, NULL, my_child_fork); @@ -2339,10 +2385,19 @@ int emulate(x64emu_t* emu, elfheader_t* elf_header) // emulate! printf_log(LOG_DEBUG, "Start x64emu on Main\n"); // Stack is ready, with stacked: NULL env NULL argv argc - SetRIP(emu, my_context->ep); ResetFlags(emu); - Push64(emu, my_context->exit_bridge); // push to pop it just after - SetRDX(emu, Pop64(emu)); // RDX is exit function + #ifdef BOX32 + if(box64_is32bits) { + SetEIP(emu, my_context->ep); + Push32(emu, my_context->exit_bridge); // push to pop it just after + SetEDX(emu, Pop32(emu)); // RDX is exit function + } else + #endif + { + SetRIP(emu, my_context->ep); + Push64(emu, my_context->exit_bridge); // push to pop it just after + SetRDX(emu, Pop64(emu)); // RDX is exit function + } Run(emu, 0); // Get EAX int ret = GetEAX(emu); diff --git a/src/custommem.c b/src/custommem.c index 06b48328..5862ed13 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -1521,21 +1521,68 @@ static void atfork_child_custommem(void) // (re)init mutex if it was lock before the fork init_mutexes(); } - +#ifdef BOX32 +void reverveHigMem32(void) +{ + loadProtectionFromMap(); + uintptr_t cur_size = 1024LL*1024*1024*1024; // start with 1TB check + void* cur; + while(cur_size>=65536) { + cur = internal_mmap(NULL, cur_size, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + if((cur==MAP_FAILED) || (cur<(void*)0x100000000LL)) { + if(cur!=MAP_FAILED) { + //printf_log(LOG_DEBUG, " Failed to reserve high %p (%zx)\n", cur, cur_size); + internal_munmap(cur, cur_size); + } //else + // printf_log(LOG_DEBUG, " Failed to reserve %zx sized block\n", cur_size); + cur_size>>=1; + } else { + rb_set(mapallmem, (uintptr_t)cur, (uintptr_t)cur+cur_size, 1); + //printf_log(LOG_DEBUG, "Reserved high %p (%zx)\n", cur, cur_size); + } + } + printf_log(LOG_INFO, "Memory higher than 32bits reserved\n"); + if(box64_log>=LOG_DEBUG) { + uintptr_t start=0x100000000LL; + int prot; + uintptr_t bend; + while (bend!=0xffffffffffffffffLL) { + if(rb_get_end(mapallmem, start, &prot, &bend)) { + printf_log(LOG_DEBUG, " Reserved: %p - %p (%d)\n", (void*)start, (void*)bend, prot); + } + start = bend; + } + } +} +#endif void my_reserveHighMem() { static int reserved = 0; if(reserved || (!have48bits && !box64_is32bits)) return; reserved = 1; + #ifdef BOX32 + if(box64_is32bits) { + reverveHigMem32(); + return; + } + #endif uintptr_t cur = box64_is32bits?(1ULL<<32):(1ULL<<47); uintptr_t bend = 0; uint32_t prot; while (bend!=0xffffffffffffffffLL) { if(!rb_get_end(mapallmem, cur, &prot, &bend)) { - void* ret = internal_mmap((void*)cur, bend-cur, 0, MAP_ANONYMOUS|MAP_FIXED|MAP_PRIVATE|MAP_NORESERVE, -1, 0); - printf_log(LOG_DEBUG, "Reserve %p-%p => %p (%s)\n", (void*)cur, bend, ret, strerror(errno)); - printf_log(LOG_DEBUG, "mmap %p-%p\n", cur, bend); + // create a border at 39bits... + if(cur<(1ULL<<39) && bend>(1ULL<<39)) + bend = 1ULL<<39; + // create a border at 47bits + if(cur<(1ULL<<47) && bend>(1ULL<<47)) + bend = 1ULL<<47; + // create a border at 48bits + if(cur<(1ULL<<48) && bend>(1ULL<<48)) + bend = 1ULL<<48; + void* ret = internal_mmap((void*)cur, bend-cur, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + printf_log(LOG_DEBUG, "Reserve %p-%p => %p (%s)\n", (void*)cur, bend, ret, (ret==MAP_FAILED)?strerror(errno):"ok"); if(ret!=(void*)-1) { rb_set(mapallmem, cur, bend, 1); } diff --git a/src/dynarec/arm64/arm64_emitter.h b/src/dynarec/arm64/arm64_emitter.h index 0070af36..781e7980 100644 --- a/src/dynarec/arm64/arm64_emitter.h +++ b/src/dynarec/arm64/arm64_emitter.h @@ -283,13 +283,19 @@ int convert_bitmask(uint64_t bitmask); #define LDRx_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b11, Rm, 0b011, 0, Rn, Rt)) #define LDRx_REG_LSL3(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b11, Rm, 0b011, 1, Rn, Rt)) #define LDRx_REG_UXTW3(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b11, Rm, 0b010, 1, Rn, Rt)) +#define LDRx_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b11, Rm, 0b110, 0, Rn, Rt)) #define LDRw_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b10, Rm, 0b011, 0, Rn, Rt)) #define LDRw_REG_LSL2(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b10, Rm, 0b011, 1, Rn, Rt)) +#define LDRw_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b10, Rm, 0b110, 0, Rn, Rt)) #define LDRxw_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b10+rex.w, Rm, 0b011, 0, Rn, Rt)) #define LDRz_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(rex.is32bits?0b10:0b11, Rm, 0b011, 0, Rn, Rt)) +#define LDRxw_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b10+rex.w, Rm, 0b110, 0, Rn, Rt)) +#define LDRz_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(rex.is32bits?0b10:0b11, Rm, 0b110, 0, Rn, Rt)) #define LDRB_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b00, Rm, 0b011, 0, Rn, Rt)) #define LDRB_REG_UXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b00, Rm, 0b010, 0, Rn, Rt)) +#define LDRB_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b00, Rm, 0b110, 0, Rn, Rt)) #define LDRH_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b01, Rm, 0b011, 0, Rn, Rt)) +#define LDRH_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b01, Rm, 0b110, 0, Rn, Rt)) #define LDRS_U12_gen(size, op1, opc, imm12, Rn, Rt) ((size)<<30 | 0b111<<27 | (op1)<<24 | (opc)<<22 | (imm12)<<10 | (Rn)<<5 | (Rt)) #define LDRSHx_U12(Rt, Rn, imm12) EMIT(LDRS_U12_gen(0b01, 0b01, 0b10, ((uint32_t)(imm12>>1))&0xfff, Rn, Rt)) @@ -301,6 +307,7 @@ int convert_bitmask(uint64_t bitmask); #define LDRS_REG_gen(size, Rm, option, S, Rn, Rt) ((size)<<30 | 0b111<<27 | 0b10<<22 | 1<<21 | (Rm)<<16 | (option)<<13 | (S)<<12 | (0b10)<<10 | (Rn)<<5 | (Rt)) #define LDRSW_REG(Rt, Rn, Rm) EMIT(LDRS_REG_gen(0b10, Rm, 0b011, 0, Rn, Rt)) +#define LDRSW_REG_SXTW(Rt, Rn, Rm) EMIT(LDRS_REG_gen(0b10, Rm, 0b110, 0, Rn, Rt)) #define LDR_PC_gen(opc, imm19, Rt) ((opc)<<30 | 0b011<<27 | (imm19)<<5 | (Rt)) #define LDRx_literal(Rt, imm19) EMIT(LDR_PC_gen(0b01, ((imm19)>>2)&0x7FFFF, Rt)) @@ -371,12 +378,18 @@ int convert_bitmask(uint64_t bitmask); #define STRx_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b011, 0, Rn, Rt)) #define STRx_REG_LSL3(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b011, 1, Rn, Rt)) #define STRx_REG_UXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b010, 0, Rn, Rt)) +#define STRx_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b110, 0, Rn, Rt)) #define STRw_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b10, Rm, 0b011, 0, Rn, Rt)) #define STRw_REG_LSL2(Rt, Rn, Rm) EMIT(STR_REG_gen(0b10, Rm, 0b011, 1, Rn, Rt)) +#define STRw_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b10, Rm, 0b110, 0, Rn, Rt)) #define STRB_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b00, Rm, 0b011, 0, Rn, Rt)) +#define STRB_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b00, Rm, 0b110, 0, Rn, Rt)) #define STRH_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b01, Rm, 0b011, 0, Rn, Rt)) +#define STRH_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b01, Rm, 0b110, 0, Rn, Rt)) #define STRxw_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.w?0b11:0b10, Rm, 0b011, 0, Rn, Rt)) +#define STRxw_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.w?0b11:0b10, Rm, 0b110, 0, Rn, Rt)) #define STRz_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.is32bits?0b10:0b11, Rm, 0b011, 0, Rn, Rt)) +#define STRz_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.is32bits?0b10:0b11, Rm, 0b110, 0, Rn, Rt)) // LOAD/STORE PAIR #define MEMPAIR_gen(size, L, op2, imm7, Rt2, Rn, Rt) ((size)<<31 | 0b101<<27 | (op2)<<23 | (L)<<22 | (imm7)<<15 | (Rt2)<<10 | (Rn)<<5 | (Rt)) @@ -896,18 +909,24 @@ int convert_bitmask(uint64_t bitmask); #define VMEM_REG_gen(size, opc, Rm, option, S, Rn, Rt) ((size)<<30 | 0b111<<27 | 1<<26 | (opc)<<22 | 1<<21 | (Rm)<<16 | (option)<<13 | (S)<<12 | 0b10<<10 | (Rn)<<5 | (Rt)) #define VLDR32_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b01, Rm, 0b011, 0, Rn, Dt)) +#define VLDR32_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b01, Rm, 0b110, 0, Rn, Dt)) #define VLDR32_REG_LSL2(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b01, Rm, 0b011, 1, Rn, Dt)) #define VLDR64_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b01, Rm, 0b011, 0, Rn, Dt)) +#define VLDR64_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b01, Rm, 0b110, 0, Rn, Dt)) #define VLDR64_REG_LSL3(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b01, Rm, 0b011, 1, Rn, Dt)) #define VLDR128_REG(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b11, Rm, 0b011, 0, Rn, Qt)) #define VLDR128_REG_LSL4(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b11, Rm, 0b011, 1, Rn, Qt)) +#define VLDR128_REG_SXTW(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b11, Rm, 0b110, 0, Rn, Qt)) #define VSTR32_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b00, Rm, 0b011, 0, Rn, Dt)) #define VSTR32_REG_LSL2(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b00, Rm, 0b011, 1, Rn, Dt)) +#define VSTR32_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b00, Rm, 0b110, 0, Rn, Dt)) #define VSTR64_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b00, Rm, 0b011, 0, Rn, Dt)) #define VSTR64_REG_LSL3(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b00, Rm, 0b011, 1, Rn, Dt)) +#define VSTR64_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b00, Rm, 0b110, 0, Rn, Dt)) #define VSTR128_REG(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b10, Rm, 0b011, 0, Rn, Qt)) #define VSTR128_REG_LSL4(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b10, Rm, 0b011, 1, Rn, Qt)) +#define VSTR128_REG_SXTW(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b10, Rm, 0b110, 0, Rn, Qt)) #define VLDR_PC_gen(opc, imm19, Rt) ((opc)<<30 | 0b011<<27 | 1<<26 | (imm19)<<5 | (Rt)) #define VLDR32_literal(Vt, imm19) EMIT(VLDR_PC_gen(0b00, ((imm19)>>2)&0x7FFFF, Vt)) diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c index 85b89e3a..6ff6d594 100644 --- a/src/dynarec/arm64/dynarec_arm64_64.c +++ b/src/dynarec/arm64/dynarec_arm64_64.c @@ -108,7 +108,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v0 = sse_get_reg_empty(dyn, ninst, x1, gd); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VLD64(v0, x4, fixedaddress); // upper part reseted } break; @@ -126,7 +126,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v0 = sse_get_reg_empty(dyn, ninst, x1, gd); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VLD32(v0, x4, fixedaddress); } break; @@ -148,7 +148,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VST128(v0, x4, fixedaddress); SMWRITE2(); } @@ -165,7 +165,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VST64(v0, x4, fixedaddress); SMWRITE2(); } @@ -182,7 +182,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VST32(v0, x4, fixedaddress); SMWRITE2(); } @@ -206,7 +206,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VLD128(v0, ed, fixedaddress); } break; @@ -275,7 +275,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRB_REG(gd, ed, x4); + if(rex.is32bits) + LDRB_REG_SXTW(gd, x4, ed); + else + LDRB_REG(gd, ed, x4); } break; default: @@ -397,7 +400,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRSW_REG(gd, ed, x4); + if(rex.is32bits) + LDRSW_REG_SXTW(gd, x4, ed); + else + LDRSW_REG(gd, ed, x4); } } else { if(MODREG) { // reg <= reg @@ -406,7 +412,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRw_REG(gd, ed, x4); + if(rex.is32bits) + LDRw_REG_SXTW(gd, x4, ed); + else + LDRw_REG(gd, ed, x4); } } } @@ -639,7 +648,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRB_REG(x4, wback, x4); + if(rex.is32bits) + LDRB_REG_SXTW(x4, x4, wback); + else + LDRB_REG(x4, wback, x4); ed = x4; } BFIx(gb1, ed, gb2, 8); @@ -653,7 +665,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOVxw_REG(xRAX+(nextop&7)+(rex.b<<3), gd); } else { // mem <= reg addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - STRxw_REG(gd, ed, x4); + if(rex.is32bits) + STRxw_REG_SXTW(gd, x4, ed); + else + STRxw_REG(gd, ed, x4); SMWRITE2(); } break; @@ -668,7 +683,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { // mem <= reg SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRxw_REG(gd, ed, x4); + if(rex.is32bits) + LDRxw_REG_SXTW(gd, x4, ed); + else + LDRxw_REG(gd, ed, x4); } break; @@ -698,7 +716,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { SMREAD(); addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRH_REG(x1, wback, x4); + if(rex.is32bits) + LDRH_REG_SXTW(x1, x4, wback); + else + LDRH_REG(x1, wback, x4); ed = x1; } STRH_U12(ed, xEmu, offsetof(x64emu_t, segs[u8])); @@ -714,11 +735,17 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin POP1z(x2); // so this can handle POP [ESP] and maybe some variant too addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0, 0, rex, NULL, 0, 0); if(ed==xRSP) { - STRz_REG(x2, ed, x4); + if(rex.is32bits) + STRz_REG_SXTW(x2, x4, ed); + else + STRz_REG(x2, ed, x4); } else { // complicated to just allow a segfault that can be recovered correctly SUBz_U12(xRSP, xRSP, rex.is32bits?4:8); - STRz_REG(x2, ed, x4); + if(rex.is32bits) + STRz_REG_SXTW(x2, x4, ed); + else + STRz_REG(x2, ed, x4); ADDz_U12(xRSP, xRSP, rex.is32bits?4:8); } } @@ -735,9 +762,25 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin else u64 = F64; MOV64z(x1, u64); - LDRxw_REG(xRAX, x1, x4); + if(rex.is32bits) + LDRxw_REG_SXTW(xRAX, x4, x1); + else + LDRxw_REG(xRAX, x4, x1); + break; + case 0xA2: + INST_NAME("MOV FS:Od,AL"); + grab_segdata(dyn, addr, ninst, x4, seg); + if(rex.is32bits) + u64 = F32; + else + u64 = F64; + MOV64z(x1, u64); + if(rex.is32bits) + STRB_REG_SXTW(xRAX, x4, x1); + else + STRB_REG(xRAX, x4, x1); + SMWRITE2(); break; - case 0xA3: INST_NAME("MOV FS:Od,EAX"); grab_segdata(dyn, addr, ninst, x4, seg); @@ -746,7 +789,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin else u64 = F64; MOV64z(x1, u64); - STRxw_REG(xRAX, x1, x4); + if(rex.is32bits) + STRxw_REG_SXTW(xRAX, x4, x1); + else + STRxw_REG(xRAX, x4, x1); SMWRITE2(); break; @@ -770,7 +816,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 1); u8 = F8; MOV32w(x3, u8); - STRB_REG(x3, ed, x4); + if(rex.is32bits) + STRB_REG_SXTW(x3, x4, ed); + else + STRB_REG(x3, ed, x4); SMWRITE2(); } break; @@ -786,7 +835,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 4); i64 = F32S; MOV64xw(x3, i64); - STRxw_REG(x3, ed, x4); + if(rex.is32bits) + STRxw_REG_SXTW(x3, x4, ed); + else + STRxw_REG(x3, ed, x4); SMWRITE2(); } break; diff --git a/src/dynarec/arm64/dynarec_arm64_6664.c b/src/dynarec/arm64/dynarec_arm64_6664.c index 4b33fab6..30a28012 100644 --- a/src/dynarec/arm64/dynarec_arm64_6664.c +++ b/src/dynarec/arm64/dynarec_arm64_6664.c @@ -62,7 +62,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); v1 = fpu_get_scratch(dyn, ninst); - VLDR64_REG(v1, ed, x4); + if(rex.is32bits) + VLDR64_REG_SXTW(v1, x4, ed); + else + VLDR64_REG(v1, ed, x4); } FCMPD(v0, v1); FCOMI(x1, x2); @@ -80,7 +83,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); SMREAD(); - VLDR128_REG(v0, ed, x4); + if(rex.is32bits) + VLDR128_REG_SXTW(v0, x4, ed); + else + VLDR128_REG(v0, ed, x4); } break; @@ -94,7 +100,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - VSTR128_REG(v0, ed, x4); + if(rex.is32bits) + VSTR128_REG_SXTW(v0, x4, ed); + else + VSTR128_REG(v0, ed, x4); SMWRITE2(); } break; @@ -110,7 +119,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - VSTR64_REG(v0, ed, x4); + if(rex.is32bits) + VSTR64_REG_SXTW(v0, x4, ed); + else + VSTR64_REG(v0, ed, x4); SMWRITE(); } break; @@ -229,7 +241,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n if(rex.w) { STRx_REG(gd, ed, x4); } else { - STRH_REG(gd, ed, x4); + if(rex.is32bits) + STRH_REG_SXTW(gd, x4, ed); + else + STRH_REG(gd, ed, x4); } SMWRITE(); } @@ -255,7 +270,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n if(rex.w) { LDRx_REG(gd, ed, x4); } else { - LDRH_REG(x1, ed, x4); + if(rex.is32bits) + LDRH_REG_SXTW(x1, x4, ed); + else + LDRH_REG(x1, ed, x4); BFIx(gd, x1, 0, 16); } } diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 7810293b..06e7705b 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -213,10 +213,13 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, D); \ - LDRxw_REG(x1, wback, O); \ + if(rex.is32bits) \ + LDRxw_REG_SXTW(x1, O, wback); \ + else \ + LDRxw_REG(x1, wback, O); \ ed = x1; \ } -#define WBACKO(O) if(wback) {STRxw_REG(ed, wback, O); SMWRITE2();} +#define WBACKO(O) if(wback) {if(rex.is32bits) STRxw_REG_SXTW(ed, O, wback); else STRxw_REG(ed, wback, O); SMWRITE2();} //GETEDOx can use r1 for ed, and r2 for wback. wback is 0 if ed is xEAX..xEDI #define GETEDOx(O, D) if(MODREG) { \ ed = xRAX+(nextop&7)+(rex.b<<3); \ @@ -224,7 +227,10 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, D); \ - LDRx_REG(x1, wback, O); \ + if(rex.is32bits) \ + LDRx_REG_SXTW(x1, O, wback); \ + else \ + LDRx_REG(x1, wback, O); \ ed = x1; \ } //GETEDOz can use r1 for ed, and r2 for wback. wback is 0 if ed is xEAX..xEDI @@ -234,7 +240,10 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, D); \ - LDRz_REG(x1, wback, O); \ + if(rex.is32bits) \ + LDRz_REG_SXTW(x1, O, wback); \ + else \ + LDRz_REG(x1, wback, O); \ ed = x1; \ } #define GETSEDOw(O, D) if((nextop&0xC0)==0xC0) { \ @@ -245,7 +254,10 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, D); \ - LDRSW_REG(x1, wback, O); \ + if(rex.is32bits) \ + LDRSW_REG_SXTW(x1, O, wback); \ + else \ + LDRSW_REG(x1, wback, O); \ wb = ed = x1; \ } //FAKEELike GETED, but doesn't get anything @@ -304,7 +316,7 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, &unscaled, 0xfff<<1, (1<<1)-1, rex, NULL, 0, D); \ - ADDx_REG(x3, wback, i); \ + ADDz_REG(x3, wback, i); \ if(wback!=x3) wback = x3; \ LDH(i, wback, fixedaddress);\ wb1 = 1; \ @@ -365,7 +377,7 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, &unscaled, 0xfff, 0, rex, NULL, 0, D); \ - ADDx_REG(x3, wback, i); \ + ADDz_REG(x3, wback, i); \ if(wback!=x3) wback = x3; \ LDB(i, wback, fixedaddress);\ wb1 = 1; \ diff --git a/src/dynarec/dynarec.c b/src/dynarec/dynarec.c index 1a389b94..915044eb 100644 --- a/src/dynarec/dynarec.c +++ b/src/dynarec/dynarec.c @@ -104,10 +104,15 @@ void DynaCall(x64emu_t* emu, uintptr_t addr) multiuint_t old_res_sav= emu->res_sav; deferred_flags_t old_df_sav= emu->df_sav; // uc_link - x64_ucontext_t* old_uc_link = emu->uc_link; + void* old_uc_link = emu->uc_link; emu->uc_link = NULL; - PushExit(emu); + #ifdef BOX32 + if(box64_is32bits) + PushExit_32(emu); + else + #endif + PushExit(emu); R_RIP = addr; emu->df = d_none; DynaRun(emu); @@ -137,6 +142,9 @@ void DynaCall(x64emu_t* emu, uintptr_t addr) } int my_setcontext(x64emu_t* emu, void* ucp); +#ifdef BOX32 +int my32_setcontext(x64emu_t* emu, void* ucp); +#endif void DynaRun(x64emu_t* emu) { // prepare setjump for signal handling @@ -206,7 +214,12 @@ void DynaRun(x64emu_t* emu) } if(emu->quit && emu->uc_link) { emu->quit = 0; - my_setcontext(emu, emu->uc_link); + #ifdef BOX32 + if(box64_is32bits) + my32_setcontext(emu, emu->uc_link); + else + #endif + my_setcontext(emu, emu->uc_link); } } #endif diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c index 9c212fea..24528fa1 100644 --- a/src/dynarec/dynarec_native_pass.c +++ b/src/dynarec/dynarec_native_pass.c @@ -111,7 +111,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int #endif dyn->f.dfnone_here = 0; NEW_INST; - MESSAGE(LOG_DUMP, "New Instruction x64:%p, native:%p\n", (void*)addr, (void*)dyn->block); + MESSAGE(LOG_DUMP, "New Instruction %s:%p, native:%p\n", is32bits?"x86":"x64",(void*)addr, (void*)dyn->block); if(!ninst) { GOTEST(x1, x2); } diff --git a/src/elfs/elfhash.c b/src/elfs/elfhash.c index 966a18b7..ebb81285 100644 --- a/src/elfs/elfhash.c +++ b/src/elfs/elfhash.c @@ -78,7 +78,12 @@ const char* GetParentSymbolVersion(elfheader_t* h, int version) return box64_is32bits?GetParentSymbolVersion32(h, version):GetParentSymbolVersion64(h, version); } -uint16_t GetParentSymbolVersionFlag32(elfheader_t* h, int index) { /* TODO */ return (uint16_t)-1; } +uint16_t GetParentSymbolVersionFlag32(elfheader_t* h, int index) +#ifndef BOX32 + { return (uint16_t)-1; } +#else + ; +#endif uint16_t GetParentSymbolVersionFlag64(elfheader_t* h, int index) { if(!h->VerDef._64 || (index<1)) @@ -97,7 +102,12 @@ uint16_t GetParentSymbolVersionFlag(elfheader_t* h, int index) return box64_is32bits?GetParentSymbolVersionFlag32(h, index):GetParentSymbolVersionFlag64(h, index); } -uint16_t GetSymbolVersionFlag32(elfheader_t* h, int version) { /* TODO */ return (uint16_t)-1; } +uint16_t GetSymbolVersionFlag32(elfheader_t* h, int version) +#ifndef BOX32 +{ return (uint16_t)-1; } +#else + ; +#endif uint16_t GetSymbolVersionFlag64(elfheader_t* h, int version) { if(version<2) diff --git a/src/elfs/elfhash32.c b/src/elfs/elfhash32.c index 00423b0a..3773e59a 100644 --- a/src/elfs/elfhash32.c +++ b/src/elfs/elfhash32.c @@ -41,6 +41,40 @@ static int SymbolMatch(elfheader_t* h, uint32_t i, int ver, const char* vername, return strcmp(vername, symvername)?0:1; } +uint16_t GetParentSymbolVersionFlag32(elfheader_t* h, int index) +{ + if(!h->VerDef._32 || (index<1)) + return (uint16_t)-1; + Elf32_Verdef *def = (Elf32_Verdef*)((uintptr_t)h->VerDef._32 + h->delta); + while(def) { + if(def->vd_ndx==index) { + return def->vd_flags; + } + def = def->vd_next?((Elf32_Verdef*)((uintptr_t)def + def->vd_next)):NULL; + } + return (uint16_t)-1; +} + +uint16_t GetSymbolVersionFlag32(elfheader_t* h, int version) +{ + if(version<2) + return (uint16_t)-1; + if(h->VerNeed._32) { + Elf32_Verneed *ver = (Elf32_Verneed*)((uintptr_t)h->VerNeed._32 + h->delta); + while(ver) { + Elf32_Vernaux *aux = (Elf32_Vernaux*)((uintptr_t)ver + ver->vn_aux); + for(int j=0; jvn_cnt; ++j) { + if(aux->vna_other==version) + return aux->vna_flags; + aux = (Elf32_Vernaux*)((uintptr_t)aux + aux->vna_next); + } + ver = ver->vn_next?((Elf32_Verneed*)((uintptr_t)ver + ver->vn_next)):NULL; + } + } + return GetParentSymbolVersionFlag32(h, version); // if symbol is "internal", use Def table instead +} + + static Elf32_Sym* old_elf_lookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) { // Prepare hash table @@ -90,16 +124,16 @@ static Elf32_Sym* new_elf_lookup(elfheader_t* h, const char* symname, int ver, c const uint32_t symoffset = hashtab[1]; const uint32_t bloom_size = hashtab[2]; const uint32_t bloom_shift = hashtab[3]; - const uint64_t *blooms = (uint64_t*)&hashtab[4]; + const uint32_t *blooms = (uint32_t*)&hashtab[4]; const uint32_t *buckets = (uint32_t*)&blooms[bloom_size]; const uint32_t *chains = &buckets[nbuckets]; // get hash from symname to lookup const uint32_t hash = new_elf_hash(symname); // early check with bloom: if at least one bit is not set, a symbol is surely missing. - uint64_t word = blooms[(hash/64)%bloom_size]; - uint64_t mask = 0 - | 1LL << (hash%64) - | 1LL << ((hash>>bloom_shift)%64); + uint32_t word = blooms[(hash/32)%bloom_size]; + uint32_t mask = 0 + | 1LL << (hash%32) + | 1LL << ((hash>>bloom_shift)%32); if ((word & mask) != mask) { return NULL; } @@ -127,7 +161,7 @@ static void new_elf_hash_dump(elfheader_t* h) const uint32_t symoffset = hashtab[1]; const uint32_t bloom_size = hashtab[2]; const uint32_t bloom_shift = hashtab[3]; - const uint64_t *blooms = (uint64_t*)&hashtab[4]; + const uint32_t *blooms = (uint32_t*)&hashtab[4]; const uint32_t *buckets = (uint32_t*)&blooms[bloom_size]; const uint32_t *chains = &buckets[nbuckets]; printf_log(LOG_NONE, "===============Dump GNU_HASH from %s\n", h->name); diff --git a/src/elfs/elfload_dump.c b/src/elfs/elfload_dump.c index 18d4dbc6..95fc70d3 100644 --- a/src/elfs/elfload_dump.c +++ b/src/elfs/elfload_dump.c @@ -9,10 +9,6 @@ #include "elfload_dump.h" #include "elfloader_private.h" -#ifndef SHT_CHECKSUM -#define SHT_CHECKSUM 0x6ffffff8 -#endif - static const char* DumpSection(Elf64_Shdr *s, char* SST) { static char buff[400]; switch (s->sh_type) { diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 248c4282..d251abaa 100644 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -875,7 +875,12 @@ int RelocateElf(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, e return box64_is32bits?RelocateElf32(maplib, local_maplib, bindnow, deepbind, head):RelocateElf64(maplib, local_maplib, bindnow, deepbind, head); } -int RelocateElfPlt32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) { /* TODO */ return -1; } +int RelocateElfPlt32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +#ifndef BOX32 +{ return -1; } +#else + ; +#endif int RelocateElfPlt64(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) { int need_resolver = 0; @@ -953,7 +958,12 @@ uintptr_t GetLastByte(elfheader_t* h) #endif void checkHookedSymbols(elfheader_t* h); // in mallochook.c -void AddSymbols32(lib_t *maplib, elfheader_t* h) { /* TODO */ } +void AddSymbols32(lib_t *maplib, elfheader_t* h) +#ifndef BOX32 +{ } +#else + ; +#endif void AddSymbols(lib_t *maplib, elfheader_t* h) { if(box64_is32bits) { @@ -1121,15 +1131,10 @@ void startMallocHook(); #else void startMallocHook() {} #endif -void RunElfInit32(elfheader_t* h, x64emu_t *emu) { /* TODO*/ } void RunElfInit(elfheader_t* h, x64emu_t *emu) { if(!h || h->init_done) return; - if(box64_is32bits) { - RunElfInit32(h, emu); - return; - } // reset Segs Cache memset(emu->segs_serial, 0, sizeof(emu->segs_serial)); uintptr_t p = h->initentry + h->delta; @@ -1157,11 +1162,24 @@ void RunElfInit(elfheader_t* h, x64emu_t *emu) RunFunctionWithEmu(emu, 0, p, 3, my_context->argc, my_context->argv, my_context->envv); printf_dump(LOG_DEBUG, "Done Init for %s\n", ElfName(h)); // and check init array now - Elf64_Addr *addr = (Elf64_Addr*)(h->initarray + h->delta); - for (size_t i=0; iinitarray_sz; ++i) { - if(addr[i]) { - printf_dump(LOG_DEBUG, "Calling Init[%zu] for %s @%p\n", i, ElfName(h), (void*)addr[i]); - RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv, my_context->envv); + #ifdef BOX32 + if(box64_is32bits) { + Elf32_Addr *addr = (Elf32_Addr*)(h->initarray + h->delta); + for (size_t i=0; iinitarray_sz; ++i) { + if(addr[i]) { + printf_dump(LOG_DEBUG, "Calling Init[%zu] for %s @%p\n", i, ElfName(h), from_ptrv(addr[i])); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv, my_context->envv); + } + } + } else + #endif + { + Elf64_Addr *addr = (Elf64_Addr*)(h->initarray + h->delta); + for (size_t i=0; iinitarray_sz; ++i) { + if(addr[i]) { + printf_dump(LOG_DEBUG, "Calling Init[%zu] for %s @%p\n", i, ElfName(h), (void*)addr[i]); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv, my_context->envv); + } } } @@ -1191,15 +1209,10 @@ void RunDeferredElfInit(x64emu_t *emu) box_free(List); } -void RunElfFini32(elfheader_t* h, x64emu_t *emu) { /* TODO */ } void RunElfFini(elfheader_t* h, x64emu_t *emu) { if(!h || h->fini_done || !h->init_done) return; - if(box64_is32bits) { - RunElfFini32(h, emu); - return; - } h->fini_done = 1; // Call the registered cxa_atexit functions CallCleanup(emu, h); @@ -1208,10 +1221,21 @@ void RunElfFini(elfheader_t* h, x64emu_t *emu) printf_log(LOG_DEBUG, "Android does not support Fini for %s\n", ElfName(h)); #else // first check fini array - Elf64_Addr *addr = (Elf64_Addr*)(h->finiarray + h->delta); - for (int i=h->finiarray_sz-1; i>=0; --i) { - printf_dump(LOG_DEBUG, "Calling Fini[%d] for %s @%p\n", i, ElfName(h), (void*)addr[i]); - RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 0); + #ifdef BOX32 + if(box64_is32bits) { + Elf32_Addr *addr = (Elf32_Addr*)(h->finiarray + h->delta); + for (int i=h->finiarray_sz-1; i>=0; --i) { + printf_dump(LOG_DEBUG, "Calling Fini[%d] for %s @%p\n", i, ElfName(h), from_ptrv(addr[i])); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 0); + } + } else + #endif + { + Elf64_Addr *addr = (Elf64_Addr*)(h->finiarray + h->delta); + for (int i=h->finiarray_sz-1; i>=0; --i) { + printf_dump(LOG_DEBUG, "Calling Fini[%d] for %s @%p\n", i, ElfName(h), (void*)addr[i]); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 0); + } } // then the "old-style" fini if(h->finientry) { @@ -1499,7 +1523,12 @@ EXPORT int my_dl_iterate_phdr(x64emu_t *emu, void* F, void *data) { return ret; } -void ResetSpecialCaseMainElf32(elfheader_t* h) { /* TODO */ } +void ResetSpecialCaseMainElf32(elfheader_t* h) +#ifndef BOX32 +{ } +#else + ; +#endif void ResetSpecialCaseMainElf(elfheader_t* h) { if(box64_is32bits) { @@ -1620,7 +1649,12 @@ static Elf64_Sym* ElfLocateSymbol(elfheader_t* head, uintptr_t *offs, uintptr_t return sym; } -void* ElfGetLocalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { /* TOODO */ return NULL; } +void* ElfGetLocalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif void* ElfGetLocalSymbolStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { Elf64_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); @@ -1636,7 +1670,12 @@ void* ElfGetLocalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *e return box64_is32bits?ElfGetLocalSymbolStartEnd32(head, offs, end, symname, ver, vername, local, veropt):ElfGetLocalSymbolStartEnd64(head, offs, end, symname, ver, vername, local, veropt); } -void* ElfGetGlobalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { /*T ODO */ return NULL; } +void* ElfGetGlobalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif void* ElfGetGlobalSymbolStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { Elf64_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); @@ -1652,7 +1691,12 @@ void* ElfGetGlobalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t * return box64_is32bits?ElfGetGlobalSymbolStartEnd32(head, offs, end, symname, ver, vername, local, veropt):ElfGetGlobalSymbolStartEnd64(head, offs, end, symname, ver, vername, local, veropt); } -void* ElfGetWeakSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { /* TODO */ return NULL; } +void* ElfGetWeakSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif void* ElfGetWeakSymbolStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { Elf64_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); @@ -1668,7 +1712,12 @@ void* ElfGetWeakSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *en return box64_is32bits?ElfGetWeakSymbolStartEnd32(head, offs, end, symname, ver, vername, local, veropt):ElfGetWeakSymbolStartEnd64(head, offs, end, symname, ver, vername, local, veropt); } -int ElfGetSymTabStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) { /* TODO */ return 0; } +int ElfGetSymTabStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) +#ifndef BOX32 +{ return 0; } +#else + ; +#endif int ElfGetSymTabStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) { Elf64_Sym* sym = ElfSymTabLookup64(head, symname); diff --git a/src/elfs/elfloader32.c b/src/elfs/elfloader32.c index 3b30bc07..62a3918e 100644 --- a/src/elfs/elfloader32.c +++ b/src/elfs/elfloader32.c @@ -42,6 +42,12 @@ #include "x64tls.h" #include "box32.h" +ptr_t pltResolver32 = ~(ptr_t)0; + +extern void* my__IO_2_1_stderr_; +extern void* my__IO_2_1_stdin_ ; +extern void* my__IO_2_1_stdout_; + // return the index of header (-1 if it doesn't exist) static int getElfIndex(box64context_t* ctx, elfheader_t* head) { for (int i=0; ielfsize; ++i) @@ -60,6 +66,68 @@ static elfheader_t* checkElfLib(elfheader_t* h, library_t* lib) return h; } +static Elf32_Sym* ElfLocateSymbol(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLookup32(head, symname, *ver, *vername, local, *veropt); + if(!sym) return NULL; + if(head->VerSym && !*veropt) { + int idx = ((uintptr_t)sym - (uintptr_t)head->DynSym._32)/sizeof(Elf32_Sym); + int version = ((Elf32_Half*)((uintptr_t)head->VerSym+head->delta))[idx]; + if(version!=-1) version &=0x7fff; + const char* symvername = GetSymbolVersion(head, version); + Elf32_Half flags = GetSymbolVersionFlag(head, version); + if(version>1 && *ver<2 && (flags==0)) { + *ver = version; + *vername = symvername; + *veropt = 1; + } else if(flags==0 && !*veropt && version>1 && *ver>1 && !strcmp(symvername, *vername)) { + *veropt = 1; + } + } + if(!sym->st_shndx) return NULL; + int vis = ELF32_ST_VISIBILITY(sym->st_other); + if(vis==STV_HIDDEN && !local) + return NULL; + return sym; +} + + +static void GrabX32CopyMainElfReloc(elfheader_t* head) +{ + if(head->rela) { + int cnt = head->relasz / head->relaent; + Elf32_Rela* rela = (Elf32_Rela *)(head->rela + head->delta); + printf_dump(LOG_DEBUG, "Grabbing R_386_COPY Relocation(s) in advance for %s\n", head->name); + for (int i=0; iDynSym._32[ELF32_R_SYM(rela[i].r_info)]; + const char* symname = SymName32(head, sym); + int version = head->VerSym?((Elf32_Half*)((uintptr_t)head->VerSym+head->delta))[ELF32_R_SYM(rela[i].r_info)]:-1; + if(version!=-1) version &=0x7fff; + const char* vername = GetSymbolVersion(head, version); + Elf32_Half flags = GetSymbolVersionFlag(head, version); + int veropt = flags?0:1; + uintptr_t offs = sym->st_value + head->delta; + AddUniqueSymbol(my_context->globdata, symname, offs, sym->st_size, version, vername, veropt); + } + } + } +} + +void checkHookedSymbols(elfheader_t* h); +void AddSymbols32(lib_t *maplib, elfheader_t* h) +{ + //if(box64_dump && h->hash) old_elf_hash_dump(h); + //if(box64_dump && h->gnu_hash) new_elf_hash_dump(h); + if(box64_dump && h->DynSym._32) DumpDynSym32(h); + if(h==my_context->elfs[0]) + GrabX32CopyMainElfReloc(h); + #ifndef STATICBUILD + checkHookedSymbols(h); + #endif +} + int AllocLoadElfMemory32(box64context_t* context, elfheader_t* head, int mainbin) { ptr_t offs = 0; @@ -624,3 +692,199 @@ int RelocateElf32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, } return 0; } + +int RelocateElfPlt32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +{ + int need_resolver = 0; + if(0 && (head->flags&DF_BIND_NOW) && !bindnow) { // disable for now, needs more symbol in a fow libs like gtk and nss3 + bindnow = 1; + printf_log(LOG_DEBUG, "Forcing %s to Bind Now\n", head->name); + } + if(head->pltrel) { + int cnt = head->pltsz / head->pltent; + if(head->pltrel==DT_REL) { + DumpRelTable32(head, cnt, (Elf32_Rel *)(head->jmprel + head->delta), "PLT"); + printf_log(LOG_DEBUG, "Applying %d PLT Relocation(s) for %s\n", cnt, head->name); + if(RelocateElfREL(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf32_Rel *)(head->jmprel + head->delta), &need_resolver)) + return -1; + } else if(head->pltrel==DT_RELA) { + DumpRelATable32(head, cnt, (Elf32_Rela *)(head->jmprel + head->delta), "PLT"); + printf_log(LOG_DEBUG, "Applying %d PLT Relocation(s) with Addend for %s\n", cnt, head->name); + if(RelocateElfRELA(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf32_Rela *)(head->jmprel + head->delta), &need_resolver)) + return -1; + } + if(need_resolver) { + if(pltResolver32==~(ptr_t)0) { + pltResolver32 = AddBridge(my_context->system, vFEv, PltResolver32, 0, "(PltResolver)"); + } + if(head->pltgot) { + *(ptr_t*)from_ptrv(head->pltgot+head->delta+8) = pltResolver32; + *(ptr_t*)from_ptrv(head->pltgot+head->delta+4) = to_ptrv(head); + printf_log(LOG_DEBUG, "PLT Resolver injected in plt.got at %p\n", from_ptrv(head->pltgot+head->delta+8)); + } else if(head->got) { + *(ptr_t*)from_ptrv(head->got+head->delta+8) = pltResolver32; + *(ptr_t*)from_ptrv(head->got+head->delta+4) = to_ptrv(head); + printf_log(LOG_DEBUG, "PLT Resolver injected in got at %p\n", from_ptrv(head->got+head->delta+8)); + } + } + } + return 0; +} + +void ResetSpecialCaseMainElf32(elfheader_t* h) +{ + Elf32_Sym *sym = NULL; + for (uint32_t i=0; inumDynSym; ++i) { + if(h->DynSym._32[i].st_info == 17) { + sym = h->DynSym._32+i; + const char * symname = h->DynStr+sym->st_name; + if(strcmp(symname, "_IO_2_1_stderr_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stderr, sym->st_size); + my__IO_2_1_stderr_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_2_1_stderr_ to %p\n", my__IO_2_1_stderr_); + } else + if(strcmp(symname, "_IO_2_1_stdin_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdin, sym->st_size); + my__IO_2_1_stdin_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_2_1_stdin_ to %p\n", my__IO_2_1_stdin_); + } else + if(strcmp(symname, "_IO_2_1_stdout_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdout, sym->st_size); + my__IO_2_1_stdout_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_2_1_stdout_ to %p\n", my__IO_2_1_stdout_); + } else + if(strcmp(symname, "_IO_stderr_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stderr, sym->st_size); + my__IO_2_1_stderr_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_stderr_ to %p\n", my__IO_2_1_stderr_); + } else + if(strcmp(symname, "_IO_stdin_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdin, sym->st_size); + my__IO_2_1_stdin_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_stdin_ to %p\n", my__IO_2_1_stdin_); + } else + if(strcmp(symname, "_IO_stdout_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdout, sym->st_size); + my__IO_2_1_stdout_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_stdout_ to %p\n", my__IO_2_1_stdout_); + } + } + } +} + +void* ElfGetLocalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + int bind = ELF32_ST_BIND(sym->st_info); + if(bind!=STB_LOCAL) return 0; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} + +void* ElfGetGlobalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + int bind = ELF32_ST_BIND(sym->st_info); + if(bind!=STB_GLOBAL && bind!=STB_GNU_UNIQUE) return 0; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} + +void* ElfGetWeakSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + int bind = ELF32_ST_BIND(sym->st_info); + if(bind!=STB_WEAK) return 0; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} + +int ElfGetSymTabStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) +{ + Elf32_Sym* sym = ElfSymTabLookup32(head, symname); + if(!sym) return 0; + if(!sym->st_shndx) return 0; + if(!sym->st_size) return 0; //needed? + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return 1; +} + +EXPORT void PltResolver32(x64emu_t* emu) +{ + ptr_t addr = Pop32(emu); + int slot = (int)Pop32(emu); + elfheader_t *h = (elfheader_t*)from_ptrv(addr); + library_t* lib = h->lib; + lib_t* local_maplib = GetMaplib(lib); + int deepbind = GetDeepBind(lib); + printf_dump(LOG_DEBUG, "PltResolver32: Addr=%p, Slot=%d Return=%p: elf is %s (VerSym=%p)\n", from_ptrv(addr), slot, *(ptr_t*)from_ptrv(R_ESP), h->name, h->VerSym); + + Elf32_Rel * rel = (Elf32_Rel *)(from_ptrv(h->jmprel + h->delta + slot)); + + Elf32_Sym *sym = &h->DynSym._32[ELF32_R_SYM(rel->r_info)]; + int bind = ELF32_ST_BIND(sym->st_info); + const char* symname = SymName32(h, sym); + int version = h->VerSym?((Elf32_Half*)((uintptr_t)h->VerSym+h->delta))[ELF32_R_SYM(rel->r_info)]:-1; + if(version!=-1) version &= 0x7fff; + const char* vername = GetSymbolVersion(h, version); + Elf32_Half flags = GetSymbolVersionFlag(h, version); + int veropt = flags?0:1; + ptr_t *p = (uint32_t*)from_ptrv(rel->r_offset + h->delta); + uintptr_t offs = 0; + uintptr_t end = 0; + + Elf32_Sym *elfsym = NULL; + if(bind==STB_LOCAL) { + elfsym = ElfDynSymLookup32(h, symname); + if(elfsym && elfsym->st_shndx) { + offs = elfsym->st_value + h->delta; + end = offs + elfsym->st_size; + } + if(!offs && !end && local_maplib && deepbind) + GetLocalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end) + GetLocalSymbolStartEnd(my_context->maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetLocalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + } else if(bind==STB_WEAK) { + if(local_maplib && deepbind) + GetGlobalWeakSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + else + GetGlobalWeakSymbolStartEnd(my_context->maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetGlobalWeakSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + } else { + if(!offs && !end && local_maplib && deepbind) + GetGlobalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end) + GetGlobalSymbolStartEnd(my_context->maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetGlobalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + } + + if (!offs) { + printf_log(LOG_NONE, "Error: PltResolver32: Symbol %s(ver %d: %s%s%s) not found, cannot apply R_386_JMP_SLOT %p (%p) in %s\n", symname, version, symname, vername?"@":"", vername?vername:"", p, from_ptrv(*p), h->name); + emu->quit = 1; + return; + } else { + elfheader_t* sym_elf = FindElfSymbol(my_context, elfsym); + offs = (uintptr_t)getAlternate(from_ptrv(offs)); + + if(p) { + printf_dump(LOG_DEBUG, " Apply %s R_386_JMP_SLOT %p with sym=%s(ver %d: %s%s%s) (%p -> %p / %s)\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), p, symname, version, symname, vername?"@":"", vername?vername:"",from_ptrv(*p), from_ptrv(offs), ElfName(FindElfAddress(my_context, offs))); + *p = offs; + } else { + printf_log(LOG_NONE, "PltResolver32: Warning, Symbol %s(ver %d: %s%s%s) found, but Jump Slot Offset is NULL \n", symname, version, symname, vername?"@":"", vername?vername:""); + } + } + + // jmp to function + R_EIP = offs; +} diff --git a/src/elfs/elfloader_private.h b/src/elfs/elfloader_private.h index 6bcf6d82..535dbfad 100644 --- a/src/elfs/elfloader_private.h +++ b/src/elfs/elfloader_private.h @@ -194,8 +194,12 @@ typedef struct elfheader_s { #define STB_GNU_UNIQUE 10 #endif +#ifndef ELF32_ST_VISIBILITY +#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) +#endif + #ifndef ELF64_ST_VISIBILITY -#define ELF64_ST_VISIBILITY(o) ((o) & 0x03) +#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) #endif elfheader_t* ParseElfHeader32(FILE* f, const char* name, int exec); diff --git a/src/elfs/elfparser32.c b/src/elfs/elfparser32.c index b4bb78e4..376bb34d 100755 --- a/src/elfs/elfparser32.c +++ b/src/elfs/elfparser32.c @@ -252,8 +252,10 @@ elfheader_t* ParseElfHeader32(FILE* f, const char* name, int exec) printf_log(LOG_DEBUG, "The DT_INIT_ARRAYSZ is %d\n", h->initarray_sz); break; case DT_PREINIT_ARRAYSZ: - if(val) - printf_log(LOG_NONE, "Warning, PreInit Array (size=%d) present and ignored!\n", val); + #ifndef ANDROID + if(val) + printf_log(LOG_NONE, "Warning, PreInit Array (size=%d) present and ignored!\n", val); + #endif break; case DT_FINI: // Exit hook h->finientry = ptr; diff --git a/src/emu/x64emu.c b/src/emu/x64emu.c index f0865299..ddfa0fc6 100644 --- a/src/emu/x64emu.c +++ b/src/emu/x64emu.c @@ -64,11 +64,29 @@ static void internalX64Setup(x64emu_t* emu, box64context_t *context, uintptr_t s // set default value R_RIP = start; R_RSP = (stack + stacksize) & ~7; // align stack start, always + #ifdef BOX32 + if(box64_is32bits) { + if(stack>=0x100000000LL) { + printf_log(LOG_NONE, "BOX32: Stack pointer too high (%p), aborting\n", (void*)stack); + abort(); + } + if(R_RSP>=0x100000000LL) { // special case, stack is just a bit too high + R_RSP = 0x100000000LL - 16; + } + } + #endif // fake init of segments... - emu->segs[_CS] = 0x33; - emu->segs[_DS] = emu->segs[_ES] = emu->segs[_SS] = 0x2b; - emu->segs[_FS] = 0x43; - emu->segs[_GS] = default_gs; + if(box64_is32bits) { + emu->segs[_CS] = 0x23; + emu->segs[_DS] = emu->segs[_ES] = emu->segs[_SS] = 0x2b; + emu->segs[_FS] = default_fs; + emu->segs[_GS] = 0x33; + } else { + emu->segs[_CS] = 0x33; + emu->segs[_DS] = emu->segs[_ES] = emu->segs[_SS] = 0x2b; + emu->segs[_FS] = 0x43; + emu->segs[_GS] = default_gs; + } // setup fpu regs reset_fpu(emu); emu->mxcsr.x32 = 0x1f80; @@ -77,7 +95,7 @@ static void internalX64Setup(x64emu_t* emu, box64context_t *context, uintptr_t s EXPORTDYN x64emu_t *NewX64Emu(box64context_t *context, uintptr_t start, uintptr_t stack, int stacksize, int ownstack) { - printf_log(LOG_DEBUG, "Allocate a new X86_64 Emu, with EIP=%p and Stack=%p/0x%X\n", (void*)start, (void*)stack, stacksize); + printf_log(LOG_DEBUG, "Allocate a new X86_64 Emu, with %cIP=%p and Stack=%p/0x%X\n", box64_is32bits?'E':'R', (void*)start, (void*)stack, stacksize); x64emu_t *emu = (x64emu_t*)box_calloc(1, sizeof(x64emu_t)); @@ -161,7 +179,7 @@ void CallCleanup(x64emu_t *emu, elfheader_t* h) if(!h) return; for(int i=h->clean_sz-1; i>=0; --i) { - printf_log(LOG_DEBUG, "Call cleanup #%d\n", i); + printf_log(LOG_DEBUG, "Call cleanup #%d (args:%d, arg:%p)\n", i, h->cleanups[i].arg, h->cleanups[i].a); RunFunctionWithEmu(emu, 0, (uintptr_t)(h->cleanups[i].f), h->cleanups[i].arg, h->cleanups[i].a ); // now remove the cleanup if(i!=h->clean_sz-1) @@ -325,10 +343,14 @@ void SetEBP(x64emu_t *emu, uint32_t v) { R_EBP = v; } -//void SetESP(x64emu_t *emu, uint32_t v) -//{ -// R_ESP = v; -//} +void SetESP(x64emu_t *emu, uint32_t v) +{ + R_ESP = v; +} +void SetEIP(x64emu_t *emu, uint32_t v) +{ + R_EIP = v; +} void SetRAX(x64emu_t *emu, uint64_t v) { R_RAX = v; @@ -373,7 +395,7 @@ uint64_t GetRBP(x64emu_t *emu) { return R_RBP; } -/*void SetFS(x64emu_t *emu, uint16_t v) +void SetFS(x64emu_t *emu, uint16_t v) { emu->segs[_FS] = v; emu->segs_serial[_FS] = 0; @@ -381,7 +403,7 @@ uint64_t GetRBP(x64emu_t *emu) uint16_t GetFS(x64emu_t *emu) { return emu->segs[_FS]; -}*/ +} void ResetFlags(x64emu_t *emu) @@ -572,9 +594,14 @@ void EmuCall(x64emu_t* emu, uintptr_t addr) uint64_t old_rip = R_RIP; //Push64(emu, GetRBP(emu)); // set frame pointer //SetRBP(emu, GetRSP(emu)); // save RSP - R_RSP -= 200; - R_RSP &= ~63LL; - PushExit(emu); + //R_RSP -= 200; + //R_RSP &= ~63LL; + #ifdef BOX32 + if(box64_is32bits) + PushExit_32(emu); + else + #endif + PushExit(emu); R_RIP = addr; emu->df = d_none; Run(emu, 0); diff --git a/src/emu/x64emu_private.h b/src/emu/x64emu_private.h index bef4a9a4..35bfd97e 100644 --- a/src/emu/x64emu_private.h +++ b/src/emu/x64emu_private.h @@ -5,6 +5,9 @@ typedef struct box64context_s box64context_t; typedef struct x64_ucontext_s x64_ucontext_t; +#ifdef BOX32 +typedef struct i386_ucontext_s i386_ucontext_t; +#endif #define ERR_UNIMPL 1 #define ERR_DIVBY0 2 @@ -116,6 +119,7 @@ typedef struct x64emu_s { uintptr_t prev2_ip; #endif // scratch stack, used for alignment of double and 64bits ints on arm. 200 elements should be enough + __int128_t dummy_align; // here to have scratch 128bits aligned uint64_t scratch[200]; // local stack, do be deleted when emu is freed void* stack2free; // this is the stack to free (can be NULL) @@ -126,7 +130,7 @@ typedef struct x64emu_s { uintptr_t old_savedsp; #endif - x64_ucontext_t *uc_link; // to handle setcontext + void* uc_link; // to handle setcontext (can be x64_ucontext_t or a i386_ucontext_t) int type; // EMUTYPE_xxx define } x64emu_t; diff --git a/src/emu/x64int3.c b/src/emu/x64int3.c index dd1b439c..b0f452a2 100644 --- a/src/emu/x64int3.c +++ b/src/emu/x64int3.c @@ -88,6 +88,10 @@ static uint8_t Peek8(uintptr_t addr, uintptr_t offset) void x64Int3(x64emu_t* emu, uintptr_t* addr) { + if(box64_is32bits) { + x86Int3(emu,addr); + return; + } onebridge_t* bridge = (onebridge_t*)(*addr-1); if(Peek8(*addr, 0)=='S' && Peek8(*addr, 1)=='C') // Signature for "Out of x86 door" { @@ -393,4 +397,12 @@ void print_cycle_log(int loglevel) { } } } -} \ No newline at end of file +} + +#ifndef BOX32 +void x86Int3(x64emu_t* emu, uintptr_t* addr) +{ + printf_log(LOG_NONE, "Error: Calling 32bits wrapped function without box32 support built in\n"); + abort(); +} +#endif \ No newline at end of file diff --git a/src/emu/x64run.c b/src/emu/x64run.c index 614bf91c..fbb92d1a 100644 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -27,6 +27,9 @@ #include "modrm.h" int my_setcontext(x64emu_t* emu, void* ucp); +#ifdef BOX32 +int my32_setcontext(x64emu_t* emu, void* ucp); +#endif #ifdef TEST_INTERPRETER int RunTest(x64test_t *test) @@ -2232,7 +2235,12 @@ if(emu->segs[_CS]!=0x33 && emu->segs[_CS]!=0x23) printf_log(LOG_NONE, "Warning, // setcontext handling else if(emu->quit && emu->uc_link) { emu->quit = 0; - my_setcontext(emu, emu->uc_link); + #ifdef BOX32 + if(box64_is32bits) + my32_setcontext(emu, emu->uc_link); + else + #endif + my_setcontext(emu, emu->uc_link); addr = R_RIP; goto x64emurun; } diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c index fe8da3e5..7ceef8ab 100644 --- a/src/emu/x64run64.c +++ b/src/emu/x64run64.c @@ -639,7 +639,15 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) R_RAX = *(uint32_t*)(tlsdata+tmp64u); } break; - + case 0xA2: /* MOV Ob,AL */ + if(rex.is32bits) { + tmp32s = F32S; + *(uint8_t*)(uintptr_t)(tlsdata+tmp32s) = R_AL; + } else { + tmp64u = F64; + *(uint8_t*)(tlsdata+tmp64u) = R_AL; + } + break; case 0xA3: /* MOV FS:Od,EAX */ if(rex.is32bits) { tmp32s = F32S; diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c index f94025ee..6055101a 100644 --- a/src/emu/x64run_private.c +++ b/src/emu/x64run_private.c @@ -24,6 +24,9 @@ #endif #include "x64tls.h" #include "bridge.h" +#ifdef BOX32 +#include "box32.h" +#endif #define PARITY(x) (((emu->x64emu_parity_tab[(x) / 32] >> ((x) % 32)) & 1) == 0) #define XOR2(x) (((x) ^ ((x)>>1)) & 0x1) @@ -53,7 +56,7 @@ void EXPORT my___libc_init(x64emu_t* emu, void* raw_args , void (*onexit)(void) emu->quit = 1; // finished! } #else -int32_t EXPORT my___libc_start_main(x64emu_t* emu, int (*main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end)) +EXPORT int32_t my___libc_start_main(x64emu_t* emu, int (*main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end)) { (void)argc; (void)ubp_av; (void)fini; (void)rtld_fini; (void)stack_end; @@ -106,6 +109,54 @@ int32_t EXPORT my___libc_start_main(x64emu_t* emu, int (*main) (int, char * *, c } return (int)GetEAX(emu); } +#ifdef BOX32 +#ifdef ANDROID +void EXPORT my32___libc_init(x64emu_t* emu, void* raw_args , void (*onexit)(void) , int (*main)(int, char**, char**), void const * const structors ) +{ + //TODO: register fini + // let's cheat and set all args... + Push_32(emu, (uint32_t)my_context->envv32); + Push_32(emu, (uint32_t)my_context->argv32); + Push_32(emu, (uint32_t)my_context->argc); + + printf_log(LOG_DEBUG, "Transfert to main(%d, %p, %p)=>%p from __libc_init\n", my_context->argc, my_context->argv, my_context->envv, main); + // should call structors->preinit_array and structors->init_array! + // call main and finish + PushExit_32(emu); + R_EIP=to_ptrv(main); + + DynaRun(emu); + + emu->quit = 1; // finished! +} +#else +int32_t EXPORT my32___libc_start_main(x64emu_t* emu, int *(main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end)) +{ + // let's cheat and set all args... + Push_32(emu, my_context->envv32); + Push_32(emu, my_context->argv32); + Push_32(emu, my_context->argc); + if(init) { + PushExit_32(emu); + R_EIP=to_ptrv(*init); + printf_log(LOG_DEBUG, "Calling init(%p) from __libc_start_main\n", *init); + DynaRun(emu); + if(emu->error) // any error, don't bother with more + return 0; + emu->quit = 0; + } + printf_log(LOG_DEBUG, "Transfert to main(%d, %p, %p)=>%p from __libc_start_main\n", my_context->argc, my_context->argv, my_context->envv, main); + // call main and finish + PushExit_32(emu); + R_EIP=to_ptrv(main); + + DynaRun(emu); + + emu->quit = 1; // finished! + return 0; +} +#endif +#endif #endif const char* GetNativeName(void* p) diff --git a/src/emu/x64run_private.h b/src/emu/x64run_private.h index 45a68659..925e14d5 100644 --- a/src/emu/x64run_private.h +++ b/src/emu/x64run_private.h @@ -50,6 +50,12 @@ static inline void Push16(x64emu_t *emu, uint16_t v) *((uint16_t*)R_RSP) = v; } +static inline void Push_32(x64emu_t *emu, uint32_t v) +{ + R_ESP -= 4; + *((uint32_t*)(uintptr_t)R_ESP) = v; +} + static inline void Push32(x64emu_t *emu, uint32_t v) { R_RSP -= 4; @@ -70,6 +76,13 @@ static inline uint16_t Pop16(x64emu_t *emu) return *st; } +static inline uint32_t Pop_32(x64emu_t *emu) +{ + uint32_t* st = (uint32_t*)(uintptr_t)R_RSP; + R_ESP += 4; + return *st; +} + static inline uint32_t Pop32(x64emu_t *emu) { uint32_t* st = (uint32_t*)R_RSP; @@ -90,6 +103,13 @@ static inline void PushExit(x64emu_t* emu) *((uint64_t*)R_RSP) = my_context->exit_bridge; } +#ifdef BOX32 +static inline void PushExit_32(x64emu_t* emu) +{ + R_ESP -= 4; + *((ptr_t*)(uintptr_t)R_ESP) = my_context->exit_bridge; +} +#endif // the op code definition can be found here: http://ref.x86asm.net/geek32.html reg64_t* GetECommon(x64emu_t* emu, uintptr_t* addr, rex_t rex, uint8_t m, uint8_t delta); @@ -232,6 +252,7 @@ void x64Syscall(x64emu_t *emu); void x64Int3(x64emu_t* emu, uintptr_t* addr); x64emu_t* x64emu_fork(x64emu_t* e, int forktype); void x86Syscall(x64emu_t *emu); //32bits syscall +void x86Int3(x64emu_t* emu, uintptr_t* addr); uintptr_t GetSegmentBaseEmu(x64emu_t* emu, int seg); #define GetGSBaseEmu(emu) GetSegmentBaseEmu(emu, _GS) diff --git a/src/emu/x64tls.c b/src/emu/x64tls.c index 78f83c74..99ae188c 100644 --- a/src/emu/x64tls.c +++ b/src/emu/x64tls.c @@ -11,6 +11,9 @@ #include "x64emu_private.h" #include "x64tls.h" #include "elfloader.h" +#ifdef BOX32 +#include "box32.h" +#endif typedef struct thread_area_s { @@ -118,12 +121,19 @@ uint32_t my_modify_ldt(x64emu_t* emu, int op, thread_area_t* td, int size) return (uint32_t)-1; } - /* - my_context->segtls[idx].base = td->base_addr; - my_context->segtls[idx].limit = td->limit; - pthread_setspecific(my_context->segtls[idx].key, (void*)my_context->segtls[idx].base); - */ - + if(box64_is32bits) { + emu->segs_serial[_GS] = 0; + my_context->segtls[idx].base = td->base_addr; + my_context->segtls[idx].limit = td->limit; + my_context->segtls[idx].present = 1; + if(idx>8 && !my_context->segtls[idx].key_init) { + pthread_key_create(&my_context->segtls[idx].key, NULL); + my_context->segtls[idx].key_init = 1; + } + if(my_context->segtls[idx].key_init) + pthread_setspecific(my_context->segtls[idx].key, (void*)my_context->segtls[idx].base); + } + ResetSegmentsCache(emu); return 0; @@ -220,6 +230,7 @@ int my_arch_prctl(x64emu_t *emu, int code, void* addr) #define POS_TLS 0x200 +#define POS_TLS_32 0x50 /* tls record should looks like: void* tcb 0x00 @@ -255,7 +266,7 @@ static tlsdatasize_t* setupTLSData(box64context_t* context) // Setup the GS segment: int dtssize = sizeDTS(context); int datasize = sizeTLSData(context->tlssize); - void *ptr_oversized = (char*)box_malloc(dtssize+POS_TLS+datasize); + void *ptr_oversized = (char*)box_malloc(dtssize+(box64_is32bits?POS_TLS_32:POS_TLS)+datasize); void *ptr = (void*)((uintptr_t)ptr_oversized + datasize); memcpy((void*)((uintptr_t)ptr-context->tlssize), context->tlsdata, context->tlssize); tlsdatasize_t *data = (tlsdatasize_t*)box_calloc(1, sizeof(tlsdatasize_t)); @@ -264,23 +275,45 @@ static tlsdatasize_t* setupTLSData(box64context_t* context) data->ptr = ptr_oversized; data->n_elfs = context->elfsize; pthread_setspecific(context->tlskey, data); - // copy canary... - memset((void*)((uintptr_t)ptr), 0, POS_TLS+dtssize); // set to 0 remining bytes - memcpy((void*)((uintptr_t)ptr+0x28), context->canary, sizeof(void*)); // put canary in place - uintptr_t tlsptr = (uintptr_t)ptr; - memcpy((void*)((uintptr_t)ptr+0x0), &tlsptr, sizeof(void*)); - memcpy((void*)((uintptr_t)ptr+0x10), &tlsptr, sizeof(void*)); // set tcb and self same address - uintptr_t dtp = (uintptr_t)ptr+POS_TLS; - memcpy((void*)(tlsptr+sizeof(void*)), &dtp, sizeof(void*)); - if(dtssize) { - for (int i=0; ielfsize; ++i) { - // set pointer - dtp = (uintptr_t)ptr + GetTLSBase(context->elfs[i]); - *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16) = dtp; - *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16+8) = i; // index + #ifdef BOX32 + if(box64_is32bits) { + // copy canary... + memset((void*)((uintptr_t)ptr), 0, POS_TLS_32+dtssize); // set to 0 remining bytes + memcpy((void*)((uintptr_t)ptr+0x14), context->canary, 4); // put canary in place + ptr_t tlsptr = to_ptrv(ptr); + memcpy((void*)((uintptr_t)ptr+0x0), &tlsptr, 4); + ptr_t dtp = to_ptrv(ptr+POS_TLS_32); + memcpy(from_ptrv(tlsptr+0x4), &dtp, 4); + if(dtssize) { + for (int i=0; ielfsize; ++i) { + // set pointer + dtp = to_ptrv(ptr + GetTLSBase(context->elfs[i])); + memcpy((void*)((uintptr_t)ptr+POS_TLS_32+i*8), &dtp, 4); + memcpy((void*)((uintptr_t)ptr+POS_TLS_32+i*8+4), &i, 4); // index + } } + memcpy((void*)((uintptr_t)ptr+0x10), &context->vsyscall, 4); // address of vsyscall + } else + #endif + { + // copy canary... + memset((void*)((uintptr_t)ptr), 0, POS_TLS+dtssize); // set to 0 remining bytes + memcpy((void*)((uintptr_t)ptr+0x28), context->canary, sizeof(void*)); // put canary in place + uintptr_t tlsptr = (uintptr_t)ptr; + memcpy((void*)((uintptr_t)ptr+0x0), &tlsptr, sizeof(void*)); + memcpy((void*)((uintptr_t)ptr+0x10), &tlsptr, sizeof(void*)); // set tcb and self same address + uintptr_t dtp = (uintptr_t)ptr+POS_TLS; + memcpy((void*)(tlsptr+sizeof(void*)), &dtp, sizeof(void*)); + if(dtssize) { + for (int i=0; ielfsize; ++i) { + // set pointer + dtp = (uintptr_t)ptr + GetTLSBase(context->elfs[i]); + *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16) = dtp; + *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16+8) = i; // index + } + } + memcpy((void*)((uintptr_t)ptr+0x20), &context->vsyscall, sizeof(void*)); // address of vsyscall } - memcpy((void*)((uintptr_t)ptr+0x20), &context->vsyscall, sizeof(void*)); // address of vsyscall return data; } @@ -356,7 +389,9 @@ void* GetSegmentBase(uint32_t desc) return NULL; } int base = desc>>3; - if(base==0x8 && !my_context->segtls[base].key_init) + if(!box64_is32bits && base==0x8 && !my_context->segtls[base].key_init) + return GetSeg43Base(); + if(box64_is32bits && (base==0x6)) return GetSeg43Base(); if(base>15) { printf_log(LOG_NONE, "Warning, accessing segment unknown 0x%x or unset\n", desc); diff --git a/src/emu/x86int3.c b/src/emu/x86int3.c new file mode 100755 index 00000000..73f5b3ae --- /dev/null +++ b/src/emu/x86int3.c @@ -0,0 +1,347 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "debug.h" +#include "box64stack.h" +#include "x64emu.h" +#include "x64run.h" +#include "x64emu_private.h" +#include "x64run_private.h" +#include "x87emu_private.h" +#include "x64primop.h" +#include "x64trace.h" +#include "wrapper32.h" +#include "box32context.h" +#include "librarian.h" +#include "signals.h" +#include "tools/bridge_private.h" + +#include +#include "elfloader.h" +#include "elfload_dump.h" +#include "elfs/elfloader_private.h" + +typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); + +static uint64_t F64(uintptr_t* addr) { + uint64_t ret = *(uint64_t*)*addr; + *addr+=8; + return ret; +} +static uint8_t Peek8(uintptr_t addr, uintptr_t offset) +{ + return *(uint8_t*)(addr+offset); +} + +extern int errno; +void x86Int3(x64emu_t* emu, uintptr_t* addr) +{ + onebridge_t* bridge = (onebridge_t*)(*addr-1); + if(Peek8(*addr, 0)=='S' && Peek8(*addr, 1)=='C') // Signature for "Out of x86 door" + { + *addr += 2; + uintptr_t a = F64(addr); + if(a==0) { + R_RIP = *addr; + //printf_log(LOG_INFO, "%p:Exit x86 emu (emu=%p)\n", *(void**)(R_ESP), emu); + emu->quit=1; // normal quit + } else { + RESET_FLAGS(emu); + wrapper_t w = bridge->w; + a = F64(addr); + R_RIP = *addr; + /* This party can be used to trace only 1 specific lib (but it is quite slow) + elfheader_t *h = FindElfAddress(my_context, *(uintptr_t*)(R_ESP)); + int have_trace = 0; + if(h && strstr(ElfName(h), "libMiles")) have_trace = 1;*/ + if(box64_log>=LOG_DEBUG || cycle_log) { + int tid = GetTID(); + char t_buff[256] = "\0"; + char buff2[64] = "\0"; + char buff3[64] = "\0"; + int cycle_line = my_context->current_line; + if(cycle_log) { + my_context->current_line = (my_context->current_line+1)%cycle_log; + } + char* buff = cycle_log?my_context->log_call[cycle_line]:t_buff; + char* buffret = cycle_log?my_context->log_ret[cycle_line]:NULL; + if(buffret) buffret[0] = '\0'; + char *tmp; + int post = 0; + int perr = 0; + uint64_t *pu64 = NULL; + uint32_t *pu32 = NULL; + uint8_t *pu8 = NULL; + const char *s = bridge->name; + if(!s) + s = GetNativeName((void*)a); + if(a==(uintptr_t)PltResolver32) { + if(cycle_log) { + ptr_t addr = *((uint32_t*)from_ptrv(R_ESP)); + int slot = *((uint32_t*)from_ptrv(R_ESP+4)); + elfheader_t *h = (elfheader_t*)from_ptrv(addr); + Elf32_Rel * rel = (Elf32_Rel *)from_ptrv(h->jmprel + h->delta + slot); + Elf32_Sym *sym = &h->DynSym._32[ELF32_R_SYM(rel->r_info)]; + const char* symname = SymName32(h, sym); + snprintf(buff, 256, "%04d|PltResolver \"%s\"", tid, symname?symname:"???"); + } else { + snprintf(buff, 256, "%s", " ... "); + } + } else + if(strstr(s, "SDL_RWFromFile")==s || strstr(s, "SDL_RWFromFile")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%s, %s)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "glColor4f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f, %f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8), *(float*)from_ptr(R_ESP+12), *(float*)from_ptr(R_ESP+16)); + } else if(strstr(s, "glTexCoord2f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8)); + } else if(strstr(s, "glVertex2f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8)); + } else if(strstr(s, "glVertex3f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8), *(float*)from_ptr(R_ESP+12)); + } else if(strstr(s, "__open64")==s || strcmp(s, "open64")==0) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d, %d)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(int*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(!strcmp(s, "opendir")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + perr = 1; + } else if(strstr(s, "__open")==s || !strcmp(s, "open") || !strcmp(s, "my_open64")) { + tmp = from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d (,%d))", tid, *(void**)from_ptr(R_ESP), s, (tmp)?tmp:"(nil)", *(int*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(!strcmp(s, "shm_open")) { + tmp = from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d, %d)", tid, *(void**)from_ptr(R_ESP), s, (tmp)?tmp:"(nil)", *(int*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(strcmp(s, "mkdir")==0) { + tmp = from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d)", tid, *(void**)from_ptr(R_ESP), s, (tmp)?tmp:"(nil)", *(int*)from_ptr(R_ESP+8)); + perr = 1; + } else if(!strcmp(s, "fopen")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + perr = 2; + } else if(!strcmp(s, "freopen")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\", %p)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12)); + perr = 2; + } else if(!strcmp(s, "fopen64")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + perr = 2; + } else if(!strcmp(s, "chdir")) { + pu32=*(uint32_t**)from_ptr(R_ESP+4); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)from_ptr(R_ESP), s, pu32?((pu32==(uint32_t*)1)?"/1/":(char*)pu32):"/0/"); + } else if(strstr(s, "getenv")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + post = 2; + } else if(strstr(s, "putenv")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + } else if(strstr(s, "pread")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p, %u, %d)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), *(uint32_t*)from_ptr(R_ESP+12), *(int32_t*)from_ptr(R_ESP+16)); + perr = 1; + } else if(!strcmp(s, "read")) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p, %u)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), *(uint32_t*)from_ptr(R_ESP+12)); + perr = 1; + } else if(strstr(s, "ioctl")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, 0x%x, %p)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), *(int32_t*)from_ptr(R_ESP+8), *(void**)from_ptr(R_ESP+12)); + perr = 1; + } else if(strstr(s, "statvfs64")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p(\"%s\"), %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(void**)from_ptr(R_ESP+8)); + } else if(strstr(s, "index")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p(\"%s\"), %i(%c))", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(int32_t*)from_ptr(R_ESP+8), *(int32_t*)from_ptr(R_ESP+8)); + } else if(strstr(s, "rindex")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p(\"%s\"), %i(%c))", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(int32_t*)from_ptr(R_ESP+8), *(int32_t*)from_ptr(R_ESP+8)); + } else if(strstr(s, "__xstat64")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p(\"%s\"), %p)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12)); + perr = 1; + } else if(strcmp(s, "__xstat")==0) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p(\"%s\"), %p)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12)); + perr = 1; + } else if(strstr(s, "__lxstat64")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p(\"%s\"), %p)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12)); + perr = 1; + } else if(strstr(s, "sem_timedwait")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %p[%d sec %d ns])", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), pu32?pu32[0]:-1, pu32?pu32[1]:-1); + perr = 1; + } else if(strstr(s, "waitpid")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p, 0x%x)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), *(uint32_t*)from_ptr(R_ESP+12)); + perr = 1; + } else if(strstr(s, "clock_gettime")==s || strstr(s, "__clock_gettime")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8)); + post = 1; + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + } else if(strstr(s, "semop")==s) { + int16_t* p16 = *(int16_t**)from_ptr(R_ESP+8); + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p[%u/%d/0x%x], %d)", tid, *(void**)from_ptr(R_ESP), s, *(int*)from_ptr(R_ESP+4), p16, p16[0], p16[1], p16[2], *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(!strcmp(s, "mmap64")) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, 0x%x, %d, 0x%x, %d, %ld)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(ulong_t*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12), *(int*)from_ptr(R_ESP+16), *(int*)from_ptr(R_ESP+20), *(int64_t*)from_ptr(R_ESP+24)); + perr = 3; + } else if(!strcmp(s, "mmap")) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, 0x%x, %d, 0x%x, %d, %d)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(ulong_t*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12), *(int*)from_ptr(R_ESP+16), *(int*)from_ptr(R_ESP+20), *(int*)from_ptr(R_ESP+24)); + perr = 3; + } else if(strstr(s, "strcasecmp")==s || strstr(s, "__strcasecmp")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "gtk_signal_connect_full")) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\", %p, %p, %p, %p, %d, %d)", tid, *(void**)from_ptr(R_ESP), "gtk_signal_connect_full", *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12), *(void**)from_ptr(R_ESP+16), *(void**)from_ptr(R_ESP+20), *(void**)from_ptr(R_ESP+24), *(int32_t*)from_ptr(R_ESP+28), *(int32_t*)from_ptr(R_ESP+32)); + } else if(strstr(s, "strcmp")==s || strstr(s, "__strcmp")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "strstr")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%.127s\", \"%.127s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "strlen")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p(\"%s\"))", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), ((R_ESP+4))?((char*)from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))):"nil"); + } else if(strstr(s, "vsnprintf")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%08X, %u, %08X...)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), *(uint32_t*)from_ptr(R_ESP+8), *(uint32_t*)from_ptr(R_ESP+12)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "vsprintf")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\", %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "__vsprintf_chk")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %d, %zu, \"%s\", %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(int*)from_ptr(R_ESP+8), *(size_t*)from_ptr(R_ESP+12), from_ptrv(*(ptr_t*)from_ptr(R_ESP+16)), *(void**)from_ptr(R_ESP+20)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "__snprintf_chk")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %zu, %d, %d, \"%s\", %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(size_t*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12), *(int*)from_ptr(R_ESP+16), from_ptrv(*(ptr_t*)from_ptr(R_ESP+20)), *(void**)from_ptr(R_ESP+24)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "snprintf")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %zu, \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(size_t*)from_ptr(R_ESP+8), from_ptrv(*(ptr_t*)from_ptr(R_ESP+12))); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "sprintf")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%08X, %08X...)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), *(uint32_t*)from_ptr(R_ESP+8)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "printf")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + if(((uintptr_t)pu32)<0x5) // probably a _chk function + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\"...)", tid, *(void**)from_ptr(R_ESP), s, pu32?((char*)(pu32)):"nil"); + } else if(strstr(s, "__printf_chk")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + snprintf(buff, 255, "%04d|%p: Calling %s(%d, \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, from_ptri(int, R_ESP+4), pu32?((char*)(pu32)):"nil"); + } else if(strstr(s, "wprintf")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + if(((uintptr_t)pu32)<0x5) // probably a _chk function + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%S\"...)", tid, *(void**)from_ptr(R_ESP), s, pu32?((wchar_t*)(pu32)):L"nil"); + } else if(strstr(s, "__vswprintf")==s) { + if(*(size_t*)from_ptr(R_ESP+12)<2) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %u, %p, %p, %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(ulong_t*)from_ptr(R_ESP+8), *(void**)from_ptr(R_ESP+12), *(void**)from_ptr(R_ESP+16), *(void**)from_ptr(R_ESP+20)); + } else { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %u, \"%S\", %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(ulong_t*)from_ptr(R_ESP+8), *(wchar_t**)from_ptr(R_ESP+12), *(void**)from_ptr(R_ESP+16)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 6; + } + } else if(strstr(s, "puts")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\"...)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + } else if(strstr(s, "fputs")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %p...)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(void**)from_ptr(R_ESP+8)); + } else if(strstr(s, "fprintf")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + if(((uintptr_t)pu32)<0x5) // probably a __fprint_chk + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+12)); + snprintf(buff, 255, "%04d|%p: Calling %s(%08X, \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), pu32?((char*)(pu32)):"nil"); + } else if(strstr(s, "vfprintf")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + if(((uintptr_t)pu32)<0x5) // probably a _chk function + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+12)); + snprintf(buff, 255, "%04d|%p: Calling %s(%08X, \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), pu32?((char*)(pu32)):"nil"); + } else if(strstr(s, "vkGetInstanceProcAddr")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\")", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "vkGetDeviceProcAddr")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\")", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "glXGetProcAddress")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + } else if(strstr(s, "sscanf")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(!strcmp(s, "vsscanf")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "XCreateWindow")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %p, %d, %d, %u, %u, %u, %d, %u, %p, %u, %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12), *(int*)from_ptr(R_ESP+16), *(uint32_t*)from_ptr(R_ESP+20), *(uint32_t*)from_ptr(R_ESP+24), *(uint32_t*)from_ptr(R_ESP+28), *(int32_t*)from_ptr(R_ESP+32), *(uint32_t*)from_ptr(R_ESP+36), *(void**)from_ptr(R_ESP+40), *(uint32_t*)from_ptr(R_ESP+44), *(void**)from_ptr(R_ESP+48)); + } else if(strstr(s, "XLoadQueryFont")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\")", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "pthread_mutex_lock")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4)); + } else if(!strcmp(s, "fmodf")) { + post = 4; + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8)); + } else if(!strcmp(s, "fmod")) { + post = 4; + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(double*)from_ptr(R_ESP+4), *(double*)from_ptr(R_ESP+12)); + } else if(strstr(s, "SDL_GetWindowSurface")==s) { + post = 5; + snprintf(buff, 255, "%04d|%p: Calling %s(%p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4)); + } else if(strstr(s, "udev_monitor_new_from_netlink")==s) { + post = 5; + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\")", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(!strcmp(s, "syscall")) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p, %p, %p...)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), *(void**)from_ptr(R_ESP+12), *(void**)from_ptr(R_ESP+16)); + perr = 1; + } else { + snprintf(buff, 255, "%04d|%p: Calling %s (%08X, %08X, %08X...)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), *(uint32_t*)from_ptr(R_ESP+8), *(uint32_t*)from_ptr(R_ESP+12)); + } + if(!cycle_log) { + mutex_lock(&emu->context->mutex_trace); + printf_log(LOG_NONE, "%s =>", buff); + mutex_unlock(&emu->context->mutex_trace); + } + w(emu, a); // some function never come back, so unlock the mutex first! + if(post) + switch(post) { + case 1: snprintf(buff2, 63, " [%d sec %d nsec]", pu32?pu32[0]:-1, pu32?pu32[1]:-1); + break; + case 2: snprintf(buff2, 63, "(%s)", R_EAX?((char*)from_ptr(R_EAX)):"nil"); + break; + case 3: snprintf(buff2, 63, "(%s)", pu32?((char*)pu32):"nil"); + break; + case 4: snprintf(buff2, 63, " (%f)", ST0.d); + break; + case 5: { + uint32_t* p = (uint32_t*)from_ptrv(R_EAX); + if(p) + snprintf(buff2, 63, " size=%dx%d, pitch=%d, pixels=%p", p[2], p[3], p[4], p+5); + else + snprintf(buff2, 63, "NULL Surface"); + } + break; + case 6: snprintf(buff2, 63, "(%S)", pu32?((wchar_t*)pu32):L"nil"); + break; + } + if(perr==1 && ((int)R_EAX)<0) + snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno)); + else if(perr==2 && R_EAX==0) + snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno)); + else if(perr==3 && ((int)R_EAX)==-1) + snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno)); + if(cycle_log) + snprintf(buffret, 128, "0x%lX%s%s", R_RAX, buff2, buff3); + else { + mutex_lock(&emu->context->mutex_trace); + printf_log(LOG_NONE, " return 0x%lX%s%s\n", R_RAX, buff2, buff3); + mutex_unlock(&emu->context->mutex_trace); + } + } else + w(emu, a); + } + return; + } + if(!box64_ignoreint3 && my_context->signals[SIGTRAP]) { + R_RIP = *addr; // update RIP + emit_signal(emu, SIGTRAP, NULL, 3); + } else { + printf_log(LOG_DEBUG, "%04d|Warning, ignoring unsupported Int 3 call @%p\n", GetTID(), (void*)R_RIP); + R_RIP = *addr; + } + //emu->quit = 1; +} diff --git a/src/emu/x86syscall.c b/src/emu/x86syscall.c index 1d28a989..5a76a505 100755 --- a/src/emu/x86syscall.c +++ b/src/emu/x86syscall.c @@ -266,7 +266,7 @@ void EXPORT x86Syscall(x64emu_t *emu) R_EAX = R_EBX; // faking the syscall here, we don't want to really terminate the thread now break; /*case 123: // SYS_modify_ldt - R_EAX = my_modify_ldt(emu, R_EBX, (thread_area_t*)(uintptr_t)R_ECX, R_EDX); + R_EAX = my32_modify_ldt(emu, R_EBX, (thread_area_t*)(uintptr_t)R_ECX, R_EDX); if(R_EAX==0xffffffff && errno>0) R_EAX = (uint32_t)-errno; break;*/ diff --git a/src/emu/x86syscall_32.c b/src/emu/x86syscall_32.c new file mode 100644 index 00000000..cae7b40b --- /dev/null +++ b/src/emu/x86syscall_32.c @@ -0,0 +1,447 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include + +#include /* For SYS_xxx definitions */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef __NR_socketcall +#include +#include +#endif +#include +#include + +#include "debug.h" +#include "box64stack.h" +#include "x64emu.h" +#include "x64run.h" +#include "x64emu_private.h" +#include "x64trace.h" +#include "myalign32.h" +#include "box64context.h" +#include "callback.h" +#include "signals.h" +#include "x64tls.h" +#include "box32.h" + + +// Syscall table for x86_64 can be found +typedef struct scwrap_s { + uint32_t x86s; + int nats; + int nbpars; +} scwrap_t; + +static const scwrap_t syscallwrap[] = { + //{ 2, __NR_fork, 1 }, + //{ 3, __NR_read, 3 }, // wrapped so SA_RESTART can be handled by libc + //{ 4, __NR_write, 3 }, // same + //{ 5, __NR_open, 3 }, // flags need transformation + //{ 6, __NR_close, 1 }, // wrapped so SA_RESTART can be handled by libc + //{ 7, __NR_waitpid, 3 }, + //{ 10, __NR_unlink, 1 }, + //{ 12, __NR_chdir, 1 }, + //{ 13, __NR_time, 1 }, + //{ 15, __NR_chmod, 2 }, + //{ 19, __NR_lseek, 3 }, + //{ 20, __NR_getpid, 0 }, + //{ 24, __NR_getuid, 0 }, + //{ 33, __NR_access, 2 }, + //{ 37, __NR_kill, 2 }, + //{ 38, __NR_rename, 2 }, + //{ 39, __NR_mkdir, 2 }, + //{ 40, __NR_rmdir, 1 }, + //{ 41, __NR_dup, 1 }, + //{ 42, __NR_pipe, 1 }, + //{ 45, __NR_brk, 1 }, + //{ 47, __NR_getgid, 0 }, + //{ 49, __NR_geteuid, 0 }, + //{ 50, __NR_getegid, 0 }, + //{ 54, __NR_ioctl, 3 }, // should be wrapped to allow SA_RESTART handling by libc, but syscall is only 3 arguments, ioctl can be 5 + //{ 55, __NR_fcntl, 3 }, // wrapped to allow filter of F_SETFD + //{ 60, __NR_umask, 1 }, + //{ 63, __NR_dup2, 2 }, + //{ 64, __NR_getppid, 0 }, + //{ 66, __NR_setsid, 0 }, + //{ 75, __NR_setrlimit, 2 }, + //{ 76, __NR_getrlimit, 2 }, + //{ 77, __NR_getrusage, 2 }, + //{ 78, __NR_gettimeofday, 2 }, + //{ 83, __NR_symlink, 2 }, + //{ 82, __NR_select, 5 }, + //{ 85, __NR_readlink, 3 }, + //{ 91, __NR_munmap, 2 }, + //{ 94, __NR_fchmod, 2 }, + //{ 99, __NR_statfs, 2 }, + //{ 102, __NR_socketcall, 2 }, + //{ 104, __NR_setitimer, 3 }, + //{ 105, __NR_getitimer, 2 }, + //{ 106, __NR_newstat, 2 }, + //{ 106, __NR_stat, 2 }, + //{ 107, __NR_newlstat, 2 }, + //{ 107, __NR_lstat, 2 }, + //{ 108, __NR_newfstat, 2 }, + //{ 108, __NR_fstat, 2 }, + //{ 109, __NR_olduname, 1 }, + //{ 110, __NR_iopl, 1 }, + //{ 114, __NR_wait4, 4 }, //TODO: check struct rusage alignment + //{ 117, __NR_ipc, 6 }, + //{ 119, __NR_sigreturn, 0}, + //{ 120, __NR_clone, 5 }, // need works + //{ 122, __NR_uname, 1 }, + //{ 123, __NR_modify_ldt }, + //{ 125, __NR_mprotect, 3 }, + //{ 136, __NR_personality, 1 }, + //{ 140, __NR__llseek, 5 }, + //{ 141, __NR_getdents, 3 }, + //{ 142, __NR__newselect, 5 }, + //{ 143, __NR_flock, 2 }, + //{ 144, __NR_msync, 3 }, + //{ 145, __NR_readv, 3 }, + //{ 146, __NR_writev, 3 }, + //{ 148, __NR_fdatasync, 1 }, + //{ 149, __NR__sysctl, 1 }, // need wrapping? + //{ 156, __NR_sched_setscheduler, 3 }, + //{ 157, __NR_sched_getscheduler, 1 }, + //{ 158, __NR_sched_yield, 0 }, + //{ 162, __NR_nanosleep, 2 }, + //{ 164, __NR_setresuid, 3 }, + //{ 168, __NR_poll, 3 }, // wrapped to allow SA_RESTART wrapping by libc + //{ 172, __NR_prctl, 5 }, + //{ 173, __NR_rt_sigreturn, 0 }, + //{ 175, __NR_rt_sigprocmask, 4 }, + //{ 179, __NR_rt_sigsuspend, 2 }, + //{ 183, __NR_getcwd, 2 }, + //{ 184, __NR_capget, 2}, + //{ 185, __NR_capset, 2}, + //{ 186, __NR_sigaltstack, 2 }, // neeed wrap or something? + //{ 191, __NR_ugetrlimit, 2 }, +// { 192, __NR_mmap2, 6}, + //{ 195, __NR_stat64, 2 }, // need proprer wrap because of structure size change + //{ 196, __NR_lstat64, 2 }, // need proprer wrap because of structure size change + //{ 197, __NR_fstat64, 2 }, // need proprer wrap because of structure size change + //{ 199, __NR_getuid32, 0 }, + //{ 200, __NR_getgid32, 0 }, + //{ 201, __NR_geteuid32, 0 }, + //{ 202, __NR_getegid32, 0 }, + //{ 208, __NR_setresuid32, 3 }, + //{ 209, __NR_getresuid32, 3 }, + //{ 210, __NR_setresgid32, 3 }, + //{ 211, __NR_getresgid32, 3 }, + //{ 220, __NR_getdents64, 3 }, + //{ 221, __NR_fcntl64, 3 }, + { 224, __NR_gettid, 0 }, + //{ 240, __NR_futex, 6 }, + //{ 241, __NR_sched_setaffinity, 3 }, + //{ 242, __NR_sched_getaffinity, 3 }, + //{ 252, __NR_exit_group, 1 }, + //{ 254, __NR_epoll_create, 1 }, + //{ 255, __NR_epoll_ctl, 4 }, + //{ 256, __NR_epoll_wait, 4 }, + //{ 265, __NR_clock_gettime, 2 }, + //{ 266, __NR_clock_getres, 2 }, + //{ 270, __NR_tgkill, 3 }, + //{ 271, __NR_utimes, 2 }, + //{ 291, __NR_inotify_init, 0}, + //{ 292, __NR_inotify_add_watch, 3}, + //{ 293, __NR_inotify_rm_watch, 2}, + //{ 311, __NR_set_robust_list, 2 }, + //{ 312, __NR_get_robust_list, 4 }, + //{ 318, __NR_getcpu, 3}, + //{ 328, __NR_eventfd2, 2}, + //{ 329, __NR_epoll_create1, 1 }, + //{ 331, __NR_pipe2, 2}, + //{ 332, __NR_inotify_init1, 1}, + //{ 355, __NR_getrandom, 3 }, + //{ 356, __NR_memfd_create, 2}, + //{ 449, __NR_futex_waitv, 5}, +}; + +struct mmap_arg_struct { + unsigned long addr; + unsigned long len; + unsigned long prot; + unsigned long flags; + unsigned long fd; + unsigned long offset; +}; + +#undef st_atime +#undef st_ctime +#undef st_mtime + +struct x64_pt_regs { + long ebx; + long ecx; + long edx; + long esi; + long edi; + long ebp; + long eax; + int xds; + int xes; + int xfs; + int xgs; + long orig_eax; + long eip; + int xcs; + long eflags; + long esp; + int xss; +}; + +#ifndef __NR_olduname +struct oldold_utsname { + char sysname[9]; + char nodename[9]; + char release[9]; + char version[9]; + char machine[9]; +}; +#endif +struct old_utsname { + char sysname[65]; + char nodename[65]; + char release[65]; + char version[65]; + char machine[65]; +}; + +struct i386_user_desc { + unsigned int entry_number; + unsigned long base_addr; + unsigned int limit; + unsigned int seg_32bit:1; + unsigned int contents:2; + unsigned int read_exec_only:1; + unsigned int limit_in_pages:1; + unsigned int seg_not_present:1; + unsigned int useable:1; +}; + +int32_t my32_open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode); +int32_t my32_execve(x64emu_t* emu, const char* path, char* const argv[], char* const envp[]); +int my32_munmap(x64emu_t* emu, void* addr, unsigned long length); + +void EXPORT x86Syscall(x64emu_t *emu) +{ + uint32_t s = R_EAX; + printf_log(LOG_DEBUG, "%p: Calling 32bits syscall 0x%02X (%d) %p %p %p %p %p", (void*)R_RIP, s, s, (void*)(uintptr_t)R_EBX, (void*)(uintptr_t)R_ECX, (void*)(uintptr_t)R_EDX, (void*)(uintptr_t)R_ESI, (void*)(uintptr_t)R_EDI); + // check wrapper first + int cnt = sizeof(syscallwrap) / sizeof(scwrap_t); + for (int i=0; iquit = 1; + return; + } + if(R_EAX==0xffffffff && errno>0) + R_EAX = (uint32_t)-errno; + printf_log(LOG_DEBUG, " => 0x%x\n", R_EAX); + return; + } + } + switch (s) { + case 1: // sys_exit + emu->quit = 1; + emu->exit = 1; + //R_EAX = syscall(__NR_exit, R_EBX); // the syscall should exit only current thread + R_EAX = R_EBX; // faking the syscall here, we don't want to really terminate the thread now + break; + case 3: // sys_read + S_EAX = read((int)R_EBX, from_ptrv(R_ECX), from_ulong(R_EDX)); + break; + case 4: // sys_write + S_EAX = write((int)R_EBX, from_ptrv(R_ECX), from_ulong(R_EDX)); + break; + case 5: // sys_open + if(s==5) {printf_log(LOG_DEBUG, " => sys_open(\"%s\", %d, %d)", (char*)from_ptrv(R_EBX), of_convert32(R_ECX), R_EDX);}; + //S_EAX = open((void*)R_EBX, of_convert32(R_ECX), R_EDX); + S_EAX = my32_open(emu, from_ptrv(R_EBX), of_convert32(R_ECX), R_EDX); + break; + case 6: // sys_close + S_EAX = close((int)R_EBX); + break; + /*case 123: // SYS_modify_ldt + R_EAX = my32_modify_ldt(emu, R_EBX, (thread_area_t*)(uintptr_t)R_ECX, R_EDX); + if(R_EAX==0xffffffff && errno>0) + R_EAX = (uint32_t)-errno; + break;*/ + case 243: // set_thread_area + R_EAX = my_set_thread_area_32(emu, (thread_area_32_t*)(uintptr_t)R_EBX); + if(R_EAX==0xffffffff && errno>0) + R_EAX = (uint32_t)-errno; + break; + default: + printf_log(LOG_INFO, "Warning: Unsupported Syscall 0x%02Xh (%d)\n", s, s); + R_EAX = (uint32_t)-ENOSYS; + return; + } + printf_log(LOG_DEBUG, " => 0x%x\n", R_EAX); +} + +#ifdef BOX32 +#define stack(n) (b[(n)/4]) +#define i32(n) (int32_t)stack(n) +#define u32(n) (uint32_t)stack(n) +#define p(n) from_ptrv(stack(n)) + +uint32_t EXPORT my32_syscall(x64emu_t *emu, ptr_t* b) +{ + static uint32_t warned = 0; + uint32_t s = u32(0); + printf_log(LOG_DEBUG, "%p: Calling libc syscall 0x%02X (%d) %p %p %p %p %p\n", from_ptrv(R_EIP), s, s, from_ptrv(u32(4)), from_ptrv(u32(8)), from_ptrv(u32(12)), from_ptrv(u32(16)), from_ptrv(u32(20))); + // check wrapper first + int cnt = sizeof(syscallwrap) / sizeof(scwrap_t); + for (int i=0; iquit = 1; + return 0; + } + } + } + switch (s) { + case 1: // __NR_exit + emu->quit = 1; + return u32(4); // faking the syscall here, we don't want to really terminate the program now + case 3: // sys_read + return (uint32_t)read(i32(4), p(8), u32(12)); + case 4: // sys_write + return (uint32_t)write(i32(4), p(8), u32(12)); + case 5: // sys_open + return my32_open(emu, p(4), of_convert32(u32(8)), u32(12)); + case 6: // sys_close + return (uint32_t)close(i32(4)); + case 11: // execve + return (uint32_t)my32_execve(emu, p(4), p(8), p(12)); + case 91: // munmap + return (uint32_t)my32_munmap(emu, p(4), u32(8)); +#if 0 + case 120: // clone + // x86 raw syscall is long clone(unsigned long flags, void *stack, int *parent_tid, unsigned long tls, int *child_tid); + // so flags=u(4), stack=p(8), parent_tid=p(12), tls=p(16), child_tid=p(20) + if(p(8)) + { + void* stack_base = p(8); + int stack_size = 0; + if(!stack_base) { + // allocate a new stack... + int currstack = 0; + if((R_ESP>=(uintptr_t)emu->init_stack) && (R_ESP<=((uintptr_t)emu->init_stack+emu->size_stack))) + currstack = 1; + stack_size = (currstack)?emu->size_stack:(1024*1024); + stack_base = mmap(NULL, stack_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + // copy value from old stack to new stack + if(currstack) + memcpy(stack_base, emu->init_stack, stack_size); + else { + int size_to_copy = (uintptr_t)emu->init_stack + emu->size_stack - (R_ESP); + memcpy(stack_base+stack_size-size_to_copy, (void*)R_ESP, size_to_copy); + } + } + x64emu_t * newemu = NewX86Emu(emu->context, R_EIP, (uintptr_t)stack_base, stack_size, (p(8))?0:1); + SetupX86Emu(newemu); + CloneEmu(newemu, emu); + Push32(newemu, 0); + PushExit(newemu); + void* mystack = NULL; + if(my32_context->stack_clone_used) { + mystack = malloc(1024*1024); // stack for own process... memory leak, but no practical way to remove it + } else { + if(!my32_context->stack_clone) + my32_context->stack_clone = malloc(1024*1024); + mystack = my32_context->stack_clone; + my32_context->stack_clone_used = 1; + } + // x86_64 raw clone is long clone(unsigned long flags, void *stack, int *parent_tid, int *child_tid, unsigned long tls); + long ret = clone(clone_fn, (void*)((uintptr_t)mystack+1024*1024), u32(4), newemu, p(12), p(16), p(20)); + return (uint32_t)ret; + } + else + return (uint32_t)syscall(__NR_clone, u32(4), p(8), p(12), p(16), p(20)); + break; + case 123: // SYS_modify_ldt + return my32_modify_ldt(emu, i32(4), (thread_area_t*)p(8), i32(12)); + case 125: // mprotect + return (uint32_t)my32_mprotect(emu, p(4), u32(8), i32(12)); + case 174: // sys_rt_sigaction + return (uint32_t)my32_sigaction(emu, i32(4), (x86_sigaction_t*)p(8), (x86_sigaction_t*)p(12)); + case 192: // mmap2 + return (uint32_t)my32_mmap64(emu, p(4), u32(8), i32(12), i32(16), i32(20), u32(24)); + case 243: // set_thread_area + return my32_set_thread_area((thread_area_t*)p(4)); +#ifndef NOALIGN + case 254: // epoll_create + return my32_epoll_create(emu, i32(4)); + case 255: // epoll_ctl + return my32_epoll_ctl(emu, i32(4), i32(8), i32(12), p(16)); + case 256: // epoll_wait + return my32_epoll_wait(emu, i32(4), p(8), i32(12), i32(16)); +#endif + case 270: //_NR_tgkill + /*if(!u32(12))*/ { + //printf("tgkill(%u, %u, %u) => ", u32(4), u32(8), u32(12)); + uint32_t ret = (uint32_t)syscall(__NR_tgkill, u32(4), u32(8), u32(12)); + //printf("%u (errno=%d)\n", ret, (ret==(uint32_t)-1)?errno:0); + return ret; + }/* else { + printf_log(LOG_INFO, "Warning: ignoring libc Syscall tgkill (%u, %u, %u)\n", u32(4), u32(8), u32(12)); + }*/ + return 0; +#ifndef NOALIGN + case 329: // epoll_create1 + return my32_epoll_create1(emu, of_convert32(i32(4))); +#endif +#ifndef __NR_getrandom + case 355: // getrandom + return (uint32_t)my32_getrandom(emu, p(4), u32(8), u32(12)); +#endif +#ifndef __NR_memfd_create + case 356: // memfd_create + return (uint32_t)my32_memfd_create(emu, (void*)R_EBX, R_ECX); +#endif +#endif + default: + if(!(warned&(1<FloatRegisters[i].q[0], (immx[i], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&p->XmmRegisters[i], &emu->xmm[i], 16); + memcpy(p->XmmRegisters, emu->xmm, 8*16); } void fpu_fxsave64(x64emu_t* emu, void* ed) @@ -381,8 +380,7 @@ void fpu_fxsave64(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy(&p->FloatRegisters[i].q[0], (immx[i], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&p->XmmRegisters[i], &emu->xmm[i], 16); + memcpy(p->XmmRegisters, emu->xmm, 16*16); } void fpu_fxrstor32(x64emu_t* emu, void* ed) @@ -406,8 +404,7 @@ void fpu_fxrstor32(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy((immx[i], &p->FloatRegisters[i].q[0], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&emu->xmm[i], &p->XmmRegisters[i], 16); + memcpy(emu->xmm, p->XmmRegisters, 8*16); } void fpu_fxrstor64(x64emu_t* emu, void* ed) @@ -431,8 +428,7 @@ void fpu_fxrstor64(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy((immx[i], &p->FloatRegisters[i].q[0], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&emu->xmm[i], &p->XmmRegisters[i], 16); + memcpy(emu->xmm, p->XmmRegisters, 16*16); } typedef struct xsaveheader_s { diff --git a/src/include/box32.h b/src/include/box32.h index ab8fa184..9554e65f 100644 --- a/src/include/box32.h +++ b/src/include/box32.h @@ -104,9 +104,4 @@ void fini_hash_helper(); typedef struct x86emu_s x86emu_t; -void* my_mmap(x86emu_t* emu, void* addr, unsigned long length, int prot, int flags, int fd, int offset); -void* my_mmap64(x86emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, int64_t offset); -int my_munmap(x86emu_t* emu, void* addr, unsigned long length); -int my_mprotect(x86emu_t* emu, void *addr, unsigned long len, int prot); - #endif //__BOX32_64__H_ diff --git a/src/include/box32context.h b/src/include/box32context.h new file mode 100644 index 00000000..fac7a6f7 --- /dev/null +++ b/src/include/box32context.h @@ -0,0 +1,7 @@ +#ifndef __BOX32CONTEXT_H_ +#define __BOX32CONTEXT_H_ + +#include "box32.h" +#include "box64context.h" + +#endif//__BOX32CONTEXT_H_ \ No newline at end of file diff --git a/src/include/box64context.h b/src/include/box64context.h index b8706729..532c1aaf 100644 --- a/src/include/box64context.h +++ b/src/include/box64context.h @@ -7,12 +7,19 @@ #ifdef DYNAREC #include "dynarec/native_lock.h" #endif +#ifndef BOX32_DEF +#define BOX32_DEF +typedef uint32_t ptr_t; +typedef int32_t long_t; +typedef uint32_t ulong_t; +#endif #ifdef DYNAREC // disabling for now, seems to have a negative impact on performances //#define USE_CUSTOM_MUTEX #endif + typedef struct elfheader_s elfheader_t; typedef struct cleanup_s cleanup_t; typedef struct x64emu_s x64emu_t; @@ -26,6 +33,7 @@ typedef struct kh_defaultversion_s kh_defaultversion_t; typedef struct kh_mapsymbols_s kh_mapsymbols_t; typedef struct library_s library_t; typedef struct linkmap_s linkmap_t; +typedef struct linkmap32_s linkmap32_t; typedef struct kh_threadstack_s kh_threadstack_t; typedef struct rbtree rbtree; typedef struct atfork_fnc_s { @@ -97,9 +105,11 @@ typedef struct box64context_s { int argc; char** argv; + ptr_t argv32; int envc; char** envv; + ptr_t envv32; int orig_argc; char** orig_argv; @@ -175,6 +185,7 @@ typedef struct box64context_s { library_t *sdl2lib; library_t *sdl2mixerlib; linkmap_t *linkmap; + linkmap32_t *linkmap32; void* sdl1allocrw; // SDL1 AllocRW/FreeRW function void* sdl1freerw; void* sdl2allocrw; // SDL2 AllocRW/FreeRW function diff --git a/src/include/debug.h b/src/include/debug.h index e0f81c95..1ecf5b4e 100644 --- a/src/include/debug.h +++ b/src/include/debug.h @@ -121,7 +121,7 @@ extern int box64_x11threads; extern int box64_x11glx; extern char* box64_libGL; extern uintptr_t fmod_smc_start, fmod_smc_end; // to handle libfmod (from Unreal) SMC (self modifying code) -extern uint32_t default_gs; +extern uint32_t default_gs, default_fs; extern int jit_gdb; // launch gdb when a segfault is trapped extern int box64_tcmalloc_minimal; // when using tcmalloc_minimal #define LOG_NONE 0 diff --git a/src/include/elfload_dump.h b/src/include/elfload_dump.h index 3fa0a910..848a2817 100644 --- a/src/include/elfload_dump.h +++ b/src/include/elfload_dump.h @@ -26,4 +26,8 @@ void DumpRelRTable64(elfheader_t *h, int cnt, Elf64_Relr *relr, const char *name void DumpBinary(char* p, int sz); +#ifndef SHT_CHECKSUM +#define SHT_CHECKSUM 0x6ffffff8 +#endif + #endif //ELFLOADER_DUMP_H \ No newline at end of file diff --git a/src/include/myalign32.h b/src/include/myalign32.h new file mode 100755 index 00000000..c81ccdf6 --- /dev/null +++ b/src/include/myalign32.h @@ -0,0 +1,409 @@ +#ifndef __MY_ALIGN32__H_ +#define __MY_ALIGN32__H_ +#include + +#define X64_VA_MAX_REG (6*8) +#define X64_VA_MAX_XMM ((6*8)+(8*16)) + +#define ALIGN64_16(A) (uint64_t*)((((uintptr_t)A)+15)&~15LL) + +#ifdef __x86_64__ +// x86_64, 6 64bits general regs and 16 or 8? 128bits float regs +/* +For reference, here is the x86_64 va_list structure +typedef struct { + unsigned int gp_offset; + unsigned int fp_offset; + void *overflow_arg_area; + void *reg_save_area; +} va_list[1]; +*/ +#define CREATE_SYSV_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs->gp_offset=X64_VA_MAX_REG; \ + sysv_varargs->fp_offset=X64_VA_MAX_XMM; \ + sysv_varargs->reg_save_area=(A); \ + sysv_varargs->overflow_arg_area=A + +#define CONVERT_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs->gp_offset=X64_VA_MAX_REG; \ + sysv_varargs->fp_offset=X64_VA_MAX_XMM; \ + sysv_varargs->reg_save_area=(A); \ + sysv_varargs->overflow_arg_area=A + + + +#elif defined(__aarch64__) +// aarch64: 8 64bits general regs and 8 128bits float regs +/* +va_list declared as +typedef struct va_list { + void * stack; // next stack param + void * gr_top; // end of GP arg reg save area + void * vr_top; // end of FP/SIMD arg reg save area + int gr_offs; // offset from gr_top to next GP register arg + int vr_offs; // offset from vr_top to next FP/SIMD register arg +} va_list; +*/ +#define CREATE_SYSV_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs.__gr_offs=(8*8); \ + sysv_varargs.__vr_offs=(8*16); \ + sysv_varargs.__stack=(A); + +#define CONVERT_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs.__gr_offs=(8*8); \ + sysv_varargs.__vr_offs=(8*16)); \ + sysv_varargs.__stack=(A); + + +#elif defined(__loongarch64) || defined(__powerpc64__) || defined(__riscv) +#define CREATE_SYSV_VALIST_32(A) \ + va_list sysv_varargs = (va_list)A + +#define CREATE_VALIST_FROM_VALIST_32(VA, SCRATCH) \ + va_list sysv_varargs = (va_list)A + +#else +#error Unknown architecture! +#endif + +#define VARARGS_32 sysv_varargs +#define PREPARE_VALIST_32 CREATE_SYSV_VALIST_32(emu->scratch) +#define VARARGS_32_(A) sysv_varargs +#define PREPARE_VALIST_32_(A) CREATE_SYSV_VALIST_32(A) + +void myStackAlign32(const char* fmt, uint32_t* st, uint64_t* mystack); +void myStackAlignGVariantNew32(const char* fmt, uint32_t* st, uint64_t* mystack); +void myStackAlignW32(const char* fmt, uint32_t* st, uint64_t* mystack); + +void UnalignStat64_32(const void* source, void* dest); + +void UnalignStatFS64_32(const void* source, void* dest); +#if 0 +void UnalignOggVorbis(void* dest, void* source); // Arm -> x86 +void AlignOggVorbis(void* dest, void* source); // x86 -> Arm + +void UnalignVorbisDspState(void* dest, void* source); // Arm -> x86 +void AlignVorbisDspState(void* dest, void* source); // x86 -> Arm + +void UnalignVorbisBlock(void* dest, void* source); // Arm -> x86 +void AlignVorbisBlock(void* dest, void* source); // x86 -> Arm + +void UnalignEpollEvent(void* dest, void* source, int nbr); // Arm -> x86 +void AlignEpollEvent(void* dest, void* source, int nbr); // x86 -> Arm + +void UnalignSmpegInfo(void* dest, void* source); // Arm -> x86 +void AlignSmpegInfo(void* dest, void* source); // x86 -> Arm +#endif +// stat64 is packed on i386, not on arm (and possibly other structures) +#undef st_atime +#undef st_atime_nsec +#undef st_mtime +#undef st_mtime_nsec +#undef st_ctime +#undef st_ctime_nsec +struct i386_stat64 { + uint64_t st_dev; + uint8_t __pad0[4]; + uint32_t __st_ino; + uint32_t st_mode; + uint32_t st_nlink; + uint32_t st_uid; + uint32_t st_gid; + uint64_t st_rdev; + uint8_t __pad3[4]; + int64_t st_size; + uint32_t st_blksize; + uint64_t st_blocks; + uint32_t st_atime; + uint32_t st_atime_nsec; + uint32_t st_mtime; + uint32_t st_mtime_nsec; + uint32_t st_ctime; + uint32_t st_ctime_nsec; + uint64_t st_ino; +} __attribute__((packed)); + +struct i386_fsid { + int val[2]; +} __attribute__((packed)); + +struct i386_statfs { + uint32_t f_type; + uint32_t f_bsize; + uint32_t f_blocks; + uint32_t f_bfree; + uint32_t f_bavail; + uint32_t f_files; + uint32_t f_ffree; + struct i386_fsid f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_flags; + uint32_t f_spare[4]; +} __attribute__((packed)); + +struct i386_statfs64 { + uint32_t f_type; + uint32_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + struct i386_fsid f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_flags; + uint32_t f_spare[4]; +} __attribute__((packed)); +#if 0 +typedef struct { + unsigned char *data; + int storage; + int fill; + int returned; + + int unsynced; + int headerbytes; + int bodybytes; +} ogg_sync_state; + +typedef struct { + unsigned char *body_data; /* bytes from packet bodies */ + long body_storage; /* storage elements allocated */ + long body_fill; /* elements stored; fill mark */ + long body_returned; /* elements of fill returned */ + + + int *lacing_vals; /* The values that will go to the segment table */ + int64_t *granule_vals; /* granulepos values for headers. Not compact + this way, but it is simple coupled to the + lacing fifo */ + long lacing_storage; + long lacing_fill; + long lacing_packet; + long lacing_returned; + + unsigned char header[282]; /* working space for header encode */ + int header_fill; + + int e_o_s; /* set when we have buffered the last packet in the + logical bitstream */ + int b_o_s; /* set after we've written the initial page + of a logical bitstream */ + long serialno; + long pageno; + int64_t packetno; /* sequence number for decode; the framing + knows where there's a hole in the data, + but we need coupling so that the codec + (which is in a separate abstraction + layer) also knows about the gap */ + int64_t granulepos; + +} ogg_stream_state; + +typedef struct vorbis_dsp_state { + int analysisp; + ptr_t vi; //vorbis_info + + ptr_t pcm; //float** + ptr_t pcmret; // float** + int pcm_storage; + int pcm_current; + int pcm_returned; + + int preextrapolate; + int eofflag; + + long lW; + long W; + long nW; + long centerW; + + int64_t granulepos; + int64_t sequence; + + int64_t glue_bits; + int64_t time_bits; + int64_t floor_bits; + int64_t res_bits; + + void *backend_state; +} vorbis_dsp_state; + +typedef struct { + long endbyte; + int endbit; + + unsigned char *buffer; + unsigned char *ptr; + long storage; +} oggpack_buffer; + +typedef struct vorbis_block { + /* necessary stream state for linking to the framing abstraction */ + float **pcm; /* this is a pointer into local storage */ + oggpack_buffer opb; + + long lW; + long W; + long nW; + int pcmend; + int mode; + + int eofflag; + int64_t granulepos; + int64_t sequence; + vorbis_dsp_state *vd; /* For read-only access of configuration */ + + /* local storage to avoid remallocing; it's up to the mapping to + structure it */ + void *localstore; + long localtop; + long localalloc; + long totaluse; + struct alloc_chain *reap; + + /* bitmetrics for the frame */ + long glue_bits; + long time_bits; + long floor_bits; + long res_bits; + + void *internal; + +} vorbis_block; + +typedef struct { + size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource); + int (*seek_func) (void *datasource, int64_t offset, int whence); + int (*close_func) (void *datasource); + long (*tell_func) (void *datasource); +} ov_callbacks; + +typedef struct OggVorbis { + void *datasource; /* Pointer to a FILE *, etc. */ + int seekable; + int64_t offset; + int64_t end; + ogg_sync_state oy; + + /* If the FILE handle isn't seekable (eg, a pipe), only the current + stream appears */ + int links; + int64_t *offsets; + int64_t *dataoffsets; + long *serialnos; + int64_t *pcmlengths; /* overloaded to maintain binary + compatibility; x2 size, stores both + beginning and end values */ + void *vi; //vorbis_info + void *vc; //vorbis_comment + + /* Decoding working state local storage */ + int64_t pcm_offset; + int ready_state; + long current_serialno; + int current_link; + + double bittrack; + double samptrack; + + ogg_stream_state os; /* take physical pages, weld into a logical + stream of packets */ + vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */ + vorbis_block vb; /* local working space for packet->PCM decode */ + + ov_callbacks callbacks; + +} OggVorbis; + +typedef struct my_SMPEG_Info_s { + int has_audio; + int has_video; + int width; + int height; + int current_frame; + double current_fps; + char audio_string[80]; + int audio_current_frame; + uint32_t current_offset; + uint32_t total_size; + double current_time; + double total_time; +} my_SMPEG_Info_t; + +typedef struct __attribute__((packed)) x86_ftsent_s { + struct x86_ftsent_s *fts_cycle; + struct x86_ftsent_s *fts_parent; + struct x86_ftsent_s *fts_link; + long fts_number; + void *fts_pointer; + char *fts_accpath; + char *fts_path; + int fts_errno; + int fts_symfd; + uint16_t fts_pathlen; + uint16_t fts_namelen; + uintptr_t fts_ino; + uint64_t fts_dev; + uint32_t fts_nlink; + int16_t fts_level; + uint16_t fts_info; + uint16_t fts_flags; + uint16_t fts_instr; + struct stat *fts_statp; + char fts_name[1]; +} x86_ftsent_t; + +void UnalignFTSENT(void* dest, void* source); // Arm -> x86 +void AlignFTSENT(void* dest, void* source); // x86 -> Arm + +typedef struct my_flock64_s { + uint16_t l_type; + uint16_t l_whence; + int64_t l_start; + int64_t l_len; + int l_pid; +} my_flock64_t; + +typedef struct __attribute__((packed)) x86_flock64_s { + uint16_t l_type; + uint16_t l_whence; + int64_t l_start; + int64_t l_len; + int l_pid; +} x86_flock64_t; + +void UnalignFlock64(void* dest, void* source); // Arm -> x86 +void AlignFlock64(void* dest, void* source); // x86 -> Arm + +// defined in wrapperlibc.c +int of_convert(int); // x86->arm +int of_unconvert(int); // arm->x86 + +typedef struct my_GValue_s +{ + int g_type; + union { + int v_int; + int64_t v_int64; + uint64_t v_uint64; + float v_float; + double v_double; + void* v_pointer; + } data[2]; +} my_GValue_t; + +void alignNGValue(my_GValue_t* v, void* value, int n); +void unalignNGValue(void* value, my_GValue_t* v, int n); +#endif + +int of_convert32(int a); +int of_unconvert32(int a); + +#endif//__MY_ALIGN32__H_ \ No newline at end of file diff --git a/src/include/regs.h b/src/include/regs.h index 3cfcdc5a..5b2a9c41 100644 --- a/src/include/regs.h +++ b/src/include/regs.h @@ -319,6 +319,7 @@ typedef union { #define R_R13 emu->regs[_R13].q[0] #define R_R14 emu->regs[_R14].q[0] #define R_R15 emu->regs[_R15].q[0] +#define R_EIP emu->ip.dword[0] #define R_EAX emu->regs[_AX].dword[0] #define R_EBX emu->regs[_BX].dword[0] #define R_ECX emu->regs[_CX].dword[0] diff --git a/src/include/threads.h b/src/include/threads.h index 8ed0e4c1..a35b02f3 100644 --- a/src/include/threads.h +++ b/src/include/threads.h @@ -4,11 +4,26 @@ typedef struct box64context_s box64context_t; typedef struct x64emu_s x64emu_t; +typedef struct emuthread_s { + uintptr_t fnc; + void* arg; + x64emu_t* emu; + int join; + uintptr_t self; + ulong_t hself; + int cancel_cap, cancel_size; + void** cancels; +} emuthread_t; + void CleanStackSize(box64context_t* context); void init_pthread_helper(void); void fini_pthread_helper(box64context_t* context); void clean_current_emuthread(void); +#ifdef BOX32 +void init_pthread_helper_32(void); +void fini_pthread_helper_32(box64context_t* context); +#endif // prepare an "emuthread structure" in pet and return address of function pointer for a "thread creation routine" void* my_prepare_thread(x64emu_t *emu, void* f, void* arg, int ssize, void** pet); diff --git a/src/include/x64emu.h b/src/include/x64emu.h index 5591823b..8c08a0c2 100644 --- a/src/include/x64emu.h +++ b/src/include/x64emu.h @@ -25,7 +25,8 @@ void SetEDX(x64emu_t *emu, uint32_t v); void SetEDI(x64emu_t *emu, uint32_t v); void SetESI(x64emu_t *emu, uint32_t v); void SetEBP(x64emu_t *emu, uint32_t v); -//void SetESP(x64emu_t *emu, uint32_t v); +void SetESP(x64emu_t *emu, uint32_t v); +void SetEIP(x64emu_t *emu, uint32_t v); void SetRAX(x64emu_t *emu, uint64_t v); void SetRBX(x64emu_t *emu, uint64_t v); void SetRCX(x64emu_t *emu, uint64_t v); @@ -35,8 +36,8 @@ void SetRSI(x64emu_t *emu, uint64_t v); void SetRBP(x64emu_t *emu, uint64_t v); void SetRSP(x64emu_t *emu, uint64_t v); void SetRIP(x64emu_t *emu, uint64_t v); -//void SetFS(x64emu_t *emu, uint16_t v); -//uint16_t GetFS(x64emu_t *emu); +void SetFS(x64emu_t *emu, uint16_t v); +uint16_t GetFS(x64emu_t *emu); uint64_t GetRSP(x64emu_t *emu); uint64_t GetRBP(x64emu_t *emu); void ResetFlags(x64emu_t *emu); diff --git a/src/include/x64run.h b/src/include/x64run.h index a5d4528e..9eed07c0 100644 --- a/src/include/x64run.h +++ b/src/include/x64run.h @@ -10,6 +10,9 @@ void DynaRun(x64emu_t *emu); uint32_t LibSyscall(x64emu_t *emu); void PltResolver64(x64emu_t* emu); +#ifdef BOX32 +void PltResolver32(x64emu_t* emu); +#endif extern uintptr_t pltResolver64; int GetTID(void); diff --git a/src/librarian/librarian.c b/src/librarian/librarian.c index b836e4ca..259f7e0c 100644 --- a/src/librarian/librarian.c +++ b/src/librarian/librarian.c @@ -12,6 +12,9 @@ #include "x64emu.h" #include "box64context.h" #include "elfloader.h" +#ifdef BOX32 +#include "box32.h" +#endif #include "bridge.h" @@ -254,15 +257,31 @@ static int AddNeededLib_add(lib_t** maplib, int local, needed_libs_t* needed, in if (lib->type == LIB_EMULATED) { // Need to add library to the linkmap (put here so the link is ordered) - linkmap_t *lm = addLinkMapLib(lib); - if(!lm) { - // Crashed already - printf_dump(LOG_DEBUG, "Failure to add lib linkmap\n"); - return 1; + #ifdef BOX32 + if(box64_is32bits) { + linkmap32_t *lm = addLinkMapLib32(lib); + if(!lm) { + // Crashed already + printf_dump(LOG_DEBUG, "Failure to add lib linkmap\n"); + return 1; + } + lm->l_addr = (Elf32_Addr)to_ptrv(GetElfDelta(lib->e.elf)); + lm->l_name = to_ptrv(lib->name); + lm->l_ld = to_ptrv(GetDynamicSection(lib->e.elf)); + } else + #endif + { + linkmap_t *lm = addLinkMapLib(lib); + if(!lm) { + // Crashed already + printf_dump(LOG_DEBUG, "Failure to add lib linkmap\n"); + return 1; + } + lm->l_addr = (Elf64_Addr)GetElfDelta(lib->e.elf); + lm->l_name = lib->name; + lm->l_ld = GetDynamicSection(lib->e.elf); } - lm->l_addr = (Elf64_Addr)GetElfDelta(lib->e.elf); - lm->l_name = lib->name; - lm->l_ld = GetDynamicSection(lib->e.elf); + //TODO: it seems to never be removed! } IncRefCount(lib, emu); return 0; diff --git a/src/librarian/library.c b/src/librarian/library.c index 69f27d5f..e4ab45e5 100644 --- a/src/librarian/library.c +++ b/src/librarian/library.c @@ -40,6 +40,16 @@ #endif #undef GO +#ifdef BOX32 +#define GO(P, N) int wrapped##N##_init32(library_t* lib, box64context_t *box64); \ + void wrapped##N##_fini32(library_t* lib); +#ifdef STATICBUILD +#include "library_list_static_32.h" +#else +#include "library_list_32.h" +#endif +#undef GO +#endif #define GO(P, N) {P, wrapped##N##_init, wrapped##N##_fini}, wrappedlib_t wrappedlibs[] = { @@ -50,6 +60,17 @@ wrappedlib_t wrappedlibs[] = { #endif }; #undef GO +#define GO(P, N) {P, wrapped##N##_init32, wrapped##N##_fini32}, +wrappedlib_t wrappedlibs32[] = { +#ifdef BOX32 +#ifdef STATICBUILD +#include "library_list_static_32.h" +#else +#include "library_list_32.h" +#endif +#endif +}; +#undef GO KHASH_MAP_IMPL_STR(symbolmap, symbol1_t) KHASH_MAP_IMPL_STR(symbol2map, symbol2_t) @@ -232,14 +253,11 @@ int DummyLib_GetLocal(library_t* lib, const char* name, uintptr_t *offs, uintptr } static void initWrappedLib(library_t *lib, box64context_t* context) { - if(box64_is32bits) { - // TODO - return; // nothing wrapped yet - } - int nb = sizeof(wrappedlibs) / sizeof(wrappedlib_t); + int nb = (box64_is32bits?sizeof(wrappedlibs32):sizeof(wrappedlibs)) / sizeof(wrappedlib_t); for (int i=0; iname, wrappedlibs[i].name)==0) { - if(wrappedlibs[i].init(lib, context)) { + wrappedlib_t* w = box64_is32bits?(&wrappedlibs32[i]):(&wrappedlibs[i]); + if(strcmp(lib->name, w->name)==0) { + if(w->init(lib, context)) { // error! const char* error_str = dlerror(); if(error_str) // don't print the message if there is no error string from last error @@ -247,7 +265,7 @@ static void initWrappedLib(library_t *lib, box64context_t* context) { return; // non blocker... } printf_dump(LOG_INFO, "Using native(wrapped) %s\n", lib->name); - lib->fini = wrappedlibs[i].fini; + lib->fini = w->fini; lib->getglobal = WrappedLib_GetGlobal; lib->getweak = WrappedLib_GetWeak; lib->getlocal = WrappedLib_GetLocal; @@ -366,7 +384,7 @@ static void initEmulatedLib(const char* path, library_t *lib, box64context_t* co { char libname[MAX_PATH]; strcpy(libname, path); - int found = FileIsX64ELF(libname); + int found = box64_is32bits?FileIsX86ELF(libname):FileIsX64ELF(libname); if(found) if(loadEmulatedLib(libname, lib, context, verneeded)) return; @@ -375,14 +393,14 @@ static void initEmulatedLib(const char* path, library_t *lib, box64context_t* co { strcpy(libname, context->box64_ld_lib.paths[i]); strcat(libname, path); - if(FileIsX64ELF(libname)) + if(box64_is32bits?FileIsX86ELF(libname):FileIsX64ELF(libname)) if(loadEmulatedLib(libname, lib, context, verneeded)) return; // also try x86_64 variant strcpy(libname, context->box64_ld_lib.paths[i]); - strcat(libname, "x86_64/"); + strcat(libname, box64_is32bits?"i386/":"x86_64/"); strcat(libname, path); - if(FileIsX64ELF(libname)) + if(box64_is32bits?FileIsX86ELF(libname):FileIsX64ELF(libname)) if(loadEmulatedLib(libname, lib, context, verneeded)) return; } @@ -793,7 +811,7 @@ static int getSymbolInDataMaps(library_t*lib, const char* name, int noweak, uint if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)kh_value(lib->w.mydatamap, k).addr; @@ -828,7 +846,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)s->addr; @@ -856,7 +874,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)s->addr; @@ -921,7 +939,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)s->addr; @@ -1078,6 +1096,64 @@ int GetDeepBind(library_t* lib) return lib->deepbind; } +#ifdef BOX32 +linkmap32_t* getLinkMapLib32(library_t* lib) +{ + linkmap32_t* lm = my_context->linkmap32; + while(lm) { + if(lm->l_lib == lib) + return lm; + lm = (linkmap32_t*)from_ptrv(lm->l_next); + } + return NULL; +} +linkmap32_t* getLinkMapElf32(elfheader_t* h) +{ + linkmap32_t* lm = my_context->linkmap32; + while(lm) { + if(lm->l_lib && lm->l_lib->type==LIB_EMULATED && lm->l_lib->e.elf == h) + return lm; + lm = (linkmap32_t*)from_ptrv(lm->l_next); + } + return NULL; +} +linkmap32_t* addLinkMapLib32(library_t* lib) +{ + if(!my_context->linkmap32) { + my_context->linkmap32 = (linkmap32_t*)box_calloc(1, sizeof(linkmap32_t)); + my_context->linkmap32->l_lib = lib; + return my_context->linkmap32; + } + linkmap32_t* lm = my_context->linkmap32; + while(lm->l_next) + lm = (linkmap32_t*)from_ptrv(lm->l_next); + lm->l_next = to_ptrv(box_calloc(1, sizeof(linkmap32_t))); + linkmap32_t* l_next = (linkmap32_t*)from_ptrv(lm->l_next); + l_next->l_lib = lib; + l_next->l_prev = to_ptrv(lm); + return l_next; +} +void removeLinkMapLib32(library_t* lib) +{ + linkmap32_t* lm = getLinkMapLib32(lib); + if(!lm) return; + if(lm->l_next) + ((linkmap32_t*)from_ptrv(lm->l_next))->l_prev = lm->l_prev; + if(lm->l_prev) + ((linkmap32_t*)from_ptrv(lm->l_prev))->l_next = lm->l_next; + box_free(lm); +} + +void AddMainElfToLinkmap32(elfheader_t* elf) +{ + linkmap32_t* lm = addLinkMapLib32(NULL); // main elf will have a null lib link + + lm->l_addr = (Elf32_Addr)to_ptrv(GetElfDelta(elf)); + lm->l_name = to_ptrv(my_context->fullpath); + lm->l_ld = to_ptrv(GetDynamicSection(elf)); +} +#endif + linkmap_t* getLinkMapLib(library_t* lib) { linkmap_t* lm = my_context->linkmap; diff --git a/src/librarian/library_private.h b/src/librarian/library_private.h index a13df4a0..495ad000 100644 --- a/src/librarian/library_private.h +++ b/src/librarian/library_private.h @@ -133,11 +133,29 @@ typedef struct linkmap_s { library_t* l_lib; } linkmap_t; +#ifdef BOX32 +typedef struct linkmap32_s { + // actual struct link_map + Elf32_Addr l_addr; + ptr_t l_name; // char* + ptr_t l_ld; //Elf64_Dyn* + ptr_t l_next, l_prev; // struct linkmap32_s * + // custom + library_t* l_lib; + +} linkmap32_t; +#endif linkmap_t* getLinkMapLib(library_t* lib); linkmap_t* getLinkMapElf(elfheader_t* h); linkmap_t* addLinkMapLib(library_t* lib); void removeLinkMapLib(library_t* lib); +#ifdef BOX32 +linkmap32_t* getLinkMapLib32(library_t* lib); +linkmap32_t* getLinkMapElf32(elfheader_t* h); +linkmap32_t* addLinkMapLib32(library_t* lib); +void removeLinkMapLib32(library_t* lib); +#endif int FiniLibrary(library_t* lib, x64emu_t* emu); void Free1Library(library_t **lib, x64emu_t* emu); diff --git a/src/library_list_32.h b/src/library_list_32.h new file mode 100644 index 00000000..a5a1831c --- /dev/null +++ b/src/library_list_32.h @@ -0,0 +1,12 @@ +#ifndef GO +#error Nope +#endif + +GO("libpthread.so.0", libpthread) +GO("librt.so.1", librt) +GO("libc.so.6", libc) +GO("libm.so.6", libm) +GO("libdl.so.2", libdl) +GO("ld-linux.so.2", ldlinux) + +GO("crashhandler.so", crashhandler) diff --git a/src/library_list_static_32.h b/src/library_list_static_32.h new file mode 100644 index 00000000..525b5bef --- /dev/null +++ b/src/library_list_static_32.h @@ -0,0 +1,10 @@ +#ifndef GO +#error Nope +#endif + +GO("libpthread.so.0", libpthread) +GO("librt.so.1", librt) +GO("libc.so.6", libc) +GO("libm.so.6", libm) +GO("libdl.so.2", libdl) +GO("ld-linux.so.2", ldlinux) diff --git a/src/libtools/myalign32.c b/src/libtools/myalign32.c new file mode 100755 index 00000000..ee0b2790 --- /dev/null +++ b/src/libtools/myalign32.c @@ -0,0 +1,935 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "debug.h" +#include "box32.h" + +void myStackAlign32(const char* fmt, uint32_t* st, uint64_t* mystack) +{ + if(!fmt) + return; + // loop... + const char* p = fmt; + int state = 0; + double d; + while(*p) + { + switch(state) { + case 0: + switch(*p) { + case '%': state = 1; ++p; break; + default: + ++p; + } + break; + case 1: // normal + case 2: // l + case 3: // ll + case 4: // L + switch(*p) { + case '%': state = 0; ++p; break; //%% = back to 0 + case 'l': ++state; if (state>3) state=3; ++p; break; + case 'z': state = 2; ++p; break; + case 'L': state = 4; ++p; break; + case 'a': + case 'A': + case 'e': + case 'E': + case 'g': + case 'G': + case 'F': + case 'f': state += 10; break; // float + case 'd': + case 'i': + case 'o': state += 20; break; // int + case 'x': + case 'X': + case 'u': state += 40; break; // uint + case 'h': ++p; break; // ignored... + case '\'': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case '+': + case '-': ++p; break; // formating, ignored + case 'm': state = 0; ++p; break; // no argument + case 'n': + case 'p': + case 'S': + case 's': state = 30; break; // pointers + case '$': ++p; break; // should issue a warning, it's not handled... + case '*': *(mystack++) = *(st++); ++p; break; // fetch an int in the stack.... + case ' ': state=0; ++p; break; + default: + state=20; // other stuff, put an int... + } + break; + case 11: //double + case 12: //%lg, still double + case 13: //%llg, still double + case 23: // 64bits int + case 43: // 64bits uint + *(uint64_t*)mystack = *(uint64_t*)st; + st+=2; mystack+=1; + state = 0; + ++p; + break; + case 22: // long int + *(int64_t*)mystack = from_long(*(long_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 42: // long uint + *(uint64_t*)mystack = from_ulong(*(ulong_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 14: //%LG long double + #ifdef HAVE_LD80BITS + memcpy(mystack, st, 10); + st+=3; mystack+=2; + #else + LD2D((void*)st, &d); + *(long double*)mystack = (long double)d; + st+=3; mystack+=2; + #endif + state = 0; + ++p; + break; + case 30: //pointer + *(uintptr_t*)mystack = from_ptr(*st); + st++; mystack+=1; + state = 0; + ++p; + break; + case 20: // fallback + case 21: + case 24: // normal int / pointer + case 40: + case 41: + *mystack = *st; + ++mystack; + ++st; + state = 0; + ++p; + break; + default: + // whattt? + state = 0; + } + } +} + +void myStackAlignGVariantNew32(const char* fmt, uint32_t* st, uint64_t* mystack) +{ + if (!fmt) + return; + + const char *p = fmt; + int state = 0; + int inblocks = 0; + int tmp; + + do { + switch(state) { + case 0: // Nothing + switch(*p) { + case 'b': // gboolean + case 'y': // guchar + case 'n': // gint16 + case 'q': // guint16 + case 'i': // gint32 + case 'u': // guint32 + case 'h': // gint32 + case 's': // const gchar* + case 'o': + case 'g': + case 'v': // GVariant* + case '*': // GVariant* of any type + case '?': // GVariant* of basic type + case 'r': // GVariant* of tuple type + *mystack = *st; + ++mystack; + ++st; + break; + case 'x': // gint64 + case 't': // guint64 + case 'd': // gdouble + *(uint64_t*)mystack = *(uint64_t*)st; + st+=2; mystack+=1; + break; + case '{': + case '(': ++inblocks; break; + case '}': + case ')': --inblocks; break; + case 'a': state = 1; break; // GVariantBuilder* or GVariantIter** + case 'm': state = 2; break; // maybe types + case '@': state = 3; break; // GVariant* of type [type] + case '^': state = 4; break; // pointer value + case '&': break; // pointer: do nothing + } + break; + case 1: // Arrays + switch(*p) { + case '{': + case '(': ++tmp; break; + case '}': + case ')': --tmp; break; + } + if (*p == 'a') break; + if (tmp == 0) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } + break; + case 2: // Maybe-types + switch(*p) { + case 'b': // gboolean + case 'y': // guchar + case 'n': // gint16 + case 'q': // guint16 + case 'i': // gint32 + case 'u': // guint32 + case 'h': // gint32 + case 'x': // gint64 + case 't': // guint64 + case 'd': // gdouble + case '{': + case '}': + case '(': + case ')': + // Add a gboolean or gboolean*, no char increment + *mystack = *st; + ++mystack; + ++st; + --p; + state = 0; + break; + case 'a': // GVariantBuilder* or GVariantIter** + case 's': // const gchar* + case 'o': + case 'g': + case 'v': // GVariant* + case '@': // GVariant* of type [type] + case '*': // GVariant* of any type + case '?': // GVariant* of basic type + case 'r': // GVariant* of tuple type + case '&': // pointer + case '^': // pointer value + // Just maybe-NULL + --p; + state = 0; + break; + + default: // Default to add a gboolean & reinit state? + *mystack = *st; + ++mystack; + ++st; + --p; + state = 0; + } + break; + case 3: // GVariant* + switch(*p) { + case '{': + case '(': ++tmp; break; + case '}': + case ')': --tmp; break; + case 'a': // GVariantBuilder* or GVariantIter** + do { ++p; } while(*p == 'a'); // Use next character which is not an array (array definition) + switch(*p) { + case '{': + case '(': ++tmp; break; + case '}': + case ')': --tmp; break; + } + break; + } + if (tmp == 0) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } + break; + case 4: // ^ + if (*p == 'a') state = 5; + else if (*p == '&') state = 8; + else state = 0; //??? + break; + case 5: // ^a + if ((*p == 's') || (*p == 'o') || (*p == 'y')) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else if (*p == '&') state = 6; + else if (*p == 'a') state = 7; + else state = 0; //??? + break; + case 6: // ^a& + if ((*p == 's') || (*p == 'o')) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else if (*p == 'a') state = 7; + else state = 0; //??? + break; + case 7: // ^aa / ^a&a + if (*p == 'y') { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else state = 0; //??? + case 8: // ^& + if (*p == 'a') state = 9; + else state = 0; //??? + case 9: // ^&a + if (*p == 'y') { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else state = 0; //??? + } + ++p; + } while (*p && (inblocks || state)); +} + +void myStackAlignW32(const char* fmt, uint32_t* st, uint64_t* mystack) +{ + // loop... + const wchar_t* p = (const wchar_t*)fmt; + int state = 0; + double d; + while(*p) + { + switch(state) { + case 0: + switch(*p) { + case '%': state = 1; ++p; break; + default: + ++p; + } + break; + case 1: // normal + case 2: // l + case 3: // ll + case 4: // L + switch(*p) { + case '%': state = 0; ++p; break; //%% = back to 0 + case 'l': ++state; if (state>3) state=3; ++p; break; + case 'z': state = 2; ++p; break; + case 'L': state = 4; ++p; break; + case 'a': + case 'A': + case 'e': + case 'E': + case 'g': + case 'G': + case 'F': + case 'f': state += 10; break; // float + case 'd': + case 'i': + case 'o': state += 20; break; // int + case 'x': + case 'X': + case 'u': state += 40; break; // unsigned + case 'h': ++p; break; // ignored... + case '\'': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case '+': + case '-': ++p; break; // formating, ignored + case 'm': state = 0; ++p; break; // no argument + case 'n': + case 'p': + case 'S': + case 's': state = 30; break; // pointers + case '$': ++p; break; // should issue a warning, it's not handled... + case '*': *(mystack++) = *(st++); ++p; break; //fetch an int in the stack + case ' ': state=0; ++p; break; + default: + state=20; // other stuff, put an int... + } + break; + case 11: //double + case 12: //%lg, still double + case 13: //%llg, still double + case 23: // 64bits int + case 43: // 64bits uint + *(uint64_t*)mystack = *(uint64_t*)st; + st+=2; mystack+=1; + state = 0; + ++p; + break; + case 22: // long int + *(int64_t*)mystack = from_long(*(long_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 42: // long uint + *(uint64_t*)mystack = from_ulong(*(ulong_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 14: //%LG long double + #ifdef HAVE_LD80BITS + memcpy(mystack, st, 10); + st+=3; mystack+=2; + #else + LD2D((void*)st, &d); + *(long double*)mystack = (long double)d; + st+=3; mystack+=2; + #endif + state = 0; + ++p; + break; + case 30: //pointer + *(uintptr_t*)mystack = from_ptr(*st); + st++; mystack+=1; + state = 0; + ++p; + break; + case 20: // fallback + case 40: + case 21: + case 24: // normal int / pointer + *mystack = *st; + ++mystack; + ++st; + state = 0; + ++p; + break; + default: + // whattt? + state = 0; + } + } +} + + +#if 0 + +typedef struct __attribute__((packed)) { + unsigned char *body_data; + long body_storage; + long body_fill; + long body_returned; + + + int *lacing_vals; + int64_t *granule_vals; + long lacing_storage; + long lacing_fill; + long lacing_packet; + long lacing_returned; + + unsigned char header[282]; + int header_fill __attribute__ ((aligned (4))); + + int e_o_s; + int b_o_s; + long serialno; + long pageno; + int64_t packetno; + int64_t granulepos; + +} ogg_stream_state_x64; + +typedef struct __attribute__((packed)) vorbis_dsp_state_x64 { + int analysisp; + void *vi; //vorbis_info + + float **pcm; + float **pcmret; + int pcm_storage; + int pcm_current; + int pcm_returned; + + int preextrapolate; + int eofflag; + + long lW; + long W; + long nW; + long centerW; + + int64_t granulepos; + int64_t sequence; + + int64_t glue_bits; + int64_t time_bits; + int64_t floor_bits; + int64_t res_bits; + + void *backend_state; +} vorbis_dsp_state_x64; + +typedef struct __attribute__((packed)) { + long endbyte; + int endbit; + + unsigned char *buffer; + unsigned char *ptr; + long storage; +} oggpack_buffer_x64; + +typedef struct __attribute__((packed)) vorbis_block_x64 { + + float **pcm; + oggpack_buffer_x64 opb; + + long lW; + long W; + long nW; + int pcmend; + int mode; + + int eofflag; + int64_t granulepos; + int64_t sequence; + void *vd; + + void *localstore; + long localtop; + long localalloc; + long totaluse; + void *reap; + + long glue_bits; + long time_bits; + long floor_bits; + long res_bits; + + void *internal; + +} vorbis_block_x64; + +typedef struct __attribute__((packed)) OggVorbis_x64 { + void *datasource; /* Pointer to a FILE *, etc. */ + int seekable; + int64_t offset; + int64_t end; + ogg_sync_state oy; + + /* If the FILE handle isn't seekable (eg, a pipe), only the current + stream appears */ + int links; + int64_t *offsets; + int64_t *dataoffsets; + long *serialnos; + int64_t *pcmlengths; /* overloaded to maintain binary + compatibility; x2 size, stores both + beginning and end values */ + void *vi; //vorbis_info + void *vc; //vorbis_comment + + /* Decoding working state local storage */ + int64_t pcm_offset; + int ready_state; + long current_serialno; + int current_link; + + double bittrack; + double samptrack; + + ogg_stream_state_x64 os; /* take physical pages, weld into a logical + stream of packets */ + vorbis_dsp_state_x64 vd; /* central working state for the packet->PCM decoder */ + vorbis_block_x64 vb; /* local working space for packet->PCM decode */ + + ov_callbacks callbacks; + +} OggVorbis_x64; + +#define TRANSFERT \ +GO(datasource) \ +GO(seekable) \ +GO(offset) \ +GO(end) \ +GOM(oy, sizeof(ogg_sync_state)) \ +GO(links) \ +GO(offsets) \ +GO(dataoffsets) \ +GO(serialnos) \ +GO(pcmlengths) \ +GO(vi) \ +GO(vc) \ +GO(pcm_offset) \ +GO(ready_state) \ +GO(current_serialno) \ +GO(current_link) \ +GOM(bittrack, 16) \ +GO(os.body_data) \ +GO(os.body_storage) \ +GO(os.body_fill) \ +GO(os.body_returned) \ +GO(os.lacing_vals) \ +GO(os.granule_vals) \ +GO(os.lacing_storage) \ +GO(os.lacing_fill) \ +GO(os.lacing_packet) \ +GO(os.lacing_returned) \ +GOM(os.header, 282) \ +GO(os.header_fill) \ +GO(os.e_o_s) \ +GO(os.b_o_s) \ +GO(os.serialno) \ +GO(os.pageno) \ +GO(os.packetno) \ +GO(os.granulepos) \ +GO(vd.analysisp) \ +GO(vd.vi) \ +GO(vd.pcm) \ +GO(vd.pcmret) \ +GO(vd.pcm_storage) \ +GO(vd.pcm_current) \ +GO(vd.pcm_returned) \ +GO(vd.preextrapolate) \ +GO(vd.eofflag) \ +GO(vd.lW) \ +GO(vd.W) \ +GO(vd.nW) \ +GO(vd.centerW) \ +GO(vd.granulepos) \ +GO(vd.sequence) \ +GO(vd.glue_bits) \ +GO(vd.time_bits) \ +GO(vd.floor_bits) \ +GO(vd.res_bits) \ +GO(vd.backend_state) \ +GO(vb.pcm) \ +GO(vb.opb.endbyte) \ +GO(vb.opb.endbit) \ +GO(vb.opb.buffer) \ +GO(vb.opb.ptr) \ +GO(vb.opb.storage) \ +GO(vb.lW) \ +GO(vb.W) \ +GO(vb.nW) \ +GO(vb.pcmend) \ +GO(vb.mode) \ +GO(vb.eofflag) \ +GO(vb.granulepos) \ +GO(vb.sequence) \ +GO(vb.localstore) \ +GO(vb.localtop) \ +GO(vb.localalloc) \ +GO(vb.totaluse) \ +GO(vb.reap) \ +GO(vb.glue_bits) \ +GO(vb.time_bits) \ +GO(vb.floor_bits) \ +GO(vb.res_bits) \ +GO(vb.internal) \ +GOM(callbacks, sizeof(ov_callbacks)) + +void AlignOggVorbis(void* dest, void* source) +{ + // Arm -> x64 + OggVorbis_x64* src = (OggVorbis_x64*)source; + OggVorbis* dst = (OggVorbis*)dest; + + #define GO(A) dst->A = src->A; + #define GOM(A, S) memcpy(&dst->A, &src->A, S); + TRANSFERT + #undef GO + #undef GOM + dst->vb.vd = (src->vb.vd == &src->vd)?&dst->vd:(vorbis_dsp_state*)src->vb.vd; +} +void UnalignOggVorbis(void* dest, void* source) +{ + // x64 -> Arm + OggVorbis_x64* dst = (OggVorbis_x64*)dest; + OggVorbis* src = (OggVorbis*)source; + + #define GO(A) dst->A = src->A; + #define GOM(A, S) memcpy(&dst->A, &src->A, S); + TRANSFERT + #undef GO + #undef GOM + dst->vb.vd = (src->vb.vd == &src->vd)?&dst->vd:(vorbis_dsp_state_x64*)src->vb.vd; +} +#undef TRANSFERT + +#define TRANSFERT \ +GO(analysisp) \ +GO(vi) \ +GO(pcm) \ +GO(pcmret) \ +GO(pcm_storage) \ +GO(pcm_current) \ +GO(pcm_returned) \ +GO(preextrapolate) \ +GO(eofflag) \ +GO(lW) \ +GO(W) \ +GO(nW) \ +GO(centerW) \ +GO(granulepos) \ +GO(sequence) \ +GO(glue_bits) \ +GO(time_bits) \ +GO(floor_bits) \ +GO(res_bits) \ +GO(backend_state) + +void UnalignVorbisDspState(void* dest, void* source) +{ + // Arm -> x64 + #define GO(A) ((vorbis_dsp_state_x64*)dest)->A = ((vorbis_dsp_state*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_dsp_state_x64*)dest)->A, &((vorbis_dsp_state*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +void AlignVorbisDspState(void* dest, void* source) +{ + // x64 -> Arm + #define GO(A) ((vorbis_dsp_state*)dest)->A = ((vorbis_dsp_state_x64*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_dsp_state*)dest)->A, &((vorbis_dsp_state_x64*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +#undef TRANSFERT + +#define TRANSFERT \ +GO(pcm) \ +GO(opb.endbyte) \ +GO(opb.endbit) \ +GO(opb.buffer) \ +GO(opb.ptr) \ +GO(opb.storage) \ +GO(lW) \ +GO(W) \ +GO(nW) \ +GO(pcmend) \ +GO(mode) \ +GO(eofflag) \ +GO(granulepos) \ +GO(sequence) \ +GO(vd) \ +GO(localstore) \ +GO(localtop) \ +GO(localalloc) \ +GO(totaluse) \ +GO(reap) \ +GO(glue_bits) \ +GO(time_bits) \ +GO(floor_bits) \ +GO(res_bits) \ +GO(internal) + +void UnalignVorbisBlock(void* dest, void* source) +{ + // Arm -> x64 + #define GO(A) ((vorbis_block_x64*)dest)->A = ((vorbis_block*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_block_x64*)dest)->A, &((vorbis_block*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +void AlignVorbisBlock(void* dest, void* source) +{ + // x64 -> Arm + #define GO(A) ((vorbis_block*)dest)->A = ((vorbis_block_x64*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_block*)dest)->A, &((vorbis_block_x64*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} + +#undef TRANSFERT + +typedef union __attribute__((packed)) x64_epoll_data { + void *ptr; + int fd; + uint32_t u32; + uint64_t u64; +} x64_epoll_data_t; + +struct __attribute__((packed)) x64_epoll_event { + uint32_t events; + x64_epoll_data_t data; +}; +// Arm -> x64 +void UnalignEpollEvent(void* dest, void* source, int nbr) +{ + struct x64_epoll_event *x64_struct = (struct x64_epoll_event*)dest; + struct epoll_event *arm_struct = (struct epoll_event*)source; + while(nbr) { + x64_struct->events = arm_struct->events; + x64_struct->data.u64 = arm_struct->data.u64; + ++x64_struct; + ++arm_struct; + --nbr; + } +} + +// x64 -> Arm +void AlignEpollEvent(void* dest, void* source, int nbr) +{ + struct x64_epoll_event *x64_struct = (struct x64_epoll_event*)source; + struct epoll_event *arm_struct = (struct epoll_event*)dest; + while(nbr) { + arm_struct->events = x64_struct->events; + arm_struct->data.u64 = x64_struct->data.u64; + ++x64_struct; + ++arm_struct; + --nbr; + } +} + +typedef struct __attribute__((packed)) x64_SMPEG_Info_s { + int has_audio; + int has_video; + int width; + int height; + int current_frame; + double current_fps; + char audio_string[80]; + int audio_current_frame; + uint32_t current_offset; + uint32_t total_size; + double current_time; + double total_time; +} x64_SMPEG_Info_t; + +#define TRANSFERT \ +GO(has_audio) \ +GO(has_video) \ +GO(width) \ +GO(height) \ +GO(current_frame) \ +GO(current_fps) \ +GOM(audio_string, 80) \ +GO(audio_current_frame) \ +GO(current_offset) \ +GO(total_size) \ +GO(current_time) \ +GO(total_time) + + +// Arm -> x64 +void UnalignSmpegInfo(void* dest, void* source) +{ + #define GO(A) ((x64_SMPEG_Info_t*)dest)->A = ((my_SMPEG_Info_t*)source)->A; + #define GOM(A, S) memcpy(&((x64_SMPEG_Info_t*)dest)->A, &((my_SMPEG_Info_t*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +// x64 -> Arm +void AlignSmpegInfo(void* dest, void* source) +{ + #define GO(A) ((my_SMPEG_Info_t*)dest)->A = ((x64_SMPEG_Info_t*)source)->A; + #define GOM(A, S) memcpy(&((my_SMPEG_Info_t*)dest)->A, &((x64_SMPEG_Info_t*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +#undef TRANSFERT + +#define TRANSFERT \ +GOV(fts_cycle) \ +GOV(fts_parent) \ +GOV(fts_link) \ +GO(fts_number) \ +GO(fts_pointer) \ +GO(fts_accpath) \ +GO(fts_path) \ +GO(fts_errno) \ +GO(fts_symfd) \ +GO(fts_pathlen) \ +GO(fts_namelen) \ +GO(fts_ino) \ +GO(fts_dev) \ +GO(fts_nlink) \ +GO(fts_level) \ +GO(fts_info) \ +GO(fts_flags) \ +GO(fts_instr) \ +GO(fts_statp) \ +GOM(fts_name, sizeof(void*)) + +// Arm -> x64 +void UnalignFTSENT(void* dest, void* source) +{ + #define GO(A) ((x64_ftsent_t*)dest)->A = ((FTSENT*)source)->A; + #define GOV(A) ((x64_ftsent_t*)dest)->A = (void*)((FTSENT*)source)->A; + #define GOM(A, S) memcpy(&((x64_ftsent_t*)dest)->A, &((FTSENT*)source)->A, S); + TRANSFERT + #undef GO + #undef GOV + #undef GOM +} +// x64 -> Arm +void AlignFTSENT(void* dest, void* source) +{ + #define GO(A) ((FTSENT*)dest)->A = ((x64_ftsent_t*)source)->A; + #define GOV(A) ((FTSENT*)dest)->A = (void*)((x64_ftsent_t*)source)->A; + #define GOM(A, S) memcpy(&((FTSENT*)dest)->A, &((x64_ftsent_t*)source)->A, S); + TRANSFERT + #undef GO + #undef GOV + #undef GOM +} +#undef TRANSFERT + +void alignNGValue(my_GValue_t* v, void* value, int n) +{ + while(n) { + v->g_type = *(int*)value; + memcpy(v->data, value+4, 2*sizeof(double)); + ++v; + value+=4+2*sizeof(double); + --n; + } +} +void unalignNGValue(void* value, my_GValue_t* v, int n) +{ + while(n) { + *(int*)value = v->g_type; + memcpy(value+4, v->data, 2*sizeof(double)); + ++v; + value+=4+2*sizeof(double); + --n; + } +} + +#endif \ No newline at end of file diff --git a/src/libtools/myalign64_32.c b/src/libtools/myalign64_32.c new file mode 100755 index 00000000..8f11c5b2 --- /dev/null +++ b/src/libtools/myalign64_32.c @@ -0,0 +1,104 @@ +#include +#include +#include +#include +#include +#include + +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "box32.h" + +void UnalignStat64_32(const void* source, void* dest) +{ + struct i386_stat64 *i386st = (struct i386_stat64*)dest; + struct stat *st = (struct stat*) source; + + memset(i386st->__pad0, 0, sizeof(i386st->__pad0)); + memset(i386st->__pad3, 0, sizeof(i386st->__pad3)); + i386st->st_dev = st->st_dev; + i386st->__st_ino = st->st_ino; + i386st->st_mode = st->st_mode; + i386st->st_nlink = st->st_nlink; + i386st->st_uid = st->st_uid; + i386st->st_gid = st->st_gid; + i386st->st_rdev = st->st_rdev; + i386st->st_size = st->st_size; + i386st->st_blksize = st->st_blksize; + i386st->st_blocks = st->st_blocks; + i386st->st_atime = st->st_atime; + i386st->st_atime_nsec = st->st_atime_nsec; + i386st->st_mtime = st->st_mtime; + i386st->st_mtime_nsec = st->st_mtime_nsec; + i386st->st_ctime = st->st_ctime; + i386st->st_ctime_nsec = st->st_ctime_nsec; + i386st->st_ino = st->st_ino; +} + +struct native_fsid { + int val[2]; +}; + +struct native_statfs64 { + uint32_t f_type; + uint32_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + struct native_fsid f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_flags; + uint32_t f_spare[4]; +}; // f_flags is not always defined, but then f_spare is [5] in that case + + +void UnalignStatFS64_32(const void* source, void* dest) +{ + struct i386_statfs64 *i386st = (struct i386_statfs64*)dest; + struct native_statfs64 *st = (struct native_statfs64*) source; + + i386st->f_type = st->f_type; + i386st->f_bsize = st->f_bsize; + i386st->f_blocks = st->f_blocks; + i386st->f_bfree = st->f_bfree; + i386st->f_bavail = st->f_bavail; + i386st->f_files = st->f_files; + i386st->f_ffree = st->f_ffree; + memcpy(&i386st->f_fsid, &st->f_fsid, sizeof(i386st->f_fsid)); + i386st->f_namelen = st->f_namelen; + i386st->f_frsize = st->f_frsize; + i386st->f_flags = st->f_flags; + i386st->f_spare[0] = st->f_spare[0]; + i386st->f_spare[1] = st->f_spare[1]; + i386st->f_spare[2] = st->f_spare[2]; + i386st->f_spare[3] = st->f_spare[3]; +} +#if 0 +#define TRANSFERT \ +GO(l_type) \ +GO(l_whence) \ +GO(l_start) \ +GO(l_len) \ +GO(l_pid) + +// Arm -> x64 +void UnalignFlock64_32(void* dest, void* source) +{ + #define GO(A) ((x64_flock64_t*)dest)->A = ((my_flock64_t*)source)->A; + TRANSFERT + #undef GO +} + +// x64 -> Arm +void AlignFlock64_32(void* dest, void* source) +{ + #define GO(A) ((my_flock64_t*)dest)->A = ((x64_flock64_t*)source)->A; + TRANSFERT + #undef GO +} +#undef TRANSFERT +#endif \ No newline at end of file diff --git a/src/libtools/signal32.c b/src/libtools/signal32.c new file mode 100644 index 00000000..54d68143 --- /dev/null +++ b/src/libtools/signal32.c @@ -0,0 +1,842 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef ANDROID +#include +#endif + +#include "box32context.h" +#include "debug.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "signals.h" +#include "box64stack.h" +#include "dynarec.h" +#include "callback.h" +#include "x64run.h" +#include "elfloader.h" +#include "threads.h" +#include "emu/x87emu_private.h" +#include "custommem.h" +#ifdef DYNAREC +#include "dynablock.h" +#include "../dynarec/dynablock_private.h" +#include "dynarec_native.h" +#endif + + +/* Definitions taken from the kernel headers. */ +enum +{ + I386_GS = 0, +# define I386_GS I386_GS + I386_FS, +# define I386_FS I386_FS + I386_ES, +# define I386_ES I386_ES + I386_DS, +# define I386_DS I386_DS + I386_EDI, +# define I386_EDI I386_EDI + I386_ESI, +# define I386_ESI I386_ESI + I386_EBP, +# define I386_EBP I386_EBP + I386_ESP, +# define I386_ESP I386_ESP + I386_EBX, +# define I386_EBX I386_EBX + I386_EDX, +# define I386_EDX I386_EDX + I386_ECX, +# define I386_ECX I386_ECX + I386_EAX, +# define I386_EAX I386_EAX + I386_TRAPNO, +# define I386_TRAPNO I386_TRAPNO + I386_ERR, +# define I386_ERR I386_ERR + I386_EIP, +# define I386_EIP I386_EIP + I386_CS, +# define I386_CS I386_CS + I386_EFL, +# define I386_EFL I386_EFL + I386_UESP, +# define I386_UESP I386_UESP + I386_SS +# define I386_SS I386_SS +}; + +typedef uint32_t i386_gregset_t[19]; +struct i386_fpreg +{ + uint16_t significand[4]; + uint16_t exponent; +}__attribute__((packed)); + +struct i386_fpxreg +{ + unsigned short significand[4]; + unsigned short exponent; + unsigned short padding[3]; +}__attribute__((packed)); + +struct i386_xmmreg +{ + uint32_t element[4]; +}__attribute__((packed)); + +struct i386_fpstate +{ + /* Regular FPU environment. */ + uint32_t cw; + uint32_t sw; + uint32_t tag; + uint32_t ipoff; + uint32_t cssel; + uint32_t dataoff; + uint32_t datasel; + struct i386_fpreg _st[8]; + uint32_t status_magic; + /* FXSR FPU environment. */ + uint32_t _fxsr_env[6]; + uint32_t mxcsr; + uint32_t reserved; + struct i386_fpxreg _fxsr_st[8]; + struct i386_xmmreg _xmm[8]; + uint32_t padding[56]; +}__attribute__((packed)); + +typedef struct i386_fpstate *i386_fpregset_t; + +static void save_fpreg(x64emu_t* emu, struct i386_fpstate* state) +{ + emu->sw.f.F87_TOP = emu->top&7; + state->sw = emu->sw.x16; + state->cw = emu->cw.x16; + // save SSE and MMX regs + fpu_fxsave32(emu, &state->_fxsr_env); +} +static void load_fpreg(x64emu_t* emu, struct i386_fpstate* state) +{ + // copy SSE and MMX regs + fpu_fxrstor32(emu, &state->_fxsr_env); + emu->cw.x16 = state->cw; + emu->sw.x16 = state->sw; + emu->top = emu->sw.f.F87_TOP&7; +} + +typedef struct + { + ptr_t ss_sp; + int ss_flags; + long_t ss_size; + } i386_stack_t; + +typedef struct x64_stack_s +{ + void *ss_sp; + int ss_flags; + size_t ss_size; +} x64_stack_t; + + +/* +another way to see the sigcontext +struct sigcontext +{ + unsigned short gs, __gsh; + unsigned short fs, __fsh; + unsigned short es, __esh; + unsigned short ds, __dsh; + unsigned long edi; + unsigned long esi; + unsigned long ebp; + unsigned long esp; + unsigned long ebx; + unsigned long edx; + unsigned long ecx; + unsigned long eax; + unsigned long trapno; + unsigned long err; + unsigned long eip; + unsigned short cs, __csh; + unsigned long eflags; + unsigned long esp_at_signal; + unsigned short ss, __ssh; + struct _fpstate * fpstate; + unsigned long oldmask; + unsigned long cr2; +}; +*/ +typedef struct + { + i386_gregset_t gregs; + ptr_t fpregs; //i386_fpregset_t + uint32_t oldmask; + uint32_t cr2; + } i386_mcontext_t; + +// /!\ signal sig_set is different than glibc __sig_set +#define _NSIG_WORDS (64 / 32) +typedef unsigned long i386_old_sigset_t; +typedef struct { + unsigned long sig[_NSIG_WORDS]; +} i386_sigset_t; + +struct i386_xsave_hdr_struct { + uint64_t xstate_bv; + uint64_t reserved1[2]; + uint64_t reserved2[5]; +}; + +struct i386_xstate { + /* + * Applications need to refer to fpstate through fpstate pointer + * in sigcontext. Not here directly. + */ + struct i386_fpstate fpstate; + struct i386_xsave_hdr_struct xsave_hdr; + /* new processor state extensions will go here */ +} __attribute__ ((aligned (64))); + +struct i386_xstate_cntxt { + ptr_t xstate; //struct i386_xstate *xstate; + uint32_t size; + uint32_t lmask; + uint32_t hmask; +}; + +typedef struct i386_ucontext_s +{ + uint32_t uc_flags; + ptr_t uc_link; //struct i386_ucontext_s *uc_link; + i386_stack_t uc_stack; + i386_mcontext_t uc_mcontext; + i386_sigset_t uc_sigmask; + /* Allow for uc_sigmask growth. Glibc uses a 1024-bit sigset_t. */ + int unused[32 - (sizeof (sigset_t) / sizeof (int))]; + //struct i386_xstate_cntxt uc_xstate; + struct i386_xstate xstate; +} i386_ucontext_t; + +typedef struct i386_sigframe_s { + ptr_t pretcode; // pointer to retcode + int sig; + i386_mcontext_t cpustate; + struct i386_xstate fpstate; + ptr_t extramask[64-1]; + char retcode[8]; +} i386_sigframe_t; + +struct kernel_sigaction { + void (*k_sa_handler) (int); + unsigned long sa_flags; + void (*sa_restorer) (void); + unsigned long sa_mask; + unsigned long sa_mask2; +}; +#ifdef DYNAREC +uintptr_t getX64Address(dynablock_t* db, uintptr_t arm_addr); +#endif + +x64_stack_t* sigstack_getstack(); +int my_sigaltstack(x64emu_t* emu, const x64_stack_t* ss, x64_stack_t* oss); +EXPORT int my32_sigaltstack(x64emu_t* emu, const i386_stack_t* ss, i386_stack_t* oss) +{ + x64_stack_t ss_ = {0}; + x64_stack_t oss_ = {0}; + if(ss) { + ss_.ss_flags = ss->ss_flags; + ss_.ss_sp = from_ptrv(ss->ss_sp); + ss_.ss_size = ss->ss_size; + } + int ret = my_sigaltstack(emu, ss?(&ss_):NULL, oss?(&oss_):NULL); + if(!ret && oss) { + oss->ss_flags = oss_.ss_flags; + oss->ss_sp = to_ptrv(oss_.ss_sp); + oss->ss_size = oss_.ss_size; + } + return ret; +} + + +uint32_t RunFunctionHandler32(int* exit, int dynarec, i386_ucontext_t* sigcontext, ptr_t fnc, int nargs, ...) +{ + if(fnc==0 || fnc==1) { + va_list va; + va_start (va, nargs); + int sig = va_arg(va, int); + va_end (va); + printf_log(LOG_NONE, "%04d|BOX32: Warning, calling Signal %d function handler %s\n", GetTID(), sig, fnc?"SIG_IGN":"SIG_DFL"); + if(fnc==0) { + printf_log(LOG_NONE, "Unhandled signal caught, aborting\n"); + abort(); + } + return 0; + } +#ifdef HAVE_TRACE + uintptr_t old_start = trace_start, old_end = trace_end; +#if 0 + trace_start = 0; trace_end = 1; // disabling trace, globably for now... +#endif +#endif +#ifndef USE_CUSTOM_MEM + // because a signal can interupt a malloc-like function + // Dynarec cannot be used in signal handling unless custom malloc is used + dynarec = 0; +#endif + + x64emu_t *emu = thread_get_emu(); + #ifdef DYNAREC + if(box64_dynarec_test) + emu->test.test = 0; + #endif + + /*SetFS(emu, default_fs);*/ + for (int i=0; i<6; ++i) + emu->segs_serial[i] = 0; + + int align = nargs&1; + + R_ESP -= nargs * sizeof(ptr_t); + + uint32_t *p = (uint32_t*)from_ptrv(R_ESP); + + va_list va; + va_start (va, nargs); + for (int i=0; iflags.quitonlongjmp; + emu->flags.quitonlongjmp = 2; + int old_cs = R_CS; + R_CS = 0x23; + + emu->eflags.x64 &= ~(1<flags.longjmp) + R_ESP+=nargs*sizeof(ptr_t); + + if(!emu->flags.longjmp && R_CS==0x23) + R_CS = old_cs; + + emu->flags.quitonlongjmp = oldquitonlongjmp; + + #ifdef DYNAREC + if(box64_dynarec_test) { + emu->test.test = 0; + emu->test.clean = 0; + } + #endif + + if(emu->flags.longjmp) { + // longjmp inside signal handler, lets grab all relevent value and do the actual longjmp in the signal handler + emu->flags.longjmp = 0; + if(sigcontext) { + sigcontext->uc_mcontext.gregs[I386_EAX] = R_EAX; + sigcontext->uc_mcontext.gregs[I386_ECX] = R_ECX; + sigcontext->uc_mcontext.gregs[I386_EDX] = R_EDX; + sigcontext->uc_mcontext.gregs[I386_EDI] = R_EDI; + sigcontext->uc_mcontext.gregs[I386_ESI] = R_ESI; + sigcontext->uc_mcontext.gregs[I386_EBP] = R_EBP; + sigcontext->uc_mcontext.gregs[I386_ESP] = R_ESP; + sigcontext->uc_mcontext.gregs[I386_EBX] = R_EBX; + sigcontext->uc_mcontext.gregs[I386_EIP] = R_EIP; + // flags + sigcontext->uc_mcontext.gregs[I386_EFL] = emu->eflags.x64; + // get segments + sigcontext->uc_mcontext.gregs[I386_CS] = R_CS; + sigcontext->uc_mcontext.gregs[I386_DS] = R_DS; + sigcontext->uc_mcontext.gregs[I386_ES] = R_ES; + sigcontext->uc_mcontext.gregs[I386_SS] = R_SS; + sigcontext->uc_mcontext.gregs[I386_FS] = R_FS; + sigcontext->uc_mcontext.gregs[I386_GS] = R_GS; + } else { + printf_log(LOG_NONE, "Warning, longjmp in signal but no sigcontext to change\n"); + } + } + if(exit) + *exit = emu->exit; + + uint32_t ret = R_EAX; + +#ifdef HAVE_TRACE + trace_start = old_start; trace_end = old_end; +#endif + + return ret; +} + +#define is_memprot_locked (1<<1) +#define is_dyndump_locked (1<<8) +void my_sigactionhandler_oldcode_32(int32_t sig, int simple, siginfo_t* info, void * ucntx, int* old_code, void* cur_db) +{ + int Locks = unlockMutex(); + + printf_log(LOG_DEBUG, "Sigactionhanlder for signal #%d called (jump to %p/%s)\n", sig, (void*)my_context->signals[sig], GetNativeName((void*)my_context->signals[sig])); + + uintptr_t restorer = my_context->restorer[sig]; + // get that actual ESP first! + x64emu_t *emu = thread_get_emu(); + uintptr_t frame = R_RSP; +#if defined(DYNAREC) +#if defined(ARM64) + dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc); + ucontext_t *p = (ucontext_t *)ucntx; + void* pc = NULL; + if(p) { + pc = (void*)p->uc_mcontext.pc; + if(db) + frame = (uintptr_t)p->uc_mcontext.regs[10+_SP]; + } +#elif defined(LA64) + dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc); + ucontext_t *p = (ucontext_t *)ucntx; + void* pc = NULL; + if(p) { + pc = (void*)p->uc_mcontext.__pc; + if(db) + frame = (uintptr_t)p->uc_mcontext.__gregs[12+_SP]; + } +#elif defined(RV64) + dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc); + ucontext_t *p = (ucontext_t *)ucntx; + void* pc = NULL; + if(p) { + pc = (void*)p->uc_mcontext.__gregs[0]; + if(db) + frame = (uintptr_t)p->uc_mcontext.__gregs[16+_SP]; + } +#else +#error Unsupported architecture +#endif +#else + (void)ucntx; (void)cur_db; +#endif + // setup libc context stack frame, on caller stack + frame = frame&~15; + + // stack tracking + x64_stack_t *new_ss = my_context->onstack[sig]?sigstack_getstack():NULL; + int used_stack = 0; + if(new_ss) { + if(new_ss->ss_flags == SS_ONSTACK) { // already using it! + frame = ((uintptr_t)emu->regs[_SP].q[0] - 128) & ~0x0f; + } else { + frame = (uintptr_t)(((uintptr_t)new_ss->ss_sp + new_ss->ss_size - 16) & ~0x0f); + used_stack = 1; + new_ss->ss_flags = SS_ONSTACK; + } + } else { + frame -= 0x200; // redzone + } + + // TODO: do I need to really setup 2 stack frame? That doesn't seems right! + // setup stack frame + frame -= 512+64+16*16; + void* xstate = (void*)frame; + frame -= sizeof(siginfo_t); + siginfo_t* info2 = (siginfo_t*)frame; + memcpy(info2, info, sizeof(siginfo_t)); + // try to fill some sigcontext.... + frame -= sizeof(i386_ucontext_t); + i386_ucontext_t *sigcontext = (i386_ucontext_t*)frame; + // get general register + sigcontext->uc_mcontext.gregs[I386_EAX] = R_EAX; + sigcontext->uc_mcontext.gregs[I386_ECX] = R_ECX; + sigcontext->uc_mcontext.gregs[I386_EDX] = R_EDX; + sigcontext->uc_mcontext.gregs[I386_EDI] = R_EDI; + sigcontext->uc_mcontext.gregs[I386_ESI] = R_ESI; + sigcontext->uc_mcontext.gregs[I386_EBP] = R_EBP; + sigcontext->uc_mcontext.gregs[I386_ESP] = R_ESP; + sigcontext->uc_mcontext.gregs[I386_EBX] = R_EBX; + sigcontext->uc_mcontext.gregs[I386_EIP] = R_EIP;//emu->old_ip; // old_ip should be more accurate as the "current" IP, but it's not always up-to-date + // flags + sigcontext->uc_mcontext.gregs[I386_EFL] = emu->eflags.x64; + // get segments + sigcontext->uc_mcontext.gregs[I386_CS] = R_CS; + sigcontext->uc_mcontext.gregs[I386_DS] = R_DS; + sigcontext->uc_mcontext.gregs[I386_ES] = R_ES; + sigcontext->uc_mcontext.gregs[I386_SS] = R_SS; + sigcontext->uc_mcontext.gregs[I386_FS] = R_FS; + sigcontext->uc_mcontext.gregs[I386_GS] = R_GS; +#if defined(DYNAREC) +#if defined(ARM64) + if(db && p) { + sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.regs[10]; + sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.regs[11]; + sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.regs[12]; + sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.regs[13]; + sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.regs[14]; + sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.regs[15]; + sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.regs[16]; + sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.regs[17]; + sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); + } +#elif defined(LA64) + if(db && p) { + sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.__gregs[12]; + sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.__gregs[13]; + sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.__gregs[14]; + sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.__gregs[15]; + sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.__gregs[16]; + sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.__gregs[17]; + sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.__gregs[18]; + sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.__gregs[19]; + sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); + } +#elif defined(RV64) + if(db && p) { + sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.__gregs[16]; + sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.__gregs[17]; + sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.__gregs[18]; + sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.__gregs[19]; + sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.__gregs[20]; + sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.__gregs[21]; + sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.__gregs[22]; + sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.__gregs[23]; + sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); + } +#else +#error Unsupported architecture +#endif +#endif + // get FloatPoint status + sigcontext->uc_mcontext.fpregs = to_ptrv(xstate);//(struct x64_libc_fpstate*)&sigcontext->xstate; + fpu_xsave_mask(emu, xstate, 1, 0b111); + memcpy(&sigcontext->xstate, xstate, sizeof(sigcontext->xstate)); + ((struct i386_fpstate*)xstate)->status_magic = 0x46505853; // magic number to signal an XSTATE type of fpregs + // get signal mask + + if(new_ss) { + sigcontext->uc_stack.ss_sp = to_ptrv(new_ss->ss_sp); + sigcontext->uc_stack.ss_size = new_ss->ss_size; + sigcontext->uc_stack.ss_flags = new_ss->ss_flags; + } else + sigcontext->uc_stack.ss_flags = SS_DISABLE; + // Try to guess some X64_TRAPNO + /* + TRAP_x86_DIVIDE = 0, // Division by zero exception + TRAP_x86_TRCTRAP = 1, // Single-step exception + TRAP_x86_NMI = 2, // NMI interrupt + TRAP_x86_BPTFLT = 3, // Breakpoint exception + TRAP_x86_OFLOW = 4, // Overflow exception + TRAP_x86_BOUND = 5, // Bound range exception + TRAP_x86_PRIVINFLT = 6, // Invalid opcode exception + TRAP_x86_DNA = 7, // Device not available exception + TRAP_x86_DOUBLEFLT = 8, // Double fault exception + TRAP_x86_FPOPFLT = 9, // Coprocessor segment overrun + TRAP_x86_TSSFLT = 10, // Invalid TSS exception + TRAP_x86_SEGNPFLT = 11, // Segment not present exception + TRAP_x86_STKFLT = 12, // Stack fault + TRAP_x86_PROTFLT = 13, // General protection fault + TRAP_x86_PAGEFLT = 14, // Page fault + TRAP_x86_ARITHTRAP = 16, // Floating point exception + TRAP_x86_ALIGNFLT = 17, // Alignment check exception + TRAP_x86_MCHK = 18, // Machine check exception + TRAP_x86_CACHEFLT = 19 // SIMD exception (via SIGFPE) if CPU is SSE capable otherwise Cache flush exception (via SIGSEV) + */ + uint32_t prot = getProtection((uintptr_t)info->si_addr); + if(sig==SIGBUS) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 17; + else if(sig==SIGSEGV) { + if((uintptr_t)info->si_addr == sigcontext->uc_mcontext.gregs[I386_EIP]) { + sigcontext->uc_mcontext.gregs[I386_ERR] = (info->si_errno==0x1234)?0:((info->si_errno==0xdead)?(0x2|(info->si_code<<3)):0x0010); // execution flag issue (probably), unless it's a #GP(0) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = ((info->si_code==SEGV_ACCERR) || (info->si_errno==0x1234) || (info->si_errno==0xdead) || ((uintptr_t)info->si_addr==0))?13:14; + } else if(info->si_code==SEGV_ACCERR && !(prot&PROT_WRITE)) { + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x0002; // write flag issue + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 14; + } else { + if((info->si_code!=SEGV_ACCERR) && labs((intptr_t)info->si_addr-(intptr_t)sigcontext->uc_mcontext.gregs[I386_ESP])<16) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 12; // stack overflow probably + else + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = (info->si_code == SEGV_ACCERR)?13:14; + //I386_ERR seems to be INT:8 CODE:8. So for write access segfault it's 0x0002 For a read it's 0x0004 (and 8 for exec). For an int 2d it could be 0x2D01 for example + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x0004; // read error? there is no execute control in box64 anyway + } + if(info->si_code == SEGV_ACCERR && old_code) + *old_code = -1; + if(info->si_errno==0x1234) { + info2->si_errno = 0; + } else if(info->si_errno==0xdead) { + // INT x + uint8_t int_n = info2->si_code; + info2->si_errno = 0; + info2->si_code = info->si_code; + info2->si_addr = NULL; + // some special cases... + if(int_n==3) { + info2->si_signo = SIGTRAP; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 3; + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + } else if(int_n==0x04) { + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 4; + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + } else if (int_n==0x29 || int_n==0x2c || int_n==0x2d) { + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x02|(int_n<<3); + } else { + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x0a|(int_n<<3); + } + } else if(info->si_errno==0xcafe) { + info2->si_errno = 0; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 0; + info2->si_signo = SIGFPE; + } + } else if(sig==SIGFPE) { + if (info->si_code == FPE_INTOVF) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 4; + else + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 19; + } else if(sig==SIGILL) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 6; + else if(sig==SIGTRAP) { + info2->si_code = 128; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = info->si_code; + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + } + //TODO: SIGABRT generate what? + printf_log(LOG_DEBUG, "Signal %d: si_addr=%p, TRAPNO=%d, ERR=%d, RIP=%p\n", sig, (void*)info2->si_addr, sigcontext->uc_mcontext.gregs[I386_TRAPNO], sigcontext->uc_mcontext.gregs[I386_ERR],from_ptrv(sigcontext->uc_mcontext.gregs[I386_EIP])); + // call the signal handler + i386_ucontext_t sigcontext_copy = *sigcontext; + // save old value from emu + #define GO(A) uint32_t old_##A = R_##A + GO(EAX); + GO(EDI); + GO(ESI); + GO(EDX); + GO(ECX); + GO(EBP); + #undef GO + // set stack pointer + R_ESP = frame; + // set frame pointer + R_EBP = sigcontext->uc_mcontext.gregs[I386_EBP]; + + int exits = 0; + int ret; + int dynarec = 0; + #ifdef DYNAREC + if(sig!=SIGSEGV && !(Locks&is_dyndump_locked) && !(Locks&is_memprot_locked)) + dynarec = 1; + #endif + ret = RunFunctionHandler32(&exits, dynarec, sigcontext, my_context->signals[info2->si_signo], 3, info2->si_signo, info2, sigcontext); + // restore old value from emu + if(used_stack) // release stack + new_ss->ss_flags = 0; + #define GO(A) R_##A = old_##A + GO(EAX); + GO(EDI); + GO(ESI); + GO(EDX); + GO(ECX); + GO(EBP); + #undef GO + + if(memcmp(sigcontext, &sigcontext_copy, sizeof(i386_ucontext_t))) { + if(emu->jmpbuf) { + #define GO(R) emu->regs[_##R].q[0]=sigcontext->uc_mcontext.gregs[I386_E##R] + GO(AX); + GO(CX); + GO(DX); + GO(DI); + GO(SI); + GO(BP); + GO(SP); + GO(BX); + #undef GO + emu->ip.q[0]=sigcontext->uc_mcontext.gregs[I386_EIP]; + // flags + emu->eflags.x64=sigcontext->uc_mcontext.gregs[I386_EFL]; + // get segments + #define GO(S) if(emu->segs[_##S]!=sigcontext->uc_mcontext.gregs[I386_##S]) emu->segs[_##S]=sigcontext->uc_mcontext.gregs[I386_##S] + GO(CS); + GO(DS); + GO(ES); + GO(SS); + GO(GS); + GO(FS); + #undef GO + for(int i=0; i<6; ++i) + emu->segs_serial[i] = 0; + printf_log(LOG_DEBUG, "Context has been changed in Sigactionhanlder, doing siglongjmp to resume emu at %p, RSP=%p\n", (void*)R_RIP, (void*)R_RSP); + if(old_code) + *old_code = -1; // re-init the value to allow another segfault at the same place + //relockMutex(Locks); // do not relock mutex, because of the siglongjmp, whatever was running is canceled + #ifdef DYNAREC + if(Locks & is_dyndump_locked) + CancelBlock64(1); + #endif + #ifdef RV64 + emu->xSPSave = emu->old_savedsp; + #endif + #ifdef ANDROID + siglongjmp(*emu->jmpbuf, 1); + #else + siglongjmp(emu->jmpbuf, 1); + #endif + } + printf_log(LOG_INFO, "Warning, context has been changed in Sigactionhanlder%s\n", (sigcontext->uc_mcontext.gregs[I386_EIP]!=sigcontext_copy.uc_mcontext.gregs[I386_EIP])?" (EIP changed)":""); + } + // restore regs... + #define GO(R) R_##R=sigcontext->uc_mcontext.gregs[I386_##R] + GO(EAX); + GO(ECX); + GO(EDX); + GO(EDI); + GO(ESI); + GO(EBP); + GO(ESP); + GO(EBX); + #undef GO + emu->eflags.x64=sigcontext->uc_mcontext.gregs[I386_EFL]; + #define GO(R) R_##R=sigcontext->uc_mcontext.gregs[I386_##R] + GO(CS); + GO(DS); + GO(ES); + GO(SS); + GO(GS); + GO(FS); + #undef GO + + printf_log(LOG_DEBUG, "Sigactionhanlder main function returned (exit=%d, restorer=%p)\n", exits, (void*)restorer); + if(exits) { + //relockMutex(Locks); // the thread will exit, so no relock there + #ifdef DYNAREC + if(Locks & is_dyndump_locked) + CancelBlock64(1); + #endif + exit(ret); + } + if(restorer) + RunFunctionHandler32(&exits, 0, NULL, restorer, 0); + relockMutex(Locks); +} + +EXPORT int my32_getcontext(x64emu_t* emu, void* ucp) +{ +// printf_log(LOG_NONE, "Warning: call to partially implemented getcontext\n"); + i386_ucontext_t *u = (i386_ucontext_t*)ucp; + // stack traking + u->uc_stack.ss_sp = 0; + u->uc_stack.ss_size = 0; // this need to filled + // get general register + u->uc_mcontext.gregs[I386_EAX] = R_EAX; + u->uc_mcontext.gregs[I386_ECX] = R_ECX; + u->uc_mcontext.gregs[I386_EDX] = R_EDX; + u->uc_mcontext.gregs[I386_EDI] = R_EDI; + u->uc_mcontext.gregs[I386_ESI] = R_ESI; + u->uc_mcontext.gregs[I386_EBP] = R_EBP; + u->uc_mcontext.gregs[I386_EIP] = *(uint32_t*)from_ptrv(R_ESP); + u->uc_mcontext.gregs[I386_ESP] = R_ESP+4; + u->uc_mcontext.gregs[I386_EBX] = R_EBX; + // get segments + u->uc_mcontext.gregs[I386_GS] = R_GS; + u->uc_mcontext.gregs[I386_FS] = R_FS; + u->uc_mcontext.gregs[I386_ES] = R_ES; + u->uc_mcontext.gregs[I386_DS] = R_DS; + u->uc_mcontext.gregs[I386_CS] = R_CS; + u->uc_mcontext.gregs[I386_SS] = R_SS; + // get FloatPoint status + if(u->uc_mcontext.fpregs) + save_fpreg(emu, from_ptrv(u->uc_mcontext.fpregs)); + // get signal mask + sigprocmask(SIG_SETMASK, NULL, (sigset_t*)&u->uc_sigmask); + // ensure uc_link is properly initialized + u->uc_link = to_ptrv(emu->uc_link); + + return 0; +} + +EXPORT int my32_setcontext(x64emu_t* emu, void* ucp) +{ +// printf_log(LOG_NONE, "Warning: call to partially implemented setcontext\n"); + i386_ucontext_t *u = (i386_ucontext_t*)ucp; + // stack tracking + emu->init_stack = from_ptrv(u->uc_stack.ss_sp); + emu->size_stack = from_ulong(u->uc_stack.ss_size); + // set general register + R_EAX = u->uc_mcontext.gregs[I386_EAX]; + R_ECX = u->uc_mcontext.gregs[I386_ECX]; + R_EDX = u->uc_mcontext.gregs[I386_EDX]; + R_EDI = u->uc_mcontext.gregs[I386_EDI]; + R_ESI = u->uc_mcontext.gregs[I386_ESI]; + R_EBP = u->uc_mcontext.gregs[I386_EBP]; + R_EIP = u->uc_mcontext.gregs[I386_EIP]; + R_ESP = u->uc_mcontext.gregs[I386_ESP]; + R_EBX = u->uc_mcontext.gregs[I386_EBX]; + // get segments + R_GS = u->uc_mcontext.gregs[I386_GS]; + R_FS = u->uc_mcontext.gregs[I386_FS]; + R_ES = u->uc_mcontext.gregs[I386_ES]; + R_DS = u->uc_mcontext.gregs[I386_DS]; + R_CS = u->uc_mcontext.gregs[I386_CS]; + R_SS = u->uc_mcontext.gregs[I386_SS]; + // set FloatPoint status + if(u->uc_mcontext.fpregs) + load_fpreg(emu, from_ptrv(u->uc_mcontext.fpregs)); + // set signal mask + sigprocmask(SIG_SETMASK, (sigset_t*)&u->uc_sigmask, NULL); + // set uc_link + emu->uc_link = from_ptrv(u->uc_link); + errno = 0; + return R_EAX; +} + +EXPORT int my32_makecontext(x64emu_t* emu, void* ucp, void* fnc, int32_t argc, int32_t* argv) +{ +// printf_log(LOG_NONE, "Warning: call to unimplemented makecontext\n"); + i386_ucontext_t *u = (i386_ucontext_t*)ucp; + // setup stack + u->uc_mcontext.gregs[I386_ESP] = to_ptr(u->uc_stack.ss_sp + u->uc_stack.ss_size - 4); + // setup the function + u->uc_mcontext.gregs[I386_EIP] = to_ptrv(fnc); + // setup args + uint32_t* esp = (uint32_t*)from_ptr(u->uc_mcontext.gregs[I386_ESP]); + for (int i=0; iexit_bridge); + u->uc_mcontext.gregs[I386_ESP] = (uintptr_t)esp; + + return 0; +} + +EXPORT int my32_swapcontext(x64emu_t* emu, void* ucp1, void* ucp2) +{ +// printf_log(LOG_NONE, "Warning: call to unimplemented swapcontext\n"); + // grab current context in ucp1 + my32_getcontext(emu, ucp1); + // activate ucp2 + my32_setcontext(emu, ucp2); + return 0; +} diff --git a/src/libtools/signals.c b/src/libtools/signals.c index e58081c1..a3030e40 100644 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -269,6 +269,10 @@ static void sigstack_key_alloc() { pthread_key_create(&sigstack_key, sigstack_destroy); } +x64_stack_t* sigstack_getstack() { + return (x64_stack_t*)pthread_getspecific(sigstack_key); +} + // this allow handling "safe" function that just abort if accessing a bad address static __thread JUMPBUFF signal_jmpbuf; #ifdef ANDROID @@ -923,8 +927,17 @@ int sigbus_specialcases(siginfo_t* info, void * ucntx, void* pc, void* _fpsimd) return 0; } +#ifdef BOX32 +void my_sigactionhandler_oldcode_32(int32_t sig, int simple, siginfo_t* info, void * ucntx, int* old_code, void* cur_db); +#endif void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void * ucntx, int* old_code, void* cur_db) { + #ifdef BOX32 + if(box64_is32bits) { + my_sigactionhandler_oldcode_32(sig, simple, info, ucntx, old_code, cur_db); + return; + } + #endif int Locks = unlockMutex(); printf_log(LOG_DEBUG, "Sigactionhanlder for signal #%d called (jump to %p/%s)\n", sig, (void*)my_context->signals[sig], GetNativeName((void*)my_context->signals[sig])); @@ -2184,7 +2197,7 @@ EXPORT int my_getcontext(x64emu_t* emu, void* ucp) // get signal mask sigprocmask(SIG_SETMASK, NULL, (sigset_t*)&u->uc_sigmask); // ensure uc_link is properly initialized - u->uc_link = emu->uc_link; + u->uc_link = (x64_ucontext_t*)emu->uc_link; return 0; } diff --git a/src/libtools/threads.c b/src/libtools/threads.c index 074068c0..0973d658 100644 --- a/src/libtools/threads.c +++ b/src/libtools/threads.c @@ -29,6 +29,9 @@ #include "dynablock.h" #include "dynarec/native_lock.h" #endif +#ifdef BOX32 +#include "box32.h" +#endif //void _pthread_cleanup_push_defer(void* buffer, void* routine, void* arg); // declare hidden functions //void _pthread_cleanup_pop_restore(void* buffer, int exec); @@ -124,14 +127,6 @@ int GetStackSize(x64emu_t* emu, uintptr_t attr, void** stack, size_t* stacksize) void my_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); -typedef struct emuthread_s { - uintptr_t fnc; - void* arg; - x64emu_t* emu; - int cancel_cap, cancel_size; - x64_unwind_buff_t **cancels; -} emuthread_t; - static pthread_key_t thread_key; static void emuthread_destroy(void* p) @@ -144,6 +139,10 @@ static void emuthread_destroy(void* p) if (my_context && (ptr = pthread_getspecific(my_context->tlskey)) != NULL) free_tlsdatasize(ptr);*/ // free x64emu + #ifdef BOX32 + if(box64_is32bits && !et->join) + to_hash_d(et->self); + #endif if(et) { FreeX64Emu(&et->emu); box_free(et); @@ -158,9 +157,13 @@ static void emuthread_cancel(void* p) // check cancels threads for(int i=et->cancel_size-1; i>=0; --i) { et->emu->flags.quitonlongjmp = 0; - my_longjmp(et->emu, et->cancels[i]->__cancel_jmp_buf, 1); + my_longjmp(et->emu, ((x64_unwind_buff_t*)et->cancels[i])->__cancel_jmp_buf, 1); DynaRun(et->emu); // will return after a __pthread_unwind_next() } + #ifdef BOX32 + if(box64_is32bits) + to_hash_d(et->self); + #endif box_free(et->cancels); et->cancels=NULL; et->cancel_size = et->cancel_cap = 0; @@ -182,6 +185,12 @@ void thread_set_emu(x64emu_t* emu) } et->emu = emu; et->emu->type = EMUTYPE_MAIN; + #ifdef BOX32 + if(box64_is32bits) { + et->self = (uintptr_t)pthread_self(); + et->hself = to_hash(et->self); + } + #endif pthread_setspecific(thread_key, et); } @@ -1097,6 +1106,10 @@ EXPORT int my_pthread_barrier_init(x64emu_t* emu, pthread_barrier_t* bar, my_bar void init_pthread_helper() { + #ifdef BOX32 + if(box64_is32bits) + init_pthread_helper_32(); + #endif real_pthread_cleanup_push_defer = (vFppp_t)dlsym(NULL, "_pthread_cleanup_push_defer"); real_pthread_cleanup_pop_restore = (vFpi_t)dlsym(NULL, "_pthread_cleanup_pop_restore"); real_pthread_cond_clockwait = (iFppip_t)dlsym(NULL, "pthread_cond_clockwait"); @@ -1129,6 +1142,10 @@ void clean_current_emuthread() void fini_pthread_helper(box64context_t* context) { + #ifdef BOX32 + if(box64_is32bits) + fini_pthread_helper_32(context); + #endif CleanStackSize(context); clean_current_emuthread(); } diff --git a/src/libtools/threads32.c b/src/libtools/threads32.c new file mode 100755 index 00000000..1fc3a2df --- /dev/null +++ b/src/libtools/threads32.c @@ -0,0 +1,854 @@ +// __USE_UNIX98 is needed for sttype / gettype definition +#define __USE_UNIX98 +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include + +#include "debug.h" +#include "box32context.h" +#include "threads.h" +#include "emu/x64emu_private.h" +#include "tools/bridge_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "custommem.h" +#include "khash.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec.h" +#include "bridge.h" +#ifdef DYNAREC +#include "dynablock.h" +#endif + +typedef void (*vFppp_t)(void*, void*, void*); +typedef void (*vFpi_t)(void*, int); +//starting with glibc 2.34+, those 2 functions are in libc.so as versionned symbol only +// So use dlsym to get the symbol unversionned, as simple link will not work. +static vFppp_t real_pthread_cleanup_push_defer = NULL; +static vFpi_t real_pthread_cleanup_pop_restore = NULL; +// those function can be used simply +void _pthread_cleanup_push(void* buffer, void* routine, void* arg); // declare hidden functions +void _pthread_cleanup_pop(void* buffer, int exec); + +typedef struct threadstack_s { + void* stack; + size_t stacksize; +} threadstack_t; + +// longjmp / setjmp +typedef struct jump_buff_i386_s { + uint32_t save_ebx; + uint32_t save_esi; + uint32_t save_edi; + uint32_t save_ebp; + uint32_t save_esp; + uint32_t save_eip; +} jump_buff_i386_t; + +// sigset_t should have the same size on 32bits and 64bits machine (64bits) +typedef struct __jmp_buf_tag_s { + jump_buff_i386_t __jmpbuf; + int __mask_was_saved; + sigset_t __saved_mask; +} __jmp_buf_tag_t; + +typedef struct x64_unwind_buff_s { + struct { + jump_buff_i386_t __cancel_jmp_buf; + int __mask_was_saved; + } __cancel_jmp_buf[1]; + ptr_t __pad[2]; + void* __pad3; +} x64_unwind_buff_t __attribute__((__aligned__)); + +static pthread_attr_t* get_attr(void* attr); +static void del_attr(void* attr); + +typedef void(*vFv_t)(); + +KHASH_MAP_INIT_INT(threadstack, threadstack_t) +#ifndef ANDROID +KHASH_MAP_INIT_INT(cancelthread, __pthread_unwind_buf_t*) +#endif + +void CleanStackSize(box64context_t* context); +void FreeStackSize(kh_threadstack_t* map, uintptr_t attr); +void AddStackSize(kh_threadstack_t* map, uintptr_t attr, void* stack, size_t stacksize); +int GetStackSize(x64emu_t* emu, uintptr_t attr, void** stack, size_t* stacksize); + +static pthread_key_t thread_key; + +void my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); + +static void emuthread_destroy(void* p) +{ + emuthread_t *et = (emuthread_t*)p; + if(!et) + return; + // destroy the hash key if thread is not joinable + if(!et->join) + to_hash_d(et->self); + // destroy thread emu and all + if(et) { + FreeX64Emu(&et->emu); + free(et); + } +} + +static void emuthread_cancel(void* p) +{ + emuthread_t *et = (emuthread_t*)p; + if(!et) + return; + // check cancels threads + for(int i=et->cancel_size-1; i>=0; --i) { + et->emu->flags.quitonlongjmp = 0; + my32_longjmp(et->emu, ((x64_unwind_buff_t*)et->cancels[i])->__cancel_jmp_buf, 1); + DynaRun(et->emu); // will return after a __pthread_unwind_next() + } + free(et->cancels); + to_hash_d(et->self); + et->cancels=NULL; + et->cancel_size = et->cancel_cap = 0; +} + +static void* pthread_routine(void* p) +{ + // free current emuthread if it exist + { + void* t = pthread_getspecific(thread_key); + if(t) { + // not sure how this could happens + printf_log(LOG_INFO, "Clean of an existing ET for Thread %04d\n", GetTID()); + emuthread_destroy(t); + } + } + pthread_setspecific(thread_key, p); + // call the function + emuthread_t *et = (emuthread_t*)p; + et->emu->type = EMUTYPE_MAIN; + et->self = (uintptr_t)pthread_self(); + et->hself = to_hash(et->self); + // setup callstack and run... + x64emu_t* emu = et->emu; + Push_32(emu, 0); // PUSH 0 (backtrace marker: return address is 0) + Push_32(emu, 0); // PUSH BP + R_EBP = R_ESP; // MOV BP, SP + R_ESP -= 32; // guard area + R_ESP &=~15; + Push_32(emu, to_ptrv(et->arg)); + PushExit_32(emu); + R_EIP = to_ptr(et->fnc); + pthread_cleanup_push(emuthread_cancel, p); + DynaRun(et->emu); + pthread_cleanup_pop(0); + void* ret = from_ptrv(R_EAX); + return ret; +} + +EXPORT int my32_pthread_attr_destroy(x64emu_t* emu, void* attr) +{ + if(emu->context->stacksizes) + FreeStackSize(emu->context->stacksizes, (uintptr_t)attr); + int ret = pthread_attr_destroy(get_attr(attr)); + del_attr(attr); + return ret; +} + +EXPORT int my32_pthread_attr_getstack(x64emu_t* emu, void* attr, void** stackaddr, size_t* stacksize) +{ + int ret = pthread_attr_getstack(get_attr(attr), stackaddr, stacksize); + if (ret==0) + GetStackSize(emu, (uintptr_t)attr, stackaddr, stacksize); + return ret; +} + +EXPORT int my32_pthread_attr_setstack(x64emu_t* emu, void* attr, void* stackaddr, size_t stacksize) +{ + if(!emu->context->stacksizes) { + emu->context->stacksizes = kh_init(threadstack); + } + AddStackSize(emu->context->stacksizes, (uintptr_t)attr, stackaddr, stacksize); + //Don't call actual setstack... + //return pthread_attr_setstack(attr, stackaddr, stacksize); + return pthread_attr_setstacksize(get_attr(attr), stacksize); +} + +EXPORT int my32_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_routine, void* arg) +{ + int stacksize = 2*1024*1024; //default stack size is 2Mo + void* attr_stack; + size_t attr_stacksize; + int own; + void* stack; + + if(attr) { + size_t stsize; + if(pthread_attr_getstacksize(get_attr(attr), &stsize)==0) + stacksize = stsize; + if(stacksize<512*1024) // emu and all needs some stack space, don't go too low + pthread_attr_setstacksize(get_attr(attr), 512*1024); + } + if(GetStackSize(emu, (uintptr_t)attr, &attr_stack, &attr_stacksize)) + { + stack = attr_stack; + stacksize = attr_stacksize; + own = 0; + } else { + //stack = malloc(stacksize); + stack = mmap64(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + own = 1; + } + + emuthread_t *et = (emuthread_t*)calloc(1, sizeof(emuthread_t)); + x64emu_t *emuthread = NewX64Emu(my_context, (uintptr_t)start_routine, (uintptr_t)stack, stacksize, own); + SetupX64Emu(emuthread, emu); + et->emu = emuthread; + et->fnc = (uintptr_t)start_routine; + et->arg = arg; + if(!attr) + et->join = 1; + else { + int j; + pthread_attr_getdetachstate(get_attr(attr), &j); + if(j==PTHREAD_CREATE_JOINABLE) + et->join = 1; + else + et->join = 0; + } + #ifdef DYNAREC + if(box64_dynarec) { + // pre-creation of the JIT code for the entry point of the thread + dynablock_t *current = NULL; + DBGetBlock(emu, (uintptr_t)start_routine, 1, 1); + } + #endif + // create thread + return pthread_create((pthread_t*)t, get_attr(attr), + pthread_routine, et); +} + +EXPORT int my32_pthread_detach(x64emu_t* emu, pthread_t p) +{ + if(pthread_equal(p ,pthread_self())) { + emuthread_t *et = (emuthread_t*)pthread_getspecific(thread_key); + et->join = 0; + } + return pthread_detach(p); +} + +void* my32_prepare_thread(x64emu_t *emu, void* f, void* arg, int ssize, void** pet) +{ + int stacksize = (ssize)?ssize:(2*1024*1024); //default stack size is 2Mo + //void* stack = malloc(stacksize); + void* stack = mmap64(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + emuthread_t *et = (emuthread_t*)calloc(1, sizeof(emuthread_t)); + x64emu_t *emuthread = NewX64Emu(emu->context, (uintptr_t)f, (uintptr_t)stack, stacksize, 1); + SetupX64Emu(emuthread, emu); + et->emu = emuthread; + et->fnc = (uintptr_t)f; + et->arg = arg; + #ifdef DYNAREC + if(box64_dynarec) { + // pre-creation of the JIT code for the entry point of the thread + dynablock_t *current = NULL; + DBGetBlock(emu, (uintptr_t)f, 1, 1); + } + #endif + *pet = et; + return pthread_routine; +} + +void my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); + +EXPORT void my32___pthread_register_cancel(x64emu_t* emu, x64_unwind_buff_t* buff) +{ + buff = (x64_unwind_buff_t*)from_ptr(R_EAX); // param is in fact on register + emuthread_t *et = (emuthread_t*)pthread_getspecific(thread_key); + if(et->cancel_cap == et->cancel_size) { + et->cancel_cap+=8; + et->cancels = realloc(et->cancels, sizeof(x64_unwind_buff_t*)*et->cancel_cap); + } + et->cancels[et->cancel_size++] = buff; +} + +EXPORT void my32___pthread_unregister_cancel(x64emu_t* emu, x64_unwind_buff_t* buff) +{ + emuthread_t *et = (emuthread_t*)pthread_getspecific(thread_key); + for (int i=et->cancel_size-1; i>=0; --i) { + if(et->cancels[i] == buff) { + if(i!=et->cancel_size-1) + memmove(et->cancels+i, et->cancels+i+1, sizeof(x64_unwind_buff_t*)*(et->cancel_size-i-1)); + et->cancel_size--; + } + } +} + +EXPORT void my32___pthread_unwind_next(x64emu_t* emu, void* p) +{ + emu->quit = 1; +} + +KHASH_MAP_INIT_INT(once, int) + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) \ +GO(5) \ +GO(6) \ +GO(7) \ +GO(8) \ +GO(9) \ +GO(10) \ +GO(11) \ +GO(12) \ +GO(13) \ +GO(14) \ +GO(15) \ +GO(16) \ +GO(17) \ +GO(18) \ +GO(19) \ +GO(20) \ +GO(21) \ +GO(22) \ +GO(23) \ +GO(24) \ +GO(25) \ +GO(26) \ +GO(27) \ +GO(28) \ +GO(29) + +// cleanup_routine +#define GO(A) \ +static uintptr_t my32_cleanup_routine_fct_##A = 0; \ +static void my32_cleanup_routine_##A(void* a) \ +{ \ + RunFunctionFmt(my32_cleanup_routine_fct_##A, "p", to_ptrv(a)); \ +} +SUPER() +#undef GO +static void* findcleanup_routineFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_cleanup_routine_fct_##A == (uintptr_t)fct) return my32_cleanup_routine_##A; + SUPER() + #undef GO + #define GO(A) if(my32_cleanup_routine_fct_##A == 0) {my32_cleanup_routine_fct_##A = (uintptr_t)fct; return my32_cleanup_routine_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for pthread cleanup_routine callback\n"); + return NULL; +} + +// key_destructor +#define GO(A) \ +static uintptr_t my32_key_destructor_fct_##A = 0; \ +static void my32_key_destructor_##A(void* a) \ +{ \ + RunFunctionFmt(my32_key_destructor_fct_##A, "p", to_ptrv(a)); \ +} +SUPER() +#undef GO +static void* findkey_destructorFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_key_destructor_fct_##A == (uintptr_t)fct) return my32_key_destructor_##A; + SUPER() + #undef GO + #define GO(A) if(my32_key_destructor_fct_##A == 0) {my32_key_destructor_fct_##A = (uintptr_t)fct; return my32_key_destructor_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for pthread key_destructor callback\n"); + return NULL; +} + +#undef SUPER + + +int EXPORT my32_pthread_once(x64emu_t* emu, int* once, void* cb) +{ + if(*once) // quick test first + return 0; + // slow test now + #ifdef DYNAREC + int old = native_lock_xchg_d(once, 1); + #else + int old = *once; // outside of the mutex in case once is badly formed + pthread_mutex_lock(&my_context->mutex_lock); + old = *once; + *once = 1; + pthread_mutex_unlock(&my_context->mutex_lock); + #endif + if(old) + return 0; + // make some room and align R_RSP before doing the call (maybe it would be simpler to just use Callback functions) + Push_32(emu, R_EBP); // push rbp + R_EBP = R_ESP; // mov rbp, rsp + R_ESP -= 0x200; + R_ESP &= ~63LL; + DynaCall(emu, (uintptr_t)cb); + R_ESP = R_EBP; // mov rsp, rbp + R_EBP = Pop32(emu); // pop rbp + return 0; +} +EXPORT int my32___pthread_once(x64emu_t* emu, void* once, void* cb) __attribute__((alias("my32_pthread_once"))); + +EXPORT int my32_pthread_key_create(x64emu_t* emu, void* key, void* dtor) +{ + return pthread_key_create(key, findkey_destructorFct(dtor)); +} +EXPORT int my32___pthread_key_create(x64emu_t* emu, void* key, void* dtor) __attribute__((alias("my32_pthread_key_create"))); + +// phtread_cond_init with null attr seems to only write 1 (NULL) dword on x64, while it's 48 bytes on ARM. +// Not sure why as sizeof(pthread_cond_init) is 48 on both platform... But Neverwinter Night init seems to rely on that +// What about cond that are statically initialized? +// Note, this is is a versionned function (the pthread_cond_*), and this seems to correspond to an old behaviour + +KHASH_MAP_INIT_INT(mapcond, pthread_cond_t*); + +// should all access to that map be behind a mutex? +kh_mapcond_t *mapcond = NULL; + +static pthread_cond_t* add_cond(void* cond) +{ + mutex_lock(&my_context->mutex_thread); + khint_t k; + int ret; + pthread_cond_t *c; + k = kh_put(mapcond, mapcond, (uintptr_t)cond, &ret); + if(!ret) + c = kh_value(mapcond, k); // already there... reinit an existing one? + else + c = kh_value(mapcond, k) = (pthread_cond_t*)calloc(1, sizeof(pthread_cond_t)); + //*(ptr_t*)cond = to_ptrv(cond); + mutex_unlock(&my_context->mutex_thread); + return c; +} +static pthread_cond_t* get_cond(void* cond) +{ + pthread_cond_t* ret; + int r; + mutex_lock(&my_context->mutex_thread); + khint_t k = kh_get(mapcond, mapcond, *(uintptr_t*)cond); + if(k==kh_end(mapcond)) { + khint_t k = kh_get(mapcond, mapcond, (uintptr_t)cond); + if(k==kh_end(mapcond)) { + printf_log(LOG_DEBUG, "BOX32: Note: phtread_cond not found, create a new empty one\n"); + ret = (pthread_cond_t*)calloc(1, sizeof(pthread_cond_t)); + k = kh_put(mapcond, mapcond, (uintptr_t)cond, &r); + kh_value(mapcond, k) = ret; + //*(ptr_t*)cond = to_ptrv(cond); + pthread_cond_init(ret, NULL); + } else + ret = kh_value(mapcond, k); + } else + ret = kh_value(mapcond, k); + mutex_unlock(&my_context->mutex_thread); + return ret; +} +static void del_cond(void* cond) +{ + if(!mapcond) + return; + mutex_lock(&my_context->mutex_thread); + khint_t k = kh_get(mapcond, mapcond, *(uintptr_t*)cond); + if(k!=kh_end(mapcond)) { + free(kh_value(mapcond, k)); + kh_del(mapcond, mapcond, k); + } + mutex_unlock(&my_context->mutex_thread); +} +pthread_mutex_t* getAlignedMutex(pthread_mutex_t* m); + +EXPORT int my32_pthread_cond_broadcast_old(x64emu_t* emu, void* cond) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_broadcast(c); +} +EXPORT int my32_pthread_cond_destroy_old(x64emu_t* emu, void* cond) +{ + pthread_cond_t * c = get_cond(cond); + int ret = pthread_cond_destroy(c); + if(c!=cond) del_cond(cond); + return ret; +} +EXPORT int my32_pthread_cond_init_old(x64emu_t* emu, void* cond, void* attr) +{ + pthread_cond_t *c = add_cond(cond); + return pthread_cond_init(c, (const pthread_condattr_t*)attr); +} +EXPORT int my32_pthread_cond_signal_old(x64emu_t* emu, void* cond) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_signal(c); +} +EXPORT int my32_pthread_cond_timedwait_old(x64emu_t* emu, void* cond, void* mutex, void* abstime) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_timedwait(c, getAlignedMutex((pthread_mutex_t*)mutex), (const struct timespec*)abstime); +} +EXPORT int my32_pthread_cond_wait_old(x64emu_t* emu, void* cond, void* mutex) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_wait(c, getAlignedMutex((pthread_mutex_t*)mutex)); +} + +EXPORT int my32_pthread_cond_timedwait(x64emu_t* emu, void* cond, void* mutex, void* abstime) +{ + return pthread_cond_timedwait((pthread_cond_t*)cond, getAlignedMutex((pthread_mutex_t*)mutex), (const struct timespec*)abstime); +} +EXPORT int my32_pthread_cond_wait(x64emu_t* emu, void* cond, void* mutex) +{ + return pthread_cond_wait((pthread_cond_t*)cond, getAlignedMutex((pthread_mutex_t*)mutex)); +} + +EXPORT int my32_pthread_mutexattr_setkind_np(x64emu_t* emu, void* t, int kind) +{ + // does "kind" needs some type of translation? + return pthread_mutexattr_settype(t, kind); +} + +// pthread_attr_t on x64 is 36 bytes +static uint64_t ATTR_SIGN = 0xA055E10CDE98LL; // random signature +typedef struct my32_x64_attr_s { + uint64_t sign; + pthread_attr_t* attr; +} my32_x64_attr_t; + +static pthread_attr_t* get_attr(void* attr) +{ + if(!attr) + return NULL; + my32_x64_attr_t* my32_attr = (my32_x64_attr_t*)attr; + if(my32_attr->sign!=ATTR_SIGN) { + my32_attr->attr = (pthread_attr_t*)calloc(1, sizeof(pthread_attr_t)); + my32_attr->sign = ATTR_SIGN; + } + return my32_attr->attr; +} +static void del_attr(void* attr) +{ + if(!attr) + return; + my32_x64_attr_t* my32_attr = (my32_x64_attr_t*)attr; + if(my32_attr->sign==ATTR_SIGN) { + my32_attr->sign = 0; + free(my32_attr->attr); + } +} + +EXPORT int my32_pthread_attr_init(x64emu_t* emu, void* attr) +{ + return pthread_attr_init(get_attr(attr)); +} + +EXPORT int my32_pthread_attr_getdetachstate(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getdetachstate(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getguardsize(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getguardsize(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getinheritsched(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getinheritsched(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getschedparam(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getschedparam(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getschedpolicy(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getschedpolicy(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getscope(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getscope(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getstackaddr(x64emu_t* emu, void* attr, ptr_t* p) +{ + size_t size; + void* pp; + int ret = pthread_attr_getstack(get_attr(attr), &pp, &size); + *p = to_ptrv(pp); + return ret; +} +EXPORT int my32_pthread_attr_getstacksize(x64emu_t* emu, void* attr, ulong_t* p) +{ + size_t size; + void* pp; + int ret = pthread_attr_getstack(get_attr(attr), &pp, &size); + *p = to_ulong(size); + return ret; +} +EXPORT int my32_pthread_attr_setdetachstate(x64emu_t* emu, void* attr, int p) +{ + return pthread_attr_setdetachstate(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setguardsize(x64emu_t* emu, void* attr, size_t p) +{ + return pthread_attr_setguardsize(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setinheritsched(x64emu_t* emu, void* attr, int p) +{ + return pthread_attr_setinheritsched(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setschedparam(x64emu_t* emu, void* attr, void* param) +{ + int policy; + pthread_attr_getschedpolicy(get_attr(attr), &policy); + int pmin = sched_get_priority_min(policy); + int pmax = sched_get_priority_max(policy); + if(param) { + int p = *(int*)param; + if(p>=pmin && p<=pmax) + return pthread_attr_setschedparam(get_attr(attr), param); + } + printf_log(LOG_INFO, "Warning, call to pthread_attr_setschedparam(%p, %p[%d]) ignored\n", attr, param, param?(*(int*)param):-1); + return 0; // faking success +} +EXPORT int my32_pthread_attr_setschedpolicy(x64emu_t* emu, void* attr, int p) +{ + return pthread_attr_setschedpolicy(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setstackaddr(x64emu_t* emu, void* attr, void* p) +{ + ulong_t size = 2*1024*1024; + my32_pthread_attr_getstacksize(emu, attr, &size); + return pthread_attr_setstack(get_attr(attr), p, size); +} +EXPORT int my32_pthread_attr_setstacksize(x64emu_t* emu, void* attr, size_t p) +{ + ptr_t pp; + my32_pthread_attr_getstackaddr(emu, attr, &pp); + return pthread_attr_setstack(get_attr(attr), from_ptrv(pp), p); +} + + +EXPORT int my32_pthread_attr_setscope(x64emu_t* emu, void* attr, int scope) +{ + if(scope!=PTHREAD_SCOPE_SYSTEM) printf_log(LOG_INFO, "Warning, scope of call to pthread_attr_setscope(...) changed from %d to PTHREAD_SCOPE_SYSTEM\n", scope); + return pthread_attr_setscope(get_attr(attr), PTHREAD_SCOPE_SYSTEM); + //The scope is either PTHREAD_SCOPE_SYSTEM or PTHREAD_SCOPE_PROCESS + // but PTHREAD_SCOPE_PROCESS doesn't seem supported on ARM linux, and PTHREAD_SCOPE_SYSTEM is default +} + +#ifndef ANDROID +EXPORT void my32__pthread_cleanup_push_defer(x64emu_t* emu, void* buffer, void* routine, void* arg) +{ + real_pthread_cleanup_push_defer(buffer, findcleanup_routineFct(routine), arg); +} + +EXPORT void my32__pthread_cleanup_push(x64emu_t* emu, void* buffer, void* routine, void* arg) +{ + _pthread_cleanup_push(buffer, findcleanup_routineFct(routine), arg); +} + +EXPORT void my32__pthread_cleanup_pop_restore(x64emu_t* emu, void* buffer, int exec) +{ + real_pthread_cleanup_pop_restore(buffer, exec); +} + +EXPORT void my32__pthread_cleanup_pop(x64emu_t* emu, void* buffer, int exec) +{ + _pthread_cleanup_pop(buffer, exec); +} + +// getaffinity_np (pthread or attr) hav an "old" version (glibc-2.3.3) that only have 2 args, cpusetsize is omited +EXPORT int my32_pthread_getaffinity_np(x64emu_t* emu, pthread_t thread, int cpusetsize, void* cpuset) +{ + if(cpusetsize>0x1000) { + // probably old version of the function, that didn't have cpusetsize.... + cpuset = from_ptrv(cpusetsize); + cpusetsize = sizeof(cpu_set_t); + } + + int ret = pthread_getaffinity_np(thread, cpusetsize, cpuset); + if(ret<0) { + printf_log(LOG_INFO, "Warning, pthread_getaffinity_np(%p, %d, %p) errored, with errno=%d\n", (void*)thread, cpusetsize, cpuset, errno); + } + + return ret; +} + +EXPORT int my32_pthread_setaffinity_np(x64emu_t* emu, pthread_t thread, int cpusetsize, void* cpuset) +{ + if(cpusetsize>0x1000) { + // probably old version of the function, that didn't have cpusetsize.... + cpuset = from_ptrv(cpusetsize); + cpusetsize = sizeof(cpu_set_t); + } + + int ret = pthread_setaffinity_np(thread, cpusetsize, cpuset); + if(ret<0) { + printf_log(LOG_INFO, "Warning, pthread_setaffinity_np(%p, %d, %p) errored, with errno=%d\n", (void*)thread, cpusetsize, cpuset, errno); + } + + return ret; +} + +EXPORT int my32_pthread_attr_setaffinity_np(x64emu_t* emu, void* attr, uint32_t cpusetsize, void* cpuset) +{ + if(cpusetsize>0x1000) { + // probably old version of the function, that didn't have cpusetsize.... + cpuset = from_ptrv(cpusetsize); + cpusetsize = sizeof(cpu_set_t); + } + + int ret = pthread_attr_setaffinity_np(attr, cpusetsize, cpuset); + if(ret<0) { + printf_log(LOG_INFO, "Warning, pthread_attr_setaffinity_np(%p, %d, %p) errored, with errno=%d\n", attr, cpusetsize, cpuset, errno); + } + + return ret; +} +#endif + +EXPORT int my32_pthread_kill(x64emu_t* emu, void* thread, int sig) +{ + // check for old "is everything ok?" + if((thread==NULL) && (sig==0)) + return pthread_kill(pthread_self(), 0); + return pthread_kill((pthread_t)thread, sig); +} + +//EXPORT void my32_pthread_exit(x64emu_t* emu, void* retval) +//{ +// emu->quit = 1; // to be safe +// pthread_exit(retval); +//} + +// TODO: find a better way for mutex. It should be possible to use the actual mutex most of the time, especially for simple ones +// Having the mutex table behind a mutex is far from ideal! + +KHASH_MAP_INIT_INT(mutex, pthread_mutex_t*) +static kh_mutex_t* unaligned_mutex = NULL; +static pthread_rwlock_t m_lock = {0}; +pthread_mutex_t* getAlignedMutex(pthread_mutex_t* m) +{ + pthread_mutex_t* ret = NULL; + pthread_rwlock_rdlock(&m_lock); + khint_t k = kh_get(mutex, unaligned_mutex, (uintptr_t)m); + if(k!=kh_end(unaligned_mutex)) { + ret = kh_value(unaligned_mutex, k); + } else { + int r; + pthread_rwlock_unlock(&m_lock); + pthread_rwlock_wrlock(&m_lock); + k = kh_put(mutex, unaligned_mutex, (uintptr_t)m, &r); + ret = kh_value(unaligned_mutex, k) = (pthread_mutex_t*)calloc(1, sizeof(pthread_mutex_t)); + memcpy(ret, m, 24); + } + pthread_rwlock_unlock(&m_lock); + return ret; +} +EXPORT int my32_pthread_mutex_destroy(pthread_mutex_t *m) +{ + pthread_rwlock_wrlock(&m_lock); + khint_t k = kh_get(mutex, unaligned_mutex, (uintptr_t)m); + if(k!=kh_end(unaligned_mutex)) { + pthread_mutex_t *n = kh_value(unaligned_mutex, k); + kh_del(mutex, unaligned_mutex, k); + int ret = pthread_mutex_destroy(n); + free(n); + return ret; + } + pthread_rwlock_unlock(&m_lock); + return pthread_mutex_destroy(m); +} +#define getAlignedMutexWithInit(A, B) getAlignedMutex(A) + +EXPORT int my32___pthread_mutex_destroy(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_destroy"))); + +EXPORT int my32_pthread_mutex_init(pthread_mutex_t *m, pthread_mutexattr_t *att) +{ + return pthread_mutex_init(getAlignedMutexWithInit(m, 0), att); +} +EXPORT int my32___pthread_mutex_init(pthread_mutex_t *m, pthread_mutexattr_t *att) __attribute__((alias("my32_pthread_mutex_init"))); + +EXPORT int my32_pthread_mutex_lock(pthread_mutex_t *m) +{ + return pthread_mutex_lock(getAlignedMutex(m)); +} +EXPORT int my32___pthread_mutex_lock(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_lock"))); + +EXPORT int my32_pthread_mutex_timedlock(pthread_mutex_t *m, const struct timespec * t) +{ + return pthread_mutex_timedlock(getAlignedMutex(m), t); +} + +EXPORT int my32_pthread_mutex_trylock(pthread_mutex_t *m) +{ + return pthread_mutex_trylock(getAlignedMutex(m)); +} +EXPORT int my32___pthread_mutex_trylock(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_trylock"))); + +EXPORT int my32_pthread_mutex_unlock(pthread_mutex_t *m) +{ + return pthread_mutex_unlock(getAlignedMutex(m)); +} +EXPORT int my32___pthread_mutex_unlock(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_unlock"))); + +static int done = 0; +void init_pthread_helper_32() +{ + if(done) + return; + done = 1; + real_pthread_cleanup_push_defer = (vFppp_t)dlsym(NULL, "_pthread_cleanup_push_defer"); + real_pthread_cleanup_pop_restore = (vFpi_t)dlsym(NULL, "_pthread_cleanup_pop_restore"); + + mapcond = kh_init(mapcond); + unaligned_mutex = kh_init(mutex); + pthread_key_create(&thread_key, emuthread_destroy); + pthread_setspecific(thread_key, NULL); +} + +void clean_current_emuthread_32() +{ + emuthread_t *et = (emuthread_t*)pthread_getspecific(thread_key); + if(et) { + emuthread_destroy(et); + pthread_setspecific(thread_key, NULL); + } +} + +void fini_pthread_helper_32(box64context_t* context) +{ + if(!done) + return; + done = 0; + //CleanStackSize(context); + pthread_cond_t *cond; + kh_foreach_value(mapcond, cond, + pthread_cond_destroy(cond); + free(cond); + ); + kh_destroy(mapcond, mapcond); + mapcond = NULL; + pthread_mutex_t *m; + kh_foreach_value(unaligned_mutex, m, + pthread_mutex_destroy(m); + free(m); + ); + kh_destroy(mutex, unaligned_mutex); + + clean_current_emuthread_32(); +} diff --git a/src/tools/box32stack.c b/src/tools/box32stack.c new file mode 100644 index 00000000..441b27ab --- /dev/null +++ b/src/tools/box32stack.c @@ -0,0 +1,137 @@ +#include +#include +#include +#include +#include + +#include "box64stack.h" +#include "box64context.h" +#include "elfloader.h" +#include "debug.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "auxval.h" +#include "custommem.h" +#include "box32.h" + +static void PushString32(x64emu_t *emu, const char* s) +{ + int sz = strlen(s) + 1; + // round to 4 bytes boundary + R_ESP -= sz; + memcpy(from_ptrv(R_ESP), s, sz); +} + +static void Push32_32(x64emu_t *emu, uint32_t v) +{ + R_ESP -= 4; + *((uint32_t*)from_ptr(R_ESP)) = v; +} + + +EXPORTDYN +void SetupInitialStack32(x64emu_t *emu) +{ + // start with 0 + Push32_32(emu, 0); + // push program executed + PushString32(emu, emu->context->argv[0]); + uintptr_t p_arg0 = from_ptr(R_ESP); + // push envs + uintptr_t p_envv[emu->context->envc]; + for (int i=emu->context->envc-1; i>=0; --i) { + PushString32(emu, emu->context->envv[i]); + p_envv[i] = from_ptr(R_ESP); + } + // push args, also, free the argv[] string and point to the one in the main stack + uintptr_t p_argv[emu->context->argc]; + for (int i=emu->context->argc-1; i>=0; --i) { + PushString32(emu, emu->context->argv[i]); + p_argv[i] = R_ESP; + free(emu->context->argv[i]); + emu->context->argv[i] = (char*)p_argv[i]; + } + // align + uintptr_t tmp = from_ptr(R_ESP)&~(emu->context->stackalign-1); + memset((void*)tmp, 0, from_ptr(R_ESP)-tmp); + R_ESP=to_ptr(tmp); + + // push some AuxVector stuffs + PushString32(emu, "i686"); + uintptr_t p_i686 = from_ptr(R_ESP); + uintptr_t p_random = real_getauxval(25); + if(!p_random) { + for (int i=0; i<4; ++i) + Push32_32(emu, random()); + p_random = from_ptr(R_ESP); + } + // align + tmp = (R_ESP)&~(emu->context->stackalign-1); + memset((void*)tmp, 0, from_ptr(R_ESP)-tmp); + R_ESP=tmp; + + // push the AuxVector themselves + /* + 00: 00000000 + 03: 08048034 + 04: 00000020 + 05: 0000000b + 06: 00001000 + 07: f7fc0000 + 08: 00000000 + 09: 08049060 + 11: 000003e8 + 12: 000003e8 + 13: 000003e8 + 14: 000003e8 + 15: ffd8aa5b/i686 + 16: bfebfbff + 17: 00000064 + 23: 00000000 + 25: ffd8aa4b + 26: 00000000 + 31: ffd8bfeb/./testAuxVec + 32: f7fbfb40 + 33: f7fbf000 + */ + Push32_32(emu, 0); Push32_32(emu, 0); //AT_NULL(0)=0 + //Push32_32(emu, ); Push32_32(emu, 3); //AT_PHDR(3)=address of the PH of the executable + //Push32_32(emu, ); Push32_32(emu, 4); //AT_PHENT(4)=size of PH entry + //Push32_32(emu, ); Push32_32(emu, 5); //AT_PHNUM(5)=number of elf headers + Push32_32(emu, box64_pagesize); Push32_32(emu, 6); //AT_PAGESZ(6) + //Push32_32(emu, real_getauxval(7)); Push32_32(emu, 7); //AT_BASE(7)=ld-2.27.so start (in memory) + Push32_32(emu, 0); Push32_32(emu, 8); //AT_FLAGS(8)=0 + Push32_32(emu, R_EIP); Push32_32(emu, 9); //AT_ENTRY(9)=entrypoint + Push32_32(emu, from_ulong(real_getauxval(11))); Push32_32(emu, 11); //AT_UID(11) + Push32_32(emu, from_ulong(real_getauxval(12))); Push32_32(emu, 12); //AT_EUID(12) + Push32_32(emu, from_ulong(real_getauxval(13))); Push32_32(emu, 13); //AT_GID(13) + Push32_32(emu, from_ulong(real_getauxval(14))); Push32_32(emu, 14); //AT_EGID(14) + Push32_32(emu, p_i686); Push32_32(emu, 15); //AT_PLATFORM(15)=&"i686" + // Push HWCAP: + // FPU: 1<<0 ; VME: 1<<1 ; DE : 1<<2 ; PSE: 1<<3 ; TSC: 1<<4 ; MSR: 1<<5 ; PAE: 1<<6 ; MCE: 1<<7 + // CX8: 1<<8 ; APIC:1<<9 ; SEP: 1<<11; MTRR:1<<12; PGE: 1<<13; MCA: 1<<14; CMOV:1<<15 + // FCMOV:1<<16; MMX: 1<<23 + // OSFXR:1<<24; XMM: 1<<25;XMM2: 1<<26; AMD3D:1<<31 + Push32_32(emu, (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<8) | (1<<15) | (1<<16) | (1<<23) | (1<<25) | (1<<26)); + Push32_32(emu, 16); //AT_HWCAP(16)=... + //Push32_32(emu, sysconf(_SC_CLK_TCK)); Push32_32(emu, 17); //AT_CLKTCK(17)=times() frequency + Push32_32(emu, from_ulong(real_getauxval(23))); Push32_32(emu, 23); //AT_SECURE(23) + Push32_32(emu, p_random); Push32_32(emu, 25); //AT_RANDOM(25)=p_random + Push32_32(emu, 0); Push32_32(emu, 26); //AT_HWCAP2(26)=0 + Push32_32(emu, p_arg0); Push32_32(emu, 31); //AT_EXECFN(31)=p_arg0 + Push32_32(emu, emu->context->vsyscall); Push32_32(emu, 32); //AT_SYSINFO(32)=vsyscall + //Push32_32(emu, ); Push32_32(emu, 33); //AT_SYSINFO_EHDR(33)=address of vDSO + if(!emu->context->auxval_start) // store auxval start if needed + emu->context->auxval_start = (uintptr_t*)from_ptr(R_ESP); + + // push nil / envs / nil / args / argc + Push32_32(emu, 0); + for (int i=emu->context->envc-1; i>=0; --i) + Push32_32(emu, to_ptr(p_envv[i])); + emu->context->envv32 = R_ESP; + Push32_32(emu, 0); + for (int i=emu->context->argc-1; i>=0; --i) + Push32_32(emu, to_ptr(p_argv[i])); + emu->context->argv32 = R_ESP; + Push32_32(emu, emu->context->argc); +} diff --git a/src/tools/box64stack.c b/src/tools/box64stack.c index 7be31b4d..82dc9a63 100644 --- a/src/tools/box64stack.c +++ b/src/tools/box64stack.c @@ -42,9 +42,19 @@ void PushString(x64emu_t *emu, const char* s) memcpy((void*)R_RSP, s, sz); } +void SetupInitialStack32(x64emu_t *emu) +#ifndef BOX32 + { } +#else + ; +#endif EXPORTDYN void SetupInitialStack(x64emu_t *emu) { + if(box64_is32bits) { + SetupInitialStack32(emu); + return; + } // start with 0 Push64(emu, 0); // push program executed diff --git a/src/tools/callback.c b/src/tools/callback.c index 341a554d..661a3b13 100644 --- a/src/tools/callback.c +++ b/src/tools/callback.c @@ -12,43 +12,74 @@ #include "box64context.h" #include "box64stack.h" #include "dynarec.h" +#ifdef BOX32 +#include "box32.h" +#endif EXPORTDYN uint64_t RunFunction(uintptr_t fnc, int nargs, ...) { x64emu_t *emu = thread_get_emu(); - int align = (nargs>6)?(((nargs-6)&1)):0; - int stackn = align + ((nargs>6)?(nargs-6):0); + #ifdef BOX32 + if(box64_is32bits) { + Push_32(emu, R_RBP); // push ebp + R_RBP = R_ESP; // mov ebp, esp - Push64(emu, R_RBP); // push rbp - R_RBP = R_RSP; // mov rbp, rsp + R_ESP -= nargs*4; // need to push in reverse order - R_RSP -= stackn*sizeof(void*); // need to push in reverse order + ptr_t *p = (ptr_t*)from_ptrv(R_ESP); - uint64_t *p = (uint64_t*)R_RSP; - - va_list va; - va_start (va, nargs); - for (int i=0; iregs[nn[i]].q[0] = va_arg(va, uint64_t); - } else { - *p = va_arg(va, uint64_t); + va_list va; + va_start (va, nargs); + for (int i=0; i6)?(((nargs-6)&1)):0; + int stackn = align + ((nargs>6)?(nargs-6):0); + + Push64(emu, R_RBP); // push rbp + R_RBP = R_RSP; // mov rbp, rsp + + R_RSP -= stackn*sizeof(void*); // need to push in reverse order + + uint64_t *p = (uint64_t*)R_RSP; + + va_list va; + va_start (va, nargs); + for (int i=0; iregs[nn[i]].q[0] = va_arg(va, uint64_t); + } else { + *p = va_arg(va, uint64_t); + p++; + } + } + va_end (va); } - va_end (va); uintptr_t oldip = R_RIP; DynaCall(emu, fnc); if(oldip==R_RIP) { - R_RSP = R_RBP; // mov rsp, rbp - R_RBP = Pop64(emu); // pop rbp + #ifdef BOX32 + if(box64_is32bits) { + R_RSP = R_EBP; // mov esp, ebp + R_EBP = Pop_32(emu); // pop ebp + } + #endif + { + R_RSP = R_RBP; // mov rsp, rbp + R_RBP = Pop64(emu); // pop rbp + } } - uint64_t ret = R_RAX; + uint64_t ret = box64_is32bits?((uint64_t)R_EAX | ((uint64_t)R_EDX)<<32):R_RAX; return ret; } @@ -61,6 +92,27 @@ uint64_t RunFunctionFmt(uintptr_t fnc, const char* fmt, ...) int ni = 0; int ndf = 0; for (int i=0; fmt[i]; ++i) { + #ifdef BOX32 + if(box64_is32bits) + switch(fmt[i]) { + case 'd': + case 'I': + case 'U': nargs+=2; break; + case 'p': + case 'L': + case 'l': + case 'f': + case 'i': + case 'u': + case 'w': + case 'W': + case 'c': + case 'C': ++nargs; break; + default: + ++nargs; break; + } + else + #endif switch(fmt[i]) { case 'f': case 'd': if(ndf<8) ++ndf; else ++nargs; break; @@ -83,63 +135,116 @@ uint64_t RunFunctionFmt(uintptr_t fnc, const char* fmt, ...) ndf = 0; int align = nargs&1; int stackn = align + nargs; - - Push64(emu, R_RBP); // push rbp - R_RBP = R_RSP; // mov rbp, rsp - - R_RSP -= stackn*sizeof(void*); // need to push in reverse order - - uint64_t *p = (uint64_t*)R_RSP; - - static const int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9}; - #define GO(c, A, B, B2, C) case c: if(ni<6) emu->regs[nn[ni++]].A[0] = C va_arg(va, B2); else {*p = 0; *((B*)p) = va_arg(va, B2); ++p;}; break; - va_list va; - va_start (va, fmt); - for (int i=0; fmt[i]; ++i) { - switch(fmt[i]) { - case 'f': if(ndf<8) - emu->xmm[ndf++].f[0] = va_arg(va, double); // float are promoted to double in ... - else { - *p = 0; - *((float*)p) = va_arg(va, double); - ++p; - } - break; - case 'd': if(ndf<8) - emu->xmm[ndf++].d[0] = va_arg(va, double); - else { - *((double*)p) = va_arg(va, double); - ++p; - } - break; - GO('p', q, void*, void*, (uintptr_t)) - GO('i', sdword, int, int, ) - GO('u', dword, uint32_t, uint32_t, ) - GO('I', sq, int64_t, int64_t, ) - GO('U', q, uint64_t, uint64_t, ) - GO('L', q, uint64_t, uint64_t, ) - GO('l', sq, int64_t, int64_t, ) - GO('w', sword, int16_t, int, ) - GO('W', word, uint16_t, int, ) - GO('c', sbyte, int8_t, int, ) - GO('C', byte, uint8_t, int, ) - default: - printf_log(LOG_NONE, "Error, unhandled arg %d: '%c' in RunFunctionFmt\n", i, fmt[i]); - if(ni<6) emu->regs[nn[ni++]].q[0] = va_arg(va, uint64_t); else {*p = va_arg(va, uint64_t); ++p;}; - break; - } + int sizeof_ptr = sizeof(void*); + #ifdef BOX32 + if(box64_is32bits) { + Push_32(emu, R_EBP); // push ebp + R_RBP = R_ESP; // mov ebp, esp + sizeof_ptr = sizeof(ptr_t); + } else + #endif + { + Push64(emu, R_RBP); // push rbp + R_RBP = R_RSP; // mov rbp, rsp + } + + R_RSP -= stackn*sizeof_ptr; // need to push in reverse order + + #ifdef BOX32 + if(box64_is32bits) { + ptr_t *p = (ptr_t*)from_ptrv(R_ESP); + + #define GO(c, B, B2, N) case c: *((B*)p) = va_arg(va, B2); p+=N; break + va_list va; + va_start (va, fmt); + for (int i=0; fmt[i]; ++i) { + switch(fmt[i]) { + GO('f', float, double, 1); + GO('d', double, double, 2); + case 'p': *((ptr_t*)p) = to_ptrv(va_arg(va, void*)); p+=1; break; + GO('i', int, int, 1); + GO('u', uint32_t, uint32_t, 1); + GO('I', int64_t, int64_t, 2); + GO('U', uint64_t, uint64_t, 2); + GO('L', uint32_t, uint64_t, 1); // long are 64bits on 64bits system + GO('l', int32_t, int64_t, 1); // but 32bits on 32bits system + GO('w', int16_t, int, 1); + GO('W', uint16_t, int, 1); + GO('c', int8_t, int, 1); + GO('C', uint8_t, int, 1); + default: + printf_log(LOG_NONE, "Error, unhandled arg %d: '%c' in RunFunctionFmt\n", i, fmt[i]); + *p = va_arg(va, uint32_t); + ++p; + break; + } + } + #undef GO + va_end (va); + } else + #endif + { + uint64_t *p = (uint64_t*)R_RSP; + + static const int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9}; + #define GO(c, A, B, B2, C) case c: if(ni<6) emu->regs[nn[ni++]].A[0] = C va_arg(va, B2); else {*p = 0; *((B*)p) = va_arg(va, B2); ++p;}; break; + va_list va; + va_start (va, fmt); + for (int i=0; fmt[i]; ++i) { + switch(fmt[i]) { + case 'f': if(ndf<8) + emu->xmm[ndf++].f[0] = va_arg(va, double); // float are promoted to double in ... + else { + *p = 0; + *((float*)p) = va_arg(va, double); + ++p; + } + break; + case 'd': if(ndf<8) + emu->xmm[ndf++].d[0] = va_arg(va, double); + else { + *((double*)p) = va_arg(va, double); + ++p; + } + break; + GO('p', q, void*, void*, (uintptr_t)) + GO('i', sdword, int, int, ) + GO('u', dword, uint32_t, uint32_t, ) + GO('I', sq, int64_t, int64_t, ) + GO('U', q, uint64_t, uint64_t, ) + GO('L', q, uint64_t, uint64_t, ) + GO('l', sq, int64_t, int64_t, ) + GO('w', sword, int16_t, int, ) + GO('W', word, uint16_t, int, ) + GO('c', sbyte, int8_t, int, ) + GO('C', byte, uint8_t, int, ) + default: + printf_log(LOG_NONE, "Error, unhandled arg %d: '%c' in RunFunctionFmt\n", i, fmt[i]); + if(ni<6) emu->regs[nn[ni++]].q[0] = va_arg(va, uint64_t); else {*p = va_arg(va, uint64_t); ++p;}; + break; + } + } + #undef GO + va_end (va); } - va_end (va); uintptr_t oldip = R_RIP; DynaCall(emu, fnc); if(oldip==R_RIP) { - R_RSP = R_RBP; // mov rsp, rbp - R_RBP = Pop64(emu); // pop rbp + #ifdef BOX32 + if(box64_is32bits) { + R_RSP = R_EBP; // mov esp, ebp + R_RBP = Pop_32(emu); // pop ebp + } + #endif + { + R_RSP = R_RBP; // mov rsp, rbp + R_RBP = Pop64(emu); // pop rbp + } } - uint64_t ret = R_RAX; + uint64_t ret = box64_is32bits?((uint64_t)R_EAX | ((uint64_t)R_EDX)<<32):R_RAX; return ret; } @@ -148,6 +253,10 @@ EXPORTDYN uint64_t RunSafeFunction(uintptr_t fnc, int nargs, ...) { x64emu_t * emu = thread_get_emu(); + if(box64_is32bits) { + printf_log(LOG_NONE, "Calling RunSafeFunction in 32bits\n"); + abort(); + } int align = (nargs>6)?(((nargs-6)&1)):0; int stackn = align + ((nargs>6)?(nargs-6):0); @@ -222,28 +331,48 @@ uint64_t RunSafeFunction(uintptr_t fnc, int nargs, ...) EXPORTDYN uint64_t RunFunctionWithEmu(x64emu_t *emu, int QuitOnLongJump, uintptr_t fnc, int nargs, ...) { - int align = (nargs>6)?(((nargs-6)&1)):0; - int stackn = align + ((nargs>6)?(nargs-6):0); + #ifdef BOX32 + if(box64_is32bits) { + Push_32(emu, R_RBP); // push ebp + R_RBP = R_ESP; // mov ebp, esp - Push64(emu, R_RBP); // push rbp - R_RBP = R_RSP; // mov rbp, rsp + R_ESP -= nargs*4; // need to push in reverse order - R_RSP -= stackn*sizeof(void*); // need to push in reverse order + ptr_t *p = (ptr_t*)from_ptrv(R_ESP); - uint64_t *p = (uint64_t*)R_RSP; - - va_list va; - va_start (va, nargs); - for (int i=0; iregs[nn[i]].q[0] = va_arg(va, uint64_t); - } else { - *p = va_arg(va, uint64_t); + va_list va; + va_start (va, nargs); + for (int i=0; i6)?(((nargs-6)&1)):0; + int stackn = align + ((nargs>6)?(nargs-6):0); + + Push64(emu, R_RBP); // push rbp + R_RBP = R_RSP; // mov rbp, rsp + + R_RSP -= stackn*sizeof(void*); // need to push in reverse order + + uint64_t *p = (uint64_t*)R_RSP; + + va_list va; + va_start (va, nargs); + for (int i=0; iregs[nn[i]].q[0] = va_arg(va, uint64_t); + } else { + *p = va_arg(va, uint64_t); + p++; + } + } + va_end (va); } - va_end (va); uintptr_t oldip = R_RIP; int old_quit = emu->quit; @@ -256,20 +385,29 @@ uint64_t RunFunctionWithEmu(x64emu_t *emu, int QuitOnLongJump, uintptr_t fnc, in if(oldip==R_RIP) { R_RSP = R_RBP; // restore stack only if EIP is the one expected (else, it means return value is not the one expected) - R_RBP = Pop64(emu); //Pop EBP + #ifdef BOX32 + if(box64_is32bits) + R_RBP = Pop_32(emu); //Pop EBP + else + #endif + R_RBP = Pop64(emu); //Pop EBP } emu->quit = old_quit; emu->flags.quitonlongjmp = oldlong; - return R_RAX; + return box64_is32bits?((uint64_t)R_EAX | ((uint64_t)R_EDX)<<32):R_RAX;; } EXPORTDYN uint64_t RunFunctionWindows(uintptr_t fnc, int nargs, ...) { x64emu_t *emu = thread_get_emu(); + if(box64_is32bits) { + printf_log(LOG_NONE, "Calling RunFunctionWindows in 32bits\n"); + abort(); + } int align = (nargs>4)?(((nargs-4)&1)):0; int stackn = align + ((nargs>4)?(nargs-4):0); diff --git a/src/wrapped/generated/wrappedaluredefs.h b/src/wrapped/generated/wrappedaluredefs.h index 25481ebd..ed991ac9 100644 --- a/src/wrapped/generated/wrappedaluredefs.h +++ b/src/wrapped/generated/wrappedaluredefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalureDEFS_H_ #define __wrappedalureDEFS_H_ diff --git a/src/wrapped/generated/wrappedaluretypes.h b/src/wrapped/generated/wrappedaluretypes.h index 6026c995..e7ad2fc7 100644 --- a/src/wrapped/generated/wrappedaluretypes.h +++ b/src/wrapped/generated/wrappedaluretypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalureTYPES_H_ #define __wrappedalureTYPES_H_ diff --git a/src/wrapped/generated/wrappedalureundefs.h b/src/wrapped/generated/wrappedalureundefs.h index 35d18761..e831d08b 100644 --- a/src/wrapped/generated/wrappedalureundefs.h +++ b/src/wrapped/generated/wrappedalureundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalureUNDEFS_H_ #define __wrappedalureUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedalutdefs.h b/src/wrapped/generated/wrappedalutdefs.h index 932f9b40..4159e6ec 100644 --- a/src/wrapped/generated/wrappedalutdefs.h +++ b/src/wrapped/generated/wrappedalutdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalutDEFS_H_ #define __wrappedalutDEFS_H_ diff --git a/src/wrapped/generated/wrappedaluttypes.h b/src/wrapped/generated/wrappedaluttypes.h index fd59c671..143dde60 100644 --- a/src/wrapped/generated/wrappedaluttypes.h +++ b/src/wrapped/generated/wrappedaluttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalutTYPES_H_ #define __wrappedalutTYPES_H_ diff --git a/src/wrapped/generated/wrappedalutundefs.h b/src/wrapped/generated/wrappedalutundefs.h index 837ffbd3..97eb4984 100644 --- a/src/wrapped/generated/wrappedalutundefs.h +++ b/src/wrapped/generated/wrappedalutundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalutUNDEFS_H_ #define __wrappedalutUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedanldefs.h b/src/wrapped/generated/wrappedanldefs.h index 6c72df28..7edc8921 100644 --- a/src/wrapped/generated/wrappedanldefs.h +++ b/src/wrapped/generated/wrappedanldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedanlDEFS_H_ #define __wrappedanlDEFS_H_ diff --git a/src/wrapped/generated/wrappedanltypes.h b/src/wrapped/generated/wrappedanltypes.h index 4c56eb37..44ab3979 100644 --- a/src/wrapped/generated/wrappedanltypes.h +++ b/src/wrapped/generated/wrappedanltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedanlTYPES_H_ #define __wrappedanlTYPES_H_ diff --git a/src/wrapped/generated/wrappedanlundefs.h b/src/wrapped/generated/wrappedanlundefs.h index ed0ba39f..5da94bf1 100644 --- a/src/wrapped/generated/wrappedanlundefs.h +++ b/src/wrapped/generated/wrappedanlundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedanlUNDEFS_H_ #define __wrappedanlUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatkbridgedefs.h b/src/wrapped/generated/wrappedatkbridgedefs.h index a7aa9e4f..631d5a84 100644 --- a/src/wrapped/generated/wrappedatkbridgedefs.h +++ b/src/wrapped/generated/wrappedatkbridgedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkbridgeDEFS_H_ #define __wrappedatkbridgeDEFS_H_ diff --git a/src/wrapped/generated/wrappedatkbridgetypes.h b/src/wrapped/generated/wrappedatkbridgetypes.h index fc55a5e4..f564afe0 100644 --- a/src/wrapped/generated/wrappedatkbridgetypes.h +++ b/src/wrapped/generated/wrappedatkbridgetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkbridgeTYPES_H_ #define __wrappedatkbridgeTYPES_H_ diff --git a/src/wrapped/generated/wrappedatkbridgeundefs.h b/src/wrapped/generated/wrappedatkbridgeundefs.h index 2549ad2e..d3a6395c 100644 --- a/src/wrapped/generated/wrappedatkbridgeundefs.h +++ b/src/wrapped/generated/wrappedatkbridgeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkbridgeUNDEFS_H_ #define __wrappedatkbridgeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatkdefs.h b/src/wrapped/generated/wrappedatkdefs.h index e5408284..5c2f53a4 100644 --- a/src/wrapped/generated/wrappedatkdefs.h +++ b/src/wrapped/generated/wrappedatkdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkDEFS_H_ #define __wrappedatkDEFS_H_ diff --git a/src/wrapped/generated/wrappedatktypes.h b/src/wrapped/generated/wrappedatktypes.h index 98cae437..fe4417db 100644 --- a/src/wrapped/generated/wrappedatktypes.h +++ b/src/wrapped/generated/wrappedatktypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkTYPES_H_ #define __wrappedatkTYPES_H_ diff --git a/src/wrapped/generated/wrappedatkundefs.h b/src/wrapped/generated/wrappedatkundefs.h index c100ca47..d9b9ee9b 100644 --- a/src/wrapped/generated/wrappedatkundefs.h +++ b/src/wrapped/generated/wrappedatkundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkUNDEFS_H_ #define __wrappedatkUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatomicdefs.h b/src/wrapped/generated/wrappedatomicdefs.h index 7c0be638..98ebdcf6 100644 --- a/src/wrapped/generated/wrappedatomicdefs.h +++ b/src/wrapped/generated/wrappedatomicdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatomicDEFS_H_ #define __wrappedatomicDEFS_H_ diff --git a/src/wrapped/generated/wrappedatomictypes.h b/src/wrapped/generated/wrappedatomictypes.h index b7ef8829..8fb6ed69 100644 --- a/src/wrapped/generated/wrappedatomictypes.h +++ b/src/wrapped/generated/wrappedatomictypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatomicTYPES_H_ #define __wrappedatomicTYPES_H_ diff --git a/src/wrapped/generated/wrappedatomicundefs.h b/src/wrapped/generated/wrappedatomicundefs.h index 6a71a445..ad461c7d 100644 --- a/src/wrapped/generated/wrappedatomicundefs.h +++ b/src/wrapped/generated/wrappedatomicundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatomicUNDEFS_H_ #define __wrappedatomicUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatspidefs.h b/src/wrapped/generated/wrappedatspidefs.h index d7983847..06dd6d38 100644 --- a/src/wrapped/generated/wrappedatspidefs.h +++ b/src/wrapped/generated/wrappedatspidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatspiDEFS_H_ #define __wrappedatspiDEFS_H_ diff --git a/src/wrapped/generated/wrappedatspitypes.h b/src/wrapped/generated/wrappedatspitypes.h index 0293ae92..0a6b16c9 100644 --- a/src/wrapped/generated/wrappedatspitypes.h +++ b/src/wrapped/generated/wrappedatspitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatspiTYPES_H_ #define __wrappedatspiTYPES_H_ diff --git a/src/wrapped/generated/wrappedatspiundefs.h b/src/wrapped/generated/wrappedatspiundefs.h index 216cda26..fd308cc0 100644 --- a/src/wrapped/generated/wrappedatspiundefs.h +++ b/src/wrapped/generated/wrappedatspiundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatspiUNDEFS_H_ #define __wrappedatspiUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedayatanaappindicator3defs.h b/src/wrapped/generated/wrappedayatanaappindicator3defs.h index f5a970d2..33c49fd9 100644 --- a/src/wrapped/generated/wrappedayatanaappindicator3defs.h +++ b/src/wrapped/generated/wrappedayatanaappindicator3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedayatanaappindicator3DEFS_H_ #define __wrappedayatanaappindicator3DEFS_H_ diff --git a/src/wrapped/generated/wrappedayatanaappindicator3types.h b/src/wrapped/generated/wrappedayatanaappindicator3types.h index ac9dfa4c..fe1f19e3 100644 --- a/src/wrapped/generated/wrappedayatanaappindicator3types.h +++ b/src/wrapped/generated/wrappedayatanaappindicator3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedayatanaappindicator3TYPES_H_ #define __wrappedayatanaappindicator3TYPES_H_ diff --git a/src/wrapped/generated/wrappedayatanaappindicator3undefs.h b/src/wrapped/generated/wrappedayatanaappindicator3undefs.h index 35c9f4e9..f85739c2 100644 --- a/src/wrapped/generated/wrappedayatanaappindicator3undefs.h +++ b/src/wrapped/generated/wrappedayatanaappindicator3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedayatanaappindicator3UNDEFS_H_ #define __wrappedayatanaappindicator3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedbz2defs.h b/src/wrapped/generated/wrappedbz2defs.h index 7a94209b..0c38acef 100644 --- a/src/wrapped/generated/wrappedbz2defs.h +++ b/src/wrapped/generated/wrappedbz2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedbz2DEFS_H_ #define __wrappedbz2DEFS_H_ diff --git a/src/wrapped/generated/wrappedbz2types.h b/src/wrapped/generated/wrappedbz2types.h index cad85bc7..df8dea62 100644 --- a/src/wrapped/generated/wrappedbz2types.h +++ b/src/wrapped/generated/wrappedbz2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedbz2TYPES_H_ #define __wrappedbz2TYPES_H_ diff --git a/src/wrapped/generated/wrappedbz2undefs.h b/src/wrapped/generated/wrappedbz2undefs.h index 0285da9d..8930629c 100644 --- a/src/wrapped/generated/wrappedbz2undefs.h +++ b/src/wrapped/generated/wrappedbz2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedbz2UNDEFS_H_ #define __wrappedbz2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairodefs.h b/src/wrapped/generated/wrappedcairodefs.h index 3146a809..e7ddef2d 100644 --- a/src/wrapped/generated/wrappedcairodefs.h +++ b/src/wrapped/generated/wrappedcairodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairoDEFS_H_ #define __wrappedcairoDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairogobjectdefs.h b/src/wrapped/generated/wrappedcairogobjectdefs.h index 950015a2..18dd3139 100644 --- a/src/wrapped/generated/wrappedcairogobjectdefs.h +++ b/src/wrapped/generated/wrappedcairogobjectdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairogobjectDEFS_H_ #define __wrappedcairogobjectDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairogobjecttypes.h b/src/wrapped/generated/wrappedcairogobjecttypes.h index a7e969bd..35e48a25 100644 --- a/src/wrapped/generated/wrappedcairogobjecttypes.h +++ b/src/wrapped/generated/wrappedcairogobjecttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairogobjectTYPES_H_ #define __wrappedcairogobjectTYPES_H_ diff --git a/src/wrapped/generated/wrappedcairogobjectundefs.h b/src/wrapped/generated/wrappedcairogobjectundefs.h index 4f3da1b5..80947046 100644 --- a/src/wrapped/generated/wrappedcairogobjectundefs.h +++ b/src/wrapped/generated/wrappedcairogobjectundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairogobjectUNDEFS_H_ #define __wrappedcairogobjectUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairotypes.h b/src/wrapped/generated/wrappedcairotypes.h index 4020471b..703493b0 100644 --- a/src/wrapped/generated/wrappedcairotypes.h +++ b/src/wrapped/generated/wrappedcairotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairoTYPES_H_ #define __wrappedcairoTYPES_H_ diff --git a/src/wrapped/generated/wrappedcairoundefs.h b/src/wrapped/generated/wrappedcairoundefs.h index a3042b43..d416133e 100644 --- a/src/wrapped/generated/wrappedcairoundefs.h +++ b/src/wrapped/generated/wrappedcairoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairoUNDEFS_H_ #define __wrappedcairoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcapdefs.h b/src/wrapped/generated/wrappedcapdefs.h index 57c78f12..529e275c 100644 --- a/src/wrapped/generated/wrappedcapdefs.h +++ b/src/wrapped/generated/wrappedcapdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcapDEFS_H_ #define __wrappedcapDEFS_H_ diff --git a/src/wrapped/generated/wrappedcaptypes.h b/src/wrapped/generated/wrappedcaptypes.h index 3d18ce39..cc2e63c9 100644 --- a/src/wrapped/generated/wrappedcaptypes.h +++ b/src/wrapped/generated/wrappedcaptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcapTYPES_H_ #define __wrappedcapTYPES_H_ diff --git a/src/wrapped/generated/wrappedcapundefs.h b/src/wrapped/generated/wrappedcapundefs.h index 87967b4a..dfcfee25 100644 --- a/src/wrapped/generated/wrappedcapundefs.h +++ b/src/wrapped/generated/wrappedcapundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcapUNDEFS_H_ #define __wrappedcapUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcrashhandlerdefs.h b/src/wrapped/generated/wrappedcrashhandlerdefs.h index 36c4d36c..ae1f5f6b 100644 --- a/src/wrapped/generated/wrappedcrashhandlerdefs.h +++ b/src/wrapped/generated/wrappedcrashhandlerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrashhandlerDEFS_H_ #define __wrappedcrashhandlerDEFS_H_ diff --git a/src/wrapped/generated/wrappedcrashhandlertypes.h b/src/wrapped/generated/wrappedcrashhandlertypes.h index 2acab702..16d8480b 100644 --- a/src/wrapped/generated/wrappedcrashhandlertypes.h +++ b/src/wrapped/generated/wrappedcrashhandlertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrashhandlerTYPES_H_ #define __wrappedcrashhandlerTYPES_H_ diff --git a/src/wrapped/generated/wrappedcrashhandlerundefs.h b/src/wrapped/generated/wrappedcrashhandlerundefs.h index 3fb6554d..c584ed08 100644 --- a/src/wrapped/generated/wrappedcrashhandlerundefs.h +++ b/src/wrapped/generated/wrappedcrashhandlerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrashhandlerUNDEFS_H_ #define __wrappedcrashhandlerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcrypto3defs.h b/src/wrapped/generated/wrappedcrypto3defs.h index c6874fbf..0c92c187 100644 --- a/src/wrapped/generated/wrappedcrypto3defs.h +++ b/src/wrapped/generated/wrappedcrypto3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrypto3DEFS_H_ #define __wrappedcrypto3DEFS_H_ diff --git a/src/wrapped/generated/wrappedcrypto3types.h b/src/wrapped/generated/wrappedcrypto3types.h index 175bea56..d8ab308d 100644 --- a/src/wrapped/generated/wrappedcrypto3types.h +++ b/src/wrapped/generated/wrappedcrypto3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrypto3TYPES_H_ #define __wrappedcrypto3TYPES_H_ diff --git a/src/wrapped/generated/wrappedcrypto3undefs.h b/src/wrapped/generated/wrappedcrypto3undefs.h index 1e82efc0..6285fa6c 100644 --- a/src/wrapped/generated/wrappedcrypto3undefs.h +++ b/src/wrapped/generated/wrappedcrypto3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrypto3UNDEFS_H_ #define __wrappedcrypto3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcryptodefs.h b/src/wrapped/generated/wrappedcryptodefs.h index 2a2f3c2c..8031208e 100644 --- a/src/wrapped/generated/wrappedcryptodefs.h +++ b/src/wrapped/generated/wrappedcryptodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcryptoDEFS_H_ #define __wrappedcryptoDEFS_H_ diff --git a/src/wrapped/generated/wrappedcryptotypes.h b/src/wrapped/generated/wrappedcryptotypes.h index 6a9de7b4..1376ebcc 100644 --- a/src/wrapped/generated/wrappedcryptotypes.h +++ b/src/wrapped/generated/wrappedcryptotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcryptoTYPES_H_ #define __wrappedcryptoTYPES_H_ diff --git a/src/wrapped/generated/wrappedcryptoundefs.h b/src/wrapped/generated/wrappedcryptoundefs.h index 0604af4f..45344ad0 100644 --- a/src/wrapped/generated/wrappedcryptoundefs.h +++ b/src/wrapped/generated/wrappedcryptoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcryptoUNDEFS_H_ #define __wrappedcryptoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcurldefs.h b/src/wrapped/generated/wrappedcurldefs.h index 6e2dd59c..cf888633 100644 --- a/src/wrapped/generated/wrappedcurldefs.h +++ b/src/wrapped/generated/wrappedcurldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcurlDEFS_H_ #define __wrappedcurlDEFS_H_ diff --git a/src/wrapped/generated/wrappedcurltypes.h b/src/wrapped/generated/wrappedcurltypes.h index 5576f7a6..b5fee462 100644 --- a/src/wrapped/generated/wrappedcurltypes.h +++ b/src/wrapped/generated/wrappedcurltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcurlTYPES_H_ #define __wrappedcurlTYPES_H_ diff --git a/src/wrapped/generated/wrappedcurlundefs.h b/src/wrapped/generated/wrappedcurlundefs.h index 1b785a42..b0e50301 100644 --- a/src/wrapped/generated/wrappedcurlundefs.h +++ b/src/wrapped/generated/wrappedcurlundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcurlUNDEFS_H_ #define __wrappedcurlUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedd3dadapter9defs.h b/src/wrapped/generated/wrappedd3dadapter9defs.h index 80a0f1b5..fa28fe94 100644 --- a/src/wrapped/generated/wrappedd3dadapter9defs.h +++ b/src/wrapped/generated/wrappedd3dadapter9defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedd3dadapter9DEFS_H_ #define __wrappedd3dadapter9DEFS_H_ diff --git a/src/wrapped/generated/wrappedd3dadapter9types.h b/src/wrapped/generated/wrappedd3dadapter9types.h index c09cdf39..53c6d875 100644 --- a/src/wrapped/generated/wrappedd3dadapter9types.h +++ b/src/wrapped/generated/wrappedd3dadapter9types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedd3dadapter9TYPES_H_ #define __wrappedd3dadapter9TYPES_H_ diff --git a/src/wrapped/generated/wrappedd3dadapter9undefs.h b/src/wrapped/generated/wrappedd3dadapter9undefs.h index d6dd2ebf..7bdde12e 100644 --- a/src/wrapped/generated/wrappedd3dadapter9undefs.h +++ b/src/wrapped/generated/wrappedd3dadapter9undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedd3dadapter9UNDEFS_H_ #define __wrappedd3dadapter9UNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusdefs.h b/src/wrapped/generated/wrappeddbusdefs.h index 28ece645..afebbfbd 100644 --- a/src/wrapped/generated/wrappeddbusdefs.h +++ b/src/wrapped/generated/wrappeddbusdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusDEFS_H_ #define __wrappeddbusDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusglib1defs.h b/src/wrapped/generated/wrappeddbusglib1defs.h index bf9d1ef1..35aa676f 100644 --- a/src/wrapped/generated/wrappeddbusglib1defs.h +++ b/src/wrapped/generated/wrappeddbusglib1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusglib1DEFS_H_ #define __wrappeddbusglib1DEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusglib1types.h b/src/wrapped/generated/wrappeddbusglib1types.h index a6b57cf2..199693aa 100644 --- a/src/wrapped/generated/wrappeddbusglib1types.h +++ b/src/wrapped/generated/wrappeddbusglib1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusglib1TYPES_H_ #define __wrappeddbusglib1TYPES_H_ diff --git a/src/wrapped/generated/wrappeddbusglib1undefs.h b/src/wrapped/generated/wrappeddbusglib1undefs.h index c77048c0..eb12da9d 100644 --- a/src/wrapped/generated/wrappeddbusglib1undefs.h +++ b/src/wrapped/generated/wrappeddbusglib1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusglib1UNDEFS_H_ #define __wrappeddbusglib1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusmenuglibdefs.h b/src/wrapped/generated/wrappeddbusmenuglibdefs.h index e8e738c4..3ac3cad4 100644 --- a/src/wrapped/generated/wrappeddbusmenuglibdefs.h +++ b/src/wrapped/generated/wrappeddbusmenuglibdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusmenuglibDEFS_H_ #define __wrappeddbusmenuglibDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusmenuglibtypes.h b/src/wrapped/generated/wrappeddbusmenuglibtypes.h index c795e242..850324f1 100644 --- a/src/wrapped/generated/wrappeddbusmenuglibtypes.h +++ b/src/wrapped/generated/wrappeddbusmenuglibtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusmenuglibTYPES_H_ #define __wrappeddbusmenuglibTYPES_H_ diff --git a/src/wrapped/generated/wrappeddbusmenuglibundefs.h b/src/wrapped/generated/wrappeddbusmenuglibundefs.h index 93f1f962..3158cdb8 100644 --- a/src/wrapped/generated/wrappeddbusmenuglibundefs.h +++ b/src/wrapped/generated/wrappeddbusmenuglibundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusmenuglibUNDEFS_H_ #define __wrappeddbusmenuglibUNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbustypes.h b/src/wrapped/generated/wrappeddbustypes.h index c19729f2..2b18d783 100644 --- a/src/wrapped/generated/wrappeddbustypes.h +++ b/src/wrapped/generated/wrappeddbustypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusTYPES_H_ #define __wrappeddbusTYPES_H_ diff --git a/src/wrapped/generated/wrappeddbusundefs.h b/src/wrapped/generated/wrappeddbusundefs.h index e0e5f799..1d906a1d 100644 --- a/src/wrapped/generated/wrappeddbusundefs.h +++ b/src/wrapped/generated/wrappeddbusundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusUNDEFS_H_ #define __wrappeddbusUNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddecor0defs.h b/src/wrapped/generated/wrappeddecor0defs.h index 3f8696fd..2d83b3e7 100644 --- a/src/wrapped/generated/wrappeddecor0defs.h +++ b/src/wrapped/generated/wrappeddecor0defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddecor0DEFS_H_ #define __wrappeddecor0DEFS_H_ diff --git a/src/wrapped/generated/wrappeddecor0types.h b/src/wrapped/generated/wrappeddecor0types.h index 6fa92b9e..fcf2ff9d 100644 --- a/src/wrapped/generated/wrappeddecor0types.h +++ b/src/wrapped/generated/wrappeddecor0types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddecor0TYPES_H_ #define __wrappeddecor0TYPES_H_ diff --git a/src/wrapped/generated/wrappeddecor0undefs.h b/src/wrapped/generated/wrappeddecor0undefs.h index 8d7a76f2..3811b5bf 100644 --- a/src/wrapped/generated/wrappeddecor0undefs.h +++ b/src/wrapped/generated/wrappeddecor0undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddecor0UNDEFS_H_ #define __wrappeddecor0UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedevent21defs.h b/src/wrapped/generated/wrappedevent21defs.h index 8a79789f..5c0526c4 100644 --- a/src/wrapped/generated/wrappedevent21defs.h +++ b/src/wrapped/generated/wrappedevent21defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedevent21DEFS_H_ #define __wrappedevent21DEFS_H_ diff --git a/src/wrapped/generated/wrappedevent21types.h b/src/wrapped/generated/wrappedevent21types.h index dcee212e..742455d6 100644 --- a/src/wrapped/generated/wrappedevent21types.h +++ b/src/wrapped/generated/wrappedevent21types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedevent21TYPES_H_ #define __wrappedevent21TYPES_H_ diff --git a/src/wrapped/generated/wrappedevent21undefs.h b/src/wrapped/generated/wrappedevent21undefs.h index e0cd3b7c..6892fb37 100644 --- a/src/wrapped/generated/wrappedevent21undefs.h +++ b/src/wrapped/generated/wrappedevent21undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedevent21UNDEFS_H_ #define __wrappedevent21UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedexpatdefs.h b/src/wrapped/generated/wrappedexpatdefs.h index c142fbd9..2283f92a 100644 --- a/src/wrapped/generated/wrappedexpatdefs.h +++ b/src/wrapped/generated/wrappedexpatdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedexpatDEFS_H_ #define __wrappedexpatDEFS_H_ diff --git a/src/wrapped/generated/wrappedexpattypes.h b/src/wrapped/generated/wrappedexpattypes.h index 958436dc..ee8153a4 100644 --- a/src/wrapped/generated/wrappedexpattypes.h +++ b/src/wrapped/generated/wrappedexpattypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedexpatTYPES_H_ #define __wrappedexpatTYPES_H_ diff --git a/src/wrapped/generated/wrappedexpatundefs.h b/src/wrapped/generated/wrappedexpatundefs.h index 7c0e0b44..580e5c66 100644 --- a/src/wrapped/generated/wrappedexpatundefs.h +++ b/src/wrapped/generated/wrappedexpatundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedexpatUNDEFS_H_ #define __wrappedexpatUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfaudiodefs.h b/src/wrapped/generated/wrappedfaudiodefs.h index 6e118b8b..971648cb 100644 --- a/src/wrapped/generated/wrappedfaudiodefs.h +++ b/src/wrapped/generated/wrappedfaudiodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfaudioDEFS_H_ #define __wrappedfaudioDEFS_H_ diff --git a/src/wrapped/generated/wrappedfaudiotypes.h b/src/wrapped/generated/wrappedfaudiotypes.h index 1676f6f2..2e818b48 100644 --- a/src/wrapped/generated/wrappedfaudiotypes.h +++ b/src/wrapped/generated/wrappedfaudiotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfaudioTYPES_H_ #define __wrappedfaudioTYPES_H_ diff --git a/src/wrapped/generated/wrappedfaudioundefs.h b/src/wrapped/generated/wrappedfaudioundefs.h index f5e9c2af..30cb2328 100644 --- a/src/wrapped/generated/wrappedfaudioundefs.h +++ b/src/wrapped/generated/wrappedfaudioundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfaudioUNDEFS_H_ #define __wrappedfaudioUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedflacdefs.h b/src/wrapped/generated/wrappedflacdefs.h index 752417ca..5ac0fa74 100644 --- a/src/wrapped/generated/wrappedflacdefs.h +++ b/src/wrapped/generated/wrappedflacdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedflacDEFS_H_ #define __wrappedflacDEFS_H_ diff --git a/src/wrapped/generated/wrappedflactypes.h b/src/wrapped/generated/wrappedflactypes.h index 17fcd7a4..26ddc696 100644 --- a/src/wrapped/generated/wrappedflactypes.h +++ b/src/wrapped/generated/wrappedflactypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedflacTYPES_H_ #define __wrappedflacTYPES_H_ diff --git a/src/wrapped/generated/wrappedflacundefs.h b/src/wrapped/generated/wrappedflacundefs.h index c4ea0182..38d7d703 100644 --- a/src/wrapped/generated/wrappedflacundefs.h +++ b/src/wrapped/generated/wrappedflacundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedflacUNDEFS_H_ #define __wrappedflacUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfontconfigdefs.h b/src/wrapped/generated/wrappedfontconfigdefs.h index db507edc..8e56edf8 100644 --- a/src/wrapped/generated/wrappedfontconfigdefs.h +++ b/src/wrapped/generated/wrappedfontconfigdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfontconfigDEFS_H_ #define __wrappedfontconfigDEFS_H_ diff --git a/src/wrapped/generated/wrappedfontconfigtypes.h b/src/wrapped/generated/wrappedfontconfigtypes.h index f3e8d29d..036b90b5 100644 --- a/src/wrapped/generated/wrappedfontconfigtypes.h +++ b/src/wrapped/generated/wrappedfontconfigtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfontconfigTYPES_H_ #define __wrappedfontconfigTYPES_H_ diff --git a/src/wrapped/generated/wrappedfontconfigundefs.h b/src/wrapped/generated/wrappedfontconfigundefs.h index 4bdce179..5ddcc45c 100644 --- a/src/wrapped/generated/wrappedfontconfigundefs.h +++ b/src/wrapped/generated/wrappedfontconfigundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfontconfigUNDEFS_H_ #define __wrappedfontconfigUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfreebl3defs.h b/src/wrapped/generated/wrappedfreebl3defs.h index 33db283d..5eb127d0 100644 --- a/src/wrapped/generated/wrappedfreebl3defs.h +++ b/src/wrapped/generated/wrappedfreebl3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreebl3DEFS_H_ #define __wrappedfreebl3DEFS_H_ diff --git a/src/wrapped/generated/wrappedfreebl3types.h b/src/wrapped/generated/wrappedfreebl3types.h index 8468e9c5..fa0925b6 100644 --- a/src/wrapped/generated/wrappedfreebl3types.h +++ b/src/wrapped/generated/wrappedfreebl3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreebl3TYPES_H_ #define __wrappedfreebl3TYPES_H_ diff --git a/src/wrapped/generated/wrappedfreebl3undefs.h b/src/wrapped/generated/wrappedfreebl3undefs.h index 88b22d7d..a03330d7 100644 --- a/src/wrapped/generated/wrappedfreebl3undefs.h +++ b/src/wrapped/generated/wrappedfreebl3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreebl3UNDEFS_H_ #define __wrappedfreebl3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfreetypedefs.h b/src/wrapped/generated/wrappedfreetypedefs.h index fc2eb27d..50fd7cb0 100644 --- a/src/wrapped/generated/wrappedfreetypedefs.h +++ b/src/wrapped/generated/wrappedfreetypedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreetypeDEFS_H_ #define __wrappedfreetypeDEFS_H_ diff --git a/src/wrapped/generated/wrappedfreetypetypes.h b/src/wrapped/generated/wrappedfreetypetypes.h index eb85cbb9..44d67d1f 100644 --- a/src/wrapped/generated/wrappedfreetypetypes.h +++ b/src/wrapped/generated/wrappedfreetypetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreetypeTYPES_H_ #define __wrappedfreetypeTYPES_H_ diff --git a/src/wrapped/generated/wrappedfreetypeundefs.h b/src/wrapped/generated/wrappedfreetypeundefs.h index 6b477c39..1c7663d8 100644 --- a/src/wrapped/generated/wrappedfreetypeundefs.h +++ b/src/wrapped/generated/wrappedfreetypeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreetypeUNDEFS_H_ #define __wrappedfreetypeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgbmdefs.h b/src/wrapped/generated/wrappedgbmdefs.h index 7e238831..4307e0dd 100644 --- a/src/wrapped/generated/wrappedgbmdefs.h +++ b/src/wrapped/generated/wrappedgbmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgbmDEFS_H_ #define __wrappedgbmDEFS_H_ diff --git a/src/wrapped/generated/wrappedgbmtypes.h b/src/wrapped/generated/wrappedgbmtypes.h index c45641fb..44605146 100644 --- a/src/wrapped/generated/wrappedgbmtypes.h +++ b/src/wrapped/generated/wrappedgbmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgbmTYPES_H_ #define __wrappedgbmTYPES_H_ diff --git a/src/wrapped/generated/wrappedgbmundefs.h b/src/wrapped/generated/wrappedgbmundefs.h index 9f4e891b..71f533d2 100644 --- a/src/wrapped/generated/wrappedgbmundefs.h +++ b/src/wrapped/generated/wrappedgbmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgbmUNDEFS_H_ #define __wrappedgbmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgconf2defs.h b/src/wrapped/generated/wrappedgconf2defs.h index 56cf7acd..f8f24214 100644 --- a/src/wrapped/generated/wrappedgconf2defs.h +++ b/src/wrapped/generated/wrappedgconf2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgconf2DEFS_H_ #define __wrappedgconf2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgconf2types.h b/src/wrapped/generated/wrappedgconf2types.h index 356c6518..e4f1a721 100644 --- a/src/wrapped/generated/wrappedgconf2types.h +++ b/src/wrapped/generated/wrappedgconf2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgconf2TYPES_H_ #define __wrappedgconf2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgconf2undefs.h b/src/wrapped/generated/wrappedgconf2undefs.h index 806ab5b1..69376de0 100644 --- a/src/wrapped/generated/wrappedgconf2undefs.h +++ b/src/wrapped/generated/wrappedgconf2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgconf2UNDEFS_H_ #define __wrappedgconf2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgcryptdefs.h b/src/wrapped/generated/wrappedgcryptdefs.h index 47ea49ca..e810394d 100644 --- a/src/wrapped/generated/wrappedgcryptdefs.h +++ b/src/wrapped/generated/wrappedgcryptdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgcryptDEFS_H_ #define __wrappedgcryptDEFS_H_ diff --git a/src/wrapped/generated/wrappedgcrypttypes.h b/src/wrapped/generated/wrappedgcrypttypes.h index 07785d69..7ae0d91f 100644 --- a/src/wrapped/generated/wrappedgcrypttypes.h +++ b/src/wrapped/generated/wrappedgcrypttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgcryptTYPES_H_ #define __wrappedgcryptTYPES_H_ diff --git a/src/wrapped/generated/wrappedgcryptundefs.h b/src/wrapped/generated/wrappedgcryptundefs.h index 69c2e6f3..650917fb 100644 --- a/src/wrapped/generated/wrappedgcryptundefs.h +++ b/src/wrapped/generated/wrappedgcryptundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgcryptUNDEFS_H_ #define __wrappedgcryptUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgdk3defs.h b/src/wrapped/generated/wrappedgdk3defs.h index 2d2c754e..8a7f3ee7 100644 --- a/src/wrapped/generated/wrappedgdk3defs.h +++ b/src/wrapped/generated/wrappedgdk3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdk3DEFS_H_ #define __wrappedgdk3DEFS_H_ diff --git a/src/wrapped/generated/wrappedgdk3types.h b/src/wrapped/generated/wrappedgdk3types.h index 9fef4666..1ce09545 100644 --- a/src/wrapped/generated/wrappedgdk3types.h +++ b/src/wrapped/generated/wrappedgdk3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdk3TYPES_H_ #define __wrappedgdk3TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdk3undefs.h b/src/wrapped/generated/wrappedgdk3undefs.h index 2b636c1e..5d2f1896 100644 --- a/src/wrapped/generated/wrappedgdk3undefs.h +++ b/src/wrapped/generated/wrappedgdk3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdk3UNDEFS_H_ #define __wrappedgdk3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkpixbuf2defs.h b/src/wrapped/generated/wrappedgdkpixbuf2defs.h index b0f2a7e1..63a0a528 100644 --- a/src/wrapped/generated/wrappedgdkpixbuf2defs.h +++ b/src/wrapped/generated/wrappedgdkpixbuf2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkpixbuf2DEFS_H_ #define __wrappedgdkpixbuf2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkpixbuf2types.h b/src/wrapped/generated/wrappedgdkpixbuf2types.h index 57e0d38f..f7457e91 100644 --- a/src/wrapped/generated/wrappedgdkpixbuf2types.h +++ b/src/wrapped/generated/wrappedgdkpixbuf2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkpixbuf2TYPES_H_ #define __wrappedgdkpixbuf2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdkpixbuf2undefs.h b/src/wrapped/generated/wrappedgdkpixbuf2undefs.h index 0a6750f0..1ade154b 100644 --- a/src/wrapped/generated/wrappedgdkpixbuf2undefs.h +++ b/src/wrapped/generated/wrappedgdkpixbuf2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkpixbuf2UNDEFS_H_ #define __wrappedgdkpixbuf2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkx112defs.h b/src/wrapped/generated/wrappedgdkx112defs.h index bd316824..a4067646 100644 --- a/src/wrapped/generated/wrappedgdkx112defs.h +++ b/src/wrapped/generated/wrappedgdkx112defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkx112DEFS_H_ #define __wrappedgdkx112DEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkx112types.h b/src/wrapped/generated/wrappedgdkx112types.h index 4b36cbf4..87cfd23f 100644 --- a/src/wrapped/generated/wrappedgdkx112types.h +++ b/src/wrapped/generated/wrappedgdkx112types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkx112TYPES_H_ #define __wrappedgdkx112TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdkx112undefs.h b/src/wrapped/generated/wrappedgdkx112undefs.h index 308cf824..39425e2e 100644 --- a/src/wrapped/generated/wrappedgdkx112undefs.h +++ b/src/wrapped/generated/wrappedgdkx112undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkx112UNDEFS_H_ #define __wrappedgdkx112UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgio2defs.h b/src/wrapped/generated/wrappedgio2defs.h index c9fad231..291981f6 100644 --- a/src/wrapped/generated/wrappedgio2defs.h +++ b/src/wrapped/generated/wrappedgio2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgio2DEFS_H_ #define __wrappedgio2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgio2types.h b/src/wrapped/generated/wrappedgio2types.h index 00790100..0176f2ba 100644 --- a/src/wrapped/generated/wrappedgio2types.h +++ b/src/wrapped/generated/wrappedgio2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgio2TYPES_H_ #define __wrappedgio2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgio2undefs.h b/src/wrapped/generated/wrappedgio2undefs.h index f14e77aa..28d43472 100644 --- a/src/wrapped/generated/wrappedgio2undefs.h +++ b/src/wrapped/generated/wrappedgio2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgio2UNDEFS_H_ #define __wrappedgio2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedglesv2defs.h b/src/wrapped/generated/wrappedglesv2defs.h index 26d20e5a..d3413bb6 100644 --- a/src/wrapped/generated/wrappedglesv2defs.h +++ b/src/wrapped/generated/wrappedglesv2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglesv2DEFS_H_ #define __wrappedglesv2DEFS_H_ diff --git a/src/wrapped/generated/wrappedglesv2types.h b/src/wrapped/generated/wrappedglesv2types.h index 586fe02b..e377afe0 100644 --- a/src/wrapped/generated/wrappedglesv2types.h +++ b/src/wrapped/generated/wrappedglesv2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglesv2TYPES_H_ #define __wrappedglesv2TYPES_H_ diff --git a/src/wrapped/generated/wrappedglesv2undefs.h b/src/wrapped/generated/wrappedglesv2undefs.h index 9362f423..f09da98b 100644 --- a/src/wrapped/generated/wrappedglesv2undefs.h +++ b/src/wrapped/generated/wrappedglesv2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglesv2UNDEFS_H_ #define __wrappedglesv2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedglib2defs.h b/src/wrapped/generated/wrappedglib2defs.h index e203aa2b..9ce6fc0f 100644 --- a/src/wrapped/generated/wrappedglib2defs.h +++ b/src/wrapped/generated/wrappedglib2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglib2DEFS_H_ #define __wrappedglib2DEFS_H_ diff --git a/src/wrapped/generated/wrappedglib2types.h b/src/wrapped/generated/wrappedglib2types.h index fc81f779..7215b932 100644 --- a/src/wrapped/generated/wrappedglib2types.h +++ b/src/wrapped/generated/wrappedglib2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglib2TYPES_H_ #define __wrappedglib2TYPES_H_ diff --git a/src/wrapped/generated/wrappedglib2undefs.h b/src/wrapped/generated/wrappedglib2undefs.h index f6d5f437..d1aa2403 100644 --- a/src/wrapped/generated/wrappedglib2undefs.h +++ b/src/wrapped/generated/wrappedglib2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglib2UNDEFS_H_ #define __wrappedglib2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgmodule2defs.h b/src/wrapped/generated/wrappedgmodule2defs.h index 297d418b..1f408822 100644 --- a/src/wrapped/generated/wrappedgmodule2defs.h +++ b/src/wrapped/generated/wrappedgmodule2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmodule2DEFS_H_ #define __wrappedgmodule2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgmodule2types.h b/src/wrapped/generated/wrappedgmodule2types.h index 96576d22..17882f8a 100644 --- a/src/wrapped/generated/wrappedgmodule2types.h +++ b/src/wrapped/generated/wrappedgmodule2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmodule2TYPES_H_ #define __wrappedgmodule2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgmodule2undefs.h b/src/wrapped/generated/wrappedgmodule2undefs.h index 37761994..2dff2048 100644 --- a/src/wrapped/generated/wrappedgmodule2undefs.h +++ b/src/wrapped/generated/wrappedgmodule2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmodule2UNDEFS_H_ #define __wrappedgmodule2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgmpdefs.h b/src/wrapped/generated/wrappedgmpdefs.h index 48916e6b..10cdeacf 100644 --- a/src/wrapped/generated/wrappedgmpdefs.h +++ b/src/wrapped/generated/wrappedgmpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmpDEFS_H_ #define __wrappedgmpDEFS_H_ diff --git a/src/wrapped/generated/wrappedgmptypes.h b/src/wrapped/generated/wrappedgmptypes.h index c7a54de0..4073c73a 100644 --- a/src/wrapped/generated/wrappedgmptypes.h +++ b/src/wrapped/generated/wrappedgmptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmpTYPES_H_ #define __wrappedgmpTYPES_H_ diff --git a/src/wrapped/generated/wrappedgmpundefs.h b/src/wrapped/generated/wrappedgmpundefs.h index 514a6c09..310c09b6 100644 --- a/src/wrapped/generated/wrappedgmpundefs.h +++ b/src/wrapped/generated/wrappedgmpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmpUNDEFS_H_ #define __wrappedgmpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgnutlsdefs.h b/src/wrapped/generated/wrappedgnutlsdefs.h index c7178490..c3b0cf26 100644 --- a/src/wrapped/generated/wrappedgnutlsdefs.h +++ b/src/wrapped/generated/wrappedgnutlsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgnutlsDEFS_H_ #define __wrappedgnutlsDEFS_H_ diff --git a/src/wrapped/generated/wrappedgnutlstypes.h b/src/wrapped/generated/wrappedgnutlstypes.h index 37272839..fc5a2758 100644 --- a/src/wrapped/generated/wrappedgnutlstypes.h +++ b/src/wrapped/generated/wrappedgnutlstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgnutlsTYPES_H_ #define __wrappedgnutlsTYPES_H_ diff --git a/src/wrapped/generated/wrappedgnutlsundefs.h b/src/wrapped/generated/wrappedgnutlsundefs.h index 8ab689c7..a33f3f5f 100644 --- a/src/wrapped/generated/wrappedgnutlsundefs.h +++ b/src/wrapped/generated/wrappedgnutlsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgnutlsUNDEFS_H_ #define __wrappedgnutlsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgobject2defs.h b/src/wrapped/generated/wrappedgobject2defs.h index 0f36947b..d0cfb465 100644 --- a/src/wrapped/generated/wrappedgobject2defs.h +++ b/src/wrapped/generated/wrappedgobject2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgobject2DEFS_H_ #define __wrappedgobject2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgobject2types.h b/src/wrapped/generated/wrappedgobject2types.h index d7a8f665..7cbd4625 100644 --- a/src/wrapped/generated/wrappedgobject2types.h +++ b/src/wrapped/generated/wrappedgobject2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgobject2TYPES_H_ #define __wrappedgobject2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgobject2undefs.h b/src/wrapped/generated/wrappedgobject2undefs.h index 5b5b37b9..d8f7d81f 100644 --- a/src/wrapped/generated/wrappedgobject2undefs.h +++ b/src/wrapped/generated/wrappedgobject2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgobject2UNDEFS_H_ #define __wrappedgobject2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgompdefs.h b/src/wrapped/generated/wrappedgompdefs.h index 5618a4d1..cf407c67 100644 --- a/src/wrapped/generated/wrappedgompdefs.h +++ b/src/wrapped/generated/wrappedgompdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgompDEFS_H_ #define __wrappedgompDEFS_H_ diff --git a/src/wrapped/generated/wrappedgomptypes.h b/src/wrapped/generated/wrappedgomptypes.h index 4b0d4c01..6ba360a1 100644 --- a/src/wrapped/generated/wrappedgomptypes.h +++ b/src/wrapped/generated/wrappedgomptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgompTYPES_H_ #define __wrappedgompTYPES_H_ diff --git a/src/wrapped/generated/wrappedgompundefs.h b/src/wrapped/generated/wrappedgompundefs.h index ae3271f1..8917656d 100644 --- a/src/wrapped/generated/wrappedgompundefs.h +++ b/src/wrapped/generated/wrappedgompundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgompUNDEFS_H_ #define __wrappedgompUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapidefs.h b/src/wrapped/generated/wrappedgssapidefs.h index 85b82b8e..2342552e 100644 --- a/src/wrapped/generated/wrappedgssapidefs.h +++ b/src/wrapped/generated/wrappedgssapidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapiDEFS_H_ #define __wrappedgssapiDEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapikrb5defs.h b/src/wrapped/generated/wrappedgssapikrb5defs.h index 423cee13..22a1dc0c 100644 --- a/src/wrapped/generated/wrappedgssapikrb5defs.h +++ b/src/wrapped/generated/wrappedgssapikrb5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapikrb5DEFS_H_ #define __wrappedgssapikrb5DEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapikrb5types.h b/src/wrapped/generated/wrappedgssapikrb5types.h index 2f2c3cd5..5c7aeb3b 100644 --- a/src/wrapped/generated/wrappedgssapikrb5types.h +++ b/src/wrapped/generated/wrappedgssapikrb5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapikrb5TYPES_H_ #define __wrappedgssapikrb5TYPES_H_ diff --git a/src/wrapped/generated/wrappedgssapikrb5undefs.h b/src/wrapped/generated/wrappedgssapikrb5undefs.h index a2be1c3e..46c6936e 100644 --- a/src/wrapped/generated/wrappedgssapikrb5undefs.h +++ b/src/wrapped/generated/wrappedgssapikrb5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapikrb5UNDEFS_H_ #define __wrappedgssapikrb5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapitypes.h b/src/wrapped/generated/wrappedgssapitypes.h index 3d4ee9fe..b628366a 100644 --- a/src/wrapped/generated/wrappedgssapitypes.h +++ b/src/wrapped/generated/wrappedgssapitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapiTYPES_H_ #define __wrappedgssapiTYPES_H_ diff --git a/src/wrapped/generated/wrappedgssapiundefs.h b/src/wrapped/generated/wrappedgssapiundefs.h index c5512ffc..7eca10db 100644 --- a/src/wrapped/generated/wrappedgssapiundefs.h +++ b/src/wrapped/generated/wrappedgssapiundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapiUNDEFS_H_ #define __wrappedgssapiUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstallocatorsdefs.h b/src/wrapped/generated/wrappedgstallocatorsdefs.h index c45e3cf8..0bc601ff 100644 --- a/src/wrapped/generated/wrappedgstallocatorsdefs.h +++ b/src/wrapped/generated/wrappedgstallocatorsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstallocatorsDEFS_H_ #define __wrappedgstallocatorsDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstallocatorstypes.h b/src/wrapped/generated/wrappedgstallocatorstypes.h index a98a8a1d..e3f0c4da 100644 --- a/src/wrapped/generated/wrappedgstallocatorstypes.h +++ b/src/wrapped/generated/wrappedgstallocatorstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstallocatorsTYPES_H_ #define __wrappedgstallocatorsTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstallocatorsundefs.h b/src/wrapped/generated/wrappedgstallocatorsundefs.h index c672c705..676204d3 100644 --- a/src/wrapped/generated/wrappedgstallocatorsundefs.h +++ b/src/wrapped/generated/wrappedgstallocatorsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstallocatorsUNDEFS_H_ #define __wrappedgstallocatorsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstappdefs.h b/src/wrapped/generated/wrappedgstappdefs.h index 35f3ab34..e7f6a901 100644 --- a/src/wrapped/generated/wrappedgstappdefs.h +++ b/src/wrapped/generated/wrappedgstappdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstappDEFS_H_ #define __wrappedgstappDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstapptypes.h b/src/wrapped/generated/wrappedgstapptypes.h index 4ffbaf81..0c153dfe 100644 --- a/src/wrapped/generated/wrappedgstapptypes.h +++ b/src/wrapped/generated/wrappedgstapptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstappTYPES_H_ #define __wrappedgstappTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstappundefs.h b/src/wrapped/generated/wrappedgstappundefs.h index ce6a01f5..a58167f3 100644 --- a/src/wrapped/generated/wrappedgstappundefs.h +++ b/src/wrapped/generated/wrappedgstappundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstappUNDEFS_H_ #define __wrappedgstappUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstaudiodefs.h b/src/wrapped/generated/wrappedgstaudiodefs.h index 1cb16ea1..c72ddca5 100644 --- a/src/wrapped/generated/wrappedgstaudiodefs.h +++ b/src/wrapped/generated/wrappedgstaudiodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstaudioDEFS_H_ #define __wrappedgstaudioDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstaudiotypes.h b/src/wrapped/generated/wrappedgstaudiotypes.h index 82d46cc1..2900f70f 100644 --- a/src/wrapped/generated/wrappedgstaudiotypes.h +++ b/src/wrapped/generated/wrappedgstaudiotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstaudioTYPES_H_ #define __wrappedgstaudioTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstaudioundefs.h b/src/wrapped/generated/wrappedgstaudioundefs.h index fb81b07a..6ccef133 100644 --- a/src/wrapped/generated/wrappedgstaudioundefs.h +++ b/src/wrapped/generated/wrappedgstaudioundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstaudioUNDEFS_H_ #define __wrappedgstaudioUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstbasedefs.h b/src/wrapped/generated/wrappedgstbasedefs.h index d9a16ee4..5ee7cdce 100644 --- a/src/wrapped/generated/wrappedgstbasedefs.h +++ b/src/wrapped/generated/wrappedgstbasedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstbaseDEFS_H_ #define __wrappedgstbaseDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstbasetypes.h b/src/wrapped/generated/wrappedgstbasetypes.h index 4c306231..3b29db11 100644 --- a/src/wrapped/generated/wrappedgstbasetypes.h +++ b/src/wrapped/generated/wrappedgstbasetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstbaseTYPES_H_ #define __wrappedgstbaseTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstbaseundefs.h b/src/wrapped/generated/wrappedgstbaseundefs.h index 0547e9fc..5a21be1c 100644 --- a/src/wrapped/generated/wrappedgstbaseundefs.h +++ b/src/wrapped/generated/wrappedgstbaseundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstbaseUNDEFS_H_ #define __wrappedgstbaseUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstcheckdefs.h b/src/wrapped/generated/wrappedgstcheckdefs.h index 150a1b51..5e15ab5c 100644 --- a/src/wrapped/generated/wrappedgstcheckdefs.h +++ b/src/wrapped/generated/wrappedgstcheckdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcheckDEFS_H_ #define __wrappedgstcheckDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstchecktypes.h b/src/wrapped/generated/wrappedgstchecktypes.h index 5769e178..59ae098b 100644 --- a/src/wrapped/generated/wrappedgstchecktypes.h +++ b/src/wrapped/generated/wrappedgstchecktypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcheckTYPES_H_ #define __wrappedgstcheckTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstcheckundefs.h b/src/wrapped/generated/wrappedgstcheckundefs.h index 29f89b9e..f8abd0e7 100644 --- a/src/wrapped/generated/wrappedgstcheckundefs.h +++ b/src/wrapped/generated/wrappedgstcheckundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcheckUNDEFS_H_ #define __wrappedgstcheckUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstcontrollerdefs.h b/src/wrapped/generated/wrappedgstcontrollerdefs.h index 639be35a..2e837e2b 100644 --- a/src/wrapped/generated/wrappedgstcontrollerdefs.h +++ b/src/wrapped/generated/wrappedgstcontrollerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcontrollerDEFS_H_ #define __wrappedgstcontrollerDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstcontrollertypes.h b/src/wrapped/generated/wrappedgstcontrollertypes.h index b52da4a2..03d60347 100644 --- a/src/wrapped/generated/wrappedgstcontrollertypes.h +++ b/src/wrapped/generated/wrappedgstcontrollertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcontrollerTYPES_H_ #define __wrappedgstcontrollerTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstcontrollerundefs.h b/src/wrapped/generated/wrappedgstcontrollerundefs.h index 342d0861..4df06ff4 100644 --- a/src/wrapped/generated/wrappedgstcontrollerundefs.h +++ b/src/wrapped/generated/wrappedgstcontrollerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcontrollerUNDEFS_H_ #define __wrappedgstcontrollerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstfftdefs.h b/src/wrapped/generated/wrappedgstfftdefs.h index 8e45f8ec..51c5d2d5 100644 --- a/src/wrapped/generated/wrappedgstfftdefs.h +++ b/src/wrapped/generated/wrappedgstfftdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstfftDEFS_H_ #define __wrappedgstfftDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstffttypes.h b/src/wrapped/generated/wrappedgstffttypes.h index 1628daeb..a5c00343 100644 --- a/src/wrapped/generated/wrappedgstffttypes.h +++ b/src/wrapped/generated/wrappedgstffttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstfftTYPES_H_ #define __wrappedgstfftTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstfftundefs.h b/src/wrapped/generated/wrappedgstfftundefs.h index 26a688a8..08ae1695 100644 --- a/src/wrapped/generated/wrappedgstfftundefs.h +++ b/src/wrapped/generated/wrappedgstfftundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstfftUNDEFS_H_ #define __wrappedgstfftUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstgldefs.h b/src/wrapped/generated/wrappedgstgldefs.h index 255450f6..b36e3a43 100644 --- a/src/wrapped/generated/wrappedgstgldefs.h +++ b/src/wrapped/generated/wrappedgstgldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstglDEFS_H_ #define __wrappedgstglDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstgltypes.h b/src/wrapped/generated/wrappedgstgltypes.h index e8013056..b4fd087a 100644 --- a/src/wrapped/generated/wrappedgstgltypes.h +++ b/src/wrapped/generated/wrappedgstgltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstglTYPES_H_ #define __wrappedgstglTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstglundefs.h b/src/wrapped/generated/wrappedgstglundefs.h index 05db81ca..1c663207 100644 --- a/src/wrapped/generated/wrappedgstglundefs.h +++ b/src/wrapped/generated/wrappedgstglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstglUNDEFS_H_ #define __wrappedgstglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstnetdefs.h b/src/wrapped/generated/wrappedgstnetdefs.h index 50e75484..07c8c196 100644 --- a/src/wrapped/generated/wrappedgstnetdefs.h +++ b/src/wrapped/generated/wrappedgstnetdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstnetDEFS_H_ #define __wrappedgstnetDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstnettypes.h b/src/wrapped/generated/wrappedgstnettypes.h index a4f1dbbc..a2233ffc 100644 --- a/src/wrapped/generated/wrappedgstnettypes.h +++ b/src/wrapped/generated/wrappedgstnettypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstnetTYPES_H_ #define __wrappedgstnetTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstnetundefs.h b/src/wrapped/generated/wrappedgstnetundefs.h index 3af737a4..0aa78161 100644 --- a/src/wrapped/generated/wrappedgstnetundefs.h +++ b/src/wrapped/generated/wrappedgstnetundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstnetUNDEFS_H_ #define __wrappedgstnetUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstpbutilsdefs.h b/src/wrapped/generated/wrappedgstpbutilsdefs.h index 6451ec65..550f0e85 100644 --- a/src/wrapped/generated/wrappedgstpbutilsdefs.h +++ b/src/wrapped/generated/wrappedgstpbutilsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstpbutilsDEFS_H_ #define __wrappedgstpbutilsDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstpbutilstypes.h b/src/wrapped/generated/wrappedgstpbutilstypes.h index ec08b7dc..cac4c954 100644 --- a/src/wrapped/generated/wrappedgstpbutilstypes.h +++ b/src/wrapped/generated/wrappedgstpbutilstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstpbutilsTYPES_H_ #define __wrappedgstpbutilsTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstpbutilsundefs.h b/src/wrapped/generated/wrappedgstpbutilsundefs.h index c4e5fb34..edd9918f 100644 --- a/src/wrapped/generated/wrappedgstpbutilsundefs.h +++ b/src/wrapped/generated/wrappedgstpbutilsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstpbutilsUNDEFS_H_ #define __wrappedgstpbutilsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstreamerdefs.h b/src/wrapped/generated/wrappedgstreamerdefs.h index 6b6714e0..64e7fd37 100644 --- a/src/wrapped/generated/wrappedgstreamerdefs.h +++ b/src/wrapped/generated/wrappedgstreamerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstreamerDEFS_H_ #define __wrappedgstreamerDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstreamertypes.h b/src/wrapped/generated/wrappedgstreamertypes.h index 939f702e..df664a5e 100644 --- a/src/wrapped/generated/wrappedgstreamertypes.h +++ b/src/wrapped/generated/wrappedgstreamertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstreamerTYPES_H_ #define __wrappedgstreamerTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstreamerundefs.h b/src/wrapped/generated/wrappedgstreamerundefs.h index 207c97a0..1dba4f5f 100644 --- a/src/wrapped/generated/wrappedgstreamerundefs.h +++ b/src/wrapped/generated/wrappedgstreamerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstreamerUNDEFS_H_ #define __wrappedgstreamerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstriffdefs.h b/src/wrapped/generated/wrappedgstriffdefs.h index 81e814b5..686cb089 100644 --- a/src/wrapped/generated/wrappedgstriffdefs.h +++ b/src/wrapped/generated/wrappedgstriffdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstriffDEFS_H_ #define __wrappedgstriffDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrifftypes.h b/src/wrapped/generated/wrappedgstrifftypes.h index 8799c1e0..ddea8ff2 100644 --- a/src/wrapped/generated/wrappedgstrifftypes.h +++ b/src/wrapped/generated/wrappedgstrifftypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstriffTYPES_H_ #define __wrappedgstriffTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstriffundefs.h b/src/wrapped/generated/wrappedgstriffundefs.h index ddb6cb9e..dd543bc9 100644 --- a/src/wrapped/generated/wrappedgstriffundefs.h +++ b/src/wrapped/generated/wrappedgstriffundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstriffUNDEFS_H_ #define __wrappedgstriffUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtpdefs.h b/src/wrapped/generated/wrappedgstrtpdefs.h index 871d7f6e..43f8b5ee 100644 --- a/src/wrapped/generated/wrappedgstrtpdefs.h +++ b/src/wrapped/generated/wrappedgstrtpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtpDEFS_H_ #define __wrappedgstrtpDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtptypes.h b/src/wrapped/generated/wrappedgstrtptypes.h index 54af171f..3071f761 100644 --- a/src/wrapped/generated/wrappedgstrtptypes.h +++ b/src/wrapped/generated/wrappedgstrtptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtpTYPES_H_ #define __wrappedgstrtpTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstrtpundefs.h b/src/wrapped/generated/wrappedgstrtpundefs.h index 09ae5a3b..07438861 100644 --- a/src/wrapped/generated/wrappedgstrtpundefs.h +++ b/src/wrapped/generated/wrappedgstrtpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtpUNDEFS_H_ #define __wrappedgstrtpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtspdefs.h b/src/wrapped/generated/wrappedgstrtspdefs.h index cf9cd01a..13e99cb5 100644 --- a/src/wrapped/generated/wrappedgstrtspdefs.h +++ b/src/wrapped/generated/wrappedgstrtspdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtspDEFS_H_ #define __wrappedgstrtspDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtsptypes.h b/src/wrapped/generated/wrappedgstrtsptypes.h index c5ec4e6e..66b15e71 100644 --- a/src/wrapped/generated/wrappedgstrtsptypes.h +++ b/src/wrapped/generated/wrappedgstrtsptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtspTYPES_H_ #define __wrappedgstrtspTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstrtspundefs.h b/src/wrapped/generated/wrappedgstrtspundefs.h index b40cba5a..cd8ea1cf 100644 --- a/src/wrapped/generated/wrappedgstrtspundefs.h +++ b/src/wrapped/generated/wrappedgstrtspundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtspUNDEFS_H_ #define __wrappedgstrtspUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstsdpdefs.h b/src/wrapped/generated/wrappedgstsdpdefs.h index 1d7b9f42..e46a79dc 100644 --- a/src/wrapped/generated/wrappedgstsdpdefs.h +++ b/src/wrapped/generated/wrappedgstsdpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstsdpDEFS_H_ #define __wrappedgstsdpDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstsdptypes.h b/src/wrapped/generated/wrappedgstsdptypes.h index 8d256835..f767d134 100644 --- a/src/wrapped/generated/wrappedgstsdptypes.h +++ b/src/wrapped/generated/wrappedgstsdptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstsdpTYPES_H_ #define __wrappedgstsdpTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstsdpundefs.h b/src/wrapped/generated/wrappedgstsdpundefs.h index 01e5b544..63cd7144 100644 --- a/src/wrapped/generated/wrappedgstsdpundefs.h +++ b/src/wrapped/generated/wrappedgstsdpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstsdpUNDEFS_H_ #define __wrappedgstsdpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgsttagdefs.h b/src/wrapped/generated/wrappedgsttagdefs.h index f9e4019e..6f269b08 100644 --- a/src/wrapped/generated/wrappedgsttagdefs.h +++ b/src/wrapped/generated/wrappedgsttagdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgsttagDEFS_H_ #define __wrappedgsttagDEFS_H_ diff --git a/src/wrapped/generated/wrappedgsttagtypes.h b/src/wrapped/generated/wrappedgsttagtypes.h index 32da7856..a536de8c 100644 --- a/src/wrapped/generated/wrappedgsttagtypes.h +++ b/src/wrapped/generated/wrappedgsttagtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgsttagTYPES_H_ #define __wrappedgsttagTYPES_H_ diff --git a/src/wrapped/generated/wrappedgsttagundefs.h b/src/wrapped/generated/wrappedgsttagundefs.h index 7b71d720..c2b24f1b 100644 --- a/src/wrapped/generated/wrappedgsttagundefs.h +++ b/src/wrapped/generated/wrappedgsttagundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgsttagUNDEFS_H_ #define __wrappedgsttagUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstvideodefs.h b/src/wrapped/generated/wrappedgstvideodefs.h index 58d61cb0..5afd8894 100644 --- a/src/wrapped/generated/wrappedgstvideodefs.h +++ b/src/wrapped/generated/wrappedgstvideodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstvideoDEFS_H_ #define __wrappedgstvideoDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstvideotypes.h b/src/wrapped/generated/wrappedgstvideotypes.h index 33bc6241..4bb4c414 100644 --- a/src/wrapped/generated/wrappedgstvideotypes.h +++ b/src/wrapped/generated/wrappedgstvideotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstvideoTYPES_H_ #define __wrappedgstvideoTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstvideoundefs.h b/src/wrapped/generated/wrappedgstvideoundefs.h index cfe93733..5d03c95b 100644 --- a/src/wrapped/generated/wrappedgstvideoundefs.h +++ b/src/wrapped/generated/wrappedgstvideoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstvideoUNDEFS_H_ #define __wrappedgstvideoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgthread2defs.h b/src/wrapped/generated/wrappedgthread2defs.h index 745d0049..53ec561c 100644 --- a/src/wrapped/generated/wrappedgthread2defs.h +++ b/src/wrapped/generated/wrappedgthread2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgthread2DEFS_H_ #define __wrappedgthread2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgthread2types.h b/src/wrapped/generated/wrappedgthread2types.h index 104fab88..1a9403ca 100644 --- a/src/wrapped/generated/wrappedgthread2types.h +++ b/src/wrapped/generated/wrappedgthread2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgthread2TYPES_H_ #define __wrappedgthread2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgthread2undefs.h b/src/wrapped/generated/wrappedgthread2undefs.h index 486f8801..b8c3b911 100644 --- a/src/wrapped/generated/wrappedgthread2undefs.h +++ b/src/wrapped/generated/wrappedgthread2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgthread2UNDEFS_H_ #define __wrappedgthread2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgtk3defs.h b/src/wrapped/generated/wrappedgtk3defs.h index de33868c..df76649d 100644 --- a/src/wrapped/generated/wrappedgtk3defs.h +++ b/src/wrapped/generated/wrappedgtk3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtk3DEFS_H_ #define __wrappedgtk3DEFS_H_ diff --git a/src/wrapped/generated/wrappedgtk3types.h b/src/wrapped/generated/wrappedgtk3types.h index 93850e0f..7730a006 100644 --- a/src/wrapped/generated/wrappedgtk3types.h +++ b/src/wrapped/generated/wrappedgtk3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtk3TYPES_H_ #define __wrappedgtk3TYPES_H_ diff --git a/src/wrapped/generated/wrappedgtk3undefs.h b/src/wrapped/generated/wrappedgtk3undefs.h index 763ac0e1..ad99adfa 100644 --- a/src/wrapped/generated/wrappedgtk3undefs.h +++ b/src/wrapped/generated/wrappedgtk3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtk3UNDEFS_H_ #define __wrappedgtk3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgtkx112defs.h b/src/wrapped/generated/wrappedgtkx112defs.h index b23e2b33..b4801e84 100644 --- a/src/wrapped/generated/wrappedgtkx112defs.h +++ b/src/wrapped/generated/wrappedgtkx112defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtkx112DEFS_H_ #define __wrappedgtkx112DEFS_H_ diff --git a/src/wrapped/generated/wrappedgtkx112types.h b/src/wrapped/generated/wrappedgtkx112types.h index 34566285..c9cd415b 100644 --- a/src/wrapped/generated/wrappedgtkx112types.h +++ b/src/wrapped/generated/wrappedgtkx112types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtkx112TYPES_H_ #define __wrappedgtkx112TYPES_H_ diff --git a/src/wrapped/generated/wrappedgtkx112undefs.h b/src/wrapped/generated/wrappedgtkx112undefs.h index 4f05b24d..604e0ebb 100644 --- a/src/wrapped/generated/wrappedgtkx112undefs.h +++ b/src/wrapped/generated/wrappedgtkx112undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtkx112UNDEFS_H_ #define __wrappedgtkx112UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n64defs.h b/src/wrapped/generated/wrappedicui18n64defs.h index 18689c5e..0111bb89 100644 --- a/src/wrapped/generated/wrappedicui18n64defs.h +++ b/src/wrapped/generated/wrappedicui18n64defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n64DEFS_H_ #define __wrappedicui18n64DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n64types.h b/src/wrapped/generated/wrappedicui18n64types.h index 849a1765..23cc9f76 100644 --- a/src/wrapped/generated/wrappedicui18n64types.h +++ b/src/wrapped/generated/wrappedicui18n64types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n64TYPES_H_ #define __wrappedicui18n64TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n64undefs.h b/src/wrapped/generated/wrappedicui18n64undefs.h index 2613c2de..24c138a6 100644 --- a/src/wrapped/generated/wrappedicui18n64undefs.h +++ b/src/wrapped/generated/wrappedicui18n64undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n64UNDEFS_H_ #define __wrappedicui18n64UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n66defs.h b/src/wrapped/generated/wrappedicui18n66defs.h index 62c4ec87..e0bd170e 100644 --- a/src/wrapped/generated/wrappedicui18n66defs.h +++ b/src/wrapped/generated/wrappedicui18n66defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n66DEFS_H_ #define __wrappedicui18n66DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n66types.h b/src/wrapped/generated/wrappedicui18n66types.h index c3aaa0c1..4801c47d 100644 --- a/src/wrapped/generated/wrappedicui18n66types.h +++ b/src/wrapped/generated/wrappedicui18n66types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n66TYPES_H_ #define __wrappedicui18n66TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n66undefs.h b/src/wrapped/generated/wrappedicui18n66undefs.h index 8c75e931..60c1fcd4 100644 --- a/src/wrapped/generated/wrappedicui18n66undefs.h +++ b/src/wrapped/generated/wrappedicui18n66undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n66UNDEFS_H_ #define __wrappedicui18n66UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n67defs.h b/src/wrapped/generated/wrappedicui18n67defs.h index 91fd2a6d..e010d670 100644 --- a/src/wrapped/generated/wrappedicui18n67defs.h +++ b/src/wrapped/generated/wrappedicui18n67defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n67DEFS_H_ #define __wrappedicui18n67DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n67types.h b/src/wrapped/generated/wrappedicui18n67types.h index f387e620..55714464 100644 --- a/src/wrapped/generated/wrappedicui18n67types.h +++ b/src/wrapped/generated/wrappedicui18n67types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n67TYPES_H_ #define __wrappedicui18n67TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n67undefs.h b/src/wrapped/generated/wrappedicui18n67undefs.h index 04164f92..00755228 100644 --- a/src/wrapped/generated/wrappedicui18n67undefs.h +++ b/src/wrapped/generated/wrappedicui18n67undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n67UNDEFS_H_ #define __wrappedicui18n67UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n72defs.h b/src/wrapped/generated/wrappedicui18n72defs.h index f065b4cb..0e3238b2 100644 --- a/src/wrapped/generated/wrappedicui18n72defs.h +++ b/src/wrapped/generated/wrappedicui18n72defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n72DEFS_H_ #define __wrappedicui18n72DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n72types.h b/src/wrapped/generated/wrappedicui18n72types.h index ba6a2e7a..df1e35fa 100644 --- a/src/wrapped/generated/wrappedicui18n72types.h +++ b/src/wrapped/generated/wrappedicui18n72types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n72TYPES_H_ #define __wrappedicui18n72TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n72undefs.h b/src/wrapped/generated/wrappedicui18n72undefs.h index fa3d7f9e..b2b75342 100644 --- a/src/wrapped/generated/wrappedicui18n72undefs.h +++ b/src/wrapped/generated/wrappedicui18n72undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n72UNDEFS_H_ #define __wrappedicui18n72UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n73defs.h b/src/wrapped/generated/wrappedicui18n73defs.h index 7dd420e8..298c1d42 100644 --- a/src/wrapped/generated/wrappedicui18n73defs.h +++ b/src/wrapped/generated/wrappedicui18n73defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n73DEFS_H_ #define __wrappedicui18n73DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n73types.h b/src/wrapped/generated/wrappedicui18n73types.h index a532595e..cf389074 100644 --- a/src/wrapped/generated/wrappedicui18n73types.h +++ b/src/wrapped/generated/wrappedicui18n73types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n73TYPES_H_ #define __wrappedicui18n73TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n73undefs.h b/src/wrapped/generated/wrappedicui18n73undefs.h index af936d37..7628830e 100644 --- a/src/wrapped/generated/wrappedicui18n73undefs.h +++ b/src/wrapped/generated/wrappedicui18n73undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n73UNDEFS_H_ #define __wrappedicui18n73UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n74defs.h b/src/wrapped/generated/wrappedicui18n74defs.h index 9d35caa0..62c37309 100644 --- a/src/wrapped/generated/wrappedicui18n74defs.h +++ b/src/wrapped/generated/wrappedicui18n74defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n74DEFS_H_ #define __wrappedicui18n74DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n74types.h b/src/wrapped/generated/wrappedicui18n74types.h index c7ab0d49..349e524f 100644 --- a/src/wrapped/generated/wrappedicui18n74types.h +++ b/src/wrapped/generated/wrappedicui18n74types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n74TYPES_H_ #define __wrappedicui18n74TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n74undefs.h b/src/wrapped/generated/wrappedicui18n74undefs.h index 6165885f..c451c934 100644 --- a/src/wrapped/generated/wrappedicui18n74undefs.h +++ b/src/wrapped/generated/wrappedicui18n74undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n74UNDEFS_H_ #define __wrappedicui18n74UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc64defs.h b/src/wrapped/generated/wrappedicuuc64defs.h index b0e5e183..f83a1efe 100644 --- a/src/wrapped/generated/wrappedicuuc64defs.h +++ b/src/wrapped/generated/wrappedicuuc64defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc64DEFS_H_ #define __wrappedicuuc64DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc64types.h b/src/wrapped/generated/wrappedicuuc64types.h index afad3be7..3a0c1945 100644 --- a/src/wrapped/generated/wrappedicuuc64types.h +++ b/src/wrapped/generated/wrappedicuuc64types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc64TYPES_H_ #define __wrappedicuuc64TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc64undefs.h b/src/wrapped/generated/wrappedicuuc64undefs.h index 8405e07d..9e81564a 100644 --- a/src/wrapped/generated/wrappedicuuc64undefs.h +++ b/src/wrapped/generated/wrappedicuuc64undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc64UNDEFS_H_ #define __wrappedicuuc64UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc66defs.h b/src/wrapped/generated/wrappedicuuc66defs.h index 5236e323..31a37806 100644 --- a/src/wrapped/generated/wrappedicuuc66defs.h +++ b/src/wrapped/generated/wrappedicuuc66defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc66DEFS_H_ #define __wrappedicuuc66DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc66types.h b/src/wrapped/generated/wrappedicuuc66types.h index 050fe419..1ca92836 100644 --- a/src/wrapped/generated/wrappedicuuc66types.h +++ b/src/wrapped/generated/wrappedicuuc66types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc66TYPES_H_ #define __wrappedicuuc66TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc66undefs.h b/src/wrapped/generated/wrappedicuuc66undefs.h index 97cf2dbe..5ce0b4f2 100644 --- a/src/wrapped/generated/wrappedicuuc66undefs.h +++ b/src/wrapped/generated/wrappedicuuc66undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc66UNDEFS_H_ #define __wrappedicuuc66UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc67defs.h b/src/wrapped/generated/wrappedicuuc67defs.h index 96e34f1c..f8588ef6 100644 --- a/src/wrapped/generated/wrappedicuuc67defs.h +++ b/src/wrapped/generated/wrappedicuuc67defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc67DEFS_H_ #define __wrappedicuuc67DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc67types.h b/src/wrapped/generated/wrappedicuuc67types.h index 508d920f..f647c538 100644 --- a/src/wrapped/generated/wrappedicuuc67types.h +++ b/src/wrapped/generated/wrappedicuuc67types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc67TYPES_H_ #define __wrappedicuuc67TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc67undefs.h b/src/wrapped/generated/wrappedicuuc67undefs.h index e6043cd6..c7107958 100644 --- a/src/wrapped/generated/wrappedicuuc67undefs.h +++ b/src/wrapped/generated/wrappedicuuc67undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc67UNDEFS_H_ #define __wrappedicuuc67UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc72defs.h b/src/wrapped/generated/wrappedicuuc72defs.h index 8a512ca5..1506fa74 100644 --- a/src/wrapped/generated/wrappedicuuc72defs.h +++ b/src/wrapped/generated/wrappedicuuc72defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc72DEFS_H_ #define __wrappedicuuc72DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc72types.h b/src/wrapped/generated/wrappedicuuc72types.h index ff28ecfd..a78214de 100644 --- a/src/wrapped/generated/wrappedicuuc72types.h +++ b/src/wrapped/generated/wrappedicuuc72types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc72TYPES_H_ #define __wrappedicuuc72TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc72undefs.h b/src/wrapped/generated/wrappedicuuc72undefs.h index 82b2e329..d05452e3 100644 --- a/src/wrapped/generated/wrappedicuuc72undefs.h +++ b/src/wrapped/generated/wrappedicuuc72undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc72UNDEFS_H_ #define __wrappedicuuc72UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc73defs.h b/src/wrapped/generated/wrappedicuuc73defs.h index 93b84b08..2333d563 100644 --- a/src/wrapped/generated/wrappedicuuc73defs.h +++ b/src/wrapped/generated/wrappedicuuc73defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc73DEFS_H_ #define __wrappedicuuc73DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc73types.h b/src/wrapped/generated/wrappedicuuc73types.h index e6859dd4..dec364e0 100644 --- a/src/wrapped/generated/wrappedicuuc73types.h +++ b/src/wrapped/generated/wrappedicuuc73types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc73TYPES_H_ #define __wrappedicuuc73TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc73undefs.h b/src/wrapped/generated/wrappedicuuc73undefs.h index 8fa45188..3f76f393 100644 --- a/src/wrapped/generated/wrappedicuuc73undefs.h +++ b/src/wrapped/generated/wrappedicuuc73undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc73UNDEFS_H_ #define __wrappedicuuc73UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc74defs.h b/src/wrapped/generated/wrappedicuuc74defs.h index b8dc6163..c3a15fbf 100644 --- a/src/wrapped/generated/wrappedicuuc74defs.h +++ b/src/wrapped/generated/wrappedicuuc74defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc74DEFS_H_ #define __wrappedicuuc74DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc74types.h b/src/wrapped/generated/wrappedicuuc74types.h index 4998e102..c965a0ad 100644 --- a/src/wrapped/generated/wrappedicuuc74types.h +++ b/src/wrapped/generated/wrappedicuuc74types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc74TYPES_H_ #define __wrappedicuuc74TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc74undefs.h b/src/wrapped/generated/wrappedicuuc74undefs.h index 43d685d0..938a3bf9 100644 --- a/src/wrapped/generated/wrappedicuuc74undefs.h +++ b/src/wrapped/generated/wrappedicuuc74undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc74UNDEFS_H_ #define __wrappedicuuc74UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedidn2defs.h b/src/wrapped/generated/wrappedidn2defs.h index 4177a4af..f176b322 100644 --- a/src/wrapped/generated/wrappedidn2defs.h +++ b/src/wrapped/generated/wrappedidn2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedidn2DEFS_H_ #define __wrappedidn2DEFS_H_ diff --git a/src/wrapped/generated/wrappedidn2types.h b/src/wrapped/generated/wrappedidn2types.h index e67e4dee..abeb9ff0 100644 --- a/src/wrapped/generated/wrappedidn2types.h +++ b/src/wrapped/generated/wrappedidn2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedidn2TYPES_H_ #define __wrappedidn2TYPES_H_ diff --git a/src/wrapped/generated/wrappedidn2undefs.h b/src/wrapped/generated/wrappedidn2undefs.h index 77a2eb8c..235a0b88 100644 --- a/src/wrapped/generated/wrappedidn2undefs.h +++ b/src/wrapped/generated/wrappedidn2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedidn2UNDEFS_H_ #define __wrappedidn2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedkrb5defs.h b/src/wrapped/generated/wrappedkrb5defs.h index 1480b7a5..dee7c859 100644 --- a/src/wrapped/generated/wrappedkrb5defs.h +++ b/src/wrapped/generated/wrappedkrb5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedkrb5DEFS_H_ #define __wrappedkrb5DEFS_H_ diff --git a/src/wrapped/generated/wrappedkrb5types.h b/src/wrapped/generated/wrappedkrb5types.h index 5e8fb376..90e5d8b0 100644 --- a/src/wrapped/generated/wrappedkrb5types.h +++ b/src/wrapped/generated/wrappedkrb5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedkrb5TYPES_H_ #define __wrappedkrb5TYPES_H_ diff --git a/src/wrapped/generated/wrappedkrb5undefs.h b/src/wrapped/generated/wrappedkrb5undefs.h index 555d016b..a0dfce28 100644 --- a/src/wrapped/generated/wrappedkrb5undefs.h +++ b/src/wrapped/generated/wrappedkrb5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedkrb5UNDEFS_H_ #define __wrappedkrb5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlberdefs.h b/src/wrapped/generated/wrappedlberdefs.h index c82f0578..f8294546 100644 --- a/src/wrapped/generated/wrappedlberdefs.h +++ b/src/wrapped/generated/wrappedlberdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlberDEFS_H_ #define __wrappedlberDEFS_H_ diff --git a/src/wrapped/generated/wrappedlbertypes.h b/src/wrapped/generated/wrappedlbertypes.h index 4e0ffd66..d21ddf50 100644 --- a/src/wrapped/generated/wrappedlbertypes.h +++ b/src/wrapped/generated/wrappedlbertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlberTYPES_H_ #define __wrappedlberTYPES_H_ diff --git a/src/wrapped/generated/wrappedlberundefs.h b/src/wrapped/generated/wrappedlberundefs.h index 02a61ea1..2d914827 100644 --- a/src/wrapped/generated/wrappedlberundefs.h +++ b/src/wrapped/generated/wrappedlberundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlberUNDEFS_H_ #define __wrappedlberUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlcms2defs.h b/src/wrapped/generated/wrappedlcms2defs.h index 01abe076..b7ee692b 100644 --- a/src/wrapped/generated/wrappedlcms2defs.h +++ b/src/wrapped/generated/wrappedlcms2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlcms2DEFS_H_ #define __wrappedlcms2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlcms2types.h b/src/wrapped/generated/wrappedlcms2types.h index 9fdd10bf..fb41e489 100644 --- a/src/wrapped/generated/wrappedlcms2types.h +++ b/src/wrapped/generated/wrappedlcms2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlcms2TYPES_H_ #define __wrappedlcms2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlcms2undefs.h b/src/wrapped/generated/wrappedlcms2undefs.h index 890088f0..f4969c13 100644 --- a/src/wrapped/generated/wrappedlcms2undefs.h +++ b/src/wrapped/generated/wrappedlcms2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlcms2UNDEFS_H_ #define __wrappedlcms2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedldaprdefs.h b/src/wrapped/generated/wrappedldaprdefs.h index 0b42b5cd..b70cd0ea 100644 --- a/src/wrapped/generated/wrappedldaprdefs.h +++ b/src/wrapped/generated/wrappedldaprdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldaprDEFS_H_ #define __wrappedldaprDEFS_H_ diff --git a/src/wrapped/generated/wrappedldaprtypes.h b/src/wrapped/generated/wrappedldaprtypes.h index 8cb0a7c7..e94daa6d 100644 --- a/src/wrapped/generated/wrappedldaprtypes.h +++ b/src/wrapped/generated/wrappedldaprtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldaprTYPES_H_ #define __wrappedldaprTYPES_H_ diff --git a/src/wrapped/generated/wrappedldaprundefs.h b/src/wrapped/generated/wrappedldaprundefs.h index 1c09ce38..8c0e3e55 100644 --- a/src/wrapped/generated/wrappedldaprundefs.h +++ b/src/wrapped/generated/wrappedldaprundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldaprUNDEFS_H_ #define __wrappedldaprUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedldlinuxdefs.h b/src/wrapped/generated/wrappedldlinuxdefs.h index d7bf282c..1563667f 100644 --- a/src/wrapped/generated/wrappedldlinuxdefs.h +++ b/src/wrapped/generated/wrappedldlinuxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldlinuxDEFS_H_ #define __wrappedldlinuxDEFS_H_ diff --git a/src/wrapped/generated/wrappedldlinuxtypes.h b/src/wrapped/generated/wrappedldlinuxtypes.h index cd8e9095..6dc287a4 100644 --- a/src/wrapped/generated/wrappedldlinuxtypes.h +++ b/src/wrapped/generated/wrappedldlinuxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldlinuxTYPES_H_ #define __wrappedldlinuxTYPES_H_ diff --git a/src/wrapped/generated/wrappedldlinuxundefs.h b/src/wrapped/generated/wrappedldlinuxundefs.h index 2d70d2ac..7d745150 100644 --- a/src/wrapped/generated/wrappedldlinuxundefs.h +++ b/src/wrapped/generated/wrappedldlinuxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldlinuxUNDEFS_H_ #define __wrappedldlinuxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibasounddefs.h b/src/wrapped/generated/wrappedlibasounddefs.h index 0c3d0af1..e8712e29 100644 --- a/src/wrapped/generated/wrappedlibasounddefs.h +++ b/src/wrapped/generated/wrappedlibasounddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibasoundDEFS_H_ #define __wrappedlibasoundDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibasoundtypes.h b/src/wrapped/generated/wrappedlibasoundtypes.h index cbea7846..f4c6d6ed 100644 --- a/src/wrapped/generated/wrappedlibasoundtypes.h +++ b/src/wrapped/generated/wrappedlibasoundtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibasoundTYPES_H_ #define __wrappedlibasoundTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibasoundundefs.h b/src/wrapped/generated/wrappedlibasoundundefs.h index b43a3e1f..8cdc33d1 100644 --- a/src/wrapped/generated/wrappedlibasoundundefs.h +++ b/src/wrapped/generated/wrappedlibasoundundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibasoundUNDEFS_H_ #define __wrappedlibasoundUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibbsddefs.h b/src/wrapped/generated/wrappedlibbsddefs.h index 6104bfc2..0e8b0ad6 100644 --- a/src/wrapped/generated/wrappedlibbsddefs.h +++ b/src/wrapped/generated/wrappedlibbsddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibbsdDEFS_H_ #define __wrappedlibbsdDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibbsdtypes.h b/src/wrapped/generated/wrappedlibbsdtypes.h index b007845a..5fc338a4 100644 --- a/src/wrapped/generated/wrappedlibbsdtypes.h +++ b/src/wrapped/generated/wrappedlibbsdtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibbsdTYPES_H_ #define __wrappedlibbsdTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibbsdundefs.h b/src/wrapped/generated/wrappedlibbsdundefs.h index 6f22a93e..d85acc02 100644 --- a/src/wrapped/generated/wrappedlibbsdundefs.h +++ b/src/wrapped/generated/wrappedlibbsdundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibbsdUNDEFS_H_ #define __wrappedlibbsdUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcdefs.h b/src/wrapped/generated/wrappedlibcdefs.h index 9b1434a0..19b0c685 100644 --- a/src/wrapped/generated/wrappedlibcdefs.h +++ b/src/wrapped/generated/wrappedlibcdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcDEFS_H_ #define __wrappedlibcDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcmusldefs.h b/src/wrapped/generated/wrappedlibcmusldefs.h index 44699686..4b4eb4ff 100644 --- a/src/wrapped/generated/wrappedlibcmusldefs.h +++ b/src/wrapped/generated/wrappedlibcmusldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcmuslDEFS_H_ #define __wrappedlibcmuslDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcmusltypes.h b/src/wrapped/generated/wrappedlibcmusltypes.h index dc4ac245..9cd02c19 100644 --- a/src/wrapped/generated/wrappedlibcmusltypes.h +++ b/src/wrapped/generated/wrappedlibcmusltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcmuslTYPES_H_ #define __wrappedlibcmuslTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcmuslundefs.h b/src/wrapped/generated/wrappedlibcmuslundefs.h index 71ff2c0e..a9efd9fd 100644 --- a/src/wrapped/generated/wrappedlibcmuslundefs.h +++ b/src/wrapped/generated/wrappedlibcmuslundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcmuslUNDEFS_H_ #define __wrappedlibcmuslUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcryptdefs.h b/src/wrapped/generated/wrappedlibcryptdefs.h index fc002b3b..1ad3bf07 100644 --- a/src/wrapped/generated/wrappedlibcryptdefs.h +++ b/src/wrapped/generated/wrappedlibcryptdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcryptDEFS_H_ #define __wrappedlibcryptDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcrypttypes.h b/src/wrapped/generated/wrappedlibcrypttypes.h index 41047145..3c26e75a 100644 --- a/src/wrapped/generated/wrappedlibcrypttypes.h +++ b/src/wrapped/generated/wrappedlibcrypttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcryptTYPES_H_ #define __wrappedlibcryptTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcryptundefs.h b/src/wrapped/generated/wrappedlibcryptundefs.h index 4f5de633..c695a259 100644 --- a/src/wrapped/generated/wrappedlibcryptundefs.h +++ b/src/wrapped/generated/wrappedlibcryptundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcryptUNDEFS_H_ #define __wrappedlibcryptUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h index a9b5dbb1..1b899183 100644 --- a/src/wrapped/generated/wrappedlibctypes.h +++ b/src/wrapped/generated/wrappedlibctypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcTYPES_H_ #define __wrappedlibcTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcundefs.h b/src/wrapped/generated/wrappedlibcundefs.h index 9fef3263..c8b3613e 100644 --- a/src/wrapped/generated/wrappedlibcundefs.h +++ b/src/wrapped/generated/wrappedlibcundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcUNDEFS_H_ #define __wrappedlibcUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcupsdefs.h b/src/wrapped/generated/wrappedlibcupsdefs.h index 34019153..b44e4592 100644 --- a/src/wrapped/generated/wrappedlibcupsdefs.h +++ b/src/wrapped/generated/wrappedlibcupsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcupsDEFS_H_ #define __wrappedlibcupsDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcupstypes.h b/src/wrapped/generated/wrappedlibcupstypes.h index f17b8fc0..5194024f 100644 --- a/src/wrapped/generated/wrappedlibcupstypes.h +++ b/src/wrapped/generated/wrappedlibcupstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcupsTYPES_H_ #define __wrappedlibcupsTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcupsundefs.h b/src/wrapped/generated/wrappedlibcupsundefs.h index be8baf83..c5c81317 100644 --- a/src/wrapped/generated/wrappedlibcupsundefs.h +++ b/src/wrapped/generated/wrappedlibcupsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcupsUNDEFS_H_ #define __wrappedlibcupsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdldefs.h b/src/wrapped/generated/wrappedlibdldefs.h index 75844c4a..3e3e33d3 100644 --- a/src/wrapped/generated/wrappedlibdldefs.h +++ b/src/wrapped/generated/wrappedlibdldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdlDEFS_H_ #define __wrappedlibdlDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdltypes.h b/src/wrapped/generated/wrappedlibdltypes.h index a2535e0a..260b042d 100644 --- a/src/wrapped/generated/wrappedlibdltypes.h +++ b/src/wrapped/generated/wrappedlibdltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdlTYPES_H_ #define __wrappedlibdlTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibdlundefs.h b/src/wrapped/generated/wrappedlibdlundefs.h index f09b4630..8e6fcbdc 100644 --- a/src/wrapped/generated/wrappedlibdlundefs.h +++ b/src/wrapped/generated/wrappedlibdlundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdlUNDEFS_H_ #define __wrappedlibdlUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmamdgpudefs.h b/src/wrapped/generated/wrappedlibdrmamdgpudefs.h index bf8f9499..8404375c 100644 --- a/src/wrapped/generated/wrappedlibdrmamdgpudefs.h +++ b/src/wrapped/generated/wrappedlibdrmamdgpudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmamdgpuDEFS_H_ #define __wrappedlibdrmamdgpuDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmamdgputypes.h b/src/wrapped/generated/wrappedlibdrmamdgputypes.h index 7ab8dd91..dfc40e7e 100644 --- a/src/wrapped/generated/wrappedlibdrmamdgputypes.h +++ b/src/wrapped/generated/wrappedlibdrmamdgputypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmamdgpuTYPES_H_ #define __wrappedlibdrmamdgpuTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h b/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h index 7cc76dfb..4e5f460c 100644 --- a/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h +++ b/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmamdgpuUNDEFS_H_ #define __wrappedlibdrmamdgpuUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmdefs.h b/src/wrapped/generated/wrappedlibdrmdefs.h index a94ebd04..c151ce97 100644 --- a/src/wrapped/generated/wrappedlibdrmdefs.h +++ b/src/wrapped/generated/wrappedlibdrmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmDEFS_H_ #define __wrappedlibdrmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmtypes.h b/src/wrapped/generated/wrappedlibdrmtypes.h index 8c583cb2..f6d72e04 100644 --- a/src/wrapped/generated/wrappedlibdrmtypes.h +++ b/src/wrapped/generated/wrappedlibdrmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmTYPES_H_ #define __wrappedlibdrmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibdrmundefs.h b/src/wrapped/generated/wrappedlibdrmundefs.h index b52bd362..796c820a 100644 --- a/src/wrapped/generated/wrappedlibdrmundefs.h +++ b/src/wrapped/generated/wrappedlibdrmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmUNDEFS_H_ #define __wrappedlibdrmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibegldefs.h b/src/wrapped/generated/wrappedlibegldefs.h index f52e5d2e..55e5fa1b 100644 --- a/src/wrapped/generated/wrappedlibegldefs.h +++ b/src/wrapped/generated/wrappedlibegldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibeglDEFS_H_ #define __wrappedlibeglDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibegltypes.h b/src/wrapped/generated/wrappedlibegltypes.h index 9488b9b4..06efef25 100644 --- a/src/wrapped/generated/wrappedlibegltypes.h +++ b/src/wrapped/generated/wrappedlibegltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibeglTYPES_H_ #define __wrappedlibeglTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibeglundefs.h b/src/wrapped/generated/wrappedlibeglundefs.h index 7364e25e..e3c387f7 100644 --- a/src/wrapped/generated/wrappedlibeglundefs.h +++ b/src/wrapped/generated/wrappedlibeglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibeglUNDEFS_H_ #define __wrappedlibeglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformdefs.h b/src/wrapped/generated/wrappedlibformdefs.h index 30a2e523..8374da7d 100644 --- a/src/wrapped/generated/wrappedlibformdefs.h +++ b/src/wrapped/generated/wrappedlibformdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformDEFS_H_ #define __wrappedlibformDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformtypes.h b/src/wrapped/generated/wrappedlibformtypes.h index 2718dd4d..ace87806 100644 --- a/src/wrapped/generated/wrappedlibformtypes.h +++ b/src/wrapped/generated/wrappedlibformtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformTYPES_H_ #define __wrappedlibformTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibformundefs.h b/src/wrapped/generated/wrappedlibformundefs.h index 3c54fd75..fb380985 100644 --- a/src/wrapped/generated/wrappedlibformundefs.h +++ b/src/wrapped/generated/wrappedlibformundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformUNDEFS_H_ #define __wrappedlibformUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformw6defs.h b/src/wrapped/generated/wrappedlibformw6defs.h index 1458ae44..25d026a5 100644 --- a/src/wrapped/generated/wrappedlibformw6defs.h +++ b/src/wrapped/generated/wrappedlibformw6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformw6DEFS_H_ #define __wrappedlibformw6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformw6types.h b/src/wrapped/generated/wrappedlibformw6types.h index 682d248a..802c89d6 100644 --- a/src/wrapped/generated/wrappedlibformw6types.h +++ b/src/wrapped/generated/wrappedlibformw6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformw6TYPES_H_ #define __wrappedlibformw6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibformw6undefs.h b/src/wrapped/generated/wrappedlibformw6undefs.h index 4866960f..1783e4f7 100644 --- a/src/wrapped/generated/wrappedlibformw6undefs.h +++ b/src/wrapped/generated/wrappedlibformw6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformw6UNDEFS_H_ #define __wrappedlibformw6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformwdefs.h b/src/wrapped/generated/wrappedlibformwdefs.h index 55a007b7..a0451f1d 100644 --- a/src/wrapped/generated/wrappedlibformwdefs.h +++ b/src/wrapped/generated/wrappedlibformwdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformwDEFS_H_ #define __wrappedlibformwDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformwtypes.h b/src/wrapped/generated/wrappedlibformwtypes.h index 19d8d750..bdf27ac5 100644 --- a/src/wrapped/generated/wrappedlibformwtypes.h +++ b/src/wrapped/generated/wrappedlibformwtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformwTYPES_H_ #define __wrappedlibformwTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibformwundefs.h b/src/wrapped/generated/wrappedlibformwundefs.h index 35926a4a..817fd6d9 100644 --- a/src/wrapped/generated/wrappedlibformwundefs.h +++ b/src/wrapped/generated/wrappedlibformwundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformwUNDEFS_H_ #define __wrappedlibformwUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibfusedefs.h b/src/wrapped/generated/wrappedlibfusedefs.h index d42e7a23..bdfa32d8 100644 --- a/src/wrapped/generated/wrappedlibfusedefs.h +++ b/src/wrapped/generated/wrappedlibfusedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibfuseDEFS_H_ #define __wrappedlibfuseDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibfusetypes.h b/src/wrapped/generated/wrappedlibfusetypes.h index 342a308d..be3e4c8b 100644 --- a/src/wrapped/generated/wrappedlibfusetypes.h +++ b/src/wrapped/generated/wrappedlibfusetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibfuseTYPES_H_ #define __wrappedlibfuseTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibfuseundefs.h b/src/wrapped/generated/wrappedlibfuseundefs.h index 4f194898..8bcc096c 100644 --- a/src/wrapped/generated/wrappedlibfuseundefs.h +++ b/src/wrapped/generated/wrappedlibfuseundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibfuseUNDEFS_H_ #define __wrappedlibfuseUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibgldefs.h b/src/wrapped/generated/wrappedlibgldefs.h index 4caba6db..c2b7cf81 100644 --- a/src/wrapped/generated/wrappedlibgldefs.h +++ b/src/wrapped/generated/wrappedlibgldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglDEFS_H_ #define __wrappedlibglDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibgltypes.h b/src/wrapped/generated/wrappedlibgltypes.h index e9d48457..c1aad887 100644 --- a/src/wrapped/generated/wrappedlibgltypes.h +++ b/src/wrapped/generated/wrappedlibgltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglTYPES_H_ #define __wrappedlibglTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibgludefs.h b/src/wrapped/generated/wrappedlibgludefs.h index f365ac3e..7f8094d1 100644 --- a/src/wrapped/generated/wrappedlibgludefs.h +++ b/src/wrapped/generated/wrappedlibgludefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibgluDEFS_H_ #define __wrappedlibgluDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglundefs.h b/src/wrapped/generated/wrappedlibglundefs.h index bca71608..af316b14 100644 --- a/src/wrapped/generated/wrappedlibglundefs.h +++ b/src/wrapped/generated/wrappedlibglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglUNDEFS_H_ #define __wrappedlibglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglutypes.h b/src/wrapped/generated/wrappedlibglutypes.h index ec000dda..da9c18b5 100644 --- a/src/wrapped/generated/wrappedlibglutypes.h +++ b/src/wrapped/generated/wrappedlibglutypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibgluTYPES_H_ #define __wrappedlibgluTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibgluundefs.h b/src/wrapped/generated/wrappedlibgluundefs.h index acf38042..e1bfc600 100644 --- a/src/wrapped/generated/wrappedlibgluundefs.h +++ b/src/wrapped/generated/wrappedlibgluundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibgluUNDEFS_H_ #define __wrappedlibgluUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglxdefs.h b/src/wrapped/generated/wrappedlibglxdefs.h index 1e947e9a..9e08adec 100644 --- a/src/wrapped/generated/wrappedlibglxdefs.h +++ b/src/wrapped/generated/wrappedlibglxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglxDEFS_H_ #define __wrappedlibglxDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglxtypes.h b/src/wrapped/generated/wrappedlibglxtypes.h index bfa19bae..5cedd91f 100644 --- a/src/wrapped/generated/wrappedlibglxtypes.h +++ b/src/wrapped/generated/wrappedlibglxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglxTYPES_H_ #define __wrappedlibglxTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibglxundefs.h b/src/wrapped/generated/wrappedlibglxundefs.h index 3c140b5d..fe8446f5 100644 --- a/src/wrapped/generated/wrappedlibglxundefs.h +++ b/src/wrapped/generated/wrappedlibglxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglxUNDEFS_H_ #define __wrappedlibglxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibharfbuzzdefs.h b/src/wrapped/generated/wrappedlibharfbuzzdefs.h index c463b59d..7aa5d647 100644 --- a/src/wrapped/generated/wrappedlibharfbuzzdefs.h +++ b/src/wrapped/generated/wrappedlibharfbuzzdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibharfbuzzDEFS_H_ #define __wrappedlibharfbuzzDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibharfbuzztypes.h b/src/wrapped/generated/wrappedlibharfbuzztypes.h index b6ccb205..e19ac01c 100644 --- a/src/wrapped/generated/wrappedlibharfbuzztypes.h +++ b/src/wrapped/generated/wrappedlibharfbuzztypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibharfbuzzTYPES_H_ #define __wrappedlibharfbuzzTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibharfbuzzundefs.h b/src/wrapped/generated/wrappedlibharfbuzzundefs.h index 05caf5af..3f2f3556 100644 --- a/src/wrapped/generated/wrappedlibharfbuzzundefs.h +++ b/src/wrapped/generated/wrappedlibharfbuzzundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibharfbuzzUNDEFS_H_ #define __wrappedlibharfbuzzUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibhogweed6defs.h b/src/wrapped/generated/wrappedlibhogweed6defs.h index 6693e71b..6c4e872a 100644 --- a/src/wrapped/generated/wrappedlibhogweed6defs.h +++ b/src/wrapped/generated/wrappedlibhogweed6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibhogweed6DEFS_H_ #define __wrappedlibhogweed6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibhogweed6types.h b/src/wrapped/generated/wrappedlibhogweed6types.h index 60fc7159..b9a5eb68 100644 --- a/src/wrapped/generated/wrappedlibhogweed6types.h +++ b/src/wrapped/generated/wrappedlibhogweed6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibhogweed6TYPES_H_ #define __wrappedlibhogweed6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibhogweed6undefs.h b/src/wrapped/generated/wrappedlibhogweed6undefs.h index d83b11c3..b91049c0 100644 --- a/src/wrapped/generated/wrappedlibhogweed6undefs.h +++ b/src/wrapped/generated/wrappedlibhogweed6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibhogweed6UNDEFS_H_ #define __wrappedlibhogweed6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibibusdefs.h b/src/wrapped/generated/wrappedlibibusdefs.h index 353351f7..af902629 100644 --- a/src/wrapped/generated/wrappedlibibusdefs.h +++ b/src/wrapped/generated/wrappedlibibusdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibibusDEFS_H_ #define __wrappedlibibusDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibibustypes.h b/src/wrapped/generated/wrappedlibibustypes.h index 23612c70..5074ced7 100644 --- a/src/wrapped/generated/wrappedlibibustypes.h +++ b/src/wrapped/generated/wrappedlibibustypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibibusTYPES_H_ #define __wrappedlibibusTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibibusundefs.h b/src/wrapped/generated/wrappedlibibusundefs.h index 3bc6269b..2f681597 100644 --- a/src/wrapped/generated/wrappedlibibusundefs.h +++ b/src/wrapped/generated/wrappedlibibusundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibibusUNDEFS_H_ #define __wrappedlibibusUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibicedefs.h b/src/wrapped/generated/wrappedlibicedefs.h index 6ee5a387..cbb71c6c 100644 --- a/src/wrapped/generated/wrappedlibicedefs.h +++ b/src/wrapped/generated/wrappedlibicedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibiceDEFS_H_ #define __wrappedlibiceDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibicetypes.h b/src/wrapped/generated/wrappedlibicetypes.h index 111f9be5..f2ae1b1b 100644 --- a/src/wrapped/generated/wrappedlibicetypes.h +++ b/src/wrapped/generated/wrappedlibicetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibiceTYPES_H_ #define __wrappedlibiceTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibiceundefs.h b/src/wrapped/generated/wrappedlibiceundefs.h index 052cabfd..ebda3f71 100644 --- a/src/wrapped/generated/wrappedlibiceundefs.h +++ b/src/wrapped/generated/wrappedlibiceundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibiceUNDEFS_H_ #define __wrappedlibiceUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibmdefs.h b/src/wrapped/generated/wrappedlibmdefs.h index 6afe3229..6054e44c 100644 --- a/src/wrapped/generated/wrappedlibmdefs.h +++ b/src/wrapped/generated/wrappedlibmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibmDEFS_H_ #define __wrappedlibmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibmtypes.h b/src/wrapped/generated/wrappedlibmtypes.h index b31e0cbc..35a7ad2e 100644 --- a/src/wrapped/generated/wrappedlibmtypes.h +++ b/src/wrapped/generated/wrappedlibmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibmTYPES_H_ #define __wrappedlibmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibmundefs.h b/src/wrapped/generated/wrappedlibmundefs.h index 66b487b9..f1a81dfe 100644 --- a/src/wrapped/generated/wrappedlibmundefs.h +++ b/src/wrapped/generated/wrappedlibmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibmUNDEFS_H_ #define __wrappedlibmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurses6defs.h b/src/wrapped/generated/wrappedlibncurses6defs.h index 0d07108b..eb86d766 100644 --- a/src/wrapped/generated/wrappedlibncurses6defs.h +++ b/src/wrapped/generated/wrappedlibncurses6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurses6DEFS_H_ #define __wrappedlibncurses6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurses6types.h b/src/wrapped/generated/wrappedlibncurses6types.h index 9594091e..48814b66 100644 --- a/src/wrapped/generated/wrappedlibncurses6types.h +++ b/src/wrapped/generated/wrappedlibncurses6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurses6TYPES_H_ #define __wrappedlibncurses6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncurses6undefs.h b/src/wrapped/generated/wrappedlibncurses6undefs.h index 17cb535a..69893938 100644 --- a/src/wrapped/generated/wrappedlibncurses6undefs.h +++ b/src/wrapped/generated/wrappedlibncurses6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurses6UNDEFS_H_ #define __wrappedlibncurses6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursesdefs.h b/src/wrapped/generated/wrappedlibncursesdefs.h index 3f1e5084..bbd6920b 100644 --- a/src/wrapped/generated/wrappedlibncursesdefs.h +++ b/src/wrapped/generated/wrappedlibncursesdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesDEFS_H_ #define __wrappedlibncursesDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursestypes.h b/src/wrapped/generated/wrappedlibncursestypes.h index 08e551de..17756b37 100644 --- a/src/wrapped/generated/wrappedlibncursestypes.h +++ b/src/wrapped/generated/wrappedlibncursestypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesTYPES_H_ #define __wrappedlibncursesTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncursesundefs.h b/src/wrapped/generated/wrappedlibncursesundefs.h index ee39f268..98b149af 100644 --- a/src/wrapped/generated/wrappedlibncursesundefs.h +++ b/src/wrapped/generated/wrappedlibncursesundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesUNDEFS_H_ #define __wrappedlibncursesUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursesw6defs.h b/src/wrapped/generated/wrappedlibncursesw6defs.h index 70f1a06a..19535400 100644 --- a/src/wrapped/generated/wrappedlibncursesw6defs.h +++ b/src/wrapped/generated/wrappedlibncursesw6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesw6DEFS_H_ #define __wrappedlibncursesw6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursesw6types.h b/src/wrapped/generated/wrappedlibncursesw6types.h index 275961ec..23fea565 100644 --- a/src/wrapped/generated/wrappedlibncursesw6types.h +++ b/src/wrapped/generated/wrappedlibncursesw6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesw6TYPES_H_ #define __wrappedlibncursesw6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncursesw6undefs.h b/src/wrapped/generated/wrappedlibncursesw6undefs.h index 2207fbb6..c713aba2 100644 --- a/src/wrapped/generated/wrappedlibncursesw6undefs.h +++ b/src/wrapped/generated/wrappedlibncursesw6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesw6UNDEFS_H_ #define __wrappedlibncursesw6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurseswdefs.h b/src/wrapped/generated/wrappedlibncurseswdefs.h index 59c3a163..3079d0ef 100644 --- a/src/wrapped/generated/wrappedlibncurseswdefs.h +++ b/src/wrapped/generated/wrappedlibncurseswdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurseswDEFS_H_ #define __wrappedlibncurseswDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurseswtypes.h b/src/wrapped/generated/wrappedlibncurseswtypes.h index 77ea4371..4196ffe9 100644 --- a/src/wrapped/generated/wrappedlibncurseswtypes.h +++ b/src/wrapped/generated/wrappedlibncurseswtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurseswTYPES_H_ #define __wrappedlibncurseswTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncurseswundefs.h b/src/wrapped/generated/wrappedlibncurseswundefs.h index 5dc4f358..c2077716 100644 --- a/src/wrapped/generated/wrappedlibncurseswundefs.h +++ b/src/wrapped/generated/wrappedlibncurseswundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurseswUNDEFS_H_ #define __wrappedlibncurseswUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnettle8defs.h b/src/wrapped/generated/wrappedlibnettle8defs.h index 4b2b0004..1761717e 100644 --- a/src/wrapped/generated/wrappedlibnettle8defs.h +++ b/src/wrapped/generated/wrappedlibnettle8defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnettle8DEFS_H_ #define __wrappedlibnettle8DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnettle8types.h b/src/wrapped/generated/wrappedlibnettle8types.h index d99fbea8..8de87b63 100644 --- a/src/wrapped/generated/wrappedlibnettle8types.h +++ b/src/wrapped/generated/wrappedlibnettle8types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnettle8TYPES_H_ #define __wrappedlibnettle8TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibnettle8undefs.h b/src/wrapped/generated/wrappedlibnettle8undefs.h index 6f345ec3..2090dea4 100644 --- a/src/wrapped/generated/wrappedlibnettle8undefs.h +++ b/src/wrapped/generated/wrappedlibnettle8undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnettle8UNDEFS_H_ #define __wrappedlibnettle8UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnumadefs.h b/src/wrapped/generated/wrappedlibnumadefs.h index dbbf945f..11e096c7 100644 --- a/src/wrapped/generated/wrappedlibnumadefs.h +++ b/src/wrapped/generated/wrappedlibnumadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnumaDEFS_H_ #define __wrappedlibnumaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnumatypes.h b/src/wrapped/generated/wrappedlibnumatypes.h index 722c2aaf..09ccac34 100644 --- a/src/wrapped/generated/wrappedlibnumatypes.h +++ b/src/wrapped/generated/wrappedlibnumatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnumaTYPES_H_ #define __wrappedlibnumaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibnumaundefs.h b/src/wrapped/generated/wrappedlibnumaundefs.h index 37f78933..8b58689b 100644 --- a/src/wrapped/generated/wrappedlibnumaundefs.h +++ b/src/wrapped/generated/wrappedlibnumaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnumaUNDEFS_H_ #define __wrappedlibnumaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedliboggdefs.h b/src/wrapped/generated/wrappedliboggdefs.h index f890dfbf..6ff95835 100644 --- a/src/wrapped/generated/wrappedliboggdefs.h +++ b/src/wrapped/generated/wrappedliboggdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedliboggDEFS_H_ #define __wrappedliboggDEFS_H_ diff --git a/src/wrapped/generated/wrappedliboggtypes.h b/src/wrapped/generated/wrappedliboggtypes.h index 6ed06122..eb90f715 100644 --- a/src/wrapped/generated/wrappedliboggtypes.h +++ b/src/wrapped/generated/wrappedliboggtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedliboggTYPES_H_ #define __wrappedliboggTYPES_H_ diff --git a/src/wrapped/generated/wrappedliboggundefs.h b/src/wrapped/generated/wrappedliboggundefs.h index d62105c2..b9a38bd2 100644 --- a/src/wrapped/generated/wrappedliboggundefs.h +++ b/src/wrapped/generated/wrappedliboggundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedliboggUNDEFS_H_ #define __wrappedliboggUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpaneldefs.h b/src/wrapped/generated/wrappedlibpaneldefs.h index 05a0b2fa..b8607236 100644 --- a/src/wrapped/generated/wrappedlibpaneldefs.h +++ b/src/wrapped/generated/wrappedlibpaneldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpanelDEFS_H_ #define __wrappedlibpanelDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpaneltypes.h b/src/wrapped/generated/wrappedlibpaneltypes.h index 6f55da2c..18418543 100644 --- a/src/wrapped/generated/wrappedlibpaneltypes.h +++ b/src/wrapped/generated/wrappedlibpaneltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpanelTYPES_H_ #define __wrappedlibpanelTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpanelundefs.h b/src/wrapped/generated/wrappedlibpanelundefs.h index 7725e7b2..9f1f1a96 100644 --- a/src/wrapped/generated/wrappedlibpanelundefs.h +++ b/src/wrapped/generated/wrappedlibpanelundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpanelUNDEFS_H_ #define __wrappedlibpanelUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcidefs.h b/src/wrapped/generated/wrappedlibpcidefs.h index cb277a05..8f9209f7 100644 --- a/src/wrapped/generated/wrappedlibpcidefs.h +++ b/src/wrapped/generated/wrappedlibpcidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpciDEFS_H_ #define __wrappedlibpciDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcitypes.h b/src/wrapped/generated/wrappedlibpcitypes.h index 5c78181f..5e885d69 100644 --- a/src/wrapped/generated/wrappedlibpcitypes.h +++ b/src/wrapped/generated/wrappedlibpcitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpciTYPES_H_ #define __wrappedlibpciTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpciundefs.h b/src/wrapped/generated/wrappedlibpciundefs.h index 88b3e89b..051e9d91 100644 --- a/src/wrapped/generated/wrappedlibpciundefs.h +++ b/src/wrapped/generated/wrappedlibpciundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpciUNDEFS_H_ #define __wrappedlibpciUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcredefs.h b/src/wrapped/generated/wrappedlibpcredefs.h index aebe1a8c..c841920d 100644 --- a/src/wrapped/generated/wrappedlibpcredefs.h +++ b/src/wrapped/generated/wrappedlibpcredefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpcreDEFS_H_ #define __wrappedlibpcreDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcretypes.h b/src/wrapped/generated/wrappedlibpcretypes.h index 379b86f4..2a45f0e3 100644 --- a/src/wrapped/generated/wrappedlibpcretypes.h +++ b/src/wrapped/generated/wrappedlibpcretypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpcreTYPES_H_ #define __wrappedlibpcreTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpcreundefs.h b/src/wrapped/generated/wrappedlibpcreundefs.h index d25656d8..80e51c84 100644 --- a/src/wrapped/generated/wrappedlibpcreundefs.h +++ b/src/wrapped/generated/wrappedlibpcreundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpcreUNDEFS_H_ #define __wrappedlibpcreUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpthreaddefs.h b/src/wrapped/generated/wrappedlibpthreaddefs.h index c45f1077..2c8ba679 100644 --- a/src/wrapped/generated/wrappedlibpthreaddefs.h +++ b/src/wrapped/generated/wrappedlibpthreaddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpthreadDEFS_H_ #define __wrappedlibpthreadDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpthreadtypes.h b/src/wrapped/generated/wrappedlibpthreadtypes.h index c9e5b106..20fd7c84 100644 --- a/src/wrapped/generated/wrappedlibpthreadtypes.h +++ b/src/wrapped/generated/wrappedlibpthreadtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpthreadTYPES_H_ #define __wrappedlibpthreadTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpthreadundefs.h b/src/wrapped/generated/wrappedlibpthreadundefs.h index a54b5c82..89aef8c5 100644 --- a/src/wrapped/generated/wrappedlibpthreadundefs.h +++ b/src/wrapped/generated/wrappedlibpthreadundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpthreadUNDEFS_H_ #define __wrappedlibpthreadUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibresolvdefs.h b/src/wrapped/generated/wrappedlibresolvdefs.h index 5ccf7db3..2d287b20 100644 --- a/src/wrapped/generated/wrappedlibresolvdefs.h +++ b/src/wrapped/generated/wrappedlibresolvdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibresolvDEFS_H_ #define __wrappedlibresolvDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibresolvtypes.h b/src/wrapped/generated/wrappedlibresolvtypes.h index 74f7c256..1a9ff8f9 100644 --- a/src/wrapped/generated/wrappedlibresolvtypes.h +++ b/src/wrapped/generated/wrappedlibresolvtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibresolvTYPES_H_ #define __wrappedlibresolvTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibresolvundefs.h b/src/wrapped/generated/wrappedlibresolvundefs.h index 964f3585..ab392dc5 100644 --- a/src/wrapped/generated/wrappedlibresolvundefs.h +++ b/src/wrapped/generated/wrappedlibresolvundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibresolvUNDEFS_H_ #define __wrappedlibresolvUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibrtdefs.h b/src/wrapped/generated/wrappedlibrtdefs.h index 959c4e2f..63819970 100644 --- a/src/wrapped/generated/wrappedlibrtdefs.h +++ b/src/wrapped/generated/wrappedlibrtdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibrtDEFS_H_ #define __wrappedlibrtDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibrttypes.h b/src/wrapped/generated/wrappedlibrttypes.h index bf1b3fd4..b315ae7b 100644 --- a/src/wrapped/generated/wrappedlibrttypes.h +++ b/src/wrapped/generated/wrappedlibrttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibrtTYPES_H_ #define __wrappedlibrtTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibrtundefs.h b/src/wrapped/generated/wrappedlibrtundefs.h index 86a1a4e9..0cdbea1d 100644 --- a/src/wrapped/generated/wrappedlibrtundefs.h +++ b/src/wrapped/generated/wrappedlibrtundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibrtUNDEFS_H_ #define __wrappedlibrtUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsmdefs.h b/src/wrapped/generated/wrappedlibsmdefs.h index 6260b394..70491367 100644 --- a/src/wrapped/generated/wrappedlibsmdefs.h +++ b/src/wrapped/generated/wrappedlibsmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsmDEFS_H_ #define __wrappedlibsmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsmtypes.h b/src/wrapped/generated/wrappedlibsmtypes.h index 0eef2429..18677b2f 100644 --- a/src/wrapped/generated/wrappedlibsmtypes.h +++ b/src/wrapped/generated/wrappedlibsmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsmTYPES_H_ #define __wrappedlibsmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsmundefs.h b/src/wrapped/generated/wrappedlibsmundefs.h index 174f1ec5..d3a8047e 100644 --- a/src/wrapped/generated/wrappedlibsmundefs.h +++ b/src/wrapped/generated/wrappedlibsmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsmUNDEFS_H_ #define __wrappedlibsmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsndfiledefs.h b/src/wrapped/generated/wrappedlibsndfiledefs.h index 32e25ee0..e6b3e9a2 100644 --- a/src/wrapped/generated/wrappedlibsndfiledefs.h +++ b/src/wrapped/generated/wrappedlibsndfiledefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsndfileDEFS_H_ #define __wrappedlibsndfileDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsndfiletypes.h b/src/wrapped/generated/wrappedlibsndfiletypes.h index 5d45b788..4f2a037a 100644 --- a/src/wrapped/generated/wrappedlibsndfiletypes.h +++ b/src/wrapped/generated/wrappedlibsndfiletypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsndfileTYPES_H_ #define __wrappedlibsndfileTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsndfileundefs.h b/src/wrapped/generated/wrappedlibsndfileundefs.h index 887c9b28..07a2aa1b 100644 --- a/src/wrapped/generated/wrappedlibsndfileundefs.h +++ b/src/wrapped/generated/wrappedlibsndfileundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsndfileUNDEFS_H_ #define __wrappedlibsndfileUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsqlite3defs.h b/src/wrapped/generated/wrappedlibsqlite3defs.h index 95e690c6..ce9dec0f 100644 --- a/src/wrapped/generated/wrappedlibsqlite3defs.h +++ b/src/wrapped/generated/wrappedlibsqlite3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsqlite3DEFS_H_ #define __wrappedlibsqlite3DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsqlite3types.h b/src/wrapped/generated/wrappedlibsqlite3types.h index b36662f6..dc02594c 100644 --- a/src/wrapped/generated/wrappedlibsqlite3types.h +++ b/src/wrapped/generated/wrappedlibsqlite3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsqlite3TYPES_H_ #define __wrappedlibsqlite3TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsqlite3undefs.h b/src/wrapped/generated/wrappedlibsqlite3undefs.h index 39570fed..da9a4c4b 100644 --- a/src/wrapped/generated/wrappedlibsqlite3undefs.h +++ b/src/wrapped/generated/wrappedlibsqlite3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsqlite3UNDEFS_H_ #define __wrappedlibsqlite3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssh2defs.h b/src/wrapped/generated/wrappedlibssh2defs.h index 96ef86f3..5493ed6f 100644 --- a/src/wrapped/generated/wrappedlibssh2defs.h +++ b/src/wrapped/generated/wrappedlibssh2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssh2DEFS_H_ #define __wrappedlibssh2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssh2types.h b/src/wrapped/generated/wrappedlibssh2types.h index 3363c6c8..f010c657 100644 --- a/src/wrapped/generated/wrappedlibssh2types.h +++ b/src/wrapped/generated/wrappedlibssh2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssh2TYPES_H_ #define __wrappedlibssh2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibssh2undefs.h b/src/wrapped/generated/wrappedlibssh2undefs.h index 8c110957..07b7e7f8 100644 --- a/src/wrapped/generated/wrappedlibssh2undefs.h +++ b/src/wrapped/generated/wrappedlibssh2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssh2UNDEFS_H_ #define __wrappedlibssh2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssl3defs.h b/src/wrapped/generated/wrappedlibssl3defs.h index 0f2f7478..579d0dd2 100644 --- a/src/wrapped/generated/wrappedlibssl3defs.h +++ b/src/wrapped/generated/wrappedlibssl3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssl3DEFS_H_ #define __wrappedlibssl3DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssl3types.h b/src/wrapped/generated/wrappedlibssl3types.h index ec735057..f96a7938 100644 --- a/src/wrapped/generated/wrappedlibssl3types.h +++ b/src/wrapped/generated/wrappedlibssl3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssl3TYPES_H_ #define __wrappedlibssl3TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibssl3undefs.h b/src/wrapped/generated/wrappedlibssl3undefs.h index 5c86c5e0..d8127914 100644 --- a/src/wrapped/generated/wrappedlibssl3undefs.h +++ b/src/wrapped/generated/wrappedlibssl3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssl3UNDEFS_H_ #define __wrappedlibssl3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssldefs.h b/src/wrapped/generated/wrappedlibssldefs.h index 55eceb38..8128a2d5 100644 --- a/src/wrapped/generated/wrappedlibssldefs.h +++ b/src/wrapped/generated/wrappedlibssldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsslDEFS_H_ #define __wrappedlibsslDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssltypes.h b/src/wrapped/generated/wrappedlibssltypes.h index d6d337f9..9a2e8e5b 100644 --- a/src/wrapped/generated/wrappedlibssltypes.h +++ b/src/wrapped/generated/wrappedlibssltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsslTYPES_H_ #define __wrappedlibsslTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsslundefs.h b/src/wrapped/generated/wrappedlibsslundefs.h index 12278260..a69a3b7e 100644 --- a/src/wrapped/generated/wrappedlibsslundefs.h +++ b/src/wrapped/generated/wrappedlibsslundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsslUNDEFS_H_ #define __wrappedlibsslUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtasn1defs.h b/src/wrapped/generated/wrappedlibtasn1defs.h index 6a4d7bdc..3d9e8f85 100644 --- a/src/wrapped/generated/wrappedlibtasn1defs.h +++ b/src/wrapped/generated/wrappedlibtasn1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtasn1DEFS_H_ #define __wrappedlibtasn1DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtasn1types.h b/src/wrapped/generated/wrappedlibtasn1types.h index 02a76bb5..19cd97a5 100644 --- a/src/wrapped/generated/wrappedlibtasn1types.h +++ b/src/wrapped/generated/wrappedlibtasn1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtasn1TYPES_H_ #define __wrappedlibtasn1TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtasn1undefs.h b/src/wrapped/generated/wrappedlibtasn1undefs.h index 0e9c1681..9db62a15 100644 --- a/src/wrapped/generated/wrappedlibtasn1undefs.h +++ b/src/wrapped/generated/wrappedlibtasn1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtasn1UNDEFS_H_ #define __wrappedlibtasn1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtiff5defs.h b/src/wrapped/generated/wrappedlibtiff5defs.h index 6e9af05d..6dbbdc55 100644 --- a/src/wrapped/generated/wrappedlibtiff5defs.h +++ b/src/wrapped/generated/wrappedlibtiff5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtiff5DEFS_H_ #define __wrappedlibtiff5DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtiff5types.h b/src/wrapped/generated/wrappedlibtiff5types.h index eb9f8ad7..5c8c8f2e 100644 --- a/src/wrapped/generated/wrappedlibtiff5types.h +++ b/src/wrapped/generated/wrappedlibtiff5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtiff5TYPES_H_ #define __wrappedlibtiff5TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtiff5undefs.h b/src/wrapped/generated/wrappedlibtiff5undefs.h index ced3df31..07a4c602 100644 --- a/src/wrapped/generated/wrappedlibtiff5undefs.h +++ b/src/wrapped/generated/wrappedlibtiff5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtiff5UNDEFS_H_ #define __wrappedlibtiff5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfo6defs.h b/src/wrapped/generated/wrappedlibtinfo6defs.h index 72facfae..8a4e4ef7 100644 --- a/src/wrapped/generated/wrappedlibtinfo6defs.h +++ b/src/wrapped/generated/wrappedlibtinfo6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfo6DEFS_H_ #define __wrappedlibtinfo6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfo6types.h b/src/wrapped/generated/wrappedlibtinfo6types.h index e195221b..9557411e 100644 --- a/src/wrapped/generated/wrappedlibtinfo6types.h +++ b/src/wrapped/generated/wrappedlibtinfo6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfo6TYPES_H_ #define __wrappedlibtinfo6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtinfo6undefs.h b/src/wrapped/generated/wrappedlibtinfo6undefs.h index cf063deb..08206aa0 100644 --- a/src/wrapped/generated/wrappedlibtinfo6undefs.h +++ b/src/wrapped/generated/wrappedlibtinfo6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfo6UNDEFS_H_ #define __wrappedlibtinfo6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfodefs.h b/src/wrapped/generated/wrappedlibtinfodefs.h index a04196f3..272a35f6 100644 --- a/src/wrapped/generated/wrappedlibtinfodefs.h +++ b/src/wrapped/generated/wrappedlibtinfodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfoDEFS_H_ #define __wrappedlibtinfoDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfotypes.h b/src/wrapped/generated/wrappedlibtinfotypes.h index e2762449..b82cfe84 100644 --- a/src/wrapped/generated/wrappedlibtinfotypes.h +++ b/src/wrapped/generated/wrappedlibtinfotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfoTYPES_H_ #define __wrappedlibtinfoTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtinfoundefs.h b/src/wrapped/generated/wrappedlibtinfoundefs.h index 03215958..4fd4058d 100644 --- a/src/wrapped/generated/wrappedlibtinfoundefs.h +++ b/src/wrapped/generated/wrappedlibtinfoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfoUNDEFS_H_ #define __wrappedlibtinfoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibunistring2defs.h b/src/wrapped/generated/wrappedlibunistring2defs.h index 52044144..507321fb 100644 --- a/src/wrapped/generated/wrappedlibunistring2defs.h +++ b/src/wrapped/generated/wrappedlibunistring2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibunistring2DEFS_H_ #define __wrappedlibunistring2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibunistring2types.h b/src/wrapped/generated/wrappedlibunistring2types.h index 25a30d9e..c09c42e0 100644 --- a/src/wrapped/generated/wrappedlibunistring2types.h +++ b/src/wrapped/generated/wrappedlibunistring2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibunistring2TYPES_H_ #define __wrappedlibunistring2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibunistring2undefs.h b/src/wrapped/generated/wrappedlibunistring2undefs.h index 88de83f1..3556a6b3 100644 --- a/src/wrapped/generated/wrappedlibunistring2undefs.h +++ b/src/wrapped/generated/wrappedlibunistring2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibunistring2UNDEFS_H_ #define __wrappedlibunistring2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibusb1defs.h b/src/wrapped/generated/wrappedlibusb1defs.h index 9da71f8a..c3b82844 100644 --- a/src/wrapped/generated/wrappedlibusb1defs.h +++ b/src/wrapped/generated/wrappedlibusb1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibusb1DEFS_H_ #define __wrappedlibusb1DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibusb1types.h b/src/wrapped/generated/wrappedlibusb1types.h index 9155c25b..13227c92 100644 --- a/src/wrapped/generated/wrappedlibusb1types.h +++ b/src/wrapped/generated/wrappedlibusb1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibusb1TYPES_H_ #define __wrappedlibusb1TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibusb1undefs.h b/src/wrapped/generated/wrappedlibusb1undefs.h index 99ee492f..cf08b0e4 100644 --- a/src/wrapped/generated/wrappedlibusb1undefs.h +++ b/src/wrapped/generated/wrappedlibusb1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibusb1UNDEFS_H_ #define __wrappedlibusb1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibuuiddefs.h b/src/wrapped/generated/wrappedlibuuiddefs.h index c20d4b63..75dfed42 100644 --- a/src/wrapped/generated/wrappedlibuuiddefs.h +++ b/src/wrapped/generated/wrappedlibuuiddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibuuidDEFS_H_ #define __wrappedlibuuidDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibuuidtypes.h b/src/wrapped/generated/wrappedlibuuidtypes.h index a39b43d1..e2a35479 100644 --- a/src/wrapped/generated/wrappedlibuuidtypes.h +++ b/src/wrapped/generated/wrappedlibuuidtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibuuidTYPES_H_ #define __wrappedlibuuidTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibuuidundefs.h b/src/wrapped/generated/wrappedlibuuidundefs.h index e7059700..be82d005 100644 --- a/src/wrapped/generated/wrappedlibuuidundefs.h +++ b/src/wrapped/generated/wrappedlibuuidundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibuuidUNDEFS_H_ #define __wrappedlibuuidUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvadefs.h b/src/wrapped/generated/wrappedlibvadefs.h index 40decd84..c6fa8efe 100644 --- a/src/wrapped/generated/wrappedlibvadefs.h +++ b/src/wrapped/generated/wrappedlibvadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvaDEFS_H_ #define __wrappedlibvaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvadrmdefs.h b/src/wrapped/generated/wrappedlibvadrmdefs.h index 359d7063..ee2b76f5 100644 --- a/src/wrapped/generated/wrappedlibvadrmdefs.h +++ b/src/wrapped/generated/wrappedlibvadrmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvadrmDEFS_H_ #define __wrappedlibvadrmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvadrmtypes.h b/src/wrapped/generated/wrappedlibvadrmtypes.h index b1d9979b..d82ee78e 100644 --- a/src/wrapped/generated/wrappedlibvadrmtypes.h +++ b/src/wrapped/generated/wrappedlibvadrmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvadrmTYPES_H_ #define __wrappedlibvadrmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvadrmundefs.h b/src/wrapped/generated/wrappedlibvadrmundefs.h index a729302d..e01deef0 100644 --- a/src/wrapped/generated/wrappedlibvadrmundefs.h +++ b/src/wrapped/generated/wrappedlibvadrmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvadrmUNDEFS_H_ #define __wrappedlibvadrmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvatypes.h b/src/wrapped/generated/wrappedlibvatypes.h index 3eac0367..fb7add4b 100644 --- a/src/wrapped/generated/wrappedlibvatypes.h +++ b/src/wrapped/generated/wrappedlibvatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvaTYPES_H_ #define __wrappedlibvaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvaundefs.h b/src/wrapped/generated/wrappedlibvaundefs.h index ed6dde19..78cfc81f 100644 --- a/src/wrapped/generated/wrappedlibvaundefs.h +++ b/src/wrapped/generated/wrappedlibvaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvaUNDEFS_H_ #define __wrappedlibvaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvawaylanddefs.h b/src/wrapped/generated/wrappedlibvawaylanddefs.h index 02a7e4b1..edf641ec 100644 --- a/src/wrapped/generated/wrappedlibvawaylanddefs.h +++ b/src/wrapped/generated/wrappedlibvawaylanddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvawaylandDEFS_H_ #define __wrappedlibvawaylandDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvawaylandtypes.h b/src/wrapped/generated/wrappedlibvawaylandtypes.h index 96e1861e..63d74476 100644 --- a/src/wrapped/generated/wrappedlibvawaylandtypes.h +++ b/src/wrapped/generated/wrappedlibvawaylandtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvawaylandTYPES_H_ #define __wrappedlibvawaylandTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvawaylandundefs.h b/src/wrapped/generated/wrappedlibvawaylandundefs.h index 62a23ae0..22f2d266 100644 --- a/src/wrapped/generated/wrappedlibvawaylandundefs.h +++ b/src/wrapped/generated/wrappedlibvawaylandundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvawaylandUNDEFS_H_ #define __wrappedlibvawaylandUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvax11defs.h b/src/wrapped/generated/wrappedlibvax11defs.h index afa9f011..02ad44b8 100644 --- a/src/wrapped/generated/wrappedlibvax11defs.h +++ b/src/wrapped/generated/wrappedlibvax11defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvax11DEFS_H_ #define __wrappedlibvax11DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvax11types.h b/src/wrapped/generated/wrappedlibvax11types.h index 118aad9b..416a2a12 100644 --- a/src/wrapped/generated/wrappedlibvax11types.h +++ b/src/wrapped/generated/wrappedlibvax11types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvax11TYPES_H_ #define __wrappedlibvax11TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvax11undefs.h b/src/wrapped/generated/wrappedlibvax11undefs.h index 265614f6..fc2e19d1 100644 --- a/src/wrapped/generated/wrappedlibvax11undefs.h +++ b/src/wrapped/generated/wrappedlibvax11undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvax11UNDEFS_H_ #define __wrappedlibvax11UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvdpaudefs.h b/src/wrapped/generated/wrappedlibvdpaudefs.h index 5a073777..c4734b45 100644 --- a/src/wrapped/generated/wrappedlibvdpaudefs.h +++ b/src/wrapped/generated/wrappedlibvdpaudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvdpauDEFS_H_ #define __wrappedlibvdpauDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvdpautypes.h b/src/wrapped/generated/wrappedlibvdpautypes.h index 8c041023..a99a425e 100644 --- a/src/wrapped/generated/wrappedlibvdpautypes.h +++ b/src/wrapped/generated/wrappedlibvdpautypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvdpauTYPES_H_ #define __wrappedlibvdpauTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvdpauundefs.h b/src/wrapped/generated/wrappedlibvdpauundefs.h index 3f7baa67..96eb0b76 100644 --- a/src/wrapped/generated/wrappedlibvdpauundefs.h +++ b/src/wrapped/generated/wrappedlibvdpauundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvdpauUNDEFS_H_ #define __wrappedlibvdpauUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvorbisdefs.h b/src/wrapped/generated/wrappedlibvorbisdefs.h index 73d6d3fe..4bbd1d03 100644 --- a/src/wrapped/generated/wrappedlibvorbisdefs.h +++ b/src/wrapped/generated/wrappedlibvorbisdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvorbisDEFS_H_ #define __wrappedlibvorbisDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvorbistypes.h b/src/wrapped/generated/wrappedlibvorbistypes.h index b90ae75c..a0bb9184 100644 --- a/src/wrapped/generated/wrappedlibvorbistypes.h +++ b/src/wrapped/generated/wrappedlibvorbistypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvorbisTYPES_H_ #define __wrappedlibvorbisTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvorbisundefs.h b/src/wrapped/generated/wrappedlibvorbisundefs.h index 75f1028b..5a2efb39 100644 --- a/src/wrapped/generated/wrappedlibvorbisundefs.h +++ b/src/wrapped/generated/wrappedlibvorbisundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvorbisUNDEFS_H_ #define __wrappedlibvorbisUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11defs.h b/src/wrapped/generated/wrappedlibx11defs.h index 9c6afd1f..ac3be5ab 100644 --- a/src/wrapped/generated/wrappedlibx11defs.h +++ b/src/wrapped/generated/wrappedlibx11defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11DEFS_H_ #define __wrappedlibx11DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11types.h b/src/wrapped/generated/wrappedlibx11types.h index f712ce53..df0cc168 100644 --- a/src/wrapped/generated/wrappedlibx11types.h +++ b/src/wrapped/generated/wrappedlibx11types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11TYPES_H_ #define __wrappedlibx11TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibx11undefs.h b/src/wrapped/generated/wrappedlibx11undefs.h index 4fe5929e..0ed9550a 100644 --- a/src/wrapped/generated/wrappedlibx11undefs.h +++ b/src/wrapped/generated/wrappedlibx11undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11UNDEFS_H_ #define __wrappedlibx11UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11xcbdefs.h b/src/wrapped/generated/wrappedlibx11xcbdefs.h index ffa5c2d9..4e890617 100644 --- a/src/wrapped/generated/wrappedlibx11xcbdefs.h +++ b/src/wrapped/generated/wrappedlibx11xcbdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11xcbDEFS_H_ #define __wrappedlibx11xcbDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11xcbtypes.h b/src/wrapped/generated/wrappedlibx11xcbtypes.h index 0e534c64..6c9eb729 100644 --- a/src/wrapped/generated/wrappedlibx11xcbtypes.h +++ b/src/wrapped/generated/wrappedlibx11xcbtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11xcbTYPES_H_ #define __wrappedlibx11xcbTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibx11xcbundefs.h b/src/wrapped/generated/wrappedlibx11xcbundefs.h index ed02c592..2a75c256 100644 --- a/src/wrapped/generated/wrappedlibx11xcbundefs.h +++ b/src/wrapped/generated/wrappedlibx11xcbundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11xcbUNDEFS_H_ #define __wrappedlibx11xcbUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxaudefs.h b/src/wrapped/generated/wrappedlibxaudefs.h index 293e4487..a62be1b7 100644 --- a/src/wrapped/generated/wrappedlibxaudefs.h +++ b/src/wrapped/generated/wrappedlibxaudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxauDEFS_H_ #define __wrappedlibxauDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxautypes.h b/src/wrapped/generated/wrappedlibxautypes.h index a19e2da6..884e6abe 100644 --- a/src/wrapped/generated/wrappedlibxautypes.h +++ b/src/wrapped/generated/wrappedlibxautypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxauTYPES_H_ #define __wrappedlibxauTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxauundefs.h b/src/wrapped/generated/wrappedlibxauundefs.h index 27c78c60..76daaf80 100644 --- a/src/wrapped/generated/wrappedlibxauundefs.h +++ b/src/wrapped/generated/wrappedlibxauundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxauUNDEFS_H_ #define __wrappedlibxauUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbcursordefs.h b/src/wrapped/generated/wrappedlibxcbcursordefs.h index 7db154a5..421900cb 100644 --- a/src/wrapped/generated/wrappedlibxcbcursordefs.h +++ b/src/wrapped/generated/wrappedlibxcbcursordefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbcursorDEFS_H_ #define __wrappedlibxcbcursorDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbcursortypes.h b/src/wrapped/generated/wrappedlibxcbcursortypes.h index e2dfeddb..d31c26cd 100644 --- a/src/wrapped/generated/wrappedlibxcbcursortypes.h +++ b/src/wrapped/generated/wrappedlibxcbcursortypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbcursorTYPES_H_ #define __wrappedlibxcbcursorTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbcursorundefs.h b/src/wrapped/generated/wrappedlibxcbcursorundefs.h index d85e57f9..5fdd7f70 100644 --- a/src/wrapped/generated/wrappedlibxcbcursorundefs.h +++ b/src/wrapped/generated/wrappedlibxcbcursorundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbcursorUNDEFS_H_ #define __wrappedlibxcbcursorUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdefs.h b/src/wrapped/generated/wrappedlibxcbdefs.h index 62930d68..839b67cd 100644 --- a/src/wrapped/generated/wrappedlibxcbdefs.h +++ b/src/wrapped/generated/wrappedlibxcbdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbDEFS_H_ #define __wrappedlibxcbDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri2defs.h b/src/wrapped/generated/wrappedlibxcbdri2defs.h index a0914c45..b834ca43 100644 --- a/src/wrapped/generated/wrappedlibxcbdri2defs.h +++ b/src/wrapped/generated/wrappedlibxcbdri2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri2DEFS_H_ #define __wrappedlibxcbdri2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri2types.h b/src/wrapped/generated/wrappedlibxcbdri2types.h index e483d455..128354df 100644 --- a/src/wrapped/generated/wrappedlibxcbdri2types.h +++ b/src/wrapped/generated/wrappedlibxcbdri2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri2TYPES_H_ #define __wrappedlibxcbdri2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri2undefs.h b/src/wrapped/generated/wrappedlibxcbdri2undefs.h index 39e96e07..6577e033 100644 --- a/src/wrapped/generated/wrappedlibxcbdri2undefs.h +++ b/src/wrapped/generated/wrappedlibxcbdri2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri2UNDEFS_H_ #define __wrappedlibxcbdri2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri3defs.h b/src/wrapped/generated/wrappedlibxcbdri3defs.h index 2a1d6aa6..f2e3b3eb 100644 --- a/src/wrapped/generated/wrappedlibxcbdri3defs.h +++ b/src/wrapped/generated/wrappedlibxcbdri3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri3DEFS_H_ #define __wrappedlibxcbdri3DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri3types.h b/src/wrapped/generated/wrappedlibxcbdri3types.h index c3928807..bb9fe157 100644 --- a/src/wrapped/generated/wrappedlibxcbdri3types.h +++ b/src/wrapped/generated/wrappedlibxcbdri3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri3TYPES_H_ #define __wrappedlibxcbdri3TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri3undefs.h b/src/wrapped/generated/wrappedlibxcbdri3undefs.h index f28e6dbb..14d1a480 100644 --- a/src/wrapped/generated/wrappedlibxcbdri3undefs.h +++ b/src/wrapped/generated/wrappedlibxcbdri3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri3UNDEFS_H_ #define __wrappedlibxcbdri3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbglxdefs.h b/src/wrapped/generated/wrappedlibxcbglxdefs.h index 892bafeb..b0337153 100644 --- a/src/wrapped/generated/wrappedlibxcbglxdefs.h +++ b/src/wrapped/generated/wrappedlibxcbglxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbglxDEFS_H_ #define __wrappedlibxcbglxDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbglxtypes.h b/src/wrapped/generated/wrappedlibxcbglxtypes.h index fba2309c..ff4884fe 100644 --- a/src/wrapped/generated/wrappedlibxcbglxtypes.h +++ b/src/wrapped/generated/wrappedlibxcbglxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbglxTYPES_H_ #define __wrappedlibxcbglxTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbglxundefs.h b/src/wrapped/generated/wrappedlibxcbglxundefs.h index 03aa022e..639cf6be 100644 --- a/src/wrapped/generated/wrappedlibxcbglxundefs.h +++ b/src/wrapped/generated/wrappedlibxcbglxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbglxUNDEFS_H_ #define __wrappedlibxcbglxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbicccmdefs.h b/src/wrapped/generated/wrappedlibxcbicccmdefs.h index 553bf71c..0b7816f5 100644 --- a/src/wrapped/generated/wrappedlibxcbicccmdefs.h +++ b/src/wrapped/generated/wrappedlibxcbicccmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbicccmDEFS_H_ #define __wrappedlibxcbicccmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbicccmtypes.h b/src/wrapped/generated/wrappedlibxcbicccmtypes.h index baeff95c..04d024ea 100644 --- a/src/wrapped/generated/wrappedlibxcbicccmtypes.h +++ b/src/wrapped/generated/wrappedlibxcbicccmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbicccmTYPES_H_ #define __wrappedlibxcbicccmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbicccmundefs.h b/src/wrapped/generated/wrappedlibxcbicccmundefs.h index 85117de9..18d7a156 100644 --- a/src/wrapped/generated/wrappedlibxcbicccmundefs.h +++ b/src/wrapped/generated/wrappedlibxcbicccmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbicccmUNDEFS_H_ #define __wrappedlibxcbicccmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbimagedefs.h b/src/wrapped/generated/wrappedlibxcbimagedefs.h index 851c2f02..13bd75c5 100644 --- a/src/wrapped/generated/wrappedlibxcbimagedefs.h +++ b/src/wrapped/generated/wrappedlibxcbimagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbimageDEFS_H_ #define __wrappedlibxcbimageDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbimagetypes.h b/src/wrapped/generated/wrappedlibxcbimagetypes.h index cde1840e..72664ecd 100644 --- a/src/wrapped/generated/wrappedlibxcbimagetypes.h +++ b/src/wrapped/generated/wrappedlibxcbimagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbimageTYPES_H_ #define __wrappedlibxcbimageTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbimageundefs.h b/src/wrapped/generated/wrappedlibxcbimageundefs.h index bbcba65f..9efd0f0d 100644 --- a/src/wrapped/generated/wrappedlibxcbimageundefs.h +++ b/src/wrapped/generated/wrappedlibxcbimageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbimageUNDEFS_H_ #define __wrappedlibxcbimageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h b/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h index dacaad5a..62616851 100644 --- a/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h +++ b/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbkeysymsDEFS_H_ #define __wrappedlibxcbkeysymsDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbkeysymstypes.h b/src/wrapped/generated/wrappedlibxcbkeysymstypes.h index e2772cc2..58ede945 100644 --- a/src/wrapped/generated/wrappedlibxcbkeysymstypes.h +++ b/src/wrapped/generated/wrappedlibxcbkeysymstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbkeysymsTYPES_H_ #define __wrappedlibxcbkeysymsTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h b/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h index 28e2aba8..0f3f41dd 100644 --- a/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h +++ b/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbkeysymsUNDEFS_H_ #define __wrappedlibxcbkeysymsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbpresentdefs.h b/src/wrapped/generated/wrappedlibxcbpresentdefs.h index bc8a3af8..3940e9aa 100644 --- a/src/wrapped/generated/wrappedlibxcbpresentdefs.h +++ b/src/wrapped/generated/wrappedlibxcbpresentdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbpresentDEFS_H_ #define __wrappedlibxcbpresentDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbpresenttypes.h b/src/wrapped/generated/wrappedlibxcbpresenttypes.h index 23250753..7cba6b43 100644 --- a/src/wrapped/generated/wrappedlibxcbpresenttypes.h +++ b/src/wrapped/generated/wrappedlibxcbpresenttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbpresentTYPES_H_ #define __wrappedlibxcbpresentTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbpresentundefs.h b/src/wrapped/generated/wrappedlibxcbpresentundefs.h index 0443c7a8..4f004da4 100644 --- a/src/wrapped/generated/wrappedlibxcbpresentundefs.h +++ b/src/wrapped/generated/wrappedlibxcbpresentundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbpresentUNDEFS_H_ #define __wrappedlibxcbpresentUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrandrdefs.h b/src/wrapped/generated/wrappedlibxcbrandrdefs.h index 9b44fc06..68059940 100644 --- a/src/wrapped/generated/wrappedlibxcbrandrdefs.h +++ b/src/wrapped/generated/wrappedlibxcbrandrdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrandrDEFS_H_ #define __wrappedlibxcbrandrDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrandrtypes.h b/src/wrapped/generated/wrappedlibxcbrandrtypes.h index dad5eee1..4a3a5288 100644 --- a/src/wrapped/generated/wrappedlibxcbrandrtypes.h +++ b/src/wrapped/generated/wrappedlibxcbrandrtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrandrTYPES_H_ #define __wrappedlibxcbrandrTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrandrundefs.h b/src/wrapped/generated/wrappedlibxcbrandrundefs.h index 5c329360..5e43aef2 100644 --- a/src/wrapped/generated/wrappedlibxcbrandrundefs.h +++ b/src/wrapped/generated/wrappedlibxcbrandrundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrandrUNDEFS_H_ #define __wrappedlibxcbrandrUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderdefs.h b/src/wrapped/generated/wrappedlibxcbrenderdefs.h index da0f8736..0944592c 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderdefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderDEFS_H_ #define __wrappedlibxcbrenderDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrendertypes.h b/src/wrapped/generated/wrappedlibxcbrendertypes.h index 750fd616..275f7d5e 100644 --- a/src/wrapped/generated/wrappedlibxcbrendertypes.h +++ b/src/wrapped/generated/wrappedlibxcbrendertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderTYPES_H_ #define __wrappedlibxcbrenderTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderundefs.h b/src/wrapped/generated/wrappedlibxcbrenderundefs.h index 2a14ad1b..2e51c59b 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderundefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderUNDEFS_H_ #define __wrappedlibxcbrenderUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderutildefs.h b/src/wrapped/generated/wrappedlibxcbrenderutildefs.h index 5270f1f7..d4708a91 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderutildefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderutildefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderutilDEFS_H_ #define __wrappedlibxcbrenderutilDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h b/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h index 2ce0dd81..7c112ef1 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h +++ b/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderutilTYPES_H_ #define __wrappedlibxcbrenderutilTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h b/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h index 3b556168..b8265adc 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderutilUNDEFS_H_ #define __wrappedlibxcbrenderutilUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshapedefs.h b/src/wrapped/generated/wrappedlibxcbshapedefs.h index 23f5ccb6..bd0a7339 100644 --- a/src/wrapped/generated/wrappedlibxcbshapedefs.h +++ b/src/wrapped/generated/wrappedlibxcbshapedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshapeDEFS_H_ #define __wrappedlibxcbshapeDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshapetypes.h b/src/wrapped/generated/wrappedlibxcbshapetypes.h index c794e0be..d5115139 100644 --- a/src/wrapped/generated/wrappedlibxcbshapetypes.h +++ b/src/wrapped/generated/wrappedlibxcbshapetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshapeTYPES_H_ #define __wrappedlibxcbshapeTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshapeundefs.h b/src/wrapped/generated/wrappedlibxcbshapeundefs.h index 1ec642f0..e60eafe2 100644 --- a/src/wrapped/generated/wrappedlibxcbshapeundefs.h +++ b/src/wrapped/generated/wrappedlibxcbshapeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshapeUNDEFS_H_ #define __wrappedlibxcbshapeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshmdefs.h b/src/wrapped/generated/wrappedlibxcbshmdefs.h index 584c4710..89cf28e0 100644 --- a/src/wrapped/generated/wrappedlibxcbshmdefs.h +++ b/src/wrapped/generated/wrappedlibxcbshmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshmDEFS_H_ #define __wrappedlibxcbshmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshmtypes.h b/src/wrapped/generated/wrappedlibxcbshmtypes.h index 82a85b4a..12e67ffe 100644 --- a/src/wrapped/generated/wrappedlibxcbshmtypes.h +++ b/src/wrapped/generated/wrappedlibxcbshmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshmTYPES_H_ #define __wrappedlibxcbshmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshmundefs.h b/src/wrapped/generated/wrappedlibxcbshmundefs.h index eccdb49e..f62fc3de 100644 --- a/src/wrapped/generated/wrappedlibxcbshmundefs.h +++ b/src/wrapped/generated/wrappedlibxcbshmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshmUNDEFS_H_ #define __wrappedlibxcbshmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbsyncdefs.h b/src/wrapped/generated/wrappedlibxcbsyncdefs.h index 91787f30..5df44751 100644 --- a/src/wrapped/generated/wrappedlibxcbsyncdefs.h +++ b/src/wrapped/generated/wrappedlibxcbsyncdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbsyncDEFS_H_ #define __wrappedlibxcbsyncDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbsynctypes.h b/src/wrapped/generated/wrappedlibxcbsynctypes.h index ef4d5445..30d58c27 100644 --- a/src/wrapped/generated/wrappedlibxcbsynctypes.h +++ b/src/wrapped/generated/wrappedlibxcbsynctypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbsyncTYPES_H_ #define __wrappedlibxcbsyncTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbsyncundefs.h b/src/wrapped/generated/wrappedlibxcbsyncundefs.h index 14b58ac8..0be1a6cd 100644 --- a/src/wrapped/generated/wrappedlibxcbsyncundefs.h +++ b/src/wrapped/generated/wrappedlibxcbsyncundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbsyncUNDEFS_H_ #define __wrappedlibxcbsyncUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbtypes.h b/src/wrapped/generated/wrappedlibxcbtypes.h index 61e03f24..44df68c0 100644 --- a/src/wrapped/generated/wrappedlibxcbtypes.h +++ b/src/wrapped/generated/wrappedlibxcbtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbTYPES_H_ #define __wrappedlibxcbTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbundefs.h b/src/wrapped/generated/wrappedlibxcbundefs.h index 679ee161..73e29a50 100644 --- a/src/wrapped/generated/wrappedlibxcbundefs.h +++ b/src/wrapped/generated/wrappedlibxcbundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbUNDEFS_H_ #define __wrappedlibxcbUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbutildefs.h b/src/wrapped/generated/wrappedlibxcbutildefs.h index 5eaeeaaa..9db8639b 100644 --- a/src/wrapped/generated/wrappedlibxcbutildefs.h +++ b/src/wrapped/generated/wrappedlibxcbutildefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbutilDEFS_H_ #define __wrappedlibxcbutilDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbutiltypes.h b/src/wrapped/generated/wrappedlibxcbutiltypes.h index 5d9e6437..f0bbf43d 100644 --- a/src/wrapped/generated/wrappedlibxcbutiltypes.h +++ b/src/wrapped/generated/wrappedlibxcbutiltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbutilTYPES_H_ #define __wrappedlibxcbutilTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbutilundefs.h b/src/wrapped/generated/wrappedlibxcbutilundefs.h index d1776c6e..21a8362e 100644 --- a/src/wrapped/generated/wrappedlibxcbutilundefs.h +++ b/src/wrapped/generated/wrappedlibxcbutilundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbutilUNDEFS_H_ #define __wrappedlibxcbutilUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxfixesdefs.h b/src/wrapped/generated/wrappedlibxcbxfixesdefs.h index 580a33eb..17d266ab 100644 --- a/src/wrapped/generated/wrappedlibxcbxfixesdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxfixesdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxfixesDEFS_H_ #define __wrappedlibxcbxfixesDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxfixestypes.h b/src/wrapped/generated/wrappedlibxcbxfixestypes.h index 4bcc9780..ee9d5714 100644 --- a/src/wrapped/generated/wrappedlibxcbxfixestypes.h +++ b/src/wrapped/generated/wrappedlibxcbxfixestypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxfixesTYPES_H_ #define __wrappedlibxcbxfixesTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxfixesundefs.h b/src/wrapped/generated/wrappedlibxcbxfixesundefs.h index 9976a687..f5422947 100644 --- a/src/wrapped/generated/wrappedlibxcbxfixesundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxfixesundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxfixesUNDEFS_H_ #define __wrappedlibxcbxfixesUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxineramadefs.h b/src/wrapped/generated/wrappedlibxcbxineramadefs.h index ad273109..ce8da0a0 100644 --- a/src/wrapped/generated/wrappedlibxcbxineramadefs.h +++ b/src/wrapped/generated/wrappedlibxcbxineramadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxineramaDEFS_H_ #define __wrappedlibxcbxineramaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxineramatypes.h b/src/wrapped/generated/wrappedlibxcbxineramatypes.h index 98d9667e..95b263a8 100644 --- a/src/wrapped/generated/wrappedlibxcbxineramatypes.h +++ b/src/wrapped/generated/wrappedlibxcbxineramatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxineramaTYPES_H_ #define __wrappedlibxcbxineramaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxineramaundefs.h b/src/wrapped/generated/wrappedlibxcbxineramaundefs.h index 70103e11..d4f053f2 100644 --- a/src/wrapped/generated/wrappedlibxcbxineramaundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxineramaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxineramaUNDEFS_H_ #define __wrappedlibxcbxineramaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxinputdefs.h b/src/wrapped/generated/wrappedlibxcbxinputdefs.h index 0811efbe..0cffa83b 100644 --- a/src/wrapped/generated/wrappedlibxcbxinputdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxinputdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxinputDEFS_H_ #define __wrappedlibxcbxinputDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxinputtypes.h b/src/wrapped/generated/wrappedlibxcbxinputtypes.h index 366fe68c..c4f50505 100644 --- a/src/wrapped/generated/wrappedlibxcbxinputtypes.h +++ b/src/wrapped/generated/wrappedlibxcbxinputtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxinputTYPES_H_ #define __wrappedlibxcbxinputTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxinputundefs.h b/src/wrapped/generated/wrappedlibxcbxinputundefs.h index 8e638afa..9fdcc397 100644 --- a/src/wrapped/generated/wrappedlibxcbxinputundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxinputundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxinputUNDEFS_H_ #define __wrappedlibxcbxinputUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxkbdefs.h b/src/wrapped/generated/wrappedlibxcbxkbdefs.h index 21f98e20..8bfe9206 100644 --- a/src/wrapped/generated/wrappedlibxcbxkbdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxkbdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxkbDEFS_H_ #define __wrappedlibxcbxkbDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxkbtypes.h b/src/wrapped/generated/wrappedlibxcbxkbtypes.h index cb2f33bd..8a8b36cf 100644 --- a/src/wrapped/generated/wrappedlibxcbxkbtypes.h +++ b/src/wrapped/generated/wrappedlibxcbxkbtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxkbTYPES_H_ #define __wrappedlibxcbxkbTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxkbundefs.h b/src/wrapped/generated/wrappedlibxcbxkbundefs.h index 7fa787a4..68fbc5c8 100644 --- a/src/wrapped/generated/wrappedlibxcbxkbundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxkbundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxkbUNDEFS_H_ #define __wrappedlibxcbxkbUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxtestdefs.h b/src/wrapped/generated/wrappedlibxcbxtestdefs.h index a68e8d86..3c0cc193 100644 --- a/src/wrapped/generated/wrappedlibxcbxtestdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxtestdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxtestDEFS_H_ #define __wrappedlibxcbxtestDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxtesttypes.h b/src/wrapped/generated/wrappedlibxcbxtesttypes.h index 3583dd74..9c6baf70 100644 --- a/src/wrapped/generated/wrappedlibxcbxtesttypes.h +++ b/src/wrapped/generated/wrappedlibxcbxtesttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxtestTYPES_H_ #define __wrappedlibxcbxtestTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxtestundefs.h b/src/wrapped/generated/wrappedlibxcbxtestundefs.h index 552c01ad..d914996e 100644 --- a/src/wrapped/generated/wrappedlibxcbxtestundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxtestundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxtestUNDEFS_H_ #define __wrappedlibxcbxtestUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcompositedefs.h b/src/wrapped/generated/wrappedlibxcompositedefs.h index 4228a448..d4ee2b28 100644 --- a/src/wrapped/generated/wrappedlibxcompositedefs.h +++ b/src/wrapped/generated/wrappedlibxcompositedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcompositeDEFS_H_ #define __wrappedlibxcompositeDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcompositetypes.h b/src/wrapped/generated/wrappedlibxcompositetypes.h index 0cda0e12..b6bd6f39 100644 --- a/src/wrapped/generated/wrappedlibxcompositetypes.h +++ b/src/wrapped/generated/wrappedlibxcompositetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcompositeTYPES_H_ #define __wrappedlibxcompositeTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcompositeundefs.h b/src/wrapped/generated/wrappedlibxcompositeundefs.h index 98be8e62..18b0a1a5 100644 --- a/src/wrapped/generated/wrappedlibxcompositeundefs.h +++ b/src/wrapped/generated/wrappedlibxcompositeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcompositeUNDEFS_H_ #define __wrappedlibxcompositeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcursordefs.h b/src/wrapped/generated/wrappedlibxcursordefs.h index 1394578d..ff65d89a 100644 --- a/src/wrapped/generated/wrappedlibxcursordefs.h +++ b/src/wrapped/generated/wrappedlibxcursordefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcursorDEFS_H_ #define __wrappedlibxcursorDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcursortypes.h b/src/wrapped/generated/wrappedlibxcursortypes.h index cb21afd2..ec5a698a 100644 --- a/src/wrapped/generated/wrappedlibxcursortypes.h +++ b/src/wrapped/generated/wrappedlibxcursortypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcursorTYPES_H_ #define __wrappedlibxcursorTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcursorundefs.h b/src/wrapped/generated/wrappedlibxcursorundefs.h index e64c2503..58ac2dad 100644 --- a/src/wrapped/generated/wrappedlibxcursorundefs.h +++ b/src/wrapped/generated/wrappedlibxcursorundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcursorUNDEFS_H_ #define __wrappedlibxcursorUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdamagedefs.h b/src/wrapped/generated/wrappedlibxdamagedefs.h index f9ffdd4e..9e2b0859 100644 --- a/src/wrapped/generated/wrappedlibxdamagedefs.h +++ b/src/wrapped/generated/wrappedlibxdamagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdamageDEFS_H_ #define __wrappedlibxdamageDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdamagetypes.h b/src/wrapped/generated/wrappedlibxdamagetypes.h index 4aa79cfc..49b77975 100644 --- a/src/wrapped/generated/wrappedlibxdamagetypes.h +++ b/src/wrapped/generated/wrappedlibxdamagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdamageTYPES_H_ #define __wrappedlibxdamageTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxdamageundefs.h b/src/wrapped/generated/wrappedlibxdamageundefs.h index 3a0c70eb..df52ab20 100644 --- a/src/wrapped/generated/wrappedlibxdamageundefs.h +++ b/src/wrapped/generated/wrappedlibxdamageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdamageUNDEFS_H_ #define __wrappedlibxdamageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdmcpdefs.h b/src/wrapped/generated/wrappedlibxdmcpdefs.h index df3bff9b..e8b79847 100644 --- a/src/wrapped/generated/wrappedlibxdmcpdefs.h +++ b/src/wrapped/generated/wrappedlibxdmcpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdmcpDEFS_H_ #define __wrappedlibxdmcpDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdmcptypes.h b/src/wrapped/generated/wrappedlibxdmcptypes.h index fec3d45d..72085512 100644 --- a/src/wrapped/generated/wrappedlibxdmcptypes.h +++ b/src/wrapped/generated/wrappedlibxdmcptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdmcpTYPES_H_ #define __wrappedlibxdmcpTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxdmcpundefs.h b/src/wrapped/generated/wrappedlibxdmcpundefs.h index 9158ebe6..af18a05e 100644 --- a/src/wrapped/generated/wrappedlibxdmcpundefs.h +++ b/src/wrapped/generated/wrappedlibxdmcpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdmcpUNDEFS_H_ #define __wrappedlibxdmcpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxextdefs.h b/src/wrapped/generated/wrappedlibxextdefs.h index f10ce9b7..fbb5b4ed 100644 --- a/src/wrapped/generated/wrappedlibxextdefs.h +++ b/src/wrapped/generated/wrappedlibxextdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxextDEFS_H_ #define __wrappedlibxextDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxexttypes.h b/src/wrapped/generated/wrappedlibxexttypes.h index 75f71c1d..b8e1ec5d 100644 --- a/src/wrapped/generated/wrappedlibxexttypes.h +++ b/src/wrapped/generated/wrappedlibxexttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxextTYPES_H_ #define __wrappedlibxextTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxextundefs.h b/src/wrapped/generated/wrappedlibxextundefs.h index f80c8e02..2d5e227d 100644 --- a/src/wrapped/generated/wrappedlibxextundefs.h +++ b/src/wrapped/generated/wrappedlibxextundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxextUNDEFS_H_ #define __wrappedlibxextUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxfixesdefs.h b/src/wrapped/generated/wrappedlibxfixesdefs.h index 71736ae8..1d30a1be 100644 --- a/src/wrapped/generated/wrappedlibxfixesdefs.h +++ b/src/wrapped/generated/wrappedlibxfixesdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxfixesDEFS_H_ #define __wrappedlibxfixesDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxfixestypes.h b/src/wrapped/generated/wrappedlibxfixestypes.h index 38ebb612..855dbece 100644 --- a/src/wrapped/generated/wrappedlibxfixestypes.h +++ b/src/wrapped/generated/wrappedlibxfixestypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxfixesTYPES_H_ #define __wrappedlibxfixesTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxfixesundefs.h b/src/wrapped/generated/wrappedlibxfixesundefs.h index a6c33724..0cebf98f 100644 --- a/src/wrapped/generated/wrappedlibxfixesundefs.h +++ b/src/wrapped/generated/wrappedlibxfixesundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxfixesUNDEFS_H_ #define __wrappedlibxfixesUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxftdefs.h b/src/wrapped/generated/wrappedlibxftdefs.h index bce3a592..a0bb91d9 100644 --- a/src/wrapped/generated/wrappedlibxftdefs.h +++ b/src/wrapped/generated/wrappedlibxftdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxftDEFS_H_ #define __wrappedlibxftDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxfttypes.h b/src/wrapped/generated/wrappedlibxfttypes.h index f2a1391a..85d9e4f0 100644 --- a/src/wrapped/generated/wrappedlibxfttypes.h +++ b/src/wrapped/generated/wrappedlibxfttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxftTYPES_H_ #define __wrappedlibxftTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxftundefs.h b/src/wrapped/generated/wrappedlibxftundefs.h index 04b418cf..21ad8824 100644 --- a/src/wrapped/generated/wrappedlibxftundefs.h +++ b/src/wrapped/generated/wrappedlibxftundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxftUNDEFS_H_ #define __wrappedlibxftUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxidefs.h b/src/wrapped/generated/wrappedlibxidefs.h index 685eb51a..1913040f 100644 --- a/src/wrapped/generated/wrappedlibxidefs.h +++ b/src/wrapped/generated/wrappedlibxidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxiDEFS_H_ #define __wrappedlibxiDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxitypes.h b/src/wrapped/generated/wrappedlibxitypes.h index fc4bcdd7..135510ee 100644 --- a/src/wrapped/generated/wrappedlibxitypes.h +++ b/src/wrapped/generated/wrappedlibxitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxiTYPES_H_ #define __wrappedlibxiTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxiundefs.h b/src/wrapped/generated/wrappedlibxiundefs.h index 0278ade6..abb1a099 100644 --- a/src/wrapped/generated/wrappedlibxiundefs.h +++ b/src/wrapped/generated/wrappedlibxiundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxiUNDEFS_H_ #define __wrappedlibxiUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxmudefs.h b/src/wrapped/generated/wrappedlibxmudefs.h index 22d0c803..800af8a8 100644 --- a/src/wrapped/generated/wrappedlibxmudefs.h +++ b/src/wrapped/generated/wrappedlibxmudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxmuDEFS_H_ #define __wrappedlibxmuDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxmutypes.h b/src/wrapped/generated/wrappedlibxmutypes.h index 4661c307..0a4fd97a 100644 --- a/src/wrapped/generated/wrappedlibxmutypes.h +++ b/src/wrapped/generated/wrappedlibxmutypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxmuTYPES_H_ #define __wrappedlibxmuTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxmuundefs.h b/src/wrapped/generated/wrappedlibxmuundefs.h index 9539c36c..f60f6ae0 100644 --- a/src/wrapped/generated/wrappedlibxmuundefs.h +++ b/src/wrapped/generated/wrappedlibxmuundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxmuUNDEFS_H_ #define __wrappedlibxmuUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpmdefs.h b/src/wrapped/generated/wrappedlibxpmdefs.h index df70f671..5148905a 100644 --- a/src/wrapped/generated/wrappedlibxpmdefs.h +++ b/src/wrapped/generated/wrappedlibxpmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpmDEFS_H_ #define __wrappedlibxpmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpmtypes.h b/src/wrapped/generated/wrappedlibxpmtypes.h index d2e9f2c4..e2021373 100644 --- a/src/wrapped/generated/wrappedlibxpmtypes.h +++ b/src/wrapped/generated/wrappedlibxpmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpmTYPES_H_ #define __wrappedlibxpmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxpmundefs.h b/src/wrapped/generated/wrappedlibxpmundefs.h index 895939f1..d77caa76 100644 --- a/src/wrapped/generated/wrappedlibxpmundefs.h +++ b/src/wrapped/generated/wrappedlibxpmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpmUNDEFS_H_ #define __wrappedlibxpmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpresentdefs.h b/src/wrapped/generated/wrappedlibxpresentdefs.h index de654739..9d704b70 100644 --- a/src/wrapped/generated/wrappedlibxpresentdefs.h +++ b/src/wrapped/generated/wrappedlibxpresentdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpresentDEFS_H_ #define __wrappedlibxpresentDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpresenttypes.h b/src/wrapped/generated/wrappedlibxpresenttypes.h index b5cc5243..7817a24a 100644 --- a/src/wrapped/generated/wrappedlibxpresenttypes.h +++ b/src/wrapped/generated/wrappedlibxpresenttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpresentTYPES_H_ #define __wrappedlibxpresentTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxpresentundefs.h b/src/wrapped/generated/wrappedlibxpresentundefs.h index c22f0993..0511657d 100644 --- a/src/wrapped/generated/wrappedlibxpresentundefs.h +++ b/src/wrapped/generated/wrappedlibxpresentundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpresentUNDEFS_H_ #define __wrappedlibxpresentUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrandrdefs.h b/src/wrapped/generated/wrappedlibxrandrdefs.h index 1f94ada8..845d0f81 100644 --- a/src/wrapped/generated/wrappedlibxrandrdefs.h +++ b/src/wrapped/generated/wrappedlibxrandrdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrandrDEFS_H_ #define __wrappedlibxrandrDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrandrtypes.h b/src/wrapped/generated/wrappedlibxrandrtypes.h index d50c72ff..3a6d9825 100644 --- a/src/wrapped/generated/wrappedlibxrandrtypes.h +++ b/src/wrapped/generated/wrappedlibxrandrtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrandrTYPES_H_ #define __wrappedlibxrandrTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxrandrundefs.h b/src/wrapped/generated/wrappedlibxrandrundefs.h index f353738f..24e48dfe 100644 --- a/src/wrapped/generated/wrappedlibxrandrundefs.h +++ b/src/wrapped/generated/wrappedlibxrandrundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrandrUNDEFS_H_ #define __wrappedlibxrandrUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrenderdefs.h b/src/wrapped/generated/wrappedlibxrenderdefs.h index d4360e47..cfd28a74 100644 --- a/src/wrapped/generated/wrappedlibxrenderdefs.h +++ b/src/wrapped/generated/wrappedlibxrenderdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrenderDEFS_H_ #define __wrappedlibxrenderDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrendertypes.h b/src/wrapped/generated/wrappedlibxrendertypes.h index 3cc99069..c35d2e83 100644 --- a/src/wrapped/generated/wrappedlibxrendertypes.h +++ b/src/wrapped/generated/wrappedlibxrendertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrenderTYPES_H_ #define __wrappedlibxrenderTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxrenderundefs.h b/src/wrapped/generated/wrappedlibxrenderundefs.h index 23a53a4c..7af5ff6d 100644 --- a/src/wrapped/generated/wrappedlibxrenderundefs.h +++ b/src/wrapped/generated/wrappedlibxrenderundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrenderUNDEFS_H_ #define __wrappedlibxrenderUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxssdefs.h b/src/wrapped/generated/wrappedlibxssdefs.h index b9eb4edb..0d2028da 100644 --- a/src/wrapped/generated/wrappedlibxssdefs.h +++ b/src/wrapped/generated/wrappedlibxssdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxssDEFS_H_ #define __wrappedlibxssDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxsstypes.h b/src/wrapped/generated/wrappedlibxsstypes.h index a7e0e255..b29b9cf7 100644 --- a/src/wrapped/generated/wrappedlibxsstypes.h +++ b/src/wrapped/generated/wrappedlibxsstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxssTYPES_H_ #define __wrappedlibxssTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxssundefs.h b/src/wrapped/generated/wrappedlibxssundefs.h index 0fd1e949..7e0f7512 100644 --- a/src/wrapped/generated/wrappedlibxssundefs.h +++ b/src/wrapped/generated/wrappedlibxssundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxssUNDEFS_H_ #define __wrappedlibxssUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxtdefs.h b/src/wrapped/generated/wrappedlibxtdefs.h index 60eff6d3..ac0a1c26 100644 --- a/src/wrapped/generated/wrappedlibxtdefs.h +++ b/src/wrapped/generated/wrappedlibxtdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtDEFS_H_ #define __wrappedlibxtDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxtstdefs.h b/src/wrapped/generated/wrappedlibxtstdefs.h index fa195cba..cfe3b4f9 100644 --- a/src/wrapped/generated/wrappedlibxtstdefs.h +++ b/src/wrapped/generated/wrappedlibxtstdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtstDEFS_H_ #define __wrappedlibxtstDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxtsttypes.h b/src/wrapped/generated/wrappedlibxtsttypes.h index f7cac5a2..f6ea0780 100644 --- a/src/wrapped/generated/wrappedlibxtsttypes.h +++ b/src/wrapped/generated/wrappedlibxtsttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtstTYPES_H_ #define __wrappedlibxtstTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxtstundefs.h b/src/wrapped/generated/wrappedlibxtstundefs.h index 2e5eec46..6c03f68f 100644 --- a/src/wrapped/generated/wrappedlibxtstundefs.h +++ b/src/wrapped/generated/wrappedlibxtstundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtstUNDEFS_H_ #define __wrappedlibxtstUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxttypes.h b/src/wrapped/generated/wrappedlibxttypes.h index bfa25435..354df5dc 100644 --- a/src/wrapped/generated/wrappedlibxttypes.h +++ b/src/wrapped/generated/wrappedlibxttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtTYPES_H_ #define __wrappedlibxtTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxtundefs.h b/src/wrapped/generated/wrappedlibxtundefs.h index 04d8349d..178faf66 100644 --- a/src/wrapped/generated/wrappedlibxtundefs.h +++ b/src/wrapped/generated/wrappedlibxtundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtUNDEFS_H_ #define __wrappedlibxtUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxxf86vmdefs.h b/src/wrapped/generated/wrappedlibxxf86vmdefs.h index 04dc5139..4e40aa11 100644 --- a/src/wrapped/generated/wrappedlibxxf86vmdefs.h +++ b/src/wrapped/generated/wrappedlibxxf86vmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxxf86vmDEFS_H_ #define __wrappedlibxxf86vmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxxf86vmtypes.h b/src/wrapped/generated/wrappedlibxxf86vmtypes.h index fb1b4ee4..f6ad5d57 100644 --- a/src/wrapped/generated/wrappedlibxxf86vmtypes.h +++ b/src/wrapped/generated/wrappedlibxxf86vmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxxf86vmTYPES_H_ #define __wrappedlibxxf86vmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxxf86vmundefs.h b/src/wrapped/generated/wrappedlibxxf86vmundefs.h index 836a2db4..efbf6be8 100644 --- a/src/wrapped/generated/wrappedlibxxf86vmundefs.h +++ b/src/wrapped/generated/wrappedlibxxf86vmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxxf86vmUNDEFS_H_ #define __wrappedlibxxf86vmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibzdefs.h b/src/wrapped/generated/wrappedlibzdefs.h index 8d486b81..ae5dd593 100644 --- a/src/wrapped/generated/wrappedlibzdefs.h +++ b/src/wrapped/generated/wrappedlibzdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibzDEFS_H_ #define __wrappedlibzDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibztypes.h b/src/wrapped/generated/wrappedlibztypes.h index 49e8dc90..2af79058 100644 --- a/src/wrapped/generated/wrappedlibztypes.h +++ b/src/wrapped/generated/wrappedlibztypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibzTYPES_H_ #define __wrappedlibzTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibzundefs.h b/src/wrapped/generated/wrappedlibzundefs.h index 72708785..a4b90b85 100644 --- a/src/wrapped/generated/wrappedlibzundefs.h +++ b/src/wrapped/generated/wrappedlibzundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibzUNDEFS_H_ #define __wrappedlibzUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlzmadefs.h b/src/wrapped/generated/wrappedlzmadefs.h index 7d2830d1..c62e1836 100644 --- a/src/wrapped/generated/wrappedlzmadefs.h +++ b/src/wrapped/generated/wrappedlzmadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlzmaDEFS_H_ #define __wrappedlzmaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlzmatypes.h b/src/wrapped/generated/wrappedlzmatypes.h index da923ef2..a6853ba5 100644 --- a/src/wrapped/generated/wrappedlzmatypes.h +++ b/src/wrapped/generated/wrappedlzmatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlzmaTYPES_H_ #define __wrappedlzmaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlzmaundefs.h b/src/wrapped/generated/wrappedlzmaundefs.h index c50459a9..d77484ca 100644 --- a/src/wrapped/generated/wrappedlzmaundefs.h +++ b/src/wrapped/generated/wrappedlzmaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlzmaUNDEFS_H_ #define __wrappedlzmaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedmpg123defs.h b/src/wrapped/generated/wrappedmpg123defs.h index 0a797a11..f83bd201 100644 --- a/src/wrapped/generated/wrappedmpg123defs.h +++ b/src/wrapped/generated/wrappedmpg123defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedmpg123DEFS_H_ #define __wrappedmpg123DEFS_H_ diff --git a/src/wrapped/generated/wrappedmpg123types.h b/src/wrapped/generated/wrappedmpg123types.h index 6f65c02f..e2cf6352 100644 --- a/src/wrapped/generated/wrappedmpg123types.h +++ b/src/wrapped/generated/wrappedmpg123types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedmpg123TYPES_H_ #define __wrappedmpg123TYPES_H_ diff --git a/src/wrapped/generated/wrappedmpg123undefs.h b/src/wrapped/generated/wrappedmpg123undefs.h index f243812b..7e2c120e 100644 --- a/src/wrapped/generated/wrappedmpg123undefs.h +++ b/src/wrapped/generated/wrappedmpg123undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedmpg123UNDEFS_H_ #define __wrappedmpg123UNDEFS_H_ diff --git a/src/wrapped/generated/wrappednotifydefs.h b/src/wrapped/generated/wrappednotifydefs.h index 57f99943..62406def 100644 --- a/src/wrapped/generated/wrappednotifydefs.h +++ b/src/wrapped/generated/wrappednotifydefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednotifyDEFS_H_ #define __wrappednotifyDEFS_H_ diff --git a/src/wrapped/generated/wrappednotifytypes.h b/src/wrapped/generated/wrappednotifytypes.h index 4c470cba..6f9e6ba0 100644 --- a/src/wrapped/generated/wrappednotifytypes.h +++ b/src/wrapped/generated/wrappednotifytypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednotifyTYPES_H_ #define __wrappednotifyTYPES_H_ diff --git a/src/wrapped/generated/wrappednotifyundefs.h b/src/wrapped/generated/wrappednotifyundefs.h index b9e8effb..f9fe753f 100644 --- a/src/wrapped/generated/wrappednotifyundefs.h +++ b/src/wrapped/generated/wrappednotifyundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednotifyUNDEFS_H_ #define __wrappednotifyUNDEFS_H_ diff --git a/src/wrapped/generated/wrappednsldefs.h b/src/wrapped/generated/wrappednsldefs.h index ba88d8a3..0bff5c1b 100644 --- a/src/wrapped/generated/wrappednsldefs.h +++ b/src/wrapped/generated/wrappednsldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednslDEFS_H_ #define __wrappednslDEFS_H_ diff --git a/src/wrapped/generated/wrappednsltypes.h b/src/wrapped/generated/wrappednsltypes.h index 12a6ff94..7e4e5880 100644 --- a/src/wrapped/generated/wrappednsltypes.h +++ b/src/wrapped/generated/wrappednsltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednslTYPES_H_ #define __wrappednslTYPES_H_ diff --git a/src/wrapped/generated/wrappednslundefs.h b/src/wrapped/generated/wrappednslundefs.h index a0380d7b..40adacbf 100644 --- a/src/wrapped/generated/wrappednslundefs.h +++ b/src/wrapped/generated/wrappednslundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednslUNDEFS_H_ #define __wrappednslUNDEFS_H_ diff --git a/src/wrapped/generated/wrappednspr4defs.h b/src/wrapped/generated/wrappednspr4defs.h index fe8445a6..acd5c4df 100644 --- a/src/wrapped/generated/wrappednspr4defs.h +++ b/src/wrapped/generated/wrappednspr4defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednspr4DEFS_H_ #define __wrappednspr4DEFS_H_ diff --git a/src/wrapped/generated/wrappednspr4types.h b/src/wrapped/generated/wrappednspr4types.h index d61c83f1..47501ba8 100644 --- a/src/wrapped/generated/wrappednspr4types.h +++ b/src/wrapped/generated/wrappednspr4types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednspr4TYPES_H_ #define __wrappednspr4TYPES_H_ diff --git a/src/wrapped/generated/wrappednspr4undefs.h b/src/wrapped/generated/wrappednspr4undefs.h index 39cb34c4..5270d0ef 100644 --- a/src/wrapped/generated/wrappednspr4undefs.h +++ b/src/wrapped/generated/wrappednspr4undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednspr4UNDEFS_H_ #define __wrappednspr4UNDEFS_H_ diff --git a/src/wrapped/generated/wrappednss3defs.h b/src/wrapped/generated/wrappednss3defs.h index 7df348cb..b4bb82d3 100644 --- a/src/wrapped/generated/wrappednss3defs.h +++ b/src/wrapped/generated/wrappednss3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednss3DEFS_H_ #define __wrappednss3DEFS_H_ diff --git a/src/wrapped/generated/wrappednss3types.h b/src/wrapped/generated/wrappednss3types.h index cdc8a875..3b374665 100644 --- a/src/wrapped/generated/wrappednss3types.h +++ b/src/wrapped/generated/wrappednss3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednss3TYPES_H_ #define __wrappednss3TYPES_H_ diff --git a/src/wrapped/generated/wrappednss3undefs.h b/src/wrapped/generated/wrappednss3undefs.h index 19e156eb..7d7f8f8c 100644 --- a/src/wrapped/generated/wrappednss3undefs.h +++ b/src/wrapped/generated/wrappednss3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednss3UNDEFS_H_ #define __wrappednss3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappednssutil3defs.h b/src/wrapped/generated/wrappednssutil3defs.h index bcaf6bc0..163b0f6a 100644 --- a/src/wrapped/generated/wrappednssutil3defs.h +++ b/src/wrapped/generated/wrappednssutil3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednssutil3DEFS_H_ #define __wrappednssutil3DEFS_H_ diff --git a/src/wrapped/generated/wrappednssutil3types.h b/src/wrapped/generated/wrappednssutil3types.h index 4e0b0e48..239f2eb3 100644 --- a/src/wrapped/generated/wrappednssutil3types.h +++ b/src/wrapped/generated/wrappednssutil3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednssutil3TYPES_H_ #define __wrappednssutil3TYPES_H_ diff --git a/src/wrapped/generated/wrappednssutil3undefs.h b/src/wrapped/generated/wrappednssutil3undefs.h index c5d687e0..a15abd45 100644 --- a/src/wrapped/generated/wrappednssutil3undefs.h +++ b/src/wrapped/generated/wrappednssutil3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednssutil3UNDEFS_H_ #define __wrappednssutil3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedopenaldefs.h b/src/wrapped/generated/wrappedopenaldefs.h index f49934b9..fef536a2 100644 --- a/src/wrapped/generated/wrappedopenaldefs.h +++ b/src/wrapped/generated/wrappedopenaldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenalDEFS_H_ #define __wrappedopenalDEFS_H_ diff --git a/src/wrapped/generated/wrappedopenaltypes.h b/src/wrapped/generated/wrappedopenaltypes.h index 1bd88ca3..33f4403d 100644 --- a/src/wrapped/generated/wrappedopenaltypes.h +++ b/src/wrapped/generated/wrappedopenaltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenalTYPES_H_ #define __wrappedopenalTYPES_H_ diff --git a/src/wrapped/generated/wrappedopenalundefs.h b/src/wrapped/generated/wrappedopenalundefs.h index 020eec65..978152b9 100644 --- a/src/wrapped/generated/wrappedopenalundefs.h +++ b/src/wrapped/generated/wrappedopenalundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenalUNDEFS_H_ #define __wrappedopenalUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedopencldefs.h b/src/wrapped/generated/wrappedopencldefs.h index 2536f0ff..93f2321a 100644 --- a/src/wrapped/generated/wrappedopencldefs.h +++ b/src/wrapped/generated/wrappedopencldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenclDEFS_H_ #define __wrappedopenclDEFS_H_ diff --git a/src/wrapped/generated/wrappedopencltypes.h b/src/wrapped/generated/wrappedopencltypes.h index f631b04b..9a28f3a2 100644 --- a/src/wrapped/generated/wrappedopencltypes.h +++ b/src/wrapped/generated/wrappedopencltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenclTYPES_H_ #define __wrappedopenclTYPES_H_ diff --git a/src/wrapped/generated/wrappedopenclundefs.h b/src/wrapped/generated/wrappedopenclundefs.h index 282406b5..a07ea0ab 100644 --- a/src/wrapped/generated/wrappedopenclundefs.h +++ b/src/wrapped/generated/wrappedopenclundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenclUNDEFS_H_ #define __wrappedopenclUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedp11kitdefs.h b/src/wrapped/generated/wrappedp11kitdefs.h index ec4bd05c..527d5e96 100644 --- a/src/wrapped/generated/wrappedp11kitdefs.h +++ b/src/wrapped/generated/wrappedp11kitdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedp11kitDEFS_H_ #define __wrappedp11kitDEFS_H_ diff --git a/src/wrapped/generated/wrappedp11kittypes.h b/src/wrapped/generated/wrappedp11kittypes.h index 46e988c8..d94f3b95 100644 --- a/src/wrapped/generated/wrappedp11kittypes.h +++ b/src/wrapped/generated/wrappedp11kittypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedp11kitTYPES_H_ #define __wrappedp11kitTYPES_H_ diff --git a/src/wrapped/generated/wrappedp11kitundefs.h b/src/wrapped/generated/wrappedp11kitundefs.h index 38b4ca53..8074f91f 100644 --- a/src/wrapped/generated/wrappedp11kitundefs.h +++ b/src/wrapped/generated/wrappedp11kitundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedp11kitUNDEFS_H_ #define __wrappedp11kitUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpamdefs.h b/src/wrapped/generated/wrappedpamdefs.h index 31a659b9..fa896a00 100644 --- a/src/wrapped/generated/wrappedpamdefs.h +++ b/src/wrapped/generated/wrappedpamdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpamDEFS_H_ #define __wrappedpamDEFS_H_ diff --git a/src/wrapped/generated/wrappedpamtypes.h b/src/wrapped/generated/wrappedpamtypes.h index 98b7782e..3328e356 100644 --- a/src/wrapped/generated/wrappedpamtypes.h +++ b/src/wrapped/generated/wrappedpamtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpamTYPES_H_ #define __wrappedpamTYPES_H_ diff --git a/src/wrapped/generated/wrappedpamundefs.h b/src/wrapped/generated/wrappedpamundefs.h index 092a7b67..bd22bc16 100644 --- a/src/wrapped/generated/wrappedpamundefs.h +++ b/src/wrapped/generated/wrappedpamundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpamUNDEFS_H_ #define __wrappedpamUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangocairodefs.h b/src/wrapped/generated/wrappedpangocairodefs.h index b552e7f5..1db27b48 100644 --- a/src/wrapped/generated/wrappedpangocairodefs.h +++ b/src/wrapped/generated/wrappedpangocairodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangocairoDEFS_H_ #define __wrappedpangocairoDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangocairotypes.h b/src/wrapped/generated/wrappedpangocairotypes.h index c2462c1b..6bfc8769 100644 --- a/src/wrapped/generated/wrappedpangocairotypes.h +++ b/src/wrapped/generated/wrappedpangocairotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangocairoTYPES_H_ #define __wrappedpangocairoTYPES_H_ diff --git a/src/wrapped/generated/wrappedpangocairoundefs.h b/src/wrapped/generated/wrappedpangocairoundefs.h index 40d338a0..c7085728 100644 --- a/src/wrapped/generated/wrappedpangocairoundefs.h +++ b/src/wrapped/generated/wrappedpangocairoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangocairoUNDEFS_H_ #define __wrappedpangocairoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangodefs.h b/src/wrapped/generated/wrappedpangodefs.h index a7e8d0c1..f2a1984d 100644 --- a/src/wrapped/generated/wrappedpangodefs.h +++ b/src/wrapped/generated/wrappedpangodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoDEFS_H_ #define __wrappedpangoDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangoft2defs.h b/src/wrapped/generated/wrappedpangoft2defs.h index c987b41f..7083edaf 100644 --- a/src/wrapped/generated/wrappedpangoft2defs.h +++ b/src/wrapped/generated/wrappedpangoft2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoft2DEFS_H_ #define __wrappedpangoft2DEFS_H_ diff --git a/src/wrapped/generated/wrappedpangoft2types.h b/src/wrapped/generated/wrappedpangoft2types.h index 616fc38a..04678d8a 100644 --- a/src/wrapped/generated/wrappedpangoft2types.h +++ b/src/wrapped/generated/wrappedpangoft2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoft2TYPES_H_ #define __wrappedpangoft2TYPES_H_ diff --git a/src/wrapped/generated/wrappedpangoft2undefs.h b/src/wrapped/generated/wrappedpangoft2undefs.h index 941a16a7..1ff51b54 100644 --- a/src/wrapped/generated/wrappedpangoft2undefs.h +++ b/src/wrapped/generated/wrappedpangoft2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoft2UNDEFS_H_ #define __wrappedpangoft2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangotypes.h b/src/wrapped/generated/wrappedpangotypes.h index d874436c..f745705e 100644 --- a/src/wrapped/generated/wrappedpangotypes.h +++ b/src/wrapped/generated/wrappedpangotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoTYPES_H_ #define __wrappedpangoTYPES_H_ diff --git a/src/wrapped/generated/wrappedpangoundefs.h b/src/wrapped/generated/wrappedpangoundefs.h index ffe11184..5761812e 100644 --- a/src/wrapped/generated/wrappedpangoundefs.h +++ b/src/wrapped/generated/wrappedpangoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoUNDEFS_H_ #define __wrappedpangoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedplc4defs.h b/src/wrapped/generated/wrappedplc4defs.h index ba22678e..aa0cc8d0 100644 --- a/src/wrapped/generated/wrappedplc4defs.h +++ b/src/wrapped/generated/wrappedplc4defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplc4DEFS_H_ #define __wrappedplc4DEFS_H_ diff --git a/src/wrapped/generated/wrappedplc4types.h b/src/wrapped/generated/wrappedplc4types.h index 5ca8ff94..6167c6ee 100644 --- a/src/wrapped/generated/wrappedplc4types.h +++ b/src/wrapped/generated/wrappedplc4types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplc4TYPES_H_ #define __wrappedplc4TYPES_H_ diff --git a/src/wrapped/generated/wrappedplc4undefs.h b/src/wrapped/generated/wrappedplc4undefs.h index 3da2719b..673dcbb2 100644 --- a/src/wrapped/generated/wrappedplc4undefs.h +++ b/src/wrapped/generated/wrappedplc4undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplc4UNDEFS_H_ #define __wrappedplc4UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedplds4defs.h b/src/wrapped/generated/wrappedplds4defs.h index c0620741..45fad0ec 100644 --- a/src/wrapped/generated/wrappedplds4defs.h +++ b/src/wrapped/generated/wrappedplds4defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplds4DEFS_H_ #define __wrappedplds4DEFS_H_ diff --git a/src/wrapped/generated/wrappedplds4types.h b/src/wrapped/generated/wrappedplds4types.h index aaf83eb9..462311ce 100644 --- a/src/wrapped/generated/wrappedplds4types.h +++ b/src/wrapped/generated/wrappedplds4types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplds4TYPES_H_ #define __wrappedplds4TYPES_H_ diff --git a/src/wrapped/generated/wrappedplds4undefs.h b/src/wrapped/generated/wrappedplds4undefs.h index 9d0868f9..6e56852f 100644 --- a/src/wrapped/generated/wrappedplds4undefs.h +++ b/src/wrapped/generated/wrappedplds4undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplds4UNDEFS_H_ #define __wrappedplds4UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpng16defs.h b/src/wrapped/generated/wrappedpng16defs.h index 11d1e26a..9dc16f6a 100644 --- a/src/wrapped/generated/wrappedpng16defs.h +++ b/src/wrapped/generated/wrappedpng16defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpng16DEFS_H_ #define __wrappedpng16DEFS_H_ diff --git a/src/wrapped/generated/wrappedpng16types.h b/src/wrapped/generated/wrappedpng16types.h index 367c19e4..282ab6a3 100644 --- a/src/wrapped/generated/wrappedpng16types.h +++ b/src/wrapped/generated/wrappedpng16types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpng16TYPES_H_ #define __wrappedpng16TYPES_H_ diff --git a/src/wrapped/generated/wrappedpng16undefs.h b/src/wrapped/generated/wrappedpng16undefs.h index bbe21245..83d017e5 100644 --- a/src/wrapped/generated/wrappedpng16undefs.h +++ b/src/wrapped/generated/wrappedpng16undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpng16UNDEFS_H_ #define __wrappedpng16UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpsl5defs.h b/src/wrapped/generated/wrappedpsl5defs.h index 274c347d..0bdfd9a0 100644 --- a/src/wrapped/generated/wrappedpsl5defs.h +++ b/src/wrapped/generated/wrappedpsl5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpsl5DEFS_H_ #define __wrappedpsl5DEFS_H_ diff --git a/src/wrapped/generated/wrappedpsl5types.h b/src/wrapped/generated/wrappedpsl5types.h index 44310fa3..914eedef 100644 --- a/src/wrapped/generated/wrappedpsl5types.h +++ b/src/wrapped/generated/wrappedpsl5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpsl5TYPES_H_ #define __wrappedpsl5TYPES_H_ diff --git a/src/wrapped/generated/wrappedpsl5undefs.h b/src/wrapped/generated/wrappedpsl5undefs.h index 0db6f2e0..a9c9dbb4 100644 --- a/src/wrapped/generated/wrappedpsl5undefs.h +++ b/src/wrapped/generated/wrappedpsl5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpsl5UNDEFS_H_ #define __wrappedpsl5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsedefs.h b/src/wrapped/generated/wrappedpulsedefs.h index 1562e319..16a6b492 100644 --- a/src/wrapped/generated/wrappedpulsedefs.h +++ b/src/wrapped/generated/wrappedpulsedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulseDEFS_H_ #define __wrappedpulseDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsemainloopglibdefs.h b/src/wrapped/generated/wrappedpulsemainloopglibdefs.h index 41195f93..e34537ea 100644 --- a/src/wrapped/generated/wrappedpulsemainloopglibdefs.h +++ b/src/wrapped/generated/wrappedpulsemainloopglibdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsemainloopglibDEFS_H_ #define __wrappedpulsemainloopglibDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsemainloopglibtypes.h b/src/wrapped/generated/wrappedpulsemainloopglibtypes.h index f5d96cf0..cd536c9b 100644 --- a/src/wrapped/generated/wrappedpulsemainloopglibtypes.h +++ b/src/wrapped/generated/wrappedpulsemainloopglibtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsemainloopglibTYPES_H_ #define __wrappedpulsemainloopglibTYPES_H_ diff --git a/src/wrapped/generated/wrappedpulsemainloopglibundefs.h b/src/wrapped/generated/wrappedpulsemainloopglibundefs.h index d70aa31e..b00c51b1 100644 --- a/src/wrapped/generated/wrappedpulsemainloopglibundefs.h +++ b/src/wrapped/generated/wrappedpulsemainloopglibundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsemainloopglibUNDEFS_H_ #define __wrappedpulsemainloopglibUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsesimpledefs.h b/src/wrapped/generated/wrappedpulsesimpledefs.h index 30e5fbe7..0bb9c602 100644 --- a/src/wrapped/generated/wrappedpulsesimpledefs.h +++ b/src/wrapped/generated/wrappedpulsesimpledefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsesimpleDEFS_H_ #define __wrappedpulsesimpleDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsesimpletypes.h b/src/wrapped/generated/wrappedpulsesimpletypes.h index 2a463851..f8a7e48e 100644 --- a/src/wrapped/generated/wrappedpulsesimpletypes.h +++ b/src/wrapped/generated/wrappedpulsesimpletypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsesimpleTYPES_H_ #define __wrappedpulsesimpleTYPES_H_ diff --git a/src/wrapped/generated/wrappedpulsesimpleundefs.h b/src/wrapped/generated/wrappedpulsesimpleundefs.h index 03614239..3d1c3bf2 100644 --- a/src/wrapped/generated/wrappedpulsesimpleundefs.h +++ b/src/wrapped/generated/wrappedpulsesimpleundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsesimpleUNDEFS_H_ #define __wrappedpulsesimpleUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsetypes.h b/src/wrapped/generated/wrappedpulsetypes.h index e3ed948f..23af496b 100644 --- a/src/wrapped/generated/wrappedpulsetypes.h +++ b/src/wrapped/generated/wrappedpulsetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulseTYPES_H_ #define __wrappedpulseTYPES_H_ diff --git a/src/wrapped/generated/wrappedpulseundefs.h b/src/wrapped/generated/wrappedpulseundefs.h index 4472c935..9d96e5c4 100644 --- a/src/wrapped/generated/wrappedpulseundefs.h +++ b/src/wrapped/generated/wrappedpulseundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulseUNDEFS_H_ #define __wrappedpulseUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1defs.h b/src/wrapped/generated/wrappedsdl1defs.h index a3219d5e..6f69f9de 100644 --- a/src/wrapped/generated/wrappedsdl1defs.h +++ b/src/wrapped/generated/wrappedsdl1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1DEFS_H_ #define __wrappedsdl1DEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1imagedefs.h b/src/wrapped/generated/wrappedsdl1imagedefs.h index e7c98144..d40763d7 100644 --- a/src/wrapped/generated/wrappedsdl1imagedefs.h +++ b/src/wrapped/generated/wrappedsdl1imagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1imageDEFS_H_ #define __wrappedsdl1imageDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1imagetypes.h b/src/wrapped/generated/wrappedsdl1imagetypes.h index 27a2fb0b..ec092a0d 100644 --- a/src/wrapped/generated/wrappedsdl1imagetypes.h +++ b/src/wrapped/generated/wrappedsdl1imagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1imageTYPES_H_ #define __wrappedsdl1imageTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1imageundefs.h b/src/wrapped/generated/wrappedsdl1imageundefs.h index 8588d278..b1466758 100644 --- a/src/wrapped/generated/wrappedsdl1imageundefs.h +++ b/src/wrapped/generated/wrappedsdl1imageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1imageUNDEFS_H_ #define __wrappedsdl1imageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1mixerdefs.h b/src/wrapped/generated/wrappedsdl1mixerdefs.h index c1ee043d..e02cc67c 100644 --- a/src/wrapped/generated/wrappedsdl1mixerdefs.h +++ b/src/wrapped/generated/wrappedsdl1mixerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1mixerDEFS_H_ #define __wrappedsdl1mixerDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1mixertypes.h b/src/wrapped/generated/wrappedsdl1mixertypes.h index 3998e3d0..a3e00b6e 100644 --- a/src/wrapped/generated/wrappedsdl1mixertypes.h +++ b/src/wrapped/generated/wrappedsdl1mixertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1mixerTYPES_H_ #define __wrappedsdl1mixerTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1mixerundefs.h b/src/wrapped/generated/wrappedsdl1mixerundefs.h index f943ef63..c3721126 100644 --- a/src/wrapped/generated/wrappedsdl1mixerundefs.h +++ b/src/wrapped/generated/wrappedsdl1mixerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1mixerUNDEFS_H_ #define __wrappedsdl1mixerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1netdefs.h b/src/wrapped/generated/wrappedsdl1netdefs.h index 8bef12a5..18c7699a 100644 --- a/src/wrapped/generated/wrappedsdl1netdefs.h +++ b/src/wrapped/generated/wrappedsdl1netdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1netDEFS_H_ #define __wrappedsdl1netDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1nettypes.h b/src/wrapped/generated/wrappedsdl1nettypes.h index df143a1e..e6af4d35 100644 --- a/src/wrapped/generated/wrappedsdl1nettypes.h +++ b/src/wrapped/generated/wrappedsdl1nettypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1netTYPES_H_ #define __wrappedsdl1netTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1netundefs.h b/src/wrapped/generated/wrappedsdl1netundefs.h index e2492ddb..71c97045 100644 --- a/src/wrapped/generated/wrappedsdl1netundefs.h +++ b/src/wrapped/generated/wrappedsdl1netundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1netUNDEFS_H_ #define __wrappedsdl1netUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1sounddefs.h b/src/wrapped/generated/wrappedsdl1sounddefs.h index eb8bfa2d..b7fc5451 100644 --- a/src/wrapped/generated/wrappedsdl1sounddefs.h +++ b/src/wrapped/generated/wrappedsdl1sounddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1soundDEFS_H_ #define __wrappedsdl1soundDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1soundtypes.h b/src/wrapped/generated/wrappedsdl1soundtypes.h index a093993f..9c93da65 100644 --- a/src/wrapped/generated/wrappedsdl1soundtypes.h +++ b/src/wrapped/generated/wrappedsdl1soundtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1soundTYPES_H_ #define __wrappedsdl1soundTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1soundundefs.h b/src/wrapped/generated/wrappedsdl1soundundefs.h index 86a4a190..69839b0f 100644 --- a/src/wrapped/generated/wrappedsdl1soundundefs.h +++ b/src/wrapped/generated/wrappedsdl1soundundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1soundUNDEFS_H_ #define __wrappedsdl1soundUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1ttfdefs.h b/src/wrapped/generated/wrappedsdl1ttfdefs.h index 431c6274..84b89528 100644 --- a/src/wrapped/generated/wrappedsdl1ttfdefs.h +++ b/src/wrapped/generated/wrappedsdl1ttfdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1ttfDEFS_H_ #define __wrappedsdl1ttfDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1ttftypes.h b/src/wrapped/generated/wrappedsdl1ttftypes.h index 7ce6d58b..73a1906b 100644 --- a/src/wrapped/generated/wrappedsdl1ttftypes.h +++ b/src/wrapped/generated/wrappedsdl1ttftypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1ttfTYPES_H_ #define __wrappedsdl1ttfTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1ttfundefs.h b/src/wrapped/generated/wrappedsdl1ttfundefs.h index 3643349f..16b96ad2 100644 --- a/src/wrapped/generated/wrappedsdl1ttfundefs.h +++ b/src/wrapped/generated/wrappedsdl1ttfundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1ttfUNDEFS_H_ #define __wrappedsdl1ttfUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1types.h b/src/wrapped/generated/wrappedsdl1types.h index 49567622..6fa183a9 100644 --- a/src/wrapped/generated/wrappedsdl1types.h +++ b/src/wrapped/generated/wrappedsdl1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1TYPES_H_ #define __wrappedsdl1TYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1undefs.h b/src/wrapped/generated/wrappedsdl1undefs.h index 6a49a255..a52dc164 100644 --- a/src/wrapped/generated/wrappedsdl1undefs.h +++ b/src/wrapped/generated/wrappedsdl1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1UNDEFS_H_ #define __wrappedsdl1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2defs.h b/src/wrapped/generated/wrappedsdl2defs.h index b9a45cf1..3171e5d1 100644 --- a/src/wrapped/generated/wrappedsdl2defs.h +++ b/src/wrapped/generated/wrappedsdl2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2DEFS_H_ #define __wrappedsdl2DEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2imagedefs.h b/src/wrapped/generated/wrappedsdl2imagedefs.h index fd8334fa..e1e3266b 100644 --- a/src/wrapped/generated/wrappedsdl2imagedefs.h +++ b/src/wrapped/generated/wrappedsdl2imagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2imageDEFS_H_ #define __wrappedsdl2imageDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2imagetypes.h b/src/wrapped/generated/wrappedsdl2imagetypes.h index a7c3b66b..ebd187a6 100644 --- a/src/wrapped/generated/wrappedsdl2imagetypes.h +++ b/src/wrapped/generated/wrappedsdl2imagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2imageTYPES_H_ #define __wrappedsdl2imageTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2imageundefs.h b/src/wrapped/generated/wrappedsdl2imageundefs.h index b4b175e5..ed340281 100644 --- a/src/wrapped/generated/wrappedsdl2imageundefs.h +++ b/src/wrapped/generated/wrappedsdl2imageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2imageUNDEFS_H_ #define __wrappedsdl2imageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2mixerdefs.h b/src/wrapped/generated/wrappedsdl2mixerdefs.h index 1f3a729c..c1cae3d3 100644 --- a/src/wrapped/generated/wrappedsdl2mixerdefs.h +++ b/src/wrapped/generated/wrappedsdl2mixerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2mixerDEFS_H_ #define __wrappedsdl2mixerDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2mixertypes.h b/src/wrapped/generated/wrappedsdl2mixertypes.h index d48871c2..ec14346f 100644 --- a/src/wrapped/generated/wrappedsdl2mixertypes.h +++ b/src/wrapped/generated/wrappedsdl2mixertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2mixerTYPES_H_ #define __wrappedsdl2mixerTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2mixerundefs.h b/src/wrapped/generated/wrappedsdl2mixerundefs.h index 15074b60..9f34126b 100644 --- a/src/wrapped/generated/wrappedsdl2mixerundefs.h +++ b/src/wrapped/generated/wrappedsdl2mixerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2mixerUNDEFS_H_ #define __wrappedsdl2mixerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2netdefs.h b/src/wrapped/generated/wrappedsdl2netdefs.h index 8b2cc63a..f2177ebd 100644 --- a/src/wrapped/generated/wrappedsdl2netdefs.h +++ b/src/wrapped/generated/wrappedsdl2netdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2netDEFS_H_ #define __wrappedsdl2netDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2nettypes.h b/src/wrapped/generated/wrappedsdl2nettypes.h index 58ebd638..39d11e65 100644 --- a/src/wrapped/generated/wrappedsdl2nettypes.h +++ b/src/wrapped/generated/wrappedsdl2nettypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2netTYPES_H_ #define __wrappedsdl2netTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2netundefs.h b/src/wrapped/generated/wrappedsdl2netundefs.h index 81e16b36..f6e51834 100644 --- a/src/wrapped/generated/wrappedsdl2netundefs.h +++ b/src/wrapped/generated/wrappedsdl2netundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2netUNDEFS_H_ #define __wrappedsdl2netUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2ttfdefs.h b/src/wrapped/generated/wrappedsdl2ttfdefs.h index bb8ffb64..71e407f5 100644 --- a/src/wrapped/generated/wrappedsdl2ttfdefs.h +++ b/src/wrapped/generated/wrappedsdl2ttfdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2ttfDEFS_H_ #define __wrappedsdl2ttfDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2ttftypes.h b/src/wrapped/generated/wrappedsdl2ttftypes.h index 6d4e02b9..ab13457a 100644 --- a/src/wrapped/generated/wrappedsdl2ttftypes.h +++ b/src/wrapped/generated/wrappedsdl2ttftypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2ttfTYPES_H_ #define __wrappedsdl2ttfTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2ttfundefs.h b/src/wrapped/generated/wrappedsdl2ttfundefs.h index 0ff8e537..d52b2d44 100644 --- a/src/wrapped/generated/wrappedsdl2ttfundefs.h +++ b/src/wrapped/generated/wrappedsdl2ttfundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2ttfUNDEFS_H_ #define __wrappedsdl2ttfUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2types.h b/src/wrapped/generated/wrappedsdl2types.h index 8386e999..4b20e0db 100644 --- a/src/wrapped/generated/wrappedsdl2types.h +++ b/src/wrapped/generated/wrappedsdl2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2TYPES_H_ #define __wrappedsdl2TYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2undefs.h b/src/wrapped/generated/wrappedsdl2undefs.h index e27f5aee..a66d4875 100644 --- a/src/wrapped/generated/wrappedsdl2undefs.h +++ b/src/wrapped/generated/wrappedsdl2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2UNDEFS_H_ #define __wrappedsdl2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsecret1defs.h b/src/wrapped/generated/wrappedsecret1defs.h index d71edbcc..7e13a0c7 100644 --- a/src/wrapped/generated/wrappedsecret1defs.h +++ b/src/wrapped/generated/wrappedsecret1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsecret1DEFS_H_ #define __wrappedsecret1DEFS_H_ diff --git a/src/wrapped/generated/wrappedsecret1types.h b/src/wrapped/generated/wrappedsecret1types.h index f9a32229..7e8ede38 100644 --- a/src/wrapped/generated/wrappedsecret1types.h +++ b/src/wrapped/generated/wrappedsecret1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsecret1TYPES_H_ #define __wrappedsecret1TYPES_H_ diff --git a/src/wrapped/generated/wrappedsecret1undefs.h b/src/wrapped/generated/wrappedsecret1undefs.h index 1ca2fefe..af8c3acf 100644 --- a/src/wrapped/generated/wrappedsecret1undefs.h +++ b/src/wrapped/generated/wrappedsecret1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsecret1UNDEFS_H_ #define __wrappedsecret1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedselinuxdefs.h b/src/wrapped/generated/wrappedselinuxdefs.h index bc11a101..5d005bd4 100644 --- a/src/wrapped/generated/wrappedselinuxdefs.h +++ b/src/wrapped/generated/wrappedselinuxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedselinuxDEFS_H_ #define __wrappedselinuxDEFS_H_ diff --git a/src/wrapped/generated/wrappedselinuxtypes.h b/src/wrapped/generated/wrappedselinuxtypes.h index b79ee173..89e4aa5e 100644 --- a/src/wrapped/generated/wrappedselinuxtypes.h +++ b/src/wrapped/generated/wrappedselinuxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedselinuxTYPES_H_ #define __wrappedselinuxTYPES_H_ diff --git a/src/wrapped/generated/wrappedselinuxundefs.h b/src/wrapped/generated/wrappedselinuxundefs.h index 8562c7db..e6c6a409 100644 --- a/src/wrapped/generated/wrappedselinuxundefs.h +++ b/src/wrapped/generated/wrappedselinuxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedselinuxUNDEFS_H_ #define __wrappedselinuxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmime3defs.h b/src/wrapped/generated/wrappedsmime3defs.h index 7f730ae2..a2b7059a 100644 --- a/src/wrapped/generated/wrappedsmime3defs.h +++ b/src/wrapped/generated/wrappedsmime3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmime3DEFS_H_ #define __wrappedsmime3DEFS_H_ diff --git a/src/wrapped/generated/wrappedsmime3types.h b/src/wrapped/generated/wrappedsmime3types.h index 6d382ecc..fdeaa8ae 100644 --- a/src/wrapped/generated/wrappedsmime3types.h +++ b/src/wrapped/generated/wrappedsmime3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmime3TYPES_H_ #define __wrappedsmime3TYPES_H_ diff --git a/src/wrapped/generated/wrappedsmime3undefs.h b/src/wrapped/generated/wrappedsmime3undefs.h index 9e4d66a7..f5812057 100644 --- a/src/wrapped/generated/wrappedsmime3undefs.h +++ b/src/wrapped/generated/wrappedsmime3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmime3UNDEFS_H_ #define __wrappedsmime3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpeg2defs.h b/src/wrapped/generated/wrappedsmpeg2defs.h index 87313f8b..bc4058b8 100644 --- a/src/wrapped/generated/wrappedsmpeg2defs.h +++ b/src/wrapped/generated/wrappedsmpeg2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpeg2DEFS_H_ #define __wrappedsmpeg2DEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpeg2types.h b/src/wrapped/generated/wrappedsmpeg2types.h index e9cb40d7..544d9122 100644 --- a/src/wrapped/generated/wrappedsmpeg2types.h +++ b/src/wrapped/generated/wrappedsmpeg2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpeg2TYPES_H_ #define __wrappedsmpeg2TYPES_H_ diff --git a/src/wrapped/generated/wrappedsmpeg2undefs.h b/src/wrapped/generated/wrappedsmpeg2undefs.h index 962f137d..6c96b222 100644 --- a/src/wrapped/generated/wrappedsmpeg2undefs.h +++ b/src/wrapped/generated/wrappedsmpeg2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpeg2UNDEFS_H_ #define __wrappedsmpeg2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpegdefs.h b/src/wrapped/generated/wrappedsmpegdefs.h index 2c6beebc..68505b19 100644 --- a/src/wrapped/generated/wrappedsmpegdefs.h +++ b/src/wrapped/generated/wrappedsmpegdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpegDEFS_H_ #define __wrappedsmpegDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpegtypes.h b/src/wrapped/generated/wrappedsmpegtypes.h index 15d7494d..339866ea 100644 --- a/src/wrapped/generated/wrappedsmpegtypes.h +++ b/src/wrapped/generated/wrappedsmpegtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpegTYPES_H_ #define __wrappedsmpegTYPES_H_ diff --git a/src/wrapped/generated/wrappedsmpegundefs.h b/src/wrapped/generated/wrappedsmpegundefs.h index d7682a7d..bd435470 100644 --- a/src/wrapped/generated/wrappedsmpegundefs.h +++ b/src/wrapped/generated/wrappedsmpegundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpegUNDEFS_H_ #define __wrappedsmpegUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsoftokn3defs.h b/src/wrapped/generated/wrappedsoftokn3defs.h index 8c8fa0ee..1a627329 100644 --- a/src/wrapped/generated/wrappedsoftokn3defs.h +++ b/src/wrapped/generated/wrappedsoftokn3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsoftokn3DEFS_H_ #define __wrappedsoftokn3DEFS_H_ diff --git a/src/wrapped/generated/wrappedsoftokn3types.h b/src/wrapped/generated/wrappedsoftokn3types.h index 1cc54de9..8eeb435a 100644 --- a/src/wrapped/generated/wrappedsoftokn3types.h +++ b/src/wrapped/generated/wrappedsoftokn3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsoftokn3TYPES_H_ #define __wrappedsoftokn3TYPES_H_ diff --git a/src/wrapped/generated/wrappedsoftokn3undefs.h b/src/wrapped/generated/wrappedsoftokn3undefs.h index 2566450b..6f6a57d3 100644 --- a/src/wrapped/generated/wrappedsoftokn3undefs.h +++ b/src/wrapped/generated/wrappedsoftokn3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsoftokn3UNDEFS_H_ #define __wrappedsoftokn3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedssl3defs.h b/src/wrapped/generated/wrappedssl3defs.h index ae087e0a..89771c8a 100644 --- a/src/wrapped/generated/wrappedssl3defs.h +++ b/src/wrapped/generated/wrappedssl3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedssl3DEFS_H_ #define __wrappedssl3DEFS_H_ diff --git a/src/wrapped/generated/wrappedssl3types.h b/src/wrapped/generated/wrappedssl3types.h index 1927a230..1bd0eabd 100644 --- a/src/wrapped/generated/wrappedssl3types.h +++ b/src/wrapped/generated/wrappedssl3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedssl3TYPES_H_ #define __wrappedssl3TYPES_H_ diff --git a/src/wrapped/generated/wrappedssl3undefs.h b/src/wrapped/generated/wrappedssl3undefs.h index 16eb9faa..254450b5 100644 --- a/src/wrapped/generated/wrappedssl3undefs.h +++ b/src/wrapped/generated/wrappedssl3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedssl3UNDEFS_H_ #define __wrappedssl3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbbinddefs.h b/src/wrapped/generated/wrappedtbbbinddefs.h index aba756fb..d51741a6 100644 --- a/src/wrapped/generated/wrappedtbbbinddefs.h +++ b/src/wrapped/generated/wrappedtbbbinddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbbindDEFS_H_ #define __wrappedtbbbindDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbbindtypes.h b/src/wrapped/generated/wrappedtbbbindtypes.h index c898ebce..75f04714 100644 --- a/src/wrapped/generated/wrappedtbbbindtypes.h +++ b/src/wrapped/generated/wrappedtbbbindtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbbindTYPES_H_ #define __wrappedtbbbindTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbbindundefs.h b/src/wrapped/generated/wrappedtbbbindundefs.h index 408e8fb0..af6e6d16 100644 --- a/src/wrapped/generated/wrappedtbbbindundefs.h +++ b/src/wrapped/generated/wrappedtbbbindundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbbindUNDEFS_H_ #define __wrappedtbbbindUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocdefs.h b/src/wrapped/generated/wrappedtbbmallocdefs.h index b0fe962a..bd7b74cd 100644 --- a/src/wrapped/generated/wrappedtbbmallocdefs.h +++ b/src/wrapped/generated/wrappedtbbmallocdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocDEFS_H_ #define __wrappedtbbmallocDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocproxydefs.h b/src/wrapped/generated/wrappedtbbmallocproxydefs.h index fab8b48a..09056e97 100644 --- a/src/wrapped/generated/wrappedtbbmallocproxydefs.h +++ b/src/wrapped/generated/wrappedtbbmallocproxydefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocproxyDEFS_H_ #define __wrappedtbbmallocproxyDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocproxytypes.h b/src/wrapped/generated/wrappedtbbmallocproxytypes.h index 661340a0..28214d00 100644 --- a/src/wrapped/generated/wrappedtbbmallocproxytypes.h +++ b/src/wrapped/generated/wrappedtbbmallocproxytypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocproxyTYPES_H_ #define __wrappedtbbmallocproxyTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocproxyundefs.h b/src/wrapped/generated/wrappedtbbmallocproxyundefs.h index ed68ff0e..c77870f6 100644 --- a/src/wrapped/generated/wrappedtbbmallocproxyundefs.h +++ b/src/wrapped/generated/wrappedtbbmallocproxyundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocproxyUNDEFS_H_ #define __wrappedtbbmallocproxyUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmalloctypes.h b/src/wrapped/generated/wrappedtbbmalloctypes.h index caec388b..19fc878c 100644 --- a/src/wrapped/generated/wrappedtbbmalloctypes.h +++ b/src/wrapped/generated/wrappedtbbmalloctypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocTYPES_H_ #define __wrappedtbbmallocTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocundefs.h b/src/wrapped/generated/wrappedtbbmallocundefs.h index 0e22b278..7085778d 100644 --- a/src/wrapped/generated/wrappedtbbmallocundefs.h +++ b/src/wrapped/generated/wrappedtbbmallocundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocUNDEFS_H_ #define __wrappedtbbmallocUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtcmallocminimaldefs.h b/src/wrapped/generated/wrappedtcmallocminimaldefs.h index c22b54d0..85a2658c 100644 --- a/src/wrapped/generated/wrappedtcmallocminimaldefs.h +++ b/src/wrapped/generated/wrappedtcmallocminimaldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtcmallocminimalDEFS_H_ #define __wrappedtcmallocminimalDEFS_H_ diff --git a/src/wrapped/generated/wrappedtcmallocminimaltypes.h b/src/wrapped/generated/wrappedtcmallocminimaltypes.h index 52e03b2d..964363e0 100644 --- a/src/wrapped/generated/wrappedtcmallocminimaltypes.h +++ b/src/wrapped/generated/wrappedtcmallocminimaltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtcmallocminimalTYPES_H_ #define __wrappedtcmallocminimalTYPES_H_ diff --git a/src/wrapped/generated/wrappedtcmallocminimalundefs.h b/src/wrapped/generated/wrappedtcmallocminimalundefs.h index 2dc85a79..d3f6349b 100644 --- a/src/wrapped/generated/wrappedtcmallocminimalundefs.h +++ b/src/wrapped/generated/wrappedtcmallocminimalundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtcmallocminimalUNDEFS_H_ #define __wrappedtcmallocminimalUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedudev0defs.h b/src/wrapped/generated/wrappedudev0defs.h index 23e9251e..99837005 100644 --- a/src/wrapped/generated/wrappedudev0defs.h +++ b/src/wrapped/generated/wrappedudev0defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev0DEFS_H_ #define __wrappedudev0DEFS_H_ diff --git a/src/wrapped/generated/wrappedudev0types.h b/src/wrapped/generated/wrappedudev0types.h index 9226453b..4577d427 100644 --- a/src/wrapped/generated/wrappedudev0types.h +++ b/src/wrapped/generated/wrappedudev0types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev0TYPES_H_ #define __wrappedudev0TYPES_H_ diff --git a/src/wrapped/generated/wrappedudev0undefs.h b/src/wrapped/generated/wrappedudev0undefs.h index ca9b005c..5a52481c 100644 --- a/src/wrapped/generated/wrappedudev0undefs.h +++ b/src/wrapped/generated/wrappedudev0undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev0UNDEFS_H_ #define __wrappedudev0UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedudev1defs.h b/src/wrapped/generated/wrappedudev1defs.h index 040be66a..899f57fb 100644 --- a/src/wrapped/generated/wrappedudev1defs.h +++ b/src/wrapped/generated/wrappedudev1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev1DEFS_H_ #define __wrappedudev1DEFS_H_ diff --git a/src/wrapped/generated/wrappedudev1types.h b/src/wrapped/generated/wrappedudev1types.h index 7d1681bf..c56a3635 100644 --- a/src/wrapped/generated/wrappedudev1types.h +++ b/src/wrapped/generated/wrappedudev1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev1TYPES_H_ #define __wrappedudev1TYPES_H_ diff --git a/src/wrapped/generated/wrappedudev1undefs.h b/src/wrapped/generated/wrappedudev1undefs.h index 814025c7..f5ff3583 100644 --- a/src/wrapped/generated/wrappedudev1undefs.h +++ b/src/wrapped/generated/wrappedudev1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev1UNDEFS_H_ #define __wrappedudev1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedunwinddefs.h b/src/wrapped/generated/wrappedunwinddefs.h index 6b5b16e6..3518970a 100644 --- a/src/wrapped/generated/wrappedunwinddefs.h +++ b/src/wrapped/generated/wrappedunwinddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedunwindDEFS_H_ #define __wrappedunwindDEFS_H_ diff --git a/src/wrapped/generated/wrappedunwindtypes.h b/src/wrapped/generated/wrappedunwindtypes.h index 78977ea6..f554d503 100644 --- a/src/wrapped/generated/wrappedunwindtypes.h +++ b/src/wrapped/generated/wrappedunwindtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedunwindTYPES_H_ #define __wrappedunwindTYPES_H_ diff --git a/src/wrapped/generated/wrappedunwindundefs.h b/src/wrapped/generated/wrappedunwindundefs.h index 13d2afbb..818ce97f 100644 --- a/src/wrapped/generated/wrappedunwindundefs.h +++ b/src/wrapped/generated/wrappedunwindundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedunwindUNDEFS_H_ #define __wrappedunwindUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedutildefs.h b/src/wrapped/generated/wrappedutildefs.h index 14920bc0..8531b62c 100644 --- a/src/wrapped/generated/wrappedutildefs.h +++ b/src/wrapped/generated/wrappedutildefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedutilDEFS_H_ #define __wrappedutilDEFS_H_ diff --git a/src/wrapped/generated/wrappedutiltypes.h b/src/wrapped/generated/wrappedutiltypes.h index 8b462767..d21cb30b 100644 --- a/src/wrapped/generated/wrappedutiltypes.h +++ b/src/wrapped/generated/wrappedutiltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedutilTYPES_H_ #define __wrappedutilTYPES_H_ diff --git a/src/wrapped/generated/wrappedutilundefs.h b/src/wrapped/generated/wrappedutilundefs.h index 69632e8d..4f029787 100644 --- a/src/wrapped/generated/wrappedutilundefs.h +++ b/src/wrapped/generated/wrappedutilundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedutilUNDEFS_H_ #define __wrappedutilUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedvorbisfiledefs.h b/src/wrapped/generated/wrappedvorbisfiledefs.h index 50057e6d..12eb528a 100644 --- a/src/wrapped/generated/wrappedvorbisfiledefs.h +++ b/src/wrapped/generated/wrappedvorbisfiledefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvorbisfileDEFS_H_ #define __wrappedvorbisfileDEFS_H_ diff --git a/src/wrapped/generated/wrappedvorbisfiletypes.h b/src/wrapped/generated/wrappedvorbisfiletypes.h index 1533cbac..3d3ca086 100644 --- a/src/wrapped/generated/wrappedvorbisfiletypes.h +++ b/src/wrapped/generated/wrappedvorbisfiletypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvorbisfileTYPES_H_ #define __wrappedvorbisfileTYPES_H_ diff --git a/src/wrapped/generated/wrappedvorbisfileundefs.h b/src/wrapped/generated/wrappedvorbisfileundefs.h index 329c731d..63edd380 100644 --- a/src/wrapped/generated/wrappedvorbisfileundefs.h +++ b/src/wrapped/generated/wrappedvorbisfileundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvorbisfileUNDEFS_H_ #define __wrappedvorbisfileUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedvulkandefs.h b/src/wrapped/generated/wrappedvulkandefs.h index f976c2da..35af1f42 100644 --- a/src/wrapped/generated/wrappedvulkandefs.h +++ b/src/wrapped/generated/wrappedvulkandefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvulkanDEFS_H_ #define __wrappedvulkanDEFS_H_ diff --git a/src/wrapped/generated/wrappedvulkantypes.h b/src/wrapped/generated/wrappedvulkantypes.h index fd784391..0a60dc11 100644 --- a/src/wrapped/generated/wrappedvulkantypes.h +++ b/src/wrapped/generated/wrappedvulkantypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvulkanTYPES_H_ #define __wrappedvulkanTYPES_H_ diff --git a/src/wrapped/generated/wrappedvulkanundefs.h b/src/wrapped/generated/wrappedvulkanundefs.h index a43e9a6d..6c55b09f 100644 --- a/src/wrapped/generated/wrappedvulkanundefs.h +++ b/src/wrapped/generated/wrappedvulkanundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvulkanUNDEFS_H_ #define __wrappedvulkanUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandclientdefs.h b/src/wrapped/generated/wrappedwaylandclientdefs.h index b1aa284e..ce7bef17 100644 --- a/src/wrapped/generated/wrappedwaylandclientdefs.h +++ b/src/wrapped/generated/wrappedwaylandclientdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandclientDEFS_H_ #define __wrappedwaylandclientDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandclienttypes.h b/src/wrapped/generated/wrappedwaylandclienttypes.h index fe0f4d8e..c08ac376 100644 --- a/src/wrapped/generated/wrappedwaylandclienttypes.h +++ b/src/wrapped/generated/wrappedwaylandclienttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandclientTYPES_H_ #define __wrappedwaylandclientTYPES_H_ diff --git a/src/wrapped/generated/wrappedwaylandclientundefs.h b/src/wrapped/generated/wrappedwaylandclientundefs.h index 3848289a..11e55f1c 100644 --- a/src/wrapped/generated/wrappedwaylandclientundefs.h +++ b/src/wrapped/generated/wrappedwaylandclientundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandclientUNDEFS_H_ #define __wrappedwaylandclientUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandcursordefs.h b/src/wrapped/generated/wrappedwaylandcursordefs.h index 0a3c0aef..054580ed 100644 --- a/src/wrapped/generated/wrappedwaylandcursordefs.h +++ b/src/wrapped/generated/wrappedwaylandcursordefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandcursorDEFS_H_ #define __wrappedwaylandcursorDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandcursortypes.h b/src/wrapped/generated/wrappedwaylandcursortypes.h index b04183af..b9ef07e6 100644 --- a/src/wrapped/generated/wrappedwaylandcursortypes.h +++ b/src/wrapped/generated/wrappedwaylandcursortypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandcursorTYPES_H_ #define __wrappedwaylandcursorTYPES_H_ diff --git a/src/wrapped/generated/wrappedwaylandcursorundefs.h b/src/wrapped/generated/wrappedwaylandcursorundefs.h index 88cfda9f..38056633 100644 --- a/src/wrapped/generated/wrappedwaylandcursorundefs.h +++ b/src/wrapped/generated/wrappedwaylandcursorundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandcursorUNDEFS_H_ #define __wrappedwaylandcursorUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandegldefs.h b/src/wrapped/generated/wrappedwaylandegldefs.h index 7887ffc1..55a102c5 100644 --- a/src/wrapped/generated/wrappedwaylandegldefs.h +++ b/src/wrapped/generated/wrappedwaylandegldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandeglDEFS_H_ #define __wrappedwaylandeglDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandegltypes.h b/src/wrapped/generated/wrappedwaylandegltypes.h index 91c5de4d..08da258d 100644 --- a/src/wrapped/generated/wrappedwaylandegltypes.h +++ b/src/wrapped/generated/wrappedwaylandegltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandeglTYPES_H_ #define __wrappedwaylandeglTYPES_H_ diff --git a/src/wrapped/generated/wrappedwaylandeglundefs.h b/src/wrapped/generated/wrappedwaylandeglundefs.h index 84f92a37..e2c625d1 100644 --- a/src/wrapped/generated/wrappedwaylandeglundefs.h +++ b/src/wrapped/generated/wrappedwaylandeglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandeglUNDEFS_H_ #define __wrappedwaylandeglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxineramadefs.h b/src/wrapped/generated/wrappedxineramadefs.h index 5d869c98..5eac29c8 100644 --- a/src/wrapped/generated/wrappedxineramadefs.h +++ b/src/wrapped/generated/wrappedxineramadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxineramaDEFS_H_ #define __wrappedxineramaDEFS_H_ diff --git a/src/wrapped/generated/wrappedxineramatypes.h b/src/wrapped/generated/wrappedxineramatypes.h index 111c7e7e..b33b6c63 100644 --- a/src/wrapped/generated/wrappedxineramatypes.h +++ b/src/wrapped/generated/wrappedxineramatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxineramaTYPES_H_ #define __wrappedxineramaTYPES_H_ diff --git a/src/wrapped/generated/wrappedxineramaundefs.h b/src/wrapped/generated/wrappedxineramaundefs.h index 8c55ca09..ecc0660b 100644 --- a/src/wrapped/generated/wrappedxineramaundefs.h +++ b/src/wrapped/generated/wrappedxineramaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxineramaUNDEFS_H_ #define __wrappedxineramaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommondefs.h b/src/wrapped/generated/wrappedxkbcommondefs.h index 692dd5ca..a3ce1209 100644 --- a/src/wrapped/generated/wrappedxkbcommondefs.h +++ b/src/wrapped/generated/wrappedxkbcommondefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonDEFS_H_ #define __wrappedxkbcommonDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommontypes.h b/src/wrapped/generated/wrappedxkbcommontypes.h index 8ed4d900..dede9085 100644 --- a/src/wrapped/generated/wrappedxkbcommontypes.h +++ b/src/wrapped/generated/wrappedxkbcommontypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonTYPES_H_ #define __wrappedxkbcommonTYPES_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonundefs.h b/src/wrapped/generated/wrappedxkbcommonundefs.h index 50f35582..c5555c37 100644 --- a/src/wrapped/generated/wrappedxkbcommonundefs.h +++ b/src/wrapped/generated/wrappedxkbcommonundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonUNDEFS_H_ #define __wrappedxkbcommonUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonx11defs.h b/src/wrapped/generated/wrappedxkbcommonx11defs.h index d182bec9..66f2eae6 100644 --- a/src/wrapped/generated/wrappedxkbcommonx11defs.h +++ b/src/wrapped/generated/wrappedxkbcommonx11defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonx11DEFS_H_ #define __wrappedxkbcommonx11DEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonx11types.h b/src/wrapped/generated/wrappedxkbcommonx11types.h index 790d388e..64f5facb 100644 --- a/src/wrapped/generated/wrappedxkbcommonx11types.h +++ b/src/wrapped/generated/wrappedxkbcommonx11types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonx11TYPES_H_ #define __wrappedxkbcommonx11TYPES_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonx11undefs.h b/src/wrapped/generated/wrappedxkbcommonx11undefs.h index 3d21600a..93ba7b62 100644 --- a/src/wrapped/generated/wrappedxkbcommonx11undefs.h +++ b/src/wrapped/generated/wrappedxkbcommonx11undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonx11UNDEFS_H_ #define __wrappedxkbcommonx11UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbregistrydefs.h b/src/wrapped/generated/wrappedxkbregistrydefs.h index 2a054780..a417dd0a 100644 --- a/src/wrapped/generated/wrappedxkbregistrydefs.h +++ b/src/wrapped/generated/wrappedxkbregistrydefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbregistryDEFS_H_ #define __wrappedxkbregistryDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbregistrytypes.h b/src/wrapped/generated/wrappedxkbregistrytypes.h index 51cfef34..07078d1d 100644 --- a/src/wrapped/generated/wrappedxkbregistrytypes.h +++ b/src/wrapped/generated/wrappedxkbregistrytypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbregistryTYPES_H_ #define __wrappedxkbregistryTYPES_H_ diff --git a/src/wrapped/generated/wrappedxkbregistryundefs.h b/src/wrapped/generated/wrappedxkbregistryundefs.h index f106d4af..e5ae5c3b 100644 --- a/src/wrapped/generated/wrappedxkbregistryundefs.h +++ b/src/wrapped/generated/wrappedxkbregistryundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbregistryUNDEFS_H_ #define __wrappedxkbregistryUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxml2defs.h b/src/wrapped/generated/wrappedxml2defs.h index 9e06efca..8c6db69a 100644 --- a/src/wrapped/generated/wrappedxml2defs.h +++ b/src/wrapped/generated/wrappedxml2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxml2DEFS_H_ #define __wrappedxml2DEFS_H_ diff --git a/src/wrapped/generated/wrappedxml2types.h b/src/wrapped/generated/wrappedxml2types.h index bed5ff59..47edb9d7 100644 --- a/src/wrapped/generated/wrappedxml2types.h +++ b/src/wrapped/generated/wrappedxml2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxml2TYPES_H_ #define __wrappedxml2TYPES_H_ diff --git a/src/wrapped/generated/wrappedxml2undefs.h b/src/wrapped/generated/wrappedxml2undefs.h index cb9cbb73..19339c57 100644 --- a/src/wrapped/generated/wrappedxml2undefs.h +++ b/src/wrapped/generated/wrappedxml2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxml2UNDEFS_H_ #define __wrappedxml2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxshmfencedefs.h b/src/wrapped/generated/wrappedxshmfencedefs.h index 38ffbde4..85daaf5f 100644 --- a/src/wrapped/generated/wrappedxshmfencedefs.h +++ b/src/wrapped/generated/wrappedxshmfencedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxshmfenceDEFS_H_ #define __wrappedxshmfenceDEFS_H_ diff --git a/src/wrapped/generated/wrappedxshmfencetypes.h b/src/wrapped/generated/wrappedxshmfencetypes.h index 01c92a21..1cda4799 100644 --- a/src/wrapped/generated/wrappedxshmfencetypes.h +++ b/src/wrapped/generated/wrappedxshmfencetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxshmfenceTYPES_H_ #define __wrappedxshmfenceTYPES_H_ diff --git a/src/wrapped/generated/wrappedxshmfenceundefs.h b/src/wrapped/generated/wrappedxshmfenceundefs.h index 57603fd9..51ab1383 100644 --- a/src/wrapped/generated/wrappedxshmfenceundefs.h +++ b/src/wrapped/generated/wrappedxshmfenceundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxshmfenceUNDEFS_H_ #define __wrappedxshmfenceUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxsltdefs.h b/src/wrapped/generated/wrappedxsltdefs.h index bc87e360..22873927 100644 --- a/src/wrapped/generated/wrappedxsltdefs.h +++ b/src/wrapped/generated/wrappedxsltdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxsltDEFS_H_ #define __wrappedxsltDEFS_H_ diff --git a/src/wrapped/generated/wrappedxslttypes.h b/src/wrapped/generated/wrappedxslttypes.h index c96a3646..ff2d23b7 100644 --- a/src/wrapped/generated/wrappedxslttypes.h +++ b/src/wrapped/generated/wrappedxslttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxsltTYPES_H_ #define __wrappedxsltTYPES_H_ diff --git a/src/wrapped/generated/wrappedxsltundefs.h b/src/wrapped/generated/wrappedxsltundefs.h index 057facc4..f9d72dfd 100644 --- a/src/wrapped/generated/wrappedxsltundefs.h +++ b/src/wrapped/generated/wrappedxsltundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxsltUNDEFS_H_ #define __wrappedxsltUNDEFS_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index ed48f1f4..bacb0849 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #include #include @@ -6358,6 +6358,7 @@ void iFEpuvvppp(x64emu_t *emu, uintptr_t fcn) { iFEpuppp_t fn = (iFEpuppp_t)fcn; #if defined(ARM64) int isSimpleWrapper(wrapper_t fun) { + if (box64_is32bits) return 0; if (fun == &vFv) return 1; if (fun == &vFc) return 1; if (fun == &vFw) return 1; @@ -8222,6 +8223,7 @@ int isSimpleWrapper(wrapper_t fun) { } #elif defined(RV64) int isSimpleWrapper(wrapper_t fun) { + if (box64_is32bits) return 0; if (fun == &vFv) return 1; if (fun == &vFC) return 1; if (fun == &vFW) return 1; @@ -8573,13 +8575,19 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpppffff) return 9; return 0; } - #else int isSimpleWrapper(wrapper_t fun) { return 0; } #endif +int isRetX87Wrapper32(wrapper_t fun) +#ifndef BOX32 +{ return 0; } +#else + ; +#endif + int isRetX87Wrapper(wrapper_t fun) { if (fun == &DFDi) return 1; if (fun == &DFDD) return 1; diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index b1d0158a..a1f2bb2b 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __WRAPPER_H_ #define __WRAPPER_H_ diff --git a/src/wrapped/wrappedlibdl.c b/src/wrapped/wrappedlibdl.c index 27252850..62744466 100644 --- a/src/wrapped/wrappedlibdl.c +++ b/src/wrapped/wrappedlibdl.c @@ -64,6 +64,47 @@ int my_dlinfo(x64emu_t* emu, void* handle, int request, void* info) EXPORT; #endif #define CLEARERR if(dl->last_error) {box_free(dl->last_error); dl->last_error = NULL;} +void dl_clear_error() +{ + dlprivate_t *dl = my_context->dlprivate; + CLEARERR; +} + +void dl_set_error(const char* msg) +{ + dlprivate_t *dl = my_context->dlprivate; + if(!dl->last_error) + dl->last_error = box_calloc(1, 129); + snprintf(dl->last_error, 129, "%s", msg); +} + +library_t* dl_get_library(void* handle) +{ + dlprivate_t *dl = my_context->dlprivate; + CLEARERR + size_t nlib = (size_t)handle; + --nlib; + // size_t is unsigned + if(nlib>=dl->lib_sz) { + if(!dl->last_error) + dl->last_error = box_calloc(1, 129); + snprintf(dl->last_error, 129, "Bad handle %p)\n", handle); + return (void*)-1LL; + } + if(!dl->dllibs[nlib].count || !dl->dllibs[nlib].full) { + if(!dl->last_error) + dl->last_error = box_calloc(1, 129); + snprintf(dl->last_error, 129, "Bad handle %p (already closed))\n", handle); + return (void*)-1LL; + } + return dl->dllibs[nlib].lib; +} + +char* dl_last_error() +{ + dlprivate_t *dl = my_context->dlprivate; + return dl->last_error; +} void RemoveDlopen(library_t** lib, size_t idx) { @@ -613,6 +654,11 @@ void closeAllDLOpenned() //extern void* _dlfcn_hook; #endif +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + #define CUSTOM_FINI \ closeAllDLOpenned(); diff --git a/src/wrapped/wrappedlibrt.c b/src/wrapped/wrappedlibrt.c index 1ca32859..438b3312 100644 --- a/src/wrapped/wrappedlibrt.c +++ b/src/wrapped/wrappedlibrt.c @@ -162,4 +162,9 @@ EXPORT int my_lio_listio(x64emu_t* emu, int mode, void* list[], int nent, struct extern int __mq_open_2(const char*, int); #endif +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + #include "wrappedlib_init.h" diff --git a/src/wrapped32/generated/converter32.c b/src/wrapped32/generated/converter32.c new file mode 100644 index 00000000..e098645a --- /dev/null +++ b/src/wrapped32/generated/converter32.c @@ -0,0 +1,61 @@ +// Manually created for now +#include "converter32.h" + +void from_struct_p(struct_p_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_p(ptr_t d, const struct_p_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; +} + +void from_struct_L(struct_L_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; +} +void to_struct_L(ptr_t d, const struct_L_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; +} + + +void from_struct_h(struct_h_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->h0 = from_hash(*(ulong_t*)src); src += 4; +} +void to_struct_h(ptr_t d, const struct_h_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_hash(src->h0); dest += 4; +} + +void from_struct_H(struct_H_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->H0 = from_hash_d(*(ulong_t*)src); src += 4; +} +void to_struct_H(ptr_t d, const struct_H_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_hash_d(src->H0); dest += 4; +} + +void from_struct_ppppp(struct_ppppp_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = *(void**)src; src += 4; + dest->p1 = *(void**)src; src += 4; + dest->p2 = *(void**)src; src += 4; + dest->p3 = *(void**)src; src += 4; + dest->p4 = *(void**)src; src += 4; +} +void to_struct_ppppp(ptr_t d, const struct_ppppp_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p1); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p2); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p3); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p4); dest += 4; +} diff --git a/src/wrapped32/generated/converter32.h b/src/wrapped32/generated/converter32.h new file mode 100644 index 00000000..86dd3e21 --- /dev/null +++ b/src/wrapped32/generated/converter32.h @@ -0,0 +1,37 @@ +// Manually created for now +#ifndef __CONVERTER_H_ +#define __CONVERTER_H_ + +#include "box32.h" + +typedef struct struct_p_s { + void *p0; +} struct_p_t; +void from_struct_p(struct_p_t *dest, ptr_t src); +void to_struct_p(ptr_t dest, const struct_p_t *src); +typedef struct struct_L_s { + unsigned long L0; +} struct_L_t; +void from_struct_L(struct_L_t *dest, ptr_t src); +void to_struct_L(ptr_t dest, const struct_L_t *src); +typedef struct struct_h_s { + uintptr_t h0; +} struct_h_t; +void from_struct_h(struct_h_t *dest, ptr_t src); +void to_struct_h(ptr_t dest, const struct_h_t *src); +typedef struct struct_H_s { + uintptr_t H0; +} struct_H_t; +void from_struct_H(struct_H_t *dest, ptr_t src); +void to_struct_H(ptr_t dest, const struct_H_t *src); +typedef struct struct_ppppp_s { + void* p0; + void* p1; + void* p2; + void* p3; + void* p4; +} struct_ppppp_t; +void from_struct_ppppp(struct_ppppp_t *dest, ptr_t src); +void to_struct_ppppp(ptr_t dest, const struct_ppppp_t *src); + +#endif // __CONVERTER_H_ diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt new file mode 100644 index 00000000..28592269 --- /dev/null +++ b/src/wrapped32/generated/functions_list.txt @@ -0,0 +1,365 @@ +#() vFv -> vFv +#() vFi -> vFi +#() vFu -> vFu +#() vFp -> vFp +#() vFA -> vFA +#() iFv -> iFv +#() iFi -> iFi +#() iFI -> iFI +#() iFu -> iFu +#() iFf -> iFf +#() iFd -> iFd +#() iFL -> iFL +#() iFp -> iFp +#() iFh -> iFh +#() iFH -> iFH +#() IFf -> IFf +#() IFd -> IFd +#() uFv -> uFv +#() uFu -> uFu +#() uFU -> uFU +#() UFs -> UFs +#() fFf -> fFf +#() dFv -> dFv +#() dFd -> dFd +#() lFi -> lFi +#() lFp -> lFp +#() LFv -> LFv +#() LFL -> LFL +#() pFu -> pFu +#() pFL -> pFL +#() pFp -> pFp +#() hFv -> hFv +#() aFa -> aFa +#() vFEv -> vFEv +#() vFEp -> vFEp +#() iFEv -> iFEv +#() iFEi -> iFEi +#() iFEL -> iFEL +#() iFEp -> iFEp +#() iFEh -> iFEh +#() iFEO -> iFEO +#() iFii -> iFii +#() iFiI -> iFiI +#() iFiu -> iFiu +#() iFip -> iFip +#() iFuu -> iFuu +#() iFup -> iFup +#() iFli -> iFli +#() iFpi -> iFpi +#() iFpp -> iFpp +#() iFhp -> iFhp +#() iFhh -> iFhh +#() IFII -> IFII +#() uFEu -> uFEu +#() uFEV -> uFEV +#() uFpa -> uFpa +#() UFii -> UFii +#() UFUU -> UFUU +#() UFss -> UFss +#() fFif -> fFif +#() fFfi -> fFfi +#() fFff -> fFff +#() fFfD -> fFfD +#() fFfp -> fFfp +#() dFid -> dFid +#() dFdi -> dFdi +#() dFdd -> dFdd +#() dFdD -> dFdD +#() dFdp -> dFdp +#() LFpp -> LFpp +#() pFEv -> pFEv +#() pFEp -> pFEp +#() pFLL -> pFLL +#() aFia -> aFia +#() iFHBp_ -> iFHB +#() vFEip -> vFEip +#() vFEpi -> vFEpi +#() vFEpu -> vFEpu +#() vFfpp -> vFfpp +#() vFdpp -> vFdpp +#() iFEpi -> iFEpi +#() iFEpL -> iFEpL +#() iFEpp -> iFEpp +#() iFEpV -> iFEpV +#() iFiii -> iFiii +#() iFiiI -> iFiiI +#() iFiiu -> iFiiu +#() iFiiO -> iFiiO +#() iFiII -> iFiII +#() iFiuu -> iFiuu +#() iFiLN -> iFiLN +#() iFipp -> iFipp +#() iFuii -> iFuii +#() iFuip -> iFuip +#() iFuui -> iFuui +#() iFuuu -> iFuuu +#() iFuLp -> iFuLp +#() iFupp -> iFupp +#() iFpiu -> iFpiu +#() iFpip -> iFpip +#() iFpuu -> iFpuu +#() iFppu -> iFppu +#() iFppL -> iFppL +#() iFppp -> iFppp +#() iFpOu -> iFpOu +#() IFiIi -> IFiIi +#() fFfff -> fFfff +#() fFffp -> fFffp +#() dFddd -> dFddd +#() dFddp -> dFddp +#() pFEip -> pFEip +#() pFEpi -> pFEpi +#() pFEpp -> pFEpp +#() pFppL -> pFppL +#() pFpOM -> pFpOM +#() hFEpp -> hFEpp +#() aFipa -> aFipa +#() lFpBp_i -> lFpBi +#() vFEipV -> vFEipV +#() vFEppp -> vFEppp +#() iFEiiN -> iFEiiN +#() iFEipp -> iFEipp +#() iFELup -> iFELup +#() iFEpip -> iFEpip +#() iFEpup -> iFEpup +#() iFEppu -> iFEppu +#() iFEppL -> iFEppL +#() iFEppp -> iFEppp +#() iFiiII -> iFiiII +#() iFiuui -> iFiuui +#() LFpLLh -> LFpLLh +#() pFEppi -> pFEppi +#() pFEppp -> pFEppp +#() pFppuL -> pFppuL +#() pFppLL -> pFppLL +#() iFEppiV -> iFEppiV +#() iFEpppi -> iFEpppi +#() iFiLLLL -> iFiLLLL +#() iFEBh_ppp -> iFEBppp +#() iFEpippppp -> iFEpippppp +#defined(ANDROID) pFv -> pFv +#defined(ANDROID) vFEpppp -> vFEpppp +#defined(HAVE_LD80BITS) DFD -> DFD +#defined(HAVE_LD80BITS) DFDD -> DFDD +#defined(HAVE_LD80BITS) DFDp -> DFDp +#!defined(HAVE_LD80BITS) KFK -> KFK +#!defined(HAVE_LD80BITS) KFKK -> KFKK +#!defined(HAVE_LD80BITS) KFKp -> KFKp +#() iFEvpV -> iFEpV +#() UFsvvs -> UFss +wrappedcrashhandler: +wrappedldlinux: +- pFv: + - ___tls_get_addr +- pFp: + - __tls_get_addr +wrappedlibc: +- vFv: +- vFp: +- iFv: +- iFi: + - __close_nocancel +- iFL: +- iFp: +- iFO: +- uFu: +- uFV: +- LFL: +- pFL: +- vFip: +- vFpi: +- vFpu: +- iFpp: +- iFpV: +- IFII: +- UFUU: +- pFip: + - signal +- hFpp: +- vFipV: +- iFvpV: +- iFiiN: +- iFipp: +- iFppp: +- vFpppp: + - __libc_init +- iFiiII: +- iFppiV: +- iFpippppp: +wrappedlibdl: +- iFp: + - dlclose +- pFv: + - dlerror +- iFpp: + - _dl_find_object + - dladdr +- pFpi: + - dlopen +- pFpp: + - dlsym +- iFpip: + - dlinfo +- pFppi: + - dlmopen +- pFppp: + - dlvsym +- iFpppi: + - dladdr1 +wrappedlibm: +- UFs: + - cacosf + - cacoshf + - casinf + - casinhf + - catanf + - catanhf + - ccosf + - ccoshf + - cexpf + - clogf + - cprojf + - csinf + - csinhf + - csqrtf + - ctanf + - ctanhf +- fFf: + - __acosf_finite + - __acoshf_finite + - __asinf_finite + - __coshf_finite + - __exp2f_finite + - __expf_finite + - __log10f_finite + - __log2f_finite + - __logf_finite + - __sinhf_finite + - __sqrtf_finite +- dFd: + - __acos_finite + - __acosh_finite + - __asin_finite + - __cosh_finite + - __exp2_finite + - __exp_finite + - __log10_finite + - __log2_finite + - __log_finite + - __sinh_finite + - __sqrt_finite +- DFD: + - pow10l +- KFK: + - acoshl + - acosl + - asinhl + - asinl + - atanhl + - cbrtl + - erfcl + - erfl + - ldexpl + - lgammal + - logl + - pow10l + - tgammal +- fFff: + - __atan2f_finite + - __hypotf_finite + - __powf_finite +- dFdd: + - __atan2_finite + - __hypot_finite + - __pow_finite +- KFKK: + - fmodl + - powl +- KFKp: + - frexpl + - lgammal_r +- UFsvvs: + - cpowf +wrappedlibpthread: +- vFv: + - __pthread_initialize +- vFp: + - __pthread_register_cancel + - __pthread_unregister_cancel + - __pthread_unwind_next +- iFp: + - __pthread_mutex_destroy + - __pthread_mutex_lock + - __pthread_mutex_trylock + - __pthread_mutex_unlock + - pthread_attr_destroy + - pthread_attr_init + - pthread_cond_broadcast@GLIBC_2.0 + - pthread_cond_destroy@GLIBC_2.0 + - pthread_cond_signal@GLIBC_2.0 + - pthread_mutex_destroy + - pthread_mutex_lock + - pthread_mutex_trylock + - pthread_mutex_unlock + - pthread_rwlock_rdlock + - pthread_rwlock_unlock + - pthread_rwlock_wrlock +- iFh: + - pthread_detach +- vFpi: + - _pthread_cleanup_pop + - _pthread_cleanup_pop_restore +- iFpi: + - pthread_attr_setdetachstate + - pthread_attr_setinheritsched + - pthread_attr_setschedpolicy + - pthread_attr_setscope + - pthread_kill + - pthread_mutexattr_setkind_np +- iFpL: + - pthread_attr_setguardsize + - pthread_attr_setstacksize +- iFpp: + - __pthread_key_create + - __pthread_mutex_init + - __pthread_once + - pthread_attr_getdetachstate + - pthread_attr_getguardsize + - pthread_attr_getinheritsched + - pthread_attr_getschedparam + - pthread_attr_getschedpolicy + - pthread_attr_getscope + - pthread_attr_getstackaddr + - pthread_attr_getstacksize + - pthread_attr_setschedparam + - pthread_attr_setstackaddr + - pthread_cond_init@GLIBC_2.0 + - pthread_cond_wait + - pthread_cond_wait@GLIBC_2.0 + - pthread_key_create + - pthread_mutex_init + - pthread_mutex_timedlock + - pthread_once + - pthread_setname_np +- vFppp: + - _pthread_cleanup_push + - _pthread_cleanup_push_defer +- iFLup: + - pthread_setaffinity_np +- iFpup: + - pthread_attr_setaffinity_np + - pthread_getaffinity_np +- iFppu: + - pthread_getname_np +- iFppL: + - pthread_attr_setstack +- iFppp: + - __pthread_atfork + - pthread_atfork + - pthread_attr_getstack + - pthread_cond_timedwait + - pthread_cond_timedwait@GLIBC_2.0 +- iFhppp: + - pthread_create +wrappedlibrt: diff --git a/src/wrapped32/generated/wrappedcrashhandlerdefs32.h b/src/wrapped32/generated/wrappedcrashhandlerdefs32.h new file mode 100644 index 00000000..83e132a1 --- /dev/null +++ b/src/wrapped32/generated/wrappedcrashhandlerdefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedcrashhandlerDEFS32_H_ +#define __wrappedcrashhandlerDEFS32_H_ + + +#endif // __wrappedcrashhandlerDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedcrashhandlertypes32.h b/src/wrapped32/generated/wrappedcrashhandlertypes32.h new file mode 100644 index 00000000..5b75966f --- /dev/null +++ b/src/wrapped32/generated/wrappedcrashhandlertypes32.h @@ -0,0 +1,17 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedcrashhandlerTYPES32_H_ +#define __wrappedcrashhandlerTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedcrashhandlerTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedcrashhandlerundefs32.h b/src/wrapped32/generated/wrappedcrashhandlerundefs32.h new file mode 100644 index 00000000..d70f6207 --- /dev/null +++ b/src/wrapped32/generated/wrappedcrashhandlerundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedcrashhandlerUNDEFS32_H_ +#define __wrappedcrashhandlerUNDEFS32_H_ + + +#endif // __wrappedcrashhandlerUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedldlinuxdefs32.h b/src/wrapped32/generated/wrappedldlinuxdefs32.h new file mode 100644 index 00000000..24962643 --- /dev/null +++ b/src/wrapped32/generated/wrappedldlinuxdefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedldlinuxDEFS32_H_ +#define __wrappedldlinuxDEFS32_H_ + + +#endif // __wrappedldlinuxDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedldlinuxtypes32.h b/src/wrapped32/generated/wrappedldlinuxtypes32.h new file mode 100644 index 00000000..e010f126 --- /dev/null +++ b/src/wrapped32/generated/wrappedldlinuxtypes32.h @@ -0,0 +1,21 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedldlinuxTYPES32_H_ +#define __wrappedldlinuxTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void* (*pFv_t)(void); +typedef void* (*pFp_t)(void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(___tls_get_addr, pFv_t) \ + GO(__tls_get_addr, pFp_t) + +#endif // __wrappedldlinuxTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedldlinuxundefs32.h b/src/wrapped32/generated/wrappedldlinuxundefs32.h new file mode 100644 index 00000000..0ab4c7e3 --- /dev/null +++ b/src/wrapped32/generated/wrappedldlinuxundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedldlinuxUNDEFS32_H_ +#define __wrappedldlinuxUNDEFS32_H_ + + +#endif // __wrappedldlinuxUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibcdefs32.h b/src/wrapped32/generated/wrappedlibcdefs32.h new file mode 100644 index 00000000..bcd18301 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibcdefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibcDEFS32_H_ +#define __wrappedlibcDEFS32_H_ + + +#endif // __wrappedlibcDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibctypes32.h b/src/wrapped32/generated/wrappedlibctypes32.h new file mode 100644 index 00000000..1b3d5ab3 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibctypes32.h @@ -0,0 +1,49 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibcTYPES32_H_ +#define __wrappedlibcTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFv_t)(void); +typedef void (*vFp_t)(void*); +typedef int32_t (*iFv_t)(void); +typedef int32_t (*iFi_t)(int32_t); +typedef int32_t (*iFL_t)(uintptr_t); +typedef int32_t (*iFp_t)(void*); +typedef int32_t (*iFO_t)(int32_t); +typedef uint32_t (*uFu_t)(uint32_t); +typedef uint32_t (*uFV_t)(...); +typedef uintptr_t (*LFL_t)(uintptr_t); +typedef void* (*pFL_t)(uintptr_t); +typedef void (*vFip_t)(int32_t, void*); +typedef void (*vFpi_t)(void*, int32_t); +typedef void (*vFpu_t)(void*, uint32_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef int32_t (*iFpV_t)(void*, ...); +typedef int64_t (*IFII_t)(int64_t, int64_t); +typedef uint64_t (*UFUU_t)(uint64_t, uint64_t); +typedef void* (*pFip_t)(int32_t, void*); +typedef uintptr_t (*hFpp_t)(void*, void*); +typedef void (*vFipV_t)(int32_t, void*, ...); +typedef int32_t (*iFvpV_t)(void, void*, ...); +typedef int32_t (*iFiiN_t)(int32_t, int32_t, ...); +typedef int32_t (*iFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFppp_t)(void*, void*, void*); +typedef void (*vFpppp_t)(void*, void*, void*, void*); +typedef int32_t (*iFiiII_t)(int32_t, int32_t, int64_t, int64_t); +typedef int32_t (*iFppiV_t)(void*, void*, int32_t, ...); +typedef int32_t (*iFpippppp_t)(void*, int32_t, void*, void*, void*, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(__close_nocancel, iFi_t) \ + GO(signal, pFip_t) \ + GO(__libc_init, vFpppp_t) + +#endif // __wrappedlibcTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibcundefs32.h b/src/wrapped32/generated/wrappedlibcundefs32.h new file mode 100644 index 00000000..13e37512 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibcundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibcUNDEFS32_H_ +#define __wrappedlibcUNDEFS32_H_ + + +#endif // __wrappedlibcUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibdldefs32.h b/src/wrapped32/generated/wrappedlibdldefs32.h new file mode 100644 index 00000000..a817cc31 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibdldefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibdlDEFS32_H_ +#define __wrappedlibdlDEFS32_H_ + + +#endif // __wrappedlibdlDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibdltypes32.h b/src/wrapped32/generated/wrappedlibdltypes32.h new file mode 100644 index 00000000..6368b9a1 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibdltypes32.h @@ -0,0 +1,36 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibdlTYPES32_H_ +#define __wrappedlibdlTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef int32_t (*iFp_t)(void*); +typedef void* (*pFv_t)(void); +typedef int32_t (*iFpp_t)(void*, void*); +typedef void* (*pFpi_t)(void*, int32_t); +typedef void* (*pFpp_t)(void*, void*); +typedef int32_t (*iFpip_t)(void*, int32_t, void*); +typedef void* (*pFppi_t)(void*, void*, int32_t); +typedef void* (*pFppp_t)(void*, void*, void*); +typedef int32_t (*iFpppi_t)(void*, void*, void*, int32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(dlclose, iFp_t) \ + GO(dlerror, pFv_t) \ + GO(_dl_find_object, iFpp_t) \ + GO(dladdr, iFpp_t) \ + GO(dlopen, pFpi_t) \ + GO(dlsym, pFpp_t) \ + GO(dlinfo, iFpip_t) \ + GO(dlmopen, pFppi_t) \ + GO(dlvsym, pFppp_t) \ + GO(dladdr1, iFpppi_t) + +#endif // __wrappedlibdlTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibdlundefs32.h b/src/wrapped32/generated/wrappedlibdlundefs32.h new file mode 100644 index 00000000..1a512d1a --- /dev/null +++ b/src/wrapped32/generated/wrappedlibdlundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibdlUNDEFS32_H_ +#define __wrappedlibdlUNDEFS32_H_ + + +#endif // __wrappedlibdlUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibmdefs32.h b/src/wrapped32/generated/wrappedlibmdefs32.h new file mode 100644 index 00000000..abfcbb76 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibmdefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibmDEFS32_H_ +#define __wrappedlibmDEFS32_H_ + + +#endif // __wrappedlibmDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibmtypes32.h b/src/wrapped32/generated/wrappedlibmtypes32.h new file mode 100644 index 00000000..589a2f45 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibmtypes32.h @@ -0,0 +1,90 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibmTYPES32_H_ +#define __wrappedlibmTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef uint64_t (*UFs_t)(void*); +typedef float (*fFf_t)(float); +typedef double (*dFd_t)(double); +typedef long double (*DFD_t)(long double); +typedef double (*KFK_t)(double); +typedef float (*fFff_t)(float, float); +typedef double (*dFdd_t)(double, double); +typedef double (*KFKK_t)(double, double); +typedef double (*KFKp_t)(double, void*); +typedef uint64_t (*UFsvvs_t)(void*, void, void, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(cacosf, UFs_t) \ + GO(cacoshf, UFs_t) \ + GO(casinf, UFs_t) \ + GO(casinhf, UFs_t) \ + GO(catanf, UFs_t) \ + GO(catanhf, UFs_t) \ + GO(ccosf, UFs_t) \ + GO(ccoshf, UFs_t) \ + GO(cexpf, UFs_t) \ + GO(clogf, UFs_t) \ + GO(cprojf, UFs_t) \ + GO(csinf, UFs_t) \ + GO(csinhf, UFs_t) \ + GO(csqrtf, UFs_t) \ + GO(ctanf, UFs_t) \ + GO(ctanhf, UFs_t) \ + GO(__acosf_finite, fFf_t) \ + GO(__acoshf_finite, fFf_t) \ + GO(__asinf_finite, fFf_t) \ + GO(__coshf_finite, fFf_t) \ + GO(__exp2f_finite, fFf_t) \ + GO(__expf_finite, fFf_t) \ + GO(__log10f_finite, fFf_t) \ + GO(__log2f_finite, fFf_t) \ + GO(__logf_finite, fFf_t) \ + GO(__sinhf_finite, fFf_t) \ + GO(__sqrtf_finite, fFf_t) \ + GO(__acos_finite, dFd_t) \ + GO(__acosh_finite, dFd_t) \ + GO(__asin_finite, dFd_t) \ + GO(__cosh_finite, dFd_t) \ + GO(__exp2_finite, dFd_t) \ + GO(__exp_finite, dFd_t) \ + GO(__log10_finite, dFd_t) \ + GO(__log2_finite, dFd_t) \ + GO(__log_finite, dFd_t) \ + GO(__sinh_finite, dFd_t) \ + GO(__sqrt_finite, dFd_t) \ + GO(pow10l, DFD_t) \ + GO(acoshl, KFK_t) \ + GO(acosl, KFK_t) \ + GO(asinhl, KFK_t) \ + GO(asinl, KFK_t) \ + GO(atanhl, KFK_t) \ + GO(cbrtl, KFK_t) \ + GO(erfcl, KFK_t) \ + GO(erfl, KFK_t) \ + GO(ldexpl, KFK_t) \ + GO(lgammal, KFK_t) \ + GO(logl, KFK_t) \ + GO(pow10l, KFK_t) \ + GO(tgammal, KFK_t) \ + GO(__atan2f_finite, fFff_t) \ + GO(__hypotf_finite, fFff_t) \ + GO(__powf_finite, fFff_t) \ + GO(__atan2_finite, dFdd_t) \ + GO(__hypot_finite, dFdd_t) \ + GO(__pow_finite, dFdd_t) \ + GO(fmodl, KFKK_t) \ + GO(powl, KFKK_t) \ + GO(frexpl, KFKp_t) \ + GO(lgammal_r, KFKp_t) \ + GO(cpowf, UFsvvs_t) + +#endif // __wrappedlibmTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibmundefs32.h b/src/wrapped32/generated/wrappedlibmundefs32.h new file mode 100644 index 00000000..f9a4b404 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibmundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibmUNDEFS32_H_ +#define __wrappedlibmUNDEFS32_H_ + + +#endif // __wrappedlibmUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibpthreaddefs32.h b/src/wrapped32/generated/wrappedlibpthreaddefs32.h new file mode 100644 index 00000000..4192688c --- /dev/null +++ b/src/wrapped32/generated/wrappedlibpthreaddefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibpthreadDEFS32_H_ +#define __wrappedlibpthreadDEFS32_H_ + + +#endif // __wrappedlibpthreadDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibpthreadtypes32.h b/src/wrapped32/generated/wrappedlibpthreadtypes32.h new file mode 100644 index 00000000..74b615de --- /dev/null +++ b/src/wrapped32/generated/wrappedlibpthreadtypes32.h @@ -0,0 +1,97 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibpthreadTYPES32_H_ +#define __wrappedlibpthreadTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFv_t)(void); +typedef void (*vFp_t)(void*); +typedef int32_t (*iFp_t)(void*); +typedef int32_t (*iFh_t)(uintptr_t); +typedef void (*vFpi_t)(void*, int32_t); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef int32_t (*iFpL_t)(void*, uintptr_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef void (*vFppp_t)(void*, void*, void*); +typedef int32_t (*iFLup_t)(uintptr_t, uint32_t, void*); +typedef int32_t (*iFpup_t)(void*, uint32_t, void*); +typedef int32_t (*iFppu_t)(void*, void*, uint32_t); +typedef int32_t (*iFppL_t)(void*, void*, uintptr_t); +typedef int32_t (*iFppp_t)(void*, void*, void*); +typedef int32_t (*iFhppp_t)(uintptr_t, void*, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(__pthread_initialize, vFv_t) \ + GO(__pthread_register_cancel, vFp_t) \ + GO(__pthread_unregister_cancel, vFp_t) \ + GO(__pthread_unwind_next, vFp_t) \ + GO(__pthread_mutex_destroy, iFp_t) \ + GO(__pthread_mutex_lock, iFp_t) \ + GO(__pthread_mutex_trylock, iFp_t) \ + GO(__pthread_mutex_unlock, iFp_t) \ + GO(pthread_attr_destroy, iFp_t) \ + GO(pthread_attr_init, iFp_t) \ + GO(pthread_cond_broadcast@GLIBC_2.0, iFp_t) \ + GO(pthread_cond_destroy@GLIBC_2.0, iFp_t) \ + GO(pthread_cond_signal@GLIBC_2.0, iFp_t) \ + GO(pthread_mutex_destroy, iFp_t) \ + GO(pthread_mutex_lock, iFp_t) \ + GO(pthread_mutex_trylock, iFp_t) \ + GO(pthread_mutex_unlock, iFp_t) \ + GO(pthread_rwlock_rdlock, iFp_t) \ + GO(pthread_rwlock_unlock, iFp_t) \ + GO(pthread_rwlock_wrlock, iFp_t) \ + GO(pthread_detach, iFh_t) \ + GO(_pthread_cleanup_pop, vFpi_t) \ + GO(_pthread_cleanup_pop_restore, vFpi_t) \ + GO(pthread_attr_setdetachstate, iFpi_t) \ + GO(pthread_attr_setinheritsched, iFpi_t) \ + GO(pthread_attr_setschedpolicy, iFpi_t) \ + GO(pthread_attr_setscope, iFpi_t) \ + GO(pthread_kill, iFpi_t) \ + GO(pthread_mutexattr_setkind_np, iFpi_t) \ + GO(pthread_attr_setguardsize, iFpL_t) \ + GO(pthread_attr_setstacksize, iFpL_t) \ + GO(__pthread_key_create, iFpp_t) \ + GO(__pthread_mutex_init, iFpp_t) \ + GO(__pthread_once, iFpp_t) \ + GO(pthread_attr_getdetachstate, iFpp_t) \ + GO(pthread_attr_getguardsize, iFpp_t) \ + GO(pthread_attr_getinheritsched, iFpp_t) \ + GO(pthread_attr_getschedparam, iFpp_t) \ + GO(pthread_attr_getschedpolicy, iFpp_t) \ + GO(pthread_attr_getscope, iFpp_t) \ + GO(pthread_attr_getstackaddr, iFpp_t) \ + GO(pthread_attr_getstacksize, iFpp_t) \ + GO(pthread_attr_setschedparam, iFpp_t) \ + GO(pthread_attr_setstackaddr, iFpp_t) \ + GO(pthread_cond_init@GLIBC_2.0, iFpp_t) \ + GO(pthread_cond_wait, iFpp_t) \ + GO(pthread_cond_wait@GLIBC_2.0, iFpp_t) \ + GO(pthread_key_create, iFpp_t) \ + GO(pthread_mutex_init, iFpp_t) \ + GO(pthread_mutex_timedlock, iFpp_t) \ + GO(pthread_once, iFpp_t) \ + GO(pthread_setname_np, iFpp_t) \ + GO(_pthread_cleanup_push, vFppp_t) \ + GO(_pthread_cleanup_push_defer, vFppp_t) \ + GO(pthread_setaffinity_np, iFLup_t) \ + GO(pthread_attr_setaffinity_np, iFpup_t) \ + GO(pthread_getaffinity_np, iFpup_t) \ + GO(pthread_getname_np, iFppu_t) \ + GO(pthread_attr_setstack, iFppL_t) \ + GO(__pthread_atfork, iFppp_t) \ + GO(pthread_atfork, iFppp_t) \ + GO(pthread_attr_getstack, iFppp_t) \ + GO(pthread_cond_timedwait, iFppp_t) \ + GO(pthread_cond_timedwait@GLIBC_2.0, iFppp_t) \ + GO(pthread_create, iFhppp_t) + +#endif // __wrappedlibpthreadTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibpthreadundefs32.h b/src/wrapped32/generated/wrappedlibpthreadundefs32.h new file mode 100644 index 00000000..687cec63 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibpthreadundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibpthreadUNDEFS32_H_ +#define __wrappedlibpthreadUNDEFS32_H_ + + +#endif // __wrappedlibpthreadUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibrtdefs32.h b/src/wrapped32/generated/wrappedlibrtdefs32.h new file mode 100644 index 00000000..5c2c26cb --- /dev/null +++ b/src/wrapped32/generated/wrappedlibrtdefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibrtDEFS32_H_ +#define __wrappedlibrtDEFS32_H_ + + +#endif // __wrappedlibrtDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibrttypes32.h b/src/wrapped32/generated/wrappedlibrttypes32.h new file mode 100644 index 00000000..41bb06d3 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibrttypes32.h @@ -0,0 +1,17 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibrtTYPES32_H_ +#define __wrappedlibrtTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedlibrtTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibrtundefs32.h b/src/wrapped32/generated/wrappedlibrtundefs32.h new file mode 100644 index 00000000..13b52f67 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibrtundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibrtUNDEFS32_H_ +#define __wrappedlibrtUNDEFS32_H_ + + +#endif // __wrappedlibrtUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c new file mode 100644 index 00000000..1d8c2890 --- /dev/null +++ b/src/wrapped32/generated/wrapper32.c @@ -0,0 +1,423 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#include +#include +#include + +#include "wrapper32.h" +#include "emu/x64emu_private.h" +#include "emu/x87emu_private.h" +#include "regs.h" +#include "x64emu.h" +#include "box32.h" +#include "converter32.h" + +typedef union ui64_s { + int64_t i; + uint64_t u; + uint32_t d[2]; +} ui64_t; + +typedef struct _2uint_struct_s { + uint32_t a; + uint32_t b; +} _2uint_struct_t; + +extern void* my__IO_2_1_stderr_; +extern void* my__IO_2_1_stdin_ ; +extern void* my__IO_2_1_stdout_; + +static void* io_convert(void* v) +{ + if(!v) + return v; + if(v==my__IO_2_1_stderr_) + return stderr; + if(v==my__IO_2_1_stdin_) + return stdin; + if(v==my__IO_2_1_stdout_) + return stdout; + return v; +} + +typedef struct my_GValue_s +{ + int g_type; + union { + int v_int; + int64_t v_int64; + uint64_t v_uint64; + float v_float; + double v_double; + void* v_pointer; + } data[2]; +} my_GValue_t; + +static void alignGValue(my_GValue_t* v, void* value) +{ + v->g_type = *(int*)value; + memcpy(v->data, value+4, 2*sizeof(double)); +} +static void unalignGValue(void* value, my_GValue_t* v) +{ + *(int*)value = v->g_type; + memcpy(value+4, v->data, 2*sizeof(double)); +} + +void* VulkanFromx86(void* src, void** save); +void VulkanTox86(void* src, void* save); + +#define ST0val ST0.d + +int of_convert32(int); + +typedef void (*vFv_t)(void); +typedef void (*vFi_t)(int32_t); +typedef void (*vFu_t)(uint32_t); +typedef void (*vFp_t)(void*); +typedef void (*vFA_t)(void*); +typedef int32_t (*iFv_t)(void); +typedef int32_t (*iFi_t)(int32_t); +typedef int32_t (*iFI_t)(int64_t); +typedef int32_t (*iFu_t)(uint32_t); +typedef int32_t (*iFf_t)(float); +typedef int32_t (*iFd_t)(double); +typedef int32_t (*iFL_t)(uintptr_t); +typedef int32_t (*iFp_t)(void*); +typedef int32_t (*iFh_t)(uintptr_t); +typedef int32_t (*iFH_t)(uintptr_t); +typedef int64_t (*IFf_t)(float); +typedef int64_t (*IFd_t)(double); +typedef uint32_t (*uFv_t)(void); +typedef uint32_t (*uFu_t)(uint32_t); +typedef uint32_t (*uFU_t)(uint64_t); +typedef uint64_t (*UFs_t)(void*); +typedef float (*fFf_t)(float); +typedef double (*dFv_t)(void); +typedef double (*dFd_t)(double); +typedef intptr_t (*lFi_t)(int32_t); +typedef intptr_t (*lFp_t)(void*); +typedef uintptr_t (*LFv_t)(void); +typedef uintptr_t (*LFL_t)(uintptr_t); +typedef void* (*pFu_t)(uint32_t); +typedef void* (*pFL_t)(uintptr_t); +typedef void* (*pFp_t)(void*); +typedef uintptr_t (*hFv_t)(void); +typedef void* (*aFa_t)(void*); +typedef void (*vFEv_t)(x64emu_t*); +typedef void (*vFEp_t)(x64emu_t*, void*); +typedef int32_t (*iFEv_t)(x64emu_t*); +typedef int32_t (*iFEi_t)(x64emu_t*, int32_t); +typedef int32_t (*iFEL_t)(x64emu_t*, uintptr_t); +typedef int32_t (*iFEp_t)(x64emu_t*, void*); +typedef int32_t (*iFEh_t)(x64emu_t*, uintptr_t); +typedef int32_t (*iFEO_t)(x64emu_t*, int32_t); +typedef int32_t (*iFii_t)(int32_t, int32_t); +typedef int32_t (*iFiI_t)(int32_t, int64_t); +typedef int32_t (*iFiu_t)(int32_t, uint32_t); +typedef int32_t (*iFip_t)(int32_t, void*); +typedef int32_t (*iFuu_t)(uint32_t, uint32_t); +typedef int32_t (*iFup_t)(uint32_t, void*); +typedef int32_t (*iFli_t)(intptr_t, int32_t); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef int32_t (*iFhp_t)(uintptr_t, void*); +typedef int32_t (*iFhh_t)(uintptr_t, uintptr_t); +typedef int64_t (*IFII_t)(int64_t, int64_t); +typedef uint32_t (*uFEu_t)(x64emu_t*, uint32_t); +typedef uint32_t (*uFEV_t)(x64emu_t*, void*); +typedef uint32_t (*uFpa_t)(void*, void*); +typedef uint64_t (*UFii_t)(int32_t, int32_t); +typedef uint64_t (*UFUU_t)(uint64_t, uint64_t); +typedef uint64_t (*UFss_t)(void*, void*); +typedef float (*fFif_t)(int32_t, float); +typedef float (*fFfi_t)(float, int32_t); +typedef float (*fFff_t)(float, float); +typedef float (*fFfD_t)(float, long double); +typedef float (*fFfp_t)(float, void*); +typedef double (*dFid_t)(int32_t, double); +typedef double (*dFdi_t)(double, int32_t); +typedef double (*dFdd_t)(double, double); +typedef double (*dFdD_t)(double, long double); +typedef double (*dFdp_t)(double, void*); +typedef uintptr_t (*LFpp_t)(void*, void*); +typedef void* (*pFEv_t)(x64emu_t*); +typedef void* (*pFEp_t)(x64emu_t*, void*); +typedef void* (*pFLL_t)(uintptr_t, uintptr_t); +typedef void* (*aFia_t)(int32_t, void*); +typedef int32_t (*iFHBp__t)(uintptr_t, struct_p_t*); +typedef void (*vFEip_t)(x64emu_t*, int32_t, void*); +typedef void (*vFEpi_t)(x64emu_t*, void*, int32_t); +typedef void (*vFEpu_t)(x64emu_t*, void*, uint32_t); +typedef void (*vFfpp_t)(float, void*, void*); +typedef void (*vFdpp_t)(double, void*, void*); +typedef int32_t (*iFEpi_t)(x64emu_t*, void*, int32_t); +typedef int32_t (*iFEpL_t)(x64emu_t*, void*, uintptr_t); +typedef int32_t (*iFEpp_t)(x64emu_t*, void*, void*); +typedef int32_t (*iFEpV_t)(x64emu_t*, void*, void*); +typedef int32_t (*iFiii_t)(int32_t, int32_t, int32_t); +typedef int32_t (*iFiiI_t)(int32_t, int32_t, int64_t); +typedef int32_t (*iFiiu_t)(int32_t, int32_t, uint32_t); +typedef int32_t (*iFiiO_t)(int32_t, int32_t, int32_t); +typedef int32_t (*iFiII_t)(int32_t, int64_t, int64_t); +typedef int32_t (*iFiuu_t)(int32_t, uint32_t, uint32_t); +typedef int32_t (*iFiLN_t)(int32_t, uintptr_t, ...); +typedef int32_t (*iFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFuii_t)(uint32_t, int32_t, int32_t); +typedef int32_t (*iFuip_t)(uint32_t, int32_t, void*); +typedef int32_t (*iFuui_t)(uint32_t, uint32_t, int32_t); +typedef int32_t (*iFuuu_t)(uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFuLp_t)(uint32_t, uintptr_t, void*); +typedef int32_t (*iFupp_t)(uint32_t, void*, void*); +typedef int32_t (*iFpiu_t)(void*, int32_t, uint32_t); +typedef int32_t (*iFpip_t)(void*, int32_t, void*); +typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t); +typedef int32_t (*iFppu_t)(void*, void*, uint32_t); +typedef int32_t (*iFppL_t)(void*, void*, uintptr_t); +typedef int32_t (*iFppp_t)(void*, void*, void*); +typedef int32_t (*iFpOu_t)(void*, int32_t, uint32_t); +typedef int64_t (*IFiIi_t)(int32_t, int64_t, int32_t); +typedef float (*fFfff_t)(float, float, float); +typedef float (*fFffp_t)(float, float, void*); +typedef double (*dFddd_t)(double, double, double); +typedef double (*dFddp_t)(double, double, void*); +typedef void* (*pFEip_t)(x64emu_t*, int32_t, void*); +typedef void* (*pFEpi_t)(x64emu_t*, void*, int32_t); +typedef void* (*pFEpp_t)(x64emu_t*, void*, void*); +typedef void* (*pFppL_t)(void*, void*, uintptr_t); +typedef void* (*pFpOM_t)(void*, int32_t, ...); +typedef uintptr_t (*hFEpp_t)(x64emu_t*, void*, void*); +typedef void* (*aFipa_t)(int32_t, void*, void*); +typedef intptr_t (*lFpBp_i_t)(void*, struct_p_t*, int32_t); +typedef void (*vFEipV_t)(x64emu_t*, int32_t, void*, void*); +typedef void (*vFEppp_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iFEiiN_t)(x64emu_t*, int32_t, int32_t, ...); +typedef int32_t (*iFEipp_t)(x64emu_t*, int32_t, void*, void*); +typedef int32_t (*iFELup_t)(x64emu_t*, uintptr_t, uint32_t, void*); +typedef int32_t (*iFEpip_t)(x64emu_t*, void*, int32_t, void*); +typedef int32_t (*iFEpup_t)(x64emu_t*, void*, uint32_t, void*); +typedef int32_t (*iFEppu_t)(x64emu_t*, void*, void*, uint32_t); +typedef int32_t (*iFEppL_t)(x64emu_t*, void*, void*, uintptr_t); +typedef int32_t (*iFEppp_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iFiiII_t)(int32_t, int32_t, int64_t, int64_t); +typedef int32_t (*iFiuui_t)(int32_t, uint32_t, uint32_t, int32_t); +typedef uintptr_t (*LFpLLh_t)(void*, uintptr_t, uintptr_t, uintptr_t); +typedef void* (*pFEppi_t)(x64emu_t*, void*, void*, int32_t); +typedef void* (*pFEppp_t)(x64emu_t*, void*, void*, void*); +typedef void* (*pFppuL_t)(void*, void*, uint32_t, uintptr_t); +typedef void* (*pFppLL_t)(void*, void*, uintptr_t, uintptr_t); +typedef int32_t (*iFEppiV_t)(x64emu_t*, void*, void*, int32_t, void*); +typedef int32_t (*iFEpppi_t)(x64emu_t*, void*, void*, void*, int32_t); +typedef int32_t (*iFiLLLL_t)(int32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +typedef int32_t (*iFEBh_ppp_t)(x64emu_t*, struct_h_t*, void*, void*, void*); +typedef int32_t (*iFEpippppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*); + +#if defined(ANDROID) +typedef void* (*pFv_t)(void); +typedef void (*vFEpppp_t)(x64emu_t*, void*, void*, void*, void*); +#endif + +#if defined(HAVE_LD80BITS) +typedef long double (*DFD_t)(long double); +typedef long double (*DFDD_t)(long double, long double); +typedef long double (*DFDp_t)(long double, void*); +#endif + +#if !defined(HAVE_LD80BITS) +typedef double (*KFK_t)(double); +typedef double (*KFKK_t)(double, double); +typedef double (*KFKp_t)(double, void*); +#endif + +void vFv_32(x64emu_t *emu, uintptr_t fcn) { vFv_t fn = (vFv_t)fcn; fn(); } +void vFi_32(x64emu_t *emu, uintptr_t fcn) { vFi_t fn = (vFi_t)fcn; fn(from_ptri(int32_t, R_ESP + 4)); } +void vFu_32(x64emu_t *emu, uintptr_t fcn) { vFu_t fn = (vFu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4)); } +void vFp_32(x64emu_t *emu, uintptr_t fcn) { vFp_t fn = (vFp_t)fcn; fn(from_ptriv(R_ESP + 4)); } +void vFA_32(x64emu_t *emu, uintptr_t fcn) { vFA_t fn = (vFA_t)fcn; fn(from_locale_d(from_ptri(ptr_t, R_ESP + 4))); } +void iFv_32(x64emu_t *emu, uintptr_t fcn) { iFv_t fn = (iFv_t)fcn; R_EAX = fn(); } +void iFi_32(x64emu_t *emu, uintptr_t fcn) { iFi_t fn = (iFi_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4)); } +void iFI_32(x64emu_t *emu, uintptr_t fcn) { iFI_t fn = (iFI_t)fcn; R_EAX = fn(from_ptri(int64_t, R_ESP + 4)); } +void iFu_32(x64emu_t *emu, uintptr_t fcn) { iFu_t fn = (iFu_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4)); } +void iFf_32(x64emu_t *emu, uintptr_t fcn) { iFf_t fn = (iFf_t)fcn; R_EAX = fn(from_ptri(float, R_ESP + 4)); } +void iFd_32(x64emu_t *emu, uintptr_t fcn) { iFd_t fn = (iFd_t)fcn; R_EAX = fn(from_ptri(double, R_ESP + 4)); } +void iFL_32(x64emu_t *emu, uintptr_t fcn) { iFL_t fn = (iFL_t)fcn; R_EAX = fn(to_ulong(from_ptri(ulong_t, R_ESP + 4))); } +void iFp_32(x64emu_t *emu, uintptr_t fcn) { iFp_t fn = (iFp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4)); } +void iFh_32(x64emu_t *emu, uintptr_t fcn) { iFh_t fn = (iFh_t)fcn; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4))); } +void iFH_32(x64emu_t *emu, uintptr_t fcn) { iFH_t fn = (iFH_t)fcn; R_EAX = fn(from_hash_d(from_ptri(ptr_t, R_ESP + 4))); } +void IFf_32(x64emu_t *emu, uintptr_t fcn) { IFf_t fn = (IFf_t)fcn; ui64_t r; r.i = fn(from_ptri(float, R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void IFd_32(x64emu_t *emu, uintptr_t fcn) { IFd_t fn = (IFd_t)fcn; ui64_t r; r.i = fn(from_ptri(double, R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void uFv_32(x64emu_t *emu, uintptr_t fcn) { uFv_t fn = (uFv_t)fcn; R_EAX = (uint32_t)fn(); } +void uFu_32(x64emu_t *emu, uintptr_t fcn) { uFu_t fn = (uFu_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4)); } +void uFU_32(x64emu_t *emu, uintptr_t fcn) { uFU_t fn = (uFU_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint64_t, R_ESP + 4)); } +void UFs_32(x64emu_t *emu, uintptr_t fcn) { UFs_t fn = (UFs_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptrv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void fFf_32(x64emu_t *emu, uintptr_t fcn) { fFf_t fn = (fFf_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4)); fpu_do_push(emu); ST0val = fl; } +void dFv_32(x64emu_t *emu, uintptr_t fcn) { dFv_t fn = (dFv_t)fcn; double db = fn(); fpu_do_push(emu); ST0val = db; } +void dFd_32(x64emu_t *emu, uintptr_t fcn) { dFd_t fn = (dFd_t)fcn; double db = fn(from_ptri(double, R_ESP + 4)); fpu_do_push(emu); ST0val = db; } +void lFi_32(x64emu_t *emu, uintptr_t fcn) { lFi_t fn = (lFi_t)fcn; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4))); } +void lFp_32(x64emu_t *emu, uintptr_t fcn) { lFp_t fn = (lFp_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4))); } +void LFv_32(x64emu_t *emu, uintptr_t fcn) { LFv_t fn = (LFv_t)fcn; R_EAX = to_ulong(fn()); } +void LFL_32(x64emu_t *emu, uintptr_t fcn) { LFL_t fn = (LFL_t)fcn; R_EAX = to_ulong(fn(to_ulong(from_ptri(ulong_t, R_ESP + 4)))); } +void pFu_32(x64emu_t *emu, uintptr_t fcn) { pFu_t fn = (pFu_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4))); } +void pFL_32(x64emu_t *emu, uintptr_t fcn) { pFL_t fn = (pFL_t)fcn; R_EAX = to_ptrv(fn(to_ulong(from_ptri(ulong_t, R_ESP + 4)))); } +void pFp_32(x64emu_t *emu, uintptr_t fcn) { pFp_t fn = (pFp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4))); } +void hFv_32(x64emu_t *emu, uintptr_t fcn) { hFv_t fn = (hFv_t)fcn; R_EAX = to_hash(fn()); } +void aFa_32(x64emu_t *emu, uintptr_t fcn) { aFa_t fn = (aFa_t)fcn; R_EAX = to_locale(fn(from_locale(from_ptri(ptr_t, R_ESP + 4)))); } +void vFEv_32(x64emu_t *emu, uintptr_t fcn) { vFEv_t fn = (vFEv_t)fcn; fn(emu); } +void vFEp_32(x64emu_t *emu, uintptr_t fcn) { vFEp_t fn = (vFEp_t)fcn; fn(emu, from_ptriv(R_ESP + 4)); } +void iFEv_32(x64emu_t *emu, uintptr_t fcn) { iFEv_t fn = (iFEv_t)fcn; R_EAX = fn(emu); } +void iFEi_32(x64emu_t *emu, uintptr_t fcn) { iFEi_t fn = (iFEi_t)fcn; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4)); } +void iFEL_32(x64emu_t *emu, uintptr_t fcn) { iFEL_t fn = (iFEL_t)fcn; R_EAX = fn(emu, to_ulong(from_ptri(ulong_t, R_ESP + 4))); } +void iFEp_32(x64emu_t *emu, uintptr_t fcn) { iFEp_t fn = (iFEp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4)); } +void iFEh_32(x64emu_t *emu, uintptr_t fcn) { iFEh_t fn = (iFEh_t)fcn; R_EAX = fn(emu, from_hash(from_ptri(ptr_t, R_ESP + 4))); } +void iFEO_32(x64emu_t *emu, uintptr_t fcn) { iFEO_t fn = (iFEO_t)fcn; R_EAX = fn(emu, of_convert32(from_ptri(int32_t, R_ESP + 4))); } +void iFii_32(x64emu_t *emu, uintptr_t fcn) { iFii_t fn = (iFii_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iFiI_32(x64emu_t *emu, uintptr_t fcn) { iFiI_t fn = (iFiI_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8)); } +void iFiu_32(x64emu_t *emu, uintptr_t fcn) { iFiu_t fn = (iFiu_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void iFip_32(x64emu_t *emu, uintptr_t fcn) { iFip_t fn = (iFip_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iFuu_32(x64emu_t *emu, uintptr_t fcn) { iFuu_t fn = (iFuu_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void iFup_32(x64emu_t *emu, uintptr_t fcn) { iFup_t fn = (iFup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iFli_32(x64emu_t *emu, uintptr_t fcn) { iFli_t fn = (iFli_t)fcn; R_EAX = fn(to_long(from_ptri(long_t, R_ESP + 4)), from_ptri(int32_t, R_ESP + 8)); } +void iFpi_32(x64emu_t *emu, uintptr_t fcn) { iFpi_t fn = (iFpi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iFpp_32(x64emu_t *emu, uintptr_t fcn) { iFpp_t fn = (iFpp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iFhp_32(x64emu_t *emu, uintptr_t fcn) { iFhp_t fn = (iFhp_t)fcn; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4)), from_ptriv(R_ESP + 8)); } +void iFhh_32(x64emu_t *emu, uintptr_t fcn) { iFhh_t fn = (iFhh_t)fcn; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4)), from_hash(from_ptri(ptr_t, R_ESP + 8))); } +void IFII_32(x64emu_t *emu, uintptr_t fcn) { IFII_t fn = (IFII_t)fcn; ui64_t r; r.i = fn(from_ptri(int64_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void uFEu_32(x64emu_t *emu, uintptr_t fcn) { uFEu_t fn = (uFEu_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptri(uint32_t, R_ESP + 4)); } +void uFEV_32(x64emu_t *emu, uintptr_t fcn) { uFEV_t fn = (uFEV_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptrv(R_ESP + 4)); } +void uFpa_32(x64emu_t *emu, uintptr_t fcn) { uFpa_t fn = (uFpa_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_locale(from_ptri(ptr_t, R_ESP + 8))); } +void UFii_32(x64emu_t *emu, uintptr_t fcn) { UFii_t fn = (UFii_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void UFUU_32(x64emu_t *emu, uintptr_t fcn) { UFUU_t fn = (UFUU_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptri(uint64_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void UFss_32(x64emu_t *emu, uintptr_t fcn) { UFss_t fn = (UFss_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptrv(R_ESP + 4), from_ptrv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void fFif_32(x64emu_t *emu, uintptr_t fcn) { fFif_t fn = (fFif_t)fcn; float fl = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(float, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; } +void fFfi_32(x64emu_t *emu, uintptr_t fcn) { fFfi_t fn = (fFfi_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; } +void fFff_32(x64emu_t *emu, uintptr_t fcn) { fFff_t fn = (fFff_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; } +void fFfD_32(x64emu_t *emu, uintptr_t fcn) { fFfD_t fn = (fFfD_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), LD2localLD(from_ptrv(R_ESP + 8))); fpu_do_push(emu); ST0val = fl; } +void fFfp_32(x64emu_t *emu, uintptr_t fcn) { fFfp_t fn = (fFfp_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptriv(R_ESP + 8)); fpu_do_push(emu); ST0val = fl; } +void dFid_32(x64emu_t *emu, uintptr_t fcn) { dFid_t fn = (dFid_t)fcn; double db = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(double, R_ESP + 8)); fpu_do_push(emu); ST0val = db; } +void dFdi_32(x64emu_t *emu, uintptr_t fcn) { dFdi_t fn = (dFdi_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(int32_t, R_ESP + 12)); fpu_do_push(emu); ST0val = db; } +void dFdd_32(x64emu_t *emu, uintptr_t fcn) { dFdd_t fn = (dFdd_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12)); fpu_do_push(emu); ST0val = db; } +void dFdD_32(x64emu_t *emu, uintptr_t fcn) { dFdD_t fn = (dFdD_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), LD2localLD(from_ptrv(R_ESP + 12))); fpu_do_push(emu); ST0val = db; } +void dFdp_32(x64emu_t *emu, uintptr_t fcn) { dFdp_t fn = (dFdp_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptriv(R_ESP + 12)); fpu_do_push(emu); ST0val = db; } +void LFpp_32(x64emu_t *emu, uintptr_t fcn) { LFpp_t fn = (LFpp_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); } +void pFEv_32(x64emu_t *emu, uintptr_t fcn) { pFEv_t fn = (pFEv_t)fcn; R_EAX = to_ptrv(fn(emu)); } +void pFEp_32(x64emu_t *emu, uintptr_t fcn) { pFEp_t fn = (pFEp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4))); } +void pFLL_32(x64emu_t *emu, uintptr_t fcn) { pFLL_t fn = (pFLL_t)fcn; R_EAX = to_ptrv(fn(to_ulong(from_ptri(ulong_t, R_ESP + 4)), to_ulong(from_ptri(ulong_t, R_ESP + 8)))); } +void aFia_32(x64emu_t *emu, uintptr_t fcn) { aFia_t fn = (aFia_t)fcn; R_EAX = to_locale(fn(from_ptri(int32_t, R_ESP + 4), from_locale(from_ptri(ptr_t, R_ESP + 8)))); } +void iFHBp__32(x64emu_t *emu, uintptr_t fcn) { iFHBp__t fn = (iFHBp__t)fcn; struct_p_t arg_8; R_EAX = fn(from_hash_d(from_ptri(ptr_t, R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFEip_32(x64emu_t *emu, uintptr_t fcn) { vFEip_t fn = (vFEip_t)fcn; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void vFEpi_32(x64emu_t *emu, uintptr_t fcn) { vFEpi_t fn = (vFEpi_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void vFEpu_32(x64emu_t *emu, uintptr_t fcn) { vFEpu_t fn = (vFEpu_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void vFfpp_32(x64emu_t *emu, uintptr_t fcn) { vFfpp_t fn = (vFfpp_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFdpp_32(x64emu_t *emu, uintptr_t fcn) { vFdpp_t fn = (vFdpp_t)fcn; fn(from_ptri(double, R_ESP + 4), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFEpi_32(x64emu_t *emu, uintptr_t fcn) { iFEpi_t fn = (iFEpi_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iFEpL_32(x64emu_t *emu, uintptr_t fcn) { iFEpL_t fn = (iFEpL_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8))); } +void iFEpp_32(x64emu_t *emu, uintptr_t fcn) { iFEpp_t fn = (iFEpp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iFEpV_32(x64emu_t *emu, uintptr_t fcn) { iFEpV_t fn = (iFEpV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptrv(R_ESP + 8)); } +void iFiii_32(x64emu_t *emu, uintptr_t fcn) { iFiii_t fn = (iFiii_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iFiiI_32(x64emu_t *emu, uintptr_t fcn) { iFiiI_t fn = (iFiiI_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12)); } +void iFiiu_32(x64emu_t *emu, uintptr_t fcn) { iFiiu_t fn = (iFiiu_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFiiO_32(x64emu_t *emu, uintptr_t fcn) { iFiiO_t fn = (iFiiO_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), of_convert32(from_ptri(int32_t, R_ESP + 12))); } +void iFiII_32(x64emu_t *emu, uintptr_t fcn) { iFiII_t fn = (iFiII_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16)); } +void iFiuu_32(x64emu_t *emu, uintptr_t fcn) { iFiuu_t fn = (iFiuu_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFiLN_32(x64emu_t *emu, uintptr_t fcn) { iFiLN_t fn = (iFiLN_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void iFipp_32(x64emu_t *emu, uintptr_t fcn) { iFipp_t fn = (iFipp_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFuii_32(x64emu_t *emu, uintptr_t fcn) { iFuii_t fn = (iFuii_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iFuip_32(x64emu_t *emu, uintptr_t fcn) { iFuip_t fn = (iFuip_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFuui_32(x64emu_t *emu, uintptr_t fcn) { iFuui_t fn = (iFuui_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iFuuu_32(x64emu_t *emu, uintptr_t fcn) { iFuuu_t fn = (iFuuu_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFuLp_32(x64emu_t *emu, uintptr_t fcn) { iFuLp_t fn = (iFuLp_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void iFupp_32(x64emu_t *emu, uintptr_t fcn) { iFupp_t fn = (iFupp_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFpiu_32(x64emu_t *emu, uintptr_t fcn) { iFpiu_t fn = (iFpiu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFpip_32(x64emu_t *emu, uintptr_t fcn) { iFpip_t fn = (iFpip_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFpuu_32(x64emu_t *emu, uintptr_t fcn) { iFpuu_t fn = (iFpuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFppu_32(x64emu_t *emu, uintptr_t fcn) { iFppu_t fn = (iFppu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFppL_32(x64emu_t *emu, uintptr_t fcn) { iFppL_t fn = (iFppL_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void iFppp_32(x64emu_t *emu, uintptr_t fcn) { iFppp_t fn = (iFppp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFpOu_32(x64emu_t *emu, uintptr_t fcn) { iFpOu_t fn = (iFpOu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), of_convert32(from_ptri(int32_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12)); } +void IFiIi_32(x64emu_t *emu, uintptr_t fcn) { IFiIi_t fn = (IFiIi_t)fcn; ui64_t r; r.i = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 16)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void fFfff_32(x64emu_t *emu, uintptr_t fcn) { fFfff_t fn = (fFfff_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12)); fpu_do_push(emu); ST0val = fl; } +void fFffp_32(x64emu_t *emu, uintptr_t fcn) { fFffp_t fn = (fFffp_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptriv(R_ESP + 12)); fpu_do_push(emu); ST0val = fl; } +void dFddd_32(x64emu_t *emu, uintptr_t fcn) { dFddd_t fn = (dFddd_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20)); fpu_do_push(emu); ST0val = db; } +void dFddp_32(x64emu_t *emu, uintptr_t fcn) { dFddp_t fn = (dFddp_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptriv(R_ESP + 20)); fpu_do_push(emu); ST0val = db; } +void pFEip_32(x64emu_t *emu, uintptr_t fcn) { pFEip_t fn = (pFEip_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8))); } +void pFEpi_32(x64emu_t *emu, uintptr_t fcn) { pFEpi_t fn = (pFEpi_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); } +void pFEpp_32(x64emu_t *emu, uintptr_t fcn) { pFEpp_t fn = (pFEpp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); } +void pFppL_32(x64emu_t *emu, uintptr_t fcn) { pFppL_t fn = (pFppL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12)))); } +void pFpOM_32(x64emu_t *emu, uintptr_t fcn) { pFpOM_t fn = (pFpOM_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), of_convert32(from_ptri(int32_t, R_ESP + 8)), from_ptriv(R_ESP + 12),from_ptriv(R_ESP + 12 + 4))); } +void hFEpp_32(x64emu_t *emu, uintptr_t fcn) { hFEpp_t fn = (hFEpp_t)fcn; R_EAX = to_hash(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); } +void aFipa_32(x64emu_t *emu, uintptr_t fcn) { aFipa_t fn = (aFipa_t)fcn; R_EAX = to_locale(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_locale(from_ptri(ptr_t, R_ESP + 12)))); } +void lFpBp_i_32(x64emu_t *emu, uintptr_t fcn) { lFpBp_i_t fn = (lFpBp_i_t)fcn; struct_p_t arg_8; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFEipV_32(x64emu_t *emu, uintptr_t fcn) { vFEipV_t fn = (vFEipV_t)fcn; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); } +void vFEppp_32(x64emu_t *emu, uintptr_t fcn) { vFEppp_t fn = (vFEppp_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEiiN_32(x64emu_t *emu, uintptr_t fcn) { iFEiiN_t fn = (iFEiiN_t)fcn; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEipp_32(x64emu_t *emu, uintptr_t fcn) { iFEipp_t fn = (iFEipp_t)fcn; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFELup_32(x64emu_t *emu, uintptr_t fcn) { iFELup_t fn = (iFELup_t)fcn; R_EAX = fn(emu, to_ulong(from_ptri(ulong_t, R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEpip_32(x64emu_t *emu, uintptr_t fcn) { iFEpip_t fn = (iFEpip_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEpup_32(x64emu_t *emu, uintptr_t fcn) { iFEpup_t fn = (iFEpup_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEppu_32(x64emu_t *emu, uintptr_t fcn) { iFEppu_t fn = (iFEppu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFEppL_32(x64emu_t *emu, uintptr_t fcn) { iFEppL_t fn = (iFEppL_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void iFEppp_32(x64emu_t *emu, uintptr_t fcn) { iFEppp_t fn = (iFEppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFiiII_32(x64emu_t *emu, uintptr_t fcn) { iFiiII_t fn = (iFiiII_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 20)); } +void iFiuui_32(x64emu_t *emu, uintptr_t fcn) { iFiuui_t fn = (iFiuui_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void LFpLLh_32(x64emu_t *emu, uintptr_t fcn) { LFpLLh_t fn = (LFpLLh_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), to_ulong(from_ptri(ulong_t, R_ESP + 12)), from_hash(from_ptri(ptr_t, R_ESP + 16)))); } +void pFEppi_32(x64emu_t *emu, uintptr_t fcn) { pFEppi_t fn = (pFEppi_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void pFEppp_32(x64emu_t *emu, uintptr_t fcn) { pFEppp_t fn = (pFEppp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pFppuL_32(x64emu_t *emu, uintptr_t fcn) { pFppuL_t fn = (pFppuL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), to_ulong(from_ptri(ulong_t, R_ESP + 16)))); } +void pFppLL_32(x64emu_t *emu, uintptr_t fcn) { pFppLL_t fn = (pFppLL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12)), to_ulong(from_ptri(ulong_t, R_ESP + 16)))); } +void iFEppiV_32(x64emu_t *emu, uintptr_t fcn) { iFEppiV_t fn = (iFEppiV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptrv(R_ESP + 16)); } +void iFEpppi_32(x64emu_t *emu, uintptr_t fcn) { iFEpppi_t fn = (iFEpppi_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFiLLLL_32(x64emu_t *emu, uintptr_t fcn) { iFiLLLL_t fn = (iFiLLLL_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), to_ulong(from_ptri(ulong_t, R_ESP + 12)), to_ulong(from_ptri(ulong_t, R_ESP + 16)), to_ulong(from_ptri(ulong_t, R_ESP + 20))); } +void iFEBh_ppp_32(x64emu_t *emu, uintptr_t fcn) { iFEBh_ppp_t fn = (iFEBh_ppp_t)fcn; struct_h_t arg_4; R_EAX = fn(emu, *(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_h(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFEpippppp_32(x64emu_t *emu, uintptr_t fcn) { iFEpippppp_t fn = (iFEpippppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } + +#if defined(ANDROID) +void pFv_32(x64emu_t *emu, uintptr_t fcn) { pFv_t fn = (pFv_t)fcn; R_EAX = to_ptrv(fn()); } +void vFEpppp_32(x64emu_t *emu, uintptr_t fcn) { vFEpppp_t fn = (vFEpppp_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +#endif + +#if defined(HAVE_LD80BITS) +void DFD_32(x64emu_t *emu, uintptr_t fcn) { DFD_t fn = (DFD_t)fcn; long double ld = fn(LD2localLD(from_ptrv(R_ESP + 4))); fpu_do_push(emu); ST0val = ld; } +void DFDD_32(x64emu_t *emu, uintptr_t fcn) { DFDD_t fn = (DFDD_t)fcn; long double ld = fn(LD2localLD(from_ptrv(R_ESP + 4)), LD2localLD(from_ptrv(R_ESP + 16))); fpu_do_push(emu); ST0val = ld; } +void DFDp_32(x64emu_t *emu, uintptr_t fcn) { DFDp_t fn = (DFDp_t)fcn; long double ld = fn(LD2localLD(from_ptrv(R_ESP + 4)), from_ptriv(R_ESP + 16)); fpu_do_push(emu); ST0val = ld; } +#endif + +#if !defined(HAVE_LD80BITS) +void KFK_32(x64emu_t *emu, uintptr_t fcn) { KFK_t fn = (KFK_t)fcn; double db = fn(FromLD(from_ptrv(R_ESP + 4))); fpu_do_push(emu); ST0val = db; } +void KFKK_32(x64emu_t *emu, uintptr_t fcn) { KFKK_t fn = (KFKK_t)fcn; double db = fn(FromLD(from_ptrv(R_ESP + 4)), FromLD(from_ptrv(R_ESP + 16))); fpu_do_push(emu); ST0val = db; } +void KFKp_32(x64emu_t *emu, uintptr_t fcn) { KFKp_t fn = (KFKp_t)fcn; double db = fn(FromLD(from_ptrv(R_ESP + 4)), from_ptriv(R_ESP + 16)); fpu_do_push(emu); ST0val = db; } +#endif + +void iFEvpV_32(x64emu_t *emu, uintptr_t fcn) { iFEpV_t fn = (iFEpV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); } +void UFsvvs_32(x64emu_t *emu, uintptr_t fcn) { UFss_t fn = (UFss_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptrv(R_ESP + 4), from_ptrv(R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; } + +int isRetX87Wrapper32(wrapper_t fun) { + if (fun == &fFf_32) return 1; + if (fun == &dFv_32) return 1; + if (fun == &dFd_32) return 1; + if (fun == &fFif_32) return 1; + if (fun == &fFfi_32) return 1; + if (fun == &fFff_32) return 1; + if (fun == &fFfD_32) return 1; + if (fun == &fFfp_32) return 1; + if (fun == &dFid_32) return 1; + if (fun == &dFdi_32) return 1; + if (fun == &dFdd_32) return 1; + if (fun == &dFdD_32) return 1; + if (fun == &dFdp_32) return 1; + if (fun == &fFfff_32) return 1; + if (fun == &fFffp_32) return 1; + if (fun == &dFddd_32) return 1; + if (fun == &dFddp_32) return 1; +#if defined(HAVE_LD80BITS) + if (fun == &DFD_32) return 1; + if (fun == &DFDD_32) return 1; + if (fun == &DFDp_32) return 1; +#endif +#if !defined(HAVE_LD80BITS) + if (fun == &KFK_32) return 1; + if (fun == &KFKK_32) return 1; + if (fun == &KFKp_32) return 1; +#endif + return 0; +} diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h new file mode 100644 index 00000000..3496a5ea --- /dev/null +++ b/src/wrapped32/generated/wrapper32.h @@ -0,0 +1,200 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __WRAPPER32_H_ +#define __WRAPPER32_H_ +#include +#include + +typedef struct x64emu_s x64emu_t; + +// the generic wrapper pointer functions +typedef void (*wrapper_t)(x64emu_t* emu, uintptr_t fnc); + +// list of defined wrappers +// E = current x64emu struct +// v = void +// C = unsigned byte c = char +// W = unsigned short w = short +// u = uint32, i = int32 +// U = uint64, I = int64 +// L = unsigned long, l = signed long (long is an int with the size of a pointer) +// p = pointer +// h = hash (32<->64bits) +// H = hash (32<->64bits) that will be deleted from hashmaps +// a = locale +// A = locale that will be deleted from hashmaps +// f = float, d = double, D = long double, K = fake long double +// V = vaargs, s = address on the stack (doesn't move forward the pointer) +// O = libc O_ flags bitfield +// o = stdout +// S = _IO_2_1_stdXXX_ pointer (or FILE*) +// 2 = struct of 2 uint +// N = ... automatically sending 1 arg +// M = ... automatically sending 2 args +// P = Vulkan struct pointer +// s..._ = pointer to read-only structure +// B..._ = pointer to write-only structure +// b..._ = pointer to read-write structure + +void vFv_32(x64emu_t *emu, uintptr_t fnc); +void vFi_32(x64emu_t *emu, uintptr_t fnc); +void vFu_32(x64emu_t *emu, uintptr_t fnc); +void vFp_32(x64emu_t *emu, uintptr_t fnc); +void vFA_32(x64emu_t *emu, uintptr_t fnc); +void iFv_32(x64emu_t *emu, uintptr_t fnc); +void iFi_32(x64emu_t *emu, uintptr_t fnc); +void iFI_32(x64emu_t *emu, uintptr_t fnc); +void iFu_32(x64emu_t *emu, uintptr_t fnc); +void iFf_32(x64emu_t *emu, uintptr_t fnc); +void iFd_32(x64emu_t *emu, uintptr_t fnc); +void iFL_32(x64emu_t *emu, uintptr_t fnc); +void iFp_32(x64emu_t *emu, uintptr_t fnc); +void iFh_32(x64emu_t *emu, uintptr_t fnc); +void iFH_32(x64emu_t *emu, uintptr_t fnc); +void IFf_32(x64emu_t *emu, uintptr_t fnc); +void IFd_32(x64emu_t *emu, uintptr_t fnc); +void uFv_32(x64emu_t *emu, uintptr_t fnc); +void uFu_32(x64emu_t *emu, uintptr_t fnc); +void uFU_32(x64emu_t *emu, uintptr_t fnc); +void UFs_32(x64emu_t *emu, uintptr_t fnc); +void fFf_32(x64emu_t *emu, uintptr_t fnc); +void dFv_32(x64emu_t *emu, uintptr_t fnc); +void dFd_32(x64emu_t *emu, uintptr_t fnc); +void lFi_32(x64emu_t *emu, uintptr_t fnc); +void lFp_32(x64emu_t *emu, uintptr_t fnc); +void LFv_32(x64emu_t *emu, uintptr_t fnc); +void LFL_32(x64emu_t *emu, uintptr_t fnc); +void pFu_32(x64emu_t *emu, uintptr_t fnc); +void pFL_32(x64emu_t *emu, uintptr_t fnc); +void pFp_32(x64emu_t *emu, uintptr_t fnc); +void hFv_32(x64emu_t *emu, uintptr_t fnc); +void aFa_32(x64emu_t *emu, uintptr_t fnc); +void vFEv_32(x64emu_t *emu, uintptr_t fnc); +void vFEp_32(x64emu_t *emu, uintptr_t fnc); +void iFEv_32(x64emu_t *emu, uintptr_t fnc); +void iFEi_32(x64emu_t *emu, uintptr_t fnc); +void iFEL_32(x64emu_t *emu, uintptr_t fnc); +void iFEp_32(x64emu_t *emu, uintptr_t fnc); +void iFEh_32(x64emu_t *emu, uintptr_t fnc); +void iFEO_32(x64emu_t *emu, uintptr_t fnc); +void iFii_32(x64emu_t *emu, uintptr_t fnc); +void iFiI_32(x64emu_t *emu, uintptr_t fnc); +void iFiu_32(x64emu_t *emu, uintptr_t fnc); +void iFip_32(x64emu_t *emu, uintptr_t fnc); +void iFuu_32(x64emu_t *emu, uintptr_t fnc); +void iFup_32(x64emu_t *emu, uintptr_t fnc); +void iFli_32(x64emu_t *emu, uintptr_t fnc); +void iFpi_32(x64emu_t *emu, uintptr_t fnc); +void iFpp_32(x64emu_t *emu, uintptr_t fnc); +void iFhp_32(x64emu_t *emu, uintptr_t fnc); +void iFhh_32(x64emu_t *emu, uintptr_t fnc); +void IFII_32(x64emu_t *emu, uintptr_t fnc); +void uFEu_32(x64emu_t *emu, uintptr_t fnc); +void uFEV_32(x64emu_t *emu, uintptr_t fnc); +void uFpa_32(x64emu_t *emu, uintptr_t fnc); +void UFii_32(x64emu_t *emu, uintptr_t fnc); +void UFUU_32(x64emu_t *emu, uintptr_t fnc); +void UFss_32(x64emu_t *emu, uintptr_t fnc); +void fFif_32(x64emu_t *emu, uintptr_t fnc); +void fFfi_32(x64emu_t *emu, uintptr_t fnc); +void fFff_32(x64emu_t *emu, uintptr_t fnc); +void fFfD_32(x64emu_t *emu, uintptr_t fnc); +void fFfp_32(x64emu_t *emu, uintptr_t fnc); +void dFid_32(x64emu_t *emu, uintptr_t fnc); +void dFdi_32(x64emu_t *emu, uintptr_t fnc); +void dFdd_32(x64emu_t *emu, uintptr_t fnc); +void dFdD_32(x64emu_t *emu, uintptr_t fnc); +void dFdp_32(x64emu_t *emu, uintptr_t fnc); +void LFpp_32(x64emu_t *emu, uintptr_t fnc); +void pFEv_32(x64emu_t *emu, uintptr_t fnc); +void pFEp_32(x64emu_t *emu, uintptr_t fnc); +void pFLL_32(x64emu_t *emu, uintptr_t fnc); +void aFia_32(x64emu_t *emu, uintptr_t fnc); +void iFHBp__32(x64emu_t *emu, uintptr_t fnc); +void vFEip_32(x64emu_t *emu, uintptr_t fnc); +void vFEpi_32(x64emu_t *emu, uintptr_t fnc); +void vFEpu_32(x64emu_t *emu, uintptr_t fnc); +void vFfpp_32(x64emu_t *emu, uintptr_t fnc); +void vFdpp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpi_32(x64emu_t *emu, uintptr_t fnc); +void iFEpL_32(x64emu_t *emu, uintptr_t fnc); +void iFEpp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpV_32(x64emu_t *emu, uintptr_t fnc); +void iFiii_32(x64emu_t *emu, uintptr_t fnc); +void iFiiI_32(x64emu_t *emu, uintptr_t fnc); +void iFiiu_32(x64emu_t *emu, uintptr_t fnc); +void iFiiO_32(x64emu_t *emu, uintptr_t fnc); +void iFiII_32(x64emu_t *emu, uintptr_t fnc); +void iFiuu_32(x64emu_t *emu, uintptr_t fnc); +void iFiLN_32(x64emu_t *emu, uintptr_t fnc); +void iFipp_32(x64emu_t *emu, uintptr_t fnc); +void iFuii_32(x64emu_t *emu, uintptr_t fnc); +void iFuip_32(x64emu_t *emu, uintptr_t fnc); +void iFuui_32(x64emu_t *emu, uintptr_t fnc); +void iFuuu_32(x64emu_t *emu, uintptr_t fnc); +void iFuLp_32(x64emu_t *emu, uintptr_t fnc); +void iFupp_32(x64emu_t *emu, uintptr_t fnc); +void iFpiu_32(x64emu_t *emu, uintptr_t fnc); +void iFpip_32(x64emu_t *emu, uintptr_t fnc); +void iFpuu_32(x64emu_t *emu, uintptr_t fnc); +void iFppu_32(x64emu_t *emu, uintptr_t fnc); +void iFppL_32(x64emu_t *emu, uintptr_t fnc); +void iFppp_32(x64emu_t *emu, uintptr_t fnc); +void iFpOu_32(x64emu_t *emu, uintptr_t fnc); +void IFiIi_32(x64emu_t *emu, uintptr_t fnc); +void fFfff_32(x64emu_t *emu, uintptr_t fnc); +void fFffp_32(x64emu_t *emu, uintptr_t fnc); +void dFddd_32(x64emu_t *emu, uintptr_t fnc); +void dFddp_32(x64emu_t *emu, uintptr_t fnc); +void pFEip_32(x64emu_t *emu, uintptr_t fnc); +void pFEpi_32(x64emu_t *emu, uintptr_t fnc); +void pFEpp_32(x64emu_t *emu, uintptr_t fnc); +void pFppL_32(x64emu_t *emu, uintptr_t fnc); +void pFpOM_32(x64emu_t *emu, uintptr_t fnc); +void hFEpp_32(x64emu_t *emu, uintptr_t fnc); +void aFipa_32(x64emu_t *emu, uintptr_t fnc); +void lFpBp_i_32(x64emu_t *emu, uintptr_t fnc); +void vFEipV_32(x64emu_t *emu, uintptr_t fnc); +void vFEppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEiiN_32(x64emu_t *emu, uintptr_t fnc); +void iFEipp_32(x64emu_t *emu, uintptr_t fnc); +void iFELup_32(x64emu_t *emu, uintptr_t fnc); +void iFEpip_32(x64emu_t *emu, uintptr_t fnc); +void iFEpup_32(x64emu_t *emu, uintptr_t fnc); +void iFEppu_32(x64emu_t *emu, uintptr_t fnc); +void iFEppL_32(x64emu_t *emu, uintptr_t fnc); +void iFEppp_32(x64emu_t *emu, uintptr_t fnc); +void iFiiII_32(x64emu_t *emu, uintptr_t fnc); +void iFiuui_32(x64emu_t *emu, uintptr_t fnc); +void LFpLLh_32(x64emu_t *emu, uintptr_t fnc); +void pFEppi_32(x64emu_t *emu, uintptr_t fnc); +void pFEppp_32(x64emu_t *emu, uintptr_t fnc); +void pFppuL_32(x64emu_t *emu, uintptr_t fnc); +void pFppLL_32(x64emu_t *emu, uintptr_t fnc); +void iFEppiV_32(x64emu_t *emu, uintptr_t fnc); +void iFEpppi_32(x64emu_t *emu, uintptr_t fnc); +void iFiLLLL_32(x64emu_t *emu, uintptr_t fnc); +void iFEBh_ppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpippppp_32(x64emu_t *emu, uintptr_t fnc); + +#if defined(ANDROID) +void pFv_32(x64emu_t *emu, uintptr_t fnc); +void vFEpppp_32(x64emu_t *emu, uintptr_t fnc); +#endif + +#if defined(HAVE_LD80BITS) +void DFD_32(x64emu_t *emu, uintptr_t fnc); +void DFDD_32(x64emu_t *emu, uintptr_t fnc); +void DFDp_32(x64emu_t *emu, uintptr_t fnc); +#endif + +#if !defined(HAVE_LD80BITS) +void KFK_32(x64emu_t *emu, uintptr_t fnc); +void KFKK_32(x64emu_t *emu, uintptr_t fnc); +void KFKp_32(x64emu_t *emu, uintptr_t fnc); +#endif + +void iFEvpV_32(x64emu_t *emu, uintptr_t fnc); +void UFsvvs_32(x64emu_t *emu, uintptr_t fnc); +#endif // __WRAPPER32_H_ diff --git a/src/wrapped32/wrappedcrashhandler.c b/src/wrapped32/wrappedcrashhandler.c new file mode 100755 index 00000000..ed9b3b1e --- /dev/null +++ b/src/wrapped32/wrappedcrashhandler.c @@ -0,0 +1,32 @@ +#define _GNU_SOURCE +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" + +static const char* crashhandlerName = "crashhandler.so"; +#define LIBNAME crashhandler + +#define PRE_INIT \ + if(!box64_steam) \ + return -1; \ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);\ + else + + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedcrashhandler_private.h b/src/wrapped32/wrappedcrashhandler_private.h new file mode 100755 index 00000000..52ed57d6 --- /dev/null +++ b/src/wrapped32/wrappedcrashhandler_private.h @@ -0,0 +1,49 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh.... +#endif + +//GO(Breakpad_SetSteamID, +//DATAB(__bss_start, +//GO(CreateInterface, +//DATAB(_edata, +//DATAB(_end, +//GO(_fini, +//GO(_init, +//GO(SteamRealPath, +//GO(__wrap_access, +//GO(__wrap_chmod, +//GO(__wrap_chown, +//GO(__wrap_dlmopen, +//GO(__wrap_dlopen, +//GO(__wrap_fopen, +//GO(__wrap_fopen64, +//GO(__wrap_freopen, +//GO(__wrap_lchown, +//GO(__wrap_link, +//GO(__wrap_lstat, +//GO(__wrap_lstat64, +//GO(__wrap___lxstat, +//GO(__wrap___lxstat64, +//GO(__wrap_mkdir, +//GO(__wrap_mkfifo, +//GO(__wrap_mknod, +//GO(__wrap_mount, +//GO(__wrap_open, +//GO(__wrap_open64, +//GO(__wrap_opendir, +//GO(__wrap_rename, +//GO(__wrap_rmdir, +//GO(__wrap_scandir, +//GO(__wrap_scandir64, +//GO(__wrap_stat, +//GO(__wrap_stat64, +//GO(__wrap_statfs, +//GO(__wrap_statfs64, +//GO(__wrap_statvfs, +//GO(__wrap_statvfs64, +//GO(__wrap_symlink, +//GO(__wrap_unlink, +//GO(__wrap_utime, +//GO(__wrap_utimes, +//GO(__wrap___xstat, +//GO(__wrap___xstat64, diff --git a/src/wrapped32/wrappedldlinux.c b/src/wrapped32/wrappedldlinux.c new file mode 100755 index 00000000..f0c8bf89 --- /dev/null +++ b/src/wrapped32/wrappedldlinux.c @@ -0,0 +1,58 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "elfloader.h" +#include "box32context.h" + +typedef struct my32_tls_s { + int i; + uint32_t o; +} my32_tls_t; + +EXPORT void* my32___tls_get_addr(x64emu_t* emu, void* p) +{ + my32_tls_t *t = (my32_tls_t*)p; + return GetDTatOffset(emu->context, t->i, t->o); +} + +EXPORT void* my32____tls_get_addr(x64emu_t* emu) +{ + // the GNU version (with 3 '_') use register for the parameter! + my32_tls_t *t = (my32_tls_t*)from_ptrv(R_EAX); + return GetDTatOffset(emu->context, t->i, t->o); +} + +EXPORT ptr_t my32___libc_stack_end; +static void stSetup32(box64context_t* context) +{ + my32___libc_stack_end = to_ptrv(context->stack); // is this the end, or should I add stasz? +} + +// don't try to load the actual ld-linux (because name is variable), just use box64 itself, as it's linked to ld-linux +static const char* ldlinuxName = "ld-linux.so.3"; +#define LIBNAME ldlinux + +// fake (ignored) _r_data structure +EXPORT void* my32__r_debug[5]; + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#define CUSTOM_INIT \ + stSetup32(box64); \ + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedldlinux_private.h b/src/wrapped32/wrappedldlinux_private.h new file mode 100755 index 00000000..cfff7731 --- /dev/null +++ b/src/wrapped32/wrappedldlinux_private.h @@ -0,0 +1,25 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +// _dl_allocate_tls +// _dl_allocate_tls_init +// _dl_argv //type B +// _dl_cache_libcmp +// _dl_deallocate_tls +// _dl_debug_state +// _dl_get_tls_static_info +// _dl_make_stack_executable +// _dl_mcount +// _dl_rtld_di_serinfo +// _dl_tls_setup +DATA(__libc_enable_secure, 4) +DATA(__libc_stack_end, 4) +DATA(__pointer_chk_guard, 4) +DATAM(_r_debug, 20) //type B +DATA(_rtld_global, 4) +DATA(_rtld_global_ro, 4) +DATA(__stack_chk_guard, 4) +// defini dans glibc/sysdeps/i386/dl-tls.h +GOM(___tls_get_addr, pFEv) //the parameter tls_index is in a register (EAX?) +GOM(__tls_get_addr, pFEp) //same, but the parameter is in the stack diff --git a/src/wrapped32/wrappedlib_init32.h b/src/wrapped32/wrappedlib_init32.h new file mode 100644 index 00000000..65736fa2 --- /dev/null +++ b/src/wrapped32/wrappedlib_init32.h @@ -0,0 +1,325 @@ +#ifndef LIBNAME +#error Meh +#endif + +#include "debug.h" +#include "librarian/library_inner.h" + +#define FUNC3(M,N) wrapped##M##N +#define FUNC2(M,N) FUNC3(M,N) +#define FUNC(N) FUNC2(LIBNAME,N) +#define QUOTE(M) #M +#define PRIVATE2(P) QUOTE(wrapped##P##_private.h) +#define PRIVATE(P) PRIVATE2(P) +#define MAPNAME3(N,M) N##M +#define MAPNAME2(N,M) MAPNAME3(N,M) +#define MAPNAME(N) MAPNAME2(LIBNAME,N) + +// prepare the maps +#define _DOIT(P,Q) QUOTE(generated/wrapped##P##Q.h) +#define DOIT(P,Q) _DOIT(P,Q) +#include DOIT(LIBNAME,defs32) + +// regular symbol mapped to itself +#define GO(N, W) +// regular symbol mapped to itself, but weak +#define GOW(N, W) +// symbol mapped to my32_symbol +#define GOM(N, W) +// symbol mapped to my32_symbol, but weak +#define GOWM(N, W) +// regular symbol mapped to itself, that returns a structure +#define GOS(N, W) +// symbol mapped to another one +#define GO2(N, W, O) +// weak symbol mapped to another one +#define GOW2(N, W, O) +// data +#define DATA(N, S) +// data, Weak (type V) +#define DATAV(N, S) +// data, Uninitialized (type B) +#define DATAB(N, S) +// data, "my32_" type +#define DATAM(N, S) + +// #define the 4 maps first +#undef GO +#undef GOW +#ifdef STATICBUILD +#define GO(N, W) {#N, W##_32, 0, &N}, +#define GOW(N, W) {#N, W##_32, 1, &N}, +#else +#define GO(N, W) {#N, W##_32, 0}, +#define GOW(N, W) {#N, W##_32, 1}, +#endif +static const map_onesymbol_t MAPNAME(symbolmap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GO +#undef GOW +#undef GOM +#undef GOWM +#define GO(N, W) +#define GOW(N, W) +#ifdef STATICBUILD +#define GOM(N, W) {#N, W##_32, 0, &my32_##N}, +#define GOWM(N, W) {#N, W##_32, 1, &my32_##N}, +#else +#define GOM(N, W) {#N, W##_32, 0}, +#define GOWM(N, W) {#N, W##_32, 1}, +#endif +static const map_onesymbol_t MAPNAME(mysymbolmap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GOM +#undef GOWM +#undef GOS +#define GOM(N, W) +#define GOWM(N, W) +#ifdef STATICBUILD +#define GOS(N, W) {#N, W##_32, 0, &my32_##N}, +#else +#define GOS(N, W) {#N, W##_32, 0}, +#endif +static const map_onesymbol_t MAPNAME(stsymbolmap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GOS +#define GOS(N, W) +#undef GO2 +#undef GOW2 +#ifdef STATICBUILD +#define GO2(N, W, O) {#N, W##_32, 0, #O, &O}, +#define GOW2(N, W, O) {#N, W##_32, 1, #O, &O}, +#else +#define GO2(N, W, O) {#N, W##_32, 0, #O}, +#define GOW2(N, W, O) {#N, W##_32, 1, #O}, +#endif +static const map_onesymbol2_t MAPNAME(symbol2map)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GO2 +#define GO2(N, W, O) +#undef GOW2 +#define GOW2(N, W, O) +#undef DATA +#undef DATAV +#undef DATAB +#ifdef STATICBUILD +#define DATA(N, S) {#N, S, 0, (void*)&N}, +#define DATAV(N, S) {#N, S, 1, (void*)&N}, +#define DATAB(N, S) {#N, S, 0, (void*)&N}, +#else +#define DATA(N, S) {#N, S, 0}, +#define DATAV(N, S) {#N, S, 1}, +#define DATAB(N, S) {#N, S, 0}, +#endif +static const map_onedata_t MAPNAME(datamap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef DATA +#undef DATAV +#undef DATAB +#define DATA(N, S) +#define DATAV(N, S) +#define DATAB(N, S) +#undef DATAM +#ifdef STATICBUILD +#define DATAM(N, S) {#N, S, 0, &my32_##N}, +#else +#define DATAM(N, S) {#N, S, 0}, +#endif +static const map_onedata_t MAPNAME(mydatamap)[] = { + #include PRIVATE(LIBNAME) +}; + +#undef GO +#undef GOW +#undef GOM +#undef GOWM +#undef GO2 +#undef GOS +#undef DATA +#undef DATAV +#undef DATAB +#undef DATAM + +#include DOIT(LIBNAME,undefs32) +#undef DOIT +#undef _DOIT + +#if !defined(ALTNAME) && defined(ALTNAME2) +#error Please define ALTNAME before defining ALTNAME2 +#endif + +#define COUNT_NARGS(...) COUNT_NARGS_AUX(__VA_ARGS__, 5, 4, 3, 2, 1, 0) +#define COUNT_NARGS_AUX(_1, _2, _3, _4, _5, n, ...) COUNT_NARGS_AUX##n(This should not appear, too many libraries) +#define COUNT_NARGS_AUX1(v1, v2) 1 +#define COUNT_NARGS_AUX2(v1, v2) 2 +#define COUNT_NARGS_AUX3(v1, v2) 3 +#define COUNT_NARGS_AUX4(v1, v2) 4 +#define COUNT_NARGS_AUX5(v1, v2) 5 + +int FUNC(_init32)(library_t* lib, box64context_t* box64) +{ + (void)box64; + + // Init first + free(lib->path); lib->path=NULL; +#ifdef PRE_INIT + PRE_INIT +#endif + { +#ifndef STATICBUILD + lib->w.lib = dlopen(MAPNAME(Name), RTLD_LAZY | RTLD_GLOBAL); + if(!lib->w.lib) { +#ifdef ALTNAME + lib->w.lib = dlopen(ALTNAME, RTLD_LAZY | RTLD_GLOBAL); + if(!lib->w.lib) { +#ifdef ALTNAME2 + lib->w.lib = dlopen(ALTNAME2, RTLD_LAZY | RTLD_GLOBAL); + if(!lib->w.lib) +#endif +#endif + return -1; +#ifdef ALTNAME +#ifdef ALTNAME2 + else lib->path = box_strdup(ALTNAME2); +#endif + } else lib->path = box_strdup(ALTNAME); +#endif + } else lib->path = box_strdup(MAPNAME(Name)); +#else + lib->path = box_strdup(MAPNAME(Name)); +#endif + } + WrappedLib_CommonInit(lib); + + khint_t k; + int ret; + int cnt; + + // populates maps... +#ifdef STATICBUILD +#define DOIT(mapname) \ + cnt = sizeof(MAPNAME(mapname))/sizeof(map_onesymbol_t); \ + for (int i = 0; i < cnt; ++i) { \ + if (MAPNAME(mapname)[i].weak) { \ + k = kh_put(symbolmap, lib->w.w##mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.w##mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.w##mapname, k).resolved = 0; \ + kh_value(lib->w.w##mapname, k).addr = (uintptr_t)MAPNAME(mapname)[i].addr; \ + } else { \ + k = kh_put(symbolmap, lib->w.mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.mapname, k).resolved = 0; \ + kh_value(lib->w.mapname, k).addr = (uintptr_t)MAPNAME(mapname)[i].addr; \ + } \ + if (strchr(MAPNAME(mapname)[i].name, '@')) \ + AddDictionnary(box64->versym, MAPNAME(mapname)[i].name); \ + } +#else +#define DOIT(mapname) \ + cnt = sizeof(MAPNAME(mapname))/sizeof(map_onesymbol_t); \ + for (int i = 0; i < cnt; ++i) { \ + if (MAPNAME(mapname)[i].weak) { \ + k = kh_put(symbolmap, lib->w.w##mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.w##mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.w##mapname, k).resolved = 0; \ + } else { \ + k = kh_put(symbolmap, lib->w.mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.mapname, k).resolved = 0; \ + } \ + if (strchr(MAPNAME(mapname)[i].name, '@')) \ + AddDictionnary(box64->versym, MAPNAME(mapname)[i].name); \ + } +#endif + DOIT(symbolmap) + DOIT(mysymbolmap) +#undef DOIT + cnt = sizeof(MAPNAME(stsymbolmap))/sizeof(map_onesymbol_t); + for (int i=0; iw.stsymbolmap, MAPNAME(stsymbolmap)[i].name, &ret); + kh_value(lib->w.stsymbolmap, k).w = MAPNAME(stsymbolmap)[i].w; + #ifdef STATICBUILD + kh_value(lib->w.stsymbolmap, k).resolved = 1; + kh_value(lib->w.stsymbolmap, k).addr = (uintptr_t)MAPNAME(stsymbolmap)[i].addr; + #else + kh_value(lib->w.stsymbolmap, k).resolved = 0; + #endif + if(strchr(MAPNAME(stsymbolmap)[i].name, '@')) + AddDictionnary(box64->versym, MAPNAME(stsymbolmap)[i].name); + } + cnt = sizeof(MAPNAME(symbol2map))/sizeof(map_onesymbol2_t); + for (int i=0; iw.symbol2map, MAPNAME(symbol2map)[i].name, &ret); + kh_value(lib->w.symbol2map, k).name = MAPNAME(symbol2map)[i].name2; + kh_value(lib->w.symbol2map, k).w = MAPNAME(symbol2map)[i].w; + kh_value(lib->w.symbol2map, k).weak = MAPNAME(symbol2map)[i].weak; + #ifdef STATICBUILD + kh_value(lib->w.symbol2map, k).resolved = 1; + kh_value(lib->w.symbol2map, k).addr = (uintptr_t)MAPNAME(symbol2map)[i].addr; + #else + kh_value(lib->w.symbol2map, k).resolved = 0; + #endif + if(strchr(MAPNAME(symbol2map)[i].name, '@')) + AddDictionnary(box64->versym, MAPNAME(symbol2map)[i].name); + } + cnt = sizeof(MAPNAME(datamap))/sizeof(map_onedata_t); + for (int i=0; iw.wdatamap, MAPNAME(datamap)[i].name, &ret); + #ifdef STATICBUILD + kh_value(lib->w.wdatamap, k).size = MAPNAME(datamap)[i].sz; + kh_value(lib->w.wdatamap, k).addr = (uintptr_t)MAPNAME(datamap)[i].addr; + #else + kh_value(lib->w.wdatamap, k) = MAPNAME(datamap)[i].sz; + #endif + } else { + k = kh_put(datamap, lib->w.datamap, MAPNAME(datamap)[i].name, &ret); + #ifdef STATICBUILD + kh_value(lib->w.datamap, k).size = MAPNAME(datamap)[i].sz; + kh_value(lib->w.datamap, k).addr = (uintptr_t)MAPNAME(datamap)[i].addr; + #else + kh_value(lib->w.datamap, k) = MAPNAME(datamap)[i].sz; + #endif + } + } + cnt = sizeof(MAPNAME(mydatamap))/sizeof(map_onedata_t); + for (int i=0; iw.mydatamap, MAPNAME(mydatamap)[i].name, &ret); + #ifdef STATICBUILD + kh_value(lib->w.mydatamap, k).size = MAPNAME(mydatamap)[i].sz; + kh_value(lib->w.mydatamap, k).addr = (uintptr_t)MAPNAME(mydatamap)[i].addr; + #else + kh_value(lib->w.mydatamap, k) = MAPNAME(mydatamap)[i].sz; + #endif + } +#ifdef ALTMY + SETALT(ALTMY); +#endif +#ifdef HAS_MY + getMy(lib); +#endif +#ifdef CUSTOM_INIT + CUSTOM_INIT +#endif +#ifdef NEEDED_LIBS + setNeededLibs(lib, COUNT_NARGS(NEEDED_LIBS), NEEDED_LIBS); +#endif + + return 0; +} + +void FUNC(_fini32)(library_t* lib) +{ +#ifdef HAS_MY + freeMy(); +#endif +#ifdef CUSTOM_FINI + CUSTOM_FINI +#endif + WrappedLib_FinishFini(lib); +} diff --git a/src/wrapped32/wrappedlibc.c b/src/wrapped32/wrappedlibc.c new file mode 100755 index 00000000..952d7f7f --- /dev/null +++ b/src/wrapped32/wrappedlibc.c @@ -0,0 +1,2867 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "box64stack.h" +#include "x64emu.h" +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "callback.h" +#include "librarian.h" +#include "librarian/library_private.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "myalign32.h" +#include "signals.h" +#include "fileutils.h" +#include "auxval.h" +#include "elfloader.h" +#include "bridge.h" +#include "globalsymbols.h" +#include "box32.h" + +#ifdef PANDORA +#ifndef __NR_preadv +#define __NR_preadv (__NR_SYSCALL_BASE+361) +#endif +#ifndef __NR_pwritev +#define __NR_pwritev (__NR_SYSCALL_BASE+362) +#endif +#ifndef __NR_accept4 +#define __NR_accept4 (__NR_SYSCALL_BASE+366) +#endif +#ifndef __NR_sendmmsg +#define __NR_sendmmsg (__NR_SYSCALL_BASE+374) +#endif +#ifndef __NR_prlimit64 +#define __NR_prlimit64 (__NR_SYSCALL_BASE+369) +#endif +#ifndef __NR_recvmmsg +#define __NR_recvmmsg (__NR_SYSCALL_BASE+365) +#endif +#elif defined(__arm__) +#ifndef __NR_accept4 +#define __NR_accept4 (__NR_SYSCALL_BASE+366) +#endif +#endif + +// need to undef all read / read64 stuffs! +#undef pread +#undef pwrite +#undef lseek +#undef fseeko +#undef ftello +#undef fseekpos +#undef fsetpos +#undef fgetpos +#undef fopen +#undef statfs +#undef fstatfs +#undef freopen +#undef truncate +#undef ftruncate +#undef tmpfile +#undef lockf +#undef fscanf +#undef scanf +#undef sscanf +#undef vfscanf +#undef vscanf +#undef vsscanf +#undef getc +#undef putc +#undef mkstemp +#undef mkstemps +#undef mkostemp +#undef mkostemps +#undef open +#undef openat +#undef read +#undef write +#undef creat +#undef scandir +#undef mmap +#undef fcntl +#undef stat +#undef __xstat +#undef xstat +#undef scandir +#undef ftw +#undef nftw +#undef glob + +#define LIBNAME libc + +static const char* libcName = +#ifdef ANDROID + "libc.so" +#else + "libc.so.6" +#endif + ; + +static library_t* my_lib = NULL; + +extern int fix_64bit_inodes; +#if 0 +typedef int (*iFL_t)(unsigned long); +typedef void (*vFpp_t)(void*, void*); +typedef void (*vFpp_t)(void*, void*); +typedef void (*vFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef int32_t (*iFpL_t)(void*, size_t); +typedef int32_t (*iFiip_t)(int32_t, int32_t, void*); +typedef int32_t (*iFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFppi_t)(void*, void*, int32_t); +typedef int32_t (*iFpup_t)(void*, uint32_t, void*); +typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t); +typedef int32_t (*iFiiII_t)(int, int, int64_t, int64_t); +typedef int32_t (*iFiiiV_t)(int, int, int, ...); +typedef int32_t (*iFippi_t)(int32_t, void*, void*, int32_t); +typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); +typedef int32_t (*iFpipp_t)(void*, int32_t, void*, void*); +typedef int32_t (*iFpLpp_t)(void*, size_t, void*, void*); +typedef int32_t (*iFppii_t)(void*, void*, int32_t, int32_t); +typedef int32_t (*iFipuu_t)(int32_t, void*, uint32_t, uint32_t); +typedef int32_t (*iFipiI_t)(int32_t, void*, int32_t, int64_t); +typedef int32_t (*iFipuup_t)(int32_t, void*, uint32_t, uint32_t, void*); +typedef int32_t (*iFiiV_t)(int32_t, int32_t, ...); +typedef void* (*pFp_t)(void*); +typedef void* (*pFu_t)(uint32_t); +#define SUPER() \ + GO(_ITM_addUserCommitAction, iFpup_t) \ + GO(_IO_file_stat, iFpp_t) + +#endif + +//#include "wrappercallback.h" + +#if 0 +// utility functions +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) \ +GO(5) \ +GO(6) \ +GO(7) \ +GO(8) \ +GO(9) \ +GO(10) \ +GO(11) \ +GO(12) \ +GO(13) \ +GO(14) \ +GO(15) + +// compare +#define GO(A) \ +static uintptr_t my32_compare_fct_##A = 0; \ +static int my32_compare_##A(void* a, void* b) \ +{ \ + return (int)RunFunction(my_context, my32_compare_fct_##A, 2, a, b);\ +} +SUPER() +#undef GO +static void* findcompareFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_compare_fct_##A == (uintptr_t)fct) return my32_compare_##A; + SUPER() + #undef GO + #define GO(A) if(my32_compare_fct_##A == 0) {my32_compare_fct_##A = (uintptr_t)fct; return my32_compare_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc compare callback\n"); + return NULL; +} + +// ftw +#define GO(A) \ +static uintptr_t my32_ftw_fct_##A = 0; \ +static int my32_ftw_##A(void* fpath, void* sb, int flag) \ +{ \ + return (int)RunFunction(my_context, my32_ftw_fct_##A, 3, fpath, sb, flag); \ +} +SUPER() +#undef GO +static void* findftwFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_ftw_fct_##A == (uintptr_t)fct) return my32_ftw_##A; + SUPER() + #undef GO + #define GO(A) if(my32_ftw_fct_##A == 0) {my32_ftw_fct_##A = (uintptr_t)fct; return my32_ftw_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc ftw callback\n"); + return NULL; +} + +// ftw64 +#define GO(A) \ +static uintptr_t my32_ftw64_fct_##A = 0; \ +static int my32_ftw64_##A(void* fpath, void* sb, int flag) \ +{ \ + struct i386_stat64 i386st; \ + UnalignStat64(sb, &i386st); \ + return (int)RunFunction(my_context, my32_ftw64_fct_##A, 3, fpath, &i386st, flag); \ +} +SUPER() +#undef GO +static void* findftw64Fct(void* fct) +{ + if(!fct) return NULL; + #define GO(A) if(my32_ftw64_fct_##A == (uintptr_t)fct) return my32_ftw64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_ftw64_fct_##A == 0) {my32_ftw64_fct_##A = (uintptr_t)fct; return my32_ftw64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc ftw64 callback\n"); + return NULL; +} + +// nftw +#define GO(A) \ +static uintptr_t my32_nftw_fct_##A = 0; \ +static int my32_nftw_##A(void* fpath, void* sb, int flag, void* ftwbuff) \ +{ \ + return (int)RunFunction(my_context, my32_nftw_fct_##A, 4, fpath, sb, flag, ftwbuff); \ +} +SUPER() +#undef GO +static void* findnftwFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_nftw_fct_##A == (uintptr_t)fct) return my32_nftw_##A; + SUPER() + #undef GO + #define GO(A) if(my32_nftw_fct_##A == 0) {my32_nftw_fct_##A = (uintptr_t)fct; return my32_nftw_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc nftw callback\n"); + return NULL; +} + +// nftw64 +#define GO(A) \ +static uintptr_t my32_nftw64_fct_##A = 0; \ +static int my32_nftw64_##A(void* fpath, void* sb, int flag, void* ftwbuff) \ +{ \ + struct i386_stat64 i386st; \ + UnalignStat64(sb, &i386st); \ + return (int)RunFunction(my_context, my32_nftw64_fct_##A, 4, fpath, &i386st, flag, ftwbuff); \ +} +SUPER() +#undef GO +static void* findnftw64Fct(void* fct) +{ + if(!fct) return NULL; + #define GO(A) if(my32_nftw64_fct_##A == (uintptr_t)fct) return my32_nftw64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_nftw64_fct_##A == 0) {my32_nftw64_fct_##A = (uintptr_t)fct; return my32_nftw64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc nftw64 callback\n"); + return NULL; +} + +// globerr +#define GO(A) \ +static uintptr_t my32_globerr_fct_##A = 0; \ +static int my32_globerr_##A(void* epath, int eerrno) \ +{ \ + return (int)RunFunction(my_context, my32_globerr_fct_##A, 2, epath, eerrno); \ +} +SUPER() +#undef GO +static void* findgloberrFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_globerr_fct_##A == (uintptr_t)fct) return my32_globerr_##A; + SUPER() + #undef GO + #define GO(A) if(my32_globerr_fct_##A == 0) {my32_globerr_fct_##A = (uintptr_t)fct; return my32_globerr_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc globerr callback\n"); + return NULL; +} +#undef dirent +// filter_dir +#define GO(A) \ +static uintptr_t my32_filter_dir_fct_##A = 0; \ +static int my32_filter_dir_##A(const struct dirent* a) \ +{ \ + return (int)RunFunction(my_context, my32_filter_dir_fct_##A, 1, a); \ +} +SUPER() +#undef GO +static void* findfilter_dirFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_filter_dir_fct_##A == (uintptr_t)fct) return my32_filter_dir_##A; + SUPER() + #undef GO + #define GO(A) if(my32_filter_dir_fct_##A == 0) {my32_filter_dir_fct_##A = (uintptr_t)fct; return my32_filter_dir_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc filter_dir callback\n"); + return NULL; +} +// compare_dir +#define GO(A) \ +static uintptr_t my32_compare_dir_fct_##A = 0; \ +static int my32_compare_dir_##A(const struct dirent* a, const struct dirent* b) \ +{ \ + return (int)RunFunction(my_context, my32_compare_dir_fct_##A, 2, a, b); \ +} +SUPER() +#undef GO +static void* findcompare_dirFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_compare_dir_fct_##A == (uintptr_t)fct) return my32_compare_dir_##A; + SUPER() + #undef GO + #define GO(A) if(my32_compare_dir_fct_##A == 0) {my32_compare_dir_fct_##A = (uintptr_t)fct; return my32_compare_dir_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc compare_dir callback\n"); + return NULL; +} + +// filter64 +#define GO(A) \ +static uintptr_t my32_filter64_fct_##A = 0; \ +static int my32_filter64_##A(const struct dirent64* a) \ +{ \ + return (int)RunFunction(my_context, my32_filter64_fct_##A, 1, a); \ +} +SUPER() +#undef GO +static void* findfilter64Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_filter64_fct_##A == (uintptr_t)fct) return my32_filter64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_filter64_fct_##A == 0) {my32_filter64_fct_##A = (uintptr_t)fct; return my32_filter64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc filter64 callback\n"); + return NULL; +} +// compare64 +#define GO(A) \ +static uintptr_t my32_compare64_fct_##A = 0; \ +static int my32_compare64_##A(const struct dirent64* a, const struct dirent64* b) \ +{ \ + return (int)RunFunction(my_context, my32_compare64_fct_##A, 2, a, b); \ +} +SUPER() +#undef GO +static void* findcompare64Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_compare64_fct_##A == (uintptr_t)fct) return my32_compare64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_compare64_fct_##A == 0) {my32_compare64_fct_##A = (uintptr_t)fct; return my32_compare64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc compare64 callback\n"); + return NULL; +} +// on_exit +#define GO(A) \ +static uintptr_t my32_on_exit_fct_##A = 0; \ +static void my32_on_exit_##A(int a, const void* b) \ +{ \ + RunFunction(my_context, my32_on_exit_fct_##A, 2, a, b); \ +} +SUPER() +#undef GO +static void* findon_exitFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_on_exit_fct_##A == (uintptr_t)fct) return my32_on_exit_##A; + SUPER() + #undef GO + #define GO(A) if(my32_on_exit_fct_##A == 0) {my32_on_exit_fct_##A = (uintptr_t)fct; return my32_on_exit_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc on_exit callback\n"); + return NULL; +} +#undef SUPER +#endif + +// some my32_XXX declare and defines +int32_t my32___libc_start_main(x64emu_t* emu, int *(main) (int, char * *, char * *), + int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), + void (*rtld_fini) (void), void (* stack_end)); // implemented in x64run_private.c +EXPORT void my32___libc_init_first(x64emu_t* emu, int argc, char* arg0, char** b) +{ + // do nothing specific for now + return; +} +uint32_t my32_syscall(x64emu_t *emu); // implemented in x64syscall.c +void EXPORT my32___stack_chk_fail(x64emu_t* emu) +{ + char buff[200]; + #ifdef HAVE_TRACE + sprintf(buff, "%p: Stack is corrupted, aborting (prev IP=%p)\n", (void*)emu->old_ip, (void*)emu->prev2_ip); + #else + sprintf(buff, "%p: Stack is corrupted, aborting\n", (void*)emu->old_ip); + #endif + StopEmu(emu, buff, 1); +} +void EXPORT my32___gmon_start__(x64emu_t *emu) +{ + printf_log(LOG_DEBUG, "__gmon_start__ called (dummy call)\n"); +} +int EXPORT my32___cxa_atexit(x64emu_t* emu, void* p, void* a, void* d) +{ + AddCleanup1Arg(emu, p, a,FindElfAddress(my_context, (uintptr_t)d)); + return 0; +} +void EXPORT my32___cxa_finalize(x64emu_t* emu, void* p) +{ + if(!p) { + // p is null, call (and remove) all Cleanup functions + CallAllCleanup(emu); + return; + } + CallCleanup(emu, p); +} +int EXPORT my32_atexit(x64emu_t* emu, void *p) +{ + AddCleanup(emu, p); + return 0; +} + + +int my32_getcontext(x64emu_t* emu, void* ucp); +int my32_setcontext(x64emu_t* emu, void* ucp); +int my32_makecontext(x64emu_t* emu, void* ucp, void* fnc, int32_t argc, void* argv); +int my32_swapcontext(x64emu_t* emu, void* ucp1, void* ucp2); + +// All signal and context functions defined in signals.c + +// All fts function defined in myfts.c + +// getauxval implemented in auxval.c + + +// this one is defined in elfloader.c +int my32_dl_iterate_phdr(x64emu_t *emu, void* F, void *data); + +pid_t EXPORT my32_fork(x64emu_t* emu) +{ +/* #if 1 + emu->quit = 1; + emu->fork = 1; + return 0; + #else + return 0; + #endif*/ + // execute atforks prepare functions, in reverse order + for (int i=my_context->atfork_sz-1; i>=0; --i) + if(my_context->atforks[i].prepare) + RunFunctionWithEmu(emu, 0, my_context->atforks[i].prepare, 0); + int type = emu->type; + pid_t v; + v = fork(); + if(type == EMUTYPE_MAIN) + thread_set_emu(emu); + if(v<0) { + printf_log(LOG_NONE, "BOX32: Warning, fork errored... (%d)\n", v); + // error... + } else if(v>0) { + // execute atforks parent functions + for (int i=0; iatfork_sz; --i) + if(my_context->atforks[i].parent) + RunFunctionWithEmu(emu, 0, my_context->atforks[i].parent, 0); + + } else /*if(v==0)*/ { + // execute atforks child functions + for (int i=0; iatfork_sz; --i) + if(my_context->atforks[i].child) + RunFunctionWithEmu(emu, 0, my_context->atforks[i].child, 0); + } + return v; +} +pid_t EXPORT my32___fork(x64emu_t* emu) __attribute__((alias("my32_fork"))); +pid_t EXPORT my32_vfork(x64emu_t* emu) +{ + #if 1 + emu->quit = 1; + emu->fork = 1; // use regular fork... + return 0; + #else + return 0; + #endif +} + +int EXPORT my32_uname(struct utsname *buf) +{ + //TODO: check sizeof(struct utsname) == 390 + int ret = uname(buf); + strcpy(buf->machine, "x86_64"); + return ret; +} + +// X86_O_RDONLY 0x00 +#define X86_O_WRONLY 0x01 // octal 01 +#define X86_O_RDWR 0x02 // octal 02 +#define X86_O_CREAT 0x40 // octal 0100 +#define X86_O_EXCL 0x80 // octal 0200 +#define X86_O_NOCTTY 0x100 // octal 0400 +#define X86_O_TRUNC 0x200 // octal 01000 +#define X86_O_APPEND 0x400 // octal 02000 +#define X86_O_NONBLOCK 0x800 // octal 04000 +#define X86_O_SYNC 0x101000 // octal 04010000 +#define X86_O_DSYNC 0x1000 // octal 010000 +#define X86_O_RSYNC O_SYNC +#define X86_FASYNC 020000 +#define X86_O_DIRECT 040000 +#define X86_O_LARGEFILE 0100000 +#define X86_O_DIRECTORY 0200000 +#define X86_O_NOFOLLOW 0400000 +#define X86_O_NOATIME 01000000 +#define X86_O_CLOEXEC 02000000 +#define X86_O_PATH 010000000 +#define X86_O_TMPFILE 020200000 + +#ifndef O_TMPFILE +#define O_TMPFILE (020000000 | O_DIRECTORY) +#endif +#ifndef O_PATH +#define O_PATH 010000000 +#endif + +#define SUPER() \ + GO(O_WRONLY) \ + GO(O_RDWR) \ + GO(O_CREAT) \ + GO(O_EXCL) \ + GO(O_NOCTTY) \ + GO(O_TRUNC) \ + GO(O_APPEND) \ + GO(O_NONBLOCK) \ + GO(O_SYNC) \ + GO(O_DSYNC) \ + GO(O_RSYNC) \ + GO(FASYNC) \ + GO(O_DIRECT) \ + GO(O_LARGEFILE) \ + GO(O_TMPFILE) \ + GO(O_DIRECTORY) \ + GO(O_NOFOLLOW) \ + GO(O_NOATIME) \ + GO(O_CLOEXEC) \ + GO(O_PATH) \ + +// x86->arm +int of_convert32(int a) +{ + if(!a || a==-1) return a; + int b=0; + #define GO(A) if((a&X86_##A)==X86_##A) {a&=~X86_##A; b|=A;} + SUPER(); + #undef GO + if(a) { + printf_log(LOG_NONE, "Warning, of_convert32(...) left over 0x%x, converted 0x%x\n", a, b); + } + return a|b; +} + +// arm->x86 +int of_unconvert32(int a) +{ + if(!a || a==-1) return a; + int b=0; + #define GO(A) if((a&A)==A) {a&=~A; b|=X86_##A;} + SUPER(); + #undef GO + if(a) { + printf_log(LOG_NONE, "Warning, of_unconvert32(...) left over 0x%x, converted 0x%x\n", a, b); + } + return a|b; +} +#undef SUPER + +#if 0 +EXPORT void* my32__ZGTtnaX (size_t a) { printf("warning _ZGTtnaX called\n"); return NULL; } +EXPORT void my32__ZGTtdlPv (void* a) { printf("warning _ZGTtdlPv called\n"); } +EXPORT uint8_t my32__ITM_RU1(const uint8_t * a) { printf("warning _ITM_RU1 called\n"); return 0; } +EXPORT uint32_t my32__ITM_RU4(const uint32_t * a) { printf("warning _ITM_RU4 called\n"); return 0; } +EXPORT uint64_t my32__ITM_RU8(const uint64_t * a) { printf("warning _ITM_RU8 called\n"); return 0; } +EXPORT void my32__ITM_memcpyRtWn(void * a, const void * b, size_t c) {printf("warning _ITM_memcpyRtWn called\n"); } +EXPORT void my32__ITM_memcpyRnWt(void * a, const void * b, size_t c) {printf("warning _ITM_memcpyRtWn called\n"); } +#endif +EXPORT void my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); +EXPORT void my32__longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val) __attribute__((alias("my32_longjmp"))); +EXPORT void my32_siglongjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val) __attribute__((alias("my32_longjmp"))); +EXPORT void my32___longjmp_chk(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val) __attribute__((alias("my32_longjmp"))); + +//EXPORT int32_t my32_setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p); +//EXPORT int32_t my32__setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) __attribute__((alias("my32_setjmp"))); +//EXPORT int32_t my32___sigsetjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) __attribute__((alias("my32_setjmp"))); +#if 0 +EXPORT void my32_exit(x64emu_t *emu, int32_t status) +{ + R_EAX = (uint32_t)status; + emu->quit = 1; +} +EXPORT void my32__exit(x64emu_t *emu, int32_t status) __attribute__((alias("my32_exit"))); +EXPORT void my32__Exit(x64emu_t *emu, int32_t status) __attribute__((alias("my32_exit"))); +#endif +void myStackAlign32(const char* fmt, uint32_t* st, uint64_t* mystack); // align st into mystack according to fmt (for v(f)printf(...)) +typedef int (*iFpp_t)(void*, void*); +typedef int (*iFppp_t)(void*, void*, void*); +typedef int (*iFpupp_t)(void*, uint32_t, void*, void*); +EXPORT int my32_printf(x64emu_t *emu, void* fmt, void* b) { + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vprintf((const char*)fmt, VARARGS_32); +} +EXPORT int my32___printf_chk(x64emu_t *emu, void* fmt, void* b) __attribute__((alias("my32_printf"))); +#if 0 + +EXPORT int my32_vprintf(x64emu_t *emu, void* fmt, void* b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vprintf; + return ((iFpp_t)f)(fmt, VARARGS_32); + #else + // other platform don't need that + return vprintf(fmt, b); + #endif +} +EXPORT int my32___vprintf_chk(x64emu_t *emu, void* fmt, void* b) __attribute__((alias("my32_vprintf"))); + +EXPORT int my32_vfprintf(x64emu_t *emu, void* F, void* fmt, void* b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vfprintf; + return ((iFppp_t)f)(F, fmt, VARARGS_32); + #else + // other platform don't need that + return vfprintf(F, fmt, b); + #endif +} +EXPORT int my32___vfprintf_chk(x64emu_t *emu, void* F, void* fmt, void* b) __attribute__((alias("my32_vfprintf"))); +EXPORT int my32__IO_vfprintf(x64emu_t *emu, void* F, void* fmt, void* b) __attribute__((alias("my32_vfprintf"))); + +EXPORT int my32_dprintf(x64emu_t *emu, int fd, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vdprintf; + return ((iFipp_t)f)(fd, fmt, VARARGS_32); + #else + return vdprintf(fd, (const char*)fmt, (va_list)V); + #endif +} +EXPORT int my32___dprintf_chk(x64emu_t *emu, int fd, void* fmt, void* V) __attribute__((alias("my32_dprintf"))); + +EXPORT int my32_fprintf(x64emu_t *emu, void* F, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vfprintf; + return ((iFppp_t)f)(F, fmt, VARARGS_32); + #else + return vfprintf((FILE*)F, (const char*)fmt, (va_list)V); + #endif +} +EXPORT int my32___fprintf_chk(x64emu_t *emu, void* F, void* fmt, void* V) __attribute__((alias("my32_fprintf"))); + +EXPORT int my32_wprintf(x64emu_t *emu, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vwprintf; + return ((iFpp_t)f)(fmt, VARARGS_32); + #else + // other platform don't need that + return vwprintf((const wchar_t*)fmt, (va_list)V); + #endif +} +EXPORT int my32___wprintf_chk(x64emu_t *emu, int flag, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vwprintf; + return ((iFpp_t)f)(fmt, VARARGS_32); + #else + // other platform don't need that + return vwprintf((const wchar_t*)fmt, (va_list)V); + #endif +} +EXPORT int my32_fwprintf(x64emu_t *emu, void* F, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vfwprintf; + return ((iFppp_t)f)(F, fmt, VARARGS_32); + #else + // other platform don't need that + return vfwprintf((FILE*)F, (const wchar_t*)fmt, V); + #endif +} +EXPORT int my32___fwprintf_chk(x64emu_t *emu, void* F, void* fmt, void* V) __attribute__((alias("my32_fwprintf"))); + +EXPORT int my32_vfwprintf(x64emu_t *emu, void* F, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vfwprintf; + return ((iFppp_t)f)(F, fmt, VARARGS_32); + #else + return vfwprintf(F, fmt, b); + #endif +} + +EXPORT int my32_vwprintf(x64emu_t *emu, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vwprintf; + return ((iFpp_t)f)(fmt, VARARGS_32); + #else + void* f = vwprintf; + return ((iFpp_t)f)(fmt, b); + #endif +} + +EXPORT void *my32_div(void *result, int numerator, int denominator) { + *(div_t *)result = div(numerator, denominator); + return result; +} + +EXPORT int my32_snprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, void * b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsnprintf; + return ((iFpLpp_t)f)(buff, s, fmt, VARARGS_32); + #else + return vsnprintf((char*)buff, s, (char*)fmt, b); + #endif +} +EXPORT int my32___snprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, void * b) __attribute__((alias("my32_snprintf"))); + +EXPORT int my32___snprintf_chk(x64emu_t* emu, void* buff, size_t s, int f1, int f2, void * fmt, void * b) { + (void)f1; (void)f2; + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsnprintf; + return ((iFpLpp_t)f)(buff, s, fmt, VARARGS_32); + #else + return vsnprintf((char*)buff, s, (char*)fmt, b); + #endif +} + + +EXPORT int my32_sprintf(x64emu_t* emu, void* buff, void * fmt, void * b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsprintf; + return ((iFppp_t)f)(buff, fmt, VARARGS_32); + #else + return vsprintf((char*)buff, (char*)fmt, b); + #endif +} +EXPORT int my32___sprintf_chk(x64emu_t* emu, void* buff, void * fmt, void * b) __attribute__((alias("my32_sprintf"))); + +EXPORT int my32_asprintf(x64emu_t* emu, void** buff, void * fmt, void * b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vasprintf; + return ((iFppp_t)f)(buff, fmt, VARARGS_32); + #else + return vasprintf((char**)buff, (char*)fmt, b); + #endif +} +EXPORT int my32___asprintf(x64emu_t* emu, void** buff, void * fmt, void * b) __attribute__((alias("my32_asprintf"))); + +EXPORT int my32_vsprintf(x64emu_t* emu, void* buff, void * fmt, uint32_t * b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsprintf; + int r = ((iFppp_t)f)(buff, fmt, VARARGS_32); + return r; + #else + void* f = vsprintf; + int r = ((iFppp_t)f)(buff, fmt, b); + return r; + #endif +} +EXPORT int my32___vsprintf_chk(x64emu_t* emu, void* buff, int flags, size_t len, void * fmt, uint32_t * b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsprintf; + int r = ((iFppp_t)f)(buff, fmt, VARARGS_32); + return r; + #else + void* f = vsprintf; + int r = ((iFppp_t)f)(buff, fmt, b); + return r; + #endif +} + +#ifdef POWERPCLE +EXPORT int my32_vfscanf(x64emu_t* emu, void* stream, void* fmt, void* b) // probably uneeded to do a GOM, a simple wrap should enough +{ + //myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32_(b); + void* f = vfscanf; + + return ((iFppp_t)f)(stream, fmt, VARARGS_32_(b)); +} + + + +EXPORT int my32_vsscanf(x64emu_t* emu, void* stream, void* fmt, void* b) +{ + //myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32_(b); + void* f = vsscanf; + + return ((iFppp_t)f)(stream, fmt, VARARGS_32_(b)); +} + +EXPORT int my32__vsscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vsscanf"))); +EXPORT int my32_sscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vsscanf"))); + +EXPORT int my32__IO_vfscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vfscanf"))); +EXPORT int my32___isoc99_vsscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vsscanf"))); + +EXPORT int my32___isoc99_vfscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vfscanf"))); +EXPORT int my32___isoc99_fscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vfscanf"))); + +EXPORT int my32___isoc99_sscanf(x64emu_t* emu, void* stream, void* fmt, void* b) +{ + void* f = sscanf; + PREPARE_VALIST_32; + + return ((iFppp_t)f)(stream, fmt, VARARGS_32); +} +#endif + +EXPORT int my32_vsnprintf(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsnprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, VARARGS_32); + return r; + #else + void* f = vsnprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, (uint32_t*)b); + return r; + #endif +} +EXPORT int my32___vsnprintf(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) __attribute__((alias("my32_vsnprintf"))); +EXPORT int my32___vsnprintf_chk(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) __attribute__((alias("my32_vsnprintf"))); + +EXPORT int my32_vasprintf(x64emu_t* emu, void* strp, void* fmt, void* b, va_list V) +{ + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vasprintf; + int r = ((iFppp_t)f)(strp, fmt, VARARGS_32); + return r; + #else + void* f = vasprintf; + int r = ((iFppp_t)f)(strp, fmt, (uint32_t*)b); + return r; + #endif +} +EXPORT int my32___vasprintf_chk(x64emu_t* emu, void* strp, int flags, void* fmt, void* b, va_list V) +{ + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vasprintf; + int r = ((iFppp_t)f)(strp, fmt, VARARGS_32); + return r; + #else + void* f = vasprintf; + int r = ((iFppp_t)f)(strp, fmt, (uint32_t*)b); + return r; + #endif +} + +EXPORT int my32___asprintf_chk(x64emu_t* emu, void* result_ptr, int flags, void* fmt, void* b) +{ + #ifndef NOALIGN + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vasprintf; + return ((iFppp_t)f)(result_ptr, fmt, VARARGS_32); + #else + return vasprintf((char**)result_ptr, (char*)fmt, b); + #endif +} + +EXPORT int my32_vswprintf(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vswprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, VARARGS_32); + return r; + #else + void* f = vswprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, (uint32_t*)b); + return r; + #endif +} +EXPORT int my32___vswprintf(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) __attribute__((alias("my32_vswprintf"))); +EXPORT int my32___vswprintf_chk(x64emu_t* emu, void* buff, size_t s, int flags, size_t m, void * fmt, void * b, va_list V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vswprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, VARARGS_32); + return r; + #else + void* f = vswprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, (uint32_t*)b); + return r; + #endif +} + +EXPORT void my32_verr(x64emu_t* emu, int eval, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = verr; + ((vFipp_t)f)(eval, fmt, VARARGS_32); + #else + void* f = verr; + ((vFipp_t)f)(eval, fmt, (uint32_t*)b); + #endif +} + +EXPORT void my32_vwarn(x64emu_t* emu, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vwarn; + ((vFpp_t)f)(fmt, VARARGS_32); + #else + void* f = vwarn; + ((vFpp_t)f)(fmt, (uint32_t*)b); + #endif +} + +EXPORT int my32___swprintf_chk(x64emu_t* emu, void* s, uint32_t n, int32_t flag, uint32_t slen, void* fmt, void * b) +{ + #ifndef NOALIGN + myStackAlignW((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vswprintf; + int r = ((iFpupp_t)f)(s, n, fmt, VARARGS_32); + return r; + #else + void* f = vswprintf; + int r = ((iFpupp_t)f)(s, n, fmt, b); + return r; + #endif +} +EXPORT int my32_swprintf(x64emu_t* emu, void* s, uint32_t n, void* fmt, void *b) +{ + #ifndef NOALIGN + myStackAlignW((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vswprintf; + int r = ((iFpupp_t)f)(s, n, fmt, VARARGS_32); + return r; + #else + void* f = vswprintf; + int r = ((iFpupp_t)f)(s, n, fmt, b); + return r; + #endif +} + +EXPORT void my32__ITM_addUserCommitAction(x64emu_t* emu, void* cb, uint32_t b, void* c) +{ + // disabled for now... Are all this _ITM_ stuff really mendatory? + #if 0 + // quick and dirty... Should store the callback to be removed later.... + libc_my32_t *my = (libc_my32_t *)emu->context->libclib->priv.w.p2; + x64emu_t *cbemu = AddCallback(emu, (uintptr_t)cb, 1, c, NULL, NULL, NULL); + my->_ITM_addUserCommitAction(libc1ArgCallback, b, cbemu); + // should keep track of cbemu to remove at some point... + #else + printf("warning _ITM_addUserCommitAction called\n"); + #endif +} +#endif +EXPORT void my32__ITM_registerTMCloneTable(x64emu_t* emu, void* p, uint32_t s) {} +EXPORT void my32__ITM_deregisterTMCloneTable(x64emu_t* emu, void* p) {} + + +struct i386_stat { + uint64_t st_dev; + uint32_t __pad1; + uint32_t st_ino; + uint32_t st_mode; + uint32_t st_nlink; + uint32_t st_uid; + uint32_t st_gid; + uint64_t st_rdev; + uint32_t __pad2; + int32_t st_size; + int32_t st_blksize; + int32_t st_blocks; + int32_t st_atime_sec; + uint32_t st_atime_nsec; + int32_t st_mtime_sec; + uint32_t st_mtime_nsec; + int32_t st_ctime_sec; + uint32_t st_ctime_nsec; + uint32_t __unused4; + uint32_t __unused5; +} __attribute__((packed)); + +static int FillStatFromStat64(int vers, const struct stat64 *st64, void *st32) +{ + struct i386_stat *i386st = (struct i386_stat *)st32; + + if (vers != 3) + { + errno = EINVAL; + return -1; + } + + i386st->st_dev = st64->st_dev; + i386st->__pad1 = 0; + if (fix_64bit_inodes) + { + i386st->st_ino = st64->st_ino ^ (st64->st_ino >> 32); + } + else + { + i386st->st_ino = st64->st_ino; + if ((st64->st_ino >> 32) != 0) + { + errno = EOVERFLOW; + return -1; + } + } + i386st->st_mode = st64->st_mode; + i386st->st_nlink = st64->st_nlink; + i386st->st_uid = st64->st_uid; + i386st->st_gid = st64->st_gid; + i386st->st_rdev = st64->st_rdev; + i386st->__pad2 = 0; + i386st->st_size = st64->st_size; + if ((i386st->st_size >> 31) != (int32_t)(st64->st_size >> 32)) + { + errno = EOVERFLOW; + return -1; + } + i386st->st_blksize = st64->st_blksize; + i386st->st_blocks = st64->st_blocks; + if ((i386st->st_blocks >> 31) != (int32_t)(st64->st_blocks >> 32)) + { + errno = EOVERFLOW; + return -1; + } + i386st->st_atime_sec = st64->st_atim.tv_sec; + i386st->st_atime_nsec = st64->st_atim.tv_nsec; + i386st->st_mtime_sec = st64->st_mtim.tv_sec; + i386st->st_mtime_nsec = st64->st_mtim.tv_nsec; + i386st->st_ctime_sec = st64->st_ctim.tv_sec; + i386st->st_ctime_nsec = st64->st_ctim.tv_nsec; + i386st->__unused4 = 0; + i386st->__unused5 = 0; + return 0; +} +#if 0 +#ifdef ANDROID +EXPORT int my32_stat(char* path, void* buf) +{ + struct stat64 st; + int r = stat64(path, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32_fstat(int fd, void* buf) +{ + struct stat64 st; + int r = fstat64(fd, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32_lstat(char* path, void* buf) +{ + struct stat64 st; + int r = lstat64(path, &st); + UnalignStat64(&st, buf); + return r; +} +#endif + +EXPORT int my32___fxstat(x64emu_t *emu, int vers, int fd, void* buf) +{ + if (vers == 1) + { + static iFiip_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + errno = EINVAL; + return -1; + } + f = (iFiip_t)dlsym(lib->priv.w.lib, "__fxstat"); + } + + return f(vers, fd, buf); + } + struct stat64 st; + int r = fstat64(fd, &st); + if (r) return r; + r = FillStatFromStat64(vers, &st, buf); + return r; +} + +EXPORT int my32___fxstat64(x64emu_t *emu, int vers, int fd, void* buf) +{ + struct stat64 st; + int r = fstat64(fd, &st); + //int r = syscall(__NR_stat64, fd, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32_stat64(x64emu_t* emu, void* path, void* buf) +{ + struct stat64 st; + int r = stat64(path, &st); + UnalignStat64(&st, buf); + return r; +} +EXPORT int my32_lstat64(x64emu_t* emu, void* path, void* buf) +{ + struct stat64 st; + int r = lstat64(path, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32___xstat(x64emu_t* emu, int v, void* path, void* buf) +{ + if (v == 1) + { + static iFipp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + errno = EINVAL; + return -1; + } + f = (iFipp_t)dlsym(lib->priv.w.lib, "__xstat"); + } + + return f(v, path, buf); + } + struct stat64 st; + int r = stat64((const char*)path, &st); + if (r) return r; + r = FillStatFromStat64(v, &st, buf); + return r; +} + +EXPORT int my32___xstat64(x64emu_t* emu, int v, void* path, void* buf) +{ + struct stat64 st; + int r = stat64((const char*)path, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32___lxstat(x64emu_t* emu, int v, void* name, void* buf) +{ + if (v == 1) + { + static iFipp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + errno = EINVAL; + return -1; + } + f = (iFipp_t)dlsym(lib->priv.w.lib, "__lxstat"); + } + + return f(v, name, buf); + } + struct stat64 st; + int r = lstat64((const char*)name, &st); + if (r) return r; + r = FillStatFromStat64(v, &st, buf); + return r; +} + +EXPORT int my32___lxstat64(x64emu_t* emu, int v, void* name, void* buf) +{ + struct stat64 st; + int r = lstat64((const char*)name, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32___fxstatat(x64emu_t* emu, int v, int d, void* path, void* buf, int flags) +{ + struct stat64 st; + int r = fstatat64(d, path, &st, flags); + if (r) return r; + r = FillStatFromStat64(v, &st, buf); + return r; +} + +EXPORT int my32___fxstatat64(x64emu_t* emu, int v, int d, void* path, void* buf, int flags) +{ + struct stat64 st; + int r = fstatat64(d, path, &st, flags); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32__IO_file_stat(x64emu_t* emu, void* f, void* buf) +{ + struct stat64 st; + libc_my32_t *my = (libc_my32_t *)emu->context->libclib->priv.w.p2; + int r = my->_IO_file_stat(f, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32_fstatfs64(int fd, void* buf) +{ + struct statfs64 st; + int r = fstatfs64(fd, &st); + UnalignStatFS64(&st, buf); + return r; +} + +EXPORT int my32_statfs64(const char* path, void* buf) +{ + struct statfs64 st; + int r = statfs64(path, &st); + UnalignStatFS64(&st, buf); + return r; +} + + +#ifdef ANDROID +typedef int (*__compar_d_fn_t)(const void*, const void*, void*); + +static size_t qsort_r_partition(void* base, size_t size, __compar_d_fn_t compar, void* arg, size_t lo, size_t hi) +{ + void* tmp = malloc(size); + void* pivot = ((char*)base) + lo * size; + size_t i = lo; + for (size_t j = lo; j <= hi; j++) + { + void* base_i = ((char*)base) + i * size; + void* base_j = ((char*)base) + j * size; + if (compar(base_j, pivot, arg) < 0) + { + memcpy(tmp, base_i, size); + memcpy(base_i, base_j, size); + memcpy(base_j, tmp, size); + i++; + } + } + void* base_i = ((char *)base) + i * size; + void* base_hi = ((char *)base) + hi * size; + memcpy(tmp, base_i, size); + memcpy(base_i, base_hi, size); + memcpy(base_hi, tmp, size); + free(tmp); + return i; +} + +static void qsort_r_helper(void* base, size_t size, __compar_d_fn_t compar, void* arg, ssize_t lo, ssize_t hi) +{ + if (lo < hi) + { + size_t p = qsort_r_partition(base, size, compar, arg, lo, hi); + qsort_r_helper(base, size, compar, arg, lo, p - 1); + qsort_r_helper(base, size, compar, arg, p + 1, hi); + } +} + +static void qsort_r(void* base, size_t nmemb, size_t size, __compar_d_fn_t compar, void* arg) +{ + return qsort_r_helper(base, size, compar, arg, 0, nmemb - 1); +} +#endif + +typedef struct compare_r_s { + x64emu_t* emu; + uintptr_t f; + void* data; + int r; +} compare_r_t; + +static int my32_compare_r_cb(void* a, void* b, compare_r_t* arg) +{ + return (int)RunFunctionWithEmu(arg->emu, 0, arg->f, 2+arg->r, a, b, arg->data); +} +EXPORT void my32_qsort(x64emu_t* emu, void* base, size_t nmemb, size_t size, void* fnc) +{ + compare_r_t args; + args.emu = emu; args.f = (uintptr_t)fnc; args.r = 0; args.data = NULL; + qsort_r(base, nmemb, size, (__compar_d_fn_t)my32_compare_r_cb, &args); +} +EXPORT void my32_qsort_r(x64emu_t* emu, void* base, size_t nmemb, size_t size, void* fnc, void* data) +{ + compare_r_t args; + args.emu = emu; args.f = (uintptr_t)fnc; args.r = 1; args.data = data; + qsort_r(base, nmemb, size, (__compar_d_fn_t)my32_compare_r_cb, &args); +} + +EXPORT void* my32_bsearch(x64emu_t* emu, void* key, void* base, size_t nmemb, size_t size, void* fnc) +{ + return bsearch(key, base, nmemb, size, findcompareFct(fnc)); +} + +EXPORT void* my32_lsearch(x64emu_t* emu, void* key, void* base, size_t* nmemb, size_t size, void* fnc) +{ + return lsearch(key, base, nmemb, size, findcompareFct(fnc)); +} +EXPORT void* my32_lfind(x64emu_t* emu, void* key, void* base, size_t* nmemb, size_t size, void* fnc) +{ + return lfind(key, base, nmemb, size, findcompareFct(fnc)); +} + + +struct i386_dirent { + uint32_t d_ino; + int32_t d_off; + uint16_t d_reclen; + uint8_t d_type; + char d_name[256]; +}; + +EXPORT void* my32_readdir(x64emu_t* emu, void* dirp) +{ + if (fix_64bit_inodes) + { + struct dirent64 *dp64 = readdir64((DIR *)dirp); + if (!dp64) return NULL; + uint32_t ino32 = dp64->d_ino ^ (dp64->d_ino >> 32); + int32_t off32 = dp64->d_off; + struct i386_dirent *dp32 = (struct i386_dirent *)&(dp64->d_off); + dp32->d_ino = ino32; + dp32->d_off = off32; + dp32->d_reclen -= 8; + return dp32; + } + else + { + static pFp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return NULL; + f = (pFp_t)dlsym(lib->priv.w.lib, "readdir"); + } + + return f(dirp); + } +} + +EXPORT int32_t my32_readdir_r(x64emu_t* emu, void* dirp, void* entry, void** result) +{ + struct dirent64 d64, *dp64; + if (fix_64bit_inodes && (sizeof(d64.d_name) > 1)) + { + static iFppp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + *result = NULL; + return 0; + } + f = (iFppp_t)dlsym(lib->priv.w.lib, "readdir64_r"); + } + + int r = f(dirp, &d64, &dp64); + if (r || !dp64 || !entry) + { + *result = NULL; + return r; + } + + struct i386_dirent *dp32 = (struct i386_dirent *)entry; + int namelen = dp64->d_reclen - offsetof(struct dirent64, d_name); + if (namelen > sizeof(dp32->d_name)) + { + *result = NULL; + return ENAMETOOLONG; + } + + dp32->d_ino = dp64->d_ino ^ (dp64->d_ino >> 32); + dp32->d_off = dp64->d_off; + dp32->d_reclen = namelen + offsetof(struct i386_dirent, d_name); + dp32->d_type = dp64->d_type; + memcpy(dp32->d_name, dp64->d_name, namelen); + *result = dp32; + return 0; + } + else + { + static iFppp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + *result = NULL; + return 0; + } + f = (iFppp_t)dlsym(lib->priv.w.lib, "readdir_r"); + } + + return f(dirp, entry, result); + } +} +#endif +static int isProcSelf(const char *path, const char* w) +{ + if(strncmp(path, "/proc/", 6)==0) { + char tmp[64]; + // check if self .... + sprintf(tmp, "/proc/self/%s", w); + if(strcmp((const char*)path, tmp)==0) + return 1; + // check if self PID .... + pid_t pid = getpid(); + sprintf(tmp, "/proc/%d/%s", pid, w); + if(strcmp((const char*)path, tmp)==0) + return 1; + } + return 0; +} + +EXPORT int32_t my32_readlink(x64emu_t* emu, void* path, void* buf, uint32_t sz) +{ + if(isProcSelf((const char*)path, "exe")) { + // special case for self... + return strlen(strncpy((char*)buf, emu->context->fullpath, sz)); + } + return readlink((const char*)path, (char*)buf, sz); +} +#ifndef NOALIGN + +void CreateCPUInfoFile(int fd); +int getNCpu(); +static int isCpuTopology(const char* p) { + if(strstr(p, "/sys/devices/system/cpu/cpu")!=p) + return -1; //nope + if( FileExist(p, -1)) + return -1; //no need to fake it + char buf[512]; + const char* p2 = p + strlen("/sys/devices/system/cpu/cpu"); + int n = 0; + while(*p2>='0' && *p2<='9') { + n = n*10+ *p2 - '0'; + ++p2; + } + if(n>=getNCpu()) // filter for non existing cpu + return -1; + snprintf(buf, 512, "/sys/devices/system/cpu/cpu%d/topology/core_id", n); + if(!strcmp(p, buf)) + return n; + return -1; +} +static void CreateCPUTopologyCoreID(int fd, int cpu) +{ + char buf[512]; + snprintf(buf, 512, "%d\n", cpu); + size_t dummy = write(fd, buf, strlen(buf)); + (void)dummy; +} + + +#ifdef ANDROID +static int shm_open(const char *name, int oflag, mode_t mode) { + return -1; +} +static int shm_unlink(const char *name) { + return -1; +} +#endif +#endif +#define TMP_CPUINFO "box32_tmpcpuinfo" +#define TMP_CPUTOPO "box32_tmpcputopo%d" + +#define TMP_MEMMAP "box32_tmpmemmap" +#define TMP_CMDLINE "box32_tmpcmdline" +EXPORT int32_t my32_open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode) +{ + if(isProcSelf((const char*) pathname, "cmdline")) { + // special case for self command line... + #if 0 + char tmpcmdline[200] = {0}; + char tmpbuff[100] = {0}; + sprintf(tmpbuff, "%s/cmdlineXXXXXX", getenv("TMP")?getenv("TMP"):"."); + int tmp = mkstemp(tmpbuff); + int dummy; + if(tmp<0) return open(pathname, flags, mode); + dummy = write(tmp, emu->context->fullpath, strlen(emu->context->fullpath)+1); + for (int i=1; icontext->argc; ++i) + dummy = write(tmp, emu->context->argv[i], strlen(emu->context->argv[i])+1); + lseek(tmp, 0, SEEK_SET); + #else + int tmp = shm_open(TMP_CMDLINE, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open(pathname, flags, mode); + shm_unlink(TMP_CMDLINE); // remove the shm file, but it will still exist because it's currently in use + int dummy = write(tmp, emu->context->fullpath, strlen(emu->context->fullpath)+1); + (void)dummy; + for (int i=1; icontext->argc; ++i) + dummy = write(tmp, emu->context->argv[i], strlen(emu->context->argv[i])+1); + lseek(tmp, 0, SEEK_SET); + #endif + return tmp; + } + if(isProcSelf((const char*)pathname, "exe")) { + return open(emu->context->fullpath, flags, mode); + } + #ifndef NOALIGN + if(strcmp((const char*)pathname, "/proc/cpuinfo")==0) { + // special case for cpuinfo + int tmp = shm_open(TMP_CPUINFO, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open(pathname, flags, mode); // error fallback + shm_unlink(TMP_CPUINFO); // remove the shm file, but it will still exist because it's currently in use + CreateCPUInfoFile(tmp); + lseek(tmp, 0, SEEK_SET); + return tmp; + } + if(isCpuTopology((const char*)pathname)!=-1) { + int n = isCpuTopology((const char*)pathname); + char buf[512]; + snprintf(buf, 512, TMP_CPUTOPO, n); + int tmp = shm_open(buf, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open(pathname, flags, mode); // error fallback + shm_unlink(buf); // remove the shm file, but it will still exist because it's currently in use + CreateCPUTopologyCoreID(tmp, n); + lseek(tmp, 0, SEEK_SET); + return tmp; + } + #endif + int ret = open(pathname, flags, mode); + return ret; +} +EXPORT int32_t my32___open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode) __attribute__((alias("my32_open"))); + +#ifdef DYNAREC +static int hasDBFromAddress(uintptr_t addr) +{ + int idx = (addr>>DYNAMAP_SHIFT); + return getDB(idx)?1:0; +} +#endif + +EXPORT int32_t my32_read(int fd, void* buf, uint32_t count) +{ + int ret = read(fd, buf, count); +#ifdef DYNAREC + if(ret!=count && ret>0) { + // continue reading... + void* p = buf+ret; + if(hasDBFromAddress((uintptr_t)p)) { + // allow writing the whole block (this happens with HalfLife, libMiles load code directly from .mix and other file like that) + unprotectDB((uintptr_t)p, count-ret, 1); + int l; + do { + l = read(fd, p, count-ret); + if(l>0) { + p+=l; ret+=l; + } + } while(l>0); + } + } +#endif + return ret; +} + +EXPORT int32_t my32_open64(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode) +{ + if(isProcSelf((const char*)pathname, "cmdline")) { + // special case for self command line... + #if 0 + char tmpcmdline[200] = {0}; + char tmpbuff[100] = {0}; + sprintf(tmpbuff, "%s/cmdlineXXXXXX", getenv("TMP")?getenv("TMP"):"."); + int tmp = mkstemp64(tmpbuff); + int dummy; + if(tmp<0) return open64(pathname, flags, mode); + dummy = write(tmp, emu->context->fullpath, strlen(emu->context->fullpath)+1); + for (int i=1; icontext->argc; ++i) + dummy = write(tmp, emu->context->argv[i], strlen(emu->context->argv[i])+1); + lseek64(tmp, 0, SEEK_SET); + #else + int tmp = shm_open(TMP_CMDLINE, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open64(pathname, flags, mode); + shm_unlink(TMP_CMDLINE); // remove the shm file, but it will still exist because it's currently in use + int dummy = write(tmp, emu->context->fullpath, strlen(emu->context->fullpath)+1); + (void)dummy; + for (int i=1; icontext->argc; ++i) + dummy = write(tmp, emu->context->argv[i], strlen(emu->context->argv[i])+1); + lseek(tmp, 0, SEEK_SET); + #endif + return tmp; + } + if(isProcSelf((const char*)pathname, "exe")) { + return open64(emu->context->fullpath, flags, mode); + } + #ifndef NOALIGN + if(strcmp((const char*)pathname, "/proc/cpuinfo")==0) { + // special case for cpuinfo + int tmp = shm_open(TMP_CPUINFO, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open64(pathname, flags, mode); // error fallback + shm_unlink(TMP_CPUINFO); // remove the shm file, but it will still exist because it's currently in use + CreateCPUInfoFile(tmp); + lseek(tmp, 0, SEEK_SET); + return tmp; + } + if(isCpuTopology((const char*)pathname)!=-1) { + int n = isCpuTopology((const char*)pathname); + char buf[512]; + snprintf(buf, 512, TMP_CPUTOPO, n); + int tmp = shm_open(buf, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open64(pathname, flags, mode); // error fallback + shm_unlink(buf); // remove the shm file, but it will still exist because it's currently in use + CreateCPUTopologyCoreID(tmp, n); + lseek(tmp, 0, SEEK_SET); + return tmp; + } + #endif + return open64(pathname, flags, mode); +} + +EXPORT FILE* my32_fopen(x64emu_t* emu, const char* path, const char* mode) +{ + if(isProcSelf(path, "maps")) { + // special case for self memory map + int tmp = shm_open(TMP_MEMMAP, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen(path, mode); // error fallback + shm_unlink(TMP_MEMMAP); // remove the shm file, but it will still exist because it's currently in use + CreateMemorymapFile(emu->context, tmp); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode); + } + #ifndef NOALIGN + if(strcmp(path, "/proc/cpuinfo")==0) { + // special case for cpuinfo + int tmp = shm_open(TMP_CPUINFO, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen(path, mode); // error fallback + shm_unlink(TMP_CPUINFO); // remove the shm file, but it will still exist because it's currently in use + CreateCPUInfoFile(tmp); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode); + } + if(isCpuTopology(path)!=-1) { + int n = isCpuTopology(path); + char buf[512]; + snprintf(buf, 512, TMP_CPUTOPO, n); + int tmp = shm_open(buf, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen(path, mode); // error fallback + shm_unlink(buf); // remove the shm file, but it will still exist because it's currently in use + CreateCPUTopologyCoreID(tmp, n); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode);; + } + #endif + if(isProcSelf(path, "exe")) { + return fopen(emu->context->fullpath, mode); + } + return fopen(path, mode); +} + +EXPORT FILE* my32_fopen64(x64emu_t* emu, const char* path, const char* mode) +{ + if(isProcSelf(path, "maps")) { + // special case for self memory map + int tmp = shm_open(TMP_MEMMAP, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen64(path, mode); // error fallback + shm_unlink(TMP_MEMMAP); // remove the shm file, but it will still exist because it's currently in use + CreateMemorymapFile(emu->context, tmp); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode); + } + #ifndef NOALIGN + if(strcmp(path, "/proc/cpuinfo")==0) { + // special case for cpuinfo + int tmp = shm_open(TMP_CPUINFO, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen64(path, mode); // error fallback + shm_unlink(TMP_CPUINFO); // remove the shm file, but it will still exist because it's currently in use + CreateCPUInfoFile(tmp); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode); + } + if(isCpuTopology(path)!=-1) { + int n = isCpuTopology(path); + char buf[512]; + snprintf(buf, 512, TMP_CPUTOPO, n); + int tmp = shm_open(buf, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen(path, mode); // error fallback + shm_unlink(buf); // remove the shm file, but it will still exist because it's currently in use + CreateCPUTopologyCoreID(tmp, n); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode);; + } + #endif + if(isProcSelf(path, "exe")) { + return fopen64(emu->context->fullpath, mode); + } + return fopen64(path, mode); +} + +#if 0 +EXPORT int my32_mkstemps64(x64emu_t* emu, char* template, int suffixlen) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "mkstemps64"); + if(f) + return ((iFpi_t)f)(template, suffixlen); + // implement own version... + // TODO: check size of template, and if really XXXXXX is there + char* fname = strdup(template); + do { + strcpy(fname, template); + char num[8]; + sprintf(num, "%06d", rand()%999999); + memcpy(fname+strlen(fname)-suffixlen-6, num, 6); + } while(!FileExist(fname, -1)); + int ret = open64(fname, O_EXCL); + free(fname); + return ret; +} + +EXPORT int32_t my32_ftw(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd) +{ + static iFppi_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFppi_t)dlsym(lib->priv.w.lib, "ftw"); + } + + return f(pathname, findftwFct(B), nopenfd); +} + +EXPORT int32_t my32_nftw(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd, int32_t flags) +{ + static iFppii_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFppii_t)dlsym(lib->priv.w.lib, "nftw"); + } + + return f(pathname, findnftwFct(B), nopenfd, flags); +} + +EXPORT void* my32_ldiv(x64emu_t* emu, void* p, int32_t num, int32_t den) +{ + *((ldiv_t*)p) = ldiv(num, den); + return p; +} + +#ifndef NOALIGN +EXPORT int my32_epoll_create(x64emu_t* emu, int size) +{ + return epoll_create(size); +} +EXPORT int my32_epoll_create1(x64emu_t* emu, int flags) +{ + return epoll_create1(flags); +} +EXPORT int32_t my32_epoll_ctl(x64emu_t* emu, int32_t epfd, int32_t op, int32_t fd, void* event) +{ + struct epoll_event _event[1] = {0}; + if(event && (op!=EPOLL_CTL_DEL)) + AlignEpollEvent(_event, event, 1); + return epoll_ctl(epfd, op, fd, event?_event:event); +} +EXPORT int32_t my32_epoll_wait(x64emu_t* emu, int32_t epfd, void* events, int32_t maxevents, int32_t timeout) +{ + struct epoll_event _events[maxevents]; + //AlignEpollEvent(_events, events, maxevents); + int32_t ret = epoll_wait(epfd, events?_events:NULL, maxevents, timeout); + if(ret>0) + UnalignEpollEvent(events, _events, ret); + return ret; +} +#endif + +EXPORT int32_t my32_glob(x64emu_t *emu, void* pat, int32_t flags, void* errfnc, void* pglob) +{ + static iFpipp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFpipp_t)dlsym(lib->priv.w.lib, "glob"); + } + + return f(pat, flags, findgloberrFct(errfnc), pglob); +} + +#ifndef ANDROID +EXPORT int32_t my32_glob64(x64emu_t *emu, void* pat, int32_t flags, void* errfnc, void* pglob) +{ + return glob64(pat, flags, findgloberrFct(errfnc), pglob); +} +#endif + +EXPORT int my32_scandir64(x64emu_t *emu, void* dir, void* namelist, void* sel, void* comp) +{ + return scandir64(dir, namelist, findfilter64Fct(sel), findcompare64Fct(comp)); +} + +EXPORT int my32_scandir(x64emu_t *emu, void* dir, void* namelist, void* sel, void* comp) +{ + static iFpppp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFpppp_t)dlsym(lib->priv.w.lib, "scandir"); + } + + return f(dir, namelist, findfilter_dirFct(sel), findcompare_dirFct(comp)); +} + +EXPORT int my32_ftw64(x64emu_t* emu, void* filename, void* func, int descriptors) +{ + return ftw64(filename, findftw64Fct(func), descriptors); +} + +EXPORT int32_t my32_nftw64(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd, int32_t flags) +{ + return nftw64(pathname, findnftw64Fct(B), nopenfd, flags); +} + +EXPORT int32_t my32_execv(x64emu_t* emu, const char* path, char* const argv[]) +{ + int self = isProcSelf(path, "exe"); + int x86 = FileIsX86ELF(path); + int x64 = my_context->box64path?FileIsX64ELF(path):0; + printf_log(LOG_DEBUG, "execv(\"%s\", %p) is x86=%d\n", path, argv, x86); + if (x86 || x64 || self) { + int skip_first = 0; + if(strlen(path)>=strlen("wine-preloader") && strcmp(path+strlen(path)-strlen("wine-preloader"), "wine-preloader")==0) + skip_first++; + // count argv... + int n=skip_first; + while(argv[n]) ++n; + const char** newargv = (const char**)calloc(n+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + memcpy(newargv+1, argv+skip_first, sizeof(char*)*(n+1)); + if(self) newargv[1] = emu->context->fullpath; + printf_log(LOG_DEBUG, " => execv(\"%s\", %p [\"%s\", \"%s\", \"%s\"...:%d])\n", emu->context->box64path, newargv, newargv[0], n?newargv[1]:"", (n>1)?newargv[2]:"",n); + int ret = execv(newargv[0], (char* const*)newargv); + free(newargv); + return ret; + } + return execv(path, argv); +} +#endif +EXPORT int32_t my32_execve(x64emu_t* emu, const char* path, char* const argv[], char* const envp[]) +{ + int self = isProcSelf(path, "exe"); + int x86 = FileIsX86ELF(path); + int x64 = my_context->box64path?FileIsX64ELF(path):0; + // hack to update the environ var if needed + if(envp == my_context->envv && environ) { + envp = environ; + } + printf_log(LOG_DEBUG, "execve(\"%s\", %p, %p) is x86=%d\n", path, argv, envp, x86); + if (x86 || x64 || self) { + int skip_first = 0; + if(strlen(path)>=strlen("wine-preloader") && strcmp(path+strlen(path)-strlen("wine-preloader"), "wine-preloader")==0) + skip_first++; + // count argv... + int n=skip_first; + while(argv[n]) ++n; + const char** newargv = (const char**)calloc(n+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + memcpy(newargv+1, argv+skip_first, sizeof(char*)*(n+1)); + if(self) newargv[1] = emu->context->fullpath; + printf_log(LOG_DEBUG, " => execve(\"%s\", %p [\"%s\", \"%s\", \"%s\"...:%d])\n", emu->context->box64path, newargv, newargv[0], n?newargv[1]:"", (n>1)?newargv[2]:"",n); + int ret = execve(newargv[0], (char* const*)newargv, envp); + free(newargv); + return ret; + } + if(!strcmp(path + strlen(path) - strlen("/uname"), "/uname") + && argv[1] && (!strcmp(argv[1], "-m") || !strcmp(argv[1], "-p") || !strcmp(argv[1], "-i")) + && !argv[2]) { + // uname -m is redirected to box32 -m + path = my_context->box64path; + char *argv2[3] = { my_context->box64path, argv[1], NULL }; + return execve(path, argv2, envp); + } + + return execve(path, argv, envp); +} +#if 0 +// execvp should use PATH to search for the program first +EXPORT int32_t my32_execvp(x64emu_t* emu, const char* path, char* const argv[]) +{ + // need to use BOX32_PATH / PATH here... + char* fullpath = ResolveFile(path, &my_context->box32_path); + // use fullpath... + int self = isProcSelf(fullpath, "exe"); + int x86 = FileIsX86ELF(fullpath); + int x64 = my_context->box64path?FileIsX64ELF(path):0; + printf_log(LOG_DEBUG, "execvp(\"%s\", %p), IsX86=%d / fullpath=\"%s\"\n", path, argv, x86, fullpath); + free(fullpath); + if (x86 || self) { + // count argv... + int i=0; + while(argv[i]) ++i; + char** newargv = (char**)calloc(i+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + for (int j=0; jcontext->fullpath; + printf_log(LOG_DEBUG, " => execvp(\"%s\", %p [\"%s\", \"%s\"...:%d])\n", newargv[0], newargv, newargv[1], i?newargv[2]:"", i); + int ret = execvp(newargv[0], newargv); + free(newargv); + return ret; + } + if((!strcmp(path + strlen(path) - strlen("/uname"), "/uname") || !strcmp(path, "uname")) + && argv[1] && (!strcmp(argv[1], "-m") || !strcmp(argv[1], "-p") || !strcmp(argv[1], "-i")) + && !argv[2]) { + // uname -m is redirected to box32 -m + path = my_context->box64path; + char *argv2[3] = { my_context->box64path, argv[1], NULL }; + return execvp(path, argv2); + } + + // fullpath is gone, so the search will only be on PATH, not on BOX32_PATH (is that an issue?) + return execvp(path, argv); +} + +// execvp should use PATH to search for the program first +EXPORT int32_t my32_posix_spawnp(x64emu_t* emu, pid_t* pid, const char* path, + const posix_spawn_file_actions_t *actions, const posix_spawnattr_t* attrp, char* const argv[], char* const envp[]) +{ + // need to use BOX32_PATH / PATH here... + char* fullpath = ResolveFile(path, &my_context->box32_path); + // use fullpath... + int self = isProcSelf(fullpath, "exe"); + int x86 = FileIsX86ELF(fullpath); + int x64 = my_context->box64path?FileIsX64ELF(path):0; + printf_log(LOG_DEBUG, "posix_spawnp(%p, \"%s\", %p, %p, %p, %p), IsX86=%d / fullpath=\"%s\"\n", pid, path, actions, attrp, argv, envp, x86, fullpath); + free(fullpath); + if ((x86 || self)) { + // count argv... + int i=0; + while(argv[i]) ++i; + char** newargv = (char**)calloc(i+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + for (int j=0; jcontext->fullpath; + printf_log(LOG_DEBUG, " => posix_spawnp(%p, \"%s\", %p, %p, %p [\"%s\", \"%s\"...:%d], %p)\n", pid, newargv[0], actions, attrp, newargv, newargv[1], i?newargv[2]:"", i, envp); + int ret = posix_spawnp(pid, newargv[0], actions, attrp, newargv, envp); + printf_log(LOG_DEBUG, "posix_spawnp returned %d\n", ret); + //free(newargv); + return ret; + } + // fullpath is gone, so the search will only be on PATH, not on BOX32_PATH (is that an issue?) + return posix_spawnp(pid, path, actions, attrp, argv, envp); +} +#endif +EXPORT void my32__Jv_RegisterClasses() {} + +EXPORT int32_t my32___cxa_thread_atexit_impl(x64emu_t* emu, void* dtor, void* obj, void* dso) +{ + printf_log(LOG_INFO, "Warning, call to __cxa_thread_atexit_impl(%p, %p, %p) ignored\n", dtor, obj, dso); + return 0; +} +#if 0 +#ifndef ANDROID +extern void __chk_fail(); +EXPORT unsigned long int my32___fdelt_chk (unsigned long int d) +{ + if (d >= FD_SETSIZE) + __chk_fail (); + + return d / __NFDBITS; +} +#endif + +EXPORT int32_t my32_getrandom(x64emu_t* emu, void* buf, uint32_t buflen, uint32_t flags) +{ + // not always implemented on old linux version... + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "getrandom"); + if(f) + return ((iFpuu_t)f)(buf, buflen, flags); + // do what should not be done, but it's better then nothing.... + FILE * rnd = fopen("/dev/urandom", "rb"); + uint32_t r = fread(buf, 1, buflen, rnd); + fclose(rnd); + return r; +} + +static struct passwd fakepwd = {}; +EXPORT void* my32_getpwuid(x64emu_t* emu, uint32_t uid) +{ + void *ret = NULL; + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "getpwuid"); + if(f) + ret = ((pFu_t)f)(uid); + + // In case of failure, provide a fake one. Evil hack :/ + if (!ret && !fakepwd.pw_name) { + fakepwd.pw_name = strdup("root"); + fakepwd.pw_passwd = strdup("fakehash"); + fakepwd.pw_uid = 0; + fakepwd.pw_gid = 0; + fakepwd.pw_gecos = strdup("root"); + fakepwd.pw_dir = getenv("HOME"); + fakepwd.pw_shell = strdup("/bin/bash"); + } + + return ret ? ret : (void*)&fakepwd; +} + +EXPORT int32_t my32_recvmmsg(x64emu_t* emu, int32_t fd, void* msgvec, uint32_t vlen, uint32_t flags, void* timeout) +{ + // Implemented starting glibc 2.12+ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "recvmmsg"); + if(f) + return ((iFipuup_t)f)(fd, msgvec, vlen, flags, timeout); + // Use the syscall + return syscall(__NR_recvmmsg, fd, msgvec, vlen, flags, timeout); +} + +EXPORT int32_t my32___sendmmsg(x64emu_t* emu, int32_t fd, void* msgvec, uint32_t vlen, uint32_t flags) +{ + // Implemented starting glibc 2.14+ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "__sendmmsg"); + if(f) + return ((iFipuu_t)f)(fd, msgvec, vlen, flags); + // Use the syscall + return syscall(__NR_sendmmsg, fd, msgvec, vlen, flags); +} + +EXPORT int32_t my32___register_atfork(x64emu_t *emu, void* prepare, void* parent, void* child, void* handle) +{ + // this is partly incorrect, because the emulated funcionts should be executed by actual fork and not by my32_atfork... + if(my_context->atfork_sz==my_context->atfork_cap) { + my_context->atfork_cap += 4; + my_context->atforks = (atfork_fnc_t*)realloc(my_context->atforks, my_context->atfork_cap*sizeof(atfork_fnc_t)); + } + my_context->atforks[my_context->atfork_sz].prepare = (uintptr_t)prepare; + my_context->atforks[my_context->atfork_sz].parent = (uintptr_t)parent; + my_context->atforks[my_context->atfork_sz].child = (uintptr_t)child; + my_context->atforks[my_context->atfork_sz].handle = handle; + return 0; +} + +EXPORT uint64_t my32___umoddi3(uint64_t a, uint64_t b) +{ + return a%b; +} +EXPORT uint64_t my32___udivdi3(uint64_t a, uint64_t b) +{ + return a/b; +} +EXPORT int64_t my32___divdi3(int64_t a, int64_t b) +{ + return a/b; +} + +EXPORT int32_t my32___poll_chk(void* a, uint32_t b, int c, int l) +{ + return poll(a, b, c); // no check... +} + +EXPORT int32_t my32_fcntl64(x64emu_t* emu, int32_t a, int32_t b, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6) +{ + // Implemented starting glibc 2.14+ + library_t* lib = my_lib; + if(!lib) return 0; + iFiiV_t f = dlsym(lib->priv.w.lib, "fcntl64"); + if(b==F_SETFL) + d1 = of_convert32(d1); + if(b==F_GETLK64 || b==F_SETLK64 || b==F_SETLKW64) + { + my32_flock64_t fl; + AlignFlock64(&fl, (void*)d1); + int ret = f?f(a, b, &fl):fcntl(a, b, &fl); + UnalignFlock64((void*)d1, &fl); + return ret; + } + //TODO: check if better to use the syscall or regular fcntl? + //return syscall(__NR_fcntl64, a, b, d1); // should be enough + int ret = f?f(a, b, d1):fcntl(a, b, d1); + + if(b==F_GETFL && ret!=-1) + ret = of_unconvert32(ret); + + return ret; +} + +EXPORT int32_t my32_fcntl(x64emu_t* emu, int32_t a, int32_t b, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6) +{ + if(b==F_SETFL && d1==0xFFFFF7FF) { + // special case for ~O_NONBLOCK... + int flags = fcntl(a, F_GETFL); + if(flags&X86_O_NONBLOCK) { + flags &= ~O_NONBLOCK; + return fcntl(a, b, flags); + } + return 0; + } + if(b==F_SETFL) + d1 = of_convert32(d1); + if(b==F_GETLK64 || b==F_SETLK64 || b==F_SETLKW64) + { + my32_flock64_t fl; + AlignFlock64(&fl, (void*)d1); + int ret = fcntl(a, b, &fl); + UnalignFlock64((void*)d1, &fl); + return ret; + } + int ret = fcntl(a, b, d1); + if(b==F_GETFL && ret!=-1) + ret = of_unconvert32(ret); + + return ret; +} +EXPORT int32_t my32___fcntl(x64emu_t* emu, int32_t a, int32_t b, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6) __attribute__((alias("my32_fcntl"))); + +EXPORT int32_t my32_preadv64(x64emu_t* emu, int32_t fd, void* v, int32_t c, int64_t o) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "preadv64"); + if(f) + return ((iFipiI_t)f)(fd, v, c, o); + return syscall(__NR_preadv, fd, v, c,(uint32_t)(o&0xffffffff), (uint32_t)((o>>32)&0xffffffff)); +} + +EXPORT int32_t my32_pwritev64(x64emu_t* emu, int32_t fd, void* v, int32_t c, int64_t o) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "pwritev64"); + if(f) + return ((iFipiI_t)f)(fd, v, c, o); + #ifdef __arm__ + return syscall(__NR_pwritev, fd, v, c, 0, (uint32_t)(o&0xffffffff), (uint32_t)((o>>32)&0xffffffff)); + // on arm, 64bits args needs to be on even/odd register, so need to put a 0 for aligment + #else + return syscall(__NR_pwritev, fd, v, c,(uint32_t)(o&0xffffffff), (uint32_t)((o>>32)&0xffffffff)); + #endif +} + +EXPORT int32_t my32_accept4(x64emu_t* emu, int32_t fd, void* a, void* l, int32_t flags) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "accept4"); + if(f) + return ((iFippi_t)f)(fd, a, l, flags); + if(!flags) + return accept(fd, a, l); + return syscall(__NR_accept4, fd, a, l, flags); +} + +EXPORT int32_t my32_fallocate64(int fd, int mode, int64_t offs, int64_t len) +{ + iFiiII_t f = NULL; + static int done = 0; + if(!done) { + library_t* lib = my_lib; + f = (iFiiII_t)dlsym(lib->priv.w.lib, "fallocate64"); + done = 1; + } + if(f) + return f(fd, mode, offs, len); + else + return syscall(__NR_fallocate, fd, mode, (uint32_t)(offs&0xffffffff), (uint32_t)((offs>>32)&0xffffffff), (uint32_t)(len&0xffffffff), (uint32_t)((len>>32)&0xffffffff)); + //return posix_fallocate64(fd, offs, len); +} + +EXPORT int my32_getopt(int argc, char* const argv[], const char *optstring) +{ + int ret = getopt(argc, argv, optstring); + my32_checkGlobalOpt(); + return ret; +} + +EXPORT int my32_getopt_long(int argc, char* const argv[], const char* optstring, const struct option *longopts, int *longindex) +{ + int ret = getopt_long(argc, argv, optstring, longopts, longindex); + my32_checkGlobalOpt(); + return ret; +} + +EXPORT int my32_getopt_long_only(int argc, char* const argv[], const char* optstring, const struct option *longopts, int *longindex) +{ + int ret = getopt_long_only(argc, argv, optstring, longopts, longindex); + my32_checkGlobalOpt(); + return ret; +} +#endif + +EXPORT struct __processor_model +{ + unsigned int __cpu_vendor; + unsigned int __cpu_type; + unsigned int __cpu_subtype; + unsigned int __cpu_features[1]; +} my32___cpu_model; + +#include "cpu_info.h" +void InitCpuModel() +{ + // some pseudo random cpu info... + my32___cpu_model.__cpu_vendor = VENDOR_INTEL; + my32___cpu_model.__cpu_type = INTEL_PENTIUM_M; + my32___cpu_model.__cpu_subtype = 0; // N/A + my32___cpu_model.__cpu_features[0] = (1<__jmpbuf; + //restore regs + R_EBX = jpbuff->save_ebx; + R_ESI = jpbuff->save_esi; + R_EDI = jpbuff->save_edi; + R_EBP = jpbuff->save_ebp; + R_ESP = jpbuff->save_esp; + // jmp to saved location, plus restore val to eax + R_EAX = __val; + R_EIP = jpbuff->save_eip; + if(((__jmp_buf_tag_t*)p)->__mask_was_saved) { + sigprocmask(SIG_SETMASK, &((__jmp_buf_tag_t*)p)->__saved_mask, NULL); + } + if(emu->flags.quitonlongjmp) { + emu->flags.longjmp = 1; + emu->quit = 1; + } +} + +EXPORT int32_t my32___sigsetjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int savesigs) +{ + jump_buff_i386_t *jpbuff = &((__jmp_buf_tag_t*)p)->__jmpbuf; + // save the buffer + jpbuff->save_ebx = R_EBX; + jpbuff->save_esi = R_ESI; + jpbuff->save_edi = R_EDI; + jpbuff->save_ebp = R_EBP; + jpbuff->save_esp = R_ESP+4; // include "return address" + jpbuff->save_eip = *(uint32_t*)from_ptr(R_ESP); + if(savesigs) { + if(sigprocmask(SIG_SETMASK, NULL, &((__jmp_buf_tag_t*)p)->__saved_mask)) + ((__jmp_buf_tag_t*)p)->__mask_was_saved = 0; + else + ((__jmp_buf_tag_t*)p)->__mask_was_saved = 1; + } else + ((__jmp_buf_tag_t*)p)->__mask_was_saved = 0; + return 0; +} + +EXPORT int32_t my32__setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) +{ + return my32___sigsetjmp(emu, p, 0); +} +EXPORT int32_t my32_setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) +{ + return my32___sigsetjmp(emu, p, 1); +} +#if 0 +EXPORT void my32___explicit_bzero_chk(x64emu_t* emu, void* dst, uint32_t len, uint32_t dstlen) +{ + memset(dst, 0, len); +} + +EXPORT void* my32_realpath(x64emu_t* emu, void* path, void* resolved_path) +{ + + if(isProcSelf(path, "exe")) { + return realpath(emu->context->fullpath, resolved_path); + } + return realpath(path, resolved_path); +} + +EXPORT int my32_readlinkat(x64emu_t* emu, int fd, void* path, void* buf, size_t bufsize) +{ + if(isProcSelf(path, "exe")) { + strncpy(buf, emu->context->fullpath, bufsize); + size_t l = strlen(emu->context->fullpath); + return (l>bufsize)?bufsize:(l+1); + } + return readlinkat(fd, path, buf, bufsize); +} + +#endif +EXPORT void* my32_mmap(x64emu_t* emu, void *addr, size_t length, int prot, int flags, int fd, int offset) +{ + if(prot&PROT_WRITE) + prot|=PROT_READ; // PROT_READ is implicit with PROT_WRITE on i386 + #ifdef __x86_64__ + flags |= MAP_32BIT; + #endif + if(box64_log", addr, length, prot, flags, fd, offset);} + void* new_addr = addr?addr:find32bitBlock(length); + void* ret = mmap(new_addr, length, prot, flags, fd, offset); + if(!addr && ret!=new_addr && ret!=(void*)-1) { + munmap(ret, length); + loadProtectionFromMap(); // reload map, because something went wrong previously + new_addr = find31bitBlockNearHint(addr, length, 0); // is this the best way? + ret = mmap(new_addr, length, prot, flags, fd, offset); + } + if(box64_log", addr, length, prot, flags, fd, offset);} + void* new_addr = (flags&MAP_FIXED)?addr:find31bitBlockNearHint(addr, length, 0); + void* ret = mmap64(new_addr, length, prot, flags, fd, offset); + if(!addr && ret!=new_addr && ret!=(void*)-1) { + munmap(ret, length); + loadProtectionFromMap(); // reload map, because something went wrong previously + new_addr = find31bitBlockNearHint(addr, length, 0); + ret = mmap64(new_addr, length, prot, flags, fd, offset); + } else if(addr && ret!=(void*)-1 && ret!=new_addr && + ((uintptr_t)ret&0xffff) && !(flags&MAP_FIXED) && box64_wine) { + munmap(ret, length); + loadProtectionFromMap(); // reload map, because something went wrong previously + new_addr = find31bitBlockNearHint(addr, length, 0); + ret = mmap64(new_addr, length, prot, flags, fd, offset); + if(ret!=(void*)-1 && ret!=addr && ((uintptr_t)ret&0xffff) && box64_wine) { + // addr is probably too high, start again with a low address + munmap(ret, length); + loadProtectionFromMap(); // reload map, because something went wrong previously + new_addr = find31bitBlockNearHint(NULL, length, 0); // is this the best way? + ret = mmap64(new_addr, length, prot, flags, fd, offset); + if(ret!=(void*)-1 && (uintptr_t)ret&0xffff) { + munmap(ret, length); + ret = (void*)-1; + } + } + } + if(box64_log", old_addr, old_size, new_size, flags, new_addr); + void* ret = mremap(old_addr, old_size, new_size, flags, new_addr); + dynarec_log(/*LOG_DEBUG*/LOG_NONE, "%p\n", ret); + if(ret==(void*)-1) + return ret; // failed... + uint32_t prot = getProtection((uintptr_t)old_addr)&~PROT_CUSTOM; + if(ret==old_addr) { + if(old_size && old_sizer, 3, cookie->cookie, buf, size); +} +static ssize_t my32_cookie_write(void *p, const char *buf, size_t size) +{ + my32_cookie_t* cookie = (my32_cookie_t*)p; + return (ssize_t)RunFunction(my_context, cookie->w, 3, cookie->cookie, buf, size); +} +static int my32_cookie_seek(void *p, off64_t *offset, int whence) +{ + my32_cookie_t* cookie = (my32_cookie_t*)p; + return RunFunction(my_context, cookie->s, 3, cookie->cookie, offset, whence); +} +static int my32_cookie_close(void *p) +{ + my32_cookie_t* cookie = (my32_cookie_t*)p; + int ret = 0; + if(cookie->c) + ret = RunFunction(my_context, cookie->c, 1, cookie->cookie); + free(cookie); + return ret; +} +EXPORT void* my32_fopencookie(x64emu_t* emu, void* cookie, void* mode, void* read, void* write, void* seek, void* close) +{ + cookie_io_functions_t io_funcs = {read?my32_cookie_read:NULL, write?my32_cookie_write:NULL, seek?my32_cookie_seek:NULL, my32_cookie_close}; + my32_cookie_t *cb = (my32_cookie_t*)calloc(1, sizeof(my32_cookie_t)); + cb->r = (uintptr_t)read; + cb->w = (uintptr_t)write; + cb->s = (uintptr_t)seek; + cb->c = (uintptr_t)close; + cb->cookie = cookie; + return fopencookie(cb, mode, io_funcs); +} +#endif + +EXPORT long my32_prlimit64(void* pid, uint32_t res, void* new_rlim, void* old_rlim) +{ + return syscall(__NR_prlimit64, pid, res, new_rlim, old_rlim); +} + +EXPORT void* my32_reallocarray(void* ptr, size_t nmemb, size_t size) +{ + return realloc(ptr, nmemb*size); +} + +#ifndef __OPEN_NEEDS_MODE +# define __OPEN_NEEDS_MODE(oflag) \ + (((oflag) & O_CREAT) != 0) +// || ((oflag) & __O_TMPFILE) == __O_TMPFILE) +#endif +EXPORT int my32___open_nocancel(x64emu_t* emu, void* file, int oflag, int* b) +{ + int mode = 0; + if (__OPEN_NEEDS_MODE (oflag)) + mode = b[0]; + return openat(AT_FDCWD, file, oflag, mode); +} + +EXPORT int my32___libc_alloca_cutoff(x64emu_t* emu, size_t size) +{ + // not always implemented on old linux version... + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "__libc_alloca_cutoff"); + if(f) + return ((iFL_t)f)(size); + // approximate version but it's better than nothing.... + return (size<=(65536*4)); +} + +// DL functions from wrappedlibdl.c +void* my32_dlopen(x64emu_t* emu, void *filename, int flag); +int my32_dlclose(x64emu_t* emu, void *handle); +void* my32_dlsym(x64emu_t* emu, void *handle, void *symbol); +EXPORT int my32___libc_dlclose(x64emu_t* emu, void* handle) +{ + return my32_dlclose(emu, handle); +} +EXPORT void* my32___libc_dlopen_mode(x64emu_t* emu, void* name, int mode) +{ + return my32_dlopen(emu, name, mode); +} +EXPORT void* my32___libc_dlsym(x64emu_t* emu, void* handle, void* name) +{ + return my32_dlsym(emu, handle, name); +} +#endif +// all obstack function defined in obstack.c file +void obstackSetup(); +#if 0 +EXPORT int my32_nanosleep(const struct timespec *req, struct timespec *rem) +{ + if(!req) + return 0; // workaround for some strange calls + return nanosleep(req, rem); +} +#endif +// wrapped malloc using calloc, it seems x86 malloc set alloc'd block to zero somehow +EXPORT void* my32_malloc(unsigned long size) +{ + return calloc(1, size); +} +#if 0 +#ifndef __NR_memfd_create +#define MFD_CLOEXEC 0x0001U +#define MFD_ALLOW_SEALING 0x0002U +EXPORT int my32_memfd_create(x64emu_t* emu, void* name, uint32_t flags) +{ + // try to simulate that function + uint32_t fl = O_RDWR | O_CREAT; + if(flags&MFD_CLOEXEC) + fl |= O_CLOEXEC; + int tmp = shm_open(name, fl, S_IRWXU); + if(tmp<0) return -1; + shm_unlink(name); // remove the shm file, but it will still exist because it's currently in use + return tmp; +} +#endif + +#ifndef GRND_RANDOM +#define GRND_RANDOM 0x0002 +#endif +EXPORT int my32_getentropy(x64emu_t* emu, void* buffer, size_t length) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "getentropy"); + if(f) + return ((iFpL_t)f)(buffer, length); + // custom implementation + if(length>256) { + errno = EIO; + return -1; + } + int ret = my32_getrandom(emu, buffer, length, GRND_RANDOM); + if(ret!=length) { + errno = EIO; + return -1; + } + return 0; +} + +EXPORT void my32_mcount(void* frompc, void* selfpc) +{ + // stub doing nothing... + return; +} + +#ifndef ANDROID +union semun { + int val; /* Value for SETVAL */ + struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ + unsigned short *array; /* Array for GETALL, SETALL */ + struct seminfo *__buf; /* Buffer for IPC_INFO + (Linux-specific) */ +}; +#endif + +EXPORT int my32_semctl(x64emu_t* emu, int semid, int semnum, int cmd, union semun b) +{ + iFiiiV_t f = semctl; + return ((iFiiiV_t)f)(semid, semnum, cmd, b); +} + +#ifndef ANDROID +EXPORT int my32_on_exit(x64emu_t* emu, void* f, void* args) +{ + return on_exit(findon_exitFct(f), args); +} +#endif +#endif + +EXPORT long my32_strtol(void* nptr, ptr_t* endptr, int base) +{ + void* endp; + long ret = strtol(nptr, (char**)(endptr?(&endp):NULL), base); + if(endptr) + *endptr = to_ptrv(endp); + return ret; +} + +EXPORT char** my32_environ = NULL; +EXPORT char** my32__environ = NULL; +EXPORT char** my32___environ = NULL; // all aliases + +EXPORT char* my32___progname = NULL; +EXPORT char* my32___progname_full = NULL; +EXPORT char* my32_program_invocation_name = NULL; +EXPORT char* my32_program_invocation_short_name = NULL; + +EXPORT ptr_t my32_stdin = 0; +EXPORT ptr_t my32_stdout = 0; +EXPORT ptr_t my32_stderr = 0; + +EXPORT int my32___libc_single_threaded = 0; + +#define PRE_INIT\ + if(1) \ + my_lib = lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);\ + else + +#ifdef ANDROID +//#define NEEDED_LIBS \ +// "libm.so", "libdl.so" +#else +#define NEEDED_LIBS \ + "ld-linux.so.2", "libpthread.so.0", "librt.so.1", "libdl.so.2" +#endif + +#define CUSTOM_INIT \ + box64->libclib = lib; \ + my_lib = lib; \ + InitCpuModel(); \ + ctSetup(); \ + /*obstackSetup();*/ \ + my32_environ = my32__environ = my32___environ = box64->envv; \ + my32___progname_full = my32_program_invocation_name = box64->argv[0]; \ + my32___progname = my32_program_invocation_short_name = \ + strrchr(box64->argv[0], '/'); \ + my32_stdin = to_hashv(stdin); \ + my32_stdout = to_hashv(stdout);\ + my32_stderr = to_hashv(stderr); + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibc_private.h b/src/wrapped32/wrappedlibc_private.h new file mode 100755 index 00000000..c43f0f21 --- /dev/null +++ b/src/wrapped32/wrappedlibc_private.h @@ -0,0 +1,2178 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) && defined(GOS)) +#error Meh... +#endif + +// FILE* is h (because stdin/stdout/stderr might be 64bits, maybe other special file can be too) +// locale_t needs special handling, with to_locale / from_locale (and is a / A) + +// a64l +//GO(abort, vFv) +//GO(abs, iFi) +//GOW(accept, iFipp) +//GOM(accept4, iFEippi) //%% glibc 2.10+ +//GOW(access, iFpi) +// acct +//GOW(addmntent, iFpp) +// addseverity +// adjtime // Weak +// adjtimex // Weak +// __adjtimex +// advance // Weak +// __aeabi_assert +// __aeabi_atexit +// __aeabi_errno_addr +// __aeabi_localeconv +// __aeabi_MB_CUR_MAX +// __aeabi_memclr +// __aeabi_memclr4 +// __aeabi_memclr8 +// __aeabi_memcpy +// __aeabi_memcpy4 +// __aeabi_memcpy8 +// __aeabi_memmove +// __aeabi_memmove4 +// __aeabi_memmove8 +// __aeabi_memset +// __aeabi_memset4 +// __aeabi_memset8 +//DATAV(__after_morecore_hook, 4) +GO(alarm, iFu) +//GO2(aligned_alloc, pFuu, memalign) +//GO(alphasort, iFpp) +//GO(alphasort64, iFpp) +//DATA(argp_err_exit_status, 4) +// argp_error // Weak +// argp_failure // Weak +// argp_help // Weak +// argp_parse // Weak +// argp_program_bug_address // type B +// argp_program_version // type B +// argp_program_version_hook // type B +// argp_state_help // Weak +// argp_usage // Weak +// argz_add // Weak +// argz_add_sep // Weak +// argz_append // Weak +// __argz_count +// argz_count // Weak +// argz_create // Weak +//GOW(argz_create_sep, iFpipp) +// argz_delete +// argz_extract // Weak +//GOW(argz_insert, iFpppp) +// __argz_next +//GOW(argz_next, pFpLp) +// argz_replace // Weak +// __argz_stringify +//GOW(argz_stringify, vFpLi) +//GO(asctime, pFp) +//GOW(asctime_r, pFpp) +//GOWM(asprintf, iFEppV) //%% +//GOM(__asprintf, iFEppV) //%% +//GOM(__asprintf_chk, iFEpipV) //%% +// __assert +//GO(__assert_fail, vFppup) +//GO(__assert_perror_fail, vFipup) +//GO(atof, dFp) +//GO(atoi, iFp) +//GO(atol, lFp) +//GO(atoll, IFp) +// authdes_create +// authdes_getucred +// authdes_pk_create +// _authenticate +// authnone_create +// authunix_create +// authunix_create_default +//GOW(backtrace, iFpi) //TODO: probably a my_backtrace version, that use emulated stack instead +//GO(__backtrace, iFpi) +//GO(__backtrace_symbols, pFpi) +//GOW(backtrace_symbols, pFpi) +//GO(__backtrace_symbols_fd, vFpii) +//GOW(backtrace_symbols_fd, vFpii) +//GO(basename, pFp) +//GOW(bcmp, iFppL) +//GO(bcopy, vFppL) +// bdflush +//GOW(bind, iFipu) +// bindresvport +//GOW(bindtextdomain, pFpp) +//GOW(bind_textdomain_codeset, pFpp) +//GOW(brk, iFp) +// __bsd_getpgrp +// bsd_signal // Weak +//GOM(bsearch, pFEppLLp) //%% +GOW(btowc, iFi) +//GOW(bzero, vFpL) +//GO(__bzero, vFpL) +GOW(calloc, pFLL) +// callrpc +//GOW(canonicalize_file_name, pFp) +// capget +// capset +//GO(catclose, iFp) +//GO(catgets, pFpiip) +//GO(catopen, pFpi) +// cbc_crypt +//GO(cfgetispeed, uFp) +//GO(cfgetospeed, uFp) +//GO(cfmakeraw, vFp) +//GOW(cfree, vFp) +//GO(cfsetispeed, iFpu) +//GO(cfsetospeed, iFpu) +//GO(cfsetspeed, iFpi) +//GOW(chdir, iFp) +//DATA(__check_rhosts_file, 4) +// chflags +// __chk_fail +//GOW(chmod, iFpu) +GOW(chown, iFpuu) +//GO(chroot, iFp) +//GOW(clearenv, iFv) +//GO(clearerr, vFp) +//GO(clearerr_unlocked, vFp) +// clnt_broadcast +// clnt_create +// clnt_pcreateerror +// clnt_perrno +// clnt_perror +// clntraw_create +// clnt_spcreateerror +// clnt_sperrno +// clnt_sperror +// clnttcp_create +// clntudp_bufcreate +// clntudp_create +// clntunix_create +GO(clock, LFv) +// clone // Weak +// __clone +GOW(close, iFi) +// __close // Weak +//GOW(closedir, iFp) +GO(closelog, vFv) +//GO(__cmsg_nxthdr, pFpp) +//GO(confstr, uFipu) +// __confstr_chk +//GOW(connect, iFipu) +//GOW(__connect, iFipu) +// copysign // Weak +// copysignf // Weak +// copysignl // Weak +//GOW(creat, iFpu) +//GO(creat64, iFpu) +// create_module // Weak +//GO(ctermid, pFp) +//GO(ctime, pFp) +//GO(ctime_r, pFpp) +//DATAM(__ctype_b, 4) +//GO(__ctype_b_loc, pFv) +//GOW(__ctype_get_mb_cur_max, LFv) +//DATAM(__ctype_tolower, 4) +//GO(__ctype_tolower_loc, pFv) +//DATAM(__ctype_toupper, 4) +//GO(__ctype_toupper_loc, pFv) +// __curbrk // type B +//GO(cuserid, pFp) +GOM(__cxa_atexit, iFEppp) //%% +GOM(atexit, iFEp) //%% just in case +GOM(__cxa_finalize, vFEp) //%% +DATAM(__cpu_model, 16) +//GOM(__cxa_thread_atexit_impl, iFEppp) //%% +// __cyg_profile_func_enter +// __cyg_profile_func_exit +// daemon +//DATAV(daylight, 4) +// __daylight // type B +//GOW(dcgettext, pFppi) +//GO(__dcgettext, pFppi) +//GOW(dcngettext, pFpppui) +// __default_morecore +// __default_rt_sa_restorer_v1 +// __default_rt_sa_restorer_v2 +// __default_sa_restorer_v1 +// __default_sa_restorer_v2 +// delete_module +// des_setparity +//GOW(dgettext, pFpp) +//GO(__dgettext, pFpp) +//GO(difftime, dFuu) +//GO(dirfd, iFp) +//GO(dirname, pFp) +//GOS(div, pFpii) //%%,noE +// _dl_addr +//GOM(dl_iterate_phdr, iFEpp) //%% +// _dl_mcount_wrapper +// _dl_mcount_wrapper_check +// _dl_open_hook // type B +// _dl_starting_up // Weak +// _dl_sym +// _dl_vsym +//GOW(dngettext, pFpppu) +//GOM(dprintf, iFEipV) +//GOM(__dprintf_chk, iFEivpV) //%% +GO(drand48, dFv) +// drand48_r +GOW(dup, iFi) +GOW(dup2, iFii) +GO(__dup2, iFii) +GO(dup3, iFiiO) +//GOW(duplocale, pFp) +//GO(__duplocale, pFp) +// dysize +//GOW(eaccess, iFpi) +// ecb_crypt +// ecvt +//GO(ecvt_r, iFdipppL) +// endaliasent +// endfsent +GO(endgrent, vFv) +GO(endhostent, vFv) +//GOW(endmntent, iFp) +// __endmntent +// endnetent +// endnetgrent +GO(endprotoent, vFv) +GO(endpwent, vFv) +// endrpcent +GO(endservent, vFv) +GO(endspent, vFv) +// endttyent +// endusershell +GOW(endutent, vFv) +// endutxent +//DATAM(environ, 4) +//DATAM(_environ, 4) +//DATAM(__environ, 4) // type B +// envz_add +// envz_entry +// envz_get +// envz_merge +// envz_remove +// envz_strip +GOM(epoll_create, iFEi) //%% not needed, but used in syscall +GOM(epoll_create1, iFEO) //%% +//GOM(epoll_ctl, iFEiiip) //%% align epool_event structure +// epoll_pwait +//GOM(epoll_wait, iFEipii) //%% need realign of epoll_event structure +// erand48 +// erand48_r // Weak +//GO(err, vFippppppppp) +// errno // type B +//GO(__errno_location, pFv) +//GOW(error, vFiippppppppp) // Simple attempt: there is a vararg, but the alignment will/may be off if it tries some Double in the "printf" part +// error_at_line // Weak +// error_message_count // type B +// error_one_per_line // type B +// error_print_progname // type B +//GO(errx, vFippppppppp) +//GO(ether_aton, pFp) +//GO(ether_aton_r, pFpp) +//GO(ether_hostton, iFpp) +//GO(ether_line, iFppp) +//GO(ether_ntoa, pFp) +//GO(ether_ntoa_r, pFpp) +//GO(ether_ntohost, iFpp) +//GOW(euidaccess, iFpi) +//GO(eventfd, iFui) +//GO(eventfd_read, iFip) +//GO(eventfd_write, iFiU) +//GO2(execl, iFEpV, my_execv) +//GO2(execle, iFEpV, my_execve) // Nope! This one needs wrapping, because is char*, char*, ..., char*[] +//GO2(execlp, iFpV, execvp) +//GOWM(execv, iFEpp) //%% +//GOM(execve, iFEppp) //%% and this one too... +//GOWM(execvp, iFEpp) +GO(exit, vFi) +GO(_exit, vFi) +GOW(_Exit, vFi) +//GOM(__explicit_bzero_chk, vFEpuu) //%% not always defined +//GO(faccessat, iFipii) +// fattach +//GO(__fbufsize, uFp) +GOW(fchdir, iFi) +// fchflags +GOW(fchmod, iFiu) +//GO(fchmodat, iFipui) +GOW(fchown, iFiuu) +//GO(fchownat, iFipuii) +GO(fclose, iFH) +GOW(fcloseall, iFv) +GOM(fcntl, iFEiiN) //%% this also use a vararg for 3rd argument +GOM(__fcntl, iFEiiN) //%% +GOM(fcntl64, iFEiiN) //%% +//GO(fcvt, pFdipp) +//GO(fcvt_r, iFdipppL) +GO(fdatasync, iFi) +// fdetach +//GO(fdopen, pFip) +//GOW(fdopendir, pFi) +//GOW(feof, iFp) +//GO(feof_unlocked, iFp) +//GOW(ferror, iFp) +//GO(ferror_unlocked, iFp) +//GO(fexecve, iFipp) //TODO: Check if needed to be wrapped, and target checked for x86 / native? +GOW(fflush, iFh) +//GO(fflush_unlocked, iFS) +GO(ffs, iFi) +// __ffs +GOW(ffsl, iFi) +GO(ffsll, iFI) +GOW(fgetc, iFh) +GOW(fgetc_unlocked, iFh) +// fgetgrent +// fgetgrent_r // Weak +//GO(fgetpos, iFpp) +//GO(fgetpos64, iFpp) +// fgetpwent +// fgetpwent_r // Weak +//GOW(fgets, pFpip) +//GO(__fgets_chk, pFpuip) +// fgetspent +// fgetspent_r // Weak +//GO(fgets_unlocked, pFpip) +// __fgets_unlocked_chk +//GOW(fgetwc, iFp) +//GOW(fgetwc_unlocked, iFp) +//GO(fgetws, pFpip) +// __fgetws_chk +//GO(fgetws_unlocked, pFpip) +// __fgetws_unlocked_chk +//GO(fgetxattr, iFippu) +//GO(fileno, iFp) +//GOW(fileno_unlocked, iFp) +GOW(finite, iFd) +GO(__finite, iFd) +GOW(finitef, iFf) +// __finitef +// finitel // Weak +// __finitel +// __flbf +//GO(flistxattr, iFipu) +GOW(flock, iFii) +//GOW(flockfile, vFp) +GOW(_flushlbf, vFv) +//GO(fmemopen, pFpup) +// fmtmsg +//GO(fnmatch, iFppi) +GOM(fopen, hFEpp) //%% +//GOWM(fopen64, pFEpp) //%% +//GOM(fopencookie, pFEpppppp) //%% last 4p are a struct with 4 callbacks... +GOWM(fork, iFEv) //%% +GOM(__fork, iFEv) //%% +// __fortify_fail +GOW(fpathconf, iFii) +//GO(__fpending, uFp) +//GOM(fprintf, iFEppV) //%% +//GOM(__fprintf_chk, iFEpvpV) //%% +// __fpu_control // type B +//GO(__fpurge, vFp) +//GOW(fputc, iFip) +//GO(fputc_unlocked, iFip) +GOW(fputs, iFhp) // Weak +//GO(fputs_unlocked, iFpp) +//GO(fputwc, iFip) +//GO(fputwc_unlocked, iFip) +//GO(fputws, iFpp) +//GO(fputws_unlocked, iFpp) +//GOW(fread, LFpLLp) +//GO(__freadable, iFp) +//GO(__fread_chk, uFpuuup) +//GO(__freading, iFp) +//GO(fread_unlocked, uFpuup) +//GO(__fread_unlocked_chk, uFpuuup) +GO(free, vFp) +//GO(freeaddrinfo, vFp) +//DATAV(__free_hook, 4) +//GO(freeifaddrs, vFp) +GOW(freelocale, vFA) +GO(__freelocale, vFA) +//GO(fremovexattr, iFip) +//GO(freopen, pFppp) +//GO(freopen64, pFppp) +// frexp // Weak +// frexpf // Weak +// frexpl // Weak +//GO2(fscanf, iFppV, vfscanf) +//GO(fseek, iFpli) +//GO(fseeko, iFpli) +//GO(fseeko64, iFpIi) +//GO(__fsetlocking, iFpi) +//GO(fsetpos, iFpp) +//GO(fsetpos64, iFpp) +//GO(fsetxattr, iFippui) +//GOW(fstatfs, iFip) +//GOWM(fstatfs64, iFip) //%%,noE +//GO(fstatvfs, iFip) +//GOW(fstatvfs64, iFip) // alignment? +GOW(fsync, iFi) +//GOW(ftell, lFp) +//GO(ftello, lFp) +//GO(ftello64, IFp) +//GO(ftime, iFp) +//GO(ftok, iFpi) +GOW(ftruncate, iFiu) +GOW(ftruncate64, iFiI) +//GOW(ftrylockfile, iFp) +//GOM(fts_children, pFEpi) //%% +//GOM(fts_close, iFEp) //%% +//GOM(fts_open, pFEpip) //%% +//GOM(fts_read, pFEp) //%% +// fts_set +//GOM(ftw, iFEppi) //%% +//GOM(ftw64, iFEppi) //%% +//GOW(funlockfile, vFp) +//GO(futimens, iFip) +//GOW(futimes, iFip) //int futimes(int fd, const struct timeval tv[2]) +//GO(futimesat, iFippp) +// fwide +//GOWM(fwprintf, iFEppV) //%% +//GOM(__fwprintf_chk, iFEpvpV) //%% +//GO(__fwritable, iFp) +GOW(fwrite, LFpLLh) +//GO(fwrite_unlocked, uFpuup) +//GO(__fwriting, iFp) +// fwscanf +//GOM(__fxstat, iFEiip) //%% +//GOM(__fxstat64, iFEiip) //%% need reaalign of struct stat64 +//GOM(__fxstatat, iFEiippi) //%% +//GOM(__fxstatat64, iFEiippi) //%% struct stat64 again +// __gai_sigqueue +//GO(gai_strerror, pFi) +// __gconv_get_alias_db +// __gconv_get_cache +// __gconv_get_modules_db +// gcvt +//GO(getaddrinfo, iFpppp) +// getaliasbyname +// getaliasbyname_r +// getaliasent +// getaliasent_r +// get_avphys_pages // Weak +//GOW(getc, iFp) +GOW(getchar, iFv) +GO(getchar_unlocked, iFv) +GOM(getcontext, iFEp) //%% +//GOW(getc_unlocked, iFp) +//GO(get_current_dir_name, pFv) +//GOW(getcwd, pFpL) +//GO(__getcwd_chk, pFpLL) +//GO(getdate, pFp) +// getdate_err // type B +// getdate_r // Weak +//GOW(getdelim, iFppip) +//GOW(__getdelim, iFppip) +// getdirentries +// getdirentries64 +//GO(getdomainname, iFpu) +// __getdomainname_chk +GOW(getdtablesize, iFv) +GOW(getegid, iFv) +GO(getenv, pFp) +//GOW(geteuid, pFv) +// getfsent +// getfsfile +// getfsspec +GOW(getgid, iFv) +//GO(getgrent, pFv) +// getgrent_r +//GO(getgrgid, pFu) +//GO(getgrgid_r, iFuppup) +//GO(getgrnam, pFp) +//GO(getgrnam_r, iFpppup) +//GO(getgrouplist, iFpipp) +GOW(getgroups, iFiu) +// __getgroups_chk +//GO(gethostbyaddr, pFpui) +//GO(gethostbyaddr_r, iFpuippupp) +//GO(gethostbyname, pFp) +//GO(gethostbyname2, pFpi) +//GO(gethostbyname2_r, iFpippupp) +//GO(gethostbyname_r, iFpppupp) +//GO(gethostent, pFv) +//GO(gethostent_r, iFppupp) +// gethostid +//GOW(gethostname, iFpu) +// __gethostname_chk +//GO(getifaddrs, iFp) +// getipv4sourcefilter +//GOW(getitimer, iFip) +// get_kernel_syms // Weak +//GOW(getline, iFppp) +//GO(getloadavg, iFpi) +//GO(getlogin, pFv) +//GO(getlogin_r, iFpu) +// __getlogin_r_chk +//GO(getmntent, pFp) +// __getmntent_r +//GOW(getmntent_r, pFpppi) +// getmsg +// get_myaddress +//GO(getnameinfo, iFpupupui) +// getnetbyaddr +// getnetbyaddr_r +// getnetbyname +// getnetbyname_r +// getnetent +// getnetent_r +// getnetgrent +// getnetgrent_r // Weak +// getnetname +//GOW(get_nprocs, iFv) +//GOW(get_nprocs_conf, iFv) +//GOM(getopt, iFipp) //%noE +//GOM(getopt_long, iFipppp) //%noE +//GOM(getopt_long_only, iFipppp) //%noE +GOW(getpagesize, iFv) +GO(__getpagesize, iFv) +//GO(getpass, pFp) +//GOW(getpeername, iFipp) +GOW(getpgid, uFu) +// __getpgid +GO(getpgrp, iFv) +// get_phys_pages // Weak +GO(getpid, uFv) +GO(__getpid, uFv) +// getpmsg +GOW(getppid, uFv) +GO(getpriority, iFii) +//GOM(getrandom, iFEpuu) //%% +//GO(getprotobyname, pFp) +//GO(getprotobyname_r, iFpppup) +//GO(getprotobynumber, pFi) +//GO(getprotobynumber_r, iFippup) +//GO(getprotoent, pFv) +//GO(getprotoent_r, iFppup) +GOW(getpt, iFv) +// getpublickey +// getpw // Weak +//GO(getpwent, pFv) +// getpwent_r +//GO(getpwnam, pFp) +//GO(getpwnam_r, iFpppup) +//GOM(getpwuid, pFEu) +//GO(getpwuid_r, iFuppup) +//GOW(getresgid, iFppp) +//GOW(getresuid, iFppp) +//GO(getrlimit, iFip) +//GO(getrlimit64, iFip) +// getrpcbyname +// getrpcbyname_r +// getrpcbynumber +// getrpcbynumber_r +// getrpcent +// getrpcent_r +// getrpcport +//GOW(getrusage, iFip) +//GOW(gets, pFp) +// __gets_chk +// getsecretkey +//GO(getservbyname, pFpp) +//GO(getservbyname_r, iFppppup) +//GO(getservbyport, pFip) +//GO(getservbyport_r, iFipppup) +// getservent +//GO(getservent_r, iFppup) +GO(getsid, uFu) +//GOW(getsockname, iFipp) +//GOW(getsockopt, iFiiipp) +// getsourcefilter +//GO(getspent, pFv) +// getspent_r +//GO(getspnam, pFp) +// getspnam_r +// getsubopt +//GOW(gettext, pFp) +//GOW(gettimeofday, iFpp) +//GO(__gettimeofday, iFpp) +// getttyent +// getttynam +GOW(getuid, uFv) +// getusershell +//GOW(getutent, pFv) +//GOW(getutent_r, iFpp) +//GOW(getutid, pFp) +//GOW(getutid_r, iFppp) +//GOW(getutline, pFp) +//GOW(getutline_r, iFppp) +// getutmp +// getutmpx +// getutxent +// getutxid +// getutxline +// getw +//GO2(getwc, iFp, fgetwc) +GO(getwchar, iFv) +GO(getwchar_unlocked, iFv) +//GOW(getwc_unlocked, iFp) +//GO(getwd, pFp) +// __getwd_chk +//GO(getxattr, iFpppu) +//GOM(glob, iFEpipp) //%% +//GOM(glob64, iFEpipp) //%% +//GO(globfree, vFp) +//GO(globfree64, vFp) +// glob_pattern_p // Weak +//GO(gmtime, pFp) +//GO(__gmtime_r, pFpp) +//GOW(gmtime_r, pFpp) +GO(gnu_dev_major, uFU) +GO(gnu_dev_makedev, UFii) // dev_t seems to be a u64 +GO(gnu_dev_minor, uFU) +//GOW(gnu_get_libc_release, pFv) +//GOW(gnu_get_libc_version, pFv) +// __gnu_mcount_nc +// __gnu_Unwind_Find_exidx +GO(grantpt, iFi) +// group_member // Weak +// gsignal // Weak +// gtty +//GOW(hasmntopt, pFpp) +// hcreate +// hcreate_r +// hdestroy // Weak +// hdestroy_r +//DATA(h_errlist, 4) +// h_errno // type B +//GO(__h_errno_location, pFv) +//GO(herror, vFp) +// h_nerr // type R +// host2netname +// hsearch +// hsearch_r +//GO(hstrerror, pFi) +GO(htonl, uFu) +GO(htons, uFu) +//GO(iconv, LFLpppp) +//GO(iconv_canonicalize, pFp) +GO(iconv_close, iFL) +//GO(iconv_open, LFpp) +//GO(if_freenameindex, vFp) +//GO(if_indextoname, pFup) +//GO(if_nameindex, pFv) +//GO(if_nametoindex, uFp) +// imaxabs // Weak +GOW(imaxdiv, IFII) +//DATA(in6addr_any, 16) // type R +//DATA(in6addr_loopback, 16) // type R +// inb // Weak +//GOW(index, pFpi) +// inet6_opt_append +// inet6_opt_find +// inet6_opt_finish +// inet6_opt_get_val +// inet6_opt_init +// inet6_option_alloc +// inet6_option_append +// inet6_option_find +// inet6_option_init +// inet6_option_next +// inet6_option_space +// inet6_opt_next +// inet6_opt_set_val +// inet6_rth_add +// inet6_rth_getaddr +// inet6_rth_init +// inet6_rth_reverse +// inet6_rth_segments +// inet6_rth_space +//GO(inet_addr, uFp) +//GOW(inet_aton, iFpp) +// inet_lnaof +// inet_makeaddr +// inet_netof +//GO(inet_network, iFp) +// inet_nsap_addr +//GO(inet_nsap_ntoa, pFipp) +//GO(inet_ntoa, pFu) +//GO(inet_ntop, pFippu) +//GO(inet_pton, iFipp) +//GO(initgroups, iFpi) +// init_module +// initstate // Weak +//GOW(initstate_r, iFupup) +// inl // Weak +// innetgr +//GO(inotify_add_watch, iFipu) +GO(inotify_init, iFv) +GO(inotify_init1, iFi) +GO(inotify_rm_watch, iFii) +// insque +// __internal_endnetgrent +// __internal_getnetgrent_r +// __internal_setnetgrent +// inw // Weak +//DATA(_IO_2_1_stderr_, 152) //sizeof(struct _IO_FILE_plus) +//DATA(_IO_2_1_stdin_, 152) +//DATA(_IO_2_1_stdout_, 152) +//GO(_IO_adjust_column, uFupi) +// _IO_adjust_wcolumn +GO(ioctl, iFiLN) //the vararg is just to have optional arg of various type, but only 1 arg +//GO(_IO_default_doallocate, iFS) +//GO(_IO_default_finish, vFSi) +//GO(_IO_default_pbackfail, iFSi) +//GO(_IO_default_uflow, iFS) +//GO(_IO_default_xsgetn, LFSpL) +//GO(_IO_default_xsputn, LFSpL) +//GO(_IO_doallocbuf, vFS) +//GO(_IO_do_write, iFSpL) +// _IO_fclose +// _IO_fdopen +// _IO_feof +// _IO_ferror +// _IO_fflush +// _IO_fgetpos +// _IO_fgetpos64 +// _IO_fgets +//GO(_IO_file_attach, pFSi) +//GO(_IO_file_close, iFS) +//GO(_IO_file_close_it, iFS) +//GO(_IO_file_doallocate, iFS) +// _IO_file_finish +//GO(_IO_file_fopen, pFSppi) +//GO(_IO_file_init, vFS) +//DATA(_IO_file_jumps, 4) +//GO(_IO_file_open, pFSpiiii) +//GO(_IO_file_overflow, iFSi) +//GO(_IO_file_read, lFSpl) +//GO(_IO_file_seek, IFSIi) +//GO(_IO_file_seekoff, IFSIii) +//GO(_IO_file_setbuf, pFSpl) +//GOM(_IO_file_stat, iFESp) +//GO(_IO_file_sync, iFS) +//GO(_IO_file_underflow, iFS) +//GO(_IO_file_write, lFSpl) +//GO(_IO_file_xsputn, LFSpL) +//GO(_IO_flockfile, vFS) +//GO(_IO_flush_all, iFv) +//GO(_IO_flush_all_linebuffered, vFv) +// _IO_fopen +// _IO_fprintf // Weak +// _IO_fputs +// _IO_fread +//GO(_IO_free_backup_area, vFS) +// _IO_free_wbackup_area +// _IO_fsetpos +// _IO_fsetpos64 +// _IO_ftell +// _IO_ftrylockfile +//GO(_IO_funlockfile, vFS) +// _IO_fwrite +//GO(_IO_getc, iFS) +// _IO_getline +//GO(_IO_getline_info, LFSpLiip) +// _IO_gets +//GO(_IO_init, vFSi) +//GO(_IO_init_marker, vFpS) +// _IO_init_wmarker +// _IO_iter_begin +// _IO_iter_end +// _IO_iter_file +// _IO_iter_next +// _IO_least_wmarker +//GO(_IO_link_in, vFp) +//DATA(_IO_list_all, 4) +// _IO_list_lock +// _IO_list_resetlock +// _IO_list_unlock +//GO(_IO_marker_delta, iFp) +//GO(_IO_marker_difference, iFpp) +//GO(_IO_padn, iFpii) +//GO(_IO_peekc_locked, iFp) +GOW(ioperm, iFuui) +GOW(iopl, iFi) +// _IO_popen +// _IO_printf +//GO(_IO_proc_close, iFS) +//GO(_IO_proc_open, pFSpp) +//GO(_IO_putc, iFip) +// _IO_puts +//GO(_IO_remove_marker, vFp) +//GO(_IO_seekmark, iFSpi) +//GO(_IO_seekoff, IFSIii) +//GO(_IO_seekpos, IFSIi) +// _IO_seekwmark +//GO(_IO_setb, vFSppi) +// _IO_setbuffer +// _IO_setvbuf +//GO(_IO_sgetn, uFppu) +// _IO_sprintf +//GO(_IO_sputbackc, iFSi) +// _IO_sputbackwc +// _IO_sscanf +//GO(_IO_str_init_readonly, vFppi) +//GO(_IO_str_init_static, vFppup) +//GO(_IO_str_overflow, iFSi) +//GO(_IO_str_pbackfail, iFSi) +//GO(_IO_str_seekoff, UFSUii) +//GO(_IO_str_underflow, iFS) +//GO(_IO_sungetc, iFp) +// _IO_sungetwc +//GO(_IO_switch_to_get_mode, iFp) +// _IO_switch_to_main_wget_area +// _IO_switch_to_wbackup_area +// _IO_switch_to_wget_mode +// _IO_ungetc +//GO(_IO_un_link, vFp) +//GO(_IO_unsave_markers, vFp) +// _IO_unsave_wmarkers +//GOM(_IO_vfprintf, iFEpppp) //%% +//GOM(_IO_vfscanf, iFEppp) //%% +// _IO_vsprintf +// _IO_wdefault_doallocate +// _IO_wdefault_finish +// _IO_wdefault_pbackfail +// _IO_wdefault_uflow +// _IO_wdefault_xsgetn +// _IO_wdefault_xsputn +// _IO_wdoallocbuf +// _IO_wdo_write +//DATA(_IO_wfile_jumps, 4) +// _IO_wfile_overflow +// _IO_wfile_seekoff +// _IO_wfile_sync +// _IO_wfile_underflow +// _IO_wfile_xsputn +// _IO_wmarker_delta +// _IO_wsetb +// iruserok +// iruserok_af +GO(isalnum, iFi) +// __isalnum_l +// isalnum_l // Weak +GO(isalpha, iFi) +// __isalpha_l +// isalpha_l // Weak +GO(isascii, iFi) +// __isascii_l // Weak +// isastream +GOW(isatty, iFi) +GO(isblank, iFi) +// __isblank_l +// isblank_l // Weak +GO(iscntrl, iFi) +// __iscntrl_l +// iscntrl_l // Weak +// isctype // Weak +// __isctype +GO(isdigit, iFi) +// __isdigit_l +// isdigit_l // Weak +// isfdtype +GO(isgraph, iFi) +// __isgraph_l +// isgraph_l // Weak +GOW(isinf, iFd) +GO(__isinf, iFd) +GOW(isinff, iFf) +GO(__isinff, iFf) +// isinfl // Weak +// __isinfl +GO(islower, iFi) +// __islower_l +// islower_l // Weak +GOW(isnan, iFd) +GO(__isnan, iFd) +GOW(isnanf, iFf) +GO(__isnanf, iFf) +// isnanl // Weak +// __isnanl +//GOM(__isoc99_fscanf, iFEppV) //%% +// __isoc99_fwscanf +// __isoc99_scanf +//GOM(__isoc99_sscanf, iFEppV) //%% +// __isoc99_swscanf +//GOM(__isoc99_vfscanf, iFEppp) //%% +// __isoc99_vfwscanf +// __isoc99_vscanf +//GOM(__isoc99_vsscanf, iFEppp) //%% TODO: check if ok +// __isoc99_vswscanf +// __isoc99_vwscanf +// __isoc99_wscanf +GO(isprint, iFi) +// __isprint_l +// isprint_l // Weak +GO(ispunct, iFi) +// __ispunct_l +// ispunct_l // Weak +GO(isspace, iFi) +// __isspace_l +// isspace_l // Weak +GO(isupper, iFi) +// __isupper_l +// isupper_l // Weak +GOW(iswalnum, iFi) +// __iswalnum_l +//GOW(iswalnum_l, iFip) +GOW(iswalpha, iFi) +// __iswalpha_l +//GOW(iswalpha_l, iFip) +GOW(iswblank, iFi) +// __iswblank_l +GOW(iswblank_l, iFip) +GOW(iswcntrl, iFi) +// __iswcntrl_l +GOW(iswcntrl_l, iFip) +GOW(iswctype, iFiu) +// __iswctype +GO(__iswctype_l, iFuLp) +// iswctype_l // Weak +GOW(iswdigit, iFi) +// __iswdigit_l +//GOW(iswdigit_l, iFip) +GOW(iswgraph, iFi) +// __iswgraph_l +//GOW(iswgraph_l, iFip) +GOW(iswlower, iFi) +// __iswlower_l +//GOW(iswlower_l, iFip) +GOW(iswprint, iFi) +// __iswprint_l +//GOW(iswprint_l, iFip) +GOW(iswpunct, iFi) +// __iswpunct_l +//GOW(iswpunct_l, iFip) +GOW(iswspace, iFi) +// __iswspace_l +//GOW(iswspace_l, iFip) +GOW(iswupper, iFi) +// __iswupper_l +//GOW(iswupper_l, iFip) +GOW(iswxdigit, iFi) +// __iswxdigit_l +//GOW(iswxdigit_l, iFip) +GO(isxdigit, iFi) +// __isxdigit_l +// isxdigit_l // Weak +// _itoa_lower_digits // type R +// __ivaliduser +//GO(jrand48, iFp) +// jrand48_r // Weak +// key_decryptsession +// key_decryptsession_pk +// __key_decryptsession_pk_LOCAL // type B +// key_encryptsession +// key_encryptsession_pk +// __key_encryptsession_pk_LOCAL // type B +// key_gendes +// __key_gendes_LOCAL // type B +// key_get_conv +// key_secretkey_is_set +// key_setnet +// key_setsecret +GOW(kill, iFli) +GO(killpg, iFii) +// klogctl +// l64a +GO(labs, iFi) +// lchmod +//GOW(lchown, iFpuu) +// lckpwdf // Weak +// lcong48 +// lcong48_r // Weak +// ldexp // Weak +// ldexpf // Weak +// ldexpl // Weak +//GOS(ldiv, pFEpii) //%% return a struct, so address of stuct is on the stack, as a shadow 1st element +//GOM(lfind, pFEpppLp) //%% +//GO(lgetxattr, iFpppu) +GOM(__libc_alloca_cutoff, iFEL) //%% +// __libc_allocate_rtsig +// __libc_allocate_rtsig_private +//GO(__libc_calloc, pFLL) +// __libc_clntudp_bufcreate +GO(__libc_current_sigrtmax, iFv) +// __libc_current_sigrtmax_private +GO(__libc_current_sigrtmin, iFv) +// __libc_current_sigrtmin_private +//GOM(__libc_dlclose, iFEp) //%% +// __libc_dl_error_tsd +//GOM(__libc_dlopen_mode, pFEpi) //%% +//GOM(__libc_dlsym, pFEpp) //%% +// __libc_fatal +// __libc_fork +//GO(__libc_free, vFp) +// __libc_freeres +GOM(__libc_init_first, vFEipV) //%% +// _libc_intl_domainname // type R +//GO2(__libc_open, iFEpOu, my_open) +// __libc_longjmp +// __libc_mallinfo +//GO(__libc_malloc, pFL) +// __libc_mallopt +//GO(__libc_memalign, pFLL) +// __libc_pthread_init +//GO(__libc_pvalloc, pFL) +// __libc_pwrite +//GO2(__libc_read, lFipL, my_read) //%%,noE +//GO(__libc_realloc, pFpL) +// __libc_sa_len +// __libc_siglongjmp +GOM(__libc_start_main, iFEpippppp) //%% +GO2(__libc_sigaction, iFEipp, my32_sigaction) //%% +// __libc_system +// __libc_thread_freeres +//GO(__libc_valloc, pFL) +//GOW(link, iFpp) +//GO(linkat, iFipipi) +GOW(listen, iFii) +//GO(listxattr, iFppu) +// llabs +// lldiv +//GO(llistxattr, iFppu) +// llseek // Weak +// loc1 // type B +// loc2 // type B +//GOW(localeconv, pFv) +//GO(localtime, pFp) +//GOW(localtime_r, pFpp) +GO(lockf, iFiiu) +GO(lockf64, iFiiI) +// locs // type B +GOM(longjmp, vFEpi) //%% +GOM(_longjmp, vFEpi) //%% +GOM(__longjmp_chk, vFEpi) //%% +GO(lrand48, iFv) +// lrand48_r +//GO(lremovexattr, iFpp) +//GOM(lsearch, pFEpppLp) //%% +GOW(lseek, iFiii) +// __lseek // Weak +GOW(lseek64, IFiIi) +//GO(lsetxattr, iFpppui) +//GO(lutimes, iFpp) +//GOM(__lxstat, iFEipp) //%% +//GOM(__lxstat64, iFEipp) //%% +//GO(madvise, iFpLi) +GOM(makecontext, iFEppiV) //%% +//GOW(mallinfo, pFv) +GOM(malloc, pFL) //%%,noE +// malloc_get_state // Weak +//DATAV(__malloc_hook, 4) +//DATAV(__malloc_initialize_hook, 4) +// malloc_set_state // Weak +// malloc_stats // Weak +GOW(malloc_trim, iFu) +//GOW(malloc_usable_size, LFp) +GOW(mallopt, iFii) // Weak +// mallwatch // type B +//GO(mblen, iFpL) +//GOW(mbrlen, LFpLp) +//GO(__mbrlen, LFpLp) +//GOW(mbrtowc, LFppLp) +//GO(__mbrtowc, LFppLp) +//GOW(mbsinit, iFp) +//GOW(mbsnrtowcs, LFppLLp) +// __mbsnrtowcs_chk +//GOW(mbsrtowcs, LFppLp) +// __mbsrtowcs_chk +//GO(mbstowcs, LFppL) +// __mbstowcs_chk +//GO(mbtowc, iFppL) +// mcheck +// mcheck_check_all +// mcheck_pedantic +// _mcleanup +//GOWM(mcount, vFpp) //%%,noE +// _mcount +//GOW(memalign, pFLL) +//DATAV(__memalign_hook, 4) +//GOW(memccpy, pFppiL) +//GO(memchr, pFpiL) +GO(memcmp, iFppL) +GO(memcpy, pFppL) +GO(__memcpy_chk, pFppuL) +// memfrob +//GO(memmem, pFpupu) +//GO(memmove, pFppL) +//GO(__memmove_chk, pFppLL) +//GO(mempcpy, pFppL) +//GO(__mempcpy, pFppu) +// __mempcpy_chk +// __mempcpy_small +//GOW(memrchr, pFpiL) +//GO(memset, pFpiL) +//GO(__memset_chk, pFpiLL) +//GO(mincore, iFpLp) +//GOW(mkdir, iFpu) +//GO(mkdirat, iFipu) +//GO(mkdtemp, pFp) +//GO(mkfifo, iFpu) +//GO(mkfifoat, iFipu) +//GO(mkostemp, iFpi) +//GO(mkostemp64, iFpi) +//GO(mkstemp, iFp) +//GO(mkstemp64, iFp) +//GO(mktemp, pFp) +//GO(mktime, LFp) +//GO(mlock, iFpL) +//GO(mlockall, iFi) +//GOM(mmap, pFEpLiiii) //%% +//GOM(mmap64, pFEpLiiiI) //%% +// modf // Weak +// modff // Weak +// modfl // Weak +// moncontrol // Weak +// monstartup // Weak +// __monstartup +//DATA(__morecore, 4) +//GOW(mount, iFpppup) +// mprobe +//GOM(mprotect, iFEpLi) //%% +// mrand48 +// mrand48_r +//GOWM(mremap, pFEpLLiN) //%% 5th hidden paramerer "void* new_addr" if flags is MREMAP_FIXED +//GO(msgctl, iFiip) +//GOW(msgget, iFpi) +//GOW(msgrcv, lFipLli) +//GOW(msgsnd, iFipLi) +//GOW(msync, iFpLi) +// mtrace +//GO(munlock, iFpL) +//GO(munlockall, iFv) +//GOM(munmap, iFEpL) //%% +// muntrace +//GOWM(nanosleep, iFpp) //%%,noE +// __nanosleep // Weak +// netname2host +// netname2user +GOW(newlocale, aFipa) +GO(__newlocale, aFipa) +// nfsservctl +//GOM(nftw, iFEppii) //%% +//GOM(nftw64, iFEppii) //%% +//GOW(ngettext, pFppu) +GO(nice, iFi) +// _nl_default_dirname // type R +// _nl_domain_bindings // type B +//GO(nl_langinfo, pFu) +//GO(__nl_langinfo_l, pFup) +//GOW(nl_langinfo_l, pFup) +//DATAB(_nl_msg_cat_cntr, 4) // type B +// nrand48 +// nrand48_r // Weak +// __nss_configure_lookup +// __nss_database_lookup +// __nss_disable_nscd +// _nss_files_parse_grent +// _nss_files_parse_pwent +// _nss_files_parse_spent +// __nss_group_lookup +// __nss_group_lookup2 +// __nss_hostname_digits_dots +// __nss_hosts_lookup +// __nss_hosts_lookup2 +// __nss_lookup_function +// __nss_next +// __nss_next2 +// __nss_passwd_lookup +// __nss_passwd_lookup2 +// __nss_services_lookup2 +GOW(ntohl, uFu) +GOW(ntohs, uFu) +// ntp_adjtime // Weak +// ntp_gettime +// _null_auth // type B +// _obstack_allocated_p +//DATAM(obstack_alloc_failed_handler, 4) +//GOM(_obstack_begin, iFpLLpp) //%%,noE +// _obstack_begin_1 +//DATA(obstack_exit_failure, 4) +//GOM(_obstack_free, vFpp) //%%,noE +//GOM(obstack_free, vFpp) //%%,noE +// _obstack_memory_used +//GOM(_obstack_newchunk, vFpi) //%%,noE +// obstack_printf // Weak +// __obstack_printf_chk +//GOWM(obstack_vprintf, iFEpppp) //%% +// __obstack_vprintf_chk +//GOWM(on_exit, iFEpp) //%% +//GO2(__on_exit, iFEpp, my_on_exit) //%% +//GOWM(open, iFEpOu) //%% +//GOWM(__open, iFEpOu) //%% +//GO(__open_2, iFpO) +//GOWM(open64, iFEpOu) //%% +// __open64 // Weak +//GO(__open64_2, iFpO) +//GOW(openat, iFipON) +// __openat_2 +//GOW(openat64, iFipON) +//GO(__openat64_2, iFipON) +// __open_catalog +//GOW(opendir, pFp) +//GO(openlog, vFpii) +// open_memstream +// open_wmemstream +//DATAB(optarg, 4) +//DATA(opterr, 4) +//DATA(optind, 4) +//DATA(optopt, 4) +// outb // Weak +// outl // Weak +// outw // Weak +//GO(__overflow, iFpi) +//GO(parse_printf_format, uFpup) +// passwd2des +//GOW(pathconf, iFpi) +GOW(pause, iFv) +//GO(pclose, iFp) +//GO(perror, vFp) +// personality // Weak +//GOW(pipe, iFp) // the array of 2 int seems to converted as a pointer, on both x86 and arm (and x86_64 too) +// __pipe +//GOW(pipe2, iFpO) // assuming this works the same as pipe, so pointer for array of 2 int +// pivot_root +// pmap_getmaps +// pmap_getport +// pmap_rmtcall +// pmap_set +// pmap_unset +//GOW(poll, iFpui) // poll have an array of struct as 1st argument +//GO(__poll, iFpui) +//GO(popen, pFpp) +GO(posix_fadvise, iFiuui) +GO(posix_fadvise64, iFiuui) +GO(posix_fallocate, iFiii) +GO(posix_fallocate64, iFiII) +// posix_madvise +//GOW(posix_memalign, iFpLL) +// posix_openpt // Weak +//GO(posix_spawn, iFpppppp) +// posix_spawnattr_destroy +// posix_spawnattr_getflags +// posix_spawnattr_getpgroup +// posix_spawnattr_getschedparam +// posix_spawnattr_getschedpolicy +// posix_spawnattr_getsigdefault +// posix_spawnattr_getsigmask +// posix_spawnattr_init +// posix_spawnattr_setflags +// posix_spawnattr_setpgroup +// posix_spawnattr_setschedparam +// posix_spawnattr_setschedpolicy +// posix_spawnattr_setsigdefault +// posix_spawnattr_setsigmask +// posix_spawn_file_actions_addclose +//GO(posix_spawn_file_actions_adddup2, iFpii) +//GO(posix_spawn_file_actions_addopen, iFpipii) +//GO(posix_spawn_file_actions_destroy, iFp) +//GO(posix_spawn_file_actions_init, iFp) +//GOM(posix_spawnp, iFEpppppp) //%% +//GO(ppoll, iFpupp) +GOW(prctl, iFiLLLL) +//GOW(pread, lFipLl) +//GOW(pread64, lFipLI) +// __pread64 // Weak +// __pread64_chk +//GOM(preadv64, lFEipiI) //%% not always present +// __pread_chk +GOM(printf, iFEpV) //%% +GOM(__printf_chk, iFEvpV) //%% +//GO(__printf_fp, iFppp) // does this needs aligment? +// printf_size +// printf_size_info +// profil // Weak +// __profile_frequency +//DATAM(__progname, 4) +//DATAM(__progname_full, 4) +//DATAM(program_invocation_name, 4) +//DATAM(program_invocation_short_name, 4) +//GOW(pselect, iFippppp) +// psignal +//GO(ptrace, iFiupp) // will that work??? +//GO(ptsname, pFi) +//GOW(ptsname_r, iFipu) +// __ptsname_r_chk +GOW(putc, iFip) +GO(putchar, iFi) +GO(putchar_unlocked, iFi) +//GO(putc_unlocked, iFip) +//GO(putenv, iFp) +// putgrent +// putmsg +// putpmsg +// putpwent +GOW(puts, iFp) +// putspent +//GOW(pututline, pFp) +// pututxline +// putw +//GO(putwc, iFip) +// putwchar +GO(putwchar_unlocked, iFi) +//GO(putwc_unlocked, iFip) +// pvalloc // Weak +// pwrite // Weak +//GOW(pwrite64, lFipLI) +// __pwrite64 // Weak +//GOM(pwritev64, lFEipiI) //%% not always present +// qecvt +#ifdef HAVE_LD80BITS +//GO(qecvt_r, iFDipppL) +#else +//GO(qecvt_r, iFKipppL) +#endif +// qfcvt +#ifdef HAVE_LD80BITS +//GO(qfcvt_r, iFDipppL) +#else +//GO(qfcvt_r, iFKipppL) +#endif +// qgcvt +//GOM(qsort, vFEpLLp) //%% +//GOM(qsort_r, vFEpLLpp) //%% +// query_module // Weak +//GO(quotactl, iFipip) +GO(raise, iFi) +GO(rand, iFv) +GOW(random, iFv) +//GOW(random_r, iFpp) +//GO(rand_r, iFp) +//GOW(rawmemchr, pFpi) +//GO(__rawmemchr, pFpi) +// rcmd +// rcmd_af +// __rcmd_errstr // type B +//GOM(read, lFipL) //%%,noE +//GOW(__read, lFipL) +// readahead // Weak +//GO(__read_chk, lFipLL) +//GOM(readdir, pFEp) //%% should also be weak +//GO(readdir64, pFp) // check if alignement is correct +// readdir64_r +//GOM(readdir_r, iFEppp) //%% should also be weak +//GOM(readlink, iFEppL) //%% +//GOM(readlinkat, iFEippL) +// __readlinkat_chk +// __readlink_chk +//GO(readv, lFipi) +//GO(realloc, pFpL) +//DATAV(__realloc_hook, 4) +//GOM(realpath, pFEpp) //%% +//GO(__realpath_chk, pFppu) +// reboot +// re_comp // Weak +// re_compile_fastmap // Weak +//GOW(re_compile_pattern, pFpup) +//GO(recv, lFipLi) +//GO(__recv_chk, iFipuui) +//GOW(recvfrom, lFipLipp) +// __recvfrom_chk +//GOM(recvmmsg, iFEipuup) //%% actual recvmmsg is glibc 2.12+. The syscall is Linux 2.6.33+, so use syscall... +//GOW(recvmsg, lFipi) +// re_exec // Weak +//GOW(regcomp, iFppi) +//GOW(regerror, uFippu) +//GO(regexec, iFppupi) +//GOW(regfree, vFp) +//GOM(__register_atfork, iFEpppp) //%% +// register_printf_function // Weak +// registerrpc +// remap_file_pages // Weak +//GOW(re_match, iFppiip) +// re_match_2 // Weak +//GO(remove, iFp) +//GO(removexattr, iFpp) +// remque +//GO(rename, iFpp) +//GO(renameat, iFipip) +//GO(renameat2, iFipipu) +// _res // type B +//GOW(re_search, iFppiiip) +//GOW(re_search_2, iFppipiiipi) +// re_set_registers // Weak +GOW(re_set_syntax, uFu) +// _res_hconf // type B +//GO(__res_iclose, vFpi) +GO(__res_init, iFv) +//GO(__res_maybe_init, iFpi) +//GO(__res_nclose, vFp) +//GO(__res_ninit, iFp) +//DATA(__resp, 4) +// __res_randomid +//GO(__res_state, pFv) +//DATA(re_syntax_options, 4) // type B +// revoke +//GO(rewind, vFp) +//GO(rewinddir, vFp) +// rexec +// rexec_af +// rexecoptions // type B +//GOW(rindex, pFpi) +//GOW(rmdir, iFp) +//GO(readdir64_r, iFppp) // is this present? +// rpc_createerr // type B +// _rpc_dtablesize +// __rpc_thread_createerr +// __rpc_thread_svc_fdset +// __rpc_thread_svc_max_pollfd +// __rpc_thread_svc_pollfd +//GO(rpmatch, iFp) +// rresvport +// rresvport_af +// rtime +// ruserok +// ruserok_af +// ruserpass +//GOW(sbrk, pFl) +//GO(__sbrk, pFl) +// scalbn // Weak +// scalbnf // Weak +// scalbnl // Weak +//GOM(scandir, iFEpppp) //%% +//GOM(scandir64, iFEpppp) //%% +//GO2(scanf, iFpp, vscanf) +//GO(__sched_cpualloc, pFu) //TODO: check, return cpu_set_t* : should this be aligned/changed? +//GO(__sched_cpucount, iFup) +//GO(__sched_cpufree, vFp) +//GO(sched_getaffinity, iFiup) +GO(sched_getcpu, iFv) +//GO(__sched_getparam, iFip) +//GOW(sched_getparam, iFip) +GO(__sched_get_priority_max, iFi) +GOW(sched_get_priority_max, iFi) +GO(__sched_get_priority_min, iFi) +GOW(sched_get_priority_min, iFi) +GO(__sched_getscheduler, iFi) +GOW(sched_getscheduler, iFi) +//GOW(sched_rr_get_interval, iFip) +//GO(sched_setaffinity, iFiup) +//GOW(sched_setparam, iFip) +//GO(__sched_setscheduler, iFiip) +//GOW(sched_setscheduler, iFiip) +GO(__sched_yield, iFv) +GOW(sched_yield, iFv) +GO(__secure_getenv, pFp) +GO(secure_getenv, pFp) +// seed48 +// seed48_r // Weak +//GO(seekdir, vFpi) +//GOW(select, iFipppp) +//GO(__select, iFipppp) +//GO(semctl, iFiiiN) +GOW(semget, iFuii) +//GOW(semop, iFipL) +//GO(semtimedop, iFipup) +//GOW(send, lFipLi) +// __send // Weak +//GO(sendfile, lFiipL) +//GO(sendfile64, lFiipL) +//GOW(sendmsg, lFipi) +//GOM(__sendmmsg, iFEipuu) //%% actual __sendmmsg is glibc 2.14+. The syscall is Linux 3.0+, so use syscall... +//GOW(sendto, lFipLipu) +// setaliasent +//GOW(setbuf, vFpp) +//GOW(setbuffer, vFppL) +GOM(setcontext, iFEp) //%% +// setdomainname +GO(setegid, iFu) +//GOW(setenv, iFppi) +// _seterr_reply +GO(seteuid, iFu) +// setfsent +// setfsgid +// setfsuid +GOW(setgid, iFu) +GO(setgrent, vFv) +//GO(setgroups, iFup) +GO(sethostent, vFi) +// sethostid +//GO(sethostname, iFpu) +// setipv4sourcefilter +//GOW(setitimer, iFipp) +GOM(setjmp, iFEp) //%% +GOM(_setjmp, iFEp) //%% +//GO(setlinebuf, vFp) +GO(setlocale, aFia) +// setlogin +GO(setlogmask, iFi) +//GOW(setmntent, pFpp) +// __setmntent +// setnetent +// setnetgrent +GOW(setpgid, iFuu) +// __setpgid +GO(setpgrp, iFv) +GO(setpriority, iFiii) +GO(setprotoent, vFi) +GO(setpwent, vFv) +GOW(setregid, iFuu) +GOW(setresgid, iFuuu) +GOW(setresuid, iFuuu) +GOW(setreuid, iFuu) +//GO(setrlimit, iFip) +//GO(setrlimit64, iFip) +// setrpcent +// setservent +GOW(setsid, iFv) +//GOW(setsockopt, iFiiipu) +// setsourcefilter +GO(setspent, vFv) +// setstate // Weak +//GOW(setstate_r, iFpp) +//GOW(settimeofday, iFpp) +// setttyent +GOW(setuid, iFu) +// setusershell +GOW(setutent, vFv) +// setutxent +//GOW(setvbuf, iFppiL) +//GO(setxattr, iFpppui) +// sgetspent +// sgetspent_r // Weak +//GOW(shmat, pFipi) +//GOW(shmctl, iFiip) +//GOW(shmdt, iFp) +GOW(shmget, iFuui) +GOW(shutdown, iFii) +//GOWM(sigaction, iFEipp) //%% +//GOWM(__sigaction, iFEipp) //%% +//GO(sigaddset, iFpi) +// __sigaddset +GOWM(sigaltstack, iFEpp) //%% +// sigandset +GOW(sigblock, iFi) +//GO(sigdelset, iFpi) +// __sigdelset +//GO(sigemptyset, iFp) +//GO(sigfillset, iFp) +GO(siggetmask, iFv) +// sighold +// sigignore +GO(siginterrupt, iFii) // no need to wrap this one? +// sigisemptyset +//GO(sigismember, iFpi) +// __sigismember +GOM(siglongjmp, vFEip) //%% +GOW2(signal, pFEip, my_signal) +// signalfd +GO(__signbit, iFd) +GO(__signbitf, iFf) +// sigorset +// sigpause // Weak +// __sigpause +//GO(sigpending, iFp) +//GOW(sigprocmask, iFipp) +// sigqueue // Weak +// sigrelse +// sigreturn // Weak +GOM(sigset, pFEip) //%% +GOM(__sigsetjmp, iFEp) //%% +GOW(sigsetmask, iFi) +// sigstack +//GOW(sigsuspend, iFp) +// __sigsuspend +//GOW(sigtimedwait, iFppp) +//GOW(sigvec, iFipp) +//GOW(sigwait, iFpp) +//GOW(sigwaitinfo, iFpp) +GOW(sleep, uFu) +//GOM(snprintf, iFEpLpV) //%% +//GOM(__snprintf_chk, iFEpLiipV) //%% +//GOM(__snprintf, iFEpLpV) //%% +// sockatmark +GOW(socket, iFiii) +//GOW(socketpair, iFiiip) +//GO(splice, iFipipuu) +//GOM(sprintf, iFEppV) //%% +//GOM(__sprintf_chk, iFEpvvpV) //%% +// sprofil // Weak +GOW(srand, vFu) +GO(srand48, vFi) +// srand48_r // Weak +GOW(srandom, vFu) +//GOW(srandom_r, iFup) +//GOM(sscanf, iFEppV) //%% +// ssignal // Weak +// sstk +GOM(__stack_chk_fail, vFEv) //%% +//GOM(lstat64, iFpp) //%%,noE +//GOM(stat64, iFpp) //%%,noE +//GOW(statfs, iFpp) +// __statfs +//GOWM(statfs64, iFpp) //%%,noE +//GO(statvfs, iFpp) +//GOW(statvfs64, iFpp) // is alignment ok? +DATAM(stderr, 4) +DATAM(stdin, 4) +DATAM(stdout, 4) +// step // Weak +// stime +//GO(stpcpy, pFpp) +// __stpcpy +//GO(__stpcpy_chk, pFppL) +// __stpcpy_small +//GOW(stpncpy, pFppL) +//GO(__stpncpy, pFppL) +//GO(__stpncpy_chk, pFppLL) +//GOW(strcasecmp, iFpp) +//GO(__strcasecmp, iFpp) +// __strcasecmp_l +// strcasecmp_l // Weak +//GOW(strcasestr, pFpp) +//GO(__strcasestr, pFpp) +//GO(strcat, pFpp) +//GO(__strcat_chk, pFppL) +//GO(strchr, pFpi) +//GOW(strchrnul, pFpi) +GO(strcmp, iFpp) +//GO(strcoll, iFpp) +//GO(__strcoll_l, iFppp) +//GOW(strcoll_l, iFppp) +//GO(strcpy, pFpp) +//GO(__strcpy_chk, pFppL) +// __strcpy_small +GO(strcspn, LFpp) +// __strcspn_c1 +// __strcspn_c2 +// __strcspn_c3 +//GOW(strdup, pFp) +//GO(__strdup, pFp) +//GO(strerror, pFi) +//GO(strerror_l, pFip) +//GO(__strerror_r, pFipu) +//GOW(strerror_r, pFipu) +//GO(strfmon, lFpLpppppppppp) //vaarg, probably needs align, there are just double... +// __strfmon_l +// strfmon_l // Weak +// strfry +//GO(strftime, LFpLpp) +//GO(__strftime_l, LFpLppL) +//GOW(strftime_l, LFpLppL) +//GO(strlen, LFp) +//GOW(strncasecmp, iFppL) +// __strncasecmp_l +// strncasecmp_l // Weak +//GO(strncat, pFppL) +//GO(__strncat_chk, pFppLL) +//GO(strncmp, iFppL) +//GO(strncpy, pFppL) +//GO(__strncpy_chk, pFppLL) +//GOW(strndup, pFpL) +//GO(__strndup, pFpL) +//GO(strnlen, LFpL) +//GO(strpbrk, pFpp) +// __strpbrk_c2 +// __strpbrk_c3 +//GO(strptime, pFppp) +// strptime_l // Weak +//GO(strrchr, pFpi) +//GOW(strsep, pFpp) +// __strsep_1c +// __strsep_2c +// __strsep_3c +// __strsep_g +//GO(strsignal, pFi) +//GO(strspn, LFpp) +// __strspn_c1 +// __strspn_c2 +// __strspn_c3 +//GO(strstr, pFpp) +//GO(strtod, dFpp) +//GO(__strtod_internal, dFppi) +//GO(__strtod_l, dFppp) +//GOW(strtod_l, dFppu) +//GO(strtof, fFpp) +//GO(__strtof_internal, fFppp) +//GO(__strtof_l, fFppp) +//GOW(strtof_l, fFppu) +//GO(strtoimax, IFppi) +//GO(strtok, pFpp) +//GO(__strtok_r, pFppp) +//GOW(strtok_r, pFppp) +// __strtok_r_1c +GO(strtol, lFpBp_i) +#ifdef HAVE_LD80BITS +//GO(strtold, DFpp) +//GO(__strtold_internal, DFppi) +//GO(__strtold_l, DFppip) +//GOW(strtold_l, DFppu) +#else +//GO(strtold, KFpp) +//GO2(__strtold_internal, KFppi, __strtod_internal) +//GO2(__strtold_l, KFppip, __strtod_l) +//GOW2(strtold_l, KFppu, strtod_l) +#endif +//GO(__strtol_internal, lFppi) +//GO(strtoll, IFppi) +//GO(__strtol_l, lFppiip) +//GOW(strtol_l, lFppiip) +//GO(__strtoll_internal, IFppii) +//GO(__strtoll_l, IFppip) +//GOW(strtoll_l, IFppip) +//GOW(strtoq, IFppi) // is that ok? +//GO(strtoul, LFppi) +//GO(__strtoul_internal, LFppii) +//GO(strtoull, UFppi) +//GO(__strtoul_l, uFppip) +//GOW(strtoul_l, LFppip) +//GO(__strtoull_internal, UFppii) +//GO(__strtoull_l, UFppip) +//GOW(strtoull_l, UFppip) +//GO(strtoumax, UFppi) +//GOW(strtouq, UFppi) // ok? +//GOW(strverscmp, iFpp) +// __strverscmp +//GO(strxfrm, uFppu) +//GO(__strxfrm_l, uFppup) +//GO(strxfrm_l, uFppup) +// stty +// svcauthdes_stats // type B +// svcerr_auth +// svcerr_decode +// svcerr_noproc +// svcerr_noprog +// svcerr_progvers +// svcerr_systemerr +// svcerr_weakauth +// svc_exit +// svcfd_create +// svc_fdset // type B +// svc_getreq +// svc_getreq_common +// svc_getreq_poll +// svc_getreqset +// svc_max_pollfd // type B +// svc_pollfd // type B +// svcraw_create +// svc_register +// svc_run +// svc_sendreply +// svctcp_create +// svcudp_bufcreate +// svcudp_create +// svcudp_enablecache +// svcunix_create +// svcunixfd_create +// svc_unregister +//GO(swab, vFppi) +GOM(swapcontext, iFEpp) //%% +// swapoff // Weak +// swapon // Weak +//GOM(swprintf, iFEpupV) //%% +//GOM(__swprintf_chk, iFEpuiupV) //%% +//GO2(swscanf, iFppV, vswscanf) // swscanf va_list is only pointer, no realign to do +//GOW(symlink, iFpp) +//GO(symlinkat, iFpip) +GO(sync, vFv) +GO(syncfs, iFi) +// sync_file_range +GOM(syscall, uFEV) //%% +GOW(sysconf, lFi) +GO(__sysconf, lFi) +// sysctl // Weak +//GO(__sysctl, iFp) +//DATA(_sys_errlist, 4) +//DATA(sys_errlist, 4) +//GO(sysinfo, iFp) +//GO2(syslog, vFipV, vsyslog) +//GO2(__syslog_chk, vFiipV, __vsyslog_chk) +//DATA(_sys_nerr, 4) // type R +//DATA(sys_nerr, 4) // type R +//DATA(sys_sigabbrev, 4) +//DATA(_sys_siglist, 4) +//DATA(sys_siglist, 4) +//GOW(system, iFp) // Need to wrap to use box86 if needed? +//GOM(__sysv_signal, pFEip) //%% +//GOWM(sysv_signal, pFEip) //%% +GOW(tcdrain, iFi) +GO(tcflow, iFii) +GO(tcflush, iFii) +//GOW(tcgetattr, iFip) +GO(tcgetpgrp, iFi) +// tcgetsid +GO(tcsendbreak, iFii) +//GO(tcsetattr, iFiip) +GO(tcsetpgrp, iFii) +// tdelete // Weak +// tdestroy // Weak +// tee +//GO(telldir, iFp) +//GO(tempnam, pFpp) +//GOW(textdomain, pFp) +// tfind // Weak +//GO(time, LFp) +//GO(timegm, LFp) +// timelocal // Weak +GO(timerfd_create, iFii) +//GO(timerfd_gettime, iFip) +//GO(timerfd_settime, iFiipp) +//GOW(times, iFp) +//DATAV(timezone, 4) +//DATAB(__timezone, 4) // type B +//GO(tmpfile, pFv) +//GO(tmpfile64, pFv) +//GO(tmpnam, pFp) +//GO(tmpnam_r, pFp) +GO(toascii, iFi) +// __toascii_l // Weak +GO(tolower, iFi) +// _tolower +// __tolower_l +//GOW(tolower_l, iFip) +GO(toupper, iFi) +// _toupper +// __toupper_l +//GOW(toupper_l, iFip) +// towctrans // Weak +// __towctrans +// __towctrans_l +// towctrans_l // Weak +GO(towlower, iFi) +//GO(__towlower_l, iFip) +//GOW(towlower_l, iFip) +//GO(towupper, iFi) +//GO(__towupper_l, iFip) +//GOW(towupper_l, iFip) +// tr_break +//GOW(truncate, iFpu) +//GO(truncate64, iFpU) +// tsearch // Weak +//GO(ttyname, pFi) +//GOW(ttyname_r, iFipu) +// __ttyname_r_chk +// ttyslot +// twalk // Weak +//DATAV(tzname, 4) +//DATA(__tzname, 4) +GOW(tzset, vFv) +// ualarm +//GO(__uflow, iFp) +// ulckpwdf // Weak +// ulimit // Weak +GOW(umask, uFu) +//GOW(umount, iFp) +//GOW(umount2, iFpi) +//GOWM(uname, iFp) //%%,noE +//GO(__underflow, iFp) +//GOW(ungetc, iFip) +//GO(ungetwc, iFip) +//GOW(unlink, iFp) +//GO(unlinkat, iFipi) +GO(unlockpt, iFi) +//GOW(unsetenv, iFp) +// unshare +//GOW(updwtmp, vFpp) +// updwtmpx +// uselib +GOW(uselocale, aFa) +GO(__uselocale, aFa) +// user2netname +GO(usleep, iFu) +// ustat +//GO(utime, iFpp) +//GO(utimensat, iFippi) +//GOW(utimes, iFpp) //TODO: check, signature is int utimes(const char *filename, const struct timeval times[2]); +//GOW(utmpname, iFp) +// utmpxname +//GOW(valloc, pFu) +//GOM(vasprintf, iFEpppp) //%% +//GOM(__vasprintf_chk, iFEpippp) //%% +// vdprintf // Weak +// __vdprintf_chk +//GOM(verr, vFEpV) //%% +// verrx +//GO(versionsort, iFpp) +//GO(versionsort64, iFpp) //need to align dirent64? +GOWM(vfork, iFEv) //%% +// __vfork +//GOM(vfprintf, iFEppp) //%% +//GOM(__vfprintf_chk, iFEpvpp) //%% +//GOWM(vfscanf, iFEppp) //%% +// __vfscanf +//GOWM(vfwprintf, iFEppp) //%% +//GO2(__vfwprintf_chk, iFEpvpp, my_vfwprintf) +//GOW(vfwscanf, iFppp) +// vhangup +// vlimit +// vmsplice +//GOM(vprintf, iFEpp) //%% +//GOM(__vprintf_chk, iFEvpp) //%% +// vscanf // Weak +//GOWM(vsnprintf, iFEpLppp) //%% +//GOWM(__vsnprintf, iFEpuppp) //%% +//GOM(__vsnprintf_chk, iFEpuvvppp) //%% +//GOWM(vsprintf, iFEppp) //%% +//GOM(__vsprintf_chk, iFEpiLpp) //%% +//GOM(vsscanf, iFEppp) //%% +// __vsscanf // Weak +//GOWM(vswprintf, iFEpuppp) //%% +//GOWM(__vswprintf_chk, iFEpLiLppp) //%% +//GO(vswscanf, iFppp) +//GO(vsyslog, vFipp) +//GO(__vsyslog_chk, vFiipp) +// vtimes +//GOM(vwarn, vFEppp) //%% +// vwarnx +//GOM(vwprintf, iFEpp) //%% +//GO2(__vwprintf_chk, iFEvpp, my_vwprintf) +//GO(vwscanf, iFpp) +//GOW(wait, iFp) +//GOW(__wait, iFp) +//GOW(wait3, iFpip) +//GOW(wait4, iFipip) +//GOW(waitid, iFiipi) +//GOW(waitpid, lFlpi) +//GOW(__waitpid, lFlpi) +//GO(warn, vFppppppppp) +//GO(warnx, vFppppppppp) +//GOW(wcpcpy, pFpp) +// __wcpcpy_chk +//GOW(wcpncpy, pFpp) +// __wcpncpy_chk +//GOW(wcrtomb, LFpip) +// __wcrtomb_chk +//GOW(wcscasecmp, iFpp) +// __wcscasecmp_l +//GOW(wcscasecmp_l, iFppp) +//GOW(wcscat, pFpp) +//GO(__wcscat_chk, pFppu) +//GO(wcschr, pFpi) +// wcschrnul // Weak +//GO(wcscmp, iFpp) +//GOW(wcscoll, iFpp) +//GO(__wcscoll_l, iFppp) +//GOW(wcscoll_l, iFppp) +//GO(wcscpy, pFpp) +//GO(__wcscpy_chk, pFppu) +//GO(wcscspn, uFpp) +//GO(wcsdup, pFp) +//GO(wcsftime, LFpLpp) +//GO(__wcsftime_l, LFpLppp) +//GOW(wcsftime_l, LFpLppp) +//GOW(wcslen, LFp) +//GOW(wcsncasecmp, iFppu) +// __wcsncasecmp_l +//GOW(wcsncasecmp_l, iFppup) +//GO(wcsncat, pFppu) +// __wcsncat_chk +//GO(wcsncmp, iFppu) +//GOW(wcsncpy, pFppu) +//GO(__wcsncpy_chk, pFppuu) +//GOW(wcsnlen, LFpL) +//GOW(wcsnrtombs, LFppLLp) +// __wcsnrtombs_chk +//GO(wcspbrk, pFpp) +//GO(wcsrchr, pFpi) +//GOW(wcsrtombs, uFppup) +// __wcsrtombs_chk +//GO(wcsspn, uFpp) +//GO(wcsstr, pFpp) +//GO(wcstod, dFpp) +//GO(__wcstod_internal, dFppi) +// __wcstod_l +// wcstod_l // Weak +//GO(wcstof, fFpp) +// __wcstof_internal +// __wcstof_l +// wcstof_l // Weak +// wcstoimax +//GO(wcstok, pFppp) +//GO(wcstol, iFppi) +//GO(wcstold, DFpp) +// __wcstold_internal +// __wcstold_l +// wcstold_l // Weak +//GO(__wcstol_internal, iFppii) +//GO(wcstoll, IFppi) +// __wcstol_l +// wcstol_l // Weak +// __wcstoll_internal +// __wcstoll_l +// wcstoll_l // Weak +//GO(wcstombs, uFppu) +// __wcstombs_chk +// wcstoq // Weak +//GO(wcstoul, iFppi) +//GO(__wcstoul_internal, LFppii) +//GO(wcstoull, UFppi) +// __wcstoul_l +// wcstoul_l // Weak +// __wcstoull_internal +// __wcstoull_l +// wcstoull_l // Weak +// wcstoumax +// wcstouq // Weak +// wcswcs // Weak +//GO(wcswidth, iFpu) +//GO(wcsxfrm, uFppu) +//GOW(wcsxfrm_l, uFppup) +//GO(__wcsxfrm_l, uFppup) +GO(wctob, iFi) +//GO(wctomb, iFpi) +//GO(__wctomb_chk, iFpuL) +// wctrans // Weak +// __wctrans_l +// wctrans_l // Weak +//GOW(wctype, uFp) +GO(__wctype_l, uFpa) +GOW(wctype_l, uFpa) +//GO(wcwidth, iFu) +//GOW(wmemchr, pFpuL) +GO(wmemcmp, iFppL) +GOW(wmemcpy, pFppL) +GO(__wmemcpy_chk, pFppLL) +//GOW(wmemmove, pFppL) +// __wmemmove_chk +// wmempcpy // Weak +// __wmempcpy_chk +//GO(wmemset, pFpuL) +// __wmemset_chk +//GO(wordexp, iFppi) +//GO(wordfree, vFp) +// __woverflow +//GOM(wprintf, iFEpV) //%% +//GOM(__wprintf_chk, iFEipV) //%% +//GOW(write, lFipL) +//GOW(__write, lFipL) +//GOW(writev, lFipi) +// wscanf +// __wuflow +// __wunderflow +// xdecrypt +// xdr_accepted_reply +// xdr_array +// xdr_authdes_cred +// xdr_authdes_verf +// xdr_authunix_parms +// xdr_bool +// xdr_bytes +// xdr_callhdr +// xdr_callmsg +// xdr_char +// xdr_cryptkeyarg +// xdr_cryptkeyarg2 +// xdr_cryptkeyres +// xdr_des_block +// xdr_double +// xdr_enum +// xdr_float +// xdr_free +// xdr_getcredres +// xdr_hyper +//GO(xdr_int, iFpp) +// xdr_int16_t +// xdr_int32_t +// xdr_int64_t +// xdr_int8_t +// xdr_keybuf +// xdr_key_netstarg +// xdr_key_netstres +// xdr_keystatus +// xdr_long +// xdr_longlong_t +// xdrmem_create +// xdr_netnamestr +// xdr_netobj +// xdr_opaque +// xdr_opaque_auth +// xdr_pmap +// xdr_pmaplist +// xdr_pointer +// xdr_quad_t +// xdrrec_create +// xdrrec_endofrecord +// xdrrec_eof +// xdrrec_skiprecord +// xdr_reference +// xdr_rejected_reply +// xdr_replymsg +// xdr_rmtcall_args +// xdr_rmtcallres +// xdr_short +// xdr_sizeof +// xdrstdio_create +// xdr_string +// xdr_u_char +// xdr_u_hyper +//GO(xdr_u_int, iFpp) +// xdr_uint16_t +// xdr_uint32_t +// xdr_uint64_t +// xdr_uint8_t +// xdr_u_long +// xdr_u_longlong_t +// xdr_union +// xdr_unixcred +// xdr_u_quad_t +// xdr_u_short +// xdr_vector +// xdr_void +// xdr_wrapstring +// xencrypt +//GO(__xmknod, iFipup) +//GO(__xmknodat, iFiipip) +//GO(__xpg_basename, pFp) +// __xpg_sigpause // Weak +//GO(__xpg_strerror_r, pFipu) +// xprt_register +// xprt_unregister +//GOM(__xstat, iFEipp) //%% +//GOM(__xstat64, iFEipp) //%% + +// forcing a custom __gmon_start__ that does nothing +GOM(__gmon_start__, vFEv) //%% + +GOM(_Jv_RegisterClasses, vFv) //%%,noE dummy + +GOM(__fdelt_chk, LFL) //%%,noE + +GOM(getauxval, uFEu) //%% implemented since glibc 2.16 + +//GOM(prlimit64, lFpupp) //%%,noE +//GO(process_vm_readv, lFipLpLL) +//GO(process_vm_writev, lFipLpLL) +//GOM(reallocarray, pFpLL) //%%,noE +//GOM(__open_nocancel, iFEpOV) //%% +//GO2(__read_nocancel, lFipL, read) +GO2(__close_nocancel, iFi, close) + +//GOM(mkstemps64, iFEpi) //%% not always implemented +//GOM(getentropy, iFEpL) //%% starting from glibc 2.25 + +// not found (libitm???), but it seems OK to declare dummies: + +//GOM(_ITM_RU1, uFp) //%%,noE +//GOM(_ITM_RU4, uFp) //%%,noE +//GOM(_ITM_RU8, UFp) +//GOM(_ITM_memcpyRtWn, vFppu) //%%,noE register(2) +//GOM(_ITM_memcpyRnWt, vFppu) //%%,noE register(2) +//GOM(_ITM_addUserCommitAction, vFEpup) +GOM(_ITM_registerTMCloneTable, vFEpu) //%% +GOM(_ITM_deregisterTMCloneTable, vFEp) //%% + +GOM(__umoddi3, UFUU) //%%,noE +GOM(__udivdi3, UFUU) //%%,noE +GOM(__divdi3, IFII) //%%,noE +//GOM(__poll_chk, iFpuii) //%%,noE + +GOM(fallocate64, iFiiII) //%%,noE + +//DATAM(__libc_stack_end, sizeof(void*)) + +//DATAM(___brk_addr, 4) +//DATA(__libc_enable_secure, 4) + +//GOM(__register_frame_info, vFpp) //%%,noE faked function +//GOM(__deregister_frame_info, pFp) //%%,noE + +//GO(name_to_handle_at, iFipppi) // only glibc 2.14+, so may not be present... + +//GOM(modify_ldt, iFEipL) // there is suposedly no glibc wrapper for this one + +#ifdef ANDROID +GOM(__libc_init, vFEpppp) +GO(__errno, pFv) +#else +// Those symbols don't exist in non-Android builds +//GOM(__libc_init, +//GO(__errno, +#endif + +//GOM(stat, +//GOM(lstat, +//GOM(fstat, +//GO(setprogname, +//GO(getprogname, + +DATAM(__libc_single_threaded, 4) //B type diff --git a/src/wrapped32/wrappedlibdl.c b/src/wrapped32/wrappedlibdl.c new file mode 100755 index 00000000..c3a79feb --- /dev/null +++ b/src/wrapped32/wrappedlibdl.c @@ -0,0 +1,165 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "emu/x64emu_private.h" +#include "library.h" +#include "librarian.h" +#include "box32context.h" +#include "elfloader.h" +#include "elfs/elfloader_private.h" +#include "x64emu.h" + + +#define LIBNAME libdl +#ifdef ANDROID + static const char* libdlName = "libdl.so"; +#else + static const char* libdlName = "libdl.so.2"; +#endif + +void* my_dlopen(x64emu_t* emu, void *filename, int flag) EXPORT; +void* my_dlmopen(x64emu_t* emu, void* mlid, void *filename, int flag) EXPORT; +char* my_dlerror(x64emu_t* emu) EXPORT; +void* my_dlsym(x64emu_t* emu, void *handle, void *symbol) EXPORT; +int my_dlclose(x64emu_t* emu, void *handle) EXPORT; +int my32_dladdr(x64emu_t* emu, void *addr, void *info) EXPORT; +int my32_dladdr1(x64emu_t* emu, void *addr, void *info, void** extra_info, int flags) EXPORT; +void* my_dlvsym(x64emu_t* emu, void *handle, void *symbol, const char *vername) EXPORT; +int my32_dlinfo(x64emu_t* emu, void* handle, int request, void* info) EXPORT; + +#ifndef RTLD_DL_SYMENT +#define RTLD_DL_SYMENT 1 +#endif +#ifndef RTLD_DL_LINKMAP +#define RTLD_DL_LINKMAP 2 +#endif + +void dl_clear_error(); +#define CLEARERR dl_clear_error() +void dl_set_error(const char*); +char* dl_last_error(); +library_t* dl_get_library(void* handle); + +typedef struct my_dl_info_32_s +{ + ptr_t dli_fname; // const char* + ptr_t dli_fbase; // void* + ptr_t dli_sname; // const char* + ptr_t dli_saddr; // void* +} my_dl_info_32_t; + +int my32_dladdr1(x64emu_t* emu, void *addr, void *i, void** extra_info, int flags) +{ + //int dladdr(void *addr, my_dl_info_32_t *info); + CLEARERR; + my_dl_info_32_t *info = (my_dl_info_32_t*)i; + printf_log(LOG_DEBUG, "Warning: partially unimplement call to dladdr/dladdr1(%p, %p, %p, %d)\n", addr, info, extra_info, flags); + + //emu->quit = 1; + library_t* lib = NULL; + info->dli_saddr = 0; + info->dli_fname = 0; + void* start = NULL; + const char* fname = NULL; + void* base = NULL; + const char* sname = FindSymbolName(my_context->maplib, addr, &start, NULL, &fname, &base, &lib); + info->dli_saddr = to_ptrv(start); + info->dli_fname = to_ptrv((void*)fname); + info->dli_fbase = to_ptrv(base); + info->dli_sname = to_ptrv((void*)sname); + printf_log(LOG_DEBUG, " dladdr return saddr=%p, fname=\"%s\", sname=\"%s\"\n", start, sname?sname:"", fname?fname:""); + if(flags==RTLD_DL_SYMENT) { + printf_log(LOG_INFO, "Warning, unimplement call to dladdr1 with RTLD_DL_SYMENT flags\n"); + } else if (flags==RTLD_DL_LINKMAP) { + printf_log(LOG_INFO, "Warning, unimplemented call to dladdr1 with RTLD_DL_LINKMAP flags\n"); + *(ptr_t*)extra_info = to_ptrv(getLinkMapLib32(lib)); + } + return (info->dli_sname)?1:0; // success is non-null here... +} +int my32_dladdr(x64emu_t* emu, void *addr, void *i) +{ + return my32_dladdr1(emu, addr, i, NULL, 0); +} + +int my32_dlinfo(x64emu_t* emu, void* handle, int request, void* info) +{ + (void)emu; + printf_dlsym(LOG_DEBUG, "Call to dlinfo(%p, %d, %p)\n", handle, request, info); + CLEARERR; + library_t *lib = dl_get_library(handle); + if(lib==(library_t*)-1LL) { + printf_dlsym(LOG_DEBUG, "dlinfo: %s\n", dl_last_error()); + return -1; + } + //elfheader_t *h = (GetElfIndex(lib)>-1)?my_context->elfs[GetElfIndex(lib)]:NULL; + switch(request) { + case 2: // RTLD_DI_LINKMAP + { + *(linkmap32_t**)info = getLinkMapLib32(lib); + } + return 0; + default: + printf_log(LOG_NONE, "Warning, unsupported call to dlinfo(%p, %d, %p)\n", handle, request, info); + { + char tmp[129] = {0}; + snprintf(tmp, 129, "unsupported call to dlinfo request:%d\n", request); + dl_set_error(tmp); + } + } + return -1; +} + +typedef struct my_dl_find_object_s { + uint64_t dlfo_flags; + ptr_t dlfo_map_start; + ptr_t dlfo_map_end; + ptr_t dlf_link_map; //struct link_map * + ptr_t dlfo_eh_frame; + // other stuff... +} my_dl_find_object_t; + +EXPORT int my32__dl_find_object(x64emu_t* emu, void* addr, my_dl_find_object_t* result) +{ + //printf_log(LOG_INFO, "Unimplemented _dl_find_object called\n"); + uintptr_t start=0, sz=0; + elfheader_t* h = FindElfAddress(my_context, (uintptr_t)addr); + if(h) { + // find an actual elf + const char* name = FindNearestSymbolName(h, addr, &start, &sz); + result->dlfo_map_start = start; + result->dlfo_map_end = start+sz-1; + result->dlfo_eh_frame = h->ehframehdr+h->delta; + result->dlfo_flags = 0; // unused it seems + result->dlf_link_map = to_ptrv(getLinkMapElf32(h)); + return 0; + } + return -1; +} + +//#define CUSTOM_INIT\ +// if(!box32_isglibc234) setNeededLibs(lib, 1, "libc.so.6"); + + +void closeAllDLOpenned(); + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#define CUSTOM_FINI \ + closeAllDLOpenned(); + +// define all standard library functions +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibdl_private.h b/src/wrapped32/wrappedlibdl_private.h new file mode 100755 index 00000000..5df76d7d --- /dev/null +++ b/src/wrapped32/wrappedlibdl_private.h @@ -0,0 +1,15 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) && defined(GOS)) +#error Meh... +#endif + +GOM(dladdr, iFEpp) +GOM(dladdr1, iFEpppi) +GO2(dlclose, iFEp, my_dlclose) +GO2(dlerror, pFEv, my_dlerror) +//DATAB(_dlfcn_hook, 4) +GOM(dlinfo, iFEpip) +GO2(dlmopen, pFEppi, my_dlmopen) +GO2(dlopen, pFEpi, my_dlopen) +GO2(dlsym, pFEpp, my_dlsym) +GO2(dlvsym, pFEppp, my_dlvsym) // Weak +GOM(_dl_find_object, iFEpp) diff --git a/src/wrapped32/wrappedlibm.c b/src/wrapped32/wrappedlibm.c new file mode 100755 index 00000000..a36a3227 --- /dev/null +++ b/src/wrapped32/wrappedlibm.c @@ -0,0 +1,154 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "debug.h" +#include "box32.h" + +static const char* libmName = +#ifdef ANDROID + "libm.so" +#else + "libm.so.6" +#endif + ; +#define LIBNAME libm + +static library_t* my_lib = NULL; + +typedef float (*fFff_t) (float, float); +typedef double (*dFdd_t) (double, double); +typedef float (*fFf_t) (float); +typedef double (*dFd_t) (double); +#if 0 +typedef union my_float_complex_s { + float complex f; + uint64_t u64; +} my_float_complex_t; + +// complex <- FUNC(complex) wrapper +#define GO_cFc(N) \ +EXPORT void* my_##N(void* p, void* c) \ +{ \ + *(double complex*)p = N(*(double complex*)c); \ + return p; \ +} \ +EXPORT uint64_t my_##N##f(void* c) \ +{ \ + my_float_complex_t ret; \ + ret.f = N##f(*(float complex*)c); \ + return ret.u64; \ +} +// complex <- FUNC(complex, complex) wrapper +#define GO_cFcc(N) \ +EXPORT void* my_##N(void* p, void* c, void* d) \ +{ \ + *(double complex*)p = N(*(double complex*)c, *(double complex*)d); \ + return p; \ +} \ +EXPORT uint64_t my_##N##f(void* c, void* d) \ +{ \ + my_float_complex_t ret; \ + ret.f = N##f(*(float complex*)c, *(float complex*)c); \ + return ret.u64; \ +} + +GO_cFc(clog) +GO_cFc(csqrt) +GO_cFc(cproj) +GO_cFc(cexp) +GO_cFc(ccos) +GO_cFc(csin) +GO_cFc(ccosh) +GO_cFc(csinh) +GO_cFc(ctan) +GO_cFc(ctanh) +GO_cFc(cacos) +GO_cFc(casin) +GO_cFc(cacosh) +GO_cFc(casinh) +GO_cFc(catan) +GO_cFc(catanh) +GO_cFcc(cpow) + +#undef GO_cFc +#undef GO_cFcc +#endif + +#define FINITE(N, T, R, P, ...) \ +EXPORT R my32___##N##_finite P \ +{ \ + static int check = 0; \ + static T f = NULL; \ + if(!check) { \ + f = (T)dlsym(my_lib->w.lib, "__" #N "_finite"); \ + ++check; \ + } \ + if(f) \ + return f(__VA_ARGS__); \ + else \ + return N(__VA_ARGS__); \ +} + +#define F1F(N) FINITE(N, fFf_t, float, (float a), a) +#define F1D(N) FINITE(N, dFd_t, double, (double a), a) +#define F2F(N) FINITE(N, fFff_t, float, (float a, float b), a, b) +#define F2D(N) FINITE(N, dFdd_t, double, (double a, double b), a, b) + +F2F(powf) +F2D(pow) +F1F(sinhf) +F1D(sinh) +F1F(sqrtf) +F1D(sqrt) +F1F(acosf) +F1D(acos) +F1F(acoshf) +F1D(acosh) +F1F(asinf) +F1D(asin) +F2F(atan2f) +F2D(atan2) +F1F(coshf) +F1D(cosh) +F1F(exp2f) +F1D(exp2) +F1F(expf) +F1D(exp) +F2F(hypotf) +F2D(hypot) +F1F(log10f) +F1D(log10) +F1F(log2f) +F1D(log2) +F1F(logf) +F1D(log) + +#undef F2D +#undef F2F +#undef F1D +#undef F1F +#undef FINITE + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#define CUSTOM_INIT \ + my_lib = lib; + +#define CUSTOM_FINI \ + my_lib = NULL; + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibm_private.h b/src/wrapped32/wrappedlibm_private.h new file mode 100755 index 00000000..156cfac6 --- /dev/null +++ b/src/wrapped32/wrappedlibm_private.h @@ -0,0 +1,446 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +// Complex numbers are passed in as an address in the stack + +GOW(acos, dFd) +GOW(acosf, fFf) +GOM(__acosf_finite, fFf) //%noE +GOM(__acos_finite, dFd) //%noE +GOW(acosh, dFd) +GOW(acoshf, fFf) +GOM(__acoshf_finite, fFf) //%noE +GOM(__acosh_finite, dFd) //%noE +#ifdef HAVE_LD80BITS +GOW(acoshl, DFD) +#else +GOW2(acoshl, KFK, acosh) +#endif +#ifdef HAVE_LD80BITS +GOW(acosl, DFD) +#else +GOW2(acosl, KFK, acos) +#endif +GOW(asin, dFd) +GOW(asinf, fFf) +GOM(__asinf_finite, fFf) //%noE +GOM(__asin_finite, dFd) //%noE +GOW(asinh, dFd) +GOW(asinhf, fFf) +#ifdef HAVE_LD80BITS +GOW(asinhl, DFD) +#else +GOW2(asinhl, KFK, asinh) +#endif +#ifdef HAVE_LD80BITS +GOW(asinl, DFD) +#else +GOW2(asinl, KFK, asin) +#endif +GO(atan, dFd) +GOW(atan2, dFdd) +GOW(atan2f, fFff) +GOM(__atan2f_finite, fFff) //%noE +GOM(__atan2_finite, dFdd) //%noE +// atan2l // Weak +GOW(atanf, fFf) +GOW(atanh, dFd) +GOW(atanhf, fFf) +// __atanhf_finite +// __atanh_finite +#ifdef HAVE_LD80BITS +GOW(atanhl, DFD) +#else +GOW2(atanhl, KFK, atanh) +#endif +// atanl // Weak +//GOW(cabs, dFdd) // only 1 arg, but is a double complex +GOW(cabsf, fFff) // only 1 arg, but is a float complex +// cabsl // Weak +//GOWS(cacos, pFps) //%% complex +GOWM(cacosf, UFs) //%noE +//GOWS(cacosh, pFps) //%% complex +GOWM(cacoshf, UFs) //%noE +// cacoshl // Weak +// cacosl // Weak +//GOW(carg, dFdd) // 1arg, double complex +GOW(cargf, fFff) // 1arg, float complex +// cargl // Weak +//GOWS(casin, pFps) //%% complex +GOWM(casinf, UFs) //%noE +//GOWS(casinh, pFps) //%% complex +GOWM(casinhf, UFs) //%noE +// casinhl // Weak +// casinl // Weak +//GOWS(catan, pFps) //%% complex +GOWM(catanf, UFs) //%noE +//GOWS(catanh, pFps) //%% complex +GOWM(catanhf, UFs) //%noE +// catanhl // Weak +// catanl // Weak +GOW(cbrt, dFd) +GOW(cbrtf, fFf) +#ifdef HAVE_LD80BITS +GOW(cbrtl, DFD) +#else +GOW2(cbrtl, KFK, cbrt) +#endif +//GOWS(ccos, pFps) //%% return complex +GOWM(ccosf, UFs) //%noE return complex +//GOWS(ccosh, pFps) //%% return complex +GOWM(ccoshf, UFs) //%noE return complex +// ccoshl // Weak +// ccosl // Weak +//GOW(ceil, dFd) +//GOW(ceilf, fFf) +// ceill // Weak +//GOWS(cexp, pFps) //%% return complex +GOWM(cexpf, UFs) //%noE return complex +// cexpl // Weak +// cimag // Weak +// cimagf // Weak +// cimagl // Weak +//GOS(clog, pFps) //%% return a double complex, so ret 4 +// clog10 // Weak +// __clog10 +// clog10f // Weak +// __clog10f +// clog10l // Weak +// __clog10l +GOM(clogf, UFs) //%noE float complex doesn't trigger the ret 4, but returns an u64! +// clogl // Weak +// conj // Weak +// conjf // Weak +// conjl // Weak +GOW(copysign, dFdd) +GOW(copysignf, fFff) +// copysignl // Weak +GOW(cos, dFd) +GOW(cosf, fFf) +GOW(cosh, dFd) +GOW(coshf, fFf) +GOM(__coshf_finite, fFf) //%noE +GOM(__cosh_finite, dFd) //%noE +// coshl // Weak +// cosl // Weak +//GOWS(cpow, pFpsvvvvs) //%% return complex +GOWM(cpowf, UFsvvs) //%noE +// cpowl // Weak +//GOS(cproj, pFps) //%% double complex +GOM(cprojf, UFs) //%noE +// cprojl // Weak +// creal // Weak +// crealf // Weak +// creall // Weak +//GOWS(csin, pFps) //%% return complex +GOWM(csinf, UFs) //%noE return complex +//GOWS(csinh, pFps) //%% return complex +GOWM(csinhf, UFs) //%noE return complex +// csinhl // Weak +// csinl // Weak +//GOWS(csqrt, pFps) //%% +GOWM(csqrtf, UFs) //%noE +// csqrtl // Weak +//GOWS(ctan, pFps) //%% return complex +GOWM(ctanf, UFs) //%noE return complex +//GOWS(ctanh, pFps) //%% return complex +GOWM(ctanhf, UFs) //%noE return complex +// ctanhl // Weak +// ctanl // Weak +// __cxa_finalize // Weak +// drem // Weak +// dremf // Weak +// dreml // Weak +GOW(erf, dFd) +GOW(erfc, dFd) +GOW(erfcf, fFf) +#ifdef HAVE_LD80BITS +GOW(erfcl, DFD) +#else +GOW2(erfcl, KFK, erfc) +#endif +GOW(erff, fFf) +#ifdef HAVE_LD80BITS +GOW(erfl, DFD) +#else +GOW2(erfl, KFK, erf) +#endif +GOW(exp, dFd) +GOW(exp10, dFd) +GOW(exp10f, fFf) +// __exp10f_finite +// __exp10_finite +// exp10l // Weak +GOW(exp2, dFd) +GOW(exp2f, fFf) +GOM(__exp2f_finite, fFf) //%noE +GOM(__exp2_finite, dFd) //%noE +// exp2l // Weak +GOW(expf, fFf) +GOM(__expf_finite, fFf) //%noE +GOM(__exp_finite, dFd) //%noE +// expl // Weak +GOW(expm1, dFd) +GOW(expm1f, fFf) +// expm1l // Weak +GOW(fabs, dFd) +GOW(fabsf, fFf) +// fabsl // Weak +// fdim // Weak +// fdimf // Weak +// fdiml // Weak +GO(feclearexcept, iFi) +GO(fedisableexcept, iFi) +GO(feenableexcept, iFi) +GO(fegetenv, iFp) +GO(fegetexcept, iFv) +GO(fegetexceptflag, iFpi) +GO(fegetround, iFv) +GO(feholdexcept, iFp) +GO(feraiseexcept, iFi) +GO(fesetenv, iFp) +GO(fesetexceptflag, iFpi) +GO(fesetround, iFi) +GO(fetestexcept, iFi) +GO(feupdateenv, iFp) +GOW(finite, iFd) +// __finite +GOW(finitef, iFf) +GO(__finitef, iFf) +// finitel // Weak +// __finitel +GOW(floor, dFd) +GOW(floorf, fFf) +// floorl // Weak +GOW(fma, dFddd) +GOW(fmaf, fFfff) +// fmal // Weak +GOW(fmax, dFdd) +GOW(fmaxf, fFff) +// fmaxl // Weak +GOW(fmin, dFdd) +GOW(fminf, fFff) +// fminl // Weak +GOW(fmod, dFdd) +GOW(fmodf, fFff) +// __fmodf_finite +// __fmod_finite +#ifdef HAVE_LD80BITS +GOW(fmodl, DFDD) +#else +GOW2(fmodl, KFKK, fmod) +#endif +GO(__fpclassify, iFd) +GO(__fpclassifyf, iFf) +GOW(frexp, dFdp) +GOW(frexpf, fFfp) +#ifdef HAVE_LD80BITS +GOW(frexpl, DFDp) +#else +GOW2(frexpl, KFKp, frexp) +#endif +// gamma // Weak +// gammaf // Weak +// __gammaf_r_finite +// gammal // Weak +// __gamma_r_finite +// __gmon_start__ // Weak +GOW(hypot, dFdd) +GOW(hypotf, fFff) +GOM(__hypotf_finite, fFff) //%noE +GOM(__hypot_finite, dFdd) //%noE +// hypotl // Weak +GOW(ilogb, iFd) +GOW(ilogbf, iFf) +// ilogbl // Weak +// __issignaling +// __issignalingf +// _ITM_deregisterTMCloneTable // Weak +// _ITM_registerTMCloneTable // Weak +GO(j0, dFd) +GO(j0f, fFf) +// __j0f_finite +// __j0_finite +// j0l +GO(j1, dFd) +GO(j1f, fFf) +// __j1f_finite +// __j1_finite +// j1l +GO(jn, dFid) +GO(jnf, fFif) +// __jnf_finite +// __jn_finite +// jnl +GOW(ldexp, dFdi) +GOW(ldexpf, fFfi) +#ifdef HAVE_LD80BITS +GOW(ldexpl, DFD) +#else +GOW2(ldexpl, KFK, ldexp) +#endif +GOW(lgamma, dFd) +GOW(lgammaf, fFf) +GOW(lgammaf_r, fFfp) +// __lgammaf_r_finite +#ifdef HAVE_LD80BITS +GOW(lgammal, DFD) +#else +GOW2(lgammal, KFK, lgamma) +#endif +#ifdef HAVE_LD80BITS +GOW(lgammal_r, DFDp) +#else +GOW2(lgammal_r, KFKp, lgamma_r) +#endif +GOW(lgamma_r, dFdp) +// __lgamma_r_finite +DATAV(_LIB_VERSION, 4) +GOW(llrint, IFd) +GOW(llrintf, IFf) +// llrintl // Weak +GOW(llround, IFd) +GOW(llroundf, IFf) +// llroundl // Weak +GOW(log, dFd) +GOW(log10, dFd) +GOW(log10f, fFf) +GOM(__log10f_finite, fFf) //%noE +GOM(__log10_finite, dFd) //%noE +// log10l // Weak +GOW(log1p, dFd) +GOW(log1pf, fFf) +// log1pl // Weak +GOW(log2, dFd) +GOW(log2f, fFf) +GOM(__log2f_finite, fFf) //%noE +GOM(__log2_finite, dFd) //%noE +// log2l // Weak +GOW(logb, dFd) +GOW(logbf, fFf) +// logbl // Weak +GOW(logf, fFf) +GOM(__logf_finite, fFf) //%noE +GOM(__log_finite, dFd) //%noE +#ifdef HAVE_LD80BITS +GOW(logl, DFD) +#else +GOW2(logl, KFK, log) +#endif +GOW(lrint, iFd) +GOW(lrintf, iFf) +// lrintl // Weak +GOW(lround, iFd) +GOW(lroundf, iFf) +// lroundl // Weak +// matherr // Weak +GOW(modf, dFdp) +GOW(modff, fFfp) +// modfl // Weak +// nan // Weak +// nanf // Weak +// nanl // Weak +GOW(nearbyint, dFd) +GOW(nearbyintf, fFf) +// nearbyintl // Weak +GOW(nextafter, dFdd) +GOW(nextafterf, fFff) +// nextafterl // Weak +GOW(nexttoward, dFdD) +GOW(nexttowardf, fFfD) +// nexttowardl // Weak +GOW(pow, dFdd) +GOW(pow10, dFd) +GOW(pow10f, fFf) +#ifdef HAVE_LD80BITS +GOWM(pow10l, DFD) //%noE +#else +GOWM(pow10l, KFK) //%noE +#endif +GOW(powf, fFff) +GOM(__powf_finite, fFff) //%noE +GOM(__pow_finite, dFdd) //%noE +#ifdef HAVE_LD80BITS +GOW(powl, DFDD) +#else +GOW2(powl, KFKK, pow) +#endif +GOW(remainder, dFdd) +GOW(remainderf, fFff) +// __remainderf_finite +// __remainder_finite +// remainderl // Weak +GOW(remquo, dFddp) +GOW(remquof, fFffp) +// remquol // Weak +GOW(rint, dFd) +GOW(rintf, fFf) +// rintl // Weak +GOW(round, dFd) +GOW(roundf, fFf) +// roundl // Weak +// scalb // Weak +// scalbf // Weak +// __scalbf_finite +// __scalb_finite +// scalbl // Weak +GOW(scalbln, dFdi) +GOW(scalblnf, fFfi) +// scalblnl // Weak +GOW(scalbn, dFdi) +GOW(scalbnf, fFfi) +// scalbnl // Weak +// __signbit +// __signbitf +DATAB(signgam, 4) +// significand // Weak +// significandf // Weak +// significandl // Weak +GOW(sin, dFd) +GOW(sincos, vFdpp) +GOW(sincosf, vFfpp) +// sincosl // Weak +GOW(sinf, fFf) +GOW(sinh, dFd) +GOW(sinhf, fFf) +GOM(__sinhf_finite, fFf) //%noE +GOM(__sinh_finite, dFd) //%noE +// sinhl // Weak +// sinl // Weak +GOW(sqrt, dFd) +GOW(sqrtf, fFf) +GOM(__sqrtf_finite, fFf) //%noE +GOM(__sqrt_finite, dFd) //%noE +// sqrtl // Weak +GO(tan, dFd) +GOW(tanf, fFf) +GOW(tanh, dFd) +GOW(tanhf, fFf) +// tanhl // Weak +// tanl // Weak +GOW(tgamma, dFd) +GOW(tgammaf, fFf) +#ifdef HAVE_LD80BITS +GOW(tgammal, DFD) +#else +GOW2(tgammal, KFK, tgamma) +#endif +GOW(trunc, dFd) +GOW(truncf, fFf) +// truncl // Weak +GO(y0, dFd) +GO(y0f, fFf) +// __y0f_finite +// __y0_finite +// y0l +GO(y1, dFd) +GO(y1f, fFf) +// __y1f_finite +// __y1_finite +// y1l +GO(yn, dFid) +GO(ynf, fFif) +// __ynf_finite +// __yn_finite +// ynl diff --git a/src/wrapped32/wrappedlibpthread.c b/src/wrapped32/wrappedlibpthread.c new file mode 100755 index 00000000..d7881f6b --- /dev/null +++ b/src/wrapped32/wrappedlibpthread.c @@ -0,0 +1,97 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "librarian.h" + +static const char* libpthreadName = "libpthread.so.0"; +#define LIBNAME libpthread + +typedef int (*iFpp_t)(void*, void*); +typedef int (*iFppu_t)(void*, void*, uint32_t); +EXPORT int my32_pthread_setname_np(x64emu_t* emu, void* t, void* n) +{ + static void* f = NULL; + static int need_load = 1; + if(need_load) { + library_t* lib = GetLibInternal(libpthreadName); + if(!lib) return 0; + f = dlsym(lib->w.lib, "pthread_setname_np"); + need_load = 0; + } + if(f) + return ((iFpp_t)f)(t, n); + return 0; +} +EXPORT int my32_pthread_getname_np(x64emu_t* emu, void* t, void* n, uint32_t s) +{ + static void* f = NULL; + static int need_load = 1; + if(need_load) { + library_t* lib = GetLibInternal(libpthreadName); + if(!lib) return 0; + f = dlsym(lib->w.lib, "pthread_getname_np"); + need_load = 0; + } + if(f) + return ((iFppu_t)f)(t, n, s); + else + strncpy((char*)n, "dummy", s); + return 0; +} + +EXPORT int my32_pthread_rwlock_wrlock(pthread_rwlock_t *rwlock) +{ + return pthread_rwlock_wrlock(rwlock); +} +EXPORT int my32_pthread_rwlock_rdlock(pthread_rwlock_t* rwlock) +{ + return pthread_rwlock_rdlock(rwlock); +} +EXPORT int my32_pthread_rwlock_unlock(pthread_rwlock_t *rwlock) +{ + return pthread_rwlock_unlock(rwlock); +} + +EXPORT int32_t my32_pthread_atfork(x64emu_t *emu, void* prepare, void* parent, void* child) +{ + // this is partly incorrect, because the emulated functions should be executed by actual fork and not by my32_atfork... + if(my_context->atfork_sz==my_context->atfork_cap) { + my_context->atfork_cap += 4; + my_context->atforks = (atfork_fnc_t*)realloc(my_context->atforks, my_context->atfork_cap*sizeof(atfork_fnc_t)); + } + int i = my_context->atfork_sz++; + my_context->atforks[i].prepare = (uintptr_t)prepare; + my_context->atforks[i].parent = (uintptr_t)parent; + my_context->atforks[i].child = (uintptr_t)child; + my_context->atforks[i].handle = NULL; + + return 0; +} +EXPORT int32_t my32___pthread_atfork(x64emu_t *emu, void* prepare, void* parent, void* child) __attribute__((alias("my32_pthread_atfork"))); + +EXPORT void my32___pthread_initialize() +{ + // nothing, the lib initialize itself now +} + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedlibpthread_private.h b/src/wrapped32/wrappedlibpthread_private.h new file mode 100755 index 00000000..be13d397 --- /dev/null +++ b/src/wrapped32/wrappedlibpthread_private.h @@ -0,0 +1,187 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif +// General note: pthread_t is unsigned long int +// cpu_set_t is a struct with an array, default size is fixed for all architecture + +// __errno_location +// fork +// __fork +// __h_errno_location +// _IO_flockfile +// _IO_ftrylockfile +// _IO_funlockfile +// __libc_allocate_rtsig +// __libc_current_sigrtmax +// __libc_current_sigrtmin +GOM(pthread_atfork, iFEppp) +GOM(__pthread_atfork, iFEppp) +GOM(pthread_attr_destroy, iFEp) +// pthread_attr_getaffinity_np +GOM(pthread_attr_getdetachstate, iFEpp) +GOM(pthread_attr_getguardsize, iFEpp) +GOM(pthread_attr_getinheritsched, iFEpp) +GOM(pthread_attr_getschedparam, iFEpp) +GOM(pthread_attr_getschedpolicy, iFEpp) +GOM(pthread_attr_getscope, iFEpp) +GOM(pthread_attr_getstack, iFEppp) +GOM(pthread_attr_getstackaddr, iFEpp) +GOM(pthread_attr_getstacksize, iFEpp) +GOM(pthread_attr_init, iFEp) +GOM(pthread_attr_setaffinity_np, iFEpup) +GOM(pthread_attr_setdetachstate, iFEpi) +GOM(pthread_attr_setguardsize, iFEpL) +GOM(pthread_attr_setinheritsched, iFEpi) +GOM(pthread_attr_setschedparam, iFEpp) +GOM(pthread_attr_setschedpolicy, iFEpi) +GOM(pthread_attr_setscope, iFEpi) +GOM(pthread_attr_setstack, iFEppL) +GOM(pthread_attr_setstackaddr, iFEpp) +GOM(pthread_attr_setstacksize, iFEpL) +GO(pthread_barrierattr_destroy, iFp) +GO(pthread_barrierattr_getpshared, iFpp) +GO(pthread_barrierattr_init, iFp) +GO(pthread_barrierattr_setpshared, iFpi) +GO(pthread_barrier_destroy, iFp) +GO(pthread_barrier_init, iFppu) +GO(pthread_barrier_wait, iFp) +GO(pthread_cancel, iFh) +GOM(_pthread_cleanup_pop, vFEpi) +GOM(_pthread_cleanup_pop_restore, vFEpi) +GOM(_pthread_cleanup_push, vFEppp) +GOM(_pthread_cleanup_push_defer, vFEppp) +// __pthread_cleanup_routine +GO(pthread_condattr_destroy, iFp) +GO(pthread_condattr_getclock, iFpp) +GO(pthread_condattr_getpshared, iFpp) +GO(pthread_condattr_init, iFp) +GO(pthread_condattr_setclock, iFpp) +GO(pthread_condattr_setpshared, iFpi) +GO2(pthread_cond_broadcast@GLIBC_2.0, iFEp, my32_pthread_cond_broadcast_old) +GO2(pthread_cond_destroy@GLIBC_2.0, iFEp, my32_pthread_cond_destroy_old) +GO2(pthread_cond_init@GLIBC_2.0, iFEpp, my32_pthread_cond_init_old) +GO2(pthread_cond_signal@GLIBC_2.0, iFEp, my32_pthread_cond_signal_old) +GO2(pthread_cond_timedwait@GLIBC_2.0, iFEppp, my32_pthread_cond_timedwait_old) +GO2(pthread_cond_wait@GLIBC_2.0, iFEpp, my32_pthread_cond_wait_old) +GO(pthread_cond_broadcast, iFp) +GO(pthread_cond_destroy, iFp) +GO(pthread_cond_init, iFpp) +GO(pthread_cond_signal, iFp) +GOM(pthread_cond_timedwait, iFEppp) +GOM(pthread_cond_wait, iFEpp) +GOM(pthread_create, iFEBh_ppp) +GOM(pthread_detach, iFEh) +GO(pthread_equal, iFhh) +GO(pthread_exit, vFp) +GOM(pthread_getaffinity_np, iFEpup) +GO(pthread_getattr_np, iFup) +GO(pthread_getconcurrency, iFv) +GO(pthread_getcpuclockid, iFup) +GO(pthread_getschedparam, iFupp) +GO(__pthread_getspecific, pFu) +GO(pthread_getspecific, pFu) +GOM(pthread_getname_np, iFEppu) //not present on Pandora +GOM(__pthread_initialize, vFv) //%noE doesn't exist anymore... +// __pthread_initialize_minimal +GO(pthread_join, iFHBp_) +GOM(__pthread_key_create, iFEpp) +GOM(pthread_key_create, iFEpp) +GO(pthread_key_delete, iFu) +GOM(pthread_kill, iFEpi) +// pthread_kill_other_threads_np +GO(__pthread_mutexattr_destroy, iFp) +GO(pthread_mutexattr_destroy, iFp) +GO(pthread_mutexattr_getprioceiling, iFpp) +GO(pthread_mutexattr_getprotocol, iFpp) +// pthread_mutexattr_getpshared +// pthread_mutexattr_getrobust_np +GO(pthread_mutexattr_gettype, iFpp) +GO(__pthread_mutexattr_init, iFp) +GO(pthread_mutexattr_init, iFp) +GO(pthread_mutexattr_setprioceiling, iFpi) +GO(pthread_mutexattr_setprotocol, iFpp) +GO(pthread_mutexattr_setpshared, iFpi) +// pthread_mutexattr_setrobust_np +GO(__pthread_mutexattr_settype, iFpi) +GO(pthread_mutexattr_settype, iFpi) +// pthread_mutex_consistent_np +GOM(__pthread_mutex_destroy, iFp) //%noE +GOM(pthread_mutex_destroy, iFp) //%noE +// pthread_mutex_getprioceiling +GOM(__pthread_mutex_init, iFpp) //%noE +GOM(pthread_mutex_init, iFpp) //%noE +GOM(__pthread_mutex_lock, iFp) //%noE +GOM(pthread_mutex_lock, iFp) //%noE +// pthread_mutex_setprioceiling +GOM(pthread_mutex_timedlock, iFpp) //%noE +GOM(__pthread_mutex_trylock, iFp) //%noE +GOM(pthread_mutex_trylock, iFp) //%noE +GOM(__pthread_mutex_unlock, iFp) //%noE +GOM(pthread_mutex_unlock, iFp) //%noE +GOM(pthread_once, iFEpp) +GOM(__pthread_once, iFEpp) +GOM(__pthread_register_cancel, vFEp) +// __pthread_register_cancel_defer +GO(pthread_rwlockattr_destroy, vFp) +GO(pthread_rwlockattr_getkind_np, iFpp) +// pthread_rwlockattr_getpshared +GO(pthread_rwlockattr_init, iFp) +GO(pthread_rwlockattr_setkind_np, iFpi) +// pthread_rwlockattr_setpshared +// __pthread_rwlock_destroy +GO(pthread_rwlock_destroy, iFp) +GO(__pthread_rwlock_init, iFpp) +GO(pthread_rwlock_init, iFpp) +GO(__pthread_rwlock_rdlock, iFp) +GOM(pthread_rwlock_rdlock, iFp) //%noE +// pthread_rwlock_timedrdlock +// pthread_rwlock_timedwrlock +// __pthread_rwlock_tryrdlock +GO(pthread_rwlock_tryrdlock, iFp) +// __pthread_rwlock_trywrlock +GO(pthread_rwlock_trywrlock, iFp) +GO(__pthread_rwlock_unlock, iFp) +GOM(pthread_rwlock_unlock, iFp) //%noE +GO(__pthread_rwlock_wrlock, iFp) +GOM(pthread_rwlock_wrlock, iFp) //%noE +GO(pthread_self, hFv) +GOM(pthread_setaffinity_np, iFELup) +GO(pthread_setcancelstate, iFip) +GO(pthread_setcanceltype, iFip) +GO(pthread_setconcurrency, iFi) +GOM(pthread_setname_np, iFEpp) // not present on the Pandora +GO(pthread_setschedparam, iFuip) +GO(pthread_setschedprio, iFpi) +GO(__pthread_setspecific, iFup) +GO(pthread_setspecific, iFup) +GO(pthread_sigmask, iFipp) +GO(pthread_spin_destroy, iFp) +GO(pthread_spin_init, iFpi) +GO(pthread_spin_lock, iFp) +GO(pthread_spin_trylock, iFp) +GO(pthread_spin_unlock, iFp) +GO(pthread_testcancel, vFv) +GO(pthread_timedjoin_np, iFppp) +GO(pthread_tryjoin_np, iFpp) +GOM(__pthread_unregister_cancel, vFEp) +// __pthread_unregister_cancel_restore +// __pthread_unwind +GOM(__pthread_unwind_next, vFEp) +GO(pthread_yield, iFv) +// raise +// __res_state +GO(sem_close, iFp) +GO(sem_destroy, iFp) +GO(sem_getvalue, iFpp) +GO(sem_init, iFpiu) +GO(sem_open, pFpOM) +GO(sem_post, iFp) +GO(sem_timedwait, iFpp) +GO(sem_trywait, iFp) +GO(sem_unlink, iFp) +GO(sem_wait, iFp) +// __sigaction +// system +// __vfork + +GOM(pthread_mutexattr_setkind_np, iFEpi) // deprecated diff --git a/src/wrapped32/wrappedlibrt.c b/src/wrapped32/wrappedlibrt.c new file mode 100755 index 00000000..84b7730e --- /dev/null +++ b/src/wrapped32/wrappedlibrt.c @@ -0,0 +1,80 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" + +#undef aio_suspend +#undef aio_return +#undef aio_write +#undef aio_read +#undef aio_error + +#undef clock_gettime + +static const char* librtName = "librt.so.1"; +#define LIBNAME librt + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) + +// sigev_notify +#define GO(A) \ +static uintptr_t my32_sigev_notify_fct_##A = 0; \ +static void my32_sigev_notify_##A(void* sigval) \ +{ \ + RunFunctionFmt(my32_sigev_notify_fct_##A, "p", to_ptrv(sigval));\ +} +SUPER() +#undef GO +static void* findsigev_notifyFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_sigev_notify_fct_##A == (uintptr_t)fct) return my32_sigev_notify_##A; + SUPER() + #undef GO + #define GO(A) if(my32_sigev_notify_fct_##A == 0) {my32_sigev_notify_fct_##A = (uintptr_t)fct; return my32_sigev_notify_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libpng12 sigev_notify callback\n"); + return NULL; +} + +#undef SUPER + +EXPORT int my32_timer_create(x64emu_t* emu, uint32_t clockid, void* sevp, timer_t* timerid) +{ + struct sigevent sevent; + memcpy(&sevent, sevp, sizeof(sevent)); + + if(sevent.sigev_notify == SIGEV_THREAD) { + sevent.sigev_notify_function = findsigev_notifyFct(sevent.sigev_notify_function); + } + + return timer_create(clockid, &sevent, timerid); +} + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibrt_private.h b/src/wrapped32/wrappedlibrt_private.h new file mode 100755 index 00000000..dffbc20f --- /dev/null +++ b/src/wrapped32/wrappedlibrt_private.h @@ -0,0 +1,50 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +//clockid_t is uint32? +// pid_t is uint32 too? (for clock_getcpuclockid) +// time_t is long +// timespec is struct LL +// itimerspec is struct 2 timespec (so LLLL) + +// aio_cancel +// aio_cancel64 +// aio_error +GO(aio_error64, iFp) +GO(aio_fsync, iFip) +GO(aio_fsync64, iFip) +// aio_init +// aio_read +GO(aio_read64, iFp) +// aio_return +GO(aio_return64, lFp) +GO(aio_suspend, iFpip) +GO(aio_suspend64, iFpip) +// aio_write +GO(aio_write64, iFp) +GO(clock_getcpuclockid, iFup) +GO(clock_getres, iFup) +//GO(clock_gettime, iFup) // p is *timespec +//GO(clock_nanosleep, iFuipp) +//GO(clock_settime, iFup) +// lio_listio +// lio_listio64 +// mq_close +GO(mq_getattr, iFip) +// mq_notify +// mq_open +// __mq_open_2 +// mq_receive +// mq_send +// mq_setattr +// mq_timedreceive +// mq_timedsend +// mq_unlink +GO(shm_open, iFpOu) +GO(shm_unlink, iFp) +//GOM(timer_create, iFEupp) +GO(timer_delete, iFu) +GO(timer_getoverrun, iFu) +//GO(timer_gettime, iFup) //time_t is L, timespec is struct LL, itimerspec (the p) is 2 timespec +//GO(timer_settime, iFuipp) //same, p are itimerspec diff --git a/tests32/bash b/tests32/bash new file mode 100755 index 0000000000000000000000000000000000000000..bad714a14f58b910a4a456619e6cf2d93ea73632 GIT binary patch literal 1367848 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

n~&ehQQzTptu#BcLs*_{!zy;KlOn~ zpO;^a{@h#08EM-;7kwNUF8Al#SI~Ywh(GGkj|Y;my>F8w9trxd27h`t#OLeAp9=rC z%k$5BzH&N*{IZah*!eQh+nD({tW?tHysK8@(O&t zeZ_g`=d0x&&+kY7YVVBm_hZoiVa{t@~nE*6{ANXDkKO=iSm-Wa8o+EnS*bY3| zztHb@9(x%2O@3FzW#Yenj(!XU`Ny~Bvws}qGY?mgp9cMN!0$VP{BbV$S{?AOmOy%# z^X`?7zW2}M56*v$b?x6@K)w+8uN>p83C6pfb_Gu4C3pSKII4+(K95U4?+*+8e$+zd zuQ({KrzOvZp7K1iyVIY;!1J0(g+6{;hW-xlvW-)mzqz~_{&F678z-OVmLPx5tL*CL zzbeCg>=*L0%I8V!acGNpzirPP`V+(>N8HHxL4C6neHxw@%V#F|UmfI2_Z-ap$B**+ z0rE}Y;p!r@4Ga@~IjRzR*l&sOax3udpa9=f@T;1aenFOA{~q%Vke^_7+HRzSubuew zLr1{RbwPf==t%l0Is*fG{m)LoUal-R%N_q-75YcV=aG*Ae`Fq*#s`$^>c^8<5`S0CpaqV;?U zo>sFT^iy~J{1)cteD?N^o}Y4I^&9c|q>ItN{)0=*Iw#+E_U6Vb;^&2D2|ZVpd%PM4 z{k1h?{C@sz=fj_dxPDfQzT~5iWelVB9_(vPp#Rn2Uv&@wgS?tH5K#s@K1I2G>(hh}OSDFC7$dCb|Bx=V9O1<@@vBTY;CgxqS04 z*MIvs=p%o|jFsLO;9vjm<9g{3_ViY;-*y!1&v5=&U_|tLcEX>Y*)rpnm~g{2N7B74YZIg^brwZqn}l1_G18%6xqfo6NWKY~~*|+F+hK ze?Rm0v0kRt_Gb81L%g}hwI87)6U=uV@~Yu^jU)5z^-~28=9QVZT>I~H;V=Fax1re{^j<@kn5gk0S5>t>Wjm*W#ZCcs^vc zo39&r92v;F?FO!Ay^%glgMZblO3fUnudjANA0JRJbNo69dmVnW#K${tEN1^Dz|SWE zivBSrK0kf?c=#X0OV?lzeZl$qp&r)zQocFSjlUSftO(-si_x#lv7>yw)HRr?J9rQu<%OiS&={5XFdA);VAQlTi;b#))UlY3(==FLB8-7 zc$DEh*`98^QsVWpAl`br9saW4opb#K$UnpW6K1LNAN6h4L;i*MRsW0U5g!NmTz@R| zus`^;yM8_Vs}1_+(;hgd$iF}1Y5Yy!C52`u$FGlASk1;#)9uq2Je;2~PjRCz~ zSD`+`udSKY}Nbw>E9UG@2B{m zp*o&3bNvO&S#J>k-+(^VuwTJtdjHD=HhqWW`RBnOIg#_-f&Bhh3mydLdEY(=`lvsl zR(k(L@HEq3Vh(Wj`^JUP$9c@6Xnt8A{)>O~`afg8)ztrYb?svp&`VGW;mY^ZO5<%%&qauduQk zc{RlE%XzpIel?c+=O5Zf%0UJWqfab^QOp-Bg~K$Y$^9?)nV) zJw!c!#I-kopS|T}-e3O#d#Vil$9YUN!uwgG`(LZWo`d>qFYUq6W4wRs#-4h4K8~N2 zzVE__{@z#~zeXQTSCO}uzluF0kNNKU6RVKVuS(2u@KyBtEd1LL^_*F*|2wttpXbj{ zb?wRx^zT?|UU2$QJA?7qkKNDpw^!2MDbMFuAJ=m|`$PGTKaaBBp($nNU3dTJld+#5 zUX~Y)RP9vk_a|OP-+J@%JYK&Fe(e#&_wPyIguh+x=D!AcJ(-NxUws}O!TT*{!>Fpy z3rvrj|M%!ihW(6PTzfNkRB^;8Gun-}7<(8O;Q3w1vy%KX!pBYEU-bhe=EXeAzo+oW zl|0`a#bc}Ccf-3;J$Jk*hEapW)9<+XWMjO7=gl5>^ObRZ74H}8ckQRJm);=XO{~El zIX|_x>)&<`^6Sd?`R?SSska3Dxls658lSiL(=Ob<;}~-U3lw?pzcc!b{Em0yrLn(( z?FxPUtqXrPC9v;$6tjl>9X9Fx2ky)GfxmgRg!+A8UtK$(zrlX?(|ceqe;92hy7m7P z`8NdjkE&%n{P~t{{7)vbUlxql2EBum%e=o|jK1`4Q|`z6`#IoKkRMGy0RHm4azyXN zN!G{nix0W+ClVhRo?ndg_cv>iXW&2H0WS>om*2YUzc2g>!<{yDmk)0{?v(f#YKVzTUo$>x2F0F9pwT;dwuvAb_g{^vh zcLI8Oe+tXf_7=#$|CeQ^+3|BB^o^X)IdRv&U@Gh3Jo-}CPJo}8cjNOw*?F|@iJ!l} z4WOv_D&KtSuKx+~#Xwns`G;$NguVAq%+vRtihXP(aH`#{#Mf7!V4?x)o8NNR@30qb z>fKXZdq)ZUFE8@(T!rwvFn*r2bzAg>e0g_w{l3`aAoU+QoT(zR8!vAD&12F$@y=Z$Qv}fxJ@U*g3z9S!n;ki?F{SpZ$&S z`__DOiR+h*rOdLJzNzqI_)g9*x&EKeMn9>)rCs|kFy^%Ye`lWzfA-Gv`NyO~(1!p| zevQ5ik-whp?%$K~rU&uRmd(hEdS}k9=QJ2y7U1NJCHqz#@0iuG|2hEs zsb&9@VRgKv;OQ{$Pg(5Rdn3<&UQRUK(K8zT>wmq}Jmc);JLfVV@gBG7{qe zuN;5-={Lvne6<^YpINLQp?A9W3iy9l;E&$li;jcJ%+YTCAMS^}2mJ#_Lm&Hzo8A3C z1|LUwNG|f1`!rDx3f8wZjIZ9l(8t5;=F{G#z)W!C5AV-#u&D_aC8mig)mTWE9T}yZfI(QTy3Xe8RPp;7jG}`92;T+L|`!ADBk(zYBY<<@rX` zR@>jd4E@0We@a{GrN26vKZ5tC&YwhmG_dz#6t9x~l$^VN?QzUc{+6%zPcWANG}X7n z_1jHd=y%Y6JL6Yf65~z##mrAV8n>bJWY>Z>vpC;SXxpb2BQN%wFL3?WT*G*Oi=Q9( z-VNAGexX_G*8c$mJsI%-wQ~5y`{Y=*jz0o0_uWwL`TJAwX5g?wb8CU^-wJ%)5S)*C z4*ec5y#LkRe+Y&;xQh3yI{F$BTwhzh$DfZ@z@K+YJ^sJ25Pe*n@6Q8$QcHU>^>Rn= zOXy1l^~kYq{3EYt{i*nQ|CLw6-{5(cmm zF9|*DH(lcH&(N;8^9vo!H{m`gtDr6xSX(gZwz~zunu@ zza{%yu7CBR&_BJ{*VFInA-~yTTRl%9`RZfKSTFwVUU&V0M{qy+<>9V<@gc}Nzu4<< z_9(6=pAvnS`!_5?f7X`y^Ii8{3%{ucAXeqaOEa;jH{$bck3vr$?;DBq`5yFPc92h8 zfcuFz=XPzmr^!HW5zuHmeggo26=ot7r zQm)^H514jUOa1xp>tIBN{gdVH{>ic);_rw*?_p1wwej|+o-o}%=RH@_=neYcdFF|0$@dno!`9lTHD0nt|u z$^6!hHx0b52+l|S5n!ky-;VTg+bgk$sm10Kx4yeYzQhw7b-oE^4Hpgu`SG<=$(I9t zoIDLY3jE^^tgkBA4-lcE`I{U6B=|FMZob*x+1HYj886W1Cs4d$&et5_p6O= zw?rRaDED~$E~aP#{@uAd{J_6O@}2~K_L1-LkIJL18U0;QZr+$=+dsLH^Nm5i^l}gM z-Ock(jvqS`fA#-g{C=c|E`(m5e|X=GcL{=@0)Jo!`n#=Jd?@R`GTNWo*4%@B$je?( zTb=()D>nq&-KU|G`vG)UAf5CL{Jcu7ZKOXvcImJTPe|j(SDqz3W zwO>46>^-)hGmuZ^CFTBn-v?t^&qJlYp8h5L9|`0;8@w9fygX*4^gV<9_LKkA(iZ#N ziS^dvKQJ5ZUj^Y+50#tu9GzVH|*Z;{4{PCUm{Z7sFe;&l|CH2VjUq$BM#8F}| zONqzc5AgaN`UkrTWB*u${RjB66YUEFeb1f_p5>MK{j(?P;P*e{_bYFMy$!Jcx5?4B zFaEbGSpU$8@N0+o{O$6?kY~`pbUyT+Rpj}973}^S44-2`! zn)lb-?)tAF@abPcJuT0!e-QiG6r5kJ-@x&YAYS@BiF~dr^!etSM<5R#0*=mq++G8H z=r6-6Kig3JVfJqiaqUz0habs&U%#3SfBT*+_Rl*X$@Lood+20-vqPaj|8wY4uIKrN z4Jf?G>ooK`Lp}C5H~v>gG9T-W@M-&9C>I3weD^Hw=lvbPnBG5z_?;+Nq5ReMAK(tLm3>ow%v{cdFc7z%xcGhAqb@*y@Q<)X z`FRaMP;+jP`I*DZ0VX~Y|BATOe!rN6erJn({Ijx;^|Jo}8}$D5{LvrO?-nfq--7l3 z33&|eTITt4Q5o%Li2vMru0bD1j^lj!Xgl6m{Mpdqd1j&Oe`PK6&B)`O4z_>e4)EjX zQcq7qg88SF`SXUA;6gv|gBs)Ld%cnTe{-}SGv3_C`l|x}_V!s^&-*iy?)q&nr~jS; zQ|$P01^#!4L4hG%@3?O058}JR1K=O;^FVF1zn=LrtIBC$m2n;P(p|=;Qn-W~Jlb zgX4H8@b_;|K%Y53x~J>kg84J-w_)ab{qZL-|4VWG=yT+|G0=xr@F_Ez_XRn5%mVLv zi_6V-U3)d{b;0|qPTrO4@xQ>Vj-NUPeGlU8vzyVcUCR9X8UA=E`Wx8qKk=_sd?fID z?*5VeSU>wqT&Cmg4gKo^d0em#`uEKD=XIB`-oYQn@!v+^)HOiYnL$oKzE^!*Ahn}U(QEH^fz9EyaM}v z7=BE|-&wra)|@;S{W^V&c{APel;lUC6+Lv*UWs3&)Zl1^BpX zDmNZqfX>+Q);2Kz&7*z2D2u&Tzg+6iAHPPRb4;MGf7l25gL>?Cq7T%Q3miRvyc+&( z9mj9a;BSUbA#B6kUvDaASwMB{Fzdcy+ ziRXI=+w}e$_rjh7c^`iq@o?bpKEI0f>{j5vFEwQ;H#WxaL!1Y`RPjE71KoJ5&qjTx z$LBY0LjQ)Se?IQ|yH??!gLq)OLs-ulrKZ>Q@4gfCPcJhcy7trsoG%LM5v#^SZ=m1j z!jBs2c}%10xqBY^8`#5R;9D*6SEMh0YUBQE3jO=Mr?0188rai`*vG)yJfHvn9D0@p z`hCh_;Qh|L57hDZt_zXpUwD4P$>)VC)6XMp*O(GF7TzV0r|Q4A8FyjL-YK8{d>q`kdH>l`DclDKfi!B z@nF)?v*g?GYo9{DA2_Cm@kSS#=UsnyHGhCNQ9OPW{2MMPG~ajq+k-C^)W5|H#9o)~ zhrY5O3!Ai^C`DhWcYNg9yOwi3@B2sXwEwep=))i4_t9?$eO23(nZLUJbDH4)HhKR2 z((lgXe$IO>kM0Mrs(3zte{{Ub#2-UV@$*=ZpGAAuJik9WV-4qjgZN`?n)U8c>iySI z-R#!{@%$$6B(pl-KhOG`gNV<9_^KcKs%8HKvFrR#An(jpC8l|_ZSTT*s`$!eHo_W)? zzYm^OoKx)U-o*hP{Nm5>yZY*FOcnYl`dYUK>kIVl=MY}WdG1Jl{~>#wIh#C{>uX#4#I#6y98UP*jZ!Se;jxc*1!&rq*uckSbl zrr^dJ|3-SDe|kR zj^Dpfg8T-lzoVu~@02Cz%eC=&idiW7AcvA7d)O02t_l2I2l`df6hBY*Q|x7%;Jo9h zJA<$IAHojBtL;QT*-zTw<~t_Cc%0t@Hg*1=6Nd~1`SVQ+(eJn7=PwSqg8Va(|2_~l z$a$Re9l!Rug!_qyQF9%yV@u{Eo_p5y?@@+-Javp2?b=(@9^`!Wx7_vj9?Ku>haB$O z1pv|TQt}h77rZ@}{!HL64h6qPsMi8hI^PWN)Lf8n{S)u87{j!nU%l84M zy7n#;nLii5zw%h@V}$x!^nA$G%r|s@nSVaNaBFVleKtqC`=0^dDtTW4x9R+MtYUv4 z@W0Q_Wh6*2$c znvZ_5zlGWB`byBZsvq(`B!@50^`WLL{De%J(uSWX&B8pT?zHq6#e+%%m zCdijggI~3r|BCS9&)8!P_JMk-e)TK^pFfPx8|0%$733GNLFxG|hSUeYP;+g6hCTGp zEHN`2{~yHv49+U`?{ggyc~B1@=dOPjeeb2-mv!wsCZS)0ar}7*cz;kp@84x%XB7H) zsdNVOvw!@GyZ=uZ@-W{git0l>)1YT5^<@?${5xh_))&~zY~qos*UHRfcmMk9;Ky&# zKX?7ezMPK;;^zx;^tYB7UP+_lRin=j1^(bahtdCKxw*-WcS{}c8RXl$;+QHw;{25B zpAVjo>=T~{`vHuo;QVE!>)&^8=;!=n#Gh%%bDLni6VqHszH@}T{`Bj)|FwKm;OPGn z{Qfj}pTz^~kjH{Cihsh7f5ESj?c)0R2et4o@K+ar=l#UD0`P)2=YVhh0Uj>Ge*5@- zSQKyFh`a{-WB)gDKK$Od(C4pY^)MJPbM6IPB z^vqT03*VoBBIW54;!Ua}&&_O6)5bZ(J?oGg_3-TzM_u#|ZL;#o*QOINo3G_`fy$8`@B4&MdO@ zO=|-mg7t0&FGe=S&r@ALo^UwG=WFKC&-*x<-Fhc{oA@D!SEitEnVX8t=23S1;$s-U zBj4QVu5URWd67>J(iZ-ejir58sXw2v@eJByW6_Vs zeD6OVWPN6InW=U6KRSu{Ihg-lFzH^4!yh|K9b*| zS@iStLLZNQh5ih0+D6X{3cm^#KtFh&=k8yGKj`EAw2-0e+3865M}B&V3ARQ&-m|_o15MI3s0eb6XNzYcfz|6o4tfZn<7jK}kqsF{wx$1?OIkpF#qV}HEgZIkQ&>`dC6w~pfT%P&J8 z_@2x6UH@;Y!Gj>aoD9G34f4?wz@IAiD^PQtZ`wiBOTeedzF$UPdQXkte{{sr)I);& z{P0@jL%jttS$_0_-@$s$m`VrFcOn+;Uo!{()y3bl?P22nAl|G8j|Xpy-*36?WY+V` z_`J*xIL4|VexF)Eo98cfcH=*UpsL8HZ*ux`JNB6QbhOzY0~37yE%sg&l?>}z5Mc_%*SMmEp&t3?>2^u!L{(F&+;k-evz^jfF^naW4uI~B*?6DU5?{V{g(TzUWj`8u( zZz|De%AI%svwwx zZQB2T;N{3AdA|OghrUb+{N^~_|G4YF*pc?_W&Zu5U!hM!LH+NI%b}O&Z=-l* zG5BqG-U^u1`R+l!(*ye7X#!t^{BiO2=)-yOd7pDnMP6g$?;W4PdPcS{_wRSP6L}1< zKT+kz?}Fb3|FhV&- zH??m3=WYNGg6F;703VJF?B@sALv`?cUK_wNG$F2s{vZ4?bK`pAv1`Cz&O1f;^bYt? zGbw(a{rhK=zXb8aykhKy=VxUY;n&y(^z$F!vBQ(2xIPo?cU@J1yk9OhS2_J(1>@fj z)^|(~0|oLfgZ~4(?D#A<{y$rw|66%xvb%o(eeZ3J-|xBT2;{L<{C)7Z>X^T!(A?+f z`ORt6$AbFrI0Rc8*vqC)+T-&5e$pN*n0WU*Gs@XVK6cX=oS(ROPx=>fzS8yYjD8jc z@#{l#p@;JUgz?IsF6@0cue0mDd6ZU5&ntRL0*cet8!AvBCS;UtC20Me*|+%jYAX4@wPe(De|io4zl% zFkgW4vc8of`1ePfXWV=#YdNyr=d zZ0qj75B#lVe-O6mcyAm9|4)dY7ax5Y_O%Q33fKQ4_+GWJ)ITpU5yKvOG=Bcz&g003 z19@KG#`VY>w(9uHRzhz;UjvSy;&HwYpI+Mg%x!oLm&_P==s_#U*Yh_Cvo zCx6GSuL6C%Fc`o4V&b3Q7n_gV{C9&VBYcl%iEEEVUV{(D&j+54zGeb>&0WidzbG(g z7g+i~n!@$O*JAdff3Gu8WgyRG$m7Dm{$K9J9v&+&#~?Sk{weUk@($t`=oP$w_H_8a zpin*mr2Y4ypBeU3l5YIF)Aaw1^L1{0H!y$y4@(TMSkvo|M=+IvzP#6f{XbFe_2VM= zU-3q~zi>YBQs(*id8+d5iKl||$0y)ls*4MZEL-TEjsJf-Sl>kOcVK#n{~qBBC}Qt( zqy6)1e?Aj^_%qMHIC>v|pS4p8%`vp>O|D{&|HTorAvczFO2s z`&-XrzQytT>;8q}W;pM#$c_Ijj80x`6{%}t%>+3D|&tLun zJg*|3ywr_%Ch{9vK)u8H1BNz3dlvfm;9~G(AkeRhjo4d&2P@Hs3hF(PeeK8fmAg?7 zbL0Ia!NQO~;#2w0TnPP~r$Wtjy~_`PUwnURylW>>w91#__YwW7ijJ`*X1UXs;!C)G z?^6H1fI;-BKUnYY&V`;C#l9Y$cNq60*XaAJhcHeJ^__3K`Hr8CeFpgd4?5Nb{$ub+ z_!;=0e_sm!0{^(HtY=O9e)D10JB0m5>p8X_ec^eqsC~tH`a6pJdG|G^v0mzN;xP5i1@#{miq&JxmDy>5})7v{R!AlK<`c&^mo_z zd6aVW|0D1R_F^v+%+JAx{J?$|lri2H@%I?sUxPk;RAhE>^xraz_D*G{+~MWJ#EY{p zjrWtUM&EibE%oQ;Ufu(F2J1Nt{`Lc25x+kdJm!2mu%Z0B89ZMa$g61@*Hb?RcC>#S z_YVf=x1SqFN8n$+yBhwaO8oZ${<;qP3F@VN;Cp7jd~=4=uf5TSVdRg->G;29zSD#J zFMTNTU7crccKsWmZ-nn-o$T7Twb17I@G{4r&(5QM7})!(2y!U+{#?2jddRn6qs~_Y zzE@ZBzBSi=1pDk=7=Lf&dhl{!=TdWp)5pKehF|0>6Te z9{e2ID}G;m-dU{os$zdWa^GWFAJ6yi=kD)>Ujxq-n|3$fR#VyT3H1Hf2SPvf1b$Zf zFT~z^gLvwn*TIhr->Y%`Yq#T%pdNP#@tI+NVQ<&}KriFJ8-JhjVDQ&azs3#d`X0r8 zhKZL^E1mC57~lKP_aPVJ&pyF$o($}zbPDU`eH@X07!M&s zyw4_jp63JPSH0ILbFtHpF-vKaFGuUWb_Q+Ek02(UZ?fnw=PL;Nv|YD=`2%}Mtb%^t z54nr$KNP$gxrgU@UHfIO?+^6%kn;Edu zV(6=EqV4qYqp|QO#rYJso|P!xyU94-Hi@H_EJ`$_vZ5-yNZ3pN=Yvq_v(=3Kb6h4XPN9+CT>W#B|3Ad2E+CB$y`cq%eB`p zPj#5qjjw}(^%i!+TH-=nQXePqcKt6yxinc9ZgxGps}qr*-_uj z2dX-n>)YEJrKhF6KFLyB>#`l~E9wpZ*V4Wsl{HPtH1lUIG5nEBH?<{OWSX{mW^Jf% zW2qgf?heDhnH4fTqvcZBF8#A3o2_qV6$!Z6w5&CwguuI0cdDM7qkC7>Gi_^~9iuZX zgf}*%S~~P{wAKQfT8 zqCO|gVj`UYCLoR$R058sg&2rVHzDkf9)6MAk_`>Wmxo7NQ?2rol_E0Lbucw!AiB18 z_+OvwNVm6{j(RSHvaG3Z7N&{<$c2m`0%aAJkF9mNHr0h3N?~=PqX%kJjL--p3|yLN z>RVDtQ4Z7D#;_^oh4%J3kzc5J=_V)@0$H2oKJu|w=T@W}I-0qGrEvv10?QiOJ5f`S zA^NTA&0@2ixnxsHf6fV8+Z=1MsazA>lLe^et1)GAsg_hd)+Wo%G-Wfw%~We^dsj-8 zN_fpwi9}bfEueIHx}_!4q(Vz}7=(q2i3G7Zxx57o=$N&y2qYtOLRBV}$|_r6Sh_9U zAuF+Zs`GG#T-dQvR^Qf=Xi2s;sl>$Ah5wjFx~^WdNNiKMknIp1iL|UvL?;unOtB0U zzP=q&5Sk^W1JugGcFRZZ$8cn_bbEaVO2>^Y>DIJR-IQ(b%m^3i&?LwV7cO*4x2mO` zC)uEuL=T{-CYkBXA^=^UV@P8fA+!r0n%i?7%7^;q_7!dNOZ|!l)3_p=rZ%1yl}uQe zqepbPy|E$L!)o*%s7}_adbTbHep@p_E%RC^u##1Fa$!2>R-nqRHp+Ta%S9||Yb>qn zYuYFFDCTX+FpUk0v)L3nna*6PL>{)dG5;HBV}H(=z{RoB@FaJO}|K$GZadrOOO!OM?{16Ab;0V*zN z=nyxRletz1ufP!g5mgs+jq=(KlHXVRTszF9f z8My={he8|-jk=zWRH8kb#(r_pk+^f6q5^5TK&=GmOq|u(&Qh8PG;-;zxO1f-(b%44 zrq)&{R{}5&J9sw|23G`rbCxuXK{`R2rbIK5N_!R$BkM{uwY1myiS$|=Kf?-*x%SR% zeX5PHK|K`|fv+$jh4X<;NJF@v=t{P9rc7tLqdlj<-j=|2TU(e$7SWK-)hDwJiRG!D z)?`M0=}ITi8&R{)j>g$It6XcH&exEtZ^13lTW{}dN_QlZ*{04`2@2}lI{~^RG%stf zVt?`&%mzG4pjH#G{lhI% z^cvjAW#Br*>xhjFpfke2JGFLnO01(2Xi38H`a}kPqA(fIJ=MWK#?hM2(F3h5Ddmf( zU96*`h>huP90p@_VxS3>LgEhU3K?OhRfx1xA*4e%hc?T7bwJ~Cu?1AX$N-r%@ruk$ zB#`Px7{Xs{3ys!D4C*>t8WO~Itih_1hKO(w4QxphJERi86GqN0PIF`;VXw%6zXQ=F z!Ad$r7vMFvSeMK-<4jTs*o146JMk&Rw6ZSsI|2#m#+-@8Ti2OxLC$hYJ<;Ko7IOwe}+gT@Zh4>d#0#rt^W2$qBj&@lZ zDxf`L6_Hm)$V6RN43gt*OwxTtg;krX)wN}=Ro z;lwP$aM(uFs6NQw+u5cfi!4H5F4gGJ;%huM9nC45JV2Z?Q6;~#4Wwcv>jvj^D$PR@vn2)U_3DVTAB*y8?iPn-6 z)wQFDNUd$TM{wnf0*8vsDi3^7EQqLv$B^Mfi%LKx7T|?V3?i0?Hxs%g$o?NoM^N=C zG(fRIO%vzMJy@L8BN-xEhz2I)Qpx41#0oTkh|__4GDp^?O4C_qQmx7QoH)C-h5%P% z15kq@^N?swhZII?oK5JS!oV9+T?t7sgq{eMbuHE-VDI2)&Um}+lw3^#x~HcNckNIf zo6!{`7Map??lZHaok&2j8;loI79JB^$a)3;BzBUit<@n|k-cD91lqz2R*ge!!#-7$ zg+s|k&_IAma!7&9Y+Bu_5{zMHTM3$gnsjR`>cn3ys!omd0vi<;e zX4{SPimF-uZ`3Gdn#Cr>C9SkUsnwEPbGnh7RY^iQRl*r@<4k~^W}q?`D7PBc*VMaH z!)wsd!c|Lq6Ck7Wcs)^=i~J}Y6`v`PZ^H?>OiUH4*Y(rVh#GXu+E7T<+(MJ^k`b)W zGAr@KjS@ykuA_6VAmTwg$lH-=Ho^bY4XfvMA%wt(@Q_Kx$^bSQRNzhsz;8;^b*xBQ zo@<0+!AuGYkeqH+XVjn+D!0U2wI<1^xt;65H{iHI#2F!jthA2U4p&uA9+^$IiY+v2 z3LwxJ$xDNJ+%Z~I*XbN`)E9+N0u3p`6xF&0JP}z_iWT*BAF0reDE zB%-(ew@V3-$?@WDXm32u>8bq1j8@<}F(FB@SrzlN$jTC|H>tm zL_j1&)QRpp)(Gtcwoyyc5cJ$G#bu&SXacz8Fc6Vjo~C|d12kl7eN;*_Y85J;uURIt z$OxLs;&L|l&bkR@m`ti3uY`uB&=@Y@H@Sa>f*|>~1si@6BhWO(uv52X;KFhq!;ZW)=LYF4Px%nJ89Q=h1&m-F9Htp%>FTr;b!>n@rmkKcYqUCP zJyn{j4ymyS5<-cWtcswTwu-Zoz)9v!I?^q2U1A^RWwI@Q0RJn3_&c(La>^O1X2k2h&0tVsspApy9}MuWFX9s zWo)2as#mBOp}KeG6dAzrp2!DCWS7Oii2hlDT2~q|(E?8#Y@!d%>ia1#k2W!PQ=D1P}?>;;=JvQN55rK4FJ3AIrgg5w&B$Kh@ri5$BPEL=lBsYz(L#L6C@ zl@sl7KX%uNWAaO}07ZC6eBjv`tBY`23UDFJMaie=Xji(ms~#ne0s!j3ZJLj&@6>`A zjxr5!MFxty)6uk^!U&>w6cxZETO9CtsSAiYbFwcXbrSxPXg88hV_P?{KvpVYkQhr= zfrnx@X)8q~$*x$EHIE#{Z5&yS97XGKvMwJMxS|wepySjHEQUCEY;PkPiqO14vY!Yz zZ4?&qRTE`_0g(prgV=*`h#?^e5NU60lvx!NQ8zNDZW0#qN3@Bw8|Q)QfdmBc_-`q5 zI0_^`vb?c`sRoJ3I@pM6YEnLs?T3if5o?{_ix};3MZy$J$H#co-|B6lhYA=QK&}Gg zgDk~D#R{QL7KQ^QIFXo)>Xfq72{W-mL>@%qqJcIXaIB2f!J4I8DSju_P3<6^%sDXg z;YNf5YBvypv67g17<8%g*L;K>Iw~`&;Zg>o`q5x(TMm`Aqk%#wAj_I4D3Yx+9qa>u z(QT^Wwyt4o=pkDb$f=r=Gq)yt>LlqTtz~sKO?S7j1E-8s({wq~T=X9kQv8&TL!auwxH*x}PN~b=gW(u4yEm!#~^o z2F6g#(iBTEqt1rHE15<8HCHJ4R`9e$^QEe#jynPa5JW9bXzFAKHKR2c3n8qDJ(iVX zXfAAaQ2}YP$4YLrg=n!h!DgcoHH5Nblco~ub5Iu|Q}>`I){~IywY){5%^)z2h{3A5 z8mgmEscUE_IFeWj8)O|?;Fh$G!9(Y-5hA)2Z(k~pB9l?bCc)Or1ay$9AYV>hfuqQCtYcnDlIsCHq&)=gwnY{tsj zh@KuB$wuB;B3ddNY=&5=S^w};a>aK@P9@%hvW`Yh4(25~ zrF5wJL*5i=Dbb1By%3L%XHa+Ii*a_3Rq8&<>u=VM1+t`!^4}4S_}w_pkP?jrN?nAo z(xu|Gfg3lDX-PHVK&+2-Q=?r?>NlwR$nF5;Sc`Tf7AZDk*w>EZG`Cjgv2AqZiV|+Y zHnp=xEAdjp|13aiB2B5LMN&CcwMa{;u1P8x z*2E+1a8ZWetrX>woqk*0wPBHDL4>FO9p2fLHA0Y+)KmT8w zk*!q`L7cZ*F^YL|cuG2mt7Xg4#d@+3L2?|t-2{}fXr>(=iAhWC$!O$i)Bdos%bkSk zQQ1Kwl@{lwgm%AZ>w=?_nZ*LNYq#$a#j(26FQK@Ensx(}VTc}5CrdS76q-a@!UU-t z$`sP44oQMUu~AL(Ff$4Y(e#v3$>0e+rFf=UUt~H)a&AF!0R~l*$XZtrY)hnQHGzX{ z@pd**2coQG`jpSUI=n!Ayux<6m(@l7YL^Zt%X|+7~y7k9Yg~ln<3% zn(@i)wlGGbEO@VzNeSL+bEMr~t2F`>;PKgu)jMZn(Vo4ev24LwF#P(~s2sGCHMoQz z%25QZ{#*4#B=~azevaW#I@ee*CdP(HxK3p7H9A84;PhgYC+or^7`7@eqN}IG(Iq*U zz^?otAvJtqc+pZwqc5S`ub8~#-U9Ct^5`9+hAyvwdFX=O$oXpmUEhGtbnwNXCf!n%M zD_%>DJh1BsBtd{SWxk}hf#J&zwN^tFd_1n1&J}hm)1F@PcBmx>3EiyEi(rsb0zhEE zMk`JvAWY&cw*qKn6B)u~ltK8rmTSfwK9n+fTY{@7*_1910;rx4gdq*`W#3oyWqPtrr&eX-1Ivas0WxA$Cm7|o zE58x0F~0N{HVq1K2e`X$la0V{LCMdTHK6(o6MHsERaLY*5?~T-2>R$#e)uU0qG+!lv|4 zP*g<}Fw`+^T;>$Z0)$3twyGhw>N;%+-gHYaF5y5XH#3S@xI|$;HW!MoiQ`GD$Ps*9 z$+-fhCEAW}=tK={K48VpK{(l8VI`_|B2Nra(jxKD60Gve|J*H4BzY2r!@=~sEL*}p_H zqAHh%;P|kLR6*;gsMsXI`uj*P+`j^^_@oYdkV8V+h=CFyM%Bq^o12&o29jio5z7S< z;^W$=zP7bX0YDk!0tRt(dh9aR({R;_y#MQnn-;h_+pG=Q2$bwrLOj`tcL&QPKoq=_ zY(TdXV6v=5w=tCeGt)7?y`pozv<-Vyo@HdMv4Vtt|#gfu1USU zyH-ICIE5|tpsjil^i|JHXxyWGu+JdzV&+1+AGXferllTVf}%)m_bG&c9~)J&_M4AYa}E?{STc_zamLg*VUkfP-h z5XtBwP_}?^9+~p(kMG|$&Ni?U?VlvRMlC#L>K79JdJSHUaoPxRv=}3P*tE4 z|H0-mi5Dq=B8BPZVGwbPJyM8}tW1nu(M{a6Zpho?5gAU~Qw`9wZQ8GxVJkBB;Ry9Q z5x`6Kp@=41v0h2SY?x%Jg)5ruv0R=(*n3tyu63Sv+!ggvKqi2p^x^gOkqti!ieXRj z<;b9UR3arO4}|9uA4nbBsg+i+d1m$NQJsv*!qirsCdj=mkc2_%)g_^BLlfgujIu4F z4pi`-4b32>0);H5d7Db5zd36=EO%vk9I9-AN6M`=QYaw!kw&s{6LG7=W;^0!EF7}h!w!Z8K{$Us`DY-`OR{ zaNre;_(On4Pqx{t+(pii96_NztSE~Yd=sy%+F;#)W@kPyw(C@hf6Z|ycxxfn6|)G+ zG-u6r;;VyWXChk>tV?N}vxt;N$K(nkU$kC>0F6a8lHeK8cvm0S`o3k8nE)e7u|sLlAO?#a58&qq90fvJW?*3x#I$0U%O!@QIn| zi${_0@e~chbZr#aa90B?UJ1whVj5Jx6htkS<5Vd060@m=x0h9CXNC$L@YV~p#&+_|o zvwq((+18_5L~?=HWz1SPp-U!Q^XE;B>Yuwact2(5Q#|> zbl^zpdSnOnYvp`l^fv;SIHy&EiP&V--33_yger$PE+Iae)Ru1oMG&cS>W+sh*!OGt z+V-E#Dp#<7%+|^ZYY0A(ptwPxqB|2Le=@hYJolic8pD6r{@4~)J+xelViNM}NB~aR zHH)+-S{%4}_n{A#xgv)bK9g(h*)sQ=w8;Js&x&E$Jd43jK9Tv}QDm+PAc$*$$nH_a zu2OK8nsB;F-8cV6sRuKL2YN%9|`umh2F10)LaWg;H}YyI8^gi?`l)l|VEtEF~Y zu^t|tlYm)@I~sySvGp)9qBm1t4V;LktYkttIRFH7#OTn>t1uj#eiRi)&?F0YJ3cKdPwnN{-d zLlIMoC|quXO7dALAMMpmYi%Tu3UXYYJixC;!Ufn9*01bibbh0l@}e3N;SN!lIs_!O&% z+U?~wqKrH#?zAW(T$az|(eYJ9Ra;e&LP4C~FsIFKxE@`T(x-+TuGku7n{voeW+d*j z)`^k^DMsX2#b=OwxY~eM2W6m|dK4?#0q9rBNyo&|IbdIYu!f}5z)Au8+cB)k+ojgJBaH5182qs7Lfl70qQ;fuJs zem$G0z3$kEEm1|={Z@fQ{O%V~^ZHDu2_x^E_UgiDw%`QnuLS&MlqNRpbYH1~g zRkWm{q7tQw?d*o^k_KIpkS*EJ1hYeeN_92^8>YiFq+yk|*kZ*NE8mtHl3qo=~nhzrZXvS(>uDTbC9Mw&OUd&QFL z+HY(z&(Ya9w`@x{qH<{YJf3Pzg7XM);BDqJd)UI1o29FLXO=&&{+`ZfFl1oPOc^Hwn!GHvn^(MnBluSXkfC9m(6V0fSs>C=GHWFK@8_Q*r+&Sg+Heu zk+}kPPzYuMX!hKaMO=@KzNy`xP zPo#lgXBKpr<4BbRwt^*mPL*{t#`OEKI8B8J8=`eC>=xXXWAjde(xTDkQg);mN`mw0 zb_lQ(I5N~cqlxel{HL6tF8&894VS zN5+=C}d2CUZGOff*T2jnT*j`%~Q!D6%b_PIuK1)dr3yS^>KkW(Qp` z{290FDo71A40FesEm#O%N*{|(V-VuPw3nM|z~@-m;;zA6ba1S{(hySfZ%7tO439%W zWEO~JY-yHx#zTSy3Vb(@UbHRHfy0f_+aJPfga?I?Yb%C69G%(rAli4jH6}>P@i^rANAvSm+US!KCU9-=`ba0{_SG5N-^46oV>oR{P2*hV%x4~qC z>^eOJuC{h(cG%!o-610kOx`(dR<>zZ&gd6}>v&@rrNLgaR%DNSKJ=lmPG{_sg;?<- zDBSH^K)+{^C=R{NEZb~=3%Mx}9u5haL4AfdX?M4kpVeg7vAX7$-GA5`2I!L0LS~=O zY4M>49Ypt>7ll0PR8BnIwg%Gehf0twEEO`hCwvlY3}SdPA!s%{UVwFrOZkG;tju6m z)wNA9x3*~XWj+k8fin%Rg|I-wlRQ`>G+%^<>W=DC{r^Ms72N&87D9`D_!b^I0lO7; z+VX$pVz}P^))+>ZOcZS$on+eHAS!CLis1q+rw)B1+6=yjwZ*MbK_>NX)Ku#<&5&TS zSd%NP+ennN0;pZkHHrq?DA39oaKV%0v%Jv9wrUZ2>+FANNQ2ar8>+Aj}3E;(5>|dlDTXDkU7mrw}x15V!$bhCCI`+$Kir9suW?_XC{?k zHMQgwO^yd91QP_IfpX(Z*g@0>gqeaz;Z1PO+`!ctVr>d=#}`@GygT?0+lNCXZQ#zh z$nJ>-v`2)$T_)5A?COZZAuM+iBE-URM8+(lN1z=ImfpFh=4`DQiEwm?%NS&YCu|Ei z>`+}OUM@9E2udzk;GJ<=67%YF1^evq4$7Zo)=Q9*!(j_&4aXgTbj)9ab(C zDqyQnEWVz3p9{hUEg4$G+&bb+Zppg#<7CVU94>1bVM}tWRFD(&qDQz5AXHk%?d&qJ z>6D$B`YV?j7bZX%Vh1>V0(TGw2V%hv_n?)rW3=_b?6PlcML!k>JIuYaZQ9QG1~V&e zK@Cim&6hG{Y6%WHgs{%JQju$*hGek{L(2V-aVlyF8&1z<+4-TFc%NJ|3S z?!FOfv8im%5z(s#@qcLUI++TiE3VwyZARUyiokxNRfRi3*ith(!%QOre_U>Bo}%-{ zZ6ebW;j9ZgDcohwt7~srN134F+5Nxhxkq>oF{&9|3pyNjqMW+Vpq|j3pcQj{S*BMC zoo;@Kt;Kc-u2Yb6O)TY9?-889c?(7obm(B`VLJo2j#))V%qAJQdT3L&bO>3t@mJsz z*;#Y03xt);L~&iE&J5`lmY|&qyHmH|-Ud&BVX~&-%$g2WK(gTeg&T@HAmI2(jPE$m zbJj3e(#VBZY+~BW#b{b4W*0P0mX9?|c#Ce6JJaOGa)B2ZlyTsZ^SDbyb~u9{Q06fXcdSLDj(WX|lu!7CvX;rXJ zt_Zo}8r1?zg^6jmpg4$cSpr;iGT2FKE!TPwPFb1@k}(p2SzuvfFbWgO z75|uXGarXWIIM!S9B8*T7J!MR<=4B}#4S+ej)kz0$l<$D$8mPEclo-vQYX@pvFgchRqziwJEx_^1wv$vflj{WRRhABG z?p!{AXLDi(z7^*uU5vtvez1m+F&G=s1r3zPjkq(qSh>*fY$2$nfHfrSYSdRax08EE z-HR>y;_hr^-P*lB3q3wgoyNEdEeSy|4i?=Y*IY>p37CD)v{HmUXmvBOXAXa@uXPEt z;kmPJYPr;*MwxP}bVwM#PwaK-MX5vUcwtz7(QIvl6`hycE=yI2X}@SHE<;dN;?$R`>^9oY zMA=;Tqb7UPA^Neb>gXRr6Bd*qVmHiWcrc-LdD+tq7SO`B)SK_Xum}4G)L_sA_)MJM z$vyWNFxzC3xywjd;FG!3vFk_m#-UprHV4I_W5v$dT?~iXO_kV$e^?8D=be@VXOAuD zf{Mts%{G+lgl^o#XK*k$mtwjOiLY~m6(rYM@P{zs)}YLcpPRhdZLBc?g!Ro-I@dnC znyi(J)->Q7;+@=WwmTLbjM=T9(J`s&E$lw}0k#;y49c#BBP`83+wkKknX_erqbhct z@WxrAn47|2!M0oXa|A)uyX_4yG0tPMvWtC)XFAZKWZ&-AdD)o&o$c7Vz>OSQ^x+CC zqK0bTfe~<}`*HK=%)p!QwOQWP+hGXZUTv%SiRcRK5 z!)#p8wzRa(YIoR**$Lla+xOA7Xar#`&7aduJ27r^OC1&%J%`eV;2_j)ZY(2_ zbgFb*HViSkRPGOC&&pJ1Z(o-6z$y5yO>xrtUZORYiKCxl;A-)AsVqiJ`2jX z*sUr%l@T=hU>It@fboY2`yTrP;8zp_BD`&pxK zv#kx7okMT`%C5N?E7&x*Wf-a9o*Q$U`3~DZV$(yJ(H-AlHr0Mf2?9#&h}lv4i>QvA z2_hH*upTU!CDB$|9n!46iKT4onypL1;}p^hN(IGhgLfA@3^W>y#bIIG>AFa{Dya)g zxOVA`HC;p3Cf%?+G=%tZ4pdj#BXf1}avUx0ly9D(1v9L_4xgYd+htqVVp${ z1lreN2u$CK@sKd4Y|fK*8`6aeS`*%oAMvtIUuzcn31oI%=m=vTC6W81kEN=w$JNvXXt8^MO&|IM;Y^<5p zTHH}Ts3jP%1>MFGn^VAh!|}P9Q;wVMiMA(zBWD-1J1209`_Qmnu-L@<9vW1H6PYI} zh-a6v8DaLuemM*d7^c6?>bi@vc741Is=K&b-0%&kAst|x?8IFlPLs>yl%h1V_IgeAwZ4LFG`@r%K=73y#hr33XERz_kdzo=OQ;)vQt!xP#N%&IE zGjz7cexNN(wmJEM$6_@brJA*11mPrzwh#a ziOgi-Y52cj2*!qQRZ4?E=FG}VwIApEu&%lFZty>_VbDGZdo@_oa8AWF4vgm*_cOoB z&4-&6wMnzXnMKx?@pCG!3ms=XW2BBt_riu~&6ks<@K=BF=5zXuFalW63O%Vtg__z#|wTc zh&vO|QFD?WHQf}TS&PtzcYTzqh=o*dJ%+^u68(+BLB+C;Xh;#pMa=+AQhZVS!lg~*e^on4V z`+-AO37!8UcgPgt#>~O$CM5(rqJryP;1U^gy;QK^msxca_pR2((1~#sJ$-x^Up1pm ze>ha5g4D+_8od?2e251G7RdRs?oCiDZLsS-+}r{kbU4BKeHvU4`>^}MRYi0pXpo37 z*>ECwrZu7L7^c0^h8Hb3_=2s_oN!mi5or&1wA-_oJi6M}GP$e~^X&Z0enpU)rDj-% z;Ud`=t}xuMl(8|mdZcd03fXq+xuUmuFYSv{jbjhaI3@3Oj;fpY#ye4P?i8EQjr4eE zy&H(o&p=!kjSTBdYb4l-dn6gA<@M8=fcmPRY7aA1Jx5$96hcoP>bhn65TSMJAK zGG8bJaHm_9BCqF`Hmnvn68=)3%^PDd5|lLuFYHroMC_WFd_q(pE^G~a15|L1I??jD zDhCCU9f?6(FzZJXMwQCZ=7Vj#%}@v*hWhMgNnLy!d+O|0uFMe+YJu}h+&IN1wF3*p z2O}$dFxv6ez33BUh1-}&_Ci*toiTKCwSgaMYH(JvaCHv#)cT?@kb}#!4y|M9*bln| z_7o}2P8Qn*O|0wWF;nE0+rGfrP*zz6nRVUSV_59JonWK~p~wRVl&ZK1PCudJPd zXoUQYU{^}+gf+P=?l^RHaZXPdP-pf*vw^^X&?0b&w^>4#lk@dl8L%;7tZ9)Mvo2t8-=Lx(kaH^VN0?MPOzu9I7FxMGMVr90{EO*VfNj zNa7BJf=RG2NN5+raJhB*K^z zTYE*V<0-G`XHg{(el>$=Wr^q7<~Lhi=JNf@jm=*RoxsVTrkZif;MIy9K9{ z@yUTccP-ePMb(HX&aLn`bYL&naYG9 zk2`}5joN(0Fs8>fZ1j#T%wcIkTpS~joA@)f7E%h-YH}*ePue-GX?pZYTtLWa4?By|MP_XJ^PFI{`>6{o$fpm(4iTdR z_La_=V+(+tK~g=IGuI=rzj4Ng<(K6I1{ri-5zHOeGuW{Ku%P$}2XtVuyI6>9I=jl= zIR|`e;A&gZb8Lnmfegk~9JopK*^0}QEW&rkFp|PHZOrDuue53dg`FEQb9&KSU3UBj z%fB!%wXWSvDDAnmWz$VKE(oe6-<;KfSp9HAYQ{ptEoy9(HpW3@-i@G~2b`HTqkY(A z_ZT>`CWfEyK#j&2#j2*5=bp1gn9a>9QU)7=6WJI>MUPfX0rasqkm4*jCY~V9YrV zhxH758P;{&%Z6e4koOXthu&v+-Yb&h~ zYAS;v>h!c_jTN7o+U>_!{N1(p%*;F$X?wj0&i4d!hZYETVgKwoOzT53mB<+@Tlb4` zkAABfzS(V_8-6_lyxypacqC)K(s1{*`0%ZSxl{BiB;&G_K+QMXKonYXW%pmrN@CSac9oE|w3#%r-%bb;m-oa@N%cp5LgMB4gn@XIW zf`Wsjh24x52+NapEu$KRp7^`OY>#w1tvXxwVOVrnnaw%}R+;nIEUBIrEub&kbDhY@5*1xKRUE7l3zT#c&s)dnRk7 z*|A{05e=K~aFGo+&E%$-@M}<=fn$veXup&tGfUwXXLz<)f@KlMpf^A$tUavnS%%MC z@{ZuFNOUdkfKfdC7gSUBN8CIB1A+o}b^^8DeuyqK*Kj!8oOGa2wg{$=M#ENPLc^T@ z%^X)|Cd3*cXMMO{gFQL!55w(28^&X7h~>f!c9ufcF#v9!39a85nqUs%cMs|m`#?riZH|FG`U7J?7Rv#SX;(Ac@ueb&2qt&Nx zO05RdHm;Ed90{!?bi=XRtZTpDgj$qbfUpXH`}S;5S~H3Pu=gOeIq z8C={X>kM`(0130PnKeK*T?EOUdt|?ZVDlM_l%NXj{@pU%%o|N}yOt@0zdyz$dp2Q& zs^ZynWq3A&y_qxdZghoZv{}kQJvirwq$~kJzXd0O2hfJ18?M1)b*n%a6GfNdOn+$4 zt;yTTAC^bfC|D?txzPwh>mRsCOgMJMx!9-M-hh^q74%0Z2=nhOD>M$b#g&++->y6-0WA9)lG>?N75H91> zxz;w*{?MD@kVC6F?u1a!!6B+y_N*1v$`ztCLO~bmM)Wk#3^)Z<0S&^=TSSk-&Bz$9 zo40dLCE${6F32^fno9&NWUl3s&cm?Zm2^wJgMQuIJ-o4uT$n99B2p1X)EzG}E zx5z{>{A(5b_H(y0YZ(HEV=gbYVi0{HQ;eKiWZ88)EFlZ$xyG6G`ygf$+>CMStvKz@ z{gjC2xdUg1Z7FmVgG%qpF-Y%`8}Y+5S(U*?2K0k;)Qy`j3e#bOmGF`DO_;LqH_)I~ zq?o(Nq&XLCcm6W^I!4=}_e^kGJ!Ye2UX+_ z493iN54vDnL!;#yvir&1AXsSQMGcmMiUXs^*)Ln7;`((CAzW7)7&2QG%4z}&&Up>{ zkpzv$+yXtJkQ(X?e%i?zw^Ss&bPnL3%}dz<%Hh_ zSLb>cWPQe`vk5AhBf=}JI7u)^8mD%}pWyGhuC%SjIEBT%KK7zk4#sB|5 z{qG`szblQs9(kGFbDnph?#=No51$g0Bd^<=l|pxaE_As^cQe;7{_n*Sc(DXtEP)qG z;KdSnu>@W$ffq~Q#S(b21YRtG7fay95_qu$UMztZOW^+>CEy{Fv&Z|p3p_7^cwGhl z|I%A;y~IPL=q{W-ecvJcd%kxp{Jy|@NZ;cNujl@cpYI{g zbf2ErYx1SupG&^q4(sFGj>7u|zBrE5s_XMywN~Vx!nBwu*+_cI~EEdbeO0h<)7aPSEv0dyE zd&L29TAUH*#CdT+TojkYWpPDZ6@77C+z>a#Ez$cE)o(E(7KtTdnOGrKi8W%K7!{kv zR=ygPesNG75=X>Qaa^1br^IP-PMjAP#U*h?Tou>F4RK2>xzCkTsaPhK zixpy}SS41Abz;5PAU29kVqEMNd&NGnUmOqz#UXK691%ywF>zd+5GTbcaax=a=frt& zL0lA<#AR_sTorwBUEB~i#Vv7L^!i;n=Zbk^z8Db;#Uim-ED=k^GO=8&5G%zhv0AJV zYsEUTUW|$jVx!n3Hj6D{tJo&Ci!rfN>=NT*x7aK8iT&b$I4BN@!{UfIDvpWc;)FOU zPKndvj5sIGiwokSxFjx%-u<#CVni$wOT;p=y^c zVR2L(7bnGOab8>ym&6s(7dON$G4iJ_|Ak_aSS*%^HDZIjO4VqEMM2gFfvN?Z_E#dUE@^aj+<#eA_utQ2d+TCq-y zi``L*j@yDvpa2;*>Zo&WZElqPQfkh^wM6u8SMurnn_;i{44)U(6Hp#fVra z7Kz1TiC8L@iREI2SSePCHDaw;C)SHmu~BRiTf|neU5trcVqEMNd&NF+KpYf@#Sw8# z92Y0WDRD-e6BooqaamjueQ{mf6t_h0yki6sN@*ab8>y7sVxUSzHx;aYNh` zOFrSsyHqR_%f$+@QmhiI#Tv0ztP|_SsMsJjicMm(*dn%yZDP9^6FbE&F)ntCy<(r( zFAj)<;*dBjj)u}-WPqhf>DC^m`BVvE=+wu$XxOzaf9 z#JJck_KJOCzc?TcibLYCI3kXUW8%0tAx?@@;3`WFXoB)Vni$yi^O8FL@X7{#B#AhtQ4!nYOzMF73;)$F)B8QjbfA7EVhWP zVw>15#>7ssON@)%Vz1aI_KO4Jpg1HBizDKwI3|vZ6XK*eB~FVo;+!}yE{KcblDI6c zh^wM6u8SMurnn_;i{770|6-n)FGj>du}CZyOT<#KOe_~G#7ePBtQKp;TCq;77o%c> z*eEuM&0>q#Dz=I3VodB5yTrKIE%u6iV!t>b4vItKus9-)ieuuqI3Z4oQ{uEZBhHEQ z;)1v+E{V(HinuEJ;<~sYZi-vtw&?wZ^e^U#`C>#Y6pO@Su|zBt%fxcALaY?4#A>ld ztQG6TdNC?Ch>c>C*ete)tzw(lF2=-8u}d5lN5nC4T$~iA#2Il;To4z_?OY9bV#eQ)>91@4c zQE^P15GTcHaYmdM7sMrTSzHx;aYNh`w?*%hu3YoPe6dh05=+EVvFb0~ebr)(SS!|v z^y z7sVxUSzHlUMPJ+yH^nV+Tg?3{=|_x+g<_FdES89+VwqSjR*F?(wOAw8igjYW7!@1D zMzKk37F)$Ov0aRbonn_57rVt?u}|z52gE^fNE{YN#8GifoDe6)DREky5f{Woaamju zSH%^$oC^n0&V!PNW#>HN7P#hAy zzj5iy74yV=F(MX=y^bL2*bN7DvQUaZDT+C&Wo{N}LvF z#5r+ZTo4zs-y7QN4^UWj>Oz8Db;#Uim-ED=k^GO=8&6ubV; zy{Atc7AM3>ab8>$TR!LR>lFLMVR1s76PLveF?Y<}UnG``HDZIwQn5^|5G%!Mu|}*D>%|7KQEV1l#5S>A>=e7iZn0PF7YD>4aabG` z$HWP7Qk)iN#CdT+ToRYXRnZqW#7%Kq^gi#(HBZbJ3&kR_L@X7{#R{=XtQKpL*j@yDvpa2;*>Zo&WZElqPQfkh^ykdxFK$d+hXp6 zDpxTg7K+7UiC89Yo^s-~9&!247b9YkSSpr@6=J1WE!K#2V!hZPHj2$+i`XW%i=ASZ z*e&*o{o;T)Bo2$C;+QxgPKwjwj5seYh)d$KxGMVMhPWwii{7N_k(e(QibY~v>=paP zL2+0d701O%aax=c7sMrTMfAlDaZB{Rpmd56u}CZt%ft$?N~{s<#HiRPHjAxdyVxnl z#a^*r92AGeQE^t z+r>^XF7}H3;-EMzj*8>rq&O|ki3{SAxFY)EhPWkqr<8v&A{L1yVwqSWR*5xYofs7x z#b&WpY!~BVuh=gRio@clI4(|#)8d@CATEh3qAzZUTcS6me2WpWNGuV{#0s%WtP$(P zsMshri>+e2*eS-vUa?;s6oI4#bJ3*wTvBKqQnxFvdzEB|6dED}q^ zGOd0aYP&wC&VdnMw}NH#bt3-To*URZ83M+$m&H|aUECD6#oQ;Af3Z+37E8r)u~MuS zYsGr8L2MFR#5OS|c8T3$pEw{6i6i2eI3Z4nGvd6sC@zbu;<~sgZi~66m4C5NEEY?} zaD#QV!2o;R*SV_z1Sc&i7jHA7!$k1Zm~}s5QoGOaZH>Lr^Fd?UR)HH#Z_@#+!VLP z+%GEsVxd?pmWt(KrC2T2iuGcH*d(@yZDLI961&AdaX=grN5nC4LYxw3#CdU1TozZw zb#YVN7IV)i|6-w7ES8GpVx?Fu){6CFgV-dth;3p_>=L`hK5;-C5=X=_aYCFDXT*7N zQCt>R#dUF0+!kwRUHLr^Fd?UR)HH#Z_@#+!phna_KG>%f(8uTC5f8#RjoS zY!e5>5phDC5@*DDaamjy*Tvi~xpWnZ#bT*gE>?=wVy##&Hi#`^n-~+j#BQ-q91usu z32{oC5$DBaaaCLwbHA*7h+SWG@}jsd<}SF;yTv}S{%h{@2C+$O5!=L=*d=z0ed2&P zB#ww<;)FOQ&WQ8kqPQ%sitFO0xGm;B?b4ku7K&|R_1E3^L*H~95y!*{aYmdMH^uTL zcVD$wFSdwX;($0I&WnrUs<v<*#3^w`oEI0xWpPzp7dORiF?U7j6AQ&+u~aM< zE5&NDR;(AB#5S=@>=ygP0dYti5y!*{aY~#K=fy>FSzHy@#Z7Tr%zak*6br>-u~aM< zE5&NDR;(8r#3r#tY!hQ*m)I@#i38%0I3kXT6XKLOBhHJ9;4JESS%IG#Y(YStQG6U2C+$O5!=L=*d=z0ed2&PB#ww<;)FOQ z&WQ8kqPQ%sitFO0xGm=XoANIfip657ST0tI)nct!FE)rxVvE=&#>6hMTkI1D#36A+ z91|zRDRD-e7Z=54aaCLwH^pr+_lL^ASSS{YrDC~QDOQWMV!hZPHi<1_n-~+j#9pya zoDe6)DRD-e6IaAl(HGan4RKT461PRqclpj0^Td2HA{L58VzF2zmWvf)o!BO}i=ASZ z7#F+6KCxdM5y!+SaZy|rSH*R4Q`{B{*IYh}#Zs|ctQ4!oTCrYi5*z-q&^!O7p4UkJ zlIIPPzvFr17}Es?9Z zZ@AFAAO~lNk$XI^klgEeMP#n$6_e+AUI~d4(n?93n^s2R0I_lsCy`Z<7kOSKc`?ox zBlB^-7>SeGYRH#(UM*SRd37WXDyt_i^}Hx~nddc-mm}X~q31P`FZaA=vIzMiU*UPJ zKC;yF`pIAOyaDnx zo;OJTI?A0a^Soj5H#~2I{7ugrC12}#V`MqXnY_~TCdk)$-XwXI=S`6~ux^^%=Xo>a z>!A-4KRz)}R(jq7`9{xMB;N%6kiX@5%Vd@3t&mrH-YWUqp68QqMm->_J#T}2i|1{U zZ}q$_@@<~CP1c~Ed`@Vq?oozOp73;mPVK>y^spnvk+&_7uR{gdy3{>k@3 z|71P%PreWOCw~|ECw~w6C!^3mxgYu`4?zFqwa`D=0R58(p??xb^fi!;&_8)S^iTdi z^iSRZ{gX}5Kly&>pZoyyPacN;$!6%Eyb<~*Z-V~Go1uTQ1^Op%f&R%O&_DSH&_CG< z{gbys|Kw5VpS%tFC)=QZ@^^iSRm{ga*0Klvf( zpZqZNPksdYC%d43@{gc@@}tl{`7!99j6?tAap<4C2l^)y&_CG?{gXY=|6hYApnvjS z=%4I`{>eXv{>c>dPxe9oWE%P>{{;Fc?}Prye(0aPANnW%6#6G0fd0t==$||Z{gWSu z{>e{3|KuR_PyQM7PyRXdPyPk;PYyx<OB;Q_w&8CFr00GW1W*L;vJgpnvk8p?~tL z&_B5V{gY2a|K!)9e{vD}C%*yxlg~i^P( zCiBwPI?7R#D=9}Q*O<&(TN^1?m|RV{nR1EAHI!Q^M@+7z+)mjunU8Mmq`dKSeDLXd z%5lmoCi7LTy_6SBZlK&xdD>*Yx^j^ z+(vnta>3sL3(P3zTb2X3|@iC|8)=MR|pCiOF%wKIMqX-IO;ddnWf%-lDwm zGv>dKvX=vS#pHg z&*VJHTa-7RXa4gkdwU?Sm>i*;M|r{ILdp@!(DE}}ecaxvu+%EKm?P%fj~Z*nQ+ z3d(Vl%P3b-Za2A{at-BXlPf6KQI48iNjXZn#^fr>jg%`)uBO~fxy0le%B_?mCf8DK zr|g+rN4b;o#&g#GDaR?Vm>i|tOL@WM2Fm@Er%i68JV<%mzCbv_bqZ~CkMtOm9jme#qmnc`5+(mhXa*4@t%0A_Y$=#GU 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

h?m2GBL)}O%?xgdMkX9~X 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%0ApzZ>xDd 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

Ow@+iGeIxW+Dr7twl_;@x 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

4gip%PH( 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

`M#JTH#g{MUaquuwDw; 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

    NfeJ6&6Pl!%?{FrF1qO(3@2(M z@LA{iKTWkuirW4(b#ZjXT!|bL}*Np+9T8{><(CY2m3&EqA~BvGj{}j>`mlZK%PGGTqRF9r!|(t zMKA+gYo}lj0Q)MiUq?9ZTgHY#84Hwum{EJgX<(;;4Z8pD*1hD5t=yX&Y1^Kxv;Eb% zt1~wnn6I;#1`qDq;I*}f^M=;_ael9Zd*SZ8^`nFv)(d|ZYo=tnQ%wf8=2^yarAs=1 z14$C+KW^_XqPsV~3I76=^R06Dk?UiS9hoH`>|8)iW3BW$KdHkIA#<+$(Z8?Ky1fM; zbO8|k2{_BNjZC|e?;#=CM}%Gp4_H@thwHT@ZhaCbSMTN|Jwq&NhI4qrcW|zb7Eb1A z-C+nR6Fz77ZvAKr<<&f)D$kt7XO81rzerUK@cI0EleBGw)fBG1hJ7_u-H@60chb6N z4&K#xI8Abt@@g+iLrR*6|5VZz`rZg^EO0*`QV1G$h%$sCahbSO#O?K8PLci-nz99J#GutIk&oiJ0>BfplD_*|SFmc$^^3UX)=CjhhXpjZmT& z6GCt93WTh#jFF@X5t6p$z6U%-E2+TBT$*|^jOm9woNF`SG_=*1`WDVm6Mgd*v<(4g z)RwhFS`j^QAevUYQIZmmtC+@Nqm?9`N&9DL%!m>a9tUQPCriUX??{Y$szf46S5`h( zfuXI{0lIzSk46g5WUTfW!qOlz!=Q2lM;|?vLqrQCXhsH=K^3$v$#O`jHFd)jk#e*( zUBEh#fUouSOzXZK`2GZDvxm`W2spyX2(LnD^onwoERr-0)%5G#UwdsL438dHaA?_-NXChE!b+b*WT<7s@}%NcdU8;W;}XJj zC#CzSDL9xTWehx8-_y~#%i|QTF^@}Ob&5z{=J86y)^s$j%+S33o^atzM|7BFv2($R zJ$do)cbO{(d}@AK2qRf!J(rN{&W;Oqz~4NR*)|Qcl`kRg3UTkx^AGL26Fy+5+Rmtr zM>BMB_zJ3&TCSt8PJGF${7!&(?z4C6zY}@nCVh>e@~Pzh$h?coZ}gP5M9oi#2DGfk}#Jx7Fnd#Ax~}%9JP7ThGC9ZMcg8phwaF(m!A%dE}Xkv z5pkbnfztid?a)r-Q_tP4|MY!Sx`;30*{ab*bwbx<`EwHMML67~=P;sqE)C^M)CSPX zFs+Fdp;=5-fJesSJ88T;MkGopl1Vs)lwk-_h7gxRIf zNnQ*_LxKQW9p%@9f`+Me9Blk#McWfqNFktP&3OgRONj-X7#XfRP!iP|?QcJfl;SdB=xR8De8rOTVeS)n!|&=sP3 zHX?Sq&W6qj7XxPNSEIywXM51T39T^3fG{w$Z(Km#V2{t`y2L2t9cr?ysZOq{jvHol zb|9mCFpLP2qXtxLenyJ7f8Jd#9evl``evp{I4|h{$AKdpQT&M{9?#vCif(?qtC&(7 z^X)cxPJ!nGv%!O2cayvgN8YXD)zhum5VUR~ydoDKBz}{RR~Wx94#vVKTXE^qim&2U zeeX-cPZmsEL{yJgPqyOgo5P$HiPgXfaAc9fvlalnp|=hZ-tK{i2|owy0I-<2I0Q-; zEKag1{{(fgH2gQWs$TeShBkxk2X;N-Wuy%d-t5a=L0l31W?&FC8gc8ifLm~obGNlX zC_ycNXXsd>s;6(Ys3=nUfG>5K|IS+ZMC-7RQ!A!XlRsAGQbc&x95~{rx1P>A)x^ShhX6V-8+_##1IdQ_L2EaFmBYL-| zLCqa-4G|6%#VxmMW_525us!7OBTfyYN~@cNOBGaF=whX9=396}BPyR7N3^W*Vd2d; zw$kwR(b~n(e{B!)-S50>zEz#<*7+22G6l9{la64yh+82h6p~stohVEozwSO3KZJcL zI0gu7PI|vYjW`}@%⪻l6)iN3%*_?4>?NQFmYQvu0#fhu!F+A99H?y1N#!NUm#fi zb@IDJ+zH}DmuSiIn_pPgiT;cM;XOm-aMR>DO&-kc)4kW}Avl?Yd9+4hfY)hFUBWbB zxeq{vz{14;GsDHE|no+IdWhJ$)d3G zc}&yPJ-E}dlVpc2uB=?7nB>k z3Q=`b`g7!G5sTEU@@XuRE>3A`0-17(h){-b1fuphnA6~aC{{YxG)t>zDC8`^b9|q7 zg^5r#8ylrZejFo7i*uPj#s|BiYv?^m^+Q{;+=IZ{QgIWM$brEy$Pu1}*q|ZQDyzN= z+3j7}1CQeW;XT+j`?V*%J6lt|+Cm51K+JKIGw(Idz}GqO-Qaf`GT9el6jyT8fdRml%ZcyeU+TIh`SAX9pA5V5WImj<|c1$ zP}DY$nxT7=-;&3WAHVNz{TEqJ#ZRU6!0zE$r+bOu-gE?+{O!zwxRLNwFh2dHb%v7G z-r#_VwMS>dyq^i@{M_Hg#&y`%OjAMx2X5w^XNAry&~qKyhECqCmu5B0Gq=8bJ+7_; zPMg->W)-B>)e$(V(DgF(mDFz$uAT%$!!NcG|>N6Pz}?60t+~^ne^C*qb)=^SCbl41_Tnu3PyRZcx8+=FXZ%H$&h>5aKlsgAlY z+Ic0Dxk`D{l=uCqgHu3=%muBFgt9ut{c)x*^R#5JkEGmq3QYu z@O3i>0(1MT@9RmgbIaZ_}Wp#1>(uu3kA2X}nhh>m@u*b|&N8LyE(#CdYzpIxh zkh`$_ACkf9niL4DT;A6ZL_;(WT&%7h=yC6BAo6Tk@4%4!36ZykB{X2g62eSZaD*_t zg&-c}Kqjbf_v(fVdD~eBeV{LW?1Hk9IN~*Ma>Q(I32mx+7~vU`MNKH7sMPg2=+?LJ zD2J8d^Y6&f)%p!U@X|>3Xh<#nUQwNVB>jeJo=Xvxu1*JOWM4r@R@EWVzf@vvsyJF) zZH9d^=ElB%yZwtEGB?KJU+DUS`Lu6B8cHv!IOAnyQ?KPeK)hP%_pnzGzFlSPUV&w~4C|!7_6;+@dUeUgcN4#q@1g3& zGAHiKBp6^H5$ge3PFw&|oK&Rq(^^YgR)nDX$+c>8ks zXp++FPa%J$Jw8EL?UAjO_PzsaDoah2Rrg8lJe6aIQ%5S^Zd^R^n#z9RkFV~|eexjZ z*Ppyw|A;R$-4A%L$#$*D{Ovt^nvOTlrEfUiG?ugr&MIsgI$K?*oI8}$>C16v6qE#P zX?Ht~Q%R5xOxx4wZvy+chi#IJt#XfoIE%`KruhzghrYTw!$SWJ9l&TJ7QKlxr1E`^ ze4nv*fb!aY3b}V9Z6e z4y_^ML|~vIhh_nIE=!8aP4;Q;K0vAQegr^jS)L04VjOVB%>l+U6UHCKjAjo8YsSMf z5EH!8vF~|=(O}Gqpyn1J3(g8Dl=m&L2Q$K$FBuA+var|(1Fom4wZTU2G4N($5ivmn zJ6^YPdRPVnr@JcP!Az~!;ei9Bc*fB=exuKFKlC%$%*FM_@du6vcm6PjT{apOJ{9Y> z9l>un4#y%{YlC$gt+m;`wqbR!=CKaJml;Wr1!v5&A24K1d$^9}zV?jE{0`5Z6ZFnG zguTiKvBx27>tjv!+_gp>(M33$Gb(TEE8l%Pv;DD&Haye>k239c6yePzM<(JV#MDx?Yc2ES(sC}&3V-y1NEHe z&<~}YL%y7JZ8EJXbd%7ULLs-eIuCIPVvf{SG`~U(I!DuCy+T&Ue4nI@#gy^sGy8)& zUq)bXf&JqZeivD}&zGMl=uxh?aH7r6K+1o{$3Xa4SAChGZ%A;_?T|b~+*0Cjtj*tx z>~gl7)%I7d;F_O+d=+b z(p52ikNA9wQy!He8f!j2;0QGKc{tJcAh1229+e%o&j7mu7&WADTYasJ0Z&(e3pmvt z+J4jc&`yoQ7nKB z{4Hwfbs$>pk$x&I>k0|uPgD)$xP6JOpf? zueRD-{Uh#643xMp!K*N(b(1FMDvYT%R1XB2RL)AuEPn*TaH#Jliz1aNot#3bz87CO=wVf<9tV3Kv0*mB6{kX$`HJg% zJ^3erS)MekdTl@7YJ4kG6U540731t%Wrfb#l9Uw|lV_UZvPud@&MWuv_X6eietp6A8*8jf1e}zA1PiD^OaLHm_C6zZTC$ z0IhWA#(0iAm>nI|o5>k{sK8 zbeT=koi3$*7Y@3c-672*R!RHpkjL2+F|SUB%B=(CAWuZ1ZH1ilIMP)))ru$8a5&{% zP273;Iv7=6YS80Pr1+)-i93;wN5Vvx+C#1)+(8sNsDsX$q6m4HOWs`Z$6!S+OPkAz zqFmpvWLBqeT%_Ghbm7~8J$|A1vUee$`jxx&XQQr7Cc|;^k~Iv_0}ZPYXFhc8nwX5< zO8K{%b^_aF(?gxMXsur1T$!FThmw^qoG;h=-E$@RVn(eBJ7R*6U1nAr(m`Lqa+c0X z7iUXpFW(Q4wt={sTUIsmF0l$_XH^|&b#lzovoQBsv{&bg_@DZ)V?Hj>BK(Z8jJQxBw*ro^J~D?eHr}++@Vi;BF5RvFWgFuw zCui_u3YC5fQZQg9uUdg7}-{ORNRN4bakEXyTR`!8wce~5TS+( zeeon=HDV|uR8-%6u1<}O&&>x&^NniXDk$KEH_QWFB`$0Ed@reox#@`rHt`)Q92!}* zPH;HE=U zFP?iB$A_u*B=U34HWX1B{dVqKFW;?yTn+$=#sP}wQfkhg?3HK488$CGvT{*ni>|=% z-0Ig)Ndtou#iK0)9-S8FKGs_NPP)a~q<@Fe8*Rk1FZWFsya52dJ-saPaLXouaa!rV zd>rRz&qi@~8WRtYhL=w=oIpu5 z%czoYnd|Zi2_8RL;#J?nks5^`gPOEG@U;o9thrYLgA-3joc@ZA2PlghPQpe9*QnIy zEOeYB{ygObczY{ZH5HAbi90ka(5coI1p(%Q+Yvez5g8FGTu5-W3!h*_suSfkQpA~; z%nVi)R0pT9`3ee#t4W66t?w+C#;$muo{YuDv+aDlIkL+b!to_U!lR8!EZ{l>&c(;D ze+1v?%wv0~{BYurq;+A7Qy~p6pbhm`NAPBX&gn2(sVALn*UIXU90KO06HBq66(Gr} z*A!Gw&9TXDXR~E?SD0jBzh&V~LORmpP|LO}m|>ZotHn!cc3X9LMaaYVzQkIL&* zW&kfJcpiB)!H7qdHI4RP7@?Wj7r@c#%+y~aP84Fzc5EmFHo8`dMr1gFF@W7pzm{rn z$3q`n_%7~ue;2)!xDOZT2xCVV{lS#~s5*+y;i@VPFS;TLQSq1cG;6y^uo=`9bxSv| z*=IGR{_8?7ZBF7NBC0_Lu1iV6H4Qq$ki=aYW9ryxMwl^D2al|4yLHb#~35M@169mg9R z8n0-1N?#LoPSXh`U}ZmF-4iui%UyxAC!AjAfYe{dQ4vmEp#`PvF$A+BLHpN)>DuCF z&ivt_o@&LQF-$RQ1Rx}Ufpb&PfJHlcOHgEWcdb{x2YsUJckACvTh6fG@b-ru={3=8 zk>eKKs%8)Eg(PZF8(>&j!Ct+$` zMRM%rm6s{+9OW(i*xh>j%=PQs;ZR0RF;kJ)99;i!F>QqqASneKE*4;_e*}s&l521a zSWKFk)FPoPufVoL_xSgszYE>L#=MibgTx&tZXsdymF_3z#hY*zVlMLSmV(xUkDL$K zIr1DMPj8Z^{RvY65Y8*4ze0NO!<+d8=5bwC@?kyC8!vFs0~DU`7PxFmop8<;SM|{C)#af?LgN80fw>tJN8p^bf zp;tB0E00Z};=?F-*2jx1o(pwNgD!U@GlV(AT7QdP0grlMeY@V=pKC1vjRO=~Pv1yk zPR&Bm&0$zcIJ5}oDWg?=I_?uf_u1dmv+(mi3%=djTNO}mY1|3G#vuS7;3JHr_0W{> zu#k98lO#sxRDLIe%OaZG(ddQcsp0EaeXzGm~R{2Adqm1YZP(DrOG%bXA zSAuvWLhvCks^TuZE}=oqq=A59qfa|d`B|PFlo3W==vmEN&1%u0`i1W_9kow~R|}I` zHH>!D;+q-`3j`M@JOQq}ClXP-Y6+<-CgMeK7(5y%p6ji<)l z$2YbIu2I5l(XxQ&oNW2hrkl0fMvpGEsnSFfD!8tX!^*HPp+CfJ23BFs<}j8-M!=!4 z#+I60ZzvJEZ4f$I33Ec!q$%YF%-H_!pp2xQOAufyxQj!C82ZGv1!ZV-=TQ% zLm89o+R2nXtOZC$PP*EJ(TROdoK59-#=?zc^-|ae1Q@1~7K<>gL!1`E&}*g(zwig~ zXFiqpp`Pe{OKYyzX=+60@{a!@-)rOxes|>8;UICP=}ezJ(>>V~v_LjB8d1VvMP(AF z@EClYwWBv~Cs)cA?rY#42KV<67GIL##-d}TX_ACOgcZr8Q&H)z;A1|1Evu}r&P^ZF zcD{Hz-;e$ZxWgTBQbV7zgWlv2IrS?A@jdc8Rf(i*q( zO=o_cFHTYRZOZ=o$nRqglfLtgmB{lBGpae!Hi^XHK^It+FkTi!_&jk>e9qsM`*k?&RV{k+eY`oRxvgfcBk zzMK=r0>KdVk{;&p7XSwdzw=MEwJ9!27S zK8{I1aP?z;ZjtD0tB!JZMwIeEb!4DAifQghb!a@8CJ$7H2NK)r?Lhz|1^MpW(3Ot~ zFEcSIjnhFM{$cdH{^@T0DabSWn%=ABoa&Wmcm^6Pr8q%Y{+mkarZcqOoCEJd@cwbc z+uZ+Lku~MlhUEL2b2km1zBPxe+AN^xHp0+?a*uUNJn&MU*71d>Ie${V^RLDCtNgl% zyH4ERd&r?^X5?AcKu;FXSHp|k=z1p}de*@qOTwhx#B_K|A}29$xI$wBw8x!~CPTS3 zxOSpz={fWIgxCp4`WP!y$r%lFO?4EJ&{~P1h7k>#{Lv&-76ygAxEQlg$1{xm1wVrP zv}LNkC(1i>XI)0r(?LpuP^#!Hc5a|A1ewg5VhUVT?US$D@rxY#Xn=4UOW*nn^>+QY?Yo(TE7)VKz)xCSen9n~>II%;x3W zW(R{6ad%9`#drEim9&q(N*!ODJyrPjNZ6myuvvtscwRkZ?js9hLAKqgNF3MW98l+% z=|1flDsT7^)9i>BSdy`f~t z9`st0-2Y?>m1sDEEb3R{!_=^D4J4E%m}`Cifwy=oQ^|c$)B1S0<@x09O;=MoOBK-5 zT4_n{#>zYS;H>8^!P48icYuM%3%MA3iJ#rd>9TAW-oQ zh+O?;2z4Vj2?A49IgC4_4B1mYtZT%9B&-`eeB_YFu50tRa)K{k1BmB5apPnNd85&V zLqQzqvyw!1z}QofEcn7t;E$$#D){W4YpxdE;B8a-^?Rg?mzehHZ`V5MWVcPc1a@<^ zorTFN~5f78q9Xnz*`+rZ5uvMz5DJOyNXG>cq>Qnaa1Ma6P*bcf zY(zFCz~&o;_8M}b={y}{Wtttot@M^1orP_9M(_%={303xub^ts{Ebc~uvz-j zH-OKlD}RbVpPny2qz^+M=aL5NWt~Z0p-x@r(4V7zKO6ftTSvTZW_&WalgB1(sBL!J zKBL{nt917B9j;mAM;>|L71reP1Y9~?<})wPXGYI9nTS@}=*o{tV-W1-nI7C~6;eys;!IjY$@j8+60oMfzs27qzUx8%b3Y zvcp4d&SI(&jB+Dw9%rm$8n7CX*B<<$HJ~RYvUHuH`O10h7r$_-jw;ej;}pj*iIi!7 zqObRe+k)+kv-iFv0kKrvhAk}lWhSb^B(h*o;Ud0hdn%HAEw4|#nCIUemn>#gdAI@M zcZ%O>cBo9jPE3BW+>GbLU5SF=S$1+B=ex0Vm2?@}&-`cBBkJ+~MxQa6UJ%z5E#;p? zNpBfSdNp<{Zbw?A35I<>r4JRr?i}`E568_Y zDu-v_|IY$*jutx4{(a8D>su;=j+#G8ic-Y$d@l!}Cje~sCBz($k%|oy=ufw7CA`c- zuJCBbiGP}+myxkXoGQ-c4tdT{``UhkQ>{80o<#hKz;ThiwHLEHBx1FTviDZ@ z7mT>26{oMa=Vy73;w#uw3+7^w!SFgCrvh7&#AoF9$AOCGQZonO9i*@GI6|Cg+YAoXHqg2Tm|l-JRBoHkra;0eR=wWU_^Km)ZAT#M`6WJLjVbhovqTwa853qfndWasc*yHZnFI zKMVJ^?aa0qtvis;U%>vQbE^JUjd}jv;#VW?e&YJ#86rCa`ME7WwkBUkAU{zs2*qQ_ zhbWq?(lkY<6`fQ0qs50Saf8nDsp)_YSI3avle{TN(@h}$e2_w$JpU=@|CB8DmNU4W zuhOyddxO&Gq!;*)NA*&q?1*H?rI#9jpakowjq*k6>i=K4|Ni={{_|CT;?5A~d=h#& zKs#?ZFwxpzMM~p7eS~mW^Le4c0Q7{=e6CixnqJ|hvmJn)B+pfF>dAzV$7H&0PjL6O zuK;ren3WzTyXVJTBfD|udO3bLJ<8X}_v#Gv?g7`_U$pcO$F;htKRe1V21x)iS{#8a z2ohNdO9^x9$Zv`Ae~LRn-0<6`>K}J8*pcw}EO8x+r{a5n zsgDZJ%W36CB!xdPJK)--U%KzXZf;Pwv{lrtNJ3m~f?9OjtP0|>0=ZDnC zsm-MM(cWW6qa=$glh8c>mpMOx)&)`F@{7Y%h=s@Iw za56_d90w%#N#K;03K_6)j8_9<2ocBDDBl~;5nxvu#WCda&5T1 z5fz?^Q#W&6=n2j3`B1gJ)^I6y&klvR)vp zF_NvHXyZjaapxG+l$FdOZu)xGW;r}PM)tmo_}c;3e`=J^yEB?wpO)d%PeVCBJ}?8_ zS`gh+X`NkmZG!{`*Dlx+Wld+DWv^SIRRgtI+CZf=2tC)Kr(@Yvz1!E#%UuHx;8g49 z##aW-5nW^kV7yZuAKh0h_*KLAQIGFk<)xoFs~hJiFSZ?-RX%p#hq`~g`!~8jJg2R# zzfuEc1o*3zAKEsR`>v`k+#-Lp_an1Ln(X`vb-?g99OyaqjDzPic;?ln>ObepP4R39 z{L9kn{kSOV_oDFjZK?Yt-qvt0AE6t!xjJu!y9ou}?gyRdyj^#hvwsbHF3Q>G%ZYkz z?I@JRvC!+0!9uZLp8&Rtd>6=fwSf2W`_d3P)gw`JqjgnFcy(Yvwn!SK1f<=8A_mf? zG#2q@uiUi{NxG6h4)w{PUzrR;MCHcgb?Ca&H&y@Unded0e&=Q|p~GYls?cj2$&`**P4j?4)z$X;TdKCFrNL6rn0umwEnjh2T#x(ZGwODodv z?S)xPZ~S{J`wC$DD^C=_!n`i8-ap_D04S~C84-H~B=k;*(!p|*rS&(a;pZ9BFZ>qw zgFDc3C0trB-J4-&C)~m3HPWt;mdfMiC&t8rnFi)6Ff+;51T+7)k*@)>ig1*{f#+Gf zmnjLR3z%tO!aFEV_j0d}2PUUG2h2Dy_wR%kFE}HFyASl?GTD-Q%_DzM?5R9c(7Lqa z?vPUorPv?fQC~NtMQXRpDr|L&(GD|N)ns)E?lqA=JrDv;{xVr|Ta)+-3-Zg^s20x@}=Gy7nPw>>SD)H9Nj6ZrCq-UARp=n6{zn02V1g3;xHAXGn+AhC3NN#@R z_ZWW@$j;P9{F~r+lej+OjwvG7Z+`9Rcqq(;!F$XFukGB_X{g)=BdsC&Z|I}Er%rkM z3g&<>Z)l=A`UDp(_&sq7(D|zL@z%PGl4dX+&Ig2ZTuho6HIs#RQzLo|n8gB4Lt3wYt=@v~fULD$!s1l+mXu!OA zXs<$=8==k4ijCSaa-#URNal)l-(1@D_1`a-M)yzE|DaK3o31ruNI$#-99bD1O)Q+; z+MOS}IHY?#+&j8!$Z=@2YfJKDYh;dX9&)#fINIUnks8?jC1;xyIt!<8X&7fXBQ7(j zqj6Bq07<3ZSDla$dz=?5%|eMAR*a&|jSy!FQr8B`mat6B{qOKAPfXR{<=2e#&3Rlu zB2DY{7sX2}8}%9PjnQ%GBF`}S50L-6eSYyoawTeh)wtqDt>$nGyrN@~G@lz&+UT2; z;J65mse*mL?Ke^$9z_{g%EJdy7M5}^K7rl$CLhKVGjSK3LNQKZU0RuwQPU!}yn^Fr zk}q;Mc3w{^8LrKItRg?&m?Lf+6gQMLz_%2KL)kcZ1wPPaVQDepd-OO?J}+=yhP9{NB-KpXYs#Tp-8GfnMzH_eJ3s`=e;Mww__zuw6MtAP9eM`7 ztbi`hLk!{~3ux0f9jVrE#)P6O*EvM;R#8qHwMf5JBVD&jG21(;gRH4YsLeyYU8f8- z(##E+DVjbR${3|p^1|>w%%+9csKAbiI(2;v`?*6?b-gJ#!~QCtOm=z8tuOot>^JwD zut^9od_vJ8)#J3C@(T>tJEesbb%Ap4P;T&r82DSjw?8)(-&piI zA>3siX?tFC7^%P0{TQh9C136?;r@@qPm}kv3hG$YZ?rWXz<{uRGc97A%=KiuZP&J# zS}^=-Z~#IPZ&rCg%Qw2}{xbAjf}S;EP90CfUDUF7x9TdYb!$s<7d22>$lCrY@UOiz zRsX!1ea_!tExF0$zlvYQ>nsE}n5#GWd$r|3!s~n(_nOS}>!jV_?@eyZucB>eVZrY6 z`BoF&?O~DGIb3?X?Ld;gGnek(avLjX3=L>|0!}1}#D{XF425V?0s?*(-K;WL0XEk95fasGYWdKFq8Y#}S8J)o zf2ncQ!GTnq!iHD+$fJ@%%HuvqpdiE#=i&qT8g2nbFZPA7hF%EcNH%uSppVC6ZHz0Q z_aCZ3uWvLw#zp|Oekf4=9T11HuIe$Jv{uahWAuN%f2zKeu;!Qc@Ah@oxwUZL>K=N? zcJJ`Uvhog*cluMvJ4W7P0Jbow#(?8X6rZJk5;BuaVubGfk1;*PZ_z z$~Z|GhX~u+u}nTS+}`NdvX1pm{DlS+;x7)tO}k?s>&_V2m)t}?1g_U2t^#^-$6<$G z+X7@R(nMP~7a&cM@KNABO&NRMGgbeMg0tsx3H#wmWL*V1Gwyv;wmv4c6j*F0MGxf>w>R@? zYANMk33iw4$@UPAu>odX@o)iA-IeF6efE?f0<9+k-@u*$`tpwi{5)s_9|6At`$BQH z<@1Ik=-I8Tw4x60t~^}rb4nM=zcZjS^c$*uW^jYtjVlm0T2j3jiLpEcnNfLx4~bPT zou{%N^XJ4Kt#r4ikJ=KN)3{F>a$x2|j{sQ8LX>+u$ENh@<(G1syIW}291+z=^_ zyY&~#aN6s<<-v%+zJmx^;L5q~S|Z-T_j>;=Gu_rLDmCBRII#RZ0Of*M8O7bV{+Vo+ zgCpP#lrFAbr7Lb55Kr+fs|VRkh?>2G3{9ATpg+zCaTS%Puao+Ik>uTrYT) z`SQW3`rF>bxSj}o?Z@@c-*a3SsT6cq-cjwdm!BBO&*sMU>45)JAJ-4L7nO{+!kjD} zn(M=;WeUFeaXk#*HTq}xFZ$0@^?#D%D>ts)TASIeXlRsqQJ5}24fi4o7z?93PWKm# zcLdn@Z!Cmw{p=R(XK*q|szLBta!YwHkt>r(p?-cQ6kpxqQ*g-!cV|XG3O`L4A99XJ zyk0V3EQ}AdNDL1~SO(Q3tyKV0(XES%Ce(@wzVRZWhE~9NTwwxkAF01>r}1SXIS;TvotNkfzp9 z0#My#O{FkyE*-G?CZ&>>u9@Q}fjhaKf!YB%+05)Q9ni*MeKi6EwKlh=p;>N$v#8Q!es-9!(f5 zVdOeA&wE;AY8Gh0RjZ>9PkOGNc#i~YpzpZ0YUx71d<%KtuTIsUAZ+uhNk6;OWZe_Z zhgi&lg1nY}zV}0o`d)Vb^B3IzfPbFw^G{_iAnqb@&nd#q<>oTCxZ~`j&HDw{QEyb{ zOW?nmlzEe4P7!yTxNVK{f|MT|+t(-nLzrehq|IO;{fwThagB{70D?6BN8!In!L7F< z8-=|5LpBQI=H|yt39x9ez(f$^Nl3UZ*eZ~=r8>6PN!<(%e;<}(ydQ>1GWo-Q34iyY zsrv7$bBo)xYa*O}QDPW0riCLms=?9F_mP54y0=nuK=BaGQaFg99LGBx#Dg<;7?N-PubVL>D|fx6@_uy71}= zdg37sz0anG?yl^&%>E^x4P+dQkN$w>F-u;`b}f%6+ODzMVXivbWVNYhc9bOE!6c4S zZuhrlPr0iyPr(B*dT&PYv!)U+gs3aIiu6<-vVikNw)i&su>WnU&Q)V^zpY{IU~fAE zab_+U?J}1YMgCAh4a=bT=Ysya* zv^Tq|?mF}19c8D2*lymNB|5)y)GF@2Y3Q%ZrCV2~>JO-0Flb5d3Eg>RS#?4A`2w^U zAF2)VG$2s_hr(#k>(1+<%KPo9`Zp5Rzf1hC5jXdDrs_}4Jf}J)g7=>IZfQ?b3@&Jz zSl|ANQ-~0m=?(BeY^pR?chd{awNNZ3K93q>o@~~nD7m&g^*5X^smJiW+VXHg>#V4h zf2tsQDIOV!F6cQs6VCZt{F(gjRQ*TQkQu+0okOG!(p$a1$K97(y|BY>Y9pO^e6>p_ zK{XEExxY76|GJs`1Me1I6pDitJ1N_JY|eF!24wy;(uZ|T$n2BTPU!K;Y<#>Uj_d%> zFIIxaPw5Wp9kgk=)4vgZbBTMIxbIU0?U3r6Z%iJSH)ZnF8~{Cf)2TP52TA4=!RjFB zCc!-o?jP{DGn<2<1T!yeVw_hC$`k0+MzsoULh}uM7dS40ukWMSxHsV&Oz=fDjGhD& zmbu6<__h5{?hC*nd4uZf?k6tJg&ZSc)+P&KE)Uvo-ISlTfixf>lK&sC5A zQI9{i?_zT_&=YK4+&-#-;0BzO1Z+?sijQsGU2*Mm|KBklpd8rTyH_R6^d!6v)Ozjk3-Iy8u|ND;hts zf7_o;I!=Rj?g}TablKY<&N`LxO4e!c90t$nH^2iKDV|62c)DIgpRN!On_L`7%jM!1 zI~3-j(KDW<**^9XcshT7s{X~Ihkxp?Q^YMHZkr-<>(Ha=(jps|xqV4>8?JENI~TXW zH3Y7=cw8F8jjd~a(f$wR(g<*GP2kiK4U?0!Mf{ckI|{7UwK$ho25l_NI8x0nmJH3( z#eg0l-vRQiY0M`@Fna-n#!ABNKC9dB&y)8gdA~(@`KLAf5^i4d z_sR6P~U0lJ9J~J{$axTwdKKt_2^F58JYR|btY(aYCU77V@bu+d9rWsp3tlcy(+p{BF*#G1zUta#xnssJH7c+QCq?7=NQktE<10Y|^~*cR$T zj29DJkQ(3mDjGq0GftVK?veQy#vk#9AhbXZvbs9CF33R~DU;^Ym?U$eFcMrW8%X$e+SKa2)IMQb;mZ|EdboS@IP^a zIStHNV7}SIyvPA$&XLxALAhZb@t1(P1WdMP?QjUh+ukJYI%)sTkGCeC2kqhVUl*Jz zSm*o5-|;%f&T*^IotQ4eDn z=AZD2L~O8$q=Lqf?zy1X=>G-L8>*DNbZ$t`^xZt3(0rIU3cXjMcN%&>&(oWo4`~1B z21T!{!JT$6x$wRc_c9A$X#g8);q*Zixo1=+lp)~bEw?=^N6bo>g8(#We;p~cmX81B zRJ}BFyU9>vjUI~d6O}_H4njDEcDpmG-4Sz~jQ(wl?GboVUYQVY98&!$civyY5B>|5 zi};~QF4tEws{26hJ8lBkpPr)-8SM|}G) zOXCrz`IT@PPKr#|k;S8Qi}JqUU$DMKvQT!dP+#+@Ove<#AqI6aq>*xKY4Y||{n^5H z@B)>sY3NJt*Ok(BA!5+wmObu__D&yNb?hH zr*o;r=8xygG|kw38n!p%j~2HwzMSr!Vl#w=F-4nMoc^HDSbZIw=fL@@$63&horo5f zIfroj+$_uOcLxh*My;~3pwW)0%(m9j!oS8oXy&on`EYd!_w5WWd|0C@la|NpBPA_RiAwidUQRL9~OE(XmOkclSL#wSlBSd zPH){k*h{loOC5g;pLGwO=DDy^9x5QJw_@uc^~6?GP5|v?7n*@Es}qjQd!1$6b54DX z#TU@kE^Isy6)_Q@_`Z3c)>>-+pHubSglCvzyfw5a+BJa-sYUZ#k(^{4T#LZ|1I6r!zmmS@Squ`Dm({T+TMga0HT}SQl_Z|+ zdA3@aT>cb!mXN2YEyo;rE|=db(^fQ_y&L2oB>x%8pLq;R^lcL$a9XJYn7&HnPYTEP zD5z_n!G1(J*?Uh-=ibi8gOMr|rRZKwS7l8G#o*R@e+K+7gFpBHDj3^(cZX*`e@JoN6>4Um4&RHz=jTpu_M?z-{xrjXDOH*NVHe121~`z7CqFzY zTgPq+D;w88O_N=0t&2<cd*8Mm4k8z;BW8v*YDESz1|`R{;J-|6`UnT{QH#5`r#(HykskWYA(FZ*sJ z%^i2#SZkltT3Rs0{WbMho4*^ygW%KEZqc@gKbseQW%V`ja4d`iP3yUMo(XU-0k_V@ z!X4Lu`S?ZLSZy!sh{7;+EE7)kvk%k3IY<6;!Od&ulFn`$y!aGvgmZIbIvb`sz^Y=j+g(pH+Q0y&uL~KW3HYxr(Z4 z&D#U+p-)WJUnZ=&`#GHH0{@LUED<}4|mOdhkUdT0_k zBJI%n<;4V+9}aR{$!w9Rje%-*75e@OUw`+&yBly5`%33!2;Gp67qkEx0x#wY0KfRH z3CdVlny#NBY-5Xc()$bE?ygH$R@)oKlRI+SM$6kz_Qs8UHppfBD?RBb6z?}Pa8E^h z-ZZpyLCY_DTKrhVjk_OzXmodw*70vR&jFY5Ai8<$>=RqRy)Af*#S5(2Je{MQ`JX-=?>aoq z4`d`WZ2Wmc`_c{I7XsfO`!u5~u|;M$V{BUf%YtFoUD+2NIWUV{Ommqo*q4f*U(yae zpD|rOPdFLV=~%qKH~1ESFBz&XbZnx8dnW1_kic9r4^pE(2o{-5<6lQN565MBes)m& z5Wg$XvjloX+YIz{I%k9VNxQOAh*W*s@o!s82f_JD#OZX?vpPZ-I~(-NC4UoTT9@TZ zgd^uLY;FMrGh04aU!t6=l=H(HRN4BFm9wUL{e_kXsyALhqIdHJ=Hb;BTE-ebNAjf@BZoj}BzoQ%=z;q@>P~@*f3Kjqj6yRZ7@_4XOO7UPZ^d@tZe@oH1ai21WkIrEB(G^mks{s1H+H9h*?^fn%|EXpLjphFGFt zfMDYAZCWz&gT7YLI(iX0X16ouXU#Bf+fCmV=i$7B)U7@q14}b7;%Df+W~-;2F?Cs|42` zlb=m{K<6L%_DIi%h^Dw*`nqH^ArAQ?7aE&Si>Rv%>0=FbJZ9sI6S&gADz zn?42WiTL{YPVVU3aywdH2WA48gN<#LtvR@_#0y`|oaCC~?Jj4P>I{mpGxBCb*!8F> z^2@4Zfrp`G{Bv4MM?ZJE{&wv{#X6DmaiQ8gSFp4BNI^8JlBi-eO$aU%iX_C{m4y_0 z3mUpUZ#w$KQG3+(Rr~PMiFFDUKn~ze%^0_h13&L`k+%VVnsABs^Ls7N8ej*IJ@LV_ z1}q`xS&8-66kYYA$I|M{{4Ve_OLx7EffKkWfs<-f=`8Jjm~yUDPIb1GQ*gF3YlEd= zkm5YzzNUs=hDWzktnH^+xS=$?h22Y=C#@r>`%U2Mwd$#1Hh zm$4z0<%3i1QhRW(x3qel`^X#oZaRO3ayg*&I2AN7BHAhAIAxrqjG*HpzT*sWXNdcb znda%5>eaR~My+kjt2f)mtJm7t>)SAX<#)4EK8lez|x?jFY69W2zsgqQGw}o=P|sh?1_&^9}3Slq;Ear z8-+)sO%uXtD(t~7gmWLKkyYW4(N`UN#O3X7ED#+GJs{B>JI*5!hEk74;N``hx1gG( zL7HG>erxIcmrU3Hfw20*uWQ+Uti9zO!9c^7;Bpb?&%77|#aZx;ed%=czgDnLcHsw9 z89tBJ`=N5OaH z%cdLTvw5Av`>ESe;I6#^oW|Wb;BEjH{L*z0cagZ+3#Oxt)ce6Gclndx1Te1xvj~_) zzFsNMQEs?-Tw1AxgLI86MvM=nxe}ExR^b*U`CMOdr*PzE&T|G*bCY!pe-ZNEFQ2aK z44U+PZ{)>bbRG$Oj63-?Egeqp_!M~NgD2QrrF7%(95?ECQ`=eXfcMBTP39x<2Kh(H zKk4Z>QZ7HLQ@h%7nzZwzy+vvKTf%S77t>$F1v&0aLn@;FzTWZqr)^c^(Q-13^> z&%`rZiEk4WOPh$1G`uewZfP8yrM&iq)AbL;`Zbk@pBb4qMDg$A1&CMRS*5A85_OpU z7U~23=Vq?Y;;l}6Z4avO$_k=vdvnW5BtAYJXyNpoVSAOu^4is5E^N)SQMS^oJ%+Pj?FOI`Szp~bea=X3KA1;Raa zoeD9nO7}kpH(iPip>=YavaV3p{I6zxoVgD>_BW~6aD*~N9nMed5(OTX7gNLGfW>3J zTf>{egH``HdrnUWTALcSr;@#rZuel5Z*47IfW~ll;&>dn>~n_?EZ)#0rB>Ds)JbdA z8S;#O&2(M5hJX*3uzdAAL6$~n=PqDx0ef}kw_-cX@1$w+%prTrUUx0S z^;G%K-OROdJKWriiOnv@w#8g;b8)+~+WBO-*V*Il`qN7-1H2JGl!l zS;H_dwwWbwvELq0;iIazy4XlzspROxbnGI8_wT0uU0!+C-7#_T#70`3JIK0~A!WTl z#6#9clSnk0JwmKmeP~ArAd>M>^J)82U&8+Njnk%Qj`}_Z6kNM-h+kE0J4pH~q)(9k zqGV8}-|uXa9!tdc88CkMbJZk!-OD)dszKjUB- z;PTSqB72aGDnD^1s3qX^8W(?QYw7SeaTY3=Yo1qf_ni5qhO_&-tBbaUWqKudgoW*j z>r#7rkyVx!ESg*xDTjBWtcSR&@~syG?%v^5Xg%@G$XqAs%le|oC(5lRnKv6xXy zGv3#vEYDJWXU;{(#@0KopC8MXs)RG*Lc+zPuV9N7%Ow08-8A`S%$IMOt|NL$d81V3 z!VQqC2g4F2Q$~=+C-=v0cxzdY+XJtC9SCEr`~#U|f+R1Kv`Tqt(qIG3 z2elUCyC>VK$)h$O1;^;pX|qeB?F#G0=AG89i+m@@H%`762se(oC&JE{+HvBs4~kgA z+<5bHlOS(7$fJASeBF}%jS3XWi3mW}oG z$>?TDjgz#yGDdN87IME%zCZS5H}=;;bah$%H+ijmx?CFr$G6q)D2J*(F2fImNVxiT zmVkJ4)MQq>Oj5>z-t0`4(WX5o64b9p8$*{~Bi~u_jgjw5+xW=lq3gRa4@cd;ZEKfQ z?eZ*#o>uZI##&P0Bv|~=Zsdav$>uLR`P%AYF5_)WLDA3Rfid*Jk5@ZeyINdfd~pV4 zbrv2rvnPYX3u`Ql4Q~BS|HVF|It-tv>U2<*!(RnI*gsuoIdJz#@8-~ieaA+PW-0l) z^$(a!z=U(ZTmOi=L)@1uAOF<0SBRT4FkRoPh=#RVPG2J<-KVx?RJ-Y-b8FjIx0Y(; z3u};Dht2BKMjX5a@NI(a1a{<;fV}|hD6kX24$ZvRb>KyCK~!}w?zCqD=e?%N?Tx?h zC_fxSYYNjj9^1{x+At&^3M%*(k1nZ~3EBd=-VJONgWcXV?`t4><-KJ$UDUA)xY@w1 zC#*JiZMV)bYD^6+i+(rLkyh-RarQmdqULwtC^+s1$BQYB@i0{r9PUX0)&X~q6EREO zAv-&H%w6ER0p3yY4yAZeJd7B`Srq3 zjkMJmYp#eTWS;=nF>nQWPMrJm;Ff5Yr>gCU>Eaq7qv80WI-Dc_74n}b;5mbggQo+Q zp!B6f#UlkvKo1(-KHbi|rLRT*Z8b9Id*M74n5-hz9QbCI3uE+6A7mJu_YY0ipPqT2 z>BPyOXSa40kjWkcJ7$Z9OpbgA6MkdSOke30%2~2@y3TWMGu^9om8YD`9JvA14O@Om zTuOV$rH;~nIE2PQH}C7%KZmF5n+oQx_odR+`qmb=5u&hNEdIx?$-RdOz%wB*;z}Wg zy?}BKQ_k6q*?yPqIfoK8vj#&5$EHOMw1yZ_DIRa;B;|vw<0_Mgs3Q8{p?gGu|lezqs~D%{D*7aBWu*EAv!;4zo4mCGejI|KC!U#$*A0Ic}luk~I`v zfA{aeGuIu;S-iDT{-ed*ZA)ITqkVqfH&S2V20cA)U&E@wE#_L8UBLK`8nDB_ zKH_2Hy53&KabjG;m!|8vWLbyEcZ__y{5VST>8?DmC}^rs-}u>I=_2n1@?PAQ>6K)8 zF<;{ZXWQ(PN%8%a?HMg4;dmV!^S4je#|X#04F@;O1lz^5KZ^0`$AwO8By4niJMAG` z*V|}MaQvXhQP6K4`y7j7Tt;6OZW<~`R>MJYZ4g8ofa)-{)4M%E%S3> z@S*C^7^~Cng0YWQ$Bpo^FNznsnS;}BxC}>1bjPi0+!ESSrpH%P{fY8^wP39a=MG*nH&HyD zRlJ+)!at85b(J3|Xr2Db4rg4%OyAtRnk14?StaHdo1Tj1?low>v}@XYgfyH39>_Wp zIL*P*H=}<7Y?s2hy>L9;NpX6V?xfmBmyq`cd1v2?&-uZy&ha94K^x#*t|=BN_==z) zhm?1}TlP4Bsm$|~d2sjt-7@e0me$hT2mkMtd7OHlq|Ebsrt5!2c!vF;6TVY|YEGUE z3naQt!=ZPEx7UkAt}80`2Ayr%Amn(Ac-%Hy00aG-HpQs+_PQ4y(hzK%NxOI$36DoLH^1xC@hACW3?lGs2)MPBAc!JU2p}U5^ z6@Bo%)AhUe>br-72%JTuh?kLS%3`~*qcb#l@{8p1N^w6TWk7Up{RndInxW$sG>uIl zcWzwAQhf|Jo+#0}d|lw#D1Bcrq+z8q0K}a6wFhBP*uCJ^%<#s}x8vW2KENZ>_J&I_ zZ_~Hdy@#=yE#skr6~R4f(wAHbJDajsznts*)%BZWy*ZtphLXH)_zUQ@&Z>(EiNJ_Q_mvGw886nN~u z^fYDOqReJlCU%1+VOgE=EOrLEMxMC`rt7z6rn95`Lg9LeUIh|!o<0C|@vNjBv~Mo% zhM#((=&rnxb%kY)yi?GJJ3!vo$lC)R{p;fQ5^Vp119gloUSM zoEXY$Lc!`hz`Ix;0$$t3^GL0=H1>4X=kdIed3M-bZC@WGE$n2m8=PNG_17tI90SKI zaUMHfKi#vsc=v*>gH>%n2B(9)^6!kxn89UEse7$k*6bOk!gmp6((2v=ncdS`y7^3# z918oqBW>K4C#>&aUhB=|x=b#H2TXpv@^E;^z&r2R8SuKdch_8|va*bgK2OGjZa%Gay@VhNB%jIliUWM)h@0hONiDPA1eDlZi?O6_< zBC&ft9iXWWY#koCqPu9W|G4I&7TmcuE%rEx@hnNIa|8R2)e02>70tBX4tyyDZL4+u zSYK=DmFKY&@#8`3yu>aDWA>!${L8>y11{*uYaPB!+|4AegSZ>S-6rmx3BGo{E$!qt zD=LC1^>d$fcxD*Qf%}2E1k8s8pUnaIzawq7qBH2_+bzmT`H13%H+}P>-eWq_Mq`bHKA>N@9cx%$xKRp&%+EnNCbrH~u?=fc zANX%m)+lBDwl6E)XPnPk#5ErxU!v-{yt1u1O0+H>puNF0;Kx)dXLj`s%UX}>YwNJ4zMl-fSeSZmB&b*N6f@lxEPTYCo zzRK6t@eDMgX%AZ01Rit!6V&r^_>q{LZ zhq3c5*i6M1>!_M#as2pM$}1hoY$)bI!z;wSP8}Vu;`G1D?~=mHG-=mKI}H4*GoL38 zw>(@>ejojH3>zMMq)5*Q^yC~#mj4O>y+<@iEy}NxDmRphkORx|N4*Ej^gW{e0LYu= zW&ob^VZD@~_l6o@DLCA+F-eE}Fh8CtvK0xys-$#1kL1o$*9KYd-aTEv9M`*SZ}ffB zS#;IhU*WEwtF}$@!M3D)(J4V~c1#qfX=9vp5YL~kbcyDL`CFYTP=vPg$oNY9cf6FX zG544&Y@KceZ%6i*PLT#BwBCxQc6KK-NPl0ZjGL6PgRs`9g7GNbzirxt{IX6#JZhJ( z4B3zKo41Pb_U-7BHqLLqF3F**4U#qPuMGivxXNC<()$?scWuiL0UX?u<`qPwX>OxP z17m=GP5Zp0I-Y~3SD-1Zm64~!c|=wx7RAU)4q#Tl00m!m9;e6X?I_WP)VlsU_+AHJ zklm-e4QucI1nH(Eye8-ofEE1+nuIpYxITN=WMnnx`R|yne|3RuH1KCdURiX@s0%%r z$GkU~uoypP#wwiN*9Q(wY(GPxVZ}zH^YM@mJP6ob+ueemo8Otkg`k3<8w#~B*ojTJ+q;b4I@Tpin9o#?fkuvblu(p}+H zE(@jT#uX|EOBH55#m75W=mqunbfuS3A-a4Wdjss`qb%-Es-mJuMTc zMB2J7)(OJAfR#{@Q@(-9-Zx%N2W{sDHw!~EY+Z@0pG|eXIZa;g3p2-WIjUjxK zrBFNVQIw1-q&8Kbg93ILvV8k9?i%5cb=KmhcGT8dLZlf#vEFurcupH)hZ5{m3`=%4WS8i^m^2*M#TtDR3 z4#!b8i4>h4u6!^p9A>=)@6W|K@Ag#|z!$L&b!W~=y%+0xg+@niZj6jZ&~|6In0?a+ zey-?sqrc0V13%sBRq{XSnw}Bv+hKY2Kwm0{&xXr$)kAtC(v6ic3@Je4Eni2;)zzcf zaE3**Z!g5(;)MDXtBnXOJ6&(tNSnMu`z~6~e*XUHdJ9{mtpiQ%JA^IbD2`Q@SBIW= z0bHi+ETE@t{-7BY|u z79#<$P0rB+E{TW-cuU9*`Fr@aZ9pFRL(}zl6V9(|K@NmXS~Q?#L*-1$4k-<*eEV|C zPi&s6a55dq8Yd}h-UpDIM&7Kc?eqq^^pQ3Mn@TUgu}9I_(8{%f5|HF{fb%N&`+j)3 z{)vLVadmO;Qf>8S`)e^4Urtyi`~8HM`S@+#oWJJ3he+Fid4G?GUB&lf{#)k%GQFSl zuzG~AmvDIRN;jPO=0Im`Hz2)amHGUt1eLzahdeIPx66l>(4Pa`o}`WV@Ot+*qji99 z)o&B|&GzuMjp(QSXr}j&@}nDdRt;yj8iGBYzEd}QE0T2j^Af+>2==Amd&%=U9v>C~ zN7~l#z_e^;8&0D=SbN=u@xMdOZ&E1><4KyhTm0-Bhs_Xvhxb@-;$YwwVT;Fjz2#sM z9?GRDAO6<(-E4V+Fy5tIcrb~_$#ergcgC87vfJxF=Jh41m(G?Q#4SEE9p5EUeHRf| zBW_#cI+(7n(x&U{bMi}=Sve0GFpxbs@Yw^!Hlgt+o~hWs-rzFBevfoEJ)7t%uwNLUA+vx z5uP9M@Q)>gz<~Jj%irUWQ}?xQjRT&t_}u6|@$v~X$>)SyLF_;9yio)-fHU{-PHPHjcKa%%QPo_sv`=jJPnDxSScw z^7xQn!TRZ)C8X0xn6V*zCzHK@$sNTEH)qG7YjTwPmH&usc%-ZOY`!2Syfi7fJ!mWXFVOS;Pq%h1I5$t0zsp#V24+!A z<#NZ37~3q?1g1_OV(Jp^?Zb}m6vMr(ItjBYP6f8Yp9&BIF$xZey=Y*vH%Ar)zi}C} zvaJAge?dJ_e61erH+o>mpN|~p%If4(funMzLQ01I9rj2Hw22^|$AG0$$mk8sbOt{Z zP))))9}4^`?3mgCMjXYxL-L3e`EcJZBk?^LFb~o6FKt6V^JmesBCPT5^bO_D$1C7* z@8m**dVbx7oHBe+TD2H995jbqSZntUa8CSOX5+88JH)+|#GNCqZ9Dujaeo(ihUPJ8 z{#9*|=f+$4zlFQe_0>fyo#GM`O0)Y+b%}0V2yS#LVywxEjt}tJBefvqbXqV{GgHy+ zRXJ2;Z7JP^-j|{GwO^R7Uz){7@w(kHga$n8iT`_&%#FHL(f;2AoAdHnJTHDPL8pD{ql7EGYIS7A%5qGyFuJr z{o0YPiO7~sih)3WW#i=&Y9NPLW)tOSb7YEK+FseRo8ShiH4=|TK1Y1=!X4a4{>pT{ z+_-i*AD&L8!%d)jUo^ky^i)zcH=OsoE1_i?%1zyllE6aBI!Rfb7m?o*w)Gz+Oz$hR z@jh}zWfG9fz~2FWNrAj6>}jUh<8(6fTss=B1+?Jt4WUpGiB1P%$xh^PzvgvB+?>Uj z58F?t8Z4WVOpd=^N~B(8*yTM)-kS}1xey6?bw;~K-j~VS_Mz$c_TCZJo*D9Tf6!R& z9rDg2?*`wlM;L-J?;Fs(a2NI#Du=^RXxcAm8V&(jlSsqNUgNBOCILC&+;LPeM@Zz_z|Pm~%;h#;BkmM-n}Znw<^nLE4}6K;GO+D*&TZ}@42xK+!Q7b3Ogf+ID@G_`8)Sm{;wlkg4go-$zc8^ zaSg-X;%1YB9|L|KAo#4UBGU&+AQG1-5lh7x5|$# zCxhgcWS8V&-XE7;o$y>d4u$XyW{Q)#cg^q7vd`4nn|3-3>Uj^bUPJeFUrxGS?@bma zx}GI_Rl0JC^=??Xq{kl`7iM933fz|guTMD+(QpbHUinv~L3~BW!}Q-(`~ciz9FDn$ zTciKI0AoY73%f#VP24`}LTe=S2;t2*I;RWrOo*JEtKKIlbNF}v_1a$bp0}6z2MvEp zI2mVdy=CP)GK$E4-%)fOayrU%6mxyE>krn)nsaoH{K&cO@3O@J zG4vy09FMxdW;e=%mqCqq)>#D9!__Vw z=Fv8%9zh=Y2h;UFzYqE~h%tBs-JpyY!&E=6IRBh*`nEd?{*g=KX@>3Tnl*r)gjms) z$(;b*-e4`;E8~RuICN2^B&{=9{h_u{%nk+2fQI0(wd_+V26SIJi+qsC4M8s zjS*M$ZlGH~5Clvl0=HcS^ewNTbsa@=*j~gpr}h>=OLL%US1TQ09K8xHuR_cJm--0D0k^N0(Bm|bqk-l`9zSqy77}2G~&aj#WJX6jTu_MvFuQ<*Z+HZTsS%; zrAUex2#!PvgWvA`UD3LyM*)E6TkZBA52w-P=-TQYr(7Tm@I8%iv^RNp1-UNJe5|2C72tzYp<2SmG^TMBS)+tzvipGHC z`Avg#IbN=^L4ZRjq)$kqkvZc;J`N6+?53O=-iwinnw<1NVx)+5U6hvMBQS>3`0*qj z;g`t{kijsX7VU>W|5NnNX4Zq~Dqjh_0E;YF+z=Y(d1A z5%Fje#w?#*0lC?3ck#kikiW%5DLbP&^%*4U92h$bf-UrwkZ4 z6k#GFD(XrkEVPw8L`gM`jErhM5>inuaTi!zh4jM^*Z-;&ULQy_j~U1=Q`K9PE!B>>-qoxmit!&^+T`Kysmf)r(#=?yxPVo zoIRVIieE>h-rtB@N1N5qdX47_(@~|gpija*75BA~IR02w`9$NGv(DQhgfnsbbJMsH zQH&v56rHk8b<{eImD?9_al~B}p;tAOy5d@e?Y4?#v{U{K+~;{VeRsz2pSiqaSUQuC ztJP*-Ya7SKsvyo-;v9^`iP5>r=0JLCITK+H;-#zXC9k>1wuW@_ewWtWYVu~~V;I?5 zfVsSvS&Vs4XeV)+iE|0%7+_3KM)?g+jcZi4*XT?OR>BV_9i#il$dFzm5z;_wso{ie zBkVc)&;WTzS6zA(qP_afK=2UZiH8Ff5|)fdMwOk;a9HM{&me9ypeJrcisIC)2yi5H zz@!aaREXRti7=e#^l2QEEJfEG-A!G({ujEPamxtzJh&s^&NLW{OWer&4B(6mx}z%v zSK8y+2wV-e99#`Jf7dF8-@_A@8l&xzALnG@P|VohuODd5u%0xRkme-X-?lev=S-Qp z29!p+*$tUB9;4DsJqy=DGgmU{F%L?xO%tUiBrwv?9XGQ~<{8T-EB_{vPx(1BP#X#@xIsN4iLfi&jG4vN3i9DrwCsbGp4w8HZqKL)#iv7nUmb6$a(LS;<`|Tw4&Jq}-CYzB!bI(>pA6n(kY_NhkV9wP2J zii;`3t^(JSogT|Nlhg#sz-Ok@N}O%P8Gh{Kx{A1}%YR@}gabs+gRAMV+{NH5DWnMB zSVqs8z23*43+m~XEkvP|8%_XqHuia*WY!# zYyQ(^2vn7${|HZA|Gy8V_Wgjn$1Z|>+Y}FH+kx(o9U;GixRJU@96>iZN`J2MXe6i?(_bTP15u_dSSPAiN0p&{F#{Iw{y?y6} z^MLseN86>G7gXKRBg#+BWL`$E(mT(~!b4>vN0MG9z%1!E-c;}yof0x?lQpgK*ER>n zYOg(%BbnbDo)-&u5ZrKZuoaEbINk$p7`U{)KAMLuJ=KNJ;12L+dTuS%bjOFAi970c z`V(>A8ID)!_g~zcSH|C7wcy~yh@qU!jWht)MR>5(ABT@-zlNJ#i&e#8*GE&Ollmsj~=HtrGwk0GnS)|1xQp}l=?ANU-nhWpgD6U-1`g;#G0N5gSu z5>CsAeaDO-j0}r>fQ^x>qps}r6pSYZ5Jo7*UrR=L%K2_Rl&QP0w{Li+ypNd!+&AP7 z)5VdCDhqT=BGp`7*sjT7t(mFOw>)CnO+fak9%yAc2{56-{+Z{spqa;ww{mS*E z!9z}nt?P!2#MTwR(mWv<+0uxII4e`FwXpN|&${?-FIQ)a9y6S0>j+N2Ss$ zcil~cH)pS9)ybplHWLZSzR@G0ANbI;->CPXfANgozMI4KX+J(vjWmn*`x=P5j?emN zPnuU!!{wS3nq_}O^nP98<@^SHAjiyf;pe>C^b=$bxzDUG%#>-?t(}x{>#KVG`I}CD z?MZrdao$$y(Br}%2>-+V>cGwAQC#g|zz%Oyvdc*yt-|)KDIPi5UCb@zhLKenf!N7( zA2Uwbk)#VsC!6OWQ7{3koV&C(AKnztu6&ZRZoY&4*Qat1#yE>=A^U&?ZeA-y#L+Gh zdDmHQH}u=-A<(+O4-9O)kU(O@BEg`9ax|^sJmu`(zI#+A<|6(Vc{&Sd0YCDedi(YY zpI(zi=MU7+NFgu7C5h>|_UyKrTyTTmY1yS8Nh$4vq`jH6TW}AMb`o_gsDrKZ>h1X| zyai&MwL@_Mdyhw-wXl{mqf_zJe>fO#5z_pN6z*bj(+O$y|Qojbns)qY(Pc?YKi{kSYR zV5l$!h5GT$#e6pOMw@^(^TSYC!s>)`Vgyg@akNd`-bzO`|5C38gzrK5_ENsR=P5xcTp;f4-)-@BO&dSKgb;IwpLZxTHF+#I-D^yr_H`(W*(~ zdD6JZrJ?*a`cMfL5)9w@djBv}2)t zL#qt@~L$^Rre=anJC zNLD4YRinc|2~zhdWB$529#k-++LZo(Z1QZvZXw^&WN)9!Fwp;)ms@yhIIMcy`f-BP zlt5u$RfGKw_4`nAMaSW zx&?AA88P;5VYy+ih$!({j>unksfB1R;fqLG{M>Q8X36`k*j+3UI!w_Ajm{x-JfUL0 z4r)-w%E&hh@3-RL$?|3wRqkN91J!f6k;2xy)K!Z?B{{@Z{{Bu3!l;%REu=~=vPs~? zKo-vPiF5C92-T#5Tq|5jc}dnpQp5X_i6*;bOO*fnd~HlQpU)*tUE)#wl%{{nQ#CQ= zMgO}kf@+U4XG^NcjV@r80*<=?wP^0+E<_)j`wy1S?yEMFQclXM+SC|ajZ5Sb5?M^R zx|G`7r{k|7sg%+0s&Mh_)e^eKq~>dcW>BZ^GHI^A?Hy@9RD=3cwdLI8>Y!FqevFwm z19ebksA|__;dGZOceyKhv?t$ABz+%~(ndTJj3-@1bw#D7Do=Jfh*-Jm*dpC4GJ8qA za(vcBjMnNhBKZRXlk4S?3Yo9;2^Y&JZIJ#Gs3uhqs7IDMDBo{g3=VdeBhc zb4*%KM1pdgvvMR*1Pyf`sYBh zBiD^06~()0qCJG{rO=%@QxsY<*wHFa~4hLrQ(oph32gxY-P;;)YQ2UX`}QOv_%6QQ^|60XYCxfE0rm1aRCTs2#C62Icl zkA%yAbHuOs{Yp4OC7k3+q}Hi-e&3d}36s0h(Ae?W*OyKDb^ltj%EZAcZOBGOEkxk9K)xreeM&v1U9JjWN?IV!XdBm1J(;#V~_wI~(+MeK*u zmt2V34!iB_O?Oe24o>fM$Y^QQFmod`gFd9#(_C6y5VO%|LWY_{J0VpPswQU#oSrYn zyC}`XP*Ifmb+|>WOjPu7Bv1v;7oC0WE)X^~t>J1u$bF*uy)inPrT54z2jM&-1&Hd6 z(97zO1xvUrHxD1M$?<%d2GZS1x;>=3c;K~P8Lupg@uVvz^UV$p?pWMH2o({N%qwS> z@g(+mu#P+mKg9ZVL2uvlxMSBoc74cx3H?u53of?GR!ygH|b( z9N{W#!1sqXQI_V$-tfI9vzDLhB;8rayIs9)IkSqF0H<5wQ~c4`gQT&UG|WEO?Vl4@ zB4X`71F_)*vtC6L5bZ6tMiN_cFZ!j3r(sd;puDy3_Eb6_D~F~Fnkk~G7R@rat9erK zXx8d=geMmE_I*X+aqCDUYWJdh&vaYH-DTIgbiduO-M<|m{~Gc?OZj88oIL`r9-O&T zXvz%RYoTehNs?yvZBWA8Fl+<-XK3%qSJ2BY0) zFq|def4?7fM1wDPWvMD&6P5+0*kG7qgR2SSN%g^~r7>_0G*y%rP8wxy9gIZyVD#Jo zMZbnRrNdM=o*o~(0C)*dajPTYO23IPcx{G8@G@5hcyK2Dza`Bw(o|jI^0?){u^h{( z<9OO3TE~mQp+t)IOV@kK064XOlx{k7e+^Fk&wo$*&HvBSt6}Ud`!MnWi+lU7c6_ub z55#N@5&q232PF9ozu~hhe67~CVxGi0Y>o@l<@|}P)3gJKhI?@rZ6>sOkA`a<_y2pi z;n}X)gucdWdP9AwW~{&54oAZnx3&;oO8DC~kX>em;)xopH4b+WRz;ZjKYpy{Awn~h ziI3GqcoX5TR5(Vsqu^G6^E}gPaQPo$yaQJ+BF5|JcjclW9657lsA>4Se>IiHyx?U(J0Qv&`ft>tfg|{X!V<@#K_0YF&{V4qV zYaP!U<-kVjif^s3ZG`P2Yy$4!`gB+d?;gT>2y0Rp-!E)G7>r^z+T&hs5r?a+DFw6B z9>YH@ypQw3rM=3Sk1O?=?fW z4!V5NG5rd+2HYBOIwq4*zup9{1)O=`(yc)>MZ=5EQ-9s*!u>tQe&3w+#U+llrb7qV zZ1A(`fZ5D!(yGAbZ>GPJpYQ*1>0RYnf~3uJwApNUvxcl8ovozfdBid4l;y6bH)NNC z(*twhkh15UR*Zw&|HyoBWDJtG`>g!)Tyr35&mtg*J5{eJ&|3T;W!bi@x33O&_J2Bh z=aQ?FD8*wQVC9M?PnrGJi`-oTiGUKTpg`a>QLc9yZ{5S(J`DN-%7i~GTHPFf( z&O1~6IO93|b|2CRZ7sB_Q^we&aV4rIIU;qUIbk#L>WMek#WV9F*G`!|_*&?Yr5Dlr z%@@;yndZf2Xj`xch}%Nk9v3&JFO|)w+f-(4&%`9xAC67rBCm$S9;zWuWjh@G4+Ze- z9j#CYH{bh>1ngJIx4sSeO3IM+9y_Dn+B`4+zSQJ~d@S#7ThR%dTc}Jx+N846*IOmZ zokCt}aM!+AsV!LDxJ5wpBMw8x#j$CLqm4mSOd7{Y<5HJKbnV3Vv>hLfE%5SaZxUdFiY&iO8rw;uX zOzB@k@?C;GP8vzlxZRbbUmG&FptQ&8k}~T~jd9FP_5H^!Mj<~ePVOIS^K1Gv^7Q2Q zp8tmYH1-`JzZ&v8UHM_uZ;pVg26xTC^OpvG=J(w9o4Qi5+G0IBX}b~ci7-XmDT|;u z?T?cYFVXx%1eWIHnZh=1<-YH#-oEv?v&RoE$MCNBd@p|kmo-~4^n`*MqHQIOR?;}+ z(unz9DMXvA?ak_&=-Sz{%cKIXa@p%uq|tzVo-{|@)Z2FgcmHxFCCZk;%F&YAak-J5 z;7`V1daju$;D;k@VFiYGZ`xit4YW^d_zdsQkjF{xi6mFV{1J_?SUCC6ETkpdPI}#> zHxakWtaXb1Da-9b#q8zwK~r*bZzz)={g0tL&JMNcNn&_n1sQV9Cr1Bi4J1GOA=-y@ zGzTcJm^Nqmnq6(X)1<`c$wp-;GpX5D_4^)nFV#XGRpjyBf%6#4H8?uceA6ZE&7pAT z6C+b)``iK2Z6V#uT)NRVu*-B!SiUhbv|e&c9^Lxb;h*LFfHZ!Pizi+G=z1@eyWZR# zv@dBPKsV1{bIj#s8n9f%yQVmW3IuzD4+ccP^=K8#9(BxWLu7wvaPzOSxMHHYl}H*W zZlq^(L)>0RB%|>1A4e$Jqd3Ji>mSO$YqjI|gG*w2z#Rv7G45#pxyAJ#(Ufds|8(oX zG~yAILsJ9It24)v^!Wh)jrfVp3cK@P$^D|l++zBL_EeilKXF@c=DXuY9~_nCH5JDS zG5gQm(AGlxZ^Tob!gt^jO_ABh%82zq+XU?fM{Cykh?wygx>XYLwi*1TJGTFBE2s7x z^*QE0;+p>+{$bb@xcu9D?OU6?Ms-K-baRlDB&?pWQG|`h9c^oWk57BN7HI0A*%YCX z;Jy8mqSb7shDIYi#(|mq1tE{ad#27#l;QhtbHqnyKC#2;G zEeYC@9|Cnz^+#2@^l0Z`;%h7)^?CL`q;VT=U!QbYL#-$aTvxK=A8~dPCvJVZT6so0Z(~09O&GeaEQM>u6Q4;>I1N<5901J{B6C*n|&}nu0a3s z#21;5*7SyV^@J-0R~x}4!Igt+0Cyd3d;VLm^WUlhDKX2t#H3XZ%`RwOCmM{>Y6f=z zoZ-FUufVPWcNCoV&Z<*%u3~*uUtBibNCTTEEF>z)bI%#iB9ZuP^b|zm-NK9upWbCz+`Qsv^?*N5p4;x~?fWVDNB&FE^^Nq{>s~F_aO^dj z_=?-LT=jPP-}`#Qx8nN!H!m)(K;MqNQ_2#C*3{#DR#yRix?e5W?~bKtTS#{c>H0OI znX{Lg$q60fl*sVtCUVivO`8b47!(~&|BFM!KT3QrmmU5uG|sX?^)uyBXcJ#zK7T)V zTn6Kb+gr1aLyvW>xs0UiC#d)5CiV&&*X|IiP?LaDiX@BNrS{F2o5efUuJG% z+b>8=o5S_R^^;9jqo`{B4)#|cNY8DijkNosJ9Ue zO+7RRp)vQKJ&n=kW)d}HUkfw`pxNWn3BOGO9T@H?hLt)4cKDepxWJYUA>KOd9@1%O zP0QP4j-kVtQxWqqS0d%+q=R1$=KgxOc2JRxQz>PseT4H^%3{WNSMTrwy{&qn_1BAZFe|+<{#6D>E5^pu-`nCSM@$HGud^6xM`rPbCo@w4OXje|mAT*)i z8Z&0GL(`*7yjYB)7{)9#erW)+dpvGBvFdQjyO^f*hJ|qN4skPlBB0sCS#2;B#;Jut zJz=O8rq)NI8d@K0`7-@!Q+oXv?c2FkT10yeu~Z62yn4_~e@gnO(m6sp2mi`+v<4gf z71o;{IVmrTyU?ERNymtL=T72!{RVuyr`kaJwWME0UICjBhKwuK_cWHb6V^mnwC`~) z?lk762bU&j4??>H+E%3#-yf1!`LkckyoozWotklP1og4mlWi%Pc2hgLBE(N=3R6*lzc(D%Fy`X=aukEYkAap_0pVKzaZ zgkJs4x0AUS#hl3YpT1)o%~sjRwENV3#H}E1bu=#Gx6v4pC4znb_iM}_#JR=ANw@V4 z{UU~~YxG5Dq?&Gd(pisfAl-GOyL8}nT^TD&@l4sW!sgO_>g*1tXUftP^ZaN{1O|Ve zbq*sh&J03Hm>t)7ZGt1#7Ru8@d7AD+#^q$?39o%po@*k>^A@5_&*mH_{W%V)nsj-t z%#1+(yRj?2&iC2e+xN|wGPpCy6dVlq*1cUG!T@6cMoFW+EN(PQq|k?zF#_wVLU!AU zX`4Z%QfHrfk1H6TNpz+6T7EM6RBT4pOC8j=#(o2S`p0_v?!p}zU!v#Rb-bBkA24CX zh=aA5j%~9G$)lSjv7YqSlirsy(~I)d>TY;R>5bzt#d=<7Av@Aqg6$^l9@0KPrp^7C zY@=uTv*?%RBFpLLAf(Yt0`T4GM{)X~wOJp_@rZ=UH5b=)aG&zytPdHtZQG>xc zgJNOv5>!Hy2#WtE7zY^Z;Mib^eRc3=6Nmipq6nthXKz&#nszMvCi{a2diy>`wX*Bw z_i4@424;GO*n73~fA*{6B&HT^&bW5WAfDYT%gLgR{L0DC^W4(BP0ay*=Q62)JVT%M z*{g_qkhrUf`-YQz^Beqo6*~2)@SolOzvDKR;*9Eahk-|0yRtj7k$+E;cip3`A3y2F zZ=+Z2TCo7C3NAOxNV7Ly4b2j0jP5bwG-6x9Z35?cWie}F^Xyo5#yU11X zpVGgG?);B@I>^V|Z;oFZjItL+xvpT(FyO>4q{`WwvZ{gwF<8Biss9E-|2Z!ykT11a5X0tFb0G^Ei%H+M>LH&b)?fyIuE&YV(MGQ z+O_}ZsbaIzuZ?Yg-bR{*pE@ajLF-PZPRCwHi93U+EYLAb_II3I5T}GfI;m@^!^r>S zyo0>`S}fYeNV>9@)GB+jR^MKLp$Zkak;V8#a*cS=k&+ zaBbkcj#<&|0=EsE*q|5J6Br z2USw*VArmP@7u~lKrJ~}L;|IjIr|?tzToDFCKAOm??ZnOBo`;RMYSFYcZ<|Jz*1Er z0)+hyUU|-fb~3b5sWO>xQ;x;~h;IacF+|)DAmTcB(CdkyNNY&k`jw&4bi&FYjg|hB zYM0eyVu@-RGp5a4>4-v^&vmiX4jwl%D<#p{?^gW;@;;wQx4n3w4d9x<(V?EzW{Uq$#O(Qy0BIp;B4CNO)4DFsQww?VrNTC*p2X=zRGrBc)2aVc_gFn^K1Yo$Y$e}sR4R&0lK8( zgU|;9?-)(LA;@pr`7i`s~3X59*VC+H)U464^r-3l-tNqaPv0OB&iSYH$!aU!$y@ly%tWdSmr&yY*SkjWI<+q2KL>&24qo zp#;xzORa`F%XWp^YVP)p{tn|Qd3@qz?Lp()Z5b=2)n;=iMxB<<*`GoEI4xDvTs)T7 z6QK3$#mr{W|8YC{ANo8pR42)wYa(_*ZpA=D-kwhtj#1dyQ+b58+z3`^1A1G`=a@La z=a`)F30VK9zmDCp(g#SAGK-JDWH0-hFQjFz%viY0v6zj5e8c^yR<|^=%vxADhDeh5 z+larH`04wLSMkrxo2F%qrZ%mYJE1ua%`V*HTSouiXhDtqk*5~i=H<;`il}^rPqJQa z@9on#k-7FkS~XnYh<`uK%Be-dcJj&lB7I!>V1(NPF37?i1ou4U@pN0D>j8HhT;)mnj#fw6ofKsz z$S~8R8Cs&spsbcVFB7Ig!*)2UQyg8RVCVrF1+o`hye=D)5eu%(lylQ}S?^Gv&xPfj zkiBLpLp@k}1Yo?2+m}v~s5tBo{!r*qx20k?&odkxL-7Oz(Gb0+n+_mCPQ52&=Hkvj zzQ_9ZKj7U{Ry)3%gWrh-45#Xgqpw`1(&xyefLlb!zW&y)Wy^8W~K`wjU%b0cw> zgUs@)vS7J$P30iWph}g-_bLCEdi!owe6zi39UT|! zI^ZgG1vjX$?8|rw$nuT1l15u3jXR{ikgJC>zqB(=yFWIV%T;Ken|f% zuNf{cGbdf=zP5&XH~*;5jDmL5PPb;pUyDtFs{?n3i=W;vFL5J#IB`ryLG&QqjdHyj zhCIAuquz|YW4N2Pd)-Z>+e*4wvgJ`;U^zE+rWU6z_0M(M1)DwKv+lTUE?ajKjR7(4 z=8pPL$v*lAd0*`6WZDD)LFRAJDX)GpXEO{E#0Y<#wyZC zk;e3XX&3=8ZKnID!4$x!H5`Z<;_V`hYSLKh(un@AuFIHaHF-uKF}Fi6d5~PVvN!TY ziKp1Fk*4SGrR!#8wMd9RXgF(UmC=sx;it@!)heN!&7{AT^v_qB7pRhXK?>(O@Ezc< z5I*{!L{Z4e+LUi%+M|qUdr9LUY0S$`L&w|{d`5BNhI9+UXAs?f*2`b%?fYUl&-UXD z=qxk(xYt6?HSLio-0*pL{A)-lPB0OV;2hLGi)1eb}WnIMIpa4*^GZ|-?)u-Ys`vh$^dsV z;&({A37|@5)y-m55A0FOx_eiekC1NLOQPMw?5C0k*e^rt<$TS5><;c=O1jr}boR(o z3$FDSXy+hE8wn8;%q0rl!~*tSVJtC=wH{eR9&5gqz7vuzPra8-<*&*uPv6;zqj8zQQ{pUp67jNd>dBp77gZ$+IAZLW7f~m)w}e~ zILM4gBH$Zv!-2pqYSM zM!2oux+3XUgWCn}2sl6f#r64lX6tDf1KN$V`t1MTQ@bdS!k@7I{6>0>CR`HSFmV5h zTSmCi;3~4{s=(ENGk0elT|Kzf;I!tDQQT&5o3iNEfZGl3-wYN1CEzA-J>dL!7#-VL zrO;w@38Whs3ZfFjATt+FO6w45<#nX{S2V4r=$25&W+hY1M$ArQEL}p`3eq91vZrYe z(y9n$7yFHu@J>GnzfcOFy-sKG57CH&tn3EtChTUoj&1N5Eh98r=khFrxBOQzN~L>x zNzA94!rA|Nc$t=4+3ZpiM{-KU?KMo-f}a5QQtVijNGZ<-SBGEpDzR9>YO`Sn**|=< zx33Ym{#(&DyUx!@b{frUf8=T-ZKkvuNoxyf)yAa7->(0PA%>f%#dI_A+evFDX{~l? z#q@b*dR^w{5)P7%XdmT#&D>JaF^-k;h`SFLKA#rlw^*K1=}+mO4@zolQCBkJ#VC1|RGcryFZ652$Bk^c&--k2vh_3fWv5!WtF4|H# z_gNSbubEUla*Da`hNzABJK2+K1#KtZ$Px0WCXWY{N1SY9?n?d*8HGc$yp=&3`7`D> z;`SSB6Z48o!uJ8DBMcWAakX0thhO%9q}5D1-K3Lql6mrWHwi|+1PsCAv9rv)rejL3 zrCDACGdAMNs&SMW{wsMMB(L?4_0wmT@!f9qUnaT|;9F@+qjTKsw$z-Zajg93jQ6{p zP8$5eRfDSs=l8hk?+xIZzI|l9$mOGr46ml5 zi~0LMIirRJW$S42iMDfUnt1`v3cG1rBI*0+7aLy?&nV{Vfdu26l-$Q6Z=}tMxTkwJ za($OaBG|LuLzJ&^4?0Q0F+2SpwdV=vUK8`NdAo}DOb{!miafKj6bak8UY=Iswo@bG z(MCp~_8Hpa+r53i4BI_DM>yFBE``<3Ht~=Io=YMNi|Z;vvEjItT?IFPB>c*4CQ4+>fwCcG zZp!H#x0z>P5R|^s5OFbqS92^4cLVC{3^k%Qo@ehIyyt^#HVN6cXsF|*{o>PPnoIJ3 z!T9@q^tp%Mj4gTQ8EIMWLq^Mic@1f-9nbyQMUlX!=CUSCbA&}b=CUBOEI>X>Bp~9*mluUp2D8mum9i&$kNh0^NASQzF86qZh z1T~yJ=n+;%-5inH3~N=s`*NI5W#dW3%sf$SZ4nj3pJPjF5mQ`=(Po*ZP%#%czt4Uu z>04r(`=m&IGac<@5>sg|$w~|L%iU-bJwlOf`z(pLFC|P>srDr~5Q(jpy@|lN1YUys zV#3r)KA|g%51En*R|U;1XlSTIG*mb1z9U$h<0ZKD1+u@$OhtGwlB4R5HrFGp0(-EB zSi^O*hO@CRC9uX3`^x6tGL%pi=u&3QbUl@jZy1HjpWQIoe*V+8$TcoW6;GM_uW%V| z-^ozA8($}N0reaaPQg7P5~(^;)q29J3GOD6TKK(eQfrYLhf)Vn3fa|Dv)t|y5WO$a9NhXwDvi=mvuA%? z^P&=z1O;geik4G>qT+KS{qgm2G! zBIx5PN7YcJkE@|-F~MX^Lch-{_LVLtUybZ)H4xcncr~=XC#vbL!LJ_X<7&)Q4^ubS zf5i`g`iPAG>Gqu-ar1YzUr_+iWs+N%Np5GtAhGV* z2JQiG{b4)6L;Dl_wFY; zo3g0PJ7ZhPFGYUaRpGe#k;O797})e>?e*f9l`OEs*C|+X&(^}*?GL#p#9>pvnolVR zT4>v{-@?D49Lw`E%3;>JW^JeYvNv!=c2e|qD>q&zf}?%uXr1)-jvNNoy&$Y-8g6ti z^7rUKp2^~MeU`Q59s>4~S|^=qFR66WCAlx_F5xPHDE?}4(gj`R#4SWa>l2&;PPwC- zk^h=?E3GStQ|Z!ExNu%4yGk0Z$yG5eqjyC2@-OaW2uSC^T+qMLs%IsHDzeXNPQ+dB z!lT)GT6+mtI#{AXsLHG|6Q zBM%yrgHNjH6`~u_{_8~>XdnR(TW`hG=kTfA7D>OxxmC}G2%bAc>BzZ9U5IZLrFa84 z-Oi5Uu8yYgkn0h?D)R{RMW7pN$(jEx_+gE}+pd*hrTrk6k$va4!k96U;4cz9f zyy~!l>$sb^7PXmuLmMN0E3DN`;L?7sNm)-Vfrwsj<`S=^j2Abqf?@&`C^u&7VBJcW z710JV*@R6eJ|RLdHG-dpyMjdEl<}9c@hV*S93}Sd2=R31u2;ZUU6m#|Boc?DvVlU| zoK-XxXDWUb)mK}&D@Pla&bSKl`lT`G9)Rn$u zG+;&^w?=mOY#7bi$MD~C|EjmQZ%8<&rt9kV)e?tcFNd~5`_>un=)#w>dqX6-aIn8) zw(qyUs&ag!7V@Y%k=gDWz*T_rau#E0_pRV+!1;6PC_k1HLjI_ing=_bPM^o3JlHk* zcEoQcKH^aW&7U=N2)A+Oe_0!4Yw&D?-)?V=X=XNydqM&}-Xy>GrzLYce2CFO)%+a% z+rPjYp%??qg?%PS zlE((}I7%Lu;#M2ok()b_lH^Ts!bRdM?u4eS&&j!E@#hWS(6hQdOYsulaQ0RM6M2RT z2`%ill5XNC=QE_cKjfA5>+>mkM+Jwu;mucW(ptS*^E}>qp{urMz_Bmm(rZ32)JNsH zX`AHa;+o0mRCEzJOSWl+;nr*Tt-C1e-kcMm?7VoMo#6I>^XK>Oe4rwtbJYDkXPUp~ zWyNKjzuNYPO=FdG@?EBSq~k6}89Y7YQ~pQ(NVzBa@&<0FvTIEaq{=LyOlf(eNlxG0 z>McbHO`K$$1f0YxQaR{ERg8Vn{LLL4(#z6?6~EG*=CkJ6T+Svq14JOMe`Mb11<56# z`0|*sf7CJLod%ug<67!K|6TD4Ezgf%U3N2nei&~sFRKhIP6`vuur9R{;ec~{v0h@g zOv##X6taoId<{903@D3TN<9X;hx{OJb3`5-twT6j_f&*R#)libn;9>${goD*+ znU1R>Zq0qe{>1s?;1l+pVEiMoqriAZxn*Svy%=8btRx%^6krvX~Lmjj!Xm7=> z|8R7?xi%7o*CrXN*p3*Taf$IJh;ubNj*p8DK;~|hc$M2pyOFf-k4by!OHMmO$aD%9 zAk+28Dimi5p$?`a%!Q+mb03}jcMrC8>vsmn+aPRj*0UIDg^MS+4r~1!G_oFSMe3o2 z`DPt%i|5dih0J;uIIa9$T40i_VG*yV!qQ4Y+6_wLmQzd0H6E{~>pld-G#ui)dTO)4HW+}F<&J5yn z+8f57Mw+~9VVXtNQ<~FVT)7uT+*dib(vQ}I@im>XNok5Jks4nOsTit>cl%U@*N5WIekwUv*MfD1h81@hqNASA zMux0LKjbis*s}|*c33EJ#&WCFv1oL&=PfuGh&Tu#NyaFfHq=WZ?^AQKfi4&_LC#(E z|1;~g(@*rhC#L?6pVOJM2-RDYQN1+@UXgbDahp%cFdl&7AbfJD;!;_YJJbW&(M8z=^FH5oQ`AOCDtWRHgqVGd7eFT-M2s(OE z-V!V6Y9u()ZoMb)Vl*tzGWwUU2PkEY*L%pnnfza;{4wf72f?iecM)ZbU28Jt=Ds(k z4{?FEi73PWLi{sM41D*7_zPpAqd6}Ii=5@SA#!B&D1FQl{H^)ezsPj3iEazmKWpKE-&;8H4-Wq)3!9&}@X!kucI2LJvZxmReZa zY~ij|7H+%E!VT}XaLFAOHm|jC@B1w*y~o0`54!LVS=e^3g*6|xu+zc%P1b+pqZW>S zz`{|Vv~bIV7S?>$!o=q+T;gEo!`5H5!@^bv4>*{5#Nzktv~c&=EnMGWVcw$_=09d( zmxGD#SpO~uegDgbGeL+_`;l$GKRwukU4UCh^Dp%E^*x3E5LSF)ZKDarIv{ zvd>p1zWt#_KC2`C*#Jv-@(wF(!A)DuX+*_!-cme7I=lsIv)rkAZ zFKsz-2HSs<&U@DXvgJ}=xCnY>pg!;};avtDnkCHpre8Vo|wiz`3M0nGif?pZDY7hjU+M}Y7Bi-sz?1y!8IcIqyl{HZirt9ajC}xm_SuPGEAaE!vHz3^wgYeNDh|E^y!O9} zgASm~(wsz~_i^U%ii~uq+>lHdxEiQ_)8gPdp#Dqi9lRH)cpn8Ofgg8p3()jIa5C+$ zNto7Y{cvIMujHQtu6a{oaN?YV`POa!UKs3ty>)kOC=AYoUVR`1{%PtU`Y!0_xpX=| zTNs?{XlgbV2JdkArW)|*^xIg0jC(C6w->-W8S-}s0$KQWe@Dy+) z{s~{FZvapG=R{BjJOF+a@M&Nv@Mpm1p??Ngi2n)tPd@Mv{siz>z$)NxfHlBpffc|W zU=#33`a~V@5BO_=$AAsMUSK2eJB$_ez~}KV0hS#q4wAq={HuYvZ%PEKfS=+2c$9Js z#y<@Ig2!kdU_Sm8z$YnJ58(y)*WfP(rhpTIL@*Xu_2xv--AcdY|Fs$}-&gQY{BUvb zHDCw!F|5*h9C+m)P7l5XoJ{z&M@|o3pbmTSe-AsJb{b3GKfwJI_JAy9eKE7@s2zWX z{nl`|f&(A4eRR`rtp6G3U+?_Ccm7uAf6YM~KhMSg>OBf%=XW>%R+nd(Bp+Upo zp}|nfrg1rH-bvhvQ3UQu;IvMSni=4lq6plVf~(5HZDOpGS@lp!kR)H3?p+pFK^@x$ zSzIG=WmJD}G|p>19yRX~KEZpPZWb#}ekX!vqM*S+`+TeT8H5+XDNBu|Zim3Vi&uv`c z{I~oGakbWXx#lwd(|cTBz8`nHYlnw%w=~)|`3CMa&iw@LGUxt2?!7MV)412UZ`X}` z1>aky2lw`?&I-D&92)fEZg=in{`cFQy8!oA=Ptp$#ktSH-R9gQaBp_*3vh36>5s>q zKmV+tgY>I$7vh$gjk|8HbzgzI-IaNf-0r`318$8o&BVP8cdesei+dOUWtk7)?&5za zvq|(W-v@Cw@jsQ>fxE`V{RZwJ*V2C*_g>eYPvPF>++DbLI`?mJZzjze%5WTaC*_gJ z<-6Lw5R~EWbm^4i-jHMIC*y8)?lbw{@1)(@h+7A~X^y3t zhdbfg>L%P(O%}ffcV1xKt+)@lGJFJg{bz029>Cq`+VhLJJ6v1s!d*fi?;)=zar?3B zY1|sqWDeur;^G>_i~L+(k_ftPDhlQSYYr6!*8&s&RTSI?Y&lRAtOvIJxG1>pRnYym zDEKJ;*1L*=4%Rwt?=1?dSi`h-6$PIYU0!kUD6s75qF|rsT8o0;2!5g{cmde)yP}|& z@i};|D0nTf1$YrK^-NJP3D`wCUm(4PHHAT~=Bt`Z&aCSc9oMZwLKqvdc>a5w(u zXN!XSf$c|%f-j5i&qcu=(fzV0_^I&Z_gi4+&sdKM|MS9N2=Noo6b5GjgI5#>BY~Z5 zMZp+gM{aR25m-a{X8>FOP!uc%Hjw^WU=QtaulzqL3fh33#|ncw=ICbV9}&K+F!-ME z7ZwKVnXgm8c3|fPg~4I)9hCQvqPw#&$Y&m{d0$cRNwv$mqF@;QcIx*n+O-V-75H24 zDhx`24If}_3GAeOtAK5^*FMs1E-wt82etxBhZ7%I3rt;97+k9OqluX`MZmP z3sq0rX*~W;(y0XoeD6kJ8U3k>@UEMSf@S!VJw?Hfsb44G<#y45f1lueMZpJvT_=iy z2Y@Z_r#$#Km#h=VA3>Pt@8I21QUVn#|nZu&Og`rn}Er)3WFO3-@tkrm`D@`_X2x} z{{XQ06@|ezVAl%;!A@XVNn!9PFev8x0~>x{5F7w@(C*#N|0iHG^n>Uxi9v-y0+{-9 zL2x#(;dceW>w&FD3W5s-$!EO7&jxn=p&(f3;8I}Cn+k(lfF10(?*g`v-hIIK*YI6| z4TB4VF9F+56a;dvETjB408=eR!MlOUGt&Eqfrg=vuwU8o zbvt(b5_jtEv&?#JEBmZbxMg)byBU*p`*;oj=f?8Ck9RvY(> z*HKo7e?5Dc&A7ETJQsWyYj~M*+|}K-JXN?$U7E9T?`AzOvjq31o2|Q=wL;3d?*QNa zD;swM?hOvV6?eT$=P}&d9L;{*V;%kvxP3Z*!Cmd*p2i-l&C#EreL8Tf%+;mrZ(Q7e zf~LyRm*H-7_)6Rj&RtA>D;&)g;8PBN9qw}HHkETf%40K(AHjzl{1VW7(Vm<@d*zZl zii5L(%hTC1&GKwsgMg#>Qv7q=jOchn zZ6#*S-wgvut*N`{(gobronzbwHs=Iq;LooPf-?oNf9^BSljg(sTDI=KoB#&UGVz&u zfdBR0oZtj-MRem%*vX9MlCD&KP_rt}j9)E3rzDJ@`fqvD@s3xR|4_?V;7^Locr=Qd zXr64#eMQh*Qy4UyJ2dF}bxF{0gLEXF6|}!FBxpWkDC;)MFX?=w$joOOSaWDRl}TKF zT2QmNz>IUj7fXVknYqDg&FO>4CwFL&d^a`YzpL@QXU5Q=Z4q)p?%Qgt)VSMBJ~e$b zAV%}B=5QI!jV%k$3L1V?5^Uc_+ROm~@mm%m`@%dX)3*Jzpy9myAi)KpRnUyYc24Fz zfO+T$>!B2DnFFk&G#|CT$2MvSb!&Zr4}D}vPErMHc|d|;%IG< z`YGwNM%2242_6{?)|W>q>zOvKU*pkm*tzeFnPIcE0wJb+MZ_XPkcBpXs%{= z_znA?Q+T#1|5!R~4E?qeI|sW6yArz=yAk^!b_e!x?0)QF>@n<+-{%Cc!j8a>!B%4D zU>9LmV%K6fVjslrz&?)Mk3Eb%h8^-8@v$SYW3ZLjIoL(mmDsh|jo1gVJFt&q_hS!Z zk70-Wf%w=F*fH2j>>TVO>`Lrf>_+T^*d5r%vHP)yvB$7OjuIa`0y_p}_y$FM_=6CXPQI|f^cor7J3U5Quw$^5 z*g4om*p=9|*p1i+u{*GjWA|eZV~=5noFG1S1a=Iz5<3UG2)h!y7P}GqAa)1#aqNEV zVeB#NkUtY2I|4ffTZx^6U4&hUU5nj_eGt0?`#5$#_AvGscF6O@$Bw{`!B%4DU>9Lm zV%K6fVjslrz&?)Mk3Eb%h8^-3;$uf($6zb5bFhoBE3s>_8?g^!cVHjK?#CX+9>dD4 zVgDkAynM1DbKW^bt(1=W9QPUkyBuaOtJG?K|WT{OrTzFZ>h5 zMyJEQz!CUIGEZAh4xWe+|2CKW_K^P|p!m0Wz#jky1I269-Jj*GKVJd-I{18G75LMD z)xe>^S-=9|rNBa{eeQwpeirz-r1MH(AN4!~ zI3Irk=*`dg&QD?Wo$V=t59tqGH!+}psKqESl6*+^manl-IWw)WvZy@6mfuH2%_#tr26X@=o52Zv)#h|6-kop$>d>^N){wg!6% zb}sfR>{9Fv*jur8V(-TOJN9GPPhmfYeFXar>=W4UVSj}EIrdlB-(inoU%=)+#kazq zjeRY41ok}aMc9ehi?Nqt8?nozWO$n2U}PH{S1^1t3FzVD_>(lI}poQ(x4W5j9<1uP|qa3itLH^GLQ4|4ZXiwn-l58-qL#=-W;CD6MSs--S~? ziEl=~nyp*&?o6D@*YRi!E{3ip3#U99vT#bT^Xr-EiLNG#&a}g0nRJRonRLRH#o*d^^`~pjY6Iob5|c+Nt4)>1Kt}uLlbPHk>y(ob{1stJTMLsa z{n4pzm#eb&-ud7JWz8Q~n|7J#pUz@l(y!8agD9!6fjZF7{zEGK?`8N{9jd23nk;5- zbbzy{zw57QOP9loefPg>K~5$9|3(YY4`GAxZbq8V5iOYHkJ^vs2X6=2^1hN_-;;I* zyy{1+ACKh+Zv?*z{4)G9*FVjf*PrsuJkt#RsH0y`cxTROW`1n~{~<@e8JHYo@eSZV za_KJ z4f~bW%@)5E{4I`N@(XPbS$rG#I!AvkvSZ>ysyv&(w>$j56EC^b(zk-|cKCHV-}|bi zUkASA`!?Th+B4N*>07{WcKLoDC_bdpUj@F=(Z3EkG4WW{{>|VYcJv>o{K4rK-voZ2 zqc3HRCw{Kz8^9-iVDpt+Uh~MI!8zdTz?V7v*GaF{;cLJ*IQ$df+rcZHD)3Lbe18NK z4_WvW_@6oapT5by&EdU=Q@lcNlp2WzN%gd7H&2z;AHnU;ZfgciQyx!KWPkmB5Ax79W7$>F5^H+j$Zr~kM98A?(pK5c>GTA`TK0T;-7eYJNQu!FaC$eZv|iD@J3FP z0M)Av{3?fk#Fb0Tfuia|4$?Mb>M&H{Kq5s7Vx=0vE?k_99l-{uL9rh z@;#IA_8-{)OEdVh9sOuv&vz}p3H(J4|L_U=^B#+D06)#)B@>!jY`=RQ_->c})!^H2 zwfGwFg-_Y?=-j{U3l?7mzRcmTgFd<4;#1%cIQ&gYf2YNlgI}`Wrt@y_HQ%)5DFeUB z;qQvzM}iOB_-`5^=EpDbw7+^6;qss7U=k>kG{1sL6YjhjpfK0A^KhWj7zNZGc`Q(C zxoV)6ko7=)izPtq?N$S|_uT;0lDf^oJwTn3lnt_QAAT)?yBrL_YmZ#$U<#-`YPEwa zfcj6jIM@MH&)f@C3myQf#N9xhyB!Cbv$nj1IcpmR)JkI{P$!_}z*hmQfI6eA18RBS z1k_%71yFnFH9#%bHvn}uxW&PCpvK4!2loPBga4p|-9YW}k2}~-J(KwJ1}B2o0jq$o z2d)8XPp}EC=ocUIaV{{1@O}p!mf{f#NHdot6mx4cGt_zj-TA{k0320uG}*mjj!C^}tpK zJAqf=FD*ds6jhrG*wY16SkU3cM9~z`>D4iQqQ;Dd6ouZ=P^+ z*xv!F|9=mt{{KUu`u~rB>ii>UsFdsVg{{jck0-8C^!S5bE-Sq#F_|^a40#yIM0I2?dAyEDQ9YCEm|0_`a z|6M@!{|P|#|4Bgg|EWOr|LH*W|CvDbe=mQ28GiNu%i*^PUWs4*f4+kYf$IM=-)#Q} zi}9=fUjzS8P%`dG;I-h@|8E1T|KAN%|NjV3{r^)y_5c3>jsWfgs{cO$RR2E!RR8}C zQ2qZ8K=uE>0M-A|q-Og6PzPV>;Hw=R4pjetgM*I()&DykJP)Y;e>vwD>i=)Uul_#< zsQy0|sQy0=sQ!O8@|x=ZmH5^FtAXnOGlA;=mjl)RF9E9m&jXGHHUriFR|D1m?*YCG zxEYuNJ_J<%|2nW9xW~Z*K=uD;f$IOq9UPit`~O+M2Jo*3s{fzoU<$Yz|HVM{|H~Yl z{yN+Lm*S81f6X6R=3V+9#95A84PO6;xbPhQ2$DlMc&438M6($CQjM1{$cBmWO)OSAho#W;^GYS3`KYo26 z`Nya+@_Qh>Y@rYH>j25M%Sf(Y#^WV77&S%)5rm)jU+((ArzN@Ymu1}gK(d>0M)LYH zUM^Dd)iRQMKADkRxQwr-$wV51Oy}PO+Ek3Zx^o)f%jI!CfA3Es zH!maka08KhHwL+O8Og89`1(j*J!&M6{!)zO$)l#h*V`c_hb|*IbD1!|k7j-+$+yc$ zUR`D&dGqXgOTJ!4^6D~@rtX9%nrNAUjO=;ZJ6yA0W=?PO6OV zy+@75|E*v&ZMmh_K}LE5WTYoS#`}$jpMR8ffv<r}|N8&!ONn!e=2Q!uYJvZm zE#T)z&*%31Qr{ZV=Og3!?4Doh*9X$4Amis_e~$2C=L^z%Bjfq*FZ+A}T?&%1kS+q5 z==p;1(xH%HveyTWA93nj&VIjB?eIUW9Zty~nBn16zyBZB?@!5PWb}LE8Cw{n-c@Mk z(wzWAy^8lEFUuS3@MO^M)Z zSovGJOM>;-bCG|2k~>Z^B_olM$3~50p|3;MS8={QA{{3GqsJtXoM|K@y#ji{n}Ldd zm-DwcxHbYaW83>4>$B)TB> zx0Np{Z@loWZ=bhd(S>8?FL>+xw~j8Ge^L3o3*WwQ;rWdV=ihLZ;!i&7(GLXYU*B~7 zisdWj%@59BymZCF<;}tQOP8%!c>YyOZ#aMc4U3mFp0~Ksp~j7$eBO$AR|O`lY2Nis z!TF6hExrDxYb{){+=i@NxcvIX%a&$%<`TAi;S$kXNAr>u%5X8iIM2Uo8IBbTSMj?D zEHuj+=dG9*oWHPX?xN-Mu3b2{sgWeS&qkd)Z~5|hH`y58tym_f<;zT|=3TpZ0VP?s zLfL>ZiO#?NdQ-Z&rYV*zUV4ph&KHG}R8XJL_uha*R`TfHC`?8;$<2#yD@a+%gL@;{ zVj0PVd%C^Q$R-uwjHi=~_Azv)DZL}m$nKnK`;kaRCo9=&l~Huk?of7|Z|5Tvd zHE!J(5S{eL$x45mPfv8ZXK+1MbmOtoHzzASbfS}7zo(N7xXP-0f*xGhq} z>5`(sI`)vERGWzQJrTM^B;$d3M~FxDg;`~=X`jXoFIee9ZvE)d|;`&@)>=dwf~yN>tuyzz98fY7L@ z5a|yrzmdDNo(L$n>|h>s=j;VWieu>XU-d@ilL^aay}>5Z%a26#&i@S- CX?iCB literal 0 HcmV?d00001 diff --git a/tests32/benchfloat b/tests32/benchfloat new file mode 100755 index 0000000000000000000000000000000000000000..3eb1a9592ada5e803d2cd5357c267152b43f0265 GIT binary patch literal 11776 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 xppC7R>p}^0%=Hg- +#include +#include +#include +#include +#include + +#define DP + +#ifdef SP +#define ZERO 0.0 +#define ONE 1.0 +#define PREC "Single" +#define BASE10DIG FLT_DIG + +typedef float REAL; +#endif + +#ifdef DP +#define ZERO 0.0e0 +#define ONE 1.0e0 +#define PREC "Double" +#define BASE10DIG DBL_DIG + +typedef double REAL; +#endif + +static REAL linpack (long nreps,int arsize); +static void matgen (REAL *a,int lda,int n,REAL *b,REAL *norma); +static void dgefa (REAL *a,int lda,int n,int *ipvt,int *info,int roll); +static void dgesl (REAL *a,int lda,int n,int *ipvt,REAL *b,int job,int roll); +static void daxpy_r (int n,REAL da,REAL *dx,int incx,REAL *dy,int incy); +static REAL ddot_r (int n,REAL *dx,int incx,REAL *dy,int incy); +static void dscal_r (int n,REAL da,REAL *dx,int incx); +static void daxpy_ur (int n,REAL da,REAL *dx,int incx,REAL *dy,int incy); +static REAL ddot_ur (int n,REAL *dx,int incx,REAL *dy,int incy); +static void dscal_ur (int n,REAL da,REAL *dx,int incx); +static int idamax (int n,REAL *dx,int incx); +static REAL second (void); + +static void *mempool; + + +void main(int argc, const char** argv) + + { + char buf[80]; + int arsize; + long arsize2d,memreq,nreps; + size_t malloc_arg; + + if(argc>1) + strcpy(buf, argv[1]); + + while (1) + { + /*printf("Enter array size (q to quit) [200]: "); + fgets(buf,79,stdin);*/ + + if (buf[0]=='q' || buf[0]=='Q') + break; + if (buf[0]=='\0' || buf[0]=='\n') + arsize=200; + else + arsize=atoi(buf); + arsize/=2; + arsize*=2; + if (arsize<10) + { + printf("Too small.\n"); + continue; + } + arsize2d = (long)arsize*(long)arsize; + memreq=arsize2d*sizeof(REAL)+(long)arsize*sizeof(REAL)+(long)arsize*sizeof(int); + printf("Memory required: %ldK.\n",(memreq+512L)>>10); + malloc_arg=(size_t)memreq; + if (malloc_arg!=memreq || (mempool=malloc(malloc_arg))==NULL) + { + printf("Not enough memory available for given array size.\n\n"); + continue; + } + printf("\n\nLINPACK benchmark, %s precision.\n",PREC); + printf("Machine precision: %d digits.\n",BASE10DIG); + printf("Array size %d X %d.\n",arsize,arsize); + printf("Average rolled and unrolled performance:\n\n"); + printf(" Reps Time(s) DGEFA DGESL OVERHEAD KFLOPS\n"); + printf("----------------------------------------------------\n"); + nreps=1; + while (linpack(nreps,arsize)<10.) + nreps*=2; + free(mempool); + printf("\n"); + strcpy(buf, "q"); + } + } + + +static REAL linpack(long nreps,int arsize) + + { + REAL *a,*b; + REAL norma,t1,kflops,tdgesl,tdgefa,totalt,toverhead,ops; + int *ipvt,n,info,lda; + long i,arsize2d; + + lda = arsize; + n = arsize/2; + arsize2d = (long)arsize*(long)arsize; + ops=((2.0*n*n*n)/3.0+2.0*n*n); + a=(REAL *)mempool; + b=a+arsize2d; + ipvt=(int *)&b[arsize]; + tdgesl=0; + tdgefa=0; + totalt=second(); + for (i=0;i *norma) ? a[lda*j+i] : *norma; + } + for (i = 0; i < n; i++) + b[i] = 0.0; + for (j = 0; j < n; j++) + for (i = 0; i < n; i++) + b[i] = b[i] + a[lda*j+i]; + } + + +/* +** +** DGEFA benchmark +** +** We would like to declare a[][lda], but c does not allow it. In this +** function, references to a[i][j] are written a[lda*i+j]. +** +** dgefa factors a double precision matrix by gaussian elimination. +** +** dgefa is usually called by dgeco, but it can be called +** directly with a saving in time if rcond is not needed. +** (time for dgeco) = (1 + 9/n)*(time for dgefa) . +** +** on entry +** +** a REAL precision[n][lda] +** the matrix to be factored. +** +** lda integer +** the leading dimension of the array a . +** +** n integer +** the order of the matrix a . +** +** on return +** +** a an upper triangular matrix and the multipliers +** which were used to obtain it. +** the factorization can be written a = l*u where +** l is a product of permutation and unit lower +** triangular matrices and u is upper triangular. +** +** ipvt integer[n] +** an integer vector of pivot indices. +** +** info integer +** = 0 normal value. +** = k if u[k][k] .eq. 0.0 . this is not an error +** condition for this subroutine, but it does +** indicate that dgesl or dgedi will divide by zero +** if called. use rcond in dgeco for a reliable +** indication of singularity. +** +** linpack. this version dated 08/14/78 . +** cleve moler, university of New Mexico, argonne national lab. +** +** functions +** +** blas daxpy,dscal,idamax +** +*/ +static void dgefa(REAL *a,int lda,int n,int *ipvt,int *info,int roll) + + { + REAL t; + int idamax(),j,k,kp1,l,nm1; + + /* gaussian elimination with partial pivoting */ + + if (roll) + { + *info = 0; + nm1 = n - 1; + if (nm1 >= 0) + for (k = 0; k < nm1; k++) + { + kp1 = k + 1; + + /* find l = pivot index */ + + l = idamax(n-k,&a[lda*k+k],1) + k; + ipvt[k] = l; + + /* zero pivot implies this column already + triangularized */ + + if (a[lda*k+l] != ZERO) + { + + /* interchange if necessary */ + + if (l != k) + { + t = a[lda*k+l]; + a[lda*k+l] = a[lda*k+k]; + a[lda*k+k] = t; + } + + /* compute multipliers */ + + t = -ONE/a[lda*k+k]; + dscal_r(n-(k+1),t,&a[lda*k+k+1],1); + + /* row elimination with column indexing */ + + for (j = kp1; j < n; j++) + { + t = a[lda*j+l]; + if (l != k) + { + a[lda*j+l] = a[lda*j+k]; + a[lda*j+k] = t; + } + daxpy_r(n-(k+1),t,&a[lda*k+k+1],1,&a[lda*j+k+1],1); + } + } + else + (*info) = k; + } + ipvt[n-1] = n-1; + if (a[lda*(n-1)+(n-1)] == ZERO) + (*info) = n-1; + } + else + { + *info = 0; + nm1 = n - 1; + if (nm1 >= 0) + for (k = 0; k < nm1; k++) + { + kp1 = k + 1; + + /* find l = pivot index */ + + l = idamax(n-k,&a[lda*k+k],1) + k; + ipvt[k] = l; + + /* zero pivot implies this column already + triangularized */ + + if (a[lda*k+l] != ZERO) + { + + /* interchange if necessary */ + + if (l != k) + { + t = a[lda*k+l]; + a[lda*k+l] = a[lda*k+k]; + a[lda*k+k] = t; + } + + /* compute multipliers */ + + t = -ONE/a[lda*k+k]; + dscal_ur(n-(k+1),t,&a[lda*k+k+1],1); + + /* row elimination with column indexing */ + + for (j = kp1; j < n; j++) + { + t = a[lda*j+l]; + if (l != k) + { + a[lda*j+l] = a[lda*j+k]; + a[lda*j+k] = t; + } + daxpy_ur(n-(k+1),t,&a[lda*k+k+1],1,&a[lda*j+k+1],1); + } + } + else + (*info) = k; + } + ipvt[n-1] = n-1; + if (a[lda*(n-1)+(n-1)] == ZERO) + (*info) = n-1; + } + } + + +/* +** +** DGESL benchmark +** +** We would like to declare a[][lda], but c does not allow it. In this +** function, references to a[i][j] are written a[lda*i+j]. +** +** dgesl solves the double precision system +** a * x = b or trans(a) * x = b +** using the factors computed by dgeco or dgefa. +** +** on entry +** +** a double precision[n][lda] +** the output from dgeco or dgefa. +** +** lda integer +** the leading dimension of the array a . +** +** n integer +** the order of the matrix a . +** +** ipvt integer[n] +** the pivot vector from dgeco or dgefa. +** +** b double precision[n] +** the right hand side vector. +** +** job integer +** = 0 to solve a*x = b , +** = nonzero to solve trans(a)*x = b where +** trans(a) is the transpose. +** +** on return +** +** b the solution vector x . +** +** error condition +** +** a division by zero will occur if the input factor contains a +** zero on the diagonal. technically this indicates singularity +** but it is often caused by improper arguments or improper +** setting of lda . it will not occur if the subroutines are +** called correctly and if dgeco has set rcond .gt. 0.0 +** or dgefa has set info .eq. 0 . +** +** to compute inverse(a) * c where c is a matrix +** with p columns +** dgeco(a,lda,n,ipvt,rcond,z) +** if (!rcond is too small){ +** for (j=0,j= 1) + for (k = 0; k < nm1; k++) + { + l = ipvt[k]; + t = b[l]; + if (l != k) + { + b[l] = b[k]; + b[k] = t; + } + daxpy_r(n-(k+1),t,&a[lda*k+k+1],1,&b[k+1],1); + } + + /* now solve u*x = y */ + + for (kb = 0; kb < n; kb++) + { + k = n - (kb + 1); + b[k] = b[k]/a[lda*k+k]; + t = -b[k]; + daxpy_r(k,t,&a[lda*k+0],1,&b[0],1); + } + } + else + { + + /* job = nonzero, solve trans(a) * x = b */ + /* first solve trans(u)*y = b */ + + for (k = 0; k < n; k++) + { + t = ddot_r(k,&a[lda*k+0],1,&b[0],1); + b[k] = (b[k] - t)/a[lda*k+k]; + } + + /* now solve trans(l)*x = y */ + + if (nm1 >= 1) + for (kb = 1; kb < nm1; kb++) + { + k = n - (kb+1); + b[k] = b[k] + ddot_r(n-(k+1),&a[lda*k+k+1],1,&b[k+1],1); + l = ipvt[k]; + if (l != k) + { + t = b[l]; + b[l] = b[k]; + b[k] = t; + } + } + } + } + else + { + nm1 = n - 1; + if (job == 0) + { + + /* job = 0 , solve a * x = b */ + /* first solve l*y = b */ + + if (nm1 >= 1) + for (k = 0; k < nm1; k++) + { + l = ipvt[k]; + t = b[l]; + if (l != k) + { + b[l] = b[k]; + b[k] = t; + } + daxpy_ur(n-(k+1),t,&a[lda*k+k+1],1,&b[k+1],1); + } + + /* now solve u*x = y */ + + for (kb = 0; kb < n; kb++) + { + k = n - (kb + 1); + b[k] = b[k]/a[lda*k+k]; + t = -b[k]; + daxpy_ur(k,t,&a[lda*k+0],1,&b[0],1); + } + } + else + { + + /* job = nonzero, solve trans(a) * x = b */ + /* first solve trans(u)*y = b */ + + for (k = 0; k < n; k++) + { + t = ddot_ur(k,&a[lda*k+0],1,&b[0],1); + b[k] = (b[k] - t)/a[lda*k+k]; + } + + /* now solve trans(l)*x = y */ + + if (nm1 >= 1) + for (kb = 1; kb < nm1; kb++) + { + k = n - (kb+1); + b[k] = b[k] + ddot_ur(n-(k+1),&a[lda*k+k+1],1,&b[k+1],1); + l = ipvt[k]; + if (l != k) + { + t = b[l]; + b[l] = b[k]; + b[k] = t; + } + } + } + } + } + + + +/* +** Constant times a vector plus a vector. +** Jack Dongarra, linpack, 3/11/78. +** ROLLED version +*/ +static void daxpy_r(int n,REAL da,REAL *dx,int incx,REAL *dy,int incy) + + { + int i,ix,iy; + + if (n <= 0) + return; + if (da == ZERO) + return; + + if (incx != 1 || incy != 1) + { + + /* code for unequal increments or equal increments != 1 */ + + ix = 1; + iy = 1; + if(incx < 0) ix = (-n+1)*incx + 1; + if(incy < 0)iy = (-n+1)*incy + 1; + for (i = 0;i < n; i++) + { + dy[iy] = dy[iy] + da*dx[ix]; + ix = ix + incx; + iy = iy + incy; + } + return; + } + + /* code for both increments equal to 1 */ + + for (i = 0;i < n; i++) + dy[i] = dy[i] + da*dx[i]; + } + + +/* +** Forms the dot product of two vectors. +** Jack Dongarra, linpack, 3/11/78. +** ROLLED version +*/ +static REAL ddot_r(int n,REAL *dx,int incx,REAL *dy,int incy) + + { + REAL dtemp; + int i,ix,iy; + + dtemp = ZERO; + + if (n <= 0) + return(ZERO); + + if (incx != 1 || incy != 1) + { + + /* code for unequal increments or equal increments != 1 */ + + ix = 0; + iy = 0; + if (incx < 0) ix = (-n+1)*incx; + if (incy < 0) iy = (-n+1)*incy; + for (i = 0;i < n; i++) + { + dtemp = dtemp + dx[ix]*dy[iy]; + ix = ix + incx; + iy = iy + incy; + } + return(dtemp); + } + + /* code for both increments equal to 1 */ + + for (i=0;i < n; i++) + dtemp = dtemp + dx[i]*dy[i]; + return(dtemp); + } + + +/* +** Scales a vector by a constant. +** Jack Dongarra, linpack, 3/11/78. +** ROLLED version +*/ +static void dscal_r(int n,REAL da,REAL *dx,int incx) + + { + int i,nincx; + + if (n <= 0) + return; + if (incx != 1) + { + + /* code for increment not equal to 1 */ + + nincx = n*incx; + for (i = 0; i < nincx; i = i + incx) + dx[i] = da*dx[i]; + return; + } + + /* code for increment equal to 1 */ + + for (i = 0; i < n; i++) + dx[i] = da*dx[i]; + } + + +/* +** constant times a vector plus a vector. +** Jack Dongarra, linpack, 3/11/78. +** UNROLLED version +*/ +static void daxpy_ur(int n,REAL da,REAL *dx,int incx,REAL *dy,int incy) + + { + int i,ix,iy,m; + + if (n <= 0) + return; + if (da == ZERO) + return; + + if (incx != 1 || incy != 1) + { + + /* code for unequal increments or equal increments != 1 */ + + ix = 1; + iy = 1; + if(incx < 0) ix = (-n+1)*incx + 1; + if(incy < 0)iy = (-n+1)*incy + 1; + for (i = 0;i < n; i++) + { + dy[iy] = dy[iy] + da*dx[ix]; + ix = ix + incx; + iy = iy + incy; + } + return; + } + + /* code for both increments equal to 1 */ + + m = n % 4; + if ( m != 0) + { + for (i = 0; i < m; i++) + dy[i] = dy[i] + da*dx[i]; + if (n < 4) + return; + } + for (i = m; i < n; i = i + 4) + { + dy[i] = dy[i] + da*dx[i]; + dy[i+1] = dy[i+1] + da*dx[i+1]; + dy[i+2] = dy[i+2] + da*dx[i+2]; + dy[i+3] = dy[i+3] + da*dx[i+3]; + } + } + + +/* +** Forms the dot product of two vectors. +** Jack Dongarra, linpack, 3/11/78. +** UNROLLED version +*/ +static REAL ddot_ur(int n,REAL *dx,int incx,REAL *dy,int incy) + + { + REAL dtemp; + int i,ix,iy,m; + + dtemp = ZERO; + + if (n <= 0) + return(ZERO); + + if (incx != 1 || incy != 1) + { + + /* code for unequal increments or equal increments != 1 */ + + ix = 0; + iy = 0; + if (incx < 0) ix = (-n+1)*incx; + if (incy < 0) iy = (-n+1)*incy; + for (i = 0;i < n; i++) + { + dtemp = dtemp + dx[ix]*dy[iy]; + ix = ix + incx; + iy = iy + incy; + } + return(dtemp); + } + + /* code for both increments equal to 1 */ + + m = n % 5; + if (m != 0) + { + for (i = 0; i < m; i++) + dtemp = dtemp + dx[i]*dy[i]; + if (n < 5) + return(dtemp); + } + for (i = m; i < n; i = i + 5) + { + dtemp = dtemp + dx[i]*dy[i] + + dx[i+1]*dy[i+1] + dx[i+2]*dy[i+2] + + dx[i+3]*dy[i+3] + dx[i+4]*dy[i+4]; + } + return(dtemp); + } + + +/* +** Scales a vector by a constant. +** Jack Dongarra, linpack, 3/11/78. +** UNROLLED version +*/ +static void dscal_ur(int n,REAL da,REAL *dx,int incx) + + { + int i,m,nincx; + + if (n <= 0) + return; + if (incx != 1) + { + + /* code for increment not equal to 1 */ + + nincx = n*incx; + for (i = 0; i < nincx; i = i + incx) + dx[i] = da*dx[i]; + return; + } + + /* code for increment equal to 1 */ + + m = n % 5; + if (m != 0) + { + for (i = 0; i < m; i++) + dx[i] = da*dx[i]; + if (n < 5) + return; + } + for (i = m; i < n; i = i + 5) + { + dx[i] = da*dx[i]; + dx[i+1] = da*dx[i+1]; + dx[i+2] = da*dx[i+2]; + dx[i+3] = da*dx[i+3]; + dx[i+4] = da*dx[i+4]; + } + } + + +/* +** Finds the index of element having max. absolute value. +** Jack Dongarra, linpack, 3/11/78. +*/ +static int idamax(int n,REAL *dx,int incx) + + { + REAL dmax; + int i, ix, itemp; + + if (n < 1) + return(-1); + if (n ==1 ) + return(0); + if(incx != 1) + { + + /* code for increment not equal to 1 */ + + ix = 1; + dmax = fabs((double)dx[0]); + ix = ix + incx; + for (i = 1; i < n; i++) + { + if(fabs((double)dx[ix]) > dmax) + { + itemp = i; + dmax = fabs((double)dx[ix]); + } + ix = ix + incx; + } + } + else + { + + /* code for increment equal to 1 */ + + itemp = 0; + dmax = fabs((double)dx[0]); + for (i = 1; i < n; i++) + if(fabs((double)dx[i]) > dmax) + { + itemp = i; + dmax = fabs((double)dx[i]); + } + } + return (itemp); + } + + +static REAL second(void) + + { + return ((REAL)((REAL)clock()/(REAL)CLOCKS_PER_SEC)); + } + + diff --git a/tests32/extensions/mmx b/tests32/extensions/mmx new file mode 100755 index 0000000000000000000000000000000000000000..65b6653290bfbf992f43266f338588fa57b11d14 GIT binary patch literal 287144 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 literal 0 HcmV?d00001 diff --git a/tests32/extensions/mmx.c b/tests32/extensions/mmx.c new file mode 100644 index 00000000..a43f9759 --- /dev/null +++ b/tests32/extensions/mmx.c @@ -0,0 +1,674 @@ +#include +#include +#include +#include +#include +#include + + + +typedef uint8_t u8; +typedef int8_t i8; +typedef uint16_t u16; +typedef int16_t i16; +typedef uint32_t u32; +typedef int32_t i32; +typedef uint64_t u64; +typedef int64_t i64; + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + +#define I8_MAX 0x7F +#define I8_MIN -0x80 +#define U8_MAX 0xFF +#define U8_MIN 0 + +#define I16_MAX 0x7FFF +#define I16_MIN -0x8000 +#define U16_MAX 0xFFFF +#define U16_MIN 0 + +#define I32_MAX 0x7FFFFFFF +#define I32_MIN -0x80000000 +#define U32_MAX 0xFFFFFFFF +#define U32_MIN 0 + +#define I64_MAX 0x7FFFFFFFFFFFFFFF +#define I64_MIN -0x8000000000000000 +#define U64_MAX 0xFFFFFFFFFFFFFFFF +#define U64_MIN 0 + +#define MMX_TEST_STRUCT(sz) \ + typedef struct mmx_##sz##_test { \ + sz a; \ + sz b; \ + sz result; \ + } mmx_##sz##_test_t + +MMX_TEST_STRUCT(u8); +MMX_TEST_STRUCT(i8); +MMX_TEST_STRUCT(u16); +MMX_TEST_STRUCT(i16); +MMX_TEST_STRUCT(u32); +MMX_TEST_STRUCT(i32); +MMX_TEST_STRUCT(u64); +MMX_TEST_STRUCT(i64); + +// Binary compare two mm registers +bool mm_raw_compare(__m64 a, __m64 b) { + __m64 a_upper_reg = _mm_srli_si64(a, 32); + __m64 b_upper_reg = _mm_srli_si64(b, 32); + + int a_lower = _m_to_int(a); + int a_upper = _m_to_int(a_upper_reg); + + int b_lower = _m_to_int(b); + int b_upper = _m_to_int(b_upper_reg); + + return (a_lower == b_lower) && (a_upper == b_upper); +} + +// Load a 64 bit value into a mm register +__m64 mm_load64(u64 val) { + __m64 lower = _m_from_int(val & 0xFFFFFFFF); + __m64 upper = _m_from_int((val >> 32) & 0xFFFFFFFF); + + __m64 shifted = _mm_slli_si64(upper, 32); + __m64 final = _m_por(shifted, lower); + + return final; +} + +#define MMX_ARITH_TEST(name, testcases, testcase_type, type, size, testfunc) \ +bool name() { \ + printf("TEST: " #name "\n"); \ + int errors = 0; \ +\ + for (size_t i = 0; i < ARRAY_SIZE(testcases); i++ ) { \ + testcase_type test_data = testcases[i]; \ +\ + __m64 a = _mm_set1_pi##size(test_data.a); \ + __m64 b = _mm_set1_pi##size(test_data.b); \ + __m64 expected = _mm_set1_pi##size(test_data.result); \ + __m64 result = testfunc(a, b); \ +\ + bool success = mm_raw_compare(expected, result); \ + errors += (int) (!success); \ + } \ +\ + _m_empty(); \ + printf("TEST: finished with: %d errors\n", errors); \ + return errors; \ +} + +#define MMX_SHIFT_TEST(name, testcases, testfunc) \ +bool name() { \ + printf("TEST: " #name "\n"); \ + int errors = 0; \ +\ + for (size_t i = 0; i < ARRAY_SIZE(testcases); i++ ) { \ + mmx_u64_test_t test_data = testcases[i]; \ +\ + __m64 a = mm_load64(test_data.a); \ + __m64 expected = mm_load64(test_data.result); \ + __m64 result = testfunc(a, test_data.b); \ +\ + bool success = mm_raw_compare(expected, result); \ + if (!success) { \ + printf( \ + "Failed; Expected: 0x%08x_%08x\tGot: 0x%08x_%08x\n", \ + _m_to_int(_mm_srli_si64(expected, 32)), \ + _m_to_int(expected), \ + _m_to_int(_mm_srli_si64(result, 32)), \ + _m_to_int(result) \ + ); \ + } \ + errors += (int) (!success); \ + } \ +\ + _m_empty(); \ + printf("TEST: finished with: %d errors\n", errors); \ + return errors; \ +} + + + +// Loads 2 64 bit immediates and compares with the third +// Test data must be of type mmx_u64_test_t +#define MMX_64_TEST(name, testcases, testfunc) \ +bool name() { \ + printf("TEST: " #name "\n"); \ + int errors = 0; \ +\ + for (size_t i = 0; i < ARRAY_SIZE(testcases); i++ ) { \ + mmx_u64_test_t test_data = testcases[i]; \ +\ + __m64 a = mm_load64(test_data.a); \ + __m64 b = mm_load64(test_data.b); \ + __m64 expected = mm_load64(test_data.result); \ + __m64 result = testfunc(a, b); \ +\ + bool success = mm_raw_compare(expected, result); \ + if (!success) { \ + printf( \ + "Failed; Expected: 0x%08x_%08x\tGot: 0x%08x_%08x\n", \ + _m_to_int(_mm_srli_si64(expected, 32)), \ + _m_to_int(expected), \ + _m_to_int(_mm_srli_si64(result, 32)), \ + _m_to_int(result) \ + ); \ + } \ + errors += (int) (!success); \ + } \ +\ + _m_empty(); \ + printf("TEST: finished with: %d errors\n", errors); \ + return errors; \ +} + + +mmx_i8_test_t mmx_i8_add_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = I8_MAX, .b = 1, .result = I8_MIN }, + { .a = I8_MIN, .b = -1, .result = I8_MAX }, + { .a = 0, .b = U8_MAX, .result = U8_MAX }, +}; +mmx_i8_test_t mmx_i8_add_sat_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = I8_MAX, .b = 1, .result = I8_MAX }, + { .a = I8_MIN, .b = -1, .result = I8_MIN }, +}; +mmx_u8_test_t mmx_u8_add_sat_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = U8_MAX, .b = 1, .result = U8_MAX }, + { .a = 0, .b = U8_MAX, .result = U8_MAX }, +}; + +mmx_i16_test_t mmx_i16_add_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = I16_MAX, .b = 1, .result = I16_MIN }, + { .a = I16_MIN, .b = -1, .result = I16_MAX }, +}; +mmx_i16_test_t mmx_i16_add_sat_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = I16_MAX, .b = 1, .result = I16_MAX }, + { .a = I16_MIN, .b = -1, .result = I16_MIN }, +}; +mmx_u16_test_t mmx_u16_add_sat_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = U16_MAX, .b = 1, .result = U16_MAX }, + { .a = 0, .b = U16_MAX, .result = U16_MAX }, +}; + +mmx_i32_test_t mmx_i32_add_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = I32_MAX, .b = 1, .result = I32_MIN }, + { .a = I32_MIN, .b = -1, .result = I32_MAX }, +}; + +MMX_ARITH_TEST(test_mmx_paddb, mmx_i8_add_test_data, mmx_i8_test_t, i8, 8, _m_paddb); +MMX_ARITH_TEST(test_mmx_paddsb, mmx_i8_add_sat_test_data, mmx_i8_test_t, i8, 8, _m_paddsb); +MMX_ARITH_TEST(test_mmx_paddusb, mmx_u8_add_sat_test_data, mmx_u8_test_t, u8, 8, _m_paddusb); + +MMX_ARITH_TEST(test_mmx_paddw, mmx_i16_add_test_data, mmx_i16_test_t, i16, 16, _m_paddw); +MMX_ARITH_TEST(test_mmx_paddsw, mmx_i16_add_sat_test_data, mmx_i16_test_t, i16, 16, _m_paddsw); +MMX_ARITH_TEST(test_mmx_paddusw, mmx_u16_add_sat_test_data, mmx_u16_test_t, u16, 16, _m_paddusw); + +MMX_ARITH_TEST(test_mmx_paddd, mmx_i32_add_test_data, mmx_i32_test_t, i32, 32, _m_paddd); + + + +mmx_i8_test_t mmx_i8_sub_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = I8_MIN, .b = 1, .result = I8_MAX }, + { .a = I8_MAX, .b = -1, .result = I8_MIN }, + { .a = U8_MAX, .b = U8_MAX, .result = 0 }, +}; +mmx_i8_test_t mmx_i8_sub_sat_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = I8_MIN, .b = 1, .result = I8_MIN }, + { .a = I8_MAX, .b = -1, .result = I8_MAX }, +}; +mmx_u8_test_t mmx_u8_sub_sat_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = U8_MIN, .b = 1, .result = U8_MIN }, + { .a = U8_MAX, .b = U8_MAX, .result = 0 }, +}; + +mmx_i16_test_t mmx_i16_sub_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = I16_MIN, .b = 1, .result = I16_MAX }, + { .a = I16_MAX, .b = -1, .result = I16_MIN }, +}; +mmx_i16_test_t mmx_i16_sub_sat_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = I16_MIN, .b = 1, .result = I16_MIN }, + { .a = I16_MAX, .b = -1, .result = I16_MAX }, +}; +mmx_u16_test_t mmx_u16_sub_sat_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = U16_MIN, .b = 1, .result = U16_MIN }, + { .a = U16_MIN, .b = U16_MIN, .result = 0 }, +}; + +mmx_i32_test_t mmx_i32_sub_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = I32_MIN, .b = 1, .result = I32_MAX }, + { .a = I32_MAX, .b = -1, .result = I32_MIN }, +}; + +MMX_ARITH_TEST(test_mmx_psubb, mmx_i8_sub_test_data, mmx_i8_test_t, i8, 8, _m_psubb); +MMX_ARITH_TEST(test_mmx_psubsb, mmx_i8_sub_sat_test_data, mmx_i8_test_t, i8, 8, _m_psubsb); +MMX_ARITH_TEST(test_mmx_psubusb, mmx_u8_sub_sat_test_data, mmx_u8_test_t, u8, 8, _m_psubusb); + +MMX_ARITH_TEST(test_mmx_psubw, mmx_i16_sub_test_data, mmx_i16_test_t, i16, 16, _m_psubw); +MMX_ARITH_TEST(test_mmx_psubuw, mmx_i16_sub_sat_test_data, mmx_i16_test_t, i16, 16, _m_psubsw); +MMX_ARITH_TEST(test_mmx_psubusw, mmx_u16_sub_sat_test_data, mmx_u16_test_t, u16, 16, _m_psubusw); + +MMX_ARITH_TEST(test_mmx_psubd, mmx_i32_sub_test_data, mmx_i32_test_t, i32, 32, _m_psubd); + + + + +mmx_u64_test_t mmx_por_test_data[] = { + { .a = 0xAAAAAAAAAAAAAAAA, + .b = 0x5555555555555555, + .result = 0xFFFFFFFFFFFFFFFF }, + { .a = 0x0000000000000000, + .b = 0x1111111111111111, + .result = 0x1111111111111111 }, +}; + +mmx_u64_test_t mmx_pand_test_data[] = { + { .a = 0xAAAAAAAAAAAAAAAA, + .b = 0x5555555555555555, + .result = 0x0000000000000000 }, + { .a = 0xFFFFFFFFFFFFFFFF, + .b = 0xFFFFFFFFFFFFFFFF, + .result = 0xFFFFFFFFFFFFFFFF }, +}; + +mmx_u64_test_t mmx_pandn_test_data[] = { + { .a = 0x0000000000000000, + .b = 0xFFFFFFFFFFFFFFFF, + .result = 0xFFFFFFFFFFFFFFFF }, + { .a = 0xFFFFFFFFFFFFFFFF, + .b = 0x0000000000000000, + .result = 0x0000000000000000 }, +}; + + +mmx_u64_test_t mmx_pxor_test_data[] = { + { .a = 0xAAAAAAAAAAAAAAAA, + .b = 0x5555555555555555, + .result = 0xFFFFFFFFFFFFFFFF }, + { .a = 0xFFFFFFFFFFFFFFFF, + .b = 0xFFFFFFFFFFFFFFFF, + .result = 0x0000000000000000 }, +}; + + +MMX_64_TEST(test_mmx_por, mmx_por_test_data, _m_por); +MMX_64_TEST(test_mmx_pand, mmx_pand_test_data, _m_pand); +MMX_64_TEST(test_mmx_pandn, mmx_pandn_test_data, _m_pandn); +MMX_64_TEST(test_mmx_pxor, mmx_pxor_test_data, _m_pxor); + + + + + +mmx_i16_test_t mmx_pmullw_test_data[] = { + { .a = 10, .b = 10, .result = 100 }, + { .a = 32000, .b = 10, .result = 0xE200 }, + { .a = 20000, .b = 20000, .result = 0x8400 }, +}; +mmx_i16_test_t mmx_pmulhw_test_data[] = { + { .a = 10, .b = 10, .result = 0 }, + { .a = 32000, .b = 10, .result = 4 }, + { .a = 20000, .b = 20000, .result = 0x17D7 }, +}; +mmx_u64_test_t mmx_pmaddwd_test_data[] = { + { .a = 0x0000000100000001, + .b = 0x0000000100000001, + .result = 0x0000000100000001 }, + { .a = 0x0000000200000004, + .b = 0x0000000200000004, + .result = 0x0000000400000010 }, + + { .a = 0x000000007FFFFFFF, + .b = 0x000000007FFFFFFF, + .result = 0x000000003FFF0002 }, + + // -1 * -1 = 2 + { .a = 0x00000000FFFFFFFF, + .b = 0x00000000FFFFFFFF, + .result = 0x0000000000000002 }, +}; + + +MMX_ARITH_TEST(test_mmx_pmullw, mmx_pmullw_test_data, mmx_i16_test_t, i16, 16, _m_pmullw); +MMX_ARITH_TEST(test_mmx_pmulhw, mmx_pmulhw_test_data, mmx_i16_test_t, i16, 16, _m_pmulhw); +MMX_64_TEST(test_mmx_pmaddwd, mmx_pmaddwd_test_data, _m_pmaddwd); + + + + + +mmx_u64_test_t mmx_packssdw_test_data[] = { + { .a = 0x0000000200000001, + .b = 0x0000000400000003, + .result = 0x0004000300020001 }, + { .a = 0x7FFFFFFF7FFFFFFF, + .b = 0x7FFFFFFF7FFFFFFF, + .result = 0x7FFF7FFF7FFF7FFF }, + { .a = 0x8000000080000000, + .b = 0x8000000080000000, + .result = 0x8000800080008000 }, +}; +mmx_u64_test_t mmx_packsswb_test_data[] = { + { .a = 0x0004000300020001, + .b = 0x0008000700060005, + .result = 0x0807060504030201 }, + { .a = 0x7FFF7FFF7FFF7FFF, + .b = 0x7FFF7FFF7FFF7FFF, + .result = 0x7F7F7F7F7F7F7F7F }, + { .a = 0x8000800080008000, + .b = 0x8000800080008000, + .result = 0x8080808080808080 }, +}; +mmx_u64_test_t mmx_packuswb_test_data[] = { + { .a = 0x0004000300020001, + .b = 0x0008000700060005, + .result = 0x0807060504030201 }, + { .a = 0x7FFF7FFF7FFF7FFF, + .b = 0x7FFF7FFF7FFF7FFF, + .result = 0xFFFFFFFFFFFFFFFF }, + { .a = 0x8000800080008000, + .b = 0x8000800080008000, + .result = 0x0000000000000000 }, +}; + + +MMX_64_TEST(test_mmx_packssdw, mmx_packssdw_test_data, _m_packssdw); +MMX_64_TEST(test_mmx_packsswb, mmx_packsswb_test_data, _m_packsswb); +MMX_64_TEST(test_mmx_packuswb, mmx_packuswb_test_data, _m_packuswb); + + + +mmx_u64_test_t mmx_punpckhbw_test_data[] = { + { .a = 0x4433221100000000, + .b = 0x8877665500000000, + .result = 0x8844773366225511 }, +}; +mmx_u64_test_t mmx_punpckhdq_test_data[] = { + { .a = 0xAAAAAAAA00000000, + .b = 0xBBBBBBBB00000000, + .result = 0xBBBBBBBBAAAAAAAA }, +}; +mmx_u64_test_t mmx_punpckhwd_test_data[] = { + { .a = 0xBBBBAAAA00000000, + .b = 0xDDDDCCCC00000000, + .result = 0xDDDDBBBBCCCCAAAA }, +}; +mmx_u64_test_t mmx_punpcklbw_test_data[] = { + { .a = 0x0000000044332211, + .b = 0x0000000088776655, + .result = 0x8844773366225511 }, +}; +mmx_u64_test_t mmx_punpckldq_test_data[] = { + { .a = 0x00000000AAAAAAAA, + .b = 0x00000000BBBBBBBB, + .result = 0xBBBBBBBBAAAAAAAA }, +}; +mmx_u64_test_t mmx_punpcklwd_test_data[] = { + { .a = 0x00000000BBBBAAAA, + .b = 0x00000000DDDDCCCC, + .result = 0xDDDDBBBBCCCCAAAA }, +}; + + +MMX_64_TEST(test_mmx_punpckhbw, mmx_punpckhbw_test_data, _m_punpckhbw); +MMX_64_TEST(test_mmx_punpckhdq, mmx_punpckhdq_test_data, _m_punpckhdq); +MMX_64_TEST(test_mmx_punpckhwd, mmx_punpckhwd_test_data, _m_punpckhwd); +MMX_64_TEST(test_mmx_punpcklbw, mmx_punpcklbw_test_data, _m_punpcklbw); +MMX_64_TEST(test_mmx_punpckldq, mmx_punpckldq_test_data, _m_punpckldq); +MMX_64_TEST(test_mmx_punpcklwd, mmx_punpcklwd_test_data, _m_punpcklwd); + + + + + + +mmx_u64_test_t mmx_pcmpeqb_test_data[] = { + { .a = 0x8877665544332211, + .b = 0x0077005500330011, + .result = 0x00FF00FF00FF00FF }, +}; +mmx_u64_test_t mmx_pcmpeqw_test_data[] = { + { .a = 0x4444333322221111, + .b = 0x0000333300001111, + .result = 0x0000FFFF0000FFFF }, +}; +mmx_u64_test_t mmx_pcmpeqd_test_data[] = { + { .a = 0x2222222211111111, + .b = 0x2222222200000000, + .result = 0xFFFFFFFF00000000 }, +}; + +mmx_u64_test_t mmx_pcmpgtb_test_data[] = { + { .a = 0x0000000000002201, + .b = 0x0000000000002300, + .result = 0x00000000000000FF }, +}; +mmx_u64_test_t mmx_pcmpgtw_test_data[] = { + { .a = 0x4444333322221111, + .b = 0x0000333300001112, + .result = 0xFFFF0000FFFF0000 }, +}; +mmx_u64_test_t mmx_pcmpgtd_test_data[] = { + { .a = 0x2222222111111111, + .b = 0x2222222200000000, + .result = 0x00000000FFFFFFFF }, +}; + + +MMX_64_TEST(test_mmx_pcmpeqb, mmx_pcmpeqb_test_data, _m_pcmpeqb); +MMX_64_TEST(test_mmx_pcmpeqw, mmx_pcmpeqw_test_data, _m_pcmpeqw); +MMX_64_TEST(test_mmx_pcmpeqd, mmx_pcmpeqd_test_data, _m_pcmpeqd); +MMX_64_TEST(test_mmx_pcmpgtb, mmx_pcmpgtb_test_data, _m_pcmpgtb); +MMX_64_TEST(test_mmx_pcmpgtw, mmx_pcmpgtw_test_data, _m_pcmpgtw); +MMX_64_TEST(test_mmx_pcmpgtd, mmx_pcmpgtd_test_data, _m_pcmpgtd); + + + + +mmx_u64_test_t mmx_pslld_test_data[] = { + { .a = 1, .b = 1, .result = 2 }, + { .a = 16, .b = 1, .result = 32 }, + { .a = 16, .b = 32, .result = 0 }, + { .a = 16, .b = 0, .result = 16 }, +}; +mmx_u64_test_t mmx_psllq_test_data[] = { + { .a = 1, .b = 1, .result = 2 }, + { .a = 16, .b = 1, .result = 32 }, + { .a = 16, .b = 64, .result = 0 }, + { .a = 16, .b = 0, .result = 16 }, +}; +mmx_u64_test_t mmx_psllw_test_data[] = { + { .a = 1, .b = 1, .result = 2 }, + { .a = 16, .b = 1, .result = 32 }, + { .a = 16, .b = 16, .result = 0 }, + { .a = 16, .b = 0, .result = 16 }, +}; +mmx_u64_test_t mmx_psrad_test_data[] = { + { .a = 1, .b = 1, .result = 0 }, + { .a = 16, .b = 1, .result = 8 }, + { .a = 16, .b = 0, .result = 16 }, + { .a = 0x7FFFFFFF, .b = 1, .result = 0x3FFFFFFF }, + + { .a = I32_MAX, .b = 32, .result = 0 }, + { .a = I32_MIN, .b = 32, .result = U32_MAX }, +}; +mmx_u64_test_t mmx_psraw_test_data[] = { + { .a = 1, .b = 1, .result = 0 }, + { .a = 16, .b = 1, .result = 8 }, + { .a = 16, .b = 0, .result = 16 }, + { .a = 0x7FFF, .b = 1, .result = 0x3FFF }, + + { .a = I16_MAX, .b = 16, .result = 0 }, + { .a = U16_MAX, .b = 16, .result = U16_MAX }, +}; +mmx_u64_test_t mmx_psrld_test_data[] = { + { .a = 1, .b = 1, .result = 0 }, + { .a = 16, .b = 1, .result = 8 }, + { .a = 16, .b = 0, .result = 16 }, + { .a = 0x7FFFFFFF, .b = 1, .result = 0x3FFFFFFF }, + + { .a = I32_MAX, .b = 32, .result = 0 }, + { .a = I32_MIN, .b = 32, .result = 0 }, +}; +mmx_u64_test_t mmx_psrlq_test_data[] = { + { .a = 1, .b = 1, .result = 0 }, + { .a = 16, .b = 1, .result = 8 }, + { .a = 16, .b = 0, .result = 16 }, + + { .a = I64_MAX, .b = 64, .result = 0 }, + { .a = I64_MIN, .b = 64, .result = 0 }, +}; +mmx_u64_test_t mmx_psrlw_test_data[] = { + { .a = 1, .b = 1, .result = 0 }, + { .a = 16, .b = 1, .result = 8 }, + { .a = 16, .b = 0, .result = 16 }, + + { .a = I16_MAX, .b = 16, .result = 0 }, + + // TODO: Works on my machine + // { .a = I16_MIN, .b = 16, .result = 0 }, +}; + + + +MMX_64_TEST(test_mmx_pslld, mmx_pslld_test_data, _m_pslld); +MMX_64_TEST(test_mmx_psllq, mmx_psllq_test_data, _m_psllq); +MMX_64_TEST(test_mmx_psllw, mmx_psllw_test_data, _m_psllw); +MMX_64_TEST(test_mmx_psrad, mmx_psrad_test_data, _m_psrad); +MMX_64_TEST(test_mmx_psraw, mmx_psraw_test_data, _m_psraw); +MMX_64_TEST(test_mmx_psrld, mmx_psrld_test_data, _m_psrld); +MMX_64_TEST(test_mmx_psrlq, mmx_psrlq_test_data, _m_psrlq); +MMX_64_TEST(test_mmx_psrlw, mmx_psrlw_test_data, _m_psrlw); + +MMX_SHIFT_TEST(test_mmx_pslldi, mmx_pslld_test_data, _m_pslldi); +MMX_SHIFT_TEST(test_mmx_psllqi, mmx_psllq_test_data, _m_psllqi); +MMX_SHIFT_TEST(test_mmx_psllwi, mmx_psllw_test_data, _m_psllwi); +MMX_SHIFT_TEST(test_mmx_psradi, mmx_psrad_test_data, _m_psradi); +MMX_SHIFT_TEST(test_mmx_psrawi, mmx_psraw_test_data, _m_psrawi); +MMX_SHIFT_TEST(test_mmx_psrldi, mmx_psrld_test_data, _m_psrldi); +MMX_SHIFT_TEST(test_mmx_psrlqi, mmx_psrlq_test_data, _m_psrlqi); +MMX_SHIFT_TEST(test_mmx_psrlwi, mmx_psrlw_test_data, _m_psrlwi); + + + + +bool test_mmx_cpuid() { + printf("TEST: test_mmx_cpuid\n"); + + unsigned int eax, ebx, ecx, edx; + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (1), "c" (0) + ); + + int has_mmx = !!(edx & (1 << 23)); + if (has_mmx) { + return 0; + } + return 1; + +} + +int main() { + int errors = 0; + + errors += (int) test_mmx_cpuid(); + + + errors += (int) test_mmx_paddb(); + errors += (int) test_mmx_paddsb(); + errors += (int) test_mmx_paddusb(); + errors += (int) test_mmx_paddw(); + errors += (int) test_mmx_paddsw(); + errors += (int) test_mmx_paddusw(); + errors += (int) test_mmx_paddd(); + + errors += (int) test_mmx_psubb(); + errors += (int) test_mmx_psubsb(); + errors += (int) test_mmx_psubusb(); + errors += (int) test_mmx_psubw(); + errors += (int) test_mmx_psubuw(); + errors += (int) test_mmx_psubusw(); + errors += (int) test_mmx_psubd(); + + errors += (int) test_mmx_por(); + errors += (int) test_mmx_pand(); + errors += (int) test_mmx_pandn(); + errors += (int) test_mmx_pxor(); + + errors += (int) test_mmx_pmullw(); + errors += (int) test_mmx_pmulhw(); + errors += (int) test_mmx_pmaddwd(); + + errors += (int) test_mmx_packssdw(); + errors += (int) test_mmx_packsswb(); + errors += (int) test_mmx_packuswb(); + + errors += (int) test_mmx_punpckhbw(); + errors += (int) test_mmx_punpckhdq(); + errors += (int) test_mmx_punpckhwd(); + errors += (int) test_mmx_punpcklbw(); + errors += (int) test_mmx_punpckldq(); + errors += (int) test_mmx_punpcklwd(); + + errors += (int) test_mmx_pcmpeqb(); + errors += (int) test_mmx_pcmpeqw(); + errors += (int) test_mmx_pcmpeqd(); + errors += (int) test_mmx_pcmpgtb(); + errors += (int) test_mmx_pcmpgtw(); + errors += (int) test_mmx_pcmpgtd(); + + errors += (int) test_mmx_psllw(); + errors += (int) test_mmx_psllwi(); + errors += (int) test_mmx_pslld(); + errors += (int) test_mmx_pslldi(); + errors += (int) test_mmx_psllq(); + errors += (int) test_mmx_psllqi(); + errors += (int) test_mmx_psraw(); + errors += (int) test_mmx_psrawi(); + errors += (int) test_mmx_psrad(); + errors += (int) test_mmx_psradi(); + errors += (int) test_mmx_psrld(); + errors += (int) test_mmx_psrldi(); + errors += (int) test_mmx_psrlq(); + errors += (int) test_mmx_psrlqi(); + errors += (int) test_mmx_psrlw(); + errors += (int) test_mmx_psrlwi(); + + + printf("Errors: %d\n", errors); + return errors; +} + diff --git a/tests32/extensions/mmx.txt b/tests32/extensions/mmx.txt new file mode 100644 index 00000000..673647b6 --- /dev/null +++ b/tests32/extensions/mmx.txt @@ -0,0 +1,106 @@ +TEST: test_mmx_cpuid +TEST: test_mmx_paddb +TEST: finished with: 0 errors +TEST: test_mmx_paddsb +TEST: finished with: 0 errors +TEST: test_mmx_paddusb +TEST: finished with: 0 errors +TEST: test_mmx_paddw +TEST: finished with: 0 errors +TEST: test_mmx_paddsw +TEST: finished with: 0 errors +TEST: test_mmx_paddusw +TEST: finished with: 0 errors +TEST: test_mmx_paddd +TEST: finished with: 0 errors +TEST: test_mmx_psubb +TEST: finished with: 0 errors +TEST: test_mmx_psubsb +TEST: finished with: 0 errors +TEST: test_mmx_psubusb +TEST: finished with: 0 errors +TEST: test_mmx_psubw +TEST: finished with: 0 errors +TEST: test_mmx_psubuw +TEST: finished with: 0 errors +TEST: test_mmx_psubusw +TEST: finished with: 0 errors +TEST: test_mmx_psubd +TEST: finished with: 0 errors +TEST: test_mmx_por +TEST: finished with: 0 errors +TEST: test_mmx_pand +TEST: finished with: 0 errors +TEST: test_mmx_pandn +TEST: finished with: 0 errors +TEST: test_mmx_pxor +TEST: finished with: 0 errors +TEST: test_mmx_pmullw +TEST: finished with: 0 errors +TEST: test_mmx_pmulhw +TEST: finished with: 0 errors +TEST: test_mmx_pmaddwd +TEST: finished with: 0 errors +TEST: test_mmx_packssdw +TEST: finished with: 0 errors +TEST: test_mmx_packsswb +TEST: finished with: 0 errors +TEST: test_mmx_packuswb +TEST: finished with: 0 errors +TEST: test_mmx_punpckhbw +TEST: finished with: 0 errors +TEST: test_mmx_punpckhdq +TEST: finished with: 0 errors +TEST: test_mmx_punpckhwd +TEST: finished with: 0 errors +TEST: test_mmx_punpcklbw +TEST: finished with: 0 errors +TEST: test_mmx_punpckldq +TEST: finished with: 0 errors +TEST: test_mmx_punpcklwd +TEST: finished with: 0 errors +TEST: test_mmx_pcmpeqb +TEST: finished with: 0 errors +TEST: test_mmx_pcmpeqw +TEST: finished with: 0 errors +TEST: test_mmx_pcmpeqd +TEST: finished with: 0 errors +TEST: test_mmx_pcmpgtb +TEST: finished with: 0 errors +TEST: test_mmx_pcmpgtw +TEST: finished with: 0 errors +TEST: test_mmx_pcmpgtd +TEST: finished with: 0 errors +TEST: test_mmx_psllw +TEST: finished with: 0 errors +TEST: test_mmx_psllwi +TEST: finished with: 0 errors +TEST: test_mmx_pslld +TEST: finished with: 0 errors +TEST: test_mmx_pslldi +TEST: finished with: 0 errors +TEST: test_mmx_psllq +TEST: finished with: 0 errors +TEST: test_mmx_psllqi +TEST: finished with: 0 errors +TEST: test_mmx_psraw +TEST: finished with: 0 errors +TEST: test_mmx_psrawi +TEST: finished with: 0 errors +TEST: test_mmx_psrad +TEST: finished with: 0 errors +TEST: test_mmx_psradi +TEST: finished with: 0 errors +TEST: test_mmx_psrld +TEST: finished with: 0 errors +TEST: test_mmx_psrldi +TEST: finished with: 0 errors +TEST: test_mmx_psrlq +TEST: finished with: 0 errors +TEST: test_mmx_psrlqi +TEST: finished with: 0 errors +TEST: test_mmx_psrlw +TEST: finished with: 0 errors +TEST: test_mmx_psrlwi +TEST: finished with: 0 errors +Errors: 0 diff --git a/tests32/ref01.txt b/tests32/ref01.txt new file mode 100644 index 00000000..980a0d5f --- /dev/null +++ b/tests32/ref01.txt @@ -0,0 +1 @@ +Hello World! diff --git a/tests32/ref02.txt b/tests32/ref02.txt new file mode 100644 index 00000000..980a0d5f --- /dev/null +++ b/tests32/ref02.txt @@ -0,0 +1 @@ +Hello World! diff --git a/tests32/ref03.txt b/tests32/ref03.txt new file mode 100644 index 00000000..980a0d5f --- /dev/null +++ b/tests32/ref03.txt @@ -0,0 +1 @@ +Hello World! diff --git a/tests32/ref04.txt b/tests32/ref04.txt new file mode 100644 index 00000000..49e7fa34 --- /dev/null +++ b/tests32/ref04.txt @@ -0,0 +1 @@ +Hello, argc=2 argv[1]=yeah diff --git a/tests32/ref05.txt b/tests32/ref05.txt new file mode 100644 index 00000000..5152dcb2 --- /dev/null +++ b/tests32/ref05.txt @@ -0,0 +1,6 @@ +fact(7)=5040 +Prime list 0..5040: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087 1091 1093 1097 1103 1109 1117 1123 1129 1151 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 1229 1231 1237 1249 1259 1277 1279 1283 1289 1291 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 1381 1399 1409 1423 1427 1429 1433 1439 1447 1451 1453 1459 1471 1481 1483 1487 1489 1493 1499 1511 1523 1531 1543 1549 1553 1559 1567 1571 1579 1583 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 1663 1667 1669 1693 1697 1699 1709 1721 1723 1733 1741 1747 1753 1759 1777 1783 1787 1789 1801 1811 1823 1831 1847 1861 1867 1871 1873 1877 1879 1889 1901 1907 1913 1931 1933 1949 1951 1973 1979 1987 1993 1997 1999 2003 2011 2017 2027 2029 2039 2053 2063 2069 2081 2083 2087 2089 2099 2111 2113 2129 2131 2137 2141 2143 2153 2161 2179 2203 2207 2213 2221 2237 2239 2243 2251 2267 2269 2273 2281 2287 2293 2297 2309 2311 2333 2339 2341 2347 2351 2357 2371 2377 2381 2383 2389 2393 2399 2411 2417 2423 2437 2441 2447 2459 2467 2473 2477 2503 2521 2531 2539 2543 2549 2551 2557 2579 2591 2593 2609 2617 2621 2633 2647 2657 2659 2663 2671 2677 2683 2687 2689 2693 2699 2707 2711 2713 2719 2729 2731 2741 2749 2753 2767 2777 2789 2791 2797 2801 2803 2819 2833 2837 2843 2851 2857 2861 2879 2887 2897 2903 2909 2917 2927 2939 2953 2957 2963 2969 2971 2999 3001 3011 3019 3023 3037 3041 3049 3061 3067 3079 3083 3089 3109 3119 3121 3137 3163 3167 3169 3181 3187 3191 3203 3209 3217 3221 3229 3251 3253 3257 3259 3271 3299 3301 3307 3313 3319 3323 3329 3331 3343 3347 3359 3361 3371 3373 3389 3391 3407 3413 3433 3449 3457 3461 3463 3467 3469 3491 3499 3511 3517 3527 3529 3533 3539 3541 3547 3557 3559 3571 3581 3583 3593 3607 3613 3617 3623 3631 3637 3643 3659 3671 3673 3677 3691 3697 3701 3709 3719 3727 3733 3739 3761 3767 3769 3779 3793 3797 3803 3821 3823 3833 3847 3851 3853 3863 3877 3881 3889 3907 3911 3917 3919 3923 3929 3931 3943 3947 3967 3989 4001 4003 4007 4013 4019 4021 4027 4049 4051 4057 4073 4079 4091 4093 4099 4111 4127 4129 4133 4139 4153 4157 4159 4177 4201 4211 4217 4219 4229 4231 4241 4243 4253 4259 4261 4271 4273 4283 4289 4297 4327 4337 4339 4349 4357 4363 4373 4391 4397 4409 4421 4423 4441 4447 4451 4457 4463 4481 4483 4493 4507 4513 4517 4519 4523 4547 4549 4561 4567 4583 4591 4597 4603 4621 4637 4639 4643 4649 4651 4657 4663 4673 4679 4691 4703 4721 4723 4729 4733 4751 4759 4783 4787 4789 4793 4799 4801 4813 4817 4831 4861 4871 4877 4889 4903 4909 4919 4931 4933 4937 4943 4951 4957 4967 4969 4973 4987 4993 4999 5003 5009 5011 5021 5023 5039 +(un)signed char = -5/83 (un)signed int = -53/65500 total=65525 +65500/5=13100, 65500%5=0 +65525/5=13105, 65525%5=0 +65525/-53=-1236 + 17 \ No newline at end of file diff --git a/tests32/ref06.txt b/tests32/ref06.txt new file mode 100644 index 00000000..8fca60ff --- /dev/null +++ b/tests32/ref06.txt @@ -0,0 +1,4 @@ +[02] Second thread executing +[02] Thread done. + +[00] Done. diff --git a/tests32/ref07.txt b/tests32/ref07.txt new file mode 100644 index 00000000..76649ab7 --- /dev/null +++ b/tests32/ref07.txt @@ -0,0 +1 @@ +0 is 0.000000, sin(pi/2) is 1.000000 and 3*1.5 is 4.500000. diff --git a/tests32/ref08.txt b/tests32/ref08.txt new file mode 100644 index 00000000..87d2ba54 --- /dev/null +++ b/tests32/ref08.txt @@ -0,0 +1 @@ +31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185 \ No newline at end of file diff --git a/tests32/ref09.txt b/tests32/ref09.txt new file mode 100644 index 00000000..adcb7a7c --- /dev/null +++ b/tests32/ref09.txt @@ -0,0 +1,2 @@ +Child has x = 2 +Parent has x = 0 diff --git a/tests32/ref10.txt b/tests32/ref10.txt new file mode 100644 index 00000000..4af4852f --- /dev/null +++ b/tests32/ref10.txt @@ -0,0 +1,10 @@ +thread #0 +thread #1 +thread #2 +thread #3 +thread #4 +thread #5 +thread #6 +thread #7 +thread #8 +thread #9 diff --git a/tests32/ref11.txt b/tests32/ref11.txt new file mode 100644 index 00000000..3b4654eb --- /dev/null +++ b/tests32/ref11.txt @@ -0,0 +1,8 @@ +Create/start 2 threads +Thread 1: Entered (10/20) +Thread 1: foo(), TLS data=0 2 "-1-" +Thread 2: Entered (10/20) +Thread 2: foo(), TLS data=1 4 "-2-" +Thread 2: bar(), TLS data=1 4 "-2-" +Thread 1: bar(), TLS data=0 2 "-1-" +Main completed diff --git a/tests32/ref12.txt b/tests32/ref12.txt new file mode 100644 index 00000000..3e7d1053 --- /dev/null +++ b/tests32/ref12.txt @@ -0,0 +1,4 @@ +1000000000000 => 1000000000000.000000 +-1000000000000 => -1000000000000.000000 +(angle_t)268435456.000000 = 268435456 == 0x10000000 +go PI trucated=3, -PI rounded=-3 diff --git a/tests32/ref13.txt b/tests32/ref13.txt new file mode 100644 index 00000000..33118c0d --- /dev/null +++ b/tests32/ref13.txt @@ -0,0 +1,8 @@ +main: swapcontext(&uctx_main, &uctx_func2) +func2: started (1, 2) +func2: swapcontext(&uctx_func2, &uctx_func1) +func1: started +func1: swapcontext(&uctx_func1, &uctx_func2) +func2: returning +func1: returning +main: exiting diff --git a/tests32/ref14.txt b/tests32/ref14.txt new file mode 100644 index 00000000..82ec7b65 --- /dev/null +++ b/tests32/ref14.txt @@ -0,0 +1,5 @@ +Thread: thread_state = 1. +Main thread: thread_state == 1. +Thread: thread_state = 2. +Main thread: thread_state == 2. +Finished with no errors. diff --git a/tests32/ref15.txt b/tests32/ref15.txt new file mode 100644 index 00000000..52326af6 --- /dev/null +++ b/tests32/ref15.txt @@ -0,0 +1 @@ +2, 2/2 diff --git a/tests32/ref16.txt b/tests32/ref16.txt new file mode 100644 index 00000000..52326af6 --- /dev/null +++ b/tests32/ref16.txt @@ -0,0 +1 @@ +2, 2/2 diff --git a/tests32/ref17.txt b/tests32/ref17.txt new file mode 100644 index 00000000..a6ed52c2 --- /dev/null +++ b/tests32/ref17.txt @@ -0,0 +1,564 @@ +ucomiss 1.000000, 2.000000 => 0x203 +ucomiss 2.000000, 1.000000 => 0x202 +ucomiss 1.000000, inf => 0x203 +ucomiss inf, 1.000000 => 0x202 +ucomiss 1.000000, -inf => 0x202 +ucomiss -inf, 1.000000 => 0x203 +ucomiss 1.000000, nan => 0x203 +ucomiss nan, 1.000000 => 0x203 +ucomiss 1.000000, 1.000000 => 0x242 +ucomiss 1.000000, 1.000000 => 0x242 +ucomiss inf, inf => 0x242 +ucomiss -inf, inf => 0x203 +ucomiss inf, -inf => 0x202 +ucomiss nan, nan => 0x203 +minss 1, 2 => 1 +minss 2, 1 => 1 +minss -inf, 2 => -inf +minss 2, -inf => -inf +minss inf, 2 => 2 +minss 2, inf => 2 +minss nan, 2 => 2 +minss 2, nan => nan +minss nan, 3.40282e+38 => 3.40282e+38 +minss 3.40282e+38, nan => nan +minss -inf, 3.40282e+38 => -inf +minss 3.40282e+38, -inf => -inf +minss inf, 3.40282e+38 => 3.40282e+38 +minss 3.40282e+38, inf => 3.40282e+38 +maxss 1, 2 => 2 +maxss 2, 1 => 2 +maxss -inf, 2 => 2 +maxss 2, -inf => 2 +maxss inf, 2 => inf +maxss 2, inf => inf +maxss nan, 2 => 2 +maxss 2, nan => nan +maxss nan, 3.40282e+38 => 3.40282e+38 +maxss 3.40282e+38, nan => nan +maxss -inf, 3.40282e+38 => 3.40282e+38 +maxss 3.40282e+38, -inf => 3.40282e+38 +maxss inf, 3.40282e+38 => inf +maxss 3.40282e+38, inf => inf +cmpss 0 1.000000, 2.000000 => 0x0 +cmpss 0 2.000000, 1.000000 => 0x0 +cmpss 0 1.000000, inf => 0x0 +cmpss 0 inf, 1.000000 => 0x0 +cmpss 0 1.000000, -inf => 0x0 +cmpss 0 -inf, 1.000000 => 0x0 +cmpss 0 1.000000, nan => 0x0 +cmpss 0 nan, 1.000000 => 0x0 +cmpss 0 1.000000, 1.000000 => 0xffffffff +cmpss 0 1.000000, 1.000000 => 0xffffffff +cmpss 0 inf, inf => 0xffffffff +cmpss 0 -inf, inf => 0x0 +cmpss 0 inf, -inf => 0x0 +cmpss 0 nan, nan => 0x0 +cmpss 1 1.000000, 2.000000 => 0xffffffff +cmpss 1 2.000000, 1.000000 => 0x0 +cmpss 1 1.000000, inf => 0xffffffff +cmpss 1 inf, 1.000000 => 0x0 +cmpss 1 1.000000, -inf => 0x0 +cmpss 1 -inf, 1.000000 => 0xffffffff +cmpss 1 1.000000, nan => 0x0 +cmpss 1 nan, 1.000000 => 0x0 +cmpss 1 1.000000, 1.000000 => 0x0 +cmpss 1 1.000000, 1.000000 => 0x0 +cmpss 1 inf, inf => 0x0 +cmpss 1 -inf, inf => 0xffffffff +cmpss 1 inf, -inf => 0x0 +cmpss 1 nan, nan => 0x0 +cmpss 2 1.000000, 2.000000 => 0xffffffff +cmpss 2 2.000000, 1.000000 => 0x0 +cmpss 2 1.000000, inf => 0xffffffff +cmpss 2 inf, 1.000000 => 0x0 +cmpss 2 1.000000, -inf => 0x0 +cmpss 2 -inf, 1.000000 => 0xffffffff +cmpss 2 1.000000, nan => 0x0 +cmpss 2 nan, 1.000000 => 0x0 +cmpss 2 1.000000, 1.000000 => 0xffffffff +cmpss 2 1.000000, 1.000000 => 0xffffffff +cmpss 2 inf, inf => 0xffffffff +cmpss 2 -inf, inf => 0xffffffff +cmpss 2 inf, -inf => 0x0 +cmpss 2 nan, nan => 0x0 +cmpss 3 1.000000, 2.000000 => 0x0 +cmpss 3 2.000000, 1.000000 => 0x0 +cmpss 3 1.000000, inf => 0x0 +cmpss 3 inf, 1.000000 => 0x0 +cmpss 3 1.000000, -inf => 0x0 +cmpss 3 -inf, 1.000000 => 0x0 +cmpss 3 1.000000, nan => 0xffffffff +cmpss 3 nan, 1.000000 => 0xffffffff +cmpss 3 1.000000, 1.000000 => 0x0 +cmpss 3 1.000000, 1.000000 => 0x0 +cmpss 3 inf, inf => 0x0 +cmpss 3 -inf, inf => 0x0 +cmpss 3 inf, -inf => 0x0 +cmpss 3 nan, nan => 0xffffffff +cmpss 4 1.000000, 2.000000 => 0xffffffff +cmpss 4 2.000000, 1.000000 => 0xffffffff +cmpss 4 1.000000, inf => 0xffffffff +cmpss 4 inf, 1.000000 => 0xffffffff +cmpss 4 1.000000, -inf => 0xffffffff +cmpss 4 -inf, 1.000000 => 0xffffffff +cmpss 4 1.000000, nan => 0xffffffff +cmpss 4 nan, 1.000000 => 0xffffffff +cmpss 4 1.000000, 1.000000 => 0x0 +cmpss 4 1.000000, 1.000000 => 0x0 +cmpss 4 inf, inf => 0x0 +cmpss 4 -inf, inf => 0xffffffff +cmpss 4 inf, -inf => 0xffffffff +cmpss 4 nan, nan => 0xffffffff +cmpss 5 1.000000, 2.000000 => 0x0 +cmpss 5 2.000000, 1.000000 => 0xffffffff +cmpss 5 1.000000, inf => 0x0 +cmpss 5 inf, 1.000000 => 0xffffffff +cmpss 5 1.000000, -inf => 0xffffffff +cmpss 5 -inf, 1.000000 => 0x0 +cmpss 5 1.000000, nan => 0xffffffff +cmpss 5 nan, 1.000000 => 0xffffffff +cmpss 5 1.000000, 1.000000 => 0xffffffff +cmpss 5 1.000000, 1.000000 => 0xffffffff +cmpss 5 inf, inf => 0xffffffff +cmpss 5 -inf, inf => 0x0 +cmpss 5 inf, -inf => 0xffffffff +cmpss 5 nan, nan => 0xffffffff +cmpss 6 1.000000, 2.000000 => 0x0 +cmpss 6 2.000000, 1.000000 => 0xffffffff +cmpss 6 1.000000, inf => 0x0 +cmpss 6 inf, 1.000000 => 0xffffffff +cmpss 6 1.000000, -inf => 0xffffffff +cmpss 6 -inf, 1.000000 => 0x0 +cmpss 6 1.000000, nan => 0xffffffff +cmpss 6 nan, 1.000000 => 0xffffffff +cmpss 6 1.000000, 1.000000 => 0x0 +cmpss 6 1.000000, 1.000000 => 0x0 +cmpss 6 inf, inf => 0x0 +cmpss 6 -inf, inf => 0x0 +cmpss 6 inf, -inf => 0xffffffff +cmpss 6 nan, nan => 0xffffffff +cmpss 7 1.000000, 2.000000 => 0xffffffff +cmpss 7 2.000000, 1.000000 => 0xffffffff +cmpss 7 1.000000, inf => 0xffffffff +cmpss 7 inf, 1.000000 => 0xffffffff +cmpss 7 1.000000, -inf => 0xffffffff +cmpss 7 -inf, 1.000000 => 0xffffffff +cmpss 7 1.000000, nan => 0x0 +cmpss 7 nan, 1.000000 => 0x0 +cmpss 7 1.000000, 1.000000 => 0xffffffff +cmpss 7 1.000000, 1.000000 => 0xffffffff +cmpss 7 inf, inf => 0xffffffff +cmpss 7 -inf, inf => 0xffffffff +cmpss 7 inf, -inf => 0xffffffff +cmpss 7 nan, nan => 0x0 +pshufb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x2 0x2 0xff 0x0 0x0 0xff 0xfe 0x81 0x0 0x3 0x72 0x32 0xff 0x80 +phaddw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x7fff 0x3 0x8004 0xffff 0xfffe 0x9050 0x7fff +phaddd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x7fffffff 0x7fffffff 0x80000001 0x3 +phaddsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x7fff 0x3 0x8004 0xffff 0xfffe 0x9050 0x8000 +pmaddubsw(0x80ff 0x7f 0x201 0x8103 0x84fe 0x5272 0xa5 0x32c0 , 0x100 0x1505 0x8020 0xff 0x708 0x681 0xf0a 0x110 ) = 0x80 0x27b 0xff20 0xfffd 0xb8c 0xc95e 0x672 0xc32 +phsubw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x7fff 0xffff 0x8002 0x1 0x0 0x7050 0x7ffd +psignb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x80 0x7f 0x0 0x1 0xfe 0xfd 0x0 0xfe 0x84 0x8e 0x52 0xa5 0x0 0xc0 0x32 +psignw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x8000 0x8001 0x0 0x1 0xfffe 0xfffd 0x7fff +psignd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x80000000 0x7fffffff 0x0 +pmulhrsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x8001 0xffff 0x0 0x0 0xfffe 0x0 0x7ffe +pblendvps(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe , 0x1 0x80000000 0x80000005 0xfffe ) = 0xffffffff 0x80000000 0x5 0x0 +ptestz(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 0 +ptestc(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 0 +ptestnzc(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 1 +pabsb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 ) = 0x1 0x80 0x7f 0x0 0x1 0x2 0x3 0x7f 0x2 0x7c 0x72 0x52 0x5b 0x0 0x40 0x32 +pabsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0x1 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x7fff +pabsd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0x1 0x80000000 0x7fffffff 0x0 +pmovsxbw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0xffff 0xffff 0x0 0xff80 0xffff 0x7f 0x0 0x0 +pmovsxbd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffffffff 0xffffffff 0xffffffff 0xffffffff +pmovsxbq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovsxwd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffffffff 0xffffffff 0x0 0xffff8000 +pmovsxwq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovsxdq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovzxbw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0xff 0xff 0x0 0x80 0xff 0x7f 0x0 0x0 +pmovzxbd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xff 0xff 0xff 0xff +pmovzxbq(0xffffffffffffffff 0x8000000000000000 ) = 0xff 0xff +pmovzxwd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffff 0xffff 0x0 0x8000 +pmovzxwq(0xffffffffffffffff 0x8000000000000000 ) = 0xffff 0xffff +pmovzxdq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffff 0xffffffff +pminsd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x80000000 0x5 0xfffffffe +pmaxsd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x1 0x80000000 0x7fffffff 0x0 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 255) = 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 170) = 0xffff 0x7fff 0x7fff 0xffff 0x1 0x9000 0x3 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 2) = 0xffff 0x7fff 0x7fff 0x0 0x1 0x2 0x3 0x8001 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0) = 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 2) = 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0xff 0x80 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 7) = 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 15) = 0x1 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 16) = 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +movmskpd(0xffffffffffffffff 0x8000000000000000 ) = 0x3 +psqrtpd(1 2 ) = 1 1.41421 +psqrtpd(0 -2 ) = 0 0xfff8000000000000 +psqrtpd(inf -inf ) = inf 0xfff8000000000000 +psqrtpd(0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +andpd(1 2 , 0 -2 ) = 0 2 +andpd(0 -2 , inf -inf ) = 0 -2 +andpd(1 2 , 0x7ff8000000000000 -0 ) = 1 0 +andpd(0 -2 , 0x7ff8000000000000 -0 ) = 0 -0 +andpd(inf -inf , 0x7ff8000000000000 -0 ) = inf -0 +andpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +andnpd(1 2 , 0 -2 ) = 0 -0 +andnpd(0 -2 , inf -inf ) = inf 1 +andnpd(1 2 , 0x7ff8000000000000 -0 ) = 3 -0 +andnpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +andnpd(inf -inf , 0x7ff8000000000000 -0 ) = 1.11254e-308 0 +andnpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0 0 +orpd(1 2 , 0 -2 ) = 1 -2 +orpd(0 -2 , inf -inf ) = inf -inf +orpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +orpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +orpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +orpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +xorpd(1 2 , 0 -2 ) = 1 -0 +xorpd(0 -2 , inf -inf ) = inf 1 +xorpd(1 2 , 0x7ff8000000000000 -0 ) = 3 -2 +xorpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +xorpd(inf -inf , 0x7ff8000000000000 -0 ) = 1.11254e-308 inf +xorpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0 0 +addpd(1 2 , 0 -2 ) = 1 0 +addpd(0 -2 , inf -inf ) = inf -inf +addpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +addpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +addpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +addpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +mulpd(1 2 , 0 -2 ) = 0 -4 +mulpd(0 -2 , inf -inf ) = 0xfff8000000000000 inf +mulpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +mulpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +mulpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0xfff8000000000000 +mulpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +subpd(1 2 , 0 -2 ) = 1 4 +subpd(0 -2 , inf -inf ) = -inf inf +subpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +subpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +subpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +subpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +minpd(1 2 , 0 -2 ) = 0 -2 +minpd(0 -2 , inf -inf ) = 0 -inf +minpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +minpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +minpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +minpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +divpd(1 2 , 0 -2 ) = inf -1 +divpd(0 -2 , inf -inf ) = 0 0 +divpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +divpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 inf +divpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 inf +divpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0xfff8000000000000 +maxpd(1 2 , 0 -2 ) = 1 2 +maxpd(0 -2 , inf -inf ) = inf -2 +maxpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +maxpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +maxpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +maxpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +punpcklbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x0 0x80 0x1 0x7f 0x5 0x0 0x15 0x1 0x20 0x2 0x80 0x3 0xff 0x81 0x0 +punpcklwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x8000 0x8000 0x7fff 0x7fff 0xffff 0x0 0xffff +punpckldq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x1 0x80000000 0x80000000 +ppacksswb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x80ff 0x7f 0x201 0x8003 0x7f80 0xffff 0x8050 0x80fe +pcmpgtb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x0 0xff 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0xff +pcmpgtw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x0 0xffff 0xffff 0x0 0xffff 0xffff 0x0 +pcmpgtd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0xffffffff 0xffffffff +packuswb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xff 0x201 0x3 0xff00 0x0 0x50 0x0 +punpckhbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xfe 0x8 0x84 0x7 0x72 0x81 0x52 0x6 0xa5 0xa 0x0 0xf 0xc0 0x10 0x32 0x1 +punpckhwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x50 0x2 0x9000 0x3 0xfffe 0x8001 0x8001 +punpckhdq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x7fffffff 0x5 0x0 0xfffffffe +ppackssdw(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x8000ffff 0x7fff 0x80000001 0xfffe0005 +punpcklqdq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xffffffffffffffff 0x1 +punpckhqdq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x8000000000000000 0x8000000000000000 +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0xffffffff 0xffffffff 0xffffffff +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0x7fffffff 0xffffffff 0xffffffff 0xffffffff +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0x3fff 0x2000 0x1fff 0x0 0x0 0x0 0x0 0x2000 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0x3fffffff 0x20000000 0x1fffffff 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 0) = 0xffffffffffffffff 0x8000000000000000 +psrlq(0xffffffffffffffff 0x8000000000000000 255) = 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 170) = 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 2) = 0x3fffffffffffffff 0x2000000000000000 +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0xffff 0xe000 0x1fff 0x0 0x0 0x0 0x0 0xe000 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0xffffffff 0xffffffff 0x0 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0xffffffff 0xffffffff 0x0 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0xffffffff 0xe0000000 0x1fffffff 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0xfffc 0x0 0xfffc 0x0 0x4 0x8 0xc 0x4 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0xfffffffc 0x0 0xfffffffc 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 0) = 0xffffffffffffffff 0x8000000000000000 +psllq(0xffffffffffffffff 0x8000000000000000 255) = 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 170) = 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 2) = 0xfffffffffffffffc 0x0 +pcmpeqb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +pcmpeqw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xffff +pcmpeqd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0xffffffff 0x0 0x0 +haddpd(1 2 , 0 -2 ) = 3 -2 +haddpd(0 -2 , inf -inf ) = -2 0xfff8000000000000 +haddpd(1 2 , 0x7ff8000000000000 -0 ) = 3 0x7ff8000000000000 +haddpd(0 -2 , 0x7ff8000000000000 -0 ) = -2 0x7ff8000000000000 +haddpd(inf -inf , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 0x7ff8000000000000 +haddpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0x7ff8000000000000 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x7fffffffffffffff 0x4000000000000000 +paddq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x0 0x0 +pmullw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x8000 0x8001 0x0 0x50 0x2000 0xfffa 0x1 +psubusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x7f 0x7a 0x0 0x0 0x0 0x0 0x81 0xf6 0x7d 0x0 0x4c 0x9b 0x0 0xb0 0x31 +psubusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x1 0x0 0x0 0x0 0x0 0x0 0x0 +pminub(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x1 0x5 0x0 0x1 0x2 0x3 0x0 0x8 0x7 0x72 0x6 0xa 0x0 0x10 0x1 +pand(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x3000000050000 0x2000408 +paddusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x84 0x15 0x21 0x82 0xff 0x81 0xff 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0xffff 0xffff 0xffff 0x51 0x9002 0xffff 0xffff +pmaxub(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x7f 0x15 0x20 0x80 0xff 0x81 0xfe 0x84 0x81 0x52 0xa5 0xf 0xc0 0x32 +pandn(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0xfc802015000100 0x1100f0a04810300 +pavgb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x80 0x41 0x42 0xb 0x11 0x41 0x81 0x41 0x83 0x46 0x7a 0x2c 0x58 0x8 0x68 0x1a +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0xffffffff 0x0 0x0 +pavgb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xc000 0x8000 0xbfff 0x8000 0x29 0x4801 0x8001 0x8001 +pmulhuw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x3fff 0x7ffe 0x0 0x0 0x1 0x2 0x4001 +pmulhw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xc000 0xffff 0x0 0x0 0xffff 0xffff 0x3fff +psubsb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x7a 0xeb 0xe1 0x7f 0x4 0x81 0xf6 0x80 0x7f 0x4c 0x9b 0xf1 0xb0 0x31 +psubsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x8000 0x7fff 0x1 0xffb1 0x7002 0x5 0x0 +pminsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x8000 0xffff 0xffff 0x1 0x9000 0xfffe 0x8001 +por(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x81ff8221157f81ff 0x33d00faf56f387fe +paddusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x7f 0x15 0x21 0x82 0x2 0x81 0x6 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0xffff 0x7ffe 0xffff 0x51 0x9002 0x1 0x8000 +pmaxsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x7fff 0x7fff 0x0 0x50 0x2 0x3 0x8001 +pxor(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x81fc8221157a81ff 0x33d00faf54f383f6 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xfffffffffffffffe 0x0 +pmuludq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x0 0x7ffffffb 0x2 +pmaddwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xc001 0x8001 0xffff 0x2050 0xffff 0xfffb 0x3ffe +psadbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x27 0x4 0x0 0x0 0x0 0x0 0x0 0x0 0x59 0x3 0x0 0x0 0x0 0x0 0x0 0x0 +psubb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x7f 0x7a 0xeb 0xe1 0x82 0x4 0x81 0xf6 0x7d 0xf1 0x4c 0x9b 0xf1 0xb0 0x31 +psubw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x1 0x8000 0x1 0xffb1 0x7002 0x5 0x0 +psubd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xfffffffe 0x0 0x7ffffffa 0x2 +psubq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xfffffffffffffffe 0x0 +paddb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x84 0x15 0x21 0x82 0x2 0x81 0x6 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0xffff 0x7ffe 0xffff 0x51 0x9002 0x1 0x2 +paddd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x80000004 0xfffffffe +pmovhlps(1 2 3 -4 , 0 -2 -10 0.5 ) = -10 0.5 3 -4 +unpcklps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 0 2 -2 +unpckhps(1 2 3 -4 , 0 -2 -10 0.5 ) = 3 -10 -4 0.5 +pmovhps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 2 0 -2 +psqrtps(1 2 3 -4 ) = 1 1.41421 1.73205 nan +psqrtps(0 -2 -10 0.5 ) = 0 nan nan 0.707107 +psqrtps(inf -inf -inf 1 ) = inf nan nan 1 +psqrtps(nan -0 nan inf ) = nan -0 nan inf +prcpps(nan -0 nan inf ) = nan -inf nan 0 +andps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 2 2 0 +andps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 -2 -8 0.5 +andps(1 2 3 -4 , nan -0 nan inf ) = 1 0 3 4 +andps(0 -2 -10 0.5 , nan -0 nan inf ) = 0 -0 -8 0.5 +andps(inf -inf -inf 1 , nan -0 nan inf ) = inf -0 -inf 1 +andps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +andnps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -0 -2.93874e-38 0.5 +andnps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf 1 0.25 1.17549e-38 +andnps(1 2 3 -4 , nan -0 nan inf ) = 3 -0 -1 0.5 +andnps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 0 0.375 4 +andnps(inf -inf -inf 1 , nan -0 nan inf ) = 5.87747e-39 0 5.87747e-39 2 +andnps(nan -0 nan inf , nan -0 nan inf ) = 0 0 0 0 +orps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 -2 -14 -inf +orps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -inf nan 1 +orps(1 2 3 -4 , nan -0 nan inf ) = nan -2 nan -inf +orps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan inf +orps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan inf +orps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +xorps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 -0 -4.11423e-38 -inf +xorps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf 1 0.3125 1.17549e-38 +xorps(1 2 3 -4 , nan -0 nan inf ) = 3 -2 -1 -0.5 +xorps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 2 0.4375 4 +xorps(inf -inf -inf 1 , nan -0 nan inf ) = 5.87747e-39 inf 5.87747e-39 2 +xorps(nan -0 nan inf , nan -0 nan inf ) = 0 0 0 0 +addps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 0 -7 -3.5 +addps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -inf -inf 1.5 +addps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan inf +addps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan inf +addps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan inf +addps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +mulps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -4 -30 -2 +mulps(0 -2 -10 0.5 , inf -inf -inf 1 ) = nan inf inf 0.5 +mulps(1 2 3 -4 , nan -0 nan inf ) = nan -0 nan -inf +mulps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 0 nan inf +mulps(inf -inf -inf 1 , nan -0 nan inf ) = nan nan nan inf +mulps(nan -0 nan inf , nan -0 nan inf ) = nan 0 nan inf +subps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 4 13 -4.5 +subps(0 -2 -10 0.5 , inf -inf -inf 1 ) = -inf inf inf -0.5 +subps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan -inf +subps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan -inf +subps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan -inf +subps(nan -0 nan inf , nan -0 nan inf ) = nan 0 nan nan +minps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -2 -10 -4 +minps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 -inf -inf 0.5 +minps(1 2 3 -4 , nan -0 nan inf ) = nan -0 nan -4 +minps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan 0.5 +minps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan 1 +minps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +divps(1 2 3 -4 , 0 -2 -10 0.5 ) = inf -1 -0.3 -8 +divps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 0 0 0.5 +divps(1 2 3 -4 , nan -0 nan inf ) = nan -inf nan -0 +divps(0 -2 -10 0.5 , nan -0 nan inf ) = nan inf nan 0 +divps(inf -inf -inf 1 , nan -0 nan inf ) = nan inf nan 0 +divps(nan -0 nan inf , nan -0 nan inf ) = nan nan nan nan +maxps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 2 3 0.5 +maxps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -2 -10 1 +maxps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan inf +maxps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -0 nan inf +maxps(inf -inf -inf 1 , nan -0 nan inf ) = nan -0 nan inf +maxps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 0) = 1 1 0 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 0) = 0 0 inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 0) = 1 1 nan nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 0) = 0 0 nan nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 0) = inf inf nan nan +shufps(nan -0 nan inf , nan -0 nan inf , 0) = nan nan nan nan +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 21) = 2 2 -2 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 21) = -2 -2 -inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 21) = 2 2 -0 nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 21) = -2 -2 -0 nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 21) = -inf -inf -0 nan +shufps(nan -0 nan inf , nan -0 nan inf , 21) = -0 -0 -0 nan +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 255) = -4 -4 0.5 0.5 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 255) = 0.5 0.5 1 1 +shufps(1 2 3 -4 , nan -0 nan inf , 255) = -4 -4 inf inf +shufps(0 -2 -10 0.5 , nan -0 nan inf , 255) = 0.5 0.5 inf inf +shufps(inf -inf -inf 1 , nan -0 nan inf , 255) = 1 1 inf inf +shufps(nan -0 nan inf , nan -0 nan inf , 255) = inf inf inf inf +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 2) = 3 1 0 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 2) = -10 0 inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 2) = 3 1 nan nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 2) = -10 0 nan nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 2) = -inf inf nan nan +shufps(nan -0 nan inf , nan -0 nan inf , 2) = nan nan nan nan +sqrtsd(1 2 , 1 2 ) = 1 2 +sqrtsd(1 2 , 0 -2 ) = 0 2 +sqrtsd(1 2 , inf -inf ) = inf 2 +sqrtsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +sqrtsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +sqrtsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +sqrtsd(1 2 , 2 1 ) = 1.41421 2 +sqrtsd(1 2 , -2 0 ) = 0xfff8000000000000 2 +sqrtsd(1 2 , -inf inf ) = 0xfff8000000000000 2 +sqrtsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +sqrtsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +sqrtsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +addsd(1 2 , 1 2 ) = 2 2 +addsd(1 2 , 0 -2 ) = 1 2 +addsd(1 2 , inf -inf ) = inf 2 +addsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +addsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +addsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +addsd(1 2 , 2 1 ) = 3 2 +addsd(1 2 , -2 0 ) = -1 2 +addsd(1 2 , -inf inf ) = -inf 2 +addsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +addsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +addsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +mulsd(1 2 , 1 2 ) = 1 2 +mulsd(1 2 , 0 -2 ) = 0 2 +mulsd(1 2 , inf -inf ) = inf 2 +mulsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +mulsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +mulsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +mulsd(1 2 , 2 1 ) = 2 2 +mulsd(1 2 , -2 0 ) = -2 2 +mulsd(1 2 , -inf inf ) = -inf 2 +mulsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +mulsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +mulsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +subsd(1 2 , 1 2 ) = 0 2 +subsd(1 2 , 0 -2 ) = 1 2 +subsd(1 2 , inf -inf ) = -inf 2 +subsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +subsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +subsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +subsd(1 2 , 2 1 ) = -1 2 +subsd(1 2 , -2 0 ) = 3 2 +subsd(1 2 , -inf inf ) = inf 2 +subsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +subsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +subsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +minsd(1 2 , 1 2 ) = 1 2 +minsd(1 2 , 0 -2 ) = 0 2 +minsd(1 2 , inf -inf ) = 1 2 +minsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +minsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +minsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +minsd(1 2 , 2 1 ) = 1 2 +minsd(1 2 , -2 0 ) = -2 2 +minsd(1 2 , -inf inf ) = -inf 2 +minsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +minsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +minsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +divsd(1 2 , 1 2 ) = 1 2 +divsd(1 2 , 0 -2 ) = inf 2 +divsd(1 2 , inf -inf ) = 0 2 +divsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +divsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +divsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +divsd(1 2 , 2 1 ) = 0.5 2 +divsd(1 2 , -2 0 ) = -0.5 2 +divsd(1 2 , -inf inf ) = -0 2 +divsd(1 2 , -0 0x7ff8000000000000 ) = -inf 2 +divsd(0 -2 , -0 0x7ff8000000000000 ) = 0xfff8000000000000 -2 +divsd(0 -2 , -0 0x7ff8000000000000 ) = 0xfff8000000000000 -2 +maxsd(1 2 , 1 2 ) = 1 2 +maxsd(1 2 , 0 -2 ) = 1 2 +maxsd(1 2 , inf -inf ) = inf 2 +maxsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +maxsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +maxsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +maxsd(1 2 , 2 1 ) = 2 2 +maxsd(1 2 , -2 0 ) = 1 2 +maxsd(1 2 , -inf inf ) = 1 2 +maxsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +maxsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +maxsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +cvtps2dq(1 2 3 -4 ) = 0x1 0x2 0x3 0xfffffffc +cvtps2dq(0 -2 -10 0.5 ) = 0x0 0xfffffffe 0xfffffff6 0x0 +cvtps2dq(inf -inf -inf 1 ) = 0x80000000 0x80000000 0x80000000 0x1 +cvtps2dq(nan -0 nan inf ) = 0x80000000 0x0 0x80000000 0x80000000 +dpps(1 2 3 -4 , 0 -2 -10 0.5 , 255) = -36 -36 -36 -36 +dpps(0 -2 -10 0.5 , inf -inf -inf 1 , 255) = nan nan nan nan +dpps(1 2 3 -4 , nan -0 nan inf , 255) = nan nan nan nan +dpps(0 -2 -10 0.5 , nan -0 nan inf , 255) = nan nan nan nan +dpps(inf -inf -inf 1 , nan -0 nan inf , 255) = nan nan nan nan +dpps(nan -0 nan inf , nan -0 nan inf , 255) = nan nan nan nan +dpps(1 2 3 -4 , 0 -2 -10 0.5 , 63) = -4 -4 -4 -4 +dpps(0 -2 -10 0.5 , inf -inf -inf 1 , 63) = nan nan nan nan +dpps(1 2 3 -4 , nan -0 nan inf , 63) = nan nan nan nan +dpps(0 -2 -10 0.5 , nan -0 nan inf , 63) = nan nan nan nan +dpps(inf -inf -inf 1 , nan -0 nan inf , 63) = nan nan nan nan +dpps(nan -0 nan inf , nan -0 nan inf , 63) = nan nan nan nan +dpps(1 2 3 -4 , 0 -2 -10 0.5 , 243) = -36 -36 0 0 +dpps(0 -2 -10 0.5 , inf -inf -inf 1 , 243) = nan nan 0 0 +dpps(1 2 3 -4 , nan -0 nan inf , 243) = nan nan 0 0 +dpps(0 -2 -10 0.5 , nan -0 nan inf , 243) = nan nan 0 0 +dpps(inf -inf -inf 1 , nan -0 nan inf , 243) = nan nan 0 0 +dpps(nan -0 nan inf , nan -0 nan inf , 243) = nan nan 0 0 +dpps(1 2 3 -4 , 0 -2 -10 0.5 , 83) = -30 -30 0 0 +dpps(0 -2 -10 0.5 , inf -inf -inf 1 , 83) = nan nan 0 0 +dpps(1 2 3 -4 , nan -0 nan inf , 83) = nan nan 0 0 +dpps(0 -2 -10 0.5 , nan -0 nan inf , 83) = nan nan 0 0 +dpps(inf -inf -inf 1 , nan -0 nan inf , 83) = nan nan 0 0 +dpps(nan -0 nan inf , nan -0 nan inf , 83) = nan nan 0 0 diff --git a/tests32/ref17_o2.txt b/tests32/ref17_o2.txt new file mode 100644 index 00000000..a954ed24 --- /dev/null +++ b/tests32/ref17_o2.txt @@ -0,0 +1,840 @@ +ucomiss 1.000000, 2.000000 => 0x203 +ucomiss 2.000000, 1.000000 => 0x202 +ucomiss -1.000000, 2.000000 => 0x203 +ucomiss 2.000000, -1.000000 => 0x202 +ucomiss -1.000000, 340282346638528859811704183484516925440.000000 => 0x203 +ucomiss 340282346638528859811704183484516925440.000000, -1.000000 => 0x202 +ucomiss -1.000000, -340282346638528859811704183484516925440.000000 => 0x202 +ucomiss -340282346638528859811704183484516925440.000000, -1.000000 => 0x203 +ucomiss 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0x202 +ucomiss -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0x203 +ucomiss -0.000000, 0.000000 => 0x242 +ucomiss 0.000000, -0.000000 => 0x242 +ucomiss -2.000000, -2.000000 => 0x242 +ucomiss 5.000000, 5.000000 => 0x242 +ucomiss 5.000000, inf => 0x203 +ucomiss inf, 5.000000 => 0x202 +ucomiss 5.000000, -inf => 0x202 +ucomiss -inf, 5.000000 => 0x203 +ucomiss 5.000000, nan => 0x203 +ucomiss nan, 5.000000 => 0x203 +ucomiss 5.000000, 5.000000 => 0x242 +ucomiss 5.000000, 5.000000 => 0x242 +ucomiss inf, inf => 0x242 +ucomiss -inf, inf => 0x203 +ucomiss inf, -inf => 0x202 +ucomiss nan, nan => 0x203 +minss 1, 2 => 1 +minss 2, 1 => 1 +minss -1, 2 => -1 +minss 2, -1 => -1 +minss -0, 0 => 0 +minss 0, -0 => -0 +minss 5, -10 => -10 +minss -10, 5 => -10 +minss -inf, -10 => -inf +minss -10, -inf => -inf +minss inf, -10 => -10 +minss -10, inf => -10 +minss nan, -10 => -10 +minss -10, nan => nan +minss nan, 3.40282e+38 => 3.40282e+38 +minss 3.40282e+38, nan => nan +minss -inf, 3.40282e+38 => -inf +minss 3.40282e+38, -inf => -inf +minss inf, 3.40282e+38 => 3.40282e+38 +minss 3.40282e+38, inf => 3.40282e+38 +maxss 1, 2 => 2 +maxss 2, 1 => 2 +maxss -1, 2 => 2 +maxss 2, -1 => 2 +maxss -0, 0 => 0 +maxss 0, -0 => -0 +maxss 5, -10 => 5 +maxss -10, 5 => 5 +maxss -inf, -10 => -10 +maxss -10, -inf => -10 +maxss inf, -10 => inf +maxss -10, inf => inf +maxss nan, -10 => -10 +maxss -10, nan => nan +maxss nan, 3.40282e+38 => 3.40282e+38 +maxss 3.40282e+38, nan => nan +maxss -inf, 3.40282e+38 => 3.40282e+38 +maxss 3.40282e+38, -inf => 3.40282e+38 +maxss inf, 3.40282e+38 => inf +maxss 3.40282e+38, inf => inf +cmpss 0 1.000000, 2.000000 => 0x0 +cmpss 0 2.000000, 1.000000 => 0x0 +cmpss 0 -1.000000, 2.000000 => 0x0 +cmpss 0 2.000000, -1.000000 => 0x0 +cmpss 0 -1.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 0 340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 0 -1.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 0 -340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 0 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 0 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 0 -0.000000, 0.000000 => 0xffffffff +cmpss 0 0.000000, -0.000000 => 0xffffffff +cmpss 0 -2.000000, -2.000000 => 0xffffffff +cmpss 0 5.000000, 5.000000 => 0xffffffff +cmpss 0 5.000000, inf => 0x0 +cmpss 0 inf, 5.000000 => 0x0 +cmpss 0 5.000000, -inf => 0x0 +cmpss 0 -inf, 5.000000 => 0x0 +cmpss 0 5.000000, nan => 0x0 +cmpss 0 nan, 5.000000 => 0x0 +cmpss 0 5.000000, 5.000000 => 0xffffffff +cmpss 0 5.000000, 5.000000 => 0xffffffff +cmpss 0 inf, inf => 0xffffffff +cmpss 0 -inf, inf => 0x0 +cmpss 0 inf, -inf => 0x0 +cmpss 0 nan, nan => 0x0 +cmpss 1 1.000000, 2.000000 => 0xffffffff +cmpss 1 2.000000, 1.000000 => 0x0 +cmpss 1 -1.000000, 2.000000 => 0xffffffff +cmpss 1 2.000000, -1.000000 => 0x0 +cmpss 1 -1.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 1 340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 1 -1.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 1 -340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 1 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 1 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 1 -0.000000, 0.000000 => 0x0 +cmpss 1 0.000000, -0.000000 => 0x0 +cmpss 1 -2.000000, -2.000000 => 0x0 +cmpss 1 5.000000, 5.000000 => 0x0 +cmpss 1 5.000000, inf => 0xffffffff +cmpss 1 inf, 5.000000 => 0x0 +cmpss 1 5.000000, -inf => 0x0 +cmpss 1 -inf, 5.000000 => 0xffffffff +cmpss 1 5.000000, nan => 0x0 +cmpss 1 nan, 5.000000 => 0x0 +cmpss 1 5.000000, 5.000000 => 0x0 +cmpss 1 5.000000, 5.000000 => 0x0 +cmpss 1 inf, inf => 0x0 +cmpss 1 -inf, inf => 0xffffffff +cmpss 1 inf, -inf => 0x0 +cmpss 1 nan, nan => 0x0 +cmpss 2 1.000000, 2.000000 => 0xffffffff +cmpss 2 2.000000, 1.000000 => 0x0 +cmpss 2 -1.000000, 2.000000 => 0xffffffff +cmpss 2 2.000000, -1.000000 => 0x0 +cmpss 2 -1.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 2 340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 2 -1.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 2 -340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 2 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 2 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 2 -0.000000, 0.000000 => 0xffffffff +cmpss 2 0.000000, -0.000000 => 0xffffffff +cmpss 2 -2.000000, -2.000000 => 0xffffffff +cmpss 2 5.000000, 5.000000 => 0xffffffff +cmpss 2 5.000000, inf => 0xffffffff +cmpss 2 inf, 5.000000 => 0x0 +cmpss 2 5.000000, -inf => 0x0 +cmpss 2 -inf, 5.000000 => 0xffffffff +cmpss 2 5.000000, nan => 0x0 +cmpss 2 nan, 5.000000 => 0x0 +cmpss 2 5.000000, 5.000000 => 0xffffffff +cmpss 2 5.000000, 5.000000 => 0xffffffff +cmpss 2 inf, inf => 0xffffffff +cmpss 2 -inf, inf => 0xffffffff +cmpss 2 inf, -inf => 0x0 +cmpss 2 nan, nan => 0x0 +cmpss 3 1.000000, 2.000000 => 0x0 +cmpss 3 2.000000, 1.000000 => 0x0 +cmpss 3 -1.000000, 2.000000 => 0x0 +cmpss 3 2.000000, -1.000000 => 0x0 +cmpss 3 -1.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 3 340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 3 -1.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 3 -340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 3 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 3 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 3 -0.000000, 0.000000 => 0x0 +cmpss 3 0.000000, -0.000000 => 0x0 +cmpss 3 -2.000000, -2.000000 => 0x0 +cmpss 3 5.000000, 5.000000 => 0x0 +cmpss 3 5.000000, inf => 0x0 +cmpss 3 inf, 5.000000 => 0x0 +cmpss 3 5.000000, -inf => 0x0 +cmpss 3 -inf, 5.000000 => 0x0 +cmpss 3 5.000000, nan => 0xffffffff +cmpss 3 nan, 5.000000 => 0xffffffff +cmpss 3 5.000000, 5.000000 => 0x0 +cmpss 3 5.000000, 5.000000 => 0x0 +cmpss 3 inf, inf => 0x0 +cmpss 3 -inf, inf => 0x0 +cmpss 3 inf, -inf => 0x0 +cmpss 3 nan, nan => 0xffffffff +cmpss 4 1.000000, 2.000000 => 0xffffffff +cmpss 4 2.000000, 1.000000 => 0xffffffff +cmpss 4 -1.000000, 2.000000 => 0xffffffff +cmpss 4 2.000000, -1.000000 => 0xffffffff +cmpss 4 -1.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 4 340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 4 -1.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 4 -340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 4 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 4 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 4 -0.000000, 0.000000 => 0x0 +cmpss 4 0.000000, -0.000000 => 0x0 +cmpss 4 -2.000000, -2.000000 => 0x0 +cmpss 4 5.000000, 5.000000 => 0x0 +cmpss 4 5.000000, inf => 0xffffffff +cmpss 4 inf, 5.000000 => 0xffffffff +cmpss 4 5.000000, -inf => 0xffffffff +cmpss 4 -inf, 5.000000 => 0xffffffff +cmpss 4 5.000000, nan => 0xffffffff +cmpss 4 nan, 5.000000 => 0xffffffff +cmpss 4 5.000000, 5.000000 => 0x0 +cmpss 4 5.000000, 5.000000 => 0x0 +cmpss 4 inf, inf => 0x0 +cmpss 4 -inf, inf => 0xffffffff +cmpss 4 inf, -inf => 0xffffffff +cmpss 4 nan, nan => 0xffffffff +cmpss 5 1.000000, 2.000000 => 0x0 +cmpss 5 2.000000, 1.000000 => 0xffffffff +cmpss 5 -1.000000, 2.000000 => 0x0 +cmpss 5 2.000000, -1.000000 => 0xffffffff +cmpss 5 -1.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 5 340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 5 -1.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 5 -340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 5 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 5 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 5 -0.000000, 0.000000 => 0xffffffff +cmpss 5 0.000000, -0.000000 => 0xffffffff +cmpss 5 -2.000000, -2.000000 => 0xffffffff +cmpss 5 5.000000, 5.000000 => 0xffffffff +cmpss 5 5.000000, inf => 0x0 +cmpss 5 inf, 5.000000 => 0xffffffff +cmpss 5 5.000000, -inf => 0xffffffff +cmpss 5 -inf, 5.000000 => 0x0 +cmpss 5 5.000000, nan => 0xffffffff +cmpss 5 nan, 5.000000 => 0xffffffff +cmpss 5 5.000000, 5.000000 => 0xffffffff +cmpss 5 5.000000, 5.000000 => 0xffffffff +cmpss 5 inf, inf => 0xffffffff +cmpss 5 -inf, inf => 0x0 +cmpss 5 inf, -inf => 0xffffffff +cmpss 5 nan, nan => 0xffffffff +cmpss 6 1.000000, 2.000000 => 0x0 +cmpss 6 2.000000, 1.000000 => 0xffffffff +cmpss 6 -1.000000, 2.000000 => 0x0 +cmpss 6 2.000000, -1.000000 => 0xffffffff +cmpss 6 -1.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 6 340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 6 -1.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 6 -340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 6 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 6 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 6 -0.000000, 0.000000 => 0x0 +cmpss 6 0.000000, -0.000000 => 0x0 +cmpss 6 -2.000000, -2.000000 => 0x0 +cmpss 6 5.000000, 5.000000 => 0x0 +cmpss 6 5.000000, inf => 0x0 +cmpss 6 inf, 5.000000 => 0xffffffff +cmpss 6 5.000000, -inf => 0xffffffff +cmpss 6 -inf, 5.000000 => 0x0 +cmpss 6 5.000000, nan => 0xffffffff +cmpss 6 nan, 5.000000 => 0xffffffff +cmpss 6 5.000000, 5.000000 => 0x0 +cmpss 6 5.000000, 5.000000 => 0x0 +cmpss 6 inf, inf => 0x0 +cmpss 6 -inf, inf => 0x0 +cmpss 6 inf, -inf => 0xffffffff +cmpss 6 nan, nan => 0xffffffff +cmpss 7 1.000000, 2.000000 => 0xffffffff +cmpss 7 2.000000, 1.000000 => 0xffffffff +cmpss 7 -1.000000, 2.000000 => 0xffffffff +cmpss 7 2.000000, -1.000000 => 0xffffffff +cmpss 7 -1.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 7 340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 7 -1.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 7 -340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 7 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 7 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 7 -0.000000, 0.000000 => 0xffffffff +cmpss 7 0.000000, -0.000000 => 0xffffffff +cmpss 7 -2.000000, -2.000000 => 0xffffffff +cmpss 7 5.000000, 5.000000 => 0xffffffff +cmpss 7 5.000000, inf => 0xffffffff +cmpss 7 inf, 5.000000 => 0xffffffff +cmpss 7 5.000000, -inf => 0xffffffff +cmpss 7 -inf, 5.000000 => 0xffffffff +cmpss 7 5.000000, nan => 0x0 +cmpss 7 nan, 5.000000 => 0x0 +cmpss 7 5.000000, 5.000000 => 0xffffffff +cmpss 7 5.000000, 5.000000 => 0xffffffff +cmpss 7 inf, inf => 0xffffffff +cmpss 7 -inf, inf => 0xffffffff +cmpss 7 inf, -inf => 0xffffffff +cmpss 7 nan, nan => 0x0 +pshufb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x2 0x2 0xff 0x0 0x0 0xff 0xfe 0x81 0x0 0x3 0x72 0x32 0xff 0x80 +phaddw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x7fff 0x3 0x8004 0xffff 0xfffe 0x9050 0x7fff +phaddd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x7fffffff 0x7fffffff 0x80000001 0x3 +phaddsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x7fff 0x3 0x8004 0xffff 0xfffe 0x9050 0x8000 +pmaddubsw(0x80ff 0x7f 0x201 0x8103 0x84fe 0x5272 0xa5 0x32c0 , 0x100 0x1505 0x8020 0xff 0x708 0x681 0xf0a 0x110 ) = 0x80 0x27b 0xff20 0xfffd 0xb8c 0xc95e 0x672 0xc32 +phsubw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x7fff 0xffff 0x8002 0x1 0x0 0x7050 0x7ffd +psignb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x80 0x7f 0x0 0x1 0xfe 0xfd 0x0 0xfe 0x84 0x8e 0x52 0xa5 0x0 0xc0 0x32 +psignw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x8000 0x8001 0x0 0x1 0xfffe 0xfffd 0x7fff +psignd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x80000000 0x7fffffff 0x0 +pmulhrsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x8001 0xffff 0x0 0x0 0xfffe 0x0 0x7ffe +pblendvps(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe , 0x1 0x80000000 0x80000005 0xfffe ) = 0xffffffff 0x80000000 0x5 0x0 +ptestz(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 0 +ptestc(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 0 +ptestnzc(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 1 +pabsb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 ) = 0x1 0x80 0x7f 0x0 0x1 0x2 0x3 0x7f 0x2 0x7c 0x72 0x52 0x5b 0x0 0x40 0x32 +pabsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0x1 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x7fff +pabsd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0x1 0x80000000 0x7fffffff 0x0 +pmovsxbw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0xffff 0xffff 0x0 0xff80 0xffff 0x7f 0x0 0x0 +pmovsxbd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffffffff 0xffffffff 0xffffffff 0xffffffff +pmovsxbq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovsxwd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffffffff 0xffffffff 0x0 0xffff8000 +pmovsxwq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovsxdq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovzxbw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0xff 0xff 0x0 0x80 0xff 0x7f 0x0 0x0 +pmovzxbd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xff 0xff 0xff 0xff +pmovzxbq(0xffffffffffffffff 0x8000000000000000 ) = 0xff 0xff +pmovzxwd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffff 0xffff 0x0 0x8000 +pmovzxwq(0xffffffffffffffff 0x8000000000000000 ) = 0xffff 0xffff +pmovzxdq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffff 0xffffffff +pminsd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x80000000 0x5 0xfffffffe +pmaxsd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x1 0x80000000 0x7fffffff 0x0 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 255) = 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 170) = 0xffff 0x7fff 0x7fff 0xffff 0x1 0x9000 0x3 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 2) = 0xffff 0x7fff 0x7fff 0x0 0x1 0x2 0x3 0x8001 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0) = 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 2) = 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0xff 0x80 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 7) = 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 15) = 0x1 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 16) = 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +movmskpd(0xffffffffffffffff 0x8000000000000000 ) = 0x3 +psqrtpd(1 2 ) = 1 1.41421 +psqrtpd(0 -2 ) = 0 0xfff8000000000000 +psqrtpd(inf -inf ) = inf 0xfff8000000000000 +psqrtpd(0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +andpd(1 2 , 0 -2 ) = 0 2 +andpd(0 -2 , inf -inf ) = 0 -2 +andpd(1 2 , 0x7ff8000000000000 -0 ) = 1 0 +andpd(0 -2 , 0x7ff8000000000000 -0 ) = 0 -0 +andpd(inf -inf , 0x7ff8000000000000 -0 ) = inf -0 +andpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +andnpd(1 2 , 0 -2 ) = 0 -0 +andnpd(0 -2 , inf -inf ) = inf 1 +andnpd(1 2 , 0x7ff8000000000000 -0 ) = 3 -0 +andnpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +andnpd(inf -inf , 0x7ff8000000000000 -0 ) = 1.11254e-308 0 +andnpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0 0 +orpd(1 2 , 0 -2 ) = 1 -2 +orpd(0 -2 , inf -inf ) = inf -inf +orpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +orpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +orpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +orpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +xorpd(1 2 , 0 -2 ) = 1 -0 +xorpd(0 -2 , inf -inf ) = inf 1 +xorpd(1 2 , 0x7ff8000000000000 -0 ) = 3 -2 +xorpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +xorpd(inf -inf , 0x7ff8000000000000 -0 ) = 1.11254e-308 inf +xorpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0 0 +addpd(1 2 , 0 -2 ) = 1 0 +addpd(0 -2 , inf -inf ) = inf -inf +addpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +addpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +addpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +addpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +mulpd(1 2 , 0 -2 ) = 0 -4 +mulpd(0 -2 , inf -inf ) = 0xfff8000000000000 inf +mulpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +mulpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +mulpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0xfff8000000000000 +mulpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +subpd(1 2 , 0 -2 ) = 1 4 +subpd(0 -2 , inf -inf ) = -inf inf +subpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +subpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +subpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +subpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +minpd(1 2 , 0 -2 ) = 0 -2 +minpd(0 -2 , inf -inf ) = 0 -inf +minpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +minpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +minpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +minpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +divpd(1 2 , 0 -2 ) = inf -1 +divpd(0 -2 , inf -inf ) = 0 0 +divpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +divpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 inf +divpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 inf +divpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0xfff8000000000000 +maxpd(1 2 , 0 -2 ) = 1 2 +maxpd(0 -2 , inf -inf ) = inf -2 +maxpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +maxpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +maxpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +maxpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +punpcklbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x0 0x80 0x1 0x7f 0x5 0x0 0x15 0x1 0x20 0x2 0x80 0x3 0xff 0x81 0x0 +punpcklwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x8000 0x8000 0x7fff 0x7fff 0xffff 0x0 0xffff +punpckldq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x1 0x80000000 0x80000000 +ppacksswb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x80ff 0x7f 0x201 0x8003 0x7f80 0xffff 0x8050 0x80fe +pcmpgtb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x0 0xff 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0xff +pcmpgtw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x0 0xffff 0xffff 0x0 0xffff 0xffff 0x0 +pcmpgtd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0xffffffff 0xffffffff +packuswb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xff 0x201 0x3 0xff00 0x0 0x50 0x0 +punpckhbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xfe 0x8 0x84 0x7 0x72 0x81 0x52 0x6 0xa5 0xa 0x0 0xf 0xc0 0x10 0x32 0x1 +punpckhwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x50 0x2 0x9000 0x3 0xfffe 0x8001 0x8001 +punpckhdq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x7fffffff 0x5 0x0 0xfffffffe +ppackssdw(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x8000ffff 0x7fff 0x80000001 0xfffe0005 +punpcklqdq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xffffffffffffffff 0x1 +punpckhqdq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x8000000000000000 0x8000000000000000 +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0xffffffff 0xffffffff 0xffffffff +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0x7fffffff 0xffffffff 0xffffffff 0xffffffff +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0x3fff 0x2000 0x1fff 0x0 0x0 0x0 0x0 0x2000 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0x3fffffff 0x20000000 0x1fffffff 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 0) = 0xffffffffffffffff 0x8000000000000000 +psrlq(0xffffffffffffffff 0x8000000000000000 255) = 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 170) = 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 2) = 0x3fffffffffffffff 0x2000000000000000 +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0xffff 0xe000 0x1fff 0x0 0x0 0x0 0x0 0xe000 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0xffffffff 0xffffffff 0x0 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0xffffffff 0xffffffff 0x0 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0xffffffff 0xe0000000 0x1fffffff 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0xfffc 0x0 0xfffc 0x0 0x4 0x8 0xc 0x4 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0xfffffffc 0x0 0xfffffffc 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 0) = 0xffffffffffffffff 0x8000000000000000 +psllq(0xffffffffffffffff 0x8000000000000000 255) = 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 170) = 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 2) = 0xfffffffffffffffc 0x0 +pcmpeqb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +pcmpeqw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xffff +pcmpeqd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0xffffffff 0x0 0x0 +haddpd(1 2 , 0 -2 ) = 3 -2 +haddpd(0 -2 , inf -inf ) = -2 0xfff8000000000000 +haddpd(1 2 , 0x7ff8000000000000 -0 ) = 3 0x7ff8000000000000 +haddpd(0 -2 , 0x7ff8000000000000 -0 ) = -2 0x7ff8000000000000 +haddpd(inf -inf , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 0x7ff8000000000000 +haddpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0x7ff8000000000000 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x7fffffffffffffff 0x4000000000000000 +paddq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x0 0x0 +pmullw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x8000 0x8001 0x0 0x50 0x2000 0xfffa 0x1 +psubusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x7f 0x7a 0x0 0x0 0x0 0x0 0x81 0xf6 0x7d 0x0 0x4c 0x9b 0x0 0xb0 0x31 +psubusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x1 0x0 0x0 0x0 0x0 0x0 0x0 +pminub(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x1 0x5 0x0 0x1 0x2 0x3 0x0 0x8 0x7 0x72 0x6 0xa 0x0 0x10 0x1 +pand(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x3000000050000 0x2000408 +paddusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x84 0x15 0x21 0x82 0xff 0x81 0xff 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0xffff 0xffff 0xffff 0x51 0x9002 0xffff 0xffff +pmaxub(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x7f 0x15 0x20 0x80 0xff 0x81 0xfe 0x84 0x81 0x52 0xa5 0xf 0xc0 0x32 +pandn(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0xfc802015000100 0x1100f0a04810300 +pavgb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x80 0x41 0x42 0xb 0x11 0x41 0x81 0x41 0x83 0x46 0x7a 0x2c 0x58 0x8 0x68 0x1a +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0xffffffff 0x0 0x0 +pavgb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xc000 0x8000 0xbfff 0x8000 0x29 0x4801 0x8001 0x8001 +pmulhuw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x3fff 0x7ffe 0x0 0x0 0x1 0x2 0x4001 +pmulhw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xc000 0xffff 0x0 0x0 0xffff 0xffff 0x3fff +psubsb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x7a 0xeb 0xe1 0x7f 0x4 0x81 0xf6 0x80 0x7f 0x4c 0x9b 0xf1 0xb0 0x31 +psubsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x8000 0x7fff 0x1 0xffb1 0x7002 0x5 0x0 +pminsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x8000 0xffff 0xffff 0x1 0x9000 0xfffe 0x8001 +por(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x81ff8221157f81ff 0x33d00faf56f387fe +paddusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x7f 0x15 0x21 0x82 0x2 0x81 0x6 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0xffff 0x7ffe 0xffff 0x51 0x9002 0x1 0x8000 +pmaxsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x7fff 0x7fff 0x0 0x50 0x2 0x3 0x8001 +pxor(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x81fc8221157a81ff 0x33d00faf54f383f6 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xfffffffffffffffe 0x0 +pmuludq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x0 0x7ffffffb 0x2 +pmaddwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xc001 0x8001 0xffff 0x2050 0xffff 0xfffb 0x3ffe +psadbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x27 0x4 0x0 0x0 0x0 0x0 0x0 0x0 0x59 0x3 0x0 0x0 0x0 0x0 0x0 0x0 +psubb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x7f 0x7a 0xeb 0xe1 0x82 0x4 0x81 0xf6 0x7d 0xf1 0x4c 0x9b 0xf1 0xb0 0x31 +psubw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x1 0x8000 0x1 0xffb1 0x7002 0x5 0x0 +psubd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xfffffffe 0x0 0x7ffffffa 0x2 +psubq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xfffffffffffffffe 0x0 +paddb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x84 0x15 0x21 0x82 0x2 0x81 0x6 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0xffff 0x7ffe 0xffff 0x51 0x9002 0x1 0x2 +paddd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x80000004 0xfffffffe +pmovhlps(1 2 3 -4 , 0 -2 -10 0.5 ) = -10 0.5 3 -4 +unpcklps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 0 2 -2 +unpckhps(1 2 3 -4 , 0 -2 -10 0.5 ) = 3 -10 -4 0.5 +pmovhps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 2 0 -2 +psqrtps(1 2 3 -4 ) = 1 1.41421 1.73205 nan +psqrtps(0 -2 -10 0.5 ) = 0 nan nan 0.707107 +psqrtps(inf -inf -inf 1 ) = inf nan nan 1 +psqrtps(nan -0 nan inf ) = nan -0 nan inf +prsqrtps(1 2 3 -4 ) = 1 0.71 0.58 nan +prsqrtps(0 -2 -10 0.5 ) = inf nan nan 1.4 +prsqrtps(inf -inf -inf 1 ) = 0 nan nan 1 +prsqrtps(nan -0 nan inf ) = nan -inf nan 0 +prcpps(1 2 3 -4 ) = 1 0.5 0.33 -0.25 +prcpps(0 -2 -10 0.5 ) = inf -0.5 -0.1 2 +prcpps(inf -inf -inf 1 ) = 0 -0 -0 1 +prcpps(nan -0 nan inf ) = nan -inf nan 0 +andps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 2 2 0 +andps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 -2 -8 0.5 +andps(1 2 3 -4 , nan -0 nan inf ) = 1 0 3 4 +andps(0 -2 -10 0.5 , nan -0 nan inf ) = 0 -0 -8 0.5 +andps(inf -inf -inf 1 , nan -0 nan inf ) = inf -0 -inf 1 +andps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +andnps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -0 -2.93874e-38 0.5 +andnps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf 1 0.25 1.17549e-38 +andnps(1 2 3 -4 , nan -0 nan inf ) = 3 -0 -1 0.5 +andnps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 0 0.375 4 +andnps(inf -inf -inf 1 , nan -0 nan inf ) = 5.87747e-39 0 5.87747e-39 2 +andnps(nan -0 nan inf , nan -0 nan inf ) = 0 0 0 0 +orps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 -2 -14 -inf +orps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -inf nan 1 +orps(1 2 3 -4 , nan -0 nan inf ) = nan -2 nan -inf +orps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan inf +orps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan inf +orps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +xorps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 -0 -4.11423e-38 -inf +xorps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf 1 0.3125 1.17549e-38 +xorps(1 2 3 -4 , nan -0 nan inf ) = 3 -2 -1 -0.5 +xorps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 2 0.4375 4 +xorps(inf -inf -inf 1 , nan -0 nan inf ) = 5.87747e-39 inf 5.87747e-39 2 +xorps(nan -0 nan inf , nan -0 nan inf ) = 0 0 0 0 +addps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 0 -7 -3.5 +addps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -inf -inf 1.5 +addps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan inf +addps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan inf +addps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan inf +addps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +mulps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -4 -30 -2 +mulps(0 -2 -10 0.5 , inf -inf -inf 1 ) = nan inf inf 0.5 +mulps(1 2 3 -4 , nan -0 nan inf ) = nan -0 nan -inf +mulps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 0 nan inf +mulps(inf -inf -inf 1 , nan -0 nan inf ) = nan nan nan inf +mulps(nan -0 nan inf , nan -0 nan inf ) = nan 0 nan inf +subps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 4 13 -4.5 +subps(0 -2 -10 0.5 , inf -inf -inf 1 ) = -inf inf inf -0.5 +subps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan -inf +subps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan -inf +subps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan -inf +subps(nan -0 nan inf , nan -0 nan inf ) = nan 0 nan nan +minps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -2 -10 -4 +minps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 -inf -inf 0.5 +minps(1 2 3 -4 , nan -0 nan inf ) = nan -0 nan -4 +minps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan 0.5 +minps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan 1 +minps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +divps(1 2 3 -4 , 0 -2 -10 0.5 ) = inf -1 -0.3 -8 +divps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 0 0 0.5 +divps(1 2 3 -4 , nan -0 nan inf ) = nan -inf nan -0 +divps(0 -2 -10 0.5 , nan -0 nan inf ) = nan inf nan 0 +divps(inf -inf -inf 1 , nan -0 nan inf ) = nan inf nan 0 +divps(nan -0 nan inf , nan -0 nan inf ) = nan nan nan nan +maxps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 2 3 0.5 +maxps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -2 -10 1 +maxps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan inf +maxps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -0 nan inf +maxps(inf -inf -inf 1 , nan -0 nan inf ) = nan -0 nan inf +maxps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 0) = 1 1 0 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 0) = 0 0 inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 0) = 1 1 nan nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 0) = 0 0 nan nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 0) = inf inf nan nan +shufps(nan -0 nan inf , nan -0 nan inf , 0) = nan nan nan nan +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 21) = 2 2 -2 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 21) = -2 -2 -inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 21) = 2 2 -0 nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 21) = -2 -2 -0 nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 21) = -inf -inf -0 nan +shufps(nan -0 nan inf , nan -0 nan inf , 21) = -0 -0 -0 nan +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 255) = -4 -4 0.5 0.5 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 255) = 0.5 0.5 1 1 +shufps(1 2 3 -4 , nan -0 nan inf , 255) = -4 -4 inf inf +shufps(0 -2 -10 0.5 , nan -0 nan inf , 255) = 0.5 0.5 inf inf +shufps(inf -inf -inf 1 , nan -0 nan inf , 255) = 1 1 inf inf +shufps(nan -0 nan inf , nan -0 nan inf , 255) = inf inf inf inf +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 2) = 3 1 0 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 2) = -10 0 inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 2) = 3 1 nan nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 2) = -10 0 nan nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 2) = -inf inf nan nan +shufps(nan -0 nan inf , nan -0 nan inf , 2) = nan nan nan nan +sqrtsd(1 2 , 1 2 ) = 1 2 +sqrtsd(1 2 , 0 -2 ) = 0 2 +sqrtsd(1 2 , inf -inf ) = inf 2 +sqrtsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +sqrtsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +sqrtsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +sqrtsd(1 2 , 2 1 ) = 1.41421 2 +sqrtsd(1 2 , -2 0 ) = 0xfff8000000000000 2 +sqrtsd(1 2 , -inf inf ) = 0xfff8000000000000 2 +sqrtsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +sqrtsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +sqrtsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +addsd(1 2 , 1 2 ) = 2 2 +addsd(1 2 , 0 -2 ) = 1 2 +addsd(1 2 , inf -inf ) = inf 2 +addsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +addsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +addsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +addsd(1 2 , 2 1 ) = 3 2 +addsd(1 2 , -2 0 ) = -1 2 +addsd(1 2 , -inf inf ) = -inf 2 +addsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +addsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +addsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +mulsd(1 2 , 1 2 ) = 1 2 +mulsd(1 2 , 0 -2 ) = 0 2 +mulsd(1 2 , inf -inf ) = inf 2 +mulsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +mulsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +mulsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +mulsd(1 2 , 2 1 ) = 2 2 +mulsd(1 2 , -2 0 ) = -2 2 +mulsd(1 2 , -inf inf ) = -inf 2 +mulsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +mulsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +mulsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +subsd(1 2 , 1 2 ) = 0 2 +subsd(1 2 , 0 -2 ) = 1 2 +subsd(1 2 , inf -inf ) = -inf 2 +subsd(1 2 , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 2 +subsd(0 -2 , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 -2 +subsd(inf -inf , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 -inf +subsd(1 2 , 2 1 ) = -1 2 +subsd(1 2 , -2 0 ) = 3 2 +subsd(1 2 , -inf inf ) = inf 2 +subsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +subsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +subsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +minsd(1 2 , 1 2 ) = 1 2 +minsd(1 2 , 0 -2 ) = 0 2 +minsd(1 2 , inf -inf ) = 1 2 +minsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +minsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +minsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +minsd(1 2 , 2 1 ) = 1 2 +minsd(1 2 , -2 0 ) = -2 2 +minsd(1 2 , -inf inf ) = -inf 2 +minsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +minsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +minsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +divsd(1 2 , 1 2 ) = 1 2 +divsd(1 2 , 0 -2 ) = inf 2 +divsd(1 2 , inf -inf ) = 0 2 +divsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +divsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +divsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +divsd(1 2 , 2 1 ) = 0.5 2 +divsd(1 2 , -2 0 ) = -0.5 2 +divsd(1 2 , -inf inf ) = -0 2 +divsd(1 2 , -0 0x7ff8000000000000 ) = -inf 2 +divsd(0 -2 , -0 0x7ff8000000000000 ) = 0xfff8000000000000 -2 +divsd(0 -2 , -0 0x7ff8000000000000 ) = 0xfff8000000000000 -2 +maxsd(1 2 , 1 2 ) = 1 2 +maxsd(1 2 , 0 -2 ) = 1 2 +maxsd(1 2 , inf -inf ) = inf 2 +maxsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +maxsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +maxsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +maxsd(1 2 , 2 1 ) = 2 2 +maxsd(1 2 , -2 0 ) = 1 2 +maxsd(1 2 , -inf inf ) = 1 2 +maxsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +maxsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +maxsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +cvttss2si(1) = 0x1 +cvttss2si(1.49) = 0x1 +cvttss2si(1.5) = 0x1 +cvttss2si(1.9) = 0x1 +cvttss2si(-1) = 0xffffffff +cvttss2si(-1.49) = 0xffffffff +cvttss2si(-1.5) = 0xffffffff +cvttss2si(-1.9) = 0xffffffff +cvttss2si(1e+30) = 0x7fffffff +cvttss2si(-1e+30) = 0x80000000 +cvttss2si(inf) = 0x7fffffff +cvttss2si(-inf) = 0x80000000 +cvttss2si(nan) = 0x0 +cvttsd2si(1) = 0x1 +cvttsd2si(1.49) = 0x1 +cvttsd2si(1.5) = 0x1 +cvttsd2si(1.9) = 0x1 +cvttsd2si(-1) = 0xffffffff +cvttsd2si(-1.49) = 0xffffffff +cvttsd2si(-1.5) = 0xffffffff +cvttsd2si(-1.9) = 0xffffffff +cvttsd2si(1e+300) = 0x80000000 +cvttsd2si(-1e+300) = 0x80000000 +cvttsd2si(inf) = 0x80000000 +cvttsd2si(-inf) = 0x80000000 +cvttsd2si(nan) = 0x80000000 +default rounding +cvtss2si(1) = 0x1 +cvtss2si(1.49) = 0x1 +cvtss2si(1.5) = 0x2 +cvtss2si(1.9) = 0x2 +cvtss2si(-1) = 0xffffffff +cvtss2si(-1.49) = 0xffffffff +cvtss2si(-1.5) = 0xfffffffe +cvtss2si(-1.9) = 0xfffffffe +cvtss2si(1e+30) = 0x80000000 +cvtss2si(-1e+30) = 0x80000000 +cvtss2si(inf) = 0x80000000 +cvtss2si(-inf) = 0x80000000 +cvtss2si(nan) = 0x80000000 +cvtsd2si(1) = 0x1 +cvtsd2si(1.49) = 0x1 +cvtsd2si(1.5) = 0x2 +cvtsd2si(1.9) = 0x2 +cvtsd2si(-1) = 0xffffffff +cvtsd2si(-1.49) = 0xffffffff +cvtsd2si(-1.5) = 0xfffffffe +cvtsd2si(-1.9) = 0xfffffffe +cvtsd2si(1e+300) = 0x80000000 +cvtsd2si(-1e+300) = 0x80000000 +cvtsd2si(inf) = 0x80000000 +cvtsd2si(-inf) = 0x80000000 +cvtsd2si(nan) = 0x80000000 +Round(0) +cvtss2si(1) = 0x1 +cvtss2si(1.49) = 0x1 +cvtss2si(1.5) = 0x2 +cvtss2si(1.9) = 0x2 +cvtss2si(-1) = 0xffffffff +cvtss2si(-1.49) = 0xffffffff +cvtss2si(-1.5) = 0xfffffffe +cvtss2si(-1.9) = 0xfffffffe +cvtss2si(1e+30) = 0x80000000 +cvtss2si(-1e+30) = 0x80000000 +cvtss2si(inf) = 0x80000000 +cvtss2si(-inf) = 0x80000000 +cvtss2si(nan) = 0x80000000 +cvtsd2si(1) = 0x1 +cvtsd2si(1.49) = 0x1 +cvtsd2si(1.5) = 0x2 +cvtsd2si(1.9) = 0x2 +cvtsd2si(-1) = 0xffffffff +cvtsd2si(-1.49) = 0xffffffff +cvtsd2si(-1.5) = 0xfffffffe +cvtsd2si(-1.9) = 0xfffffffe +cvtsd2si(1e+300) = 0x80000000 +cvtsd2si(-1e+300) = 0x80000000 +cvtsd2si(inf) = 0x80000000 +cvtsd2si(-inf) = 0x80000000 +cvtsd2si(nan) = 0x80000000 +cvtss2si(1.4) -> 1 cvtsi2ss -> 1 +cvtss2si(-2.9) -> -3 cvtsi2ss -> -3 +cvtss2si(1.6) -> 2 cvtsi2ss -> 2 +cvtss2si(1e+38) -> -2147483648 cvtsi2ss -> -2.14748e+09 +Round(1) +cvtss2si(1) = 0x1 +cvtss2si(1.49) = 0x1 +cvtss2si(1.5) = 0x1 +cvtss2si(1.9) = 0x1 +cvtss2si(-1) = 0xffffffff +cvtss2si(-1.49) = 0xfffffffe +cvtss2si(-1.5) = 0xfffffffe +cvtss2si(-1.9) = 0xfffffffe +cvtss2si(1e+30) = 0x80000000 +cvtss2si(-1e+30) = 0x80000000 +cvtss2si(inf) = 0x80000000 +cvtss2si(-inf) = 0x80000000 +cvtss2si(nan) = 0x80000000 +cvtsd2si(1) = 0x1 +cvtsd2si(1.49) = 0x1 +cvtsd2si(1.5) = 0x1 +cvtsd2si(1.9) = 0x1 +cvtsd2si(-1) = 0xffffffff +cvtsd2si(-1.49) = 0xfffffffe +cvtsd2si(-1.5) = 0xfffffffe +cvtsd2si(-1.9) = 0xfffffffe +cvtsd2si(1e+300) = 0x80000000 +cvtsd2si(-1e+300) = 0x80000000 +cvtsd2si(inf) = 0x80000000 +cvtsd2si(-inf) = 0x80000000 +cvtsd2si(nan) = 0x80000000 +cvtss2si(1.4) -> 1 cvtsi2ss -> 1 +cvtss2si(-2.9) -> -3 cvtsi2ss -> -3 +cvtss2si(1.6) -> 1 cvtsi2ss -> 1 +cvtss2si(1e+38) -> -2147483648 cvtsi2ss -> -2.14748e+09 +Round(2) +cvtss2si(1) = 0x1 +cvtss2si(1.49) = 0x2 +cvtss2si(1.5) = 0x2 +cvtss2si(1.9) = 0x2 +cvtss2si(-1) = 0xffffffff +cvtss2si(-1.49) = 0xffffffff +cvtss2si(-1.5) = 0xffffffff +cvtss2si(-1.9) = 0xffffffff +cvtss2si(1e+30) = 0x80000000 +cvtss2si(-1e+30) = 0x80000000 +cvtss2si(inf) = 0x80000000 +cvtss2si(-inf) = 0x80000000 +cvtss2si(nan) = 0x80000000 +cvtsd2si(1) = 0x1 +cvtsd2si(1.49) = 0x2 +cvtsd2si(1.5) = 0x2 +cvtsd2si(1.9) = 0x2 +cvtsd2si(-1) = 0xffffffff +cvtsd2si(-1.49) = 0xffffffff +cvtsd2si(-1.5) = 0xffffffff +cvtsd2si(-1.9) = 0xffffffff +cvtsd2si(1e+300) = 0x80000000 +cvtsd2si(-1e+300) = 0x80000000 +cvtsd2si(inf) = 0x80000000 +cvtsd2si(-inf) = 0x80000000 +cvtsd2si(nan) = 0x80000000 +cvtss2si(1.4) -> 2 cvtsi2ss -> 2 +cvtss2si(-2.9) -> -2 cvtsi2ss -> -2 +cvtss2si(1.6) -> 2 cvtsi2ss -> 2 +cvtss2si(1e+38) -> -2147483648 cvtsi2ss -> -2.14748e+09 +Round(3) +cvtss2si(1) = 0x1 +cvtss2si(1.49) = 0x1 +cvtss2si(1.5) = 0x1 +cvtss2si(1.9) = 0x1 +cvtss2si(-1) = 0xffffffff +cvtss2si(-1.49) = 0xffffffff +cvtss2si(-1.5) = 0xffffffff +cvtss2si(-1.9) = 0xffffffff +cvtss2si(1e+30) = 0x80000000 +cvtss2si(-1e+30) = 0x80000000 +cvtss2si(inf) = 0x80000000 +cvtss2si(-inf) = 0x80000000 +cvtss2si(nan) = 0x80000000 +cvtsd2si(1) = 0x1 +cvtsd2si(1.49) = 0x1 +cvtsd2si(1.5) = 0x1 +cvtsd2si(1.9) = 0x1 +cvtsd2si(-1) = 0xffffffff +cvtsd2si(-1.49) = 0xffffffff +cvtsd2si(-1.5) = 0xffffffff +cvtsd2si(-1.9) = 0xffffffff +cvtsd2si(1e+300) = 0x80000000 +cvtsd2si(-1e+300) = 0x80000000 +cvtsd2si(inf) = 0x80000000 +cvtsd2si(-inf) = 0x80000000 +cvtsd2si(nan) = 0x80000000 +cvtss2si(1.4) -> 1 cvtsi2ss -> 1 +cvtss2si(-2.9) -> -2 cvtsi2ss -> -2 +cvtss2si(1.6) -> 1 cvtsi2ss -> 1 +cvtss2si(1e+38) -> -2147483648 cvtsi2ss -> -2.14748e+09 diff --git a/tests32/ref18.txt b/tests32/ref18.txt new file mode 100644 index 00000000..38e983ce --- /dev/null +++ b/tests32/ref18.txt @@ -0,0 +1,2 @@ +sig = 11 +got bad_ptr diff --git a/tests32/ref19.txt b/tests32/ref19.txt new file mode 100644 index 00000000..0b90c207 --- /dev/null +++ b/tests32/ref19.txt @@ -0,0 +1,222 @@ +FUCOMI 0x0 0x4082c00000000000 --C +FUCOMPP 0x0 0x4082c00000000000 --C +FRNDINT 0x0 => 0x0 +FRNDINT 0x4082c00000000000 => 0x4082c00000000000 +FISTP 0x0 => word: 0 +FISTP 0x4082c00000000000 => word: 258 +FISTP 0x0 => long: 0 +FISTP 0x4082c00000000000 => long: 258 +FISTP 0x0 => quad: 0 +FISTP 0x4082c00000000000 => quad: 258 +FUCOMI 0x4082c00000000000 0x0 --- +FUCOMPP 0x4082c00000000000 0x0 --- +FRNDINT 0x4082c00000000000 => 0x4082c00000000000 +FRNDINT 0x0 => 0x0 +FISTP 0x4082c00000000000 => word: 258 +FISTP 0x0 => word: 0 +FISTP 0x4082c00000000000 => long: 258 +FISTP 0x0 => long: 0 +FISTP 0x4082c00000000000 => quad: 258 +FISTP 0x0 => quad: 0 +FUCOMI 0x8000000000000000 0x4082c00000000000 --C +FUCOMPP 0x8000000000000000 0x4082c00000000000 --C +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FRNDINT 0x4082c00000000000 => 0x4082c00000000000 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x4082c00000000000 => word: 258 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x4082c00000000000 => long: 258 +FISTP 0x8000000000000000 => quad: 0 +FISTP 0x4082c00000000000 => quad: 258 +FUCOMI 0x4082c00000000000 0x8000000000000000 --- +FUCOMPP 0x4082c00000000000 0x8000000000000000 --- +FRNDINT 0x4082c00000000000 => 0x4082c00000000000 +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FISTP 0x4082c00000000000 => word: 258 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x4082c00000000000 => long: 258 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x4082c00000000000 => quad: 258 +FISTP 0x8000000000000000 => quad: 0 +FUCOMI 0x8000000000000000 0x0 Z-- +FUCOMPP 0x8000000000000000 0x0 Z-- +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FRNDINT 0x0 => 0x0 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x0 => word: 0 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x0 => long: 0 +FISTP 0x8000000000000000 => quad: 0 +FISTP 0x0 => quad: 0 +FUCOMI 0x0 0x8000000000000000 Z-- +FUCOMPP 0x0 0x8000000000000000 Z-- +FRNDINT 0x0 => 0x0 +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FISTP 0x0 => word: 0 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x0 => long: 0 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x0 => quad: 0 +FISTP 0x8000000000000000 => quad: 0 +FUCOMI 0x8000000000000000 0x3ff0000000000000 --C +FUCOMPP 0x8000000000000000 0x3ff0000000000000 --C +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x8000000000000000 => quad: 0 +FISTP 0x3ff0000000000000 => quad: 1 +FUCOMI 0x3ff0000000000000 0x8000000000000000 --- +FUCOMPP 0x3ff0000000000000 0x8000000000000000 --- +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x3ff0000000000000 => quad: 1 +FISTP 0x8000000000000000 => quad: 0 +FUCOMI 0x3ff0000000000000 0x3fe89d9000000000 --- +FUCOMPP 0x3ff0000000000000 0x3fe89d9000000000 --- +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FRNDINT 0x3fe89d9000000000 => 0x0 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x3fe89d9000000000 => word: 0 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x3fe89d9000000000 => long: 0 +FISTP 0x3ff0000000000000 => quad: 1 +FISTP 0x3fe89d9000000000 => quad: 0 +FUCOMI 0x3fe89d9000000000 0x3ff0000000000000 --C +FUCOMPP 0x3fe89d9000000000 0x3ff0000000000000 --C +FRNDINT 0x3fe89d9000000000 => 0x0 +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FISTP 0x3fe89d9000000000 => word: 0 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x3fe89d9000000000 => long: 0 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x3fe89d9000000000 => quad: 0 +FISTP 0x3ff0000000000000 => quad: 1 +FUCOMI 0x3ff0000000000000 0x7ff0000000000000 --C +FUCOMPP 0x3ff0000000000000 0x7ff0000000000000 --C +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FRNDINT 0x7ff0000000000000 => 0x7ff0000000000000 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x7ff0000000000000 => word: 8000 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x7ff0000000000000 => long: 80000000 +FISTP 0x3ff0000000000000 => quad: 1 +FISTP 0x7ff0000000000000 => quad: 8000000000000000 +FUCOMI 0x7ff0000000000000 0x3ff0000000000000 --- +FUCOMPP 0x7ff0000000000000 0x3ff0000000000000 --- +FRNDINT 0x7ff0000000000000 => 0x7ff0000000000000 +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FISTP 0x7ff0000000000000 => word: 8000 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x7ff0000000000000 => long: 80000000 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x7ff0000000000000 => quad: 8000000000000000 +FISTP 0x3ff0000000000000 => quad: 1 +FUCOMI 0xfff0000000000000 0x7ff0000000000000 --C +FUCOMPP 0xfff0000000000000 0x7ff0000000000000 --C +FRNDINT 0xfff0000000000000 => 0xfff0000000000000 +FRNDINT 0x7ff0000000000000 => 0x7ff0000000000000 +FISTP 0xfff0000000000000 => word: 8000 +FISTP 0x7ff0000000000000 => word: 8000 +FISTP 0xfff0000000000000 => long: 80000000 +FISTP 0x7ff0000000000000 => long: 80000000 +FISTP 0xfff0000000000000 => quad: 8000000000000000 +FISTP 0x7ff0000000000000 => quad: 8000000000000000 +FUCOMI 0x7ff0000000000000 0xfff0000000000000 --- +FUCOMPP 0x7ff0000000000000 0xfff0000000000000 --- +FRNDINT 0x7ff0000000000000 => 0x7ff0000000000000 +FRNDINT 0xfff0000000000000 => 0xfff0000000000000 +FISTP 0x7ff0000000000000 => word: 8000 +FISTP 0xfff0000000000000 => word: 8000 +FISTP 0x7ff0000000000000 => long: 80000000 +FISTP 0xfff0000000000000 => long: 80000000 +FISTP 0x7ff0000000000000 => quad: 8000000000000000 +FISTP 0xfff0000000000000 => quad: 8000000000000000 +FUCOMI 0x3ff0002ca0000000 0xaeff000025000000 --- +FUCOMPP 0x3ff0002ca0000000 0xaeff000025000000 --- +FRNDINT 0x3ff0002ca0000000 => 0x3ff0000000000000 +FRNDINT 0xaeff000025000000 => 0x8000000000000000 +FISTP 0x3ff0002ca0000000 => word: 1 +FISTP 0xaeff000025000000 => word: 0 +FISTP 0x3ff0002ca0000000 => long: 1 +FISTP 0xaeff000025000000 => long: 0 +FISTP 0x3ff0002ca0000000 => quad: 1 +FISTP 0xaeff000025000000 => quad: 0 +FUCOMI 0xaeff000025000000 0x3ff0002ca0000000 --C +FUCOMPP 0xaeff000025000000 0x3ff0002ca0000000 --C +FRNDINT 0xaeff000025000000 => 0x8000000000000000 +FRNDINT 0x3ff0002ca0000000 => 0x3ff0000000000000 +FISTP 0xaeff000025000000 => word: 0 +FISTP 0x3ff0002ca0000000 => word: 1 +FISTP 0xaeff000025000000 => long: 0 +FISTP 0x3ff0002ca0000000 => long: 1 +FISTP 0xaeff000025000000 => quad: 0 +FISTP 0x3ff0002ca0000000 => quad: 1 +FUCOMI 0x3ff0000050000000 0xc082c00000000000 --- +FUCOMPP 0x3ff0000050000000 0xc082c00000000000 --- +FRNDINT 0x3ff0000050000000 => 0x3ff0000000000000 +FRNDINT 0xc082c00000000000 => 0xc082c00000000000 +FISTP 0x3ff0000050000000 => word: 1 +FISTP 0xc082c00000000000 => word: fda8 +FISTP 0x3ff0000050000000 => long: 1 +FISTP 0xc082c00000000000 => long: fffffda8 +FISTP 0x3ff0000050000000 => quad: 1 +FISTP 0xc082c00000000000 => quad: fffffffffffffda8 +FUCOMI 0xc082c00000000000 0x3ff0000050000000 --C +FUCOMPP 0xc082c00000000000 0x3ff0000050000000 --C +FRNDINT 0xc082c00000000000 => 0xc082c00000000000 +FRNDINT 0x3ff0000050000000 => 0x3ff0000000000000 +FISTP 0xc082c00000000000 => word: fda8 +FISTP 0x3ff0000050000000 => word: 1 +FISTP 0xc082c00000000000 => long: fffffda8 +FISTP 0x3ff0000050000000 => long: 1 +FISTP 0xc082c00000000000 => quad: fffffffffffffda8 +FISTP 0x3ff0000050000000 => quad: 1 +FUCOMI 0x0 0x7ff8000000000001 ZPC +FUCOMPP 0x0 0x7ff8000000000001 ZPC +FRNDINT 0x0 => 0x0 +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FISTP 0x0 => word: 0 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x0 => long: 0 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x0 => quad: 0 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 +FUCOMI 0x7ff8000000000001 0x0 ZPC +FUCOMPP 0x7ff8000000000001 0x0 ZPC +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FRNDINT 0x0 => 0x0 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x0 => word: 0 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x0 => long: 0 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 +FISTP 0x0 => quad: 0 +FUCOMI 0x7ff8000000000001 0x7ff8000000000001 ZPC +FUCOMPP 0x7ff8000000000001 0x7ff8000000000001 ZPC +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 +FUCOMI 0x7ff8000000000001 0x7ff8000000000001 ZPC +FUCOMPP 0x7ff8000000000001 0x7ff8000000000001 ZPC +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 + +Done diff --git a/tests32/ref20.txt b/tests32/ref20.txt new file mode 100644 index 00000000..2646fa37 --- /dev/null +++ b/tests32/ref20.txt @@ -0,0 +1,11 @@ +SDHLD/SAR/IDIV 0x2d0 0x500 => 0x0 / 0x9000 (47185920/1280 => 36864 + 0) +SDHLD/SAR/IDIV 0xfffffa5d 0x186a0 => 0xfffef4a0 / 0xfffffc4f (281474882142208/100000 => -945 + -68448) +SDHLD/SAR/IDIV 0x1701 0x186a0 => 0xa220 / 0xf13 (385941504/100000 => 3859 + 41504) +SDHLD/SAR/IDIV 0xffff9a19 0x186a0 => 0xffff6d00 / 0xffffbd38 (281473267073024/100000 => -17096 + -37632) +SDHLD/SAR/IDIV 0xffffe7f3 0x186a0 => 0xffffebe0 / 0xfffff03d (281474573205504/100000 => -4035 + -5152) +SDHLD/SAR/IDIV 0x15840 0x186a0 => 0xdd20 / 0xe19b (5775556608/100000 => 57755 + 56608) +SDHLD/SAR/IDIV 0xff451330 0x186a0 => 0xfffee8a0 / 0xff857f2f (280672139739136/100000 => -8028369 + -71520) +SDHLD/SAR/IDIV 0xffff626a 0x186a0 => 0xffff2fc0 / 0xffff98ba (281472332857344/100000 => -26438 + -53312) +SDHLD/SAR/IDIV 0x9120 0x186a0 => 0x16d20 / 0x5f1b (2434793472/100000 => 24347 + 93472) + +Done diff --git a/tests32/ref21.txt b/tests32/ref21.txt new file mode 100644 index 00000000..7b20e612 --- /dev/null +++ b/tests32/ref21.txt @@ -0,0 +1 @@ +2/1 diff --git a/tests32/ref22.txt b/tests32/ref22.txt new file mode 100644 index 00000000..8949329d --- /dev/null +++ b/tests32/ref22.txt @@ -0,0 +1,1248 @@ +enc (0x00000000000000000000000000000000, 0x00000000000000000000000000000000) = 0x63636363636363636363636363636363 +enclast(0x00000000000000000000000000000000, 0x00000000000000000000000000000000) = 0x63636363636363636363636363636363 +dec (0x00000000000000000000000000000000, 0x00000000000000000000000000000000) = 0x52525252525252525252525252525252 +declast(0x00000000000000000000000000000000, 0x00000000000000000000000000000000) = 0x52525252525252525252525252525252 +enc (0x00000000000000000000000000000000, 0x10000000000000001111000000001111) = 0x73636363636363637272636363637272 +enclast(0x00000000000000000000000000000000, 0x10000000000000001111000000001111) = 0x73636363636363637272636363637272 +dec (0x00000000000000000000000000000000, 0x10000000000000001111000000001111) = 0x42525252525252524343525252524343 +declast(0x00000000000000000000000000000000, 0x10000000000000001111000000001111) = 0x42525252525252524343525252524343 +enc (0x00000000000000000000000000000000, 0x20000000000000002222000000002222) = 0x43636363636363634141636363634141 +enclast(0x00000000000000000000000000000000, 0x20000000000000002222000000002222) = 0x43636363636363634141636363634141 +dec (0x00000000000000000000000000000000, 0x20000000000000002222000000002222) = 0x72525252525252527070525252527070 +declast(0x00000000000000000000000000000000, 0x20000000000000002222000000002222) = 0x72525252525252527070525252527070 +enc (0x00000000000000000000000000000000, 0x30000000000000003333000000003333) = 0x53636363636363635050636363635050 +enclast(0x00000000000000000000000000000000, 0x30000000000000003333000000003333) = 0x53636363636363635050636363635050 +dec (0x00000000000000000000000000000000, 0x30000000000000003333000000003333) = 0x62525252525252526161525252526161 +declast(0x00000000000000000000000000000000, 0x30000000000000003333000000003333) = 0x62525252525252526161525252526161 +enc (0x00000000000000000000000000000000, 0x40000000000000004444000000004444) = 0x23636363636363632727636363632727 +enclast(0x00000000000000000000000000000000, 0x40000000000000004444000000004444) = 0x23636363636363632727636363632727 +dec (0x00000000000000000000000000000000, 0x40000000000000004444000000004444) = 0x12525252525252521616525252521616 +declast(0x00000000000000000000000000000000, 0x40000000000000004444000000004444) = 0x12525252525252521616525252521616 +enc (0x00000000000000000000000000000000, 0x50000000000000005555000000005555) = 0x33636363636363633636636363633636 +enclast(0x00000000000000000000000000000000, 0x50000000000000005555000000005555) = 0x33636363636363633636636363633636 +dec (0x00000000000000000000000000000000, 0x50000000000000005555000000005555) = 0x02525252525252520707525252520707 +declast(0x00000000000000000000000000000000, 0x50000000000000005555000000005555) = 0x02525252525252520707525252520707 +enc (0x00000000000000000000000000000000, 0x60000000000000006666000000006666) = 0x03636363636363630505636363630505 +enclast(0x00000000000000000000000000000000, 0x60000000000000006666000000006666) = 0x03636363636363630505636363630505 +dec (0x00000000000000000000000000000000, 0x60000000000000006666000000006666) = 0x32525252525252523434525252523434 +declast(0x00000000000000000000000000000000, 0x60000000000000006666000000006666) = 0x32525252525252523434525252523434 +enc (0x00000000000000000000000000000000, 0x70000000000000007777000000007777) = 0x13636363636363631414636363631414 +enclast(0x00000000000000000000000000000000, 0x70000000000000007777000000007777) = 0x13636363636363631414636363631414 +dec (0x00000000000000000000000000000000, 0x70000000000000007777000000007777) = 0x22525252525252522525525252522525 +declast(0x00000000000000000000000000000000, 0x70000000000000007777000000007777) = 0x22525252525252522525525252522525 +enc (0x00000000000000000000000000000000, 0x80000000000000008888000000008888) = 0xE363636363636363EBEB63636363EBEB +enclast(0x00000000000000000000000000000000, 0x80000000000000008888000000008888) = 0xE363636363636363EBEB63636363EBEB +dec (0x00000000000000000000000000000000, 0x80000000000000008888000000008888) = 0xD252525252525252DADA52525252DADA +declast(0x00000000000000000000000000000000, 0x80000000000000008888000000008888) = 0xD252525252525252DADA52525252DADA +enc (0x00000000000000000000000000000000, 0x90000000000000009999000000009999) = 0xF363636363636363FAFA63636363FAFA +enclast(0x00000000000000000000000000000000, 0x90000000000000009999000000009999) = 0xF363636363636363FAFA63636363FAFA +dec (0x00000000000000000000000000000000, 0x90000000000000009999000000009999) = 0xC252525252525252CBCB52525252CBCB +declast(0x00000000000000000000000000000000, 0x90000000000000009999000000009999) = 0xC252525252525252CBCB52525252CBCB +enc (0x00000000000000000000000000000000, 0xA000000000000000AAAA00000000AAAA) = 0xC363636363636363C9C963636363C9C9 +enclast(0x00000000000000000000000000000000, 0xA000000000000000AAAA00000000AAAA) = 0xC363636363636363C9C963636363C9C9 +dec (0x00000000000000000000000000000000, 0xA000000000000000AAAA00000000AAAA) = 0xF252525252525252F8F852525252F8F8 +declast(0x00000000000000000000000000000000, 0xA000000000000000AAAA00000000AAAA) = 0xF252525252525252F8F852525252F8F8 +enc (0x00000000000000000000000000000000, 0xB000000000000000BBBB00000000BBBB) = 0xD363636363636363D8D863636363D8D8 +enclast(0x00000000000000000000000000000000, 0xB000000000000000BBBB00000000BBBB) = 0xD363636363636363D8D863636363D8D8 +dec (0x00000000000000000000000000000000, 0xB000000000000000BBBB00000000BBBB) = 0xE252525252525252E9E952525252E9E9 +declast(0x00000000000000000000000000000000, 0xB000000000000000BBBB00000000BBBB) = 0xE252525252525252E9E952525252E9E9 +enc (0x00000000000000000000000000000000, 0xC000000000000000CCCC00000000CCCC) = 0xA363636363636363AFAF63636363AFAF +enclast(0x00000000000000000000000000000000, 0xC000000000000000CCCC00000000CCCC) = 0xA363636363636363AFAF63636363AFAF +dec (0x00000000000000000000000000000000, 0xC000000000000000CCCC00000000CCCC) = 0x92525252525252529E9E525252529E9E +declast(0x00000000000000000000000000000000, 0xC000000000000000CCCC00000000CCCC) = 0x92525252525252529E9E525252529E9E +enc (0x00000000000000000000000000000000, 0xD000000000000000DDDD00000000DDDD) = 0xB363636363636363BEBE63636363BEBE +enclast(0x00000000000000000000000000000000, 0xD000000000000000DDDD00000000DDDD) = 0xB363636363636363BEBE63636363BEBE +dec (0x00000000000000000000000000000000, 0xD000000000000000DDDD00000000DDDD) = 0x82525252525252528F8F525252528F8F +declast(0x00000000000000000000000000000000, 0xD000000000000000DDDD00000000DDDD) = 0x82525252525252528F8F525252528F8F +enc (0x00000000000000000000000000000000, 0xE000000000000000EEEE00000000EEEE) = 0x83636363636363638D8D636363638D8D +enclast(0x00000000000000000000000000000000, 0xE000000000000000EEEE00000000EEEE) = 0x83636363636363638D8D636363638D8D +dec (0x00000000000000000000000000000000, 0xE000000000000000EEEE00000000EEEE) = 0xB252525252525252BCBC52525252BCBC +declast(0x00000000000000000000000000000000, 0xE000000000000000EEEE00000000EEEE) = 0xB252525252525252BCBC52525252BCBC +enc (0x00000000000000000000000000000000, 0xF000000000000000FFFF00000000FFFF) = 0x93636363636363639C9C636363639C9C +enclast(0x00000000000000000000000000000000, 0xF000000000000000FFFF00000000FFFF) = 0x93636363636363639C9C636363639C9C +dec (0x00000000000000000000000000000000, 0xF000000000000000FFFF00000000FFFF) = 0xA252525252525252ADAD52525252ADAD +declast(0x00000000000000000000000000000000, 0xF000000000000000FFFF00000000FFFF) = 0xA252525252525252ADAD52525252ADAD +keygenassist(0x00000000000000000000000000000000, 0x00) = 0x63636363636363636363636363636363 +keygenassist(0x00000000000000000000000000000000, 0x01) = 0x63636362636363636363636263636363 +keygenassist(0x00000000000000000000000000000000, 0x02) = 0x63636361636363636363636163636363 +keygenassist(0x00000000000000000000000000000000, 0x04) = 0x63636367636363636363636763636363 +keygenassist(0x00000000000000000000000000000000, 0x08) = 0x6363636B636363636363636B63636363 +keygenassist(0x00000000000000000000000000000000, 0x10) = 0x63636373636363636363637363636363 +keygenassist(0x00000000000000000000000000000000, 0x38) = 0x6363635B636363636363635B63636363 +keygenassist(0x00000000000000000000000000000000, 0x4F) = 0x6363632C636363636363632C63636363 +keygenassist(0x00000000000000000000000000000000, 0xFF) = 0x6363639C636363636363639C63636363 +imc (0x00000000000000000000000000000000) = 0x00000000000000000000000000000000 +pclmul(0x00000000000000000000000000000000, 0x00) = 0x00000000000000000000000000000000 +pclmul(0x00000000000000000000000000000000, 0x01) = 0x00000000000000000000000000000000 +pclmul(0x00000000000000000000000000000000, 0x10) = 0x00000000000000000000000000000000 +pclmul(0x00000000000000000000000000000000, 0xFF) = 0x00000000000000000000000000000000 +enc (0x10000000000000001111000000001111, 0x00000000000000000000000000000000) = 0x635B82BABA5B82826363636312622B13 +enclast(0x10000000000000001111000000001111, 0x00000000000000000000000000000000) = 0x638282638263636363636363CA636382 +dec (0x10000000000000001111000000001111, 0x00000000000000000000000000000000) = 0x1C2665EEDD4BAF17EE1C266511D9A068 +declast(0x10000000000000001111000000001111, 0x00000000000000000000000000000000) = 0x52E352527C5252525252E352E35252E3 +enc (0x10000000000000001111000000001111, 0x10000000000000001111000000001111) = 0x735B82BABA5B82827272636312623A02 +enclast(0x10000000000000001111000000001111, 0x10000000000000001111000000001111) = 0x738282638263636372726363CA637293 +dec (0x10000000000000001111000000001111, 0x10000000000000001111000000001111) = 0x0C2665EEDD4BAF17FF0D266511D9B179 +declast(0x10000000000000001111000000001111, 0x10000000000000001111000000001111) = 0x42E352527C5252524343E352E35243F2 +enc (0x10000000000000001111000000001111, 0x20000000000000002222000000002222) = 0x435B82BABA5B82824141636312620931 +enclast(0x10000000000000001111000000001111, 0x20000000000000002222000000002222) = 0x438282638263636341416363CA6341A0 +dec (0x10000000000000001111000000001111, 0x20000000000000002222000000002222) = 0x3C2665EEDD4BAF17CC3E266511D9824A +declast(0x10000000000000001111000000001111, 0x20000000000000002222000000002222) = 0x72E352527C5252527070E352E35270C1 +enc (0x10000000000000001111000000001111, 0x30000000000000003333000000003333) = 0x535B82BABA5B82825050636312621820 +enclast(0x10000000000000001111000000001111, 0x30000000000000003333000000003333) = 0x538282638263636350506363CA6350B1 +dec (0x10000000000000001111000000001111, 0x30000000000000003333000000003333) = 0x2C2665EEDD4BAF17DD2F266511D9935B +declast(0x10000000000000001111000000001111, 0x30000000000000003333000000003333) = 0x62E352527C5252526161E352E35261D0 +enc (0x10000000000000001111000000001111, 0x40000000000000004444000000004444) = 0x235B82BABA5B82822727636312626F57 +enclast(0x10000000000000001111000000001111, 0x40000000000000004444000000004444) = 0x238282638263636327276363CA6327C6 +dec (0x10000000000000001111000000001111, 0x40000000000000004444000000004444) = 0x5C2665EEDD4BAF17AA58266511D9E42C +declast(0x10000000000000001111000000001111, 0x40000000000000004444000000004444) = 0x12E352527C5252521616E352E35216A7 +enc (0x10000000000000001111000000001111, 0x50000000000000005555000000005555) = 0x335B82BABA5B82823636636312627E46 +enclast(0x10000000000000001111000000001111, 0x50000000000000005555000000005555) = 0x338282638263636336366363CA6336D7 +dec (0x10000000000000001111000000001111, 0x50000000000000005555000000005555) = 0x4C2665EEDD4BAF17BB49266511D9F53D +declast(0x10000000000000001111000000001111, 0x50000000000000005555000000005555) = 0x02E352527C5252520707E352E35207B6 +enc (0x10000000000000001111000000001111, 0x60000000000000006666000000006666) = 0x035B82BABA5B82820505636312624D75 +enclast(0x10000000000000001111000000001111, 0x60000000000000006666000000006666) = 0x038282638263636305056363CA6305E4 +dec (0x10000000000000001111000000001111, 0x60000000000000006666000000006666) = 0x7C2665EEDD4BAF17887A266511D9C60E +declast(0x10000000000000001111000000001111, 0x60000000000000006666000000006666) = 0x32E352527C5252523434E352E3523485 +enc (0x10000000000000001111000000001111, 0x70000000000000007777000000007777) = 0x135B82BABA5B82821414636312625C64 +enclast(0x10000000000000001111000000001111, 0x70000000000000007777000000007777) = 0x138282638263636314146363CA6314F5 +dec (0x10000000000000001111000000001111, 0x70000000000000007777000000007777) = 0x6C2665EEDD4BAF17996B266511D9D71F +declast(0x10000000000000001111000000001111, 0x70000000000000007777000000007777) = 0x22E352527C5252522525E352E3522594 +enc (0x10000000000000001111000000001111, 0x80000000000000008888000000008888) = 0xE35B82BABA5B8282EBEB63631262A39B +enclast(0x10000000000000001111000000001111, 0x80000000000000008888000000008888) = 0xE382826382636363EBEB6363CA63EB0A +dec (0x10000000000000001111000000001111, 0x80000000000000008888000000008888) = 0x9C2665EEDD4BAF176694266511D928E0 +declast(0x10000000000000001111000000001111, 0x80000000000000008888000000008888) = 0xD2E352527C525252DADAE352E352DA6B +enc (0x10000000000000001111000000001111, 0x90000000000000009999000000009999) = 0xF35B82BABA5B8282FAFA63631262B28A +enclast(0x10000000000000001111000000001111, 0x90000000000000009999000000009999) = 0xF382826382636363FAFA6363CA63FA1B +dec (0x10000000000000001111000000001111, 0x90000000000000009999000000009999) = 0x8C2665EEDD4BAF177785266511D939F1 +declast(0x10000000000000001111000000001111, 0x90000000000000009999000000009999) = 0xC2E352527C525252CBCBE352E352CB7A +enc (0x10000000000000001111000000001111, 0xA000000000000000AAAA00000000AAAA) = 0xC35B82BABA5B8282C9C96363126281B9 +enclast(0x10000000000000001111000000001111, 0xA000000000000000AAAA00000000AAAA) = 0xC382826382636363C9C96363CA63C928 +dec (0x10000000000000001111000000001111, 0xA000000000000000AAAA00000000AAAA) = 0xBC2665EEDD4BAF1744B6266511D90AC2 +declast(0x10000000000000001111000000001111, 0xA000000000000000AAAA00000000AAAA) = 0xF2E352527C525252F8F8E352E352F849 +enc (0x10000000000000001111000000001111, 0xB000000000000000BBBB00000000BBBB) = 0xD35B82BABA5B8282D8D86363126290A8 +enclast(0x10000000000000001111000000001111, 0xB000000000000000BBBB00000000BBBB) = 0xD382826382636363D8D86363CA63D839 +dec (0x10000000000000001111000000001111, 0xB000000000000000BBBB00000000BBBB) = 0xAC2665EEDD4BAF1755A7266511D91BD3 +declast(0x10000000000000001111000000001111, 0xB000000000000000BBBB00000000BBBB) = 0xE2E352527C525252E9E9E352E352E958 +enc (0x10000000000000001111000000001111, 0xC000000000000000CCCC00000000CCCC) = 0xA35B82BABA5B8282AFAF63631262E7DF +enclast(0x10000000000000001111000000001111, 0xC000000000000000CCCC00000000CCCC) = 0xA382826382636363AFAF6363CA63AF4E +dec (0x10000000000000001111000000001111, 0xC000000000000000CCCC00000000CCCC) = 0xDC2665EEDD4BAF1722D0266511D96CA4 +declast(0x10000000000000001111000000001111, 0xC000000000000000CCCC00000000CCCC) = 0x92E352527C5252529E9EE352E3529E2F +enc (0x10000000000000001111000000001111, 0xD000000000000000DDDD00000000DDDD) = 0xB35B82BABA5B8282BEBE63631262F6CE +enclast(0x10000000000000001111000000001111, 0xD000000000000000DDDD00000000DDDD) = 0xB382826382636363BEBE6363CA63BE5F +dec (0x10000000000000001111000000001111, 0xD000000000000000DDDD00000000DDDD) = 0xCC2665EEDD4BAF1733C1266511D97DB5 +declast(0x10000000000000001111000000001111, 0xD000000000000000DDDD00000000DDDD) = 0x82E352527C5252528F8FE352E3528F3E +enc (0x10000000000000001111000000001111, 0xE000000000000000EEEE00000000EEEE) = 0x835B82BABA5B82828D8D63631262C5FD +enclast(0x10000000000000001111000000001111, 0xE000000000000000EEEE00000000EEEE) = 0x83828263826363638D8D6363CA638D6C +dec (0x10000000000000001111000000001111, 0xE000000000000000EEEE00000000EEEE) = 0xFC2665EEDD4BAF1700F2266511D94E86 +declast(0x10000000000000001111000000001111, 0xE000000000000000EEEE00000000EEEE) = 0xB2E352527C525252BCBCE352E352BC0D +enc (0x10000000000000001111000000001111, 0xF000000000000000FFFF00000000FFFF) = 0x935B82BABA5B82829C9C63631262D4EC +enclast(0x10000000000000001111000000001111, 0xF000000000000000FFFF00000000FFFF) = 0x93828263826363639C9C6363CA639C7D +dec (0x10000000000000001111000000001111, 0xF000000000000000FFFF00000000FFFF) = 0xEC2665EEDD4BAF1711E3266511D95F97 +declast(0x10000000000000001111000000001111, 0xF000000000000000FFFF00000000FFFF) = 0xA2E352527C525252ADADE352E352AD1C +keygenassist(0x10000000000000001111000000001111, 0x00) = 0x63CA6363CA6363636382826382826363 +keygenassist(0x10000000000000001111000000001111, 0x01) = 0x63CA6362CA6363636382826282826363 +keygenassist(0x10000000000000001111000000001111, 0x02) = 0x63CA6361CA6363636382826182826363 +keygenassist(0x10000000000000001111000000001111, 0x04) = 0x63CA6367CA6363636382826782826363 +keygenassist(0x10000000000000001111000000001111, 0x08) = 0x63CA636BCA6363636382826B82826363 +keygenassist(0x10000000000000001111000000001111, 0x10) = 0x63CA6373CA6363636382827382826363 +keygenassist(0x10000000000000001111000000001111, 0x38) = 0x63CA635BCA6363636382825B82826363 +keygenassist(0x10000000000000001111000000001111, 0x4F) = 0x63CA632CCA6363636382822C82826363 +keygenassist(0x10000000000000001111000000001111, 0xFF) = 0x63CA639CCA6363636382829C82826363 +imc (0x10000000000000001111000000001111) = 0xE0B0D090000000007755664466447755 +pclmul(0x10000000000000001111000000001111, 0x00) = 0x065DF10EFFF108ACF75DFFF10EF10653 +pclmul(0x10000000000000001111000000001111, 0x01) = 0x065933390A333F59356A0A3339000653 +pclmul(0x10000000000000001111000000001111, 0x10) = 0x06382826382826363000000000000000 +pclmul(0x10000000000000001111000000001111, 0xFF) = 0x063CA6363CA636363000000000000000 +enc (0x20000000000000002222000000002222, 0x00000000000000000000000000000000) = 0x636893989868939363636363DBF4474C +enclast(0x20000000000000002222000000002222, 0x00000000000000000000000000000000) = 0x639393639363636363636363B7636393 +dec (0x20000000000000002222000000002222, 0x00000000000000000000000000000000) = 0xFE9A69CB76687C64CBFE9A69A1F06736 +declast(0x20000000000000002222000000002222, 0x00000000000000000000000000000000) = 0x52945252545252525252945294525294 +enc (0x20000000000000002222000000002222, 0x10000000000000001111000000001111) = 0x736893989868939372726363DBF4565D +enclast(0x20000000000000002222000000002222, 0x10000000000000001111000000001111) = 0x739393639363636372726363B7637282 +dec (0x20000000000000002222000000002222, 0x10000000000000001111000000001111) = 0xEE9A69CB76687C64DAEF9A69A1F07627 +declast(0x20000000000000002222000000002222, 0x10000000000000001111000000001111) = 0x42945252545252524343945294524385 +enc (0x20000000000000002222000000002222, 0x20000000000000002222000000002222) = 0x436893989868939341416363DBF4656E +enclast(0x20000000000000002222000000002222, 0x20000000000000002222000000002222) = 0x439393639363636341416363B76341B1 +dec (0x20000000000000002222000000002222, 0x20000000000000002222000000002222) = 0xDE9A69CB76687C64E9DC9A69A1F04514 +declast(0x20000000000000002222000000002222, 0x20000000000000002222000000002222) = 0x729452525452525270709452945270B6 +enc (0x20000000000000002222000000002222, 0x30000000000000003333000000003333) = 0x536893989868939350506363DBF4747F +enclast(0x20000000000000002222000000002222, 0x30000000000000003333000000003333) = 0x539393639363636350506363B76350A0 +dec (0x20000000000000002222000000002222, 0x30000000000000003333000000003333) = 0xCE9A69CB76687C64F8CD9A69A1F05405 +declast(0x20000000000000002222000000002222, 0x30000000000000003333000000003333) = 0x629452525452525261619452945261A7 +enc (0x20000000000000002222000000002222, 0x40000000000000004444000000004444) = 0x236893989868939327276363DBF40308 +enclast(0x20000000000000002222000000002222, 0x40000000000000004444000000004444) = 0x239393639363636327276363B76327D7 +dec (0x20000000000000002222000000002222, 0x40000000000000004444000000004444) = 0xBE9A69CB76687C648FBA9A69A1F02372 +declast(0x20000000000000002222000000002222, 0x40000000000000004444000000004444) = 0x129452525452525216169452945216D0 +enc (0x20000000000000002222000000002222, 0x50000000000000005555000000005555) = 0x336893989868939336366363DBF41219 +enclast(0x20000000000000002222000000002222, 0x50000000000000005555000000005555) = 0x339393639363636336366363B76336C6 +dec (0x20000000000000002222000000002222, 0x50000000000000005555000000005555) = 0xAE9A69CB76687C649EAB9A69A1F03263 +declast(0x20000000000000002222000000002222, 0x50000000000000005555000000005555) = 0x029452525452525207079452945207C1 +enc (0x20000000000000002222000000002222, 0x60000000000000006666000000006666) = 0x036893989868939305056363DBF4212A +enclast(0x20000000000000002222000000002222, 0x60000000000000006666000000006666) = 0x039393639363636305056363B76305F5 +dec (0x20000000000000002222000000002222, 0x60000000000000006666000000006666) = 0x9E9A69CB76687C64AD989A69A1F00150 +declast(0x20000000000000002222000000002222, 0x60000000000000006666000000006666) = 0x329452525452525234349452945234F2 +enc (0x20000000000000002222000000002222, 0x70000000000000007777000000007777) = 0x136893989868939314146363DBF4303B +enclast(0x20000000000000002222000000002222, 0x70000000000000007777000000007777) = 0x139393639363636314146363B76314E4 +dec (0x20000000000000002222000000002222, 0x70000000000000007777000000007777) = 0x8E9A69CB76687C64BC899A69A1F01041 +declast(0x20000000000000002222000000002222, 0x70000000000000007777000000007777) = 0x229452525452525225259452945225E3 +enc (0x20000000000000002222000000002222, 0x80000000000000008888000000008888) = 0xE368939898689393EBEB6363DBF4CFC4 +enclast(0x20000000000000002222000000002222, 0x80000000000000008888000000008888) = 0xE393936393636363EBEB6363B763EB1B +dec (0x20000000000000002222000000002222, 0x80000000000000008888000000008888) = 0x7E9A69CB76687C6443769A69A1F0EFBE +declast(0x20000000000000002222000000002222, 0x80000000000000008888000000008888) = 0xD294525254525252DADA94529452DA1C +enc (0x20000000000000002222000000002222, 0x90000000000000009999000000009999) = 0xF368939898689393FAFA6363DBF4DED5 +enclast(0x20000000000000002222000000002222, 0x90000000000000009999000000009999) = 0xF393936393636363FAFA6363B763FA0A +dec (0x20000000000000002222000000002222, 0x90000000000000009999000000009999) = 0x6E9A69CB76687C6452679A69A1F0FEAF +declast(0x20000000000000002222000000002222, 0x90000000000000009999000000009999) = 0xC294525254525252CBCB94529452CB0D +enc (0x20000000000000002222000000002222, 0xA000000000000000AAAA00000000AAAA) = 0xC368939898689393C9C96363DBF4EDE6 +enclast(0x20000000000000002222000000002222, 0xA000000000000000AAAA00000000AAAA) = 0xC393936393636363C9C96363B763C939 +dec (0x20000000000000002222000000002222, 0xA000000000000000AAAA00000000AAAA) = 0x5E9A69CB76687C6461549A69A1F0CD9C +declast(0x20000000000000002222000000002222, 0xA000000000000000AAAA00000000AAAA) = 0xF294525254525252F8F894529452F83E +enc (0x20000000000000002222000000002222, 0xB000000000000000BBBB00000000BBBB) = 0xD368939898689393D8D86363DBF4FCF7 +enclast(0x20000000000000002222000000002222, 0xB000000000000000BBBB00000000BBBB) = 0xD393936393636363D8D86363B763D828 +dec (0x20000000000000002222000000002222, 0xB000000000000000BBBB00000000BBBB) = 0x4E9A69CB76687C6470459A69A1F0DC8D +declast(0x20000000000000002222000000002222, 0xB000000000000000BBBB00000000BBBB) = 0xE294525254525252E9E994529452E92F +enc (0x20000000000000002222000000002222, 0xC000000000000000CCCC00000000CCCC) = 0xA368939898689393AFAF6363DBF48B80 +enclast(0x20000000000000002222000000002222, 0xC000000000000000CCCC00000000CCCC) = 0xA393936393636363AFAF6363B763AF5F +dec (0x20000000000000002222000000002222, 0xC000000000000000CCCC00000000CCCC) = 0x3E9A69CB76687C6407329A69A1F0ABFA +declast(0x20000000000000002222000000002222, 0xC000000000000000CCCC00000000CCCC) = 0x92945252545252529E9E945294529E58 +enc (0x20000000000000002222000000002222, 0xD000000000000000DDDD00000000DDDD) = 0xB368939898689393BEBE6363DBF49A91 +enclast(0x20000000000000002222000000002222, 0xD000000000000000DDDD00000000DDDD) = 0xB393936393636363BEBE6363B763BE4E +dec (0x20000000000000002222000000002222, 0xD000000000000000DDDD00000000DDDD) = 0x2E9A69CB76687C6416239A69A1F0BAEB +declast(0x20000000000000002222000000002222, 0xD000000000000000DDDD00000000DDDD) = 0x82945252545252528F8F945294528F49 +enc (0x20000000000000002222000000002222, 0xE000000000000000EEEE00000000EEEE) = 0x83689398986893938D8D6363DBF4A9A2 +enclast(0x20000000000000002222000000002222, 0xE000000000000000EEEE00000000EEEE) = 0x83939363936363638D8D6363B7638D7D +dec (0x20000000000000002222000000002222, 0xE000000000000000EEEE00000000EEEE) = 0x1E9A69CB76687C6425109A69A1F089D8 +declast(0x20000000000000002222000000002222, 0xE000000000000000EEEE00000000EEEE) = 0xB294525254525252BCBC94529452BC7A +enc (0x20000000000000002222000000002222, 0xF000000000000000FFFF00000000FFFF) = 0x93689398986893939C9C6363DBF4B8B3 +enclast(0x20000000000000002222000000002222, 0xF000000000000000FFFF00000000FFFF) = 0x93939363936363639C9C6363B7639C6C +dec (0x20000000000000002222000000002222, 0xF000000000000000FFFF00000000FFFF) = 0x0E9A69CB76687C6434019A69A1F098C9 +declast(0x20000000000000002222000000002222, 0xF000000000000000FFFF00000000FFFF) = 0xA294525254525252ADAD94529452AD6B +keygenassist(0x20000000000000002222000000002222, 0x00) = 0x63B76363B76363636393936393936363 +keygenassist(0x20000000000000002222000000002222, 0x01) = 0x63B76362B76363636393936293936363 +keygenassist(0x20000000000000002222000000002222, 0x02) = 0x63B76361B76363636393936193936363 +keygenassist(0x20000000000000002222000000002222, 0x04) = 0x63B76367B76363636393936793936363 +keygenassist(0x20000000000000002222000000002222, 0x08) = 0x63B7636BB76363636393936B93936363 +keygenassist(0x20000000000000002222000000002222, 0x10) = 0x63B76373B76363636393937393936363 +keygenassist(0x20000000000000002222000000002222, 0x38) = 0x63B7635BB76363636393935B93936363 +keygenassist(0x20000000000000002222000000002222, 0x4F) = 0x63B7632CB76363636393932C93936363 +keygenassist(0x20000000000000002222000000002222, 0xFF) = 0x63B7639CB76363636393939C93936363 +imc (0x20000000000000002222000000002222) = 0xDB7BBB3B00000000EEAACC88CC88EEAA +pclmul(0x20000000000000002222000000002222, 0x00) = 0x0CB9E01FFFE01359ECB9FFE01FE00CA6 +pclmul(0x20000000000000002222000000002222, 0x01) = 0x0CBD33281B3324BD3F8E1B3328000CA6 +pclmul(0x20000000000000002222000000002222, 0x10) = 0x0C72726C72726C6C6000000000000000 +pclmul(0x20000000000000002222000000002222, 0xFF) = 0x0C76EC6C76EC6C6C6000000000000000 +enc (0x30000000000000003333000000003333, 0x00000000000000000000000000000000) = 0x6398C3383898C3C363636363566AA45F +enclast(0x30000000000000003333000000003333, 0x00000000000000000000000000000000) = 0x63C3C363C363636363636363046363C3 +dec (0x30000000000000003333000000003333, 0x00000000000000000000000000000000) = 0xDD51B50D735A9DEE0DDD51B5B6EA82DE +declast(0x30000000000000003333000000003333, 0x00000000000000000000000000000000) = 0x52665252085252525252665266525266 +enc (0x30000000000000003333000000003333, 0x10000000000000001111000000001111) = 0x7398C3383898C3C372726363566AB54E +enclast(0x30000000000000003333000000003333, 0x10000000000000001111000000001111) = 0x73C3C363C363636372726363046372D2 +dec (0x30000000000000003333000000003333, 0x10000000000000001111000000001111) = 0xCD51B50D735A9DEE1CCC51B5B6EA93CF +declast(0x30000000000000003333000000003333, 0x10000000000000001111000000001111) = 0x42665252085252524343665266524377 +enc (0x30000000000000003333000000003333, 0x20000000000000002222000000002222) = 0x4398C3383898C3C341416363566A867D +enclast(0x30000000000000003333000000003333, 0x20000000000000002222000000002222) = 0x43C3C363C363636341416363046341E1 +dec (0x30000000000000003333000000003333, 0x20000000000000002222000000002222) = 0xFD51B50D735A9DEE2FFF51B5B6EAA0FC +declast(0x30000000000000003333000000003333, 0x20000000000000002222000000002222) = 0x72665252085252527070665266527044 +enc (0x30000000000000003333000000003333, 0x30000000000000003333000000003333) = 0x5398C3383898C3C350506363566A976C +enclast(0x30000000000000003333000000003333, 0x30000000000000003333000000003333) = 0x53C3C363C363636350506363046350F0 +dec (0x30000000000000003333000000003333, 0x30000000000000003333000000003333) = 0xED51B50D735A9DEE3EEE51B5B6EAB1ED +declast(0x30000000000000003333000000003333, 0x30000000000000003333000000003333) = 0x62665252085252526161665266526155 +enc (0x30000000000000003333000000003333, 0x40000000000000004444000000004444) = 0x2398C3383898C3C327276363566AE01B +enclast(0x30000000000000003333000000003333, 0x40000000000000004444000000004444) = 0x23C3C363C36363632727636304632787 +dec (0x30000000000000003333000000003333, 0x40000000000000004444000000004444) = 0x9D51B50D735A9DEE499951B5B6EAC69A +declast(0x30000000000000003333000000003333, 0x40000000000000004444000000004444) = 0x12665252085252521616665266521622 +enc (0x30000000000000003333000000003333, 0x50000000000000005555000000005555) = 0x3398C3383898C3C336366363566AF10A +enclast(0x30000000000000003333000000003333, 0x50000000000000005555000000005555) = 0x33C3C363C36363633636636304633696 +dec (0x30000000000000003333000000003333, 0x50000000000000005555000000005555) = 0x8D51B50D735A9DEE588851B5B6EAD78B +declast(0x30000000000000003333000000003333, 0x50000000000000005555000000005555) = 0x02665252085252520707665266520733 +enc (0x30000000000000003333000000003333, 0x60000000000000006666000000006666) = 0x0398C3383898C3C305056363566AC239 +enclast(0x30000000000000003333000000003333, 0x60000000000000006666000000006666) = 0x03C3C363C363636305056363046305A5 +dec (0x30000000000000003333000000003333, 0x60000000000000006666000000006666) = 0xBD51B50D735A9DEE6BBB51B5B6EAE4B8 +declast(0x30000000000000003333000000003333, 0x60000000000000006666000000006666) = 0x32665252085252523434665266523400 +enc (0x30000000000000003333000000003333, 0x70000000000000007777000000007777) = 0x1398C3383898C3C314146363566AD328 +enclast(0x30000000000000003333000000003333, 0x70000000000000007777000000007777) = 0x13C3C363C363636314146363046314B4 +dec (0x30000000000000003333000000003333, 0x70000000000000007777000000007777) = 0xAD51B50D735A9DEE7AAA51B5B6EAF5A9 +declast(0x30000000000000003333000000003333, 0x70000000000000007777000000007777) = 0x22665252085252522525665266522511 +enc (0x30000000000000003333000000003333, 0x80000000000000008888000000008888) = 0xE398C3383898C3C3EBEB6363566A2CD7 +enclast(0x30000000000000003333000000003333, 0x80000000000000008888000000008888) = 0xE3C3C363C3636363EBEB63630463EB4B +dec (0x30000000000000003333000000003333, 0x80000000000000008888000000008888) = 0x5D51B50D735A9DEE855551B5B6EA0A56 +declast(0x30000000000000003333000000003333, 0x80000000000000008888000000008888) = 0xD266525208525252DADA66526652DAEE +enc (0x30000000000000003333000000003333, 0x90000000000000009999000000009999) = 0xF398C3383898C3C3FAFA6363566A3DC6 +enclast(0x30000000000000003333000000003333, 0x90000000000000009999000000009999) = 0xF3C3C363C3636363FAFA63630463FA5A +dec (0x30000000000000003333000000003333, 0x90000000000000009999000000009999) = 0x4D51B50D735A9DEE944451B5B6EA1B47 +declast(0x30000000000000003333000000003333, 0x90000000000000009999000000009999) = 0xC266525208525252CBCB66526652CBFF +enc (0x30000000000000003333000000003333, 0xA000000000000000AAAA00000000AAAA) = 0xC398C3383898C3C3C9C96363566A0EF5 +enclast(0x30000000000000003333000000003333, 0xA000000000000000AAAA00000000AAAA) = 0xC3C3C363C3636363C9C963630463C969 +dec (0x30000000000000003333000000003333, 0xA000000000000000AAAA00000000AAAA) = 0x7D51B50D735A9DEEA77751B5B6EA2874 +declast(0x30000000000000003333000000003333, 0xA000000000000000AAAA00000000AAAA) = 0xF266525208525252F8F866526652F8CC +enc (0x30000000000000003333000000003333, 0xB000000000000000BBBB00000000BBBB) = 0xD398C3383898C3C3D8D86363566A1FE4 +enclast(0x30000000000000003333000000003333, 0xB000000000000000BBBB00000000BBBB) = 0xD3C3C363C3636363D8D863630463D878 +dec (0x30000000000000003333000000003333, 0xB000000000000000BBBB00000000BBBB) = 0x6D51B50D735A9DEEB66651B5B6EA3965 +declast(0x30000000000000003333000000003333, 0xB000000000000000BBBB00000000BBBB) = 0xE266525208525252E9E966526652E9DD +enc (0x30000000000000003333000000003333, 0xC000000000000000CCCC00000000CCCC) = 0xA398C3383898C3C3AFAF6363566A6893 +enclast(0x30000000000000003333000000003333, 0xC000000000000000CCCC00000000CCCC) = 0xA3C3C363C3636363AFAF63630463AF0F +dec (0x30000000000000003333000000003333, 0xC000000000000000CCCC00000000CCCC) = 0x1D51B50D735A9DEEC11151B5B6EA4E12 +declast(0x30000000000000003333000000003333, 0xC000000000000000CCCC00000000CCCC) = 0x92665252085252529E9E665266529EAA +enc (0x30000000000000003333000000003333, 0xD000000000000000DDDD00000000DDDD) = 0xB398C3383898C3C3BEBE6363566A7982 +enclast(0x30000000000000003333000000003333, 0xD000000000000000DDDD00000000DDDD) = 0xB3C3C363C3636363BEBE63630463BE1E +dec (0x30000000000000003333000000003333, 0xD000000000000000DDDD00000000DDDD) = 0x0D51B50D735A9DEED00051B5B6EA5F03 +declast(0x30000000000000003333000000003333, 0xD000000000000000DDDD00000000DDDD) = 0x82665252085252528F8F665266528FBB +enc (0x30000000000000003333000000003333, 0xE000000000000000EEEE00000000EEEE) = 0x8398C3383898C3C38D8D6363566A4AB1 +enclast(0x30000000000000003333000000003333, 0xE000000000000000EEEE00000000EEEE) = 0x83C3C363C36363638D8D636304638D2D +dec (0x30000000000000003333000000003333, 0xE000000000000000EEEE00000000EEEE) = 0x3D51B50D735A9DEEE33351B5B6EA6C30 +declast(0x30000000000000003333000000003333, 0xE000000000000000EEEE00000000EEEE) = 0xB266525208525252BCBC66526652BC88 +enc (0x30000000000000003333000000003333, 0xF000000000000000FFFF00000000FFFF) = 0x9398C3383898C3C39C9C6363566A5BA0 +enclast(0x30000000000000003333000000003333, 0xF000000000000000FFFF00000000FFFF) = 0x93C3C363C36363639C9C636304639C3C +dec (0x30000000000000003333000000003333, 0xF000000000000000FFFF00000000FFFF) = 0x2D51B50D735A9DEEF22251B5B6EA7D21 +declast(0x30000000000000003333000000003333, 0xF000000000000000FFFF00000000FFFF) = 0xA266525208525252ADAD66526652AD99 +keygenassist(0x30000000000000003333000000003333, 0x00) = 0x630463630463636363C3C363C3C36363 +keygenassist(0x30000000000000003333000000003333, 0x01) = 0x630463620463636363C3C362C3C36363 +keygenassist(0x30000000000000003333000000003333, 0x02) = 0x630463610463636363C3C361C3C36363 +keygenassist(0x30000000000000003333000000003333, 0x04) = 0x630463670463636363C3C367C3C36363 +keygenassist(0x30000000000000003333000000003333, 0x08) = 0x6304636B0463636363C3C36BC3C36363 +keygenassist(0x30000000000000003333000000003333, 0x10) = 0x630463730463636363C3C373C3C36363 +keygenassist(0x30000000000000003333000000003333, 0x38) = 0x6304635B0463636363C3C35BC3C36363 +keygenassist(0x30000000000000003333000000003333, 0x4F) = 0x6304632C0463636363C3C32CC3C36363 +keygenassist(0x30000000000000003333000000003333, 0xFF) = 0x6304639C0463636363C3C39CC3C36363 +imc (0x30000000000000003333000000003333) = 0x3BCB6BAB0000000099FFAACCAACC99FF +pclmul(0x30000000000000003333000000003333, 0x00) = 0x0AEAE01FFFE0150AEAEAFFE01FE00AF5 +pclmul(0x30000000000000003333000000003333, 0x01) = 0x0AFF33390A3333FF39CC0A3339000AF5 +pclmul(0x30000000000000003333000000003333, 0x10) = 0x0A44445A44445A5A5000000000000000 +pclmul(0x30000000000000003333000000003333, 0xFF) = 0x0A50CA5A50CA5A5A5000000000000000 +enc (0x40000000000000004444000000004444, 0x00000000000000000000000000000000) = 0x63EB1B9393EB1B1B636363633FA571F9 +enclast(0x40000000000000004444000000004444, 0x00000000000000000000000000000000) = 0x631B1B631B636363636363630963631B +dec (0x40000000000000004444000000004444, 0x00000000000000000000000000000000) = 0x7C66CF018929E969017C66CFFB9C2F48 +declast(0x40000000000000004444000000004444, 0x00000000000000000000000000000000) = 0x52865252725252525252865286525286 +enc (0x40000000000000004444000000004444, 0x10000000000000001111000000001111) = 0x73EB1B9393EB1B1B727263633FA560E8 +enclast(0x40000000000000004444000000004444, 0x10000000000000001111000000001111) = 0x731B1B631B636363727263630963720A +dec (0x40000000000000004444000000004444, 0x10000000000000001111000000001111) = 0x6C66CF018929E969106D66CFFB9C3E59 +declast(0x40000000000000004444000000004444, 0x10000000000000001111000000001111) = 0x42865252725252524343865286524397 +enc (0x40000000000000004444000000004444, 0x20000000000000002222000000002222) = 0x43EB1B9393EB1B1B414163633FA553DB +enclast(0x40000000000000004444000000004444, 0x20000000000000002222000000002222) = 0x431B1B631B6363634141636309634139 +dec (0x40000000000000004444000000004444, 0x20000000000000002222000000002222) = 0x5C66CF018929E969235E66CFFB9C0D6A +declast(0x40000000000000004444000000004444, 0x20000000000000002222000000002222) = 0x728652527252525270708652865270A4 +enc (0x40000000000000004444000000004444, 0x30000000000000003333000000003333) = 0x53EB1B9393EB1B1B505063633FA542CA +enclast(0x40000000000000004444000000004444, 0x30000000000000003333000000003333) = 0x531B1B631B6363635050636309635028 +dec (0x40000000000000004444000000004444, 0x30000000000000003333000000003333) = 0x4C66CF018929E969324F66CFFB9C1C7B +declast(0x40000000000000004444000000004444, 0x30000000000000003333000000003333) = 0x628652527252525261618652865261B5 +enc (0x40000000000000004444000000004444, 0x40000000000000004444000000004444) = 0x23EB1B9393EB1B1B272763633FA535BD +enclast(0x40000000000000004444000000004444, 0x40000000000000004444000000004444) = 0x231B1B631B636363272763630963275F +dec (0x40000000000000004444000000004444, 0x40000000000000004444000000004444) = 0x3C66CF018929E969453866CFFB9C6B0C +declast(0x40000000000000004444000000004444, 0x40000000000000004444000000004444) = 0x128652527252525216168652865216C2 +enc (0x40000000000000004444000000004444, 0x50000000000000005555000000005555) = 0x33EB1B9393EB1B1B363663633FA524AC +enclast(0x40000000000000004444000000004444, 0x50000000000000005555000000005555) = 0x331B1B631B636363363663630963364E +dec (0x40000000000000004444000000004444, 0x50000000000000005555000000005555) = 0x2C66CF018929E969542966CFFB9C7A1D +declast(0x40000000000000004444000000004444, 0x50000000000000005555000000005555) = 0x028652527252525207078652865207D3 +enc (0x40000000000000004444000000004444, 0x60000000000000006666000000006666) = 0x03EB1B9393EB1B1B050563633FA5179F +enclast(0x40000000000000004444000000004444, 0x60000000000000006666000000006666) = 0x031B1B631B636363050563630963057D +dec (0x40000000000000004444000000004444, 0x60000000000000006666000000006666) = 0x1C66CF018929E969671A66CFFB9C492E +declast(0x40000000000000004444000000004444, 0x60000000000000006666000000006666) = 0x328652527252525234348652865234E0 +enc (0x40000000000000004444000000004444, 0x70000000000000007777000000007777) = 0x13EB1B9393EB1B1B141463633FA5068E +enclast(0x40000000000000004444000000004444, 0x70000000000000007777000000007777) = 0x131B1B631B636363141463630963146C +dec (0x40000000000000004444000000004444, 0x70000000000000007777000000007777) = 0x0C66CF018929E969760B66CFFB9C583F +declast(0x40000000000000004444000000004444, 0x70000000000000007777000000007777) = 0x228652527252525225258652865225F1 +enc (0x40000000000000004444000000004444, 0x80000000000000008888000000008888) = 0xE3EB1B9393EB1B1BEBEB63633FA5F971 +enclast(0x40000000000000004444000000004444, 0x80000000000000008888000000008888) = 0xE31B1B631B636363EBEB63630963EB93 +dec (0x40000000000000004444000000004444, 0x80000000000000008888000000008888) = 0xFC66CF018929E96989F466CFFB9CA7C0 +declast(0x40000000000000004444000000004444, 0x80000000000000008888000000008888) = 0xD286525272525252DADA86528652DA0E +enc (0x40000000000000004444000000004444, 0x90000000000000009999000000009999) = 0xF3EB1B9393EB1B1BFAFA63633FA5E860 +enclast(0x40000000000000004444000000004444, 0x90000000000000009999000000009999) = 0xF31B1B631B636363FAFA63630963FA82 +dec (0x40000000000000004444000000004444, 0x90000000000000009999000000009999) = 0xEC66CF018929E96998E566CFFB9CB6D1 +declast(0x40000000000000004444000000004444, 0x90000000000000009999000000009999) = 0xC286525272525252CBCB86528652CB1F +enc (0x40000000000000004444000000004444, 0xA000000000000000AAAA00000000AAAA) = 0xC3EB1B9393EB1B1BC9C963633FA5DB53 +enclast(0x40000000000000004444000000004444, 0xA000000000000000AAAA00000000AAAA) = 0xC31B1B631B636363C9C963630963C9B1 +dec (0x40000000000000004444000000004444, 0xA000000000000000AAAA00000000AAAA) = 0xDC66CF018929E969ABD666CFFB9C85E2 +declast(0x40000000000000004444000000004444, 0xA000000000000000AAAA00000000AAAA) = 0xF286525272525252F8F886528652F82C +enc (0x40000000000000004444000000004444, 0xB000000000000000BBBB00000000BBBB) = 0xD3EB1B9393EB1B1BD8D863633FA5CA42 +enclast(0x40000000000000004444000000004444, 0xB000000000000000BBBB00000000BBBB) = 0xD31B1B631B636363D8D863630963D8A0 +dec (0x40000000000000004444000000004444, 0xB000000000000000BBBB00000000BBBB) = 0xCC66CF018929E969BAC766CFFB9C94F3 +declast(0x40000000000000004444000000004444, 0xB000000000000000BBBB00000000BBBB) = 0xE286525272525252E9E986528652E93D +enc (0x40000000000000004444000000004444, 0xC000000000000000CCCC00000000CCCC) = 0xA3EB1B9393EB1B1BAFAF63633FA5BD35 +enclast(0x40000000000000004444000000004444, 0xC000000000000000CCCC00000000CCCC) = 0xA31B1B631B636363AFAF63630963AFD7 +dec (0x40000000000000004444000000004444, 0xC000000000000000CCCC00000000CCCC) = 0xBC66CF018929E969CDB066CFFB9CE384 +declast(0x40000000000000004444000000004444, 0xC000000000000000CCCC00000000CCCC) = 0x92865252725252529E9E865286529E4A +enc (0x40000000000000004444000000004444, 0xD000000000000000DDDD00000000DDDD) = 0xB3EB1B9393EB1B1BBEBE63633FA5AC24 +enclast(0x40000000000000004444000000004444, 0xD000000000000000DDDD00000000DDDD) = 0xB31B1B631B636363BEBE63630963BEC6 +dec (0x40000000000000004444000000004444, 0xD000000000000000DDDD00000000DDDD) = 0xAC66CF018929E969DCA166CFFB9CF295 +declast(0x40000000000000004444000000004444, 0xD000000000000000DDDD00000000DDDD) = 0x82865252725252528F8F865286528F5B +enc (0x40000000000000004444000000004444, 0xE000000000000000EEEE00000000EEEE) = 0x83EB1B9393EB1B1B8D8D63633FA59F17 +enclast(0x40000000000000004444000000004444, 0xE000000000000000EEEE00000000EEEE) = 0x831B1B631B6363638D8D636309638DF5 +dec (0x40000000000000004444000000004444, 0xE000000000000000EEEE00000000EEEE) = 0x9C66CF018929E969EF9266CFFB9CC1A6 +declast(0x40000000000000004444000000004444, 0xE000000000000000EEEE00000000EEEE) = 0xB286525272525252BCBC86528652BC68 +enc (0x40000000000000004444000000004444, 0xF000000000000000FFFF00000000FFFF) = 0x93EB1B9393EB1B1B9C9C63633FA58E06 +enclast(0x40000000000000004444000000004444, 0xF000000000000000FFFF00000000FFFF) = 0x931B1B631B6363639C9C636309639CE4 +dec (0x40000000000000004444000000004444, 0xF000000000000000FFFF00000000FFFF) = 0x8C66CF018929E969FE8366CFFB9CD0B7 +declast(0x40000000000000004444000000004444, 0xF000000000000000FFFF00000000FFFF) = 0xA286525272525252ADAD86528652AD79 +keygenassist(0x40000000000000004444000000004444, 0x00) = 0x6309636309636363631B1B631B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x01) = 0x6309636209636363631B1B621B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x02) = 0x6309636109636363631B1B611B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x04) = 0x6309636709636363631B1B671B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x08) = 0x6309636B09636363631B1B6B1B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x10) = 0x6309637309636363631B1B731B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x38) = 0x6309635B09636363631B1B5B1B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x4F) = 0x6309632C09636363631B1B2C1B1B6363 +keygenassist(0x40000000000000004444000000004444, 0xFF) = 0x6309639C09636363631B1B9C1B1B6363 +imc (0x40000000000000004444000000004444) = 0xADF66D7600000000C74F830B830BC74F +pclmul(0x40000000000000004444000000004444, 0x00) = 0x1953E01FFFE006B3F953FFE01FE0194C +pclmul(0x40000000000000004444000000004444, 0x01) = 0x195733281B3331572A641B332800194C +pclmul(0x40000000000000004444000000004444, 0x10) = 0x18C6C6D8C6C6D8D8C000000000000000 +pclmul(0x40000000000000004444000000004444, 0xFF) = 0x18C258D8C258D8D8C000000000000000 +enc (0x50000000000000005555000000005555, 0x00000000000000000000000000000000) = 0x63D9FC4646D9FCFC63636363B9ACCC76 +enclast(0x50000000000000005555000000005555, 0x00000000000000000000000000000000) = 0x63FCFC63FC63636363636363536363FC +dec (0x50000000000000005555000000005555, 0x00000000000000000000000000000000) = 0x627207A83DFB7F87A862720727FD9842 +declast(0x50000000000000005555000000005555, 0x00000000000000000000000000000000) = 0x52ED52526C5252525252ED52ED5252ED +enc (0x50000000000000005555000000005555, 0x10000000000000001111000000001111) = 0x73D9FC4646D9FCFC72726363B9ACDD67 +enclast(0x50000000000000005555000000005555, 0x10000000000000001111000000001111) = 0x73FCFC63FC63636372726363536372ED +dec (0x50000000000000005555000000005555, 0x10000000000000001111000000001111) = 0x727207A83DFB7F87B973720727FD8953 +declast(0x50000000000000005555000000005555, 0x10000000000000001111000000001111) = 0x42ED52526C5252524343ED52ED5243FC +enc (0x50000000000000005555000000005555, 0x20000000000000002222000000002222) = 0x43D9FC4646D9FCFC41416363B9ACEE54 +enclast(0x50000000000000005555000000005555, 0x20000000000000002222000000002222) = 0x43FCFC63FC63636341416363536341DE +dec (0x50000000000000005555000000005555, 0x20000000000000002222000000002222) = 0x427207A83DFB7F878A40720727FDBA60 +declast(0x50000000000000005555000000005555, 0x20000000000000002222000000002222) = 0x72ED52526C5252527070ED52ED5270CF +enc (0x50000000000000005555000000005555, 0x30000000000000003333000000003333) = 0x53D9FC4646D9FCFC50506363B9ACFF45 +enclast(0x50000000000000005555000000005555, 0x30000000000000003333000000003333) = 0x53FCFC63FC63636350506363536350CF +dec (0x50000000000000005555000000005555, 0x30000000000000003333000000003333) = 0x527207A83DFB7F879B51720727FDAB71 +declast(0x50000000000000005555000000005555, 0x30000000000000003333000000003333) = 0x62ED52526C5252526161ED52ED5261DE +enc (0x50000000000000005555000000005555, 0x40000000000000004444000000004444) = 0x23D9FC4646D9FCFC27276363B9AC8832 +enclast(0x50000000000000005555000000005555, 0x40000000000000004444000000004444) = 0x23FCFC63FC63636327276363536327B8 +dec (0x50000000000000005555000000005555, 0x40000000000000004444000000004444) = 0x227207A83DFB7F87EC26720727FDDC06 +declast(0x50000000000000005555000000005555, 0x40000000000000004444000000004444) = 0x12ED52526C5252521616ED52ED5216A9 +enc (0x50000000000000005555000000005555, 0x50000000000000005555000000005555) = 0x33D9FC4646D9FCFC36366363B9AC9923 +enclast(0x50000000000000005555000000005555, 0x50000000000000005555000000005555) = 0x33FCFC63FC63636336366363536336A9 +dec (0x50000000000000005555000000005555, 0x50000000000000005555000000005555) = 0x327207A83DFB7F87FD37720727FDCD17 +declast(0x50000000000000005555000000005555, 0x50000000000000005555000000005555) = 0x02ED52526C5252520707ED52ED5207B8 +enc (0x50000000000000005555000000005555, 0x60000000000000006666000000006666) = 0x03D9FC4646D9FCFC05056363B9ACAA10 +enclast(0x50000000000000005555000000005555, 0x60000000000000006666000000006666) = 0x03FCFC63FC636363050563635363059A +dec (0x50000000000000005555000000005555, 0x60000000000000006666000000006666) = 0x027207A83DFB7F87CE04720727FDFE24 +declast(0x50000000000000005555000000005555, 0x60000000000000006666000000006666) = 0x32ED52526C5252523434ED52ED52348B +enc (0x50000000000000005555000000005555, 0x70000000000000007777000000007777) = 0x13D9FC4646D9FCFC14146363B9ACBB01 +enclast(0x50000000000000005555000000005555, 0x70000000000000007777000000007777) = 0x13FCFC63FC636363141463635363148B +dec (0x50000000000000005555000000005555, 0x70000000000000007777000000007777) = 0x127207A83DFB7F87DF15720727FDEF35 +declast(0x50000000000000005555000000005555, 0x70000000000000007777000000007777) = 0x22ED52526C5252522525ED52ED52259A +enc (0x50000000000000005555000000005555, 0x80000000000000008888000000008888) = 0xE3D9FC4646D9FCFCEBEB6363B9AC44FE +enclast(0x50000000000000005555000000005555, 0x80000000000000008888000000008888) = 0xE3FCFC63FC636363EBEB63635363EB74 +dec (0x50000000000000005555000000005555, 0x80000000000000008888000000008888) = 0xE27207A83DFB7F8720EA720727FD10CA +declast(0x50000000000000005555000000005555, 0x80000000000000008888000000008888) = 0xD2ED52526C525252DADAED52ED52DA65 +enc (0x50000000000000005555000000005555, 0x90000000000000009999000000009999) = 0xF3D9FC4646D9FCFCFAFA6363B9AC55EF +enclast(0x50000000000000005555000000005555, 0x90000000000000009999000000009999) = 0xF3FCFC63FC636363FAFA63635363FA65 +dec (0x50000000000000005555000000005555, 0x90000000000000009999000000009999) = 0xF27207A83DFB7F8731FB720727FD01DB +declast(0x50000000000000005555000000005555, 0x90000000000000009999000000009999) = 0xC2ED52526C525252CBCBED52ED52CB74 +enc (0x50000000000000005555000000005555, 0xA000000000000000AAAA00000000AAAA) = 0xC3D9FC4646D9FCFCC9C96363B9AC66DC +enclast(0x50000000000000005555000000005555, 0xA000000000000000AAAA00000000AAAA) = 0xC3FCFC63FC636363C9C963635363C956 +dec (0x50000000000000005555000000005555, 0xA000000000000000AAAA00000000AAAA) = 0xC27207A83DFB7F8702C8720727FD32E8 +declast(0x50000000000000005555000000005555, 0xA000000000000000AAAA00000000AAAA) = 0xF2ED52526C525252F8F8ED52ED52F847 +enc (0x50000000000000005555000000005555, 0xB000000000000000BBBB00000000BBBB) = 0xD3D9FC4646D9FCFCD8D86363B9AC77CD +enclast(0x50000000000000005555000000005555, 0xB000000000000000BBBB00000000BBBB) = 0xD3FCFC63FC636363D8D863635363D847 +dec (0x50000000000000005555000000005555, 0xB000000000000000BBBB00000000BBBB) = 0xD27207A83DFB7F8713D9720727FD23F9 +declast(0x50000000000000005555000000005555, 0xB000000000000000BBBB00000000BBBB) = 0xE2ED52526C525252E9E9ED52ED52E956 +enc (0x50000000000000005555000000005555, 0xC000000000000000CCCC00000000CCCC) = 0xA3D9FC4646D9FCFCAFAF6363B9AC00BA +enclast(0x50000000000000005555000000005555, 0xC000000000000000CCCC00000000CCCC) = 0xA3FCFC63FC636363AFAF63635363AF30 +dec (0x50000000000000005555000000005555, 0xC000000000000000CCCC00000000CCCC) = 0xA27207A83DFB7F8764AE720727FD548E +declast(0x50000000000000005555000000005555, 0xC000000000000000CCCC00000000CCCC) = 0x92ED52526C5252529E9EED52ED529E21 +enc (0x50000000000000005555000000005555, 0xD000000000000000DDDD00000000DDDD) = 0xB3D9FC4646D9FCFCBEBE6363B9AC11AB +enclast(0x50000000000000005555000000005555, 0xD000000000000000DDDD00000000DDDD) = 0xB3FCFC63FC636363BEBE63635363BE21 +dec (0x50000000000000005555000000005555, 0xD000000000000000DDDD00000000DDDD) = 0xB27207A83DFB7F8775BF720727FD459F +declast(0x50000000000000005555000000005555, 0xD000000000000000DDDD00000000DDDD) = 0x82ED52526C5252528F8FED52ED528F30 +enc (0x50000000000000005555000000005555, 0xE000000000000000EEEE00000000EEEE) = 0x83D9FC4646D9FCFC8D8D6363B9AC2298 +enclast(0x50000000000000005555000000005555, 0xE000000000000000EEEE00000000EEEE) = 0x83FCFC63FC6363638D8D636353638D12 +dec (0x50000000000000005555000000005555, 0xE000000000000000EEEE00000000EEEE) = 0x827207A83DFB7F87468C720727FD76AC +declast(0x50000000000000005555000000005555, 0xE000000000000000EEEE00000000EEEE) = 0xB2ED52526C525252BCBCED52ED52BC03 +enc (0x50000000000000005555000000005555, 0xF000000000000000FFFF00000000FFFF) = 0x93D9FC4646D9FCFC9C9C6363B9AC3389 +enclast(0x50000000000000005555000000005555, 0xF000000000000000FFFF00000000FFFF) = 0x93FCFC63FC6363639C9C636353639C03 +dec (0x50000000000000005555000000005555, 0xF000000000000000FFFF00000000FFFF) = 0x927207A83DFB7F87579D720727FD67BD +declast(0x50000000000000005555000000005555, 0xF000000000000000FFFF00000000FFFF) = 0xA2ED52526C525252ADADED52ED52AD12 +keygenassist(0x50000000000000005555000000005555, 0x00) = 0x635363635363636363FCFC63FCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x01) = 0x635363625363636363FCFC62FCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x02) = 0x635363615363636363FCFC61FCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x04) = 0x635363675363636363FCFC67FCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x08) = 0x6353636B5363636363FCFC6BFCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x10) = 0x635363735363636363FCFC73FCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x38) = 0x6353635B5363636363FCFC5BFCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x4F) = 0x6353632C5363636363FCFC2CFCFC6363 +keygenassist(0x50000000000000005555000000005555, 0xFF) = 0x6353639C5363636363FCFC9CFCFC6363 +imc (0x50000000000000005555000000005555) = 0x4D46BDE600000000B01AE54FE54FB01A +pclmul(0x50000000000000005555000000005555, 0x00) = 0x1F33D32CFFD333E0CC33FFD32CD31F1F +pclmul(0x50000000000000005555000000005555, 0x01) = 0x1F10FFF00FFFEF10E0EF0FFFF0001F1F +pclmul(0x50000000000000005555000000005555, 0x10) = 0x1EC0F0DEC0F0DEEEF000000000000000 +pclmul(0x50000000000000005555000000005555, 0xFF) = 0x1EE1EEEEE1EEEEEEF000000000000000 +enc (0x60000000000000006666000000006666, 0x00000000000000000000000000000000) = 0x639333C3C393333363636363EEFD8070 +enclast(0x60000000000000006666000000006666, 0x00000000000000000000000000000000) = 0x633333633363636363636363D0636333 +dec (0x60000000000000006666000000006666, 0x00000000000000000000000000000000) = 0xB71DAE85A245FFDA85B71DAEE17960F8 +declast(0x60000000000000006666000000006666, 0x00000000000000000000000000000000) = 0x52D35252905252525252D352D35252D3 +enc (0x60000000000000006666000000006666, 0x10000000000000001111000000001111) = 0x739333C3C393333372726363EEFD9161 +enclast(0x60000000000000006666000000006666, 0x10000000000000001111000000001111) = 0x733333633363636372726363D0637222 +dec (0x60000000000000006666000000006666, 0x10000000000000001111000000001111) = 0xA71DAE85A245FFDA94A61DAEE17971E9 +declast(0x60000000000000006666000000006666, 0x10000000000000001111000000001111) = 0x42D35252905252524343D352D35243C2 +enc (0x60000000000000006666000000006666, 0x20000000000000002222000000002222) = 0x439333C3C393333341416363EEFDA252 +enclast(0x60000000000000006666000000006666, 0x20000000000000002222000000002222) = 0x433333633363636341416363D0634111 +dec (0x60000000000000006666000000006666, 0x20000000000000002222000000002222) = 0x971DAE85A245FFDAA7951DAEE17942DA +declast(0x60000000000000006666000000006666, 0x20000000000000002222000000002222) = 0x72D35252905252527070D352D35270F1 +enc (0x60000000000000006666000000006666, 0x30000000000000003333000000003333) = 0x539333C3C393333350506363EEFDB343 +enclast(0x60000000000000006666000000006666, 0x30000000000000003333000000003333) = 0x533333633363636350506363D0635000 +dec (0x60000000000000006666000000006666, 0x30000000000000003333000000003333) = 0x871DAE85A245FFDAB6841DAEE17953CB +declast(0x60000000000000006666000000006666, 0x30000000000000003333000000003333) = 0x62D35252905252526161D352D35261E0 +enc (0x60000000000000006666000000006666, 0x40000000000000004444000000004444) = 0x239333C3C393333327276363EEFDC434 +enclast(0x60000000000000006666000000006666, 0x40000000000000004444000000004444) = 0x233333633363636327276363D0632777 +dec (0x60000000000000006666000000006666, 0x40000000000000004444000000004444) = 0xF71DAE85A245FFDAC1F31DAEE17924BC +declast(0x60000000000000006666000000006666, 0x40000000000000004444000000004444) = 0x12D35252905252521616D352D3521697 +enc (0x60000000000000006666000000006666, 0x50000000000000005555000000005555) = 0x339333C3C393333336366363EEFDD525 +enclast(0x60000000000000006666000000006666, 0x50000000000000005555000000005555) = 0x333333633363636336366363D0633666 +dec (0x60000000000000006666000000006666, 0x50000000000000005555000000005555) = 0xE71DAE85A245FFDAD0E21DAEE17935AD +declast(0x60000000000000006666000000006666, 0x50000000000000005555000000005555) = 0x02D35252905252520707D352D3520786 +enc (0x60000000000000006666000000006666, 0x60000000000000006666000000006666) = 0x039333C3C393333305056363EEFDE616 +enclast(0x60000000000000006666000000006666, 0x60000000000000006666000000006666) = 0x033333633363636305056363D0630555 +dec (0x60000000000000006666000000006666, 0x60000000000000006666000000006666) = 0xD71DAE85A245FFDAE3D11DAEE179069E +declast(0x60000000000000006666000000006666, 0x60000000000000006666000000006666) = 0x32D35252905252523434D352D35234B5 +enc (0x60000000000000006666000000006666, 0x70000000000000007777000000007777) = 0x139333C3C393333314146363EEFDF707 +enclast(0x60000000000000006666000000006666, 0x70000000000000007777000000007777) = 0x133333633363636314146363D0631444 +dec (0x60000000000000006666000000006666, 0x70000000000000007777000000007777) = 0xC71DAE85A245FFDAF2C01DAEE179178F +declast(0x60000000000000006666000000006666, 0x70000000000000007777000000007777) = 0x22D35252905252522525D352D35225A4 +enc (0x60000000000000006666000000006666, 0x80000000000000008888000000008888) = 0xE39333C3C3933333EBEB6363EEFD08F8 +enclast(0x60000000000000006666000000006666, 0x80000000000000008888000000008888) = 0xE333336333636363EBEB6363D063EBBB +dec (0x60000000000000006666000000006666, 0x80000000000000008888000000008888) = 0x371DAE85A245FFDA0D3F1DAEE179E870 +declast(0x60000000000000006666000000006666, 0x80000000000000008888000000008888) = 0xD2D3525290525252DADAD352D352DA5B +enc (0x60000000000000006666000000006666, 0x90000000000000009999000000009999) = 0xF39333C3C3933333FAFA6363EEFD19E9 +enclast(0x60000000000000006666000000006666, 0x90000000000000009999000000009999) = 0xF333336333636363FAFA6363D063FAAA +dec (0x60000000000000006666000000006666, 0x90000000000000009999000000009999) = 0x271DAE85A245FFDA1C2E1DAEE179F961 +declast(0x60000000000000006666000000006666, 0x90000000000000009999000000009999) = 0xC2D3525290525252CBCBD352D352CB4A +enc (0x60000000000000006666000000006666, 0xA000000000000000AAAA00000000AAAA) = 0xC39333C3C3933333C9C96363EEFD2ADA +enclast(0x60000000000000006666000000006666, 0xA000000000000000AAAA00000000AAAA) = 0xC333336333636363C9C96363D063C999 +dec (0x60000000000000006666000000006666, 0xA000000000000000AAAA00000000AAAA) = 0x171DAE85A245FFDA2F1D1DAEE179CA52 +declast(0x60000000000000006666000000006666, 0xA000000000000000AAAA00000000AAAA) = 0xF2D3525290525252F8F8D352D352F879 +enc (0x60000000000000006666000000006666, 0xB000000000000000BBBB00000000BBBB) = 0xD39333C3C3933333D8D86363EEFD3BCB +enclast(0x60000000000000006666000000006666, 0xB000000000000000BBBB00000000BBBB) = 0xD333336333636363D8D86363D063D888 +dec (0x60000000000000006666000000006666, 0xB000000000000000BBBB00000000BBBB) = 0x071DAE85A245FFDA3E0C1DAEE179DB43 +declast(0x60000000000000006666000000006666, 0xB000000000000000BBBB00000000BBBB) = 0xE2D3525290525252E9E9D352D352E968 +enc (0x60000000000000006666000000006666, 0xC000000000000000CCCC00000000CCCC) = 0xA39333C3C3933333AFAF6363EEFD4CBC +enclast(0x60000000000000006666000000006666, 0xC000000000000000CCCC00000000CCCC) = 0xA333336333636363AFAF6363D063AFFF +dec (0x60000000000000006666000000006666, 0xC000000000000000CCCC00000000CCCC) = 0x771DAE85A245FFDA497B1DAEE179AC34 +declast(0x60000000000000006666000000006666, 0xC000000000000000CCCC00000000CCCC) = 0x92D35252905252529E9ED352D3529E1F +enc (0x60000000000000006666000000006666, 0xD000000000000000DDDD00000000DDDD) = 0xB39333C3C3933333BEBE6363EEFD5DAD +enclast(0x60000000000000006666000000006666, 0xD000000000000000DDDD00000000DDDD) = 0xB333336333636363BEBE6363D063BEEE +dec (0x60000000000000006666000000006666, 0xD000000000000000DDDD00000000DDDD) = 0x671DAE85A245FFDA586A1DAEE179BD25 +declast(0x60000000000000006666000000006666, 0xD000000000000000DDDD00000000DDDD) = 0x82D35252905252528F8FD352D3528F0E +enc (0x60000000000000006666000000006666, 0xE000000000000000EEEE00000000EEEE) = 0x839333C3C39333338D8D6363EEFD6E9E +enclast(0x60000000000000006666000000006666, 0xE000000000000000EEEE00000000EEEE) = 0x83333363336363638D8D6363D0638DDD +dec (0x60000000000000006666000000006666, 0xE000000000000000EEEE00000000EEEE) = 0x571DAE85A245FFDA6B591DAEE1798E16 +declast(0x60000000000000006666000000006666, 0xE000000000000000EEEE00000000EEEE) = 0xB2D3525290525252BCBCD352D352BC3D +enc (0x60000000000000006666000000006666, 0xF000000000000000FFFF00000000FFFF) = 0x939333C3C39333339C9C6363EEFD7F8F +enclast(0x60000000000000006666000000006666, 0xF000000000000000FFFF00000000FFFF) = 0x93333363336363639C9C6363D0639CCC +dec (0x60000000000000006666000000006666, 0xF000000000000000FFFF00000000FFFF) = 0x471DAE85A245FFDA7A481DAEE1799F07 +declast(0x60000000000000006666000000006666, 0xF000000000000000FFFF00000000FFFF) = 0xA2D3525290525252ADADD352D352AD2C +keygenassist(0x60000000000000006666000000006666, 0x00) = 0x63D06363D06363636333336333336363 +keygenassist(0x60000000000000006666000000006666, 0x01) = 0x63D06362D06363636333336233336363 +keygenassist(0x60000000000000006666000000006666, 0x02) = 0x63D06361D06363636333336133336363 +keygenassist(0x60000000000000006666000000006666, 0x04) = 0x63D06367D06363636333336733336363 +keygenassist(0x60000000000000006666000000006666, 0x08) = 0x63D0636BD06363636333336B33336363 +keygenassist(0x60000000000000006666000000006666, 0x10) = 0x63D06373D06363636333337333336363 +keygenassist(0x60000000000000006666000000006666, 0x38) = 0x63D0635BD06363636333335B33336363 +keygenassist(0x60000000000000006666000000006666, 0x4F) = 0x63D0632CD06363636333332C33336363 +keygenassist(0x60000000000000006666000000006666, 0xFF) = 0x63D0639CD06363636333339C33336363 +imc (0x60000000000000006666000000006666) = 0x768DD64D0000000029E54F834F8329E5 +pclmul(0x60000000000000006666000000006666, 0x00) = 0x15F5E01FFFE00A15F5F5FFE01FE015EA +pclmul(0x60000000000000006666000000006666, 0x01) = 0x15D3330A39331FD326E039330A0015EA +pclmul(0x60000000000000006666000000006666, 0x10) = 0x14AAAAB4AAAAB4B4A000000000000000 +pclmul(0x60000000000000006666000000006666, 0xFF) = 0x148E14B48E14B4B4A000000000000000 +enc (0x70000000000000007777000000007777, 0x00000000000000000000000000000000) = 0x63C2F55454C2F5F563636363A6A3C766 +enclast(0x70000000000000007777000000007777, 0x00000000000000000000000000000000) = 0x63F5F563F563636363636363516363F5 +dec (0x70000000000000007777000000007777, 0x00000000000000000000000000000000) = 0xB41F14EF0FB392ACEFB41F1459A909F9 +declast(0x70000000000000007777000000007777, 0x00000000000000000000000000000000) = 0x52025252D05252525252025202525202 +enc (0x70000000000000007777000000007777, 0x10000000000000001111000000001111) = 0x73C2F55454C2F5F572726363A6A3D677 +enclast(0x70000000000000007777000000007777, 0x10000000000000001111000000001111) = 0x73F5F563F563636372726363516372E4 +dec (0x70000000000000007777000000007777, 0x10000000000000001111000000001111) = 0xA41F14EF0FB392ACFEA51F1459A918E8 +declast(0x70000000000000007777000000007777, 0x10000000000000001111000000001111) = 0x42025252D05252524343025202524313 +enc (0x70000000000000007777000000007777, 0x20000000000000002222000000002222) = 0x43C2F55454C2F5F541416363A6A3E544 +enclast(0x70000000000000007777000000007777, 0x20000000000000002222000000002222) = 0x43F5F563F563636341416363516341D7 +dec (0x70000000000000007777000000007777, 0x20000000000000002222000000002222) = 0x941F14EF0FB392ACCD961F1459A92BDB +declast(0x70000000000000007777000000007777, 0x20000000000000002222000000002222) = 0x72025252D05252527070025202527020 +enc (0x70000000000000007777000000007777, 0x30000000000000003333000000003333) = 0x53C2F55454C2F5F550506363A6A3F455 +enclast(0x70000000000000007777000000007777, 0x30000000000000003333000000003333) = 0x53F5F563F563636350506363516350C6 +dec (0x70000000000000007777000000007777, 0x30000000000000003333000000003333) = 0x841F14EF0FB392ACDC871F1459A93ACA +declast(0x70000000000000007777000000007777, 0x30000000000000003333000000003333) = 0x62025252D05252526161025202526131 +enc (0x70000000000000007777000000007777, 0x40000000000000004444000000004444) = 0x23C2F55454C2F5F527276363A6A38322 +enclast(0x70000000000000007777000000007777, 0x40000000000000004444000000004444) = 0x23F5F563F563636327276363516327B1 +dec (0x70000000000000007777000000007777, 0x40000000000000004444000000004444) = 0xF41F14EF0FB392ACABF01F1459A94DBD +declast(0x70000000000000007777000000007777, 0x40000000000000004444000000004444) = 0x12025252D05252521616025202521646 +enc (0x70000000000000007777000000007777, 0x50000000000000005555000000005555) = 0x33C2F55454C2F5F536366363A6A39233 +enclast(0x70000000000000007777000000007777, 0x50000000000000005555000000005555) = 0x33F5F563F563636336366363516336A0 +dec (0x70000000000000007777000000007777, 0x50000000000000005555000000005555) = 0xE41F14EF0FB392ACBAE11F1459A95CAC +declast(0x70000000000000007777000000007777, 0x50000000000000005555000000005555) = 0x02025252D05252520707025202520757 +enc (0x70000000000000007777000000007777, 0x60000000000000006666000000006666) = 0x03C2F55454C2F5F505056363A6A3A100 +enclast(0x70000000000000007777000000007777, 0x60000000000000006666000000006666) = 0x03F5F563F56363630505636351630593 +dec (0x70000000000000007777000000007777, 0x60000000000000006666000000006666) = 0xD41F14EF0FB392AC89D21F1459A96F9F +declast(0x70000000000000007777000000007777, 0x60000000000000006666000000006666) = 0x32025252D05252523434025202523464 +enc (0x70000000000000007777000000007777, 0x70000000000000007777000000007777) = 0x13C2F55454C2F5F514146363A6A3B011 +enclast(0x70000000000000007777000000007777, 0x70000000000000007777000000007777) = 0x13F5F563F56363631414636351631482 +dec (0x70000000000000007777000000007777, 0x70000000000000007777000000007777) = 0xC41F14EF0FB392AC98C31F1459A97E8E +declast(0x70000000000000007777000000007777, 0x70000000000000007777000000007777) = 0x22025252D05252522525025202522575 +enc (0x70000000000000007777000000007777, 0x80000000000000008888000000008888) = 0xE3C2F55454C2F5F5EBEB6363A6A34FEE +enclast(0x70000000000000007777000000007777, 0x80000000000000008888000000008888) = 0xE3F5F563F5636363EBEB63635163EB7D +dec (0x70000000000000007777000000007777, 0x80000000000000008888000000008888) = 0x341F14EF0FB392AC673C1F1459A98171 +declast(0x70000000000000007777000000007777, 0x80000000000000008888000000008888) = 0xD2025252D0525252DADA02520252DA8A +enc (0x70000000000000007777000000007777, 0x90000000000000009999000000009999) = 0xF3C2F55454C2F5F5FAFA6363A6A35EFF +enclast(0x70000000000000007777000000007777, 0x90000000000000009999000000009999) = 0xF3F5F563F5636363FAFA63635163FA6C +dec (0x70000000000000007777000000007777, 0x90000000000000009999000000009999) = 0x241F14EF0FB392AC762D1F1459A99060 +declast(0x70000000000000007777000000007777, 0x90000000000000009999000000009999) = 0xC2025252D0525252CBCB02520252CB9B +enc (0x70000000000000007777000000007777, 0xA000000000000000AAAA00000000AAAA) = 0xC3C2F55454C2F5F5C9C96363A6A36DCC +enclast(0x70000000000000007777000000007777, 0xA000000000000000AAAA00000000AAAA) = 0xC3F5F563F5636363C9C963635163C95F +dec (0x70000000000000007777000000007777, 0xA000000000000000AAAA00000000AAAA) = 0x141F14EF0FB392AC451E1F1459A9A353 +declast(0x70000000000000007777000000007777, 0xA000000000000000AAAA00000000AAAA) = 0xF2025252D0525252F8F802520252F8A8 +enc (0x70000000000000007777000000007777, 0xB000000000000000BBBB00000000BBBB) = 0xD3C2F55454C2F5F5D8D86363A6A37CDD +enclast(0x70000000000000007777000000007777, 0xB000000000000000BBBB00000000BBBB) = 0xD3F5F563F5636363D8D863635163D84E +dec (0x70000000000000007777000000007777, 0xB000000000000000BBBB00000000BBBB) = 0x041F14EF0FB392AC540F1F1459A9B242 +declast(0x70000000000000007777000000007777, 0xB000000000000000BBBB00000000BBBB) = 0xE2025252D0525252E9E902520252E9B9 +enc (0x70000000000000007777000000007777, 0xC000000000000000CCCC00000000CCCC) = 0xA3C2F55454C2F5F5AFAF6363A6A30BAA +enclast(0x70000000000000007777000000007777, 0xC000000000000000CCCC00000000CCCC) = 0xA3F5F563F5636363AFAF63635163AF39 +dec (0x70000000000000007777000000007777, 0xC000000000000000CCCC00000000CCCC) = 0x741F14EF0FB392AC23781F1459A9C535 +declast(0x70000000000000007777000000007777, 0xC000000000000000CCCC00000000CCCC) = 0x92025252D05252529E9E025202529ECE +enc (0x70000000000000007777000000007777, 0xD000000000000000DDDD00000000DDDD) = 0xB3C2F55454C2F5F5BEBE6363A6A31ABB +enclast(0x70000000000000007777000000007777, 0xD000000000000000DDDD00000000DDDD) = 0xB3F5F563F5636363BEBE63635163BE28 +dec (0x70000000000000007777000000007777, 0xD000000000000000DDDD00000000DDDD) = 0x641F14EF0FB392AC32691F1459A9D424 +declast(0x70000000000000007777000000007777, 0xD000000000000000DDDD00000000DDDD) = 0x82025252D05252528F8F025202528FDF +enc (0x70000000000000007777000000007777, 0xE000000000000000EEEE00000000EEEE) = 0x83C2F55454C2F5F58D8D6363A6A32988 +enclast(0x70000000000000007777000000007777, 0xE000000000000000EEEE00000000EEEE) = 0x83F5F563F56363638D8D636351638D1B +dec (0x70000000000000007777000000007777, 0xE000000000000000EEEE00000000EEEE) = 0x541F14EF0FB392AC015A1F1459A9E717 +declast(0x70000000000000007777000000007777, 0xE000000000000000EEEE00000000EEEE) = 0xB2025252D0525252BCBC02520252BCEC +enc (0x70000000000000007777000000007777, 0xF000000000000000FFFF00000000FFFF) = 0x93C2F55454C2F5F59C9C6363A6A33899 +enclast(0x70000000000000007777000000007777, 0xF000000000000000FFFF00000000FFFF) = 0x93F5F563F56363639C9C636351639C0A +dec (0x70000000000000007777000000007777, 0xF000000000000000FFFF00000000FFFF) = 0x441F14EF0FB392AC104B1F1459A9F606 +declast(0x70000000000000007777000000007777, 0xF000000000000000FFFF00000000FFFF) = 0xA2025252D0525252ADAD02520252ADFD +keygenassist(0x70000000000000007777000000007777, 0x00) = 0x635163635163636363F5F563F5F56363 +keygenassist(0x70000000000000007777000000007777, 0x01) = 0x635163625163636363F5F562F5F56363 +keygenassist(0x70000000000000007777000000007777, 0x02) = 0x635163615163636363F5F561F5F56363 +keygenassist(0x70000000000000007777000000007777, 0x04) = 0x635163675163636363F5F567F5F56363 +keygenassist(0x70000000000000007777000000007777, 0x08) = 0x6351636B5163636363F5F56BF5F56363 +keygenassist(0x70000000000000007777000000007777, 0x10) = 0x635163735163636363F5F573F5F56363 +keygenassist(0x70000000000000007777000000007777, 0x38) = 0x6351635B5163636363F5F55BF5F56363 +keygenassist(0x70000000000000007777000000007777, 0x4F) = 0x6351632C5163636363F5F52CF5F56363 +keygenassist(0x70000000000000007777000000007777, 0xFF) = 0x6351639C5163636363F5F59CF5F56363 +imc (0x70000000000000007777000000007777) = 0x963D06DD000000005EB029C729C75EB0 +pclmul(0x70000000000000007777000000007777, 0x00) = 0x1384C23DFFC22E46D184FFC23DC213B9 +pclmul(0x70000000000000007777000000007777, 0x01) = 0x13B0777E09776DB064C709777E0013B9 +pclmul(0x70000000000000007777000000007777, 0x10) = 0x12BC9CA2BC9CA2829000000000000000 +pclmul(0x70000000000000007777000000007777, 0xFF) = 0x128B62828B6282829000000000000000 +enc (0x80000000000000008888000000008888, 0x00000000000000000000000000000000) = 0x6391C4363691C4C463636363D62D6A98 +enclast(0x80000000000000008888000000008888, 0x00000000000000000000000000000000) = 0x63C4C463C463636363636363CD6363C4 +dec (0x80000000000000008888000000008888, 0x00000000000000000000000000000000) = 0xE58874DC5487EC57DCE58874AEFA6B3F +declast(0x80000000000000008888000000008888, 0x00000000000000000000000000000000) = 0x529752523A5252525252975297525297 +enc (0x80000000000000008888000000008888, 0x10000000000000001111000000001111) = 0x7391C4363691C4C472726363D62D7B89 +enclast(0x80000000000000008888000000008888, 0x10000000000000001111000000001111) = 0x73C4C463C463636372726363CD6372D5 +dec (0x80000000000000008888000000008888, 0x10000000000000001111000000001111) = 0xF58874DC5487EC57CDF48874AEFA7A2E +declast(0x80000000000000008888000000008888, 0x10000000000000001111000000001111) = 0x429752523A5252524343975297524386 +enc (0x80000000000000008888000000008888, 0x20000000000000002222000000002222) = 0x4391C4363691C4C441416363D62D48BA +enclast(0x80000000000000008888000000008888, 0x20000000000000002222000000002222) = 0x43C4C463C463636341416363CD6341E6 +dec (0x80000000000000008888000000008888, 0x20000000000000002222000000002222) = 0xC58874DC5487EC57FEC78874AEFA491D +declast(0x80000000000000008888000000008888, 0x20000000000000002222000000002222) = 0x729752523A52525270709752975270B5 +enc (0x80000000000000008888000000008888, 0x30000000000000003333000000003333) = 0x5391C4363691C4C450506363D62D59AB +enclast(0x80000000000000008888000000008888, 0x30000000000000003333000000003333) = 0x53C4C463C463636350506363CD6350F7 +dec (0x80000000000000008888000000008888, 0x30000000000000003333000000003333) = 0xD58874DC5487EC57EFD68874AEFA580C +declast(0x80000000000000008888000000008888, 0x30000000000000003333000000003333) = 0x629752523A52525261619752975261A4 +enc (0x80000000000000008888000000008888, 0x40000000000000004444000000004444) = 0x2391C4363691C4C427276363D62D2EDC +enclast(0x80000000000000008888000000008888, 0x40000000000000004444000000004444) = 0x23C4C463C463636327276363CD632780 +dec (0x80000000000000008888000000008888, 0x40000000000000004444000000004444) = 0xA58874DC5487EC5798A18874AEFA2F7B +declast(0x80000000000000008888000000008888, 0x40000000000000004444000000004444) = 0x129752523A52525216169752975216D3 +enc (0x80000000000000008888000000008888, 0x50000000000000005555000000005555) = 0x3391C4363691C4C436366363D62D3FCD +enclast(0x80000000000000008888000000008888, 0x50000000000000005555000000005555) = 0x33C4C463C463636336366363CD633691 +dec (0x80000000000000008888000000008888, 0x50000000000000005555000000005555) = 0xB58874DC5487EC5789B08874AEFA3E6A +declast(0x80000000000000008888000000008888, 0x50000000000000005555000000005555) = 0x029752523A52525207079752975207C2 +enc (0x80000000000000008888000000008888, 0x60000000000000006666000000006666) = 0x0391C4363691C4C405056363D62D0CFE +enclast(0x80000000000000008888000000008888, 0x60000000000000006666000000006666) = 0x03C4C463C463636305056363CD6305A2 +dec (0x80000000000000008888000000008888, 0x60000000000000006666000000006666) = 0x858874DC5487EC57BA838874AEFA0D59 +declast(0x80000000000000008888000000008888, 0x60000000000000006666000000006666) = 0x329752523A52525234349752975234F1 +enc (0x80000000000000008888000000008888, 0x70000000000000007777000000007777) = 0x1391C4363691C4C414146363D62D1DEF +enclast(0x80000000000000008888000000008888, 0x70000000000000007777000000007777) = 0x13C4C463C463636314146363CD6314B3 +dec (0x80000000000000008888000000008888, 0x70000000000000007777000000007777) = 0x958874DC5487EC57AB928874AEFA1C48 +declast(0x80000000000000008888000000008888, 0x70000000000000007777000000007777) = 0x229752523A52525225259752975225E0 +enc (0x80000000000000008888000000008888, 0x80000000000000008888000000008888) = 0xE391C4363691C4C4EBEB6363D62DE210 +enclast(0x80000000000000008888000000008888, 0x80000000000000008888000000008888) = 0xE3C4C463C4636363EBEB6363CD63EB4C +dec (0x80000000000000008888000000008888, 0x80000000000000008888000000008888) = 0x658874DC5487EC57546D8874AEFAE3B7 +declast(0x80000000000000008888000000008888, 0x80000000000000008888000000008888) = 0xD29752523A525252DADA97529752DA1F +enc (0x80000000000000008888000000008888, 0x90000000000000009999000000009999) = 0xF391C4363691C4C4FAFA6363D62DF301 +enclast(0x80000000000000008888000000008888, 0x90000000000000009999000000009999) = 0xF3C4C463C4636363FAFA6363CD63FA5D +dec (0x80000000000000008888000000008888, 0x90000000000000009999000000009999) = 0x758874DC5487EC57457C8874AEFAF2A6 +declast(0x80000000000000008888000000008888, 0x90000000000000009999000000009999) = 0xC29752523A525252CBCB97529752CB0E +enc (0x80000000000000008888000000008888, 0xA000000000000000AAAA00000000AAAA) = 0xC391C4363691C4C4C9C96363D62DC032 +enclast(0x80000000000000008888000000008888, 0xA000000000000000AAAA00000000AAAA) = 0xC3C4C463C4636363C9C96363CD63C96E +dec (0x80000000000000008888000000008888, 0xA000000000000000AAAA00000000AAAA) = 0x458874DC5487EC57764F8874AEFAC195 +declast(0x80000000000000008888000000008888, 0xA000000000000000AAAA00000000AAAA) = 0xF29752523A525252F8F897529752F83D +enc (0x80000000000000008888000000008888, 0xB000000000000000BBBB00000000BBBB) = 0xD391C4363691C4C4D8D86363D62DD123 +enclast(0x80000000000000008888000000008888, 0xB000000000000000BBBB00000000BBBB) = 0xD3C4C463C4636363D8D86363CD63D87F +dec (0x80000000000000008888000000008888, 0xB000000000000000BBBB00000000BBBB) = 0x558874DC5487EC57675E8874AEFAD084 +declast(0x80000000000000008888000000008888, 0xB000000000000000BBBB00000000BBBB) = 0xE29752523A525252E9E997529752E92C +enc (0x80000000000000008888000000008888, 0xC000000000000000CCCC00000000CCCC) = 0xA391C4363691C4C4AFAF6363D62DA654 +enclast(0x80000000000000008888000000008888, 0xC000000000000000CCCC00000000CCCC) = 0xA3C4C463C4636363AFAF6363CD63AF08 +dec (0x80000000000000008888000000008888, 0xC000000000000000CCCC00000000CCCC) = 0x258874DC5487EC5710298874AEFAA7F3 +declast(0x80000000000000008888000000008888, 0xC000000000000000CCCC00000000CCCC) = 0x929752523A5252529E9E975297529E5B +enc (0x80000000000000008888000000008888, 0xD000000000000000DDDD00000000DDDD) = 0xB391C4363691C4C4BEBE6363D62DB745 +enclast(0x80000000000000008888000000008888, 0xD000000000000000DDDD00000000DDDD) = 0xB3C4C463C4636363BEBE6363CD63BE19 +dec (0x80000000000000008888000000008888, 0xD000000000000000DDDD00000000DDDD) = 0x358874DC5487EC5701388874AEFAB6E2 +declast(0x80000000000000008888000000008888, 0xD000000000000000DDDD00000000DDDD) = 0x829752523A5252528F8F975297528F4A +enc (0x80000000000000008888000000008888, 0xE000000000000000EEEE00000000EEEE) = 0x8391C4363691C4C48D8D6363D62D8476 +enclast(0x80000000000000008888000000008888, 0xE000000000000000EEEE00000000EEEE) = 0x83C4C463C46363638D8D6363CD638D2A +dec (0x80000000000000008888000000008888, 0xE000000000000000EEEE00000000EEEE) = 0x058874DC5487EC57320B8874AEFA85D1 +declast(0x80000000000000008888000000008888, 0xE000000000000000EEEE00000000EEEE) = 0xB29752523A525252BCBC97529752BC79 +enc (0x80000000000000008888000000008888, 0xF000000000000000FFFF00000000FFFF) = 0x9391C4363691C4C49C9C6363D62D9567 +enclast(0x80000000000000008888000000008888, 0xF000000000000000FFFF00000000FFFF) = 0x93C4C463C46363639C9C6363CD639C3B +dec (0x80000000000000008888000000008888, 0xF000000000000000FFFF00000000FFFF) = 0x158874DC5487EC57231A8874AEFA94C0 +declast(0x80000000000000008888000000008888, 0xF000000000000000FFFF00000000FFFF) = 0xA29752523A525252ADAD97529752AD68 +keygenassist(0x80000000000000008888000000008888, 0x00) = 0x63CD6363CD63636363C4C463C4C46363 +keygenassist(0x80000000000000008888000000008888, 0x01) = 0x63CD6362CD63636363C4C462C4C46363 +keygenassist(0x80000000000000008888000000008888, 0x02) = 0x63CD6361CD63636363C4C461C4C46363 +keygenassist(0x80000000000000008888000000008888, 0x04) = 0x63CD6367CD63636363C4C467C4C46363 +keygenassist(0x80000000000000008888000000008888, 0x08) = 0x63CD636BCD63636363C4C46BC4C46363 +keygenassist(0x80000000000000008888000000008888, 0x10) = 0x63CD6373CD63636363C4C473C4C46363 +keygenassist(0x80000000000000008888000000008888, 0x38) = 0x63CD635BCD63636363C4C45BC4C46363 +keygenassist(0x80000000000000008888000000008888, 0x4F) = 0x63CD632CCD63636363C4C42CC4C46363 +keygenassist(0x80000000000000008888000000008888, 0xFF) = 0x63CD639CCD63636363C4C49CC4C46363 +imc (0x80000000000000008888000000008888) = 0x41F7DAEC00000000959E1D161D16959E +pclmul(0x80000000000000008888000000008888, 0x00) = 0x32CEB856EEB864768ACEEEB856B83298 +pclmul(0x80000000000000008888000000008888, 0x01) = 0x32CA2270522242CA10E8522270003298 +pclmul(0x80000000000000008888000000008888, 0x10) = 0x31E26231E26231B18000000000000000 +pclmul(0x80000000000000008888000000008888, 0xFF) = 0x31E6B1B1E6B1B1B18000000000000000 +enc (0x90000000000000009999000000009999, 0x00000000000000000000000000000000) = 0x63EFEE6262EFEEEE63636363E9EBED61 +enclast(0x90000000000000009999000000009999, 0x00000000000000000000000000000000) = 0x63EEEE63EE63636363636363606363EE +dec (0x90000000000000009999000000009999, 0x00000000000000000000000000000000) = 0xD6AA9B4C867FD1EC4CD6AA9B6385C82E +declast(0x90000000000000009999000000009999, 0x00000000000000000000000000000000) = 0x52F95252965252525252F952F95252F9 +enc (0x90000000000000009999000000009999, 0x10000000000000001111000000001111) = 0x73EFEE6262EFEEEE72726363E9EBFC70 +enclast(0x90000000000000009999000000009999, 0x10000000000000001111000000001111) = 0x73EEEE63EE63636372726363606372FF +dec (0x90000000000000009999000000009999, 0x10000000000000001111000000001111) = 0xC6AA9B4C867FD1EC5DC7AA9B6385D93F +declast(0x90000000000000009999000000009999, 0x10000000000000001111000000001111) = 0x42F95252965252524343F952F95243E8 +enc (0x90000000000000009999000000009999, 0x20000000000000002222000000002222) = 0x43EFEE6262EFEEEE41416363E9EBCF43 +enclast(0x90000000000000009999000000009999, 0x20000000000000002222000000002222) = 0x43EEEE63EE63636341416363606341CC +dec (0x90000000000000009999000000009999, 0x20000000000000002222000000002222) = 0xF6AA9B4C867FD1EC6EF4AA9B6385EA0C +declast(0x90000000000000009999000000009999, 0x20000000000000002222000000002222) = 0x72F95252965252527070F952F95270DB +enc (0x90000000000000009999000000009999, 0x30000000000000003333000000003333) = 0x53EFEE6262EFEEEE50506363E9EBDE52 +enclast(0x90000000000000009999000000009999, 0x30000000000000003333000000003333) = 0x53EEEE63EE63636350506363606350DD +dec (0x90000000000000009999000000009999, 0x30000000000000003333000000003333) = 0xE6AA9B4C867FD1EC7FE5AA9B6385FB1D +declast(0x90000000000000009999000000009999, 0x30000000000000003333000000003333) = 0x62F95252965252526161F952F95261CA +enc (0x90000000000000009999000000009999, 0x40000000000000004444000000004444) = 0x23EFEE6262EFEEEE27276363E9EBA925 +enclast(0x90000000000000009999000000009999, 0x40000000000000004444000000004444) = 0x23EEEE63EE63636327276363606327AA +dec (0x90000000000000009999000000009999, 0x40000000000000004444000000004444) = 0x96AA9B4C867FD1EC0892AA9B63858C6A +declast(0x90000000000000009999000000009999, 0x40000000000000004444000000004444) = 0x12F95252965252521616F952F95216BD +enc (0x90000000000000009999000000009999, 0x50000000000000005555000000005555) = 0x33EFEE6262EFEEEE36366363E9EBB834 +enclast(0x90000000000000009999000000009999, 0x50000000000000005555000000005555) = 0x33EEEE63EE63636336366363606336BB +dec (0x90000000000000009999000000009999, 0x50000000000000005555000000005555) = 0x86AA9B4C867FD1EC1983AA9B63859D7B +declast(0x90000000000000009999000000009999, 0x50000000000000005555000000005555) = 0x02F95252965252520707F952F95207AC +enc (0x90000000000000009999000000009999, 0x60000000000000006666000000006666) = 0x03EFEE6262EFEEEE05056363E9EB8B07 +enclast(0x90000000000000009999000000009999, 0x60000000000000006666000000006666) = 0x03EEEE63EE6363630505636360630588 +dec (0x90000000000000009999000000009999, 0x60000000000000006666000000006666) = 0xB6AA9B4C867FD1EC2AB0AA9B6385AE48 +declast(0x90000000000000009999000000009999, 0x60000000000000006666000000006666) = 0x32F95252965252523434F952F952349F +enc (0x90000000000000009999000000009999, 0x70000000000000007777000000007777) = 0x13EFEE6262EFEEEE14146363E9EB9A16 +enclast(0x90000000000000009999000000009999, 0x70000000000000007777000000007777) = 0x13EEEE63EE6363631414636360631499 +dec (0x90000000000000009999000000009999, 0x70000000000000007777000000007777) = 0xA6AA9B4C867FD1EC3BA1AA9B6385BF59 +declast(0x90000000000000009999000000009999, 0x70000000000000007777000000007777) = 0x22F95252965252522525F952F952258E +enc (0x90000000000000009999000000009999, 0x80000000000000008888000000008888) = 0xE3EFEE6262EFEEEEEBEB6363E9EB65E9 +enclast(0x90000000000000009999000000009999, 0x80000000000000008888000000008888) = 0xE3EEEE63EE636363EBEB63636063EB66 +dec (0x90000000000000009999000000009999, 0x80000000000000008888000000008888) = 0x56AA9B4C867FD1ECC45EAA9B638540A6 +declast(0x90000000000000009999000000009999, 0x80000000000000008888000000008888) = 0xD2F9525296525252DADAF952F952DA71 +enc (0x90000000000000009999000000009999, 0x90000000000000009999000000009999) = 0xF3EFEE6262EFEEEEFAFA6363E9EB74F8 +enclast(0x90000000000000009999000000009999, 0x90000000000000009999000000009999) = 0xF3EEEE63EE636363FAFA63636063FA77 +dec (0x90000000000000009999000000009999, 0x90000000000000009999000000009999) = 0x46AA9B4C867FD1ECD54FAA9B638551B7 +declast(0x90000000000000009999000000009999, 0x90000000000000009999000000009999) = 0xC2F9525296525252CBCBF952F952CB60 +enc (0x90000000000000009999000000009999, 0xA000000000000000AAAA00000000AAAA) = 0xC3EFEE6262EFEEEEC9C96363E9EB47CB +enclast(0x90000000000000009999000000009999, 0xA000000000000000AAAA00000000AAAA) = 0xC3EEEE63EE636363C9C963636063C944 +dec (0x90000000000000009999000000009999, 0xA000000000000000AAAA00000000AAAA) = 0x76AA9B4C867FD1ECE67CAA9B63856284 +declast(0x90000000000000009999000000009999, 0xA000000000000000AAAA00000000AAAA) = 0xF2F9525296525252F8F8F952F952F853 +enc (0x90000000000000009999000000009999, 0xB000000000000000BBBB00000000BBBB) = 0xD3EFEE6262EFEEEED8D86363E9EB56DA +enclast(0x90000000000000009999000000009999, 0xB000000000000000BBBB00000000BBBB) = 0xD3EEEE63EE636363D8D863636063D855 +dec (0x90000000000000009999000000009999, 0xB000000000000000BBBB00000000BBBB) = 0x66AA9B4C867FD1ECF76DAA9B63857395 +declast(0x90000000000000009999000000009999, 0xB000000000000000BBBB00000000BBBB) = 0xE2F9525296525252E9E9F952F952E942 +enc (0x90000000000000009999000000009999, 0xC000000000000000CCCC00000000CCCC) = 0xA3EFEE6262EFEEEEAFAF6363E9EB21AD +enclast(0x90000000000000009999000000009999, 0xC000000000000000CCCC00000000CCCC) = 0xA3EEEE63EE636363AFAF63636063AF22 +dec (0x90000000000000009999000000009999, 0xC000000000000000CCCC00000000CCCC) = 0x16AA9B4C867FD1EC801AAA9B638504E2 +declast(0x90000000000000009999000000009999, 0xC000000000000000CCCC00000000CCCC) = 0x92F95252965252529E9EF952F9529E35 +enc (0x90000000000000009999000000009999, 0xD000000000000000DDDD00000000DDDD) = 0xB3EFEE6262EFEEEEBEBE6363E9EB30BC +enclast(0x90000000000000009999000000009999, 0xD000000000000000DDDD00000000DDDD) = 0xB3EEEE63EE636363BEBE63636063BE33 +dec (0x90000000000000009999000000009999, 0xD000000000000000DDDD00000000DDDD) = 0x06AA9B4C867FD1EC910BAA9B638515F3 +declast(0x90000000000000009999000000009999, 0xD000000000000000DDDD00000000DDDD) = 0x82F95252965252528F8FF952F9528F24 +enc (0x90000000000000009999000000009999, 0xE000000000000000EEEE00000000EEEE) = 0x83EFEE6262EFEEEE8D8D6363E9EB038F +enclast(0x90000000000000009999000000009999, 0xE000000000000000EEEE00000000EEEE) = 0x83EEEE63EE6363638D8D636360638D00 +dec (0x90000000000000009999000000009999, 0xE000000000000000EEEE00000000EEEE) = 0x36AA9B4C867FD1ECA238AA9B638526C0 +declast(0x90000000000000009999000000009999, 0xE000000000000000EEEE00000000EEEE) = 0xB2F9525296525252BCBCF952F952BC17 +enc (0x90000000000000009999000000009999, 0xF000000000000000FFFF00000000FFFF) = 0x93EFEE6262EFEEEE9C9C6363E9EB129E +enclast(0x90000000000000009999000000009999, 0xF000000000000000FFFF00000000FFFF) = 0x93EEEE63EE6363639C9C636360639C11 +dec (0x90000000000000009999000000009999, 0xF000000000000000FFFF00000000FFFF) = 0x26AA9B4C867FD1ECB329AA9B638537D1 +declast(0x90000000000000009999000000009999, 0xF000000000000000FFFF00000000FFFF) = 0xA2F9525296525252ADADF952F952AD06 +keygenassist(0x90000000000000009999000000009999, 0x00) = 0x636063636063636363EEEE63EEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x01) = 0x636063626063636363EEEE62EEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x02) = 0x636063616063636363EEEE61EEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x04) = 0x636063676063636363EEEE67EEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x08) = 0x6360636B6063636363EEEE6BEEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x10) = 0x636063736063636363EEEE73EEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x38) = 0x6360635B6063636363EEEE5BEEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x4F) = 0x6360632C6063636363EEEE2CEEEE6363 +keygenassist(0x90000000000000009999000000009999, 0xFF) = 0x6360639C6063636363EEEE9CEEEE6363 +imc (0x90000000000000009999000000009999) = 0xA1470A7C00000000E2CB7B527B52E2CB +pclmul(0x90000000000000009999000000009999, 0x00) = 0x3481B54AFFB57E348181FFB54AB534CB +pclmul(0x90000000000000009999000000009999, 0x01) = 0x34CAAAAB01AA9FCA9E6001AAAB0034CB +pclmul(0x90000000000000009999000000009999, 0x10) = 0x37C999D7C999D787B000000000000000 +pclmul(0x90000000000000009999000000009999, 0xFF) = 0x3786378786378787B000000000000000 +enc (0xA000000000000000AAAA00000000AAAA, 0x00000000000000000000000000000000) = 0x6329ACE6E629ACAC6363636334322F65 +enclast(0xA000000000000000AAAA00000000AAAA, 0x00000000000000000000000000000000) = 0x63ACAC63AC63636363636363E06363AC +dec (0xA000000000000000AAAA00000000AAAA, 0x00000000000000000000000000000000) = 0xF969993984C5BBEF39F96999A2F292C2 +declast(0xA000000000000000AAAA00000000AAAA, 0x00000000000000000000000000000000) = 0x52625252475252525252625262525262 +enc (0xA000000000000000AAAA00000000AAAA, 0x10000000000000001111000000001111) = 0x7329ACE6E629ACAC7272636334323E74 +enclast(0xA000000000000000AAAA00000000AAAA, 0x10000000000000001111000000001111) = 0x73ACAC63AC63636372726363E06372BD +dec (0xA000000000000000AAAA00000000AAAA, 0x10000000000000001111000000001111) = 0xE969993984C5BBEF28E86999A2F283D3 +declast(0xA000000000000000AAAA00000000AAAA, 0x10000000000000001111000000001111) = 0x42625252475252524343625262524373 +enc (0xA000000000000000AAAA00000000AAAA, 0x20000000000000002222000000002222) = 0x4329ACE6E629ACAC4141636334320D47 +enclast(0xA000000000000000AAAA00000000AAAA, 0x20000000000000002222000000002222) = 0x43ACAC63AC63636341416363E063418E +dec (0xA000000000000000AAAA00000000AAAA, 0x20000000000000002222000000002222) = 0xD969993984C5BBEF1BDB6999A2F2B0E0 +declast(0xA000000000000000AAAA00000000AAAA, 0x20000000000000002222000000002222) = 0x72625252475252527070625262527040 +enc (0xA000000000000000AAAA00000000AAAA, 0x30000000000000003333000000003333) = 0x5329ACE6E629ACAC5050636334321C56 +enclast(0xA000000000000000AAAA00000000AAAA, 0x30000000000000003333000000003333) = 0x53ACAC63AC63636350506363E063509F +dec (0xA000000000000000AAAA00000000AAAA, 0x30000000000000003333000000003333) = 0xC969993984C5BBEF0ACA6999A2F2A1F1 +declast(0xA000000000000000AAAA00000000AAAA, 0x30000000000000003333000000003333) = 0x62625252475252526161625262526151 +enc (0xA000000000000000AAAA00000000AAAA, 0x40000000000000004444000000004444) = 0x2329ACE6E629ACAC2727636334326B21 +enclast(0xA000000000000000AAAA00000000AAAA, 0x40000000000000004444000000004444) = 0x23ACAC63AC63636327276363E06327E8 +dec (0xA000000000000000AAAA00000000AAAA, 0x40000000000000004444000000004444) = 0xB969993984C5BBEF7DBD6999A2F2D686 +declast(0xA000000000000000AAAA00000000AAAA, 0x40000000000000004444000000004444) = 0x12625252475252521616625262521626 +enc (0xA000000000000000AAAA00000000AAAA, 0x50000000000000005555000000005555) = 0x3329ACE6E629ACAC3636636334327A30 +enclast(0xA000000000000000AAAA00000000AAAA, 0x50000000000000005555000000005555) = 0x33ACAC63AC63636336366363E06336F9 +dec (0xA000000000000000AAAA00000000AAAA, 0x50000000000000005555000000005555) = 0xA969993984C5BBEF6CAC6999A2F2C797 +declast(0xA000000000000000AAAA00000000AAAA, 0x50000000000000005555000000005555) = 0x02625252475252520707625262520737 +enc (0xA000000000000000AAAA00000000AAAA, 0x60000000000000006666000000006666) = 0x0329ACE6E629ACAC0505636334324903 +enclast(0xA000000000000000AAAA00000000AAAA, 0x60000000000000006666000000006666) = 0x03ACAC63AC63636305056363E06305CA +dec (0xA000000000000000AAAA00000000AAAA, 0x60000000000000006666000000006666) = 0x9969993984C5BBEF5F9F6999A2F2F4A4 +declast(0xA000000000000000AAAA00000000AAAA, 0x60000000000000006666000000006666) = 0x32625252475252523434625262523404 +enc (0xA000000000000000AAAA00000000AAAA, 0x70000000000000007777000000007777) = 0x1329ACE6E629ACAC1414636334325812 +enclast(0xA000000000000000AAAA00000000AAAA, 0x70000000000000007777000000007777) = 0x13ACAC63AC63636314146363E06314DB +dec (0xA000000000000000AAAA00000000AAAA, 0x70000000000000007777000000007777) = 0x8969993984C5BBEF4E8E6999A2F2E5B5 +declast(0xA000000000000000AAAA00000000AAAA, 0x70000000000000007777000000007777) = 0x22625252475252522525625262522515 +enc (0xA000000000000000AAAA00000000AAAA, 0x80000000000000008888000000008888) = 0xE329ACE6E629ACACEBEB63633432A7ED +enclast(0xA000000000000000AAAA00000000AAAA, 0x80000000000000008888000000008888) = 0xE3ACAC63AC636363EBEB6363E063EB24 +dec (0xA000000000000000AAAA00000000AAAA, 0x80000000000000008888000000008888) = 0x7969993984C5BBEFB1716999A2F21A4A +declast(0xA000000000000000AAAA00000000AAAA, 0x80000000000000008888000000008888) = 0xD262525247525252DADA62526252DAEA +enc (0xA000000000000000AAAA00000000AAAA, 0x90000000000000009999000000009999) = 0xF329ACE6E629ACACFAFA63633432B6FC +enclast(0xA000000000000000AAAA00000000AAAA, 0x90000000000000009999000000009999) = 0xF3ACAC63AC636363FAFA6363E063FA35 +dec (0xA000000000000000AAAA00000000AAAA, 0x90000000000000009999000000009999) = 0x6969993984C5BBEFA0606999A2F20B5B +declast(0xA000000000000000AAAA00000000AAAA, 0x90000000000000009999000000009999) = 0xC262525247525252CBCB62526252CBFB +enc (0xA000000000000000AAAA00000000AAAA, 0xA000000000000000AAAA00000000AAAA) = 0xC329ACE6E629ACACC9C96363343285CF +enclast(0xA000000000000000AAAA00000000AAAA, 0xA000000000000000AAAA00000000AAAA) = 0xC3ACAC63AC636363C9C96363E063C906 +dec (0xA000000000000000AAAA00000000AAAA, 0xA000000000000000AAAA00000000AAAA) = 0x5969993984C5BBEF93536999A2F23868 +declast(0xA000000000000000AAAA00000000AAAA, 0xA000000000000000AAAA00000000AAAA) = 0xF262525247525252F8F862526252F8C8 +enc (0xA000000000000000AAAA00000000AAAA, 0xB000000000000000BBBB00000000BBBB) = 0xD329ACE6E629ACACD8D86363343294DE +enclast(0xA000000000000000AAAA00000000AAAA, 0xB000000000000000BBBB00000000BBBB) = 0xD3ACAC63AC636363D8D86363E063D817 +dec (0xA000000000000000AAAA00000000AAAA, 0xB000000000000000BBBB00000000BBBB) = 0x4969993984C5BBEF82426999A2F22979 +declast(0xA000000000000000AAAA00000000AAAA, 0xB000000000000000BBBB00000000BBBB) = 0xE262525247525252E9E962526252E9D9 +enc (0xA000000000000000AAAA00000000AAAA, 0xC000000000000000CCCC00000000CCCC) = 0xA329ACE6E629ACACAFAF63633432E3A9 +enclast(0xA000000000000000AAAA00000000AAAA, 0xC000000000000000CCCC00000000CCCC) = 0xA3ACAC63AC636363AFAF6363E063AF60 +dec (0xA000000000000000AAAA00000000AAAA, 0xC000000000000000CCCC00000000CCCC) = 0x3969993984C5BBEFF5356999A2F25E0E +declast(0xA000000000000000AAAA00000000AAAA, 0xC000000000000000CCCC00000000CCCC) = 0x92625252475252529E9E625262529EAE +enc (0xA000000000000000AAAA00000000AAAA, 0xD000000000000000DDDD00000000DDDD) = 0xB329ACE6E629ACACBEBE63633432F2B8 +enclast(0xA000000000000000AAAA00000000AAAA, 0xD000000000000000DDDD00000000DDDD) = 0xB3ACAC63AC636363BEBE6363E063BE71 +dec (0xA000000000000000AAAA00000000AAAA, 0xD000000000000000DDDD00000000DDDD) = 0x2969993984C5BBEFE4246999A2F24F1F +declast(0xA000000000000000AAAA00000000AAAA, 0xD000000000000000DDDD00000000DDDD) = 0x82625252475252528F8F625262528FBF +enc (0xA000000000000000AAAA00000000AAAA, 0xE000000000000000EEEE00000000EEEE) = 0x8329ACE6E629ACAC8D8D63633432C18B +enclast(0xA000000000000000AAAA00000000AAAA, 0xE000000000000000EEEE00000000EEEE) = 0x83ACAC63AC6363638D8D6363E0638D42 +dec (0xA000000000000000AAAA00000000AAAA, 0xE000000000000000EEEE00000000EEEE) = 0x1969993984C5BBEFD7176999A2F27C2C +declast(0xA000000000000000AAAA00000000AAAA, 0xE000000000000000EEEE00000000EEEE) = 0xB262525247525252BCBC62526252BC8C +enc (0xA000000000000000AAAA00000000AAAA, 0xF000000000000000FFFF00000000FFFF) = 0x9329ACE6E629ACAC9C9C63633432D09A +enclast(0xA000000000000000AAAA00000000AAAA, 0xF000000000000000FFFF00000000FFFF) = 0x93ACAC63AC6363639C9C6363E0639C53 +dec (0xA000000000000000AAAA00000000AAAA, 0xF000000000000000FFFF00000000FFFF) = 0x0969993984C5BBEFC6066999A2F26D3D +declast(0xA000000000000000AAAA00000000AAAA, 0xF000000000000000FFFF00000000FFFF) = 0xA262525247525252ADAD62526252AD9D +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x00) = 0x63E06363E063636363ACAC63ACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x01) = 0x63E06362E063636363ACAC62ACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x02) = 0x63E06361E063636363ACAC61ACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x04) = 0x63E06367E063636363ACAC67ACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x08) = 0x63E0636BE063636363ACAC6BACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x10) = 0x63E06373E063636363ACAC73ACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x38) = 0x63E0635BE063636363ACAC5BACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x4F) = 0x63E0632CE063636363ACAC2CACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0xFF) = 0x63E0639CE063636363ACAC9CACAC6363 +imc (0xA000000000000000AAAA00000000AAAA) = 0x9A8C61D7000000007B34D19ED19E7B34 +pclmul(0xA000000000000000AAAA00000000AAAA, 0x00) = 0x3E478679FF8647C1B847FF8679863E3E +pclmul(0xA000000000000000AAAA00000000AAAA, 0x01) = 0x3E6AAAFE54AAC06A94C054AAFE003E3E +pclmul(0xA000000000000000AAAA00000000AAAA, 0x10) = 0x3DA3C3BDA3C3BDDDE000000000000000 +pclmul(0xA000000000000000AAAA00000000AAAA, 0xFF) = 0x3D8C3DDD8C3DDDDDE000000000000000 +enc (0xB000000000000000BBBB00000000BBBB, 0x00000000000000000000000000000000) = 0x63E3EA6A6AE3EAEA63636363F07D6EEE +enclast(0xB000000000000000BBBB00000000BBBB, 0x00000000000000000000000000000000) = 0x63EAEA63EA63636363636363E76363EA +dec (0xB000000000000000BBBB00000000BBBB, 0x00000000000000000000000000000000) = 0xE980AA6F9CBC75FB6FE980AA7897D43B +declast(0xB000000000000000BBBB00000000BBBB, 0x00000000000000000000000000000000) = 0x52FE5252FC5252525252FE52FE5252FE +enc (0xB000000000000000BBBB00000000BBBB, 0x10000000000000001111000000001111) = 0x73E3EA6A6AE3EAEA72726363F07D7FFF +enclast(0xB000000000000000BBBB00000000BBBB, 0x10000000000000001111000000001111) = 0x73EAEA63EA63636372726363E76372FB +dec (0xB000000000000000BBBB00000000BBBB, 0x10000000000000001111000000001111) = 0xF980AA6F9CBC75FB7EF880AA7897C52A +declast(0xB000000000000000BBBB00000000BBBB, 0x10000000000000001111000000001111) = 0x42FE5252FC5252524343FE52FE5243EF +enc (0xB000000000000000BBBB00000000BBBB, 0x20000000000000002222000000002222) = 0x43E3EA6A6AE3EAEA41416363F07D4CCC +enclast(0xB000000000000000BBBB00000000BBBB, 0x20000000000000002222000000002222) = 0x43EAEA63EA63636341416363E76341C8 +dec (0xB000000000000000BBBB00000000BBBB, 0x20000000000000002222000000002222) = 0xC980AA6F9CBC75FB4DCB80AA7897F619 +declast(0xB000000000000000BBBB00000000BBBB, 0x20000000000000002222000000002222) = 0x72FE5252FC5252527070FE52FE5270DC +enc (0xB000000000000000BBBB00000000BBBB, 0x30000000000000003333000000003333) = 0x53E3EA6A6AE3EAEA50506363F07D5DDD +enclast(0xB000000000000000BBBB00000000BBBB, 0x30000000000000003333000000003333) = 0x53EAEA63EA63636350506363E76350D9 +dec (0xB000000000000000BBBB00000000BBBB, 0x30000000000000003333000000003333) = 0xD980AA6F9CBC75FB5CDA80AA7897E708 +declast(0xB000000000000000BBBB00000000BBBB, 0x30000000000000003333000000003333) = 0x62FE5252FC5252526161FE52FE5261CD +enc (0xB000000000000000BBBB00000000BBBB, 0x40000000000000004444000000004444) = 0x23E3EA6A6AE3EAEA27276363F07D2AAA +enclast(0xB000000000000000BBBB00000000BBBB, 0x40000000000000004444000000004444) = 0x23EAEA63EA63636327276363E76327AE +dec (0xB000000000000000BBBB00000000BBBB, 0x40000000000000004444000000004444) = 0xA980AA6F9CBC75FB2BAD80AA7897907F +declast(0xB000000000000000BBBB00000000BBBB, 0x40000000000000004444000000004444) = 0x12FE5252FC5252521616FE52FE5216BA +enc (0xB000000000000000BBBB00000000BBBB, 0x50000000000000005555000000005555) = 0x33E3EA6A6AE3EAEA36366363F07D3BBB +enclast(0xB000000000000000BBBB00000000BBBB, 0x50000000000000005555000000005555) = 0x33EAEA63EA63636336366363E76336BF +dec (0xB000000000000000BBBB00000000BBBB, 0x50000000000000005555000000005555) = 0xB980AA6F9CBC75FB3ABC80AA7897816E +declast(0xB000000000000000BBBB00000000BBBB, 0x50000000000000005555000000005555) = 0x02FE5252FC5252520707FE52FE5207AB +enc (0xB000000000000000BBBB00000000BBBB, 0x60000000000000006666000000006666) = 0x03E3EA6A6AE3EAEA05056363F07D0888 +enclast(0xB000000000000000BBBB00000000BBBB, 0x60000000000000006666000000006666) = 0x03EAEA63EA63636305056363E763058C +dec (0xB000000000000000BBBB00000000BBBB, 0x60000000000000006666000000006666) = 0x8980AA6F9CBC75FB098F80AA7897B25D +declast(0xB000000000000000BBBB00000000BBBB, 0x60000000000000006666000000006666) = 0x32FE5252FC5252523434FE52FE523498 +enc (0xB000000000000000BBBB00000000BBBB, 0x70000000000000007777000000007777) = 0x13E3EA6A6AE3EAEA14146363F07D1999 +enclast(0xB000000000000000BBBB00000000BBBB, 0x70000000000000007777000000007777) = 0x13EAEA63EA63636314146363E763149D +dec (0xB000000000000000BBBB00000000BBBB, 0x70000000000000007777000000007777) = 0x9980AA6F9CBC75FB189E80AA7897A34C +declast(0xB000000000000000BBBB00000000BBBB, 0x70000000000000007777000000007777) = 0x22FE5252FC5252522525FE52FE522589 +enc (0xB000000000000000BBBB00000000BBBB, 0x80000000000000008888000000008888) = 0xE3E3EA6A6AE3EAEAEBEB6363F07DE666 +enclast(0xB000000000000000BBBB00000000BBBB, 0x80000000000000008888000000008888) = 0xE3EAEA63EA636363EBEB6363E763EB62 +dec (0xB000000000000000BBBB00000000BBBB, 0x80000000000000008888000000008888) = 0x6980AA6F9CBC75FBE76180AA78975CB3 +declast(0xB000000000000000BBBB00000000BBBB, 0x80000000000000008888000000008888) = 0xD2FE5252FC525252DADAFE52FE52DA76 +enc (0xB000000000000000BBBB00000000BBBB, 0x90000000000000009999000000009999) = 0xF3E3EA6A6AE3EAEAFAFA6363F07DF777 +enclast(0xB000000000000000BBBB00000000BBBB, 0x90000000000000009999000000009999) = 0xF3EAEA63EA636363FAFA6363E763FA73 +dec (0xB000000000000000BBBB00000000BBBB, 0x90000000000000009999000000009999) = 0x7980AA6F9CBC75FBF67080AA78974DA2 +declast(0xB000000000000000BBBB00000000BBBB, 0x90000000000000009999000000009999) = 0xC2FE5252FC525252CBCBFE52FE52CB67 +enc (0xB000000000000000BBBB00000000BBBB, 0xA000000000000000AAAA00000000AAAA) = 0xC3E3EA6A6AE3EAEAC9C96363F07DC444 +enclast(0xB000000000000000BBBB00000000BBBB, 0xA000000000000000AAAA00000000AAAA) = 0xC3EAEA63EA636363C9C96363E763C940 +dec (0xB000000000000000BBBB00000000BBBB, 0xA000000000000000AAAA00000000AAAA) = 0x4980AA6F9CBC75FBC54380AA78977E91 +declast(0xB000000000000000BBBB00000000BBBB, 0xA000000000000000AAAA00000000AAAA) = 0xF2FE5252FC525252F8F8FE52FE52F854 +enc (0xB000000000000000BBBB00000000BBBB, 0xB000000000000000BBBB00000000BBBB) = 0xD3E3EA6A6AE3EAEAD8D86363F07DD555 +enclast(0xB000000000000000BBBB00000000BBBB, 0xB000000000000000BBBB00000000BBBB) = 0xD3EAEA63EA636363D8D86363E763D851 +dec (0xB000000000000000BBBB00000000BBBB, 0xB000000000000000BBBB00000000BBBB) = 0x5980AA6F9CBC75FBD45280AA78976F80 +declast(0xB000000000000000BBBB00000000BBBB, 0xB000000000000000BBBB00000000BBBB) = 0xE2FE5252FC525252E9E9FE52FE52E945 +enc (0xB000000000000000BBBB00000000BBBB, 0xC000000000000000CCCC00000000CCCC) = 0xA3E3EA6A6AE3EAEAAFAF6363F07DA222 +enclast(0xB000000000000000BBBB00000000BBBB, 0xC000000000000000CCCC00000000CCCC) = 0xA3EAEA63EA636363AFAF6363E763AF26 +dec (0xB000000000000000BBBB00000000BBBB, 0xC000000000000000CCCC00000000CCCC) = 0x2980AA6F9CBC75FBA32580AA789718F7 +declast(0xB000000000000000BBBB00000000BBBB, 0xC000000000000000CCCC00000000CCCC) = 0x92FE5252FC5252529E9EFE52FE529E32 +enc (0xB000000000000000BBBB00000000BBBB, 0xD000000000000000DDDD00000000DDDD) = 0xB3E3EA6A6AE3EAEABEBE6363F07DB333 +enclast(0xB000000000000000BBBB00000000BBBB, 0xD000000000000000DDDD00000000DDDD) = 0xB3EAEA63EA636363BEBE6363E763BE37 +dec (0xB000000000000000BBBB00000000BBBB, 0xD000000000000000DDDD00000000DDDD) = 0x3980AA6F9CBC75FBB23480AA789709E6 +declast(0xB000000000000000BBBB00000000BBBB, 0xD000000000000000DDDD00000000DDDD) = 0x82FE5252FC5252528F8FFE52FE528F23 +enc (0xB000000000000000BBBB00000000BBBB, 0xE000000000000000EEEE00000000EEEE) = 0x83E3EA6A6AE3EAEA8D8D6363F07D8000 +enclast(0xB000000000000000BBBB00000000BBBB, 0xE000000000000000EEEE00000000EEEE) = 0x83EAEA63EA6363638D8D6363E7638D04 +dec (0xB000000000000000BBBB00000000BBBB, 0xE000000000000000EEEE00000000EEEE) = 0x0980AA6F9CBC75FB810780AA78973AD5 +declast(0xB000000000000000BBBB00000000BBBB, 0xE000000000000000EEEE00000000EEEE) = 0xB2FE5252FC525252BCBCFE52FE52BC10 +enc (0xB000000000000000BBBB00000000BBBB, 0xF000000000000000FFFF00000000FFFF) = 0x93E3EA6A6AE3EAEA9C9C6363F07D9111 +enclast(0xB000000000000000BBBB00000000BBBB, 0xF000000000000000FFFF00000000FFFF) = 0x93EAEA63EA6363639C9C6363E7639C15 +dec (0xB000000000000000BBBB00000000BBBB, 0xF000000000000000FFFF00000000FFFF) = 0x1980AA6F9CBC75FB901680AA78972BC4 +declast(0xB000000000000000BBBB00000000BBBB, 0xF000000000000000FFFF00000000FFFF) = 0xA2FE5252FC525252ADADFE52FE52AD01 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x00) = 0x63E76363E763636363EAEA63EAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x01) = 0x63E76362E763636363EAEA62EAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x02) = 0x63E76361E763636363EAEA61EAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x04) = 0x63E76367E763636363EAEA67EAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x08) = 0x63E7636BE763636363EAEA6BEAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x10) = 0x63E76373E763636363EAEA73EAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x38) = 0x63E7635BE763636363EAEA5BEAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x4F) = 0x63E7632CE763636363EAEA2CEAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0xFF) = 0x63E7639CE763636363EAEA9CEAEA6363 +imc (0xB000000000000000BBBB00000000BBBB) = 0x7A3CB147000000000C61B7DAB7DA0C61 +pclmul(0xB000000000000000BBBB00000000BBBB, 0x00) = 0x3835E358BBE360D6DB35BBE358E3386D +pclmul(0xB000000000000000BBBB00000000BBBB, 0x01) = 0x3832336C5F3354320B015F336C00386D +pclmul(0xB000000000000000BBBB00000000BBBB, 0x10) = 0x3BB686DBB686DBEBD000000000000000 +pclmul(0xB000000000000000BBBB00000000BBBB, 0xFF) = 0x3BB12BEBB12BEBEBD000000000000000 +enc (0xC000000000000000CCCC00000000CCCC, 0x00000000000000000000000000000000) = 0x631B4B33331B4B4B63636363B23B92EA +enclast(0xC000000000000000CCCC00000000CCCC, 0x00000000000000000000000000000000) = 0x634B4B634B63636363636363BA63634B +dec (0xC000000000000000CCCC00000000CCCC, 0x00000000000000000000000000000000) = 0xA2F2486DB9DB6E416DA2F248E8779D02 +declast(0xC000000000000000CCCC00000000CCCC, 0x00000000000000000000000000000000) = 0x522752521F5252525252275227525227 +enc (0xC000000000000000CCCC00000000CCCC, 0x10000000000000001111000000001111) = 0x731B4B33331B4B4B72726363B23B83FB +enclast(0xC000000000000000CCCC00000000CCCC, 0x10000000000000001111000000001111) = 0x734B4B634B63636372726363BA63725A +dec (0xC000000000000000CCCC00000000CCCC, 0x10000000000000001111000000001111) = 0xB2F2486DB9DB6E417CB3F248E8778C13 +declast(0xC000000000000000CCCC00000000CCCC, 0x10000000000000001111000000001111) = 0x422752521F5252524343275227524336 +enc (0xC000000000000000CCCC00000000CCCC, 0x20000000000000002222000000002222) = 0x431B4B33331B4B4B41416363B23BB0C8 +enclast(0xC000000000000000CCCC00000000CCCC, 0x20000000000000002222000000002222) = 0x434B4B634B63636341416363BA634169 +dec (0xC000000000000000CCCC00000000CCCC, 0x20000000000000002222000000002222) = 0x82F2486DB9DB6E414F80F248E877BF20 +declast(0xC000000000000000CCCC00000000CCCC, 0x20000000000000002222000000002222) = 0x722752521F5252527070275227527005 +enc (0xC000000000000000CCCC00000000CCCC, 0x30000000000000003333000000003333) = 0x531B4B33331B4B4B50506363B23BA1D9 +enclast(0xC000000000000000CCCC00000000CCCC, 0x30000000000000003333000000003333) = 0x534B4B634B63636350506363BA635078 +dec (0xC000000000000000CCCC00000000CCCC, 0x30000000000000003333000000003333) = 0x92F2486DB9DB6E415E91F248E877AE31 +declast(0xC000000000000000CCCC00000000CCCC, 0x30000000000000003333000000003333) = 0x622752521F5252526161275227526114 +enc (0xC000000000000000CCCC00000000CCCC, 0x40000000000000004444000000004444) = 0x231B4B33331B4B4B27276363B23BD6AE +enclast(0xC000000000000000CCCC00000000CCCC, 0x40000000000000004444000000004444) = 0x234B4B634B63636327276363BA63270F +dec (0xC000000000000000CCCC00000000CCCC, 0x40000000000000004444000000004444) = 0xE2F2486DB9DB6E4129E6F248E877D946 +declast(0xC000000000000000CCCC00000000CCCC, 0x40000000000000004444000000004444) = 0x122752521F5252521616275227521663 +enc (0xC000000000000000CCCC00000000CCCC, 0x50000000000000005555000000005555) = 0x331B4B33331B4B4B36366363B23BC7BF +enclast(0xC000000000000000CCCC00000000CCCC, 0x50000000000000005555000000005555) = 0x334B4B634B63636336366363BA63361E +dec (0xC000000000000000CCCC00000000CCCC, 0x50000000000000005555000000005555) = 0xF2F2486DB9DB6E4138F7F248E877C857 +declast(0xC000000000000000CCCC00000000CCCC, 0x50000000000000005555000000005555) = 0x022752521F5252520707275227520772 +enc (0xC000000000000000CCCC00000000CCCC, 0x60000000000000006666000000006666) = 0x031B4B33331B4B4B05056363B23BF48C +enclast(0xC000000000000000CCCC00000000CCCC, 0x60000000000000006666000000006666) = 0x034B4B634B63636305056363BA63052D +dec (0xC000000000000000CCCC00000000CCCC, 0x60000000000000006666000000006666) = 0xC2F2486DB9DB6E410BC4F248E877FB64 +declast(0xC000000000000000CCCC00000000CCCC, 0x60000000000000006666000000006666) = 0x322752521F5252523434275227523441 +enc (0xC000000000000000CCCC00000000CCCC, 0x70000000000000007777000000007777) = 0x131B4B33331B4B4B14146363B23BE59D +enclast(0xC000000000000000CCCC00000000CCCC, 0x70000000000000007777000000007777) = 0x134B4B634B63636314146363BA63143C +dec (0xC000000000000000CCCC00000000CCCC, 0x70000000000000007777000000007777) = 0xD2F2486DB9DB6E411AD5F248E877EA75 +declast(0xC000000000000000CCCC00000000CCCC, 0x70000000000000007777000000007777) = 0x222752521F5252522525275227522550 +enc (0xC000000000000000CCCC00000000CCCC, 0x80000000000000008888000000008888) = 0xE31B4B33331B4B4BEBEB6363B23B1A62 +enclast(0xC000000000000000CCCC00000000CCCC, 0x80000000000000008888000000008888) = 0xE34B4B634B636363EBEB6363BA63EBC3 +dec (0xC000000000000000CCCC00000000CCCC, 0x80000000000000008888000000008888) = 0x22F2486DB9DB6E41E52AF248E877158A +declast(0xC000000000000000CCCC00000000CCCC, 0x80000000000000008888000000008888) = 0xD22752521F525252DADA27522752DAAF +enc (0xC000000000000000CCCC00000000CCCC, 0x90000000000000009999000000009999) = 0xF31B4B33331B4B4BFAFA6363B23B0B73 +enclast(0xC000000000000000CCCC00000000CCCC, 0x90000000000000009999000000009999) = 0xF34B4B634B636363FAFA6363BA63FAD2 +dec (0xC000000000000000CCCC00000000CCCC, 0x90000000000000009999000000009999) = 0x32F2486DB9DB6E41F43BF248E877049B +declast(0xC000000000000000CCCC00000000CCCC, 0x90000000000000009999000000009999) = 0xC22752521F525252CBCB27522752CBBE +enc (0xC000000000000000CCCC00000000CCCC, 0xA000000000000000AAAA00000000AAAA) = 0xC31B4B33331B4B4BC9C96363B23B3840 +enclast(0xC000000000000000CCCC00000000CCCC, 0xA000000000000000AAAA00000000AAAA) = 0xC34B4B634B636363C9C96363BA63C9E1 +dec (0xC000000000000000CCCC00000000CCCC, 0xA000000000000000AAAA00000000AAAA) = 0x02F2486DB9DB6E41C708F248E87737A8 +declast(0xC000000000000000CCCC00000000CCCC, 0xA000000000000000AAAA00000000AAAA) = 0xF22752521F525252F8F827522752F88D +enc (0xC000000000000000CCCC00000000CCCC, 0xB000000000000000BBBB00000000BBBB) = 0xD31B4B33331B4B4BD8D86363B23B2951 +enclast(0xC000000000000000CCCC00000000CCCC, 0xB000000000000000BBBB00000000BBBB) = 0xD34B4B634B636363D8D86363BA63D8F0 +dec (0xC000000000000000CCCC00000000CCCC, 0xB000000000000000BBBB00000000BBBB) = 0x12F2486DB9DB6E41D619F248E87726B9 +declast(0xC000000000000000CCCC00000000CCCC, 0xB000000000000000BBBB00000000BBBB) = 0xE22752521F525252E9E927522752E99C +enc (0xC000000000000000CCCC00000000CCCC, 0xC000000000000000CCCC00000000CCCC) = 0xA31B4B33331B4B4BAFAF6363B23B5E26 +enclast(0xC000000000000000CCCC00000000CCCC, 0xC000000000000000CCCC00000000CCCC) = 0xA34B4B634B636363AFAF6363BA63AF87 +dec (0xC000000000000000CCCC00000000CCCC, 0xC000000000000000CCCC00000000CCCC) = 0x62F2486DB9DB6E41A16EF248E87751CE +declast(0xC000000000000000CCCC00000000CCCC, 0xC000000000000000CCCC00000000CCCC) = 0x922752521F5252529E9E275227529EEB +enc (0xC000000000000000CCCC00000000CCCC, 0xD000000000000000DDDD00000000DDDD) = 0xB31B4B33331B4B4BBEBE6363B23B4F37 +enclast(0xC000000000000000CCCC00000000CCCC, 0xD000000000000000DDDD00000000DDDD) = 0xB34B4B634B636363BEBE6363BA63BE96 +dec (0xC000000000000000CCCC00000000CCCC, 0xD000000000000000DDDD00000000DDDD) = 0x72F2486DB9DB6E41B07FF248E87740DF +declast(0xC000000000000000CCCC00000000CCCC, 0xD000000000000000DDDD00000000DDDD) = 0x822752521F5252528F8F275227528FFA +enc (0xC000000000000000CCCC00000000CCCC, 0xE000000000000000EEEE00000000EEEE) = 0x831B4B33331B4B4B8D8D6363B23B7C04 +enclast(0xC000000000000000CCCC00000000CCCC, 0xE000000000000000EEEE00000000EEEE) = 0x834B4B634B6363638D8D6363BA638DA5 +dec (0xC000000000000000CCCC00000000CCCC, 0xE000000000000000EEEE00000000EEEE) = 0x42F2486DB9DB6E41834CF248E87773EC +declast(0xC000000000000000CCCC00000000CCCC, 0xE000000000000000EEEE00000000EEEE) = 0xB22752521F525252BCBC27522752BCC9 +enc (0xC000000000000000CCCC00000000CCCC, 0xF000000000000000FFFF00000000FFFF) = 0x931B4B33331B4B4B9C9C6363B23B6D15 +enclast(0xC000000000000000CCCC00000000CCCC, 0xF000000000000000FFFF00000000FFFF) = 0x934B4B634B6363639C9C6363BA639CB4 +dec (0xC000000000000000CCCC00000000CCCC, 0xF000000000000000FFFF00000000FFFF) = 0x52F2486DB9DB6E41925DF248E87762FD +declast(0xC000000000000000CCCC00000000CCCC, 0xF000000000000000FFFF00000000FFFF) = 0xA22752521F525252ADAD27522752ADD8 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x00) = 0x63BA6363BA636363634B4B634B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x01) = 0x63BA6362BA636363634B4B624B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x02) = 0x63BA6361BA636363634B4B614B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x04) = 0x63BA6367BA636363634B4B674B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x08) = 0x63BA636BBA636363634B4B6B4B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x10) = 0x63BA6373BA636363634B4B734B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x38) = 0x63BA635BBA636363634B4B5B4B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x4F) = 0x63BA632CBA636363634B4B2C4B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0xFF) = 0x63BA639CBA636363634B4B9C4B4B6363 +imc (0xC000000000000000CCCC00000000CCCC) = 0xEC01B79A0000000052D19E1D9E1D52D1 +pclmul(0xC000000000000000CCCC00000000CCCC, 0x00) = 0x2BCBE01FFFE0342BCBCBFFE01FE02BD4 +pclmul(0xC000000000000000CCCC00000000CCCC, 0x01) = 0x2B8B336C5F33478B18B85F336C002BD4 +pclmul(0xC000000000000000CCCC00000000CCCC, 0x10) = 0x29777769777769694000000000000000 +pclmul(0xC000000000000000CCCC00000000CCCC, 0xFF) = 0x2933A96933A969694000000000000000 +enc (0xD000000000000000DDDD00000000DDDD, 0x00000000000000000000000000000000) = 0x639EC13C3C9EC1C163636363B8F4D22F +enclast(0xD000000000000000DDDD00000000DDDD, 0x00000000000000000000000000000000) = 0x63C1C163C163636363636363706363C1 +dec (0xD000000000000000DDDD00000000DDDD, 0x00000000000000000000000000000000) = 0x7D915027758F23EB277D9150932508BE +declast(0xD000000000000000DDDD00000000DDDD, 0x00000000000000000000000000000000) = 0x52C95252605252525252C952C95252C9 +enc (0xD000000000000000DDDD00000000DDDD, 0x10000000000000001111000000001111) = 0x739EC13C3C9EC1C172726363B8F4C33E +enclast(0xD000000000000000DDDD00000000DDDD, 0x10000000000000001111000000001111) = 0x73C1C163C163636372726363706372D0 +dec (0xD000000000000000DDDD00000000DDDD, 0x10000000000000001111000000001111) = 0x6D915027758F23EB366C9150932519AF +declast(0xD000000000000000DDDD00000000DDDD, 0x10000000000000001111000000001111) = 0x42C95252605252524343C952C95243D8 +enc (0xD000000000000000DDDD00000000DDDD, 0x20000000000000002222000000002222) = 0x439EC13C3C9EC1C141416363B8F4F00D +enclast(0xD000000000000000DDDD00000000DDDD, 0x20000000000000002222000000002222) = 0x43C1C163C163636341416363706341E3 +dec (0xD000000000000000DDDD00000000DDDD, 0x20000000000000002222000000002222) = 0x5D915027758F23EB055F915093252A9C +declast(0xD000000000000000DDDD00000000DDDD, 0x20000000000000002222000000002222) = 0x72C95252605252527070C952C95270EB +enc (0xD000000000000000DDDD00000000DDDD, 0x30000000000000003333000000003333) = 0x539EC13C3C9EC1C150506363B8F4E11C +enclast(0xD000000000000000DDDD00000000DDDD, 0x30000000000000003333000000003333) = 0x53C1C163C163636350506363706350F2 +dec (0xD000000000000000DDDD00000000DDDD, 0x30000000000000003333000000003333) = 0x4D915027758F23EB144E915093253B8D +declast(0xD000000000000000DDDD00000000DDDD, 0x30000000000000003333000000003333) = 0x62C95252605252526161C952C95261FA +enc (0xD000000000000000DDDD00000000DDDD, 0x40000000000000004444000000004444) = 0x239EC13C3C9EC1C127276363B8F4966B +enclast(0xD000000000000000DDDD00000000DDDD, 0x40000000000000004444000000004444) = 0x23C1C163C16363632727636370632785 +dec (0xD000000000000000DDDD00000000DDDD, 0x40000000000000004444000000004444) = 0x3D915027758F23EB6339915093254CFA +declast(0xD000000000000000DDDD00000000DDDD, 0x40000000000000004444000000004444) = 0x12C95252605252521616C952C952168D +enc (0xD000000000000000DDDD00000000DDDD, 0x50000000000000005555000000005555) = 0x339EC13C3C9EC1C136366363B8F4877A +enclast(0xD000000000000000DDDD00000000DDDD, 0x50000000000000005555000000005555) = 0x33C1C163C16363633636636370633694 +dec (0xD000000000000000DDDD00000000DDDD, 0x50000000000000005555000000005555) = 0x2D915027758F23EB7228915093255DEB +declast(0xD000000000000000DDDD00000000DDDD, 0x50000000000000005555000000005555) = 0x02C95252605252520707C952C952079C +enc (0xD000000000000000DDDD00000000DDDD, 0x60000000000000006666000000006666) = 0x039EC13C3C9EC1C105056363B8F4B449 +enclast(0xD000000000000000DDDD00000000DDDD, 0x60000000000000006666000000006666) = 0x03C1C163C163636305056363706305A7 +dec (0xD000000000000000DDDD00000000DDDD, 0x60000000000000006666000000006666) = 0x1D915027758F23EB411B915093256ED8 +declast(0xD000000000000000DDDD00000000DDDD, 0x60000000000000006666000000006666) = 0x32C95252605252523434C952C95234AF +enc (0xD000000000000000DDDD00000000DDDD, 0x70000000000000007777000000007777) = 0x139EC13C3C9EC1C114146363B8F4A558 +enclast(0xD000000000000000DDDD00000000DDDD, 0x70000000000000007777000000007777) = 0x13C1C163C163636314146363706314B6 +dec (0xD000000000000000DDDD00000000DDDD, 0x70000000000000007777000000007777) = 0x0D915027758F23EB500A915093257FC9 +declast(0xD000000000000000DDDD00000000DDDD, 0x70000000000000007777000000007777) = 0x22C95252605252522525C952C95225BE +enc (0xD000000000000000DDDD00000000DDDD, 0x80000000000000008888000000008888) = 0xE39EC13C3C9EC1C1EBEB6363B8F45AA7 +enclast(0xD000000000000000DDDD00000000DDDD, 0x80000000000000008888000000008888) = 0xE3C1C163C1636363EBEB63637063EB49 +dec (0xD000000000000000DDDD00000000DDDD, 0x80000000000000008888000000008888) = 0xFD915027758F23EBAFF5915093258036 +declast(0xD000000000000000DDDD00000000DDDD, 0x80000000000000008888000000008888) = 0xD2C9525260525252DADAC952C952DA41 +enc (0xD000000000000000DDDD00000000DDDD, 0x90000000000000009999000000009999) = 0xF39EC13C3C9EC1C1FAFA6363B8F44BB6 +enclast(0xD000000000000000DDDD00000000DDDD, 0x90000000000000009999000000009999) = 0xF3C1C163C1636363FAFA63637063FA58 +dec (0xD000000000000000DDDD00000000DDDD, 0x90000000000000009999000000009999) = 0xED915027758F23EBBEE4915093259127 +declast(0xD000000000000000DDDD00000000DDDD, 0x90000000000000009999000000009999) = 0xC2C9525260525252CBCBC952C952CB50 +enc (0xD000000000000000DDDD00000000DDDD, 0xA000000000000000AAAA00000000AAAA) = 0xC39EC13C3C9EC1C1C9C96363B8F47885 +enclast(0xD000000000000000DDDD00000000DDDD, 0xA000000000000000AAAA00000000AAAA) = 0xC3C1C163C1636363C9C963637063C96B +dec (0xD000000000000000DDDD00000000DDDD, 0xA000000000000000AAAA00000000AAAA) = 0xDD915027758F23EB8DD791509325A214 +declast(0xD000000000000000DDDD00000000DDDD, 0xA000000000000000AAAA00000000AAAA) = 0xF2C9525260525252F8F8C952C952F863 +enc (0xD000000000000000DDDD00000000DDDD, 0xB000000000000000BBBB00000000BBBB) = 0xD39EC13C3C9EC1C1D8D86363B8F46994 +enclast(0xD000000000000000DDDD00000000DDDD, 0xB000000000000000BBBB00000000BBBB) = 0xD3C1C163C1636363D8D863637063D87A +dec (0xD000000000000000DDDD00000000DDDD, 0xB000000000000000BBBB00000000BBBB) = 0xCD915027758F23EB9CC691509325B305 +declast(0xD000000000000000DDDD00000000DDDD, 0xB000000000000000BBBB00000000BBBB) = 0xE2C9525260525252E9E9C952C952E972 +enc (0xD000000000000000DDDD00000000DDDD, 0xC000000000000000CCCC00000000CCCC) = 0xA39EC13C3C9EC1C1AFAF6363B8F41EE3 +enclast(0xD000000000000000DDDD00000000DDDD, 0xC000000000000000CCCC00000000CCCC) = 0xA3C1C163C1636363AFAF63637063AF0D +dec (0xD000000000000000DDDD00000000DDDD, 0xC000000000000000CCCC00000000CCCC) = 0xBD915027758F23EBEBB191509325C472 +declast(0xD000000000000000DDDD00000000DDDD, 0xC000000000000000CCCC00000000CCCC) = 0x92C95252605252529E9EC952C9529E05 +enc (0xD000000000000000DDDD00000000DDDD, 0xD000000000000000DDDD00000000DDDD) = 0xB39EC13C3C9EC1C1BEBE6363B8F40FF2 +enclast(0xD000000000000000DDDD00000000DDDD, 0xD000000000000000DDDD00000000DDDD) = 0xB3C1C163C1636363BEBE63637063BE1C +dec (0xD000000000000000DDDD00000000DDDD, 0xD000000000000000DDDD00000000DDDD) = 0xAD915027758F23EBFAA091509325D563 +declast(0xD000000000000000DDDD00000000DDDD, 0xD000000000000000DDDD00000000DDDD) = 0x82C95252605252528F8FC952C9528F14 +enc (0xD000000000000000DDDD00000000DDDD, 0xE000000000000000EEEE00000000EEEE) = 0x839EC13C3C9EC1C18D8D6363B8F43CC1 +enclast(0xD000000000000000DDDD00000000DDDD, 0xE000000000000000EEEE00000000EEEE) = 0x83C1C163C16363638D8D636370638D2F +dec (0xD000000000000000DDDD00000000DDDD, 0xE000000000000000EEEE00000000EEEE) = 0x9D915027758F23EBC99391509325E650 +declast(0xD000000000000000DDDD00000000DDDD, 0xE000000000000000EEEE00000000EEEE) = 0xB2C9525260525252BCBCC952C952BC27 +enc (0xD000000000000000DDDD00000000DDDD, 0xF000000000000000FFFF00000000FFFF) = 0x939EC13C3C9EC1C19C9C6363B8F42DD0 +enclast(0xD000000000000000DDDD00000000DDDD, 0xF000000000000000FFFF00000000FFFF) = 0x93C1C163C16363639C9C636370639C3E +dec (0xD000000000000000DDDD00000000DDDD, 0xF000000000000000FFFF00000000FFFF) = 0x8D915027758F23EBD88291509325F741 +declast(0xD000000000000000DDDD00000000DDDD, 0xF000000000000000FFFF00000000FFFF) = 0xA2C9525260525252ADADC952C952AD36 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x00) = 0x637063637063636363C1C163C1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x01) = 0x637063627063636363C1C162C1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x02) = 0x637063617063636363C1C161C1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x04) = 0x637063677063636363C1C167C1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x08) = 0x6370636B7063636363C1C16BC1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x10) = 0x637063737063636363C1C173C1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x38) = 0x6370635B7063636363C1C15BC1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x4F) = 0x6370632C7063636363C1C12CC1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0xFF) = 0x6370639C7063636363C1C19CC1C16363 +imc (0xD000000000000000DDDD00000000DDDD) = 0x0CB1670A000000002584F859F8592584 +pclmul(0xD000000000000000DDDD00000000DDDD, 0x00) = 0x2DF39A74EE9A5969B7F3EE9A749A2D87 +pclmul(0xD000000000000000DDDD00000000DDDD, 0x01) = 0x2D8BBBB70CBB9A8B96300CBBB7002D87 +pclmul(0xD000000000000000DDDD00000000DDDD, 0x10) = 0x2F2C8CFF2C8CFF5F7000000000000000 +pclmul(0xD000000000000000DDDD00000000DDDD, 0xFF) = 0x2F532F5F532F5F5F7000000000000000 +enc (0xE000000000000000EEEE00000000EEEE, 0x00000000000000000000000000000000) = 0x63BE28F5F5BE282863636363A1B5AA77 +enclast(0xE000000000000000EEEE00000000EEEE, 0x00000000000000000000000000000000) = 0x632828632863636363636363E1636328 +dec (0xE000000000000000EEEE00000000EEEE, 0x00000000000000000000000000000000) = 0x9BDC169A998E94719A9BDC1698DE5315 +declast(0xE000000000000000EEEE00000000EEEE, 0x00000000000000000000000000000000) = 0x52995252A05252525252995299525299 +enc (0xE000000000000000EEEE00000000EEEE, 0x10000000000000001111000000001111) = 0x73BE28F5F5BE282872726363A1B5BB66 +enclast(0xE000000000000000EEEE00000000EEEE, 0x10000000000000001111000000001111) = 0x732828632863636372726363E1637239 +dec (0xE000000000000000EEEE00000000EEEE, 0x10000000000000001111000000001111) = 0x8BDC169A998E94718B8ADC1698DE4204 +declast(0xE000000000000000EEEE00000000EEEE, 0x10000000000000001111000000001111) = 0x42995252A05252524343995299524388 +enc (0xE000000000000000EEEE00000000EEEE, 0x20000000000000002222000000002222) = 0x43BE28F5F5BE282841416363A1B58855 +enclast(0xE000000000000000EEEE00000000EEEE, 0x20000000000000002222000000002222) = 0x432828632863636341416363E163410A +dec (0xE000000000000000EEEE00000000EEEE, 0x20000000000000002222000000002222) = 0xBBDC169A998E9471B8B9DC1698DE7137 +declast(0xE000000000000000EEEE00000000EEEE, 0x20000000000000002222000000002222) = 0x72995252A052525270709952995270BB +enc (0xE000000000000000EEEE00000000EEEE, 0x30000000000000003333000000003333) = 0x53BE28F5F5BE282850506363A1B59944 +enclast(0xE000000000000000EEEE00000000EEEE, 0x30000000000000003333000000003333) = 0x532828632863636350506363E163501B +dec (0xE000000000000000EEEE00000000EEEE, 0x30000000000000003333000000003333) = 0xABDC169A998E9471A9A8DC1698DE6026 +declast(0xE000000000000000EEEE00000000EEEE, 0x30000000000000003333000000003333) = 0x62995252A052525261619952995261AA +enc (0xE000000000000000EEEE00000000EEEE, 0x40000000000000004444000000004444) = 0x23BE28F5F5BE282827276363A1B5EE33 +enclast(0xE000000000000000EEEE00000000EEEE, 0x40000000000000004444000000004444) = 0x232828632863636327276363E163276C +dec (0xE000000000000000EEEE00000000EEEE, 0x40000000000000004444000000004444) = 0xDBDC169A998E9471DEDFDC1698DE1751 +declast(0xE000000000000000EEEE00000000EEEE, 0x40000000000000004444000000004444) = 0x12995252A052525216169952995216DD +enc (0xE000000000000000EEEE00000000EEEE, 0x50000000000000005555000000005555) = 0x33BE28F5F5BE282836366363A1B5FF22 +enclast(0xE000000000000000EEEE00000000EEEE, 0x50000000000000005555000000005555) = 0x332828632863636336366363E163367D +dec (0xE000000000000000EEEE00000000EEEE, 0x50000000000000005555000000005555) = 0xCBDC169A998E9471CFCEDC1698DE0640 +declast(0xE000000000000000EEEE00000000EEEE, 0x50000000000000005555000000005555) = 0x02995252A052525207079952995207CC +enc (0xE000000000000000EEEE00000000EEEE, 0x60000000000000006666000000006666) = 0x03BE28F5F5BE282805056363A1B5CC11 +enclast(0xE000000000000000EEEE00000000EEEE, 0x60000000000000006666000000006666) = 0x032828632863636305056363E163054E +dec (0xE000000000000000EEEE00000000EEEE, 0x60000000000000006666000000006666) = 0xFBDC169A998E9471FCFDDC1698DE3573 +declast(0xE000000000000000EEEE00000000EEEE, 0x60000000000000006666000000006666) = 0x32995252A052525234349952995234FF +enc (0xE000000000000000EEEE00000000EEEE, 0x70000000000000007777000000007777) = 0x13BE28F5F5BE282814146363A1B5DD00 +enclast(0xE000000000000000EEEE00000000EEEE, 0x70000000000000007777000000007777) = 0x132828632863636314146363E163145F +dec (0xE000000000000000EEEE00000000EEEE, 0x70000000000000007777000000007777) = 0xEBDC169A998E9471EDECDC1698DE2462 +declast(0xE000000000000000EEEE00000000EEEE, 0x70000000000000007777000000007777) = 0x22995252A052525225259952995225EE +enc (0xE000000000000000EEEE00000000EEEE, 0x80000000000000008888000000008888) = 0xE3BE28F5F5BE2828EBEB6363A1B522FF +enclast(0xE000000000000000EEEE00000000EEEE, 0x80000000000000008888000000008888) = 0xE328286328636363EBEB6363E163EBA0 +dec (0xE000000000000000EEEE00000000EEEE, 0x80000000000000008888000000008888) = 0x1BDC169A998E94711213DC1698DEDB9D +declast(0xE000000000000000EEEE00000000EEEE, 0x80000000000000008888000000008888) = 0xD2995252A0525252DADA99529952DA11 +enc (0xE000000000000000EEEE00000000EEEE, 0x90000000000000009999000000009999) = 0xF3BE28F5F5BE2828FAFA6363A1B533EE +enclast(0xE000000000000000EEEE00000000EEEE, 0x90000000000000009999000000009999) = 0xF328286328636363FAFA6363E163FAB1 +dec (0xE000000000000000EEEE00000000EEEE, 0x90000000000000009999000000009999) = 0x0BDC169A998E94710302DC1698DECA8C +declast(0xE000000000000000EEEE00000000EEEE, 0x90000000000000009999000000009999) = 0xC2995252A0525252CBCB99529952CB00 +enc (0xE000000000000000EEEE00000000EEEE, 0xA000000000000000AAAA00000000AAAA) = 0xC3BE28F5F5BE2828C9C96363A1B500DD +enclast(0xE000000000000000EEEE00000000EEEE, 0xA000000000000000AAAA00000000AAAA) = 0xC328286328636363C9C96363E163C982 +dec (0xE000000000000000EEEE00000000EEEE, 0xA000000000000000AAAA00000000AAAA) = 0x3BDC169A998E94713031DC1698DEF9BF +declast(0xE000000000000000EEEE00000000EEEE, 0xA000000000000000AAAA00000000AAAA) = 0xF2995252A0525252F8F899529952F833 +enc (0xE000000000000000EEEE00000000EEEE, 0xB000000000000000BBBB00000000BBBB) = 0xD3BE28F5F5BE2828D8D86363A1B511CC +enclast(0xE000000000000000EEEE00000000EEEE, 0xB000000000000000BBBB00000000BBBB) = 0xD328286328636363D8D86363E163D893 +dec (0xE000000000000000EEEE00000000EEEE, 0xB000000000000000BBBB00000000BBBB) = 0x2BDC169A998E94712120DC1698DEE8AE +declast(0xE000000000000000EEEE00000000EEEE, 0xB000000000000000BBBB00000000BBBB) = 0xE2995252A0525252E9E999529952E922 +enc (0xE000000000000000EEEE00000000EEEE, 0xC000000000000000CCCC00000000CCCC) = 0xA3BE28F5F5BE2828AFAF6363A1B566BB +enclast(0xE000000000000000EEEE00000000EEEE, 0xC000000000000000CCCC00000000CCCC) = 0xA328286328636363AFAF6363E163AFE4 +dec (0xE000000000000000EEEE00000000EEEE, 0xC000000000000000CCCC00000000CCCC) = 0x5BDC169A998E94715657DC1698DE9FD9 +declast(0xE000000000000000EEEE00000000EEEE, 0xC000000000000000CCCC00000000CCCC) = 0x92995252A05252529E9E995299529E55 +enc (0xE000000000000000EEEE00000000EEEE, 0xD000000000000000DDDD00000000DDDD) = 0xB3BE28F5F5BE2828BEBE6363A1B577AA +enclast(0xE000000000000000EEEE00000000EEEE, 0xD000000000000000DDDD00000000DDDD) = 0xB328286328636363BEBE6363E163BEF5 +dec (0xE000000000000000EEEE00000000EEEE, 0xD000000000000000DDDD00000000DDDD) = 0x4BDC169A998E94714746DC1698DE8EC8 +declast(0xE000000000000000EEEE00000000EEEE, 0xD000000000000000DDDD00000000DDDD) = 0x82995252A05252528F8F995299528F44 +enc (0xE000000000000000EEEE00000000EEEE, 0xE000000000000000EEEE00000000EEEE) = 0x83BE28F5F5BE28288D8D6363A1B54499 +enclast(0xE000000000000000EEEE00000000EEEE, 0xE000000000000000EEEE00000000EEEE) = 0x83282863286363638D8D6363E1638DC6 +dec (0xE000000000000000EEEE00000000EEEE, 0xE000000000000000EEEE00000000EEEE) = 0x7BDC169A998E94717475DC1698DEBDFB +declast(0xE000000000000000EEEE00000000EEEE, 0xE000000000000000EEEE00000000EEEE) = 0xB2995252A0525252BCBC99529952BC77 +enc (0xE000000000000000EEEE00000000EEEE, 0xF000000000000000FFFF00000000FFFF) = 0x93BE28F5F5BE28289C9C6363A1B55588 +enclast(0xE000000000000000EEEE00000000EEEE, 0xF000000000000000FFFF00000000FFFF) = 0x93282863286363639C9C6363E1639CD7 +dec (0xE000000000000000EEEE00000000EEEE, 0xF000000000000000FFFF00000000FFFF) = 0x6BDC169A998E94716564DC1698DEACEA +declast(0xE000000000000000EEEE00000000EEEE, 0xF000000000000000FFFF00000000FFFF) = 0xA2995252A0525252ADAD99529952AD66 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x00) = 0x63E16363E16363636328286328286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x01) = 0x63E16362E16363636328286228286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x02) = 0x63E16361E16363636328286128286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x04) = 0x63E16367E16363636328286728286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x08) = 0x63E1636BE16363636328286B28286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x10) = 0x63E16373E16363636328287328286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x38) = 0x63E1635BE16363636328285B28286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x4F) = 0x63E1632CE16363636328282C28286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0xFF) = 0x63E1639CE16363636328289C28286363 +imc (0xE000000000000000EEEE00000000EEEE) = 0x377A0CA100000000BC7B52955295BC7B +pclmul(0xE000000000000000EEEE00000000EEEE, 0x00) = 0x274FC23DFFC21A8DE54FFFC23DC22772 +pclmul(0xE000000000000000EEEE00000000EEEE, 0x01) = 0x2704AADC76AAFB048DAE76AADC002772 +pclmul(0xE000000000000000EEEE00000000EEEE, 0x10) = 0x253B1B253B1B25052000000000000000 +pclmul(0xE000000000000000EEEE00000000EEEE, 0xFF) = 0x2574C50574C505052000000000000000 +enc (0xF000000000000000FFFF00000000FFFF, 0x00000000000000000000000000000000) = 0x63FC168989FC161663636363393CF966 +enclast(0xF000000000000000FFFF00000000FFFF, 0x00000000000000000000000000000000) = 0x6316166316636363636363638C636316 +dec (0xF000000000000000FFFF00000000FFFF, 0x00000000000000000000000000000000) = 0x1ED340A2C9830609A21ED340C1B0EE9F +declast(0xF000000000000000FFFF00000000FFFF, 0x00000000000000000000000000000000) = 0x527D52521752525252527D527D52527D +enc (0xF000000000000000FFFF00000000FFFF, 0x10000000000000001111000000001111) = 0x73FC168989FC161672726363393CE877 +enclast(0xF000000000000000FFFF00000000FFFF, 0x10000000000000001111000000001111) = 0x7316166316636363727263638C637207 +dec (0xF000000000000000FFFF00000000FFFF, 0x10000000000000001111000000001111) = 0x0ED340A2C9830609B30FD340C1B0FF8E +declast(0xF000000000000000FFFF00000000FFFF, 0x10000000000000001111000000001111) = 0x427D52521752525243437D527D52436C +enc (0xF000000000000000FFFF00000000FFFF, 0x20000000000000002222000000002222) = 0x43FC168989FC161641416363393CDB44 +enclast(0xF000000000000000FFFF00000000FFFF, 0x20000000000000002222000000002222) = 0x4316166316636363414163638C634134 +dec (0xF000000000000000FFFF00000000FFFF, 0x20000000000000002222000000002222) = 0x3ED340A2C9830609803CD340C1B0CCBD +declast(0xF000000000000000FFFF00000000FFFF, 0x20000000000000002222000000002222) = 0x727D52521752525270707D527D52705F +enc (0xF000000000000000FFFF00000000FFFF, 0x30000000000000003333000000003333) = 0x53FC168989FC161650506363393CCA55 +enclast(0xF000000000000000FFFF00000000FFFF, 0x30000000000000003333000000003333) = 0x5316166316636363505063638C635025 +dec (0xF000000000000000FFFF00000000FFFF, 0x30000000000000003333000000003333) = 0x2ED340A2C9830609912DD340C1B0DDAC +declast(0xF000000000000000FFFF00000000FFFF, 0x30000000000000003333000000003333) = 0x627D52521752525261617D527D52614E +enc (0xF000000000000000FFFF00000000FFFF, 0x40000000000000004444000000004444) = 0x23FC168989FC161627276363393CBD22 +enclast(0xF000000000000000FFFF00000000FFFF, 0x40000000000000004444000000004444) = 0x2316166316636363272763638C632752 +dec (0xF000000000000000FFFF00000000FFFF, 0x40000000000000004444000000004444) = 0x5ED340A2C9830609E65AD340C1B0AADB +declast(0xF000000000000000FFFF00000000FFFF, 0x40000000000000004444000000004444) = 0x127D52521752525216167D527D521639 +enc (0xF000000000000000FFFF00000000FFFF, 0x50000000000000005555000000005555) = 0x33FC168989FC161636366363393CAC33 +enclast(0xF000000000000000FFFF00000000FFFF, 0x50000000000000005555000000005555) = 0x3316166316636363363663638C633643 +dec (0xF000000000000000FFFF00000000FFFF, 0x50000000000000005555000000005555) = 0x4ED340A2C9830609F74BD340C1B0BBCA +declast(0xF000000000000000FFFF00000000FFFF, 0x50000000000000005555000000005555) = 0x027D52521752525207077D527D520728 +enc (0xF000000000000000FFFF00000000FFFF, 0x60000000000000006666000000006666) = 0x03FC168989FC161605056363393C9F00 +enclast(0xF000000000000000FFFF00000000FFFF, 0x60000000000000006666000000006666) = 0x0316166316636363050563638C630570 +dec (0xF000000000000000FFFF00000000FFFF, 0x60000000000000006666000000006666) = 0x7ED340A2C9830609C478D340C1B088F9 +declast(0xF000000000000000FFFF00000000FFFF, 0x60000000000000006666000000006666) = 0x327D52521752525234347D527D52341B +enc (0xF000000000000000FFFF00000000FFFF, 0x70000000000000007777000000007777) = 0x13FC168989FC161614146363393C8E11 +enclast(0xF000000000000000FFFF00000000FFFF, 0x70000000000000007777000000007777) = 0x1316166316636363141463638C631461 +dec (0xF000000000000000FFFF00000000FFFF, 0x70000000000000007777000000007777) = 0x6ED340A2C9830609D569D340C1B099E8 +declast(0xF000000000000000FFFF00000000FFFF, 0x70000000000000007777000000007777) = 0x227D52521752525225257D527D52250A +enc (0xF000000000000000FFFF00000000FFFF, 0x80000000000000008888000000008888) = 0xE3FC168989FC1616EBEB6363393C71EE +enclast(0xF000000000000000FFFF00000000FFFF, 0x80000000000000008888000000008888) = 0xE316166316636363EBEB63638C63EB9E +dec (0xF000000000000000FFFF00000000FFFF, 0x80000000000000008888000000008888) = 0x9ED340A2C98306092A96D340C1B06617 +declast(0xF000000000000000FFFF00000000FFFF, 0x80000000000000008888000000008888) = 0xD27D525217525252DADA7D527D52DAF5 +enc (0xF000000000000000FFFF00000000FFFF, 0x90000000000000009999000000009999) = 0xF3FC168989FC1616FAFA6363393C60FF +enclast(0xF000000000000000FFFF00000000FFFF, 0x90000000000000009999000000009999) = 0xF316166316636363FAFA63638C63FA8F +dec (0xF000000000000000FFFF00000000FFFF, 0x90000000000000009999000000009999) = 0x8ED340A2C98306093B87D340C1B07706 +declast(0xF000000000000000FFFF00000000FFFF, 0x90000000000000009999000000009999) = 0xC27D525217525252CBCB7D527D52CBE4 +enc (0xF000000000000000FFFF00000000FFFF, 0xA000000000000000AAAA00000000AAAA) = 0xC3FC168989FC1616C9C96363393C53CC +enclast(0xF000000000000000FFFF00000000FFFF, 0xA000000000000000AAAA00000000AAAA) = 0xC316166316636363C9C963638C63C9BC +dec (0xF000000000000000FFFF00000000FFFF, 0xA000000000000000AAAA00000000AAAA) = 0xBED340A2C983060908B4D340C1B04435 +declast(0xF000000000000000FFFF00000000FFFF, 0xA000000000000000AAAA00000000AAAA) = 0xF27D525217525252F8F87D527D52F8D7 +enc (0xF000000000000000FFFF00000000FFFF, 0xB000000000000000BBBB00000000BBBB) = 0xD3FC168989FC1616D8D86363393C42DD +enclast(0xF000000000000000FFFF00000000FFFF, 0xB000000000000000BBBB00000000BBBB) = 0xD316166316636363D8D863638C63D8AD +dec (0xF000000000000000FFFF00000000FFFF, 0xB000000000000000BBBB00000000BBBB) = 0xAED340A2C983060919A5D340C1B05524 +declast(0xF000000000000000FFFF00000000FFFF, 0xB000000000000000BBBB00000000BBBB) = 0xE27D525217525252E9E97D527D52E9C6 +enc (0xF000000000000000FFFF00000000FFFF, 0xC000000000000000CCCC00000000CCCC) = 0xA3FC168989FC1616AFAF6363393C35AA +enclast(0xF000000000000000FFFF00000000FFFF, 0xC000000000000000CCCC00000000CCCC) = 0xA316166316636363AFAF63638C63AFDA +dec (0xF000000000000000FFFF00000000FFFF, 0xC000000000000000CCCC00000000CCCC) = 0xDED340A2C98306096ED2D340C1B02253 +declast(0xF000000000000000FFFF00000000FFFF, 0xC000000000000000CCCC00000000CCCC) = 0x927D5252175252529E9E7D527D529EB1 +enc (0xF000000000000000FFFF00000000FFFF, 0xD000000000000000DDDD00000000DDDD) = 0xB3FC168989FC1616BEBE6363393C24BB +enclast(0xF000000000000000FFFF00000000FFFF, 0xD000000000000000DDDD00000000DDDD) = 0xB316166316636363BEBE63638C63BECB +dec (0xF000000000000000FFFF00000000FFFF, 0xD000000000000000DDDD00000000DDDD) = 0xCED340A2C98306097FC3D340C1B03342 +declast(0xF000000000000000FFFF00000000FFFF, 0xD000000000000000DDDD00000000DDDD) = 0x827D5252175252528F8F7D527D528FA0 +enc (0xF000000000000000FFFF00000000FFFF, 0xE000000000000000EEEE00000000EEEE) = 0x83FC168989FC16168D8D6363393C1788 +enclast(0xF000000000000000FFFF00000000FFFF, 0xE000000000000000EEEE00000000EEEE) = 0x83161663166363638D8D63638C638DF8 +dec (0xF000000000000000FFFF00000000FFFF, 0xE000000000000000EEEE00000000EEEE) = 0xFED340A2C98306094CF0D340C1B00071 +declast(0xF000000000000000FFFF00000000FFFF, 0xE000000000000000EEEE00000000EEEE) = 0xB27D525217525252BCBC7D527D52BC93 +enc (0xF000000000000000FFFF00000000FFFF, 0xF000000000000000FFFF00000000FFFF) = 0x93FC168989FC16169C9C6363393C0699 +enclast(0xF000000000000000FFFF00000000FFFF, 0xF000000000000000FFFF00000000FFFF) = 0x93161663166363639C9C63638C639CE9 +dec (0xF000000000000000FFFF00000000FFFF, 0xF000000000000000FFFF00000000FFFF) = 0xEED340A2C98306095DE1D340C1B01160 +declast(0xF000000000000000FFFF00000000FFFF, 0xF000000000000000FFFF00000000FFFF) = 0xA27D525217525252ADAD7D527D52AD82 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x00) = 0x638C63638C6363636316166316166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x01) = 0x638C63628C6363636316166216166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x02) = 0x638C63618C6363636316166116166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x04) = 0x638C63678C6363636316166716166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x08) = 0x638C636B8C6363636316166B16166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x10) = 0x638C63738C6363636316167316166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x38) = 0x638C635B8C6363636316165B16166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x4F) = 0x638C632C8C6363636316162C16166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0xFF) = 0x638C639C8C6363636316169C16166363 +imc (0xF000000000000000FFFF00000000FFFF) = 0xD7CADC3100000000CB2E34D134D1CB2E +pclmul(0xF000000000000000FFFF00000000FFFF, 0x00) = 0x210DD32CFFD30DDEF20DFFD32CD32121 +pclmul(0xF000000000000000FFFF00000000FFFF, 0x01) = 0x217BFFA55AFF847BDE845AFFA5002121 +pclmul(0xF000000000000000FFFF00000000FFFF, 0x10) = 0x231D2D031D2D03331000000000000000 +pclmul(0xF000000000000000FFFF00000000FFFF, 0xFF) = 0x236C63336C6333331000000000000000 diff --git a/tests32/ref23.txt b/tests32/ref23.txt new file mode 100644 index 00000000..630c8234 --- /dev/null +++ b/tests32/ref23.txt @@ -0,0 +1,5 @@ +ret = 0x78563412 +ret = 0x3412 +ret = 0x78563412 +ret = 0x3412 +ret = 0x12345678 diff --git a/tests32/ref24.txt b/tests32/ref24.txt new file mode 100644 index 00000000..df60c725 --- /dev/null +++ b/tests32/ref24.txt @@ -0,0 +1,640 @@ +Testing rint(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing rint(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing rint(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rint(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rint(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rint(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rint(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rint(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing rintf(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing rintf(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing rintf(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rintf(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rintf(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rintf(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rintf(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rintf(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing nearbyint(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing nearbyint(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing nearbyint(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyint(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyint(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyint(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyint(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyint(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing nearbyintf(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing nearbyintf(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing nearbyintf(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyintf(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyintf(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyintf(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyintf(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyintf(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing llrintf(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing llrintf(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing llrintf(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrintf(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrintf(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrintf(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrintf(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrintf(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing llrint(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing llrint(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing llrint(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrint(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrint(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrint(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrint(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrint(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing lrintf(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing lrintf(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing lrintf(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrintf(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrintf(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrintf(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrintf(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrintf(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing lrint(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing lrint(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing lrint(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrint(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrint(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrint(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrint(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrint(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + diff --git a/tests32/ref25.txt b/tests32/ref25.txt new file mode 100644 index 00000000..6a84602f --- /dev/null +++ b/tests32/ref25.txt @@ -0,0 +1,1062 @@ +test SSE 4.2 +_mm_cmpestri("This is a string", 16, "This", 4, 0x0) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x0) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x0) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x0) => 0 +_mm_cmpestri("This is a string", "This", 0x0) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x0) = 0000000000000000-000000000000000f +_mm_cmpestri("This is a string", 16, "This", 4, 0x1) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x1) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x1) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x1) => 0 +_mm_cmpestri("This is a string", "This", 0x1) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x1) = 0000000000000000-000000000000000f +_mm_cmpestri("This", 4, "This is a string", 16, 0x0) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x0) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x0) = 0000000000000000-000000000000246f +_mm_cmpistri("This", "This is a string", 0x0) => 0 +_mm_cmpestri("This", "This is a string", 0x0) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x0) = 0000000000000000-000000000000246f +_mm_cmpestri("This", 4, "This is a string", 16, 0x1) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x1) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x1) = 0000000000000000-000000000000006f +_mm_cmpistri("This", "This is a string", 0x1) => 0 +_mm_cmpestri("This", "This is a string", 0x1) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x1) = 0000000000000000-000000000000006f +_mm_cmpestri("This is a string", 16, "is", 2, 0x0) => 0 +_mm_cmpestri("This is a string", 16, "is", 2, 0x0) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "is", 2, 0x0) = 0000000000000000-0000000000000003 +_mm_cmpistri("This is a string", "is", 0x0) => 0 +_mm_cmpestri("This is a string", "is", 0x0) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "is", 0x0) = 0000000000000000-0000000000000003 +_mm_cmpestri("This is a string", 16, "is", 2, 0x1) => 0 +_mm_cmpestri("This is a string", 16, "is", 2, 0x1) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "is", 2, 0x1) = 0000000000000000-0000000000000003 +_mm_cmpistri("This is a string", "is", 0x1) => 0 +_mm_cmpestri("This is a string", "is", 0x1) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "is", 0x1) = 0000000000000000-0000000000000003 +_mm_cmpestri("is", 2, "This is a string", 16, 0x0) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x0) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x0) = 0000000000000000-000000000000246c +_mm_cmpistri("is", "This is a string", 0x0) => 2 +_mm_cmpestri("is", "This is a string", 0x0) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x0) = 0000000000000000-000000000000246c +_mm_cmpestri("is", 2, "This is a string", 16, 0x1) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x1) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x1) = 0000000000000000-000000000000006c +_mm_cmpistri("is", "This is a string", 0x1) => 2 +_mm_cmpestri("is", "This is a string", 0x1) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x1) = 0000000000000000-000000000000006c +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x0) => 1 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x0) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x0) = 0000000000000000-000000000000c03a +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x0) => 1 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x0) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x0) = 0000000000000000-000000000000c03a +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x1) => 3 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x1) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x1) = 0000000000000000-0000000000000008 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x1) => 3 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x1) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x1) = 0000000000000000-0000000000000008 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x0) => 3 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x0) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x0) = 0000000000000000-0000000000001d48 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x0) => 3 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x0) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x0) = 0000000000000000-0000000000001d48 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x1) => 3 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x1) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x1) = 0000000000000000-0000000000000048 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x1) => 3 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x1) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x1) = 0000000000000000-0000000000000048 +_mm_cmpestri("This is a string", 16, "", 0, 0x0) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x0) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x0) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x0) => 16 +_mm_cmpestri("This is a string", "", 0x0) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x0) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x1) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x1) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x1) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x1) => 8 +_mm_cmpestri("This is a string", "", 0x1) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x1) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x0) => 16 +_mm_cmpestri("", 0, "This is a string", 16, 0x0) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x0) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x0) => 16 +_mm_cmpestri("", "This is a string", 0x0) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x0) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x1) => 8 +_mm_cmpestri("", 0, "This is a string", 16, 0x1) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x1) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x1) => 8 +_mm_cmpestri("", "This is a string", 0x1) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x1) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x4) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x4) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x4) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x4) => 0 +_mm_cmpestri("This is a string", "This", 0x4) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x4) = 0000000000000000-000000000000000f +_mm_cmpestri("This is a string", 16, "This", 4, 0x5) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x5) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x5) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x5) => 0 +_mm_cmpestri("This is a string", "This", 0x5) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x5) = 0000000000000000-000000000000000f +_mm_cmpestri("This", 4, "This is a string", 16, 0x4) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x4) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x4) = 0000000000000000-000000000000f56f +_mm_cmpistri("This", "This is a string", 0x4) => 0 +_mm_cmpestri("This", "This is a string", 0x4) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x4) = 0000000000000000-000000000000f56f +_mm_cmpestri("This", 4, "This is a string", 16, 0x5) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x5) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x5) = 0000000000000000-000000000000006f +_mm_cmpistri("This", "This is a string", 0x5) => 0 +_mm_cmpestri("This", "This is a string", 0x5) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x5) = 0000000000000000-000000000000006f +_mm_cmpestri("This is a string", 16, "is", 2, 0x4) => 0 +_mm_cmpestri("This is a string", 16, "is", 2, 0x4) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "is", 2, 0x4) = 0000000000000000-0000000000000003 +_mm_cmpistri("This is a string", "is", 0x4) => 0 +_mm_cmpestri("This is a string", "is", 0x4) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "is", 0x4) = 0000000000000000-0000000000000003 +_mm_cmpestri("This is a string", 16, "is", 2, 0x5) => 0 +_mm_cmpestri("This is a string", 16, "is", 2, 0x5) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "is", 2, 0x5) = 0000000000000000-0000000000000003 +_mm_cmpistri("This is a string", "is", 0x5) => 0 +_mm_cmpestri("This is a string", "is", 0x5) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "is", 0x5) = 0000000000000000-0000000000000003 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x4) = 0000000000000000-000000000000746c +_mm_cmpistri("is", "This is a string", 0x4) => 2 +_mm_cmpestri("is", "This is a string", 0x4) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x4) = 0000000000000000-000000000000746c +_mm_cmpestri("is", 2, "This is a string", 16, 0x5) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x5) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x5) = 0000000000000000-000000000000006c +_mm_cmpistri("is", "This is a string", 0x5) => 2 +_mm_cmpestri("is", "This is a string", 0x5) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x5) = 0000000000000000-000000000000006c +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x4) = 0000000000000000-000000000000ffbf +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x4) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x4) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x4) = 0000000000000000-000000000000ffbf +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x5) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x5) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x5) = 0000000000000000-00000000000000af +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x5) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x5) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x5) = 0000000000000000-00000000000000af +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x4) = 0000000000000000-000000000000f56f +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x4) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x4) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x4) = 0000000000000000-000000000000f56f +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x5) => 1 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x5) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x5) = 0000000000000000-000000000000006e +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x5) => 1 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x5) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x5) = 0000000000000000-000000000000006e +_mm_cmpestri("This is a string", 16, "", 0, 0x4) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x4) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x4) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x4) => 16 +_mm_cmpestri("This is a string", "", 0x4) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x4) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x5) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x5) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x5) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x5) => 8 +_mm_cmpestri("This is a string", "", 0x5) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x5) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x4) => 16 +_mm_cmpestri("", 0, "This is a string", 16, 0x4) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x4) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x4) => 16 +_mm_cmpestri("", "This is a string", 0x4) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x4) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x5) => 8 +_mm_cmpestri("", 0, "This is a string", 16, 0x5) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x5) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x5) => 8 +_mm_cmpestri("", "This is a string", 0x5) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x5) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x8) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x8) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x8) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x8) => 0 +_mm_cmpestri("This is a string", "This", 0x8) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x8) = 0000000000000000-000000000000000f +_mm_cmpestri("This is a string", 16, "This", 4, 0x9) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x9) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x9) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x9) => 0 +_mm_cmpestri("This is a string", "This", 0x9) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x9) = 0000000000000000-000000000000000f +_mm_cmpestri("This", 4, "This is a string", 16, 0x8) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x8) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x8) = 0000000000000000-000000000000000f +_mm_cmpistri("This", "This is a string", 0x8) => 0 +_mm_cmpestri("This", "This is a string", 0x8) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x8) = 0000000000000000-000000000000000f +_mm_cmpestri("This", 4, "This is a string", 16, 0x9) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x9) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x9) = 0000000000000000-000000000000000f +_mm_cmpistri("This", "This is a string", 0x9) => 0 +_mm_cmpestri("This", "This is a string", 0x9) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x9) = 0000000000000000-000000000000000f +_mm_cmpestri("This is a string", 16, "is", 2, 0x8) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x8) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x8) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x8) => 16 +_mm_cmpestri("This is a string", "is", 0x8) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x8) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x9) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x9) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x9) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x9) => 8 +_mm_cmpestri("This is a string", "is", 0x9) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x9) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x8) => 16 +_mm_cmpestri("is", 2, "This is a string", 16, 0x8) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x8) = 0000000000000000-0000000000000000 +_mm_cmpistri("is", "This is a string", 0x8) => 16 +_mm_cmpestri("is", "This is a string", 0x8) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("is", "This is a string", 0x8) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x9) => 8 +_mm_cmpestri("is", 2, "This is a string", 16, 0x9) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x9) = 0000000000000000-0000000000000000 +_mm_cmpistri("is", "This is a string", 0x9) => 8 +_mm_cmpestri("is", "This is a string", 0x9) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("is", "This is a string", 0x9) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x8) => 3 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x8) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x8) = 0000000000000000-0000000000000008 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x8) => 3 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x8) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x8) = 0000000000000000-0000000000000008 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x9) => 3 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x9) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x9) = 0000000000000000-0000000000000008 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x9) => 3 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x9) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x9) = 0000000000000000-0000000000000008 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x8) => 3 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x8) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x8) = 0000000000000000-0000000000000008 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x8) => 3 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x8) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x8) = 0000000000000000-0000000000000008 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x9) => 3 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x9) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x9) = 0000000000000000-0000000000000008 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x9) => 3 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x9) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x9) = 0000000000000000-0000000000000008 +_mm_cmpestri("This is a string", 16, "", 0, 0x8) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x8) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x8) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x8) => 16 +_mm_cmpestri("This is a string", "", 0x8) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x8) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x9) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x9) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x9) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x9) => 8 +_mm_cmpestri("This is a string", "", 0x9) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x9) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x8) => 16 +_mm_cmpestri("", 0, "This is a string", 16, 0x8) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x8) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x8) => 16 +_mm_cmpestri("", "This is a string", 0x8) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x8) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x9) => 8 +_mm_cmpestri("", 0, "This is a string", 16, 0x9) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x9) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x9) => 8 +_mm_cmpestri("", "This is a string", 0x9) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x9) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0xc) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0xc) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0xc) => 16 +_mm_cmpestri("This is a string", "This", 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0xc) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0xd) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0xd) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0xd) => 8 +_mm_cmpestri("This is a string", "This", 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0xd) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0xc) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0xc) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0xc) = 0000000000000000-0000000000000001 +_mm_cmpistri("This", "This is a string", 0xc) => 0 +_mm_cmpestri("This", "This is a string", 0xc) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0xc) = 0000000000000000-0000000000000001 +_mm_cmpestri("This", 4, "This is a string", 16, 0xd) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0xd) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0xd) = 0000000000000000-0000000000000001 +_mm_cmpistri("This", "This is a string", 0xd) => 0 +_mm_cmpestri("This", "This is a string", 0xd) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0xd) = 0000000000000000-0000000000000001 +_mm_cmpestri("This is a string", 16, "is", 2, 0xc) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0xc) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0xc) => 16 +_mm_cmpestri("This is a string", "is", 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0xc) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0xd) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0xd) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0xd) => 8 +_mm_cmpestri("This is a string", "is", 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0xd) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0xc) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0xc) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0xc) = 0000000000000000-0000000000000024 +_mm_cmpistri("is", "This is a string", 0xc) => 2 +_mm_cmpestri("is", "This is a string", 0xc) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0xc) = 0000000000000000-0000000000000024 +_mm_cmpestri("is", 2, "This is a string", 16, 0xd) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0xd) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0xd) = 0000000000000000-0000000000000024 +_mm_cmpistri("is", "This is a string", 0xd) => 2 +_mm_cmpestri("is", "This is a string", 0xd) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0xd) = 0000000000000000-0000000000000024 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xc) => 16 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xc) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0xc) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0xc) => 16 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0xc) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0xc) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xd) => 8 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xd) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0xd) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0xd) => 8 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0xd) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0xd) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xc) => 16 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xc) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0xc) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0xc) => 16 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0xc) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0xc) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xd) => 8 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xd) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0xd) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0xd) => 8 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0xd) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0xd) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0xc) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0xc) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0xc) => 16 +_mm_cmpestri("This is a string", "", 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0xc) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0xd) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0xd) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0xd) => 8 +_mm_cmpestri("This is a string", "", 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0xd) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0xc) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0xc) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0xc) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0xc) => 0 +_mm_cmpestri("", "This is a string", 0xc) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0xc) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0xd) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0xd) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0xd) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0xd) => 0 +_mm_cmpestri("", "This is a string", 0xd) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0xd) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x10) => 4 +_mm_cmpestri("This is a string", 16, "This", 4, 0x10) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x10) = 0000000000000000-000000000000fff0 +_mm_cmpistri("This is a string", "This", 0x10) => 4 +_mm_cmpestri("This is a string", "This", 0x10) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", "This", 0x10) = 0000000000000000-000000000000fff0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x11) => 4 +_mm_cmpestri("This is a string", 16, "This", 4, 0x11) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x11) = 0000000000000000-00000000000000f0 +_mm_cmpistri("This is a string", "This", 0x11) => 4 +_mm_cmpestri("This is a string", "This", 0x11) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", "This", 0x11) = 0000000000000000-00000000000000f0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x10) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x10) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x10) = 0000000000000000-000000000000db90 +_mm_cmpistri("This", "This is a string", 0x10) => 4 +_mm_cmpestri("This", "This is a string", 0x10) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x10) = 0000000000000000-000000000000db90 +_mm_cmpestri("This", 4, "This is a string", 16, 0x11) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x11) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x11) = 0000000000000000-0000000000000090 +_mm_cmpistri("This", "This is a string", 0x11) => 4 +_mm_cmpestri("This", "This is a string", 0x11) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x11) = 0000000000000000-0000000000000090 +_mm_cmpestri("This is a string", 16, "is", 2, 0x10) => 2 +_mm_cmpestri("This is a string", 16, "is", 2, 0x10) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x10) = 0000000000000000-000000000000fffc +_mm_cmpistri("This is a string", "is", 0x10) => 2 +_mm_cmpestri("This is a string", "is", 0x10) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", "is", 0x10) = 0000000000000000-000000000000fffc +_mm_cmpestri("This is a string", 16, "is", 2, 0x11) => 2 +_mm_cmpestri("This is a string", 16, "is", 2, 0x11) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x11) = 0000000000000000-00000000000000fc +_mm_cmpistri("This is a string", "is", 0x11) => 2 +_mm_cmpestri("This is a string", "is", 0x11) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", "is", 0x11) = 0000000000000000-00000000000000fc +_mm_cmpestri("is", 2, "This is a string", 16, 0x10) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x10) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x10) = 0000000000000000-000000000000db93 +_mm_cmpistri("is", "This is a string", 0x10) => 0 +_mm_cmpestri("is", "This is a string", 0x10) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x10) = 0000000000000000-000000000000db93 +_mm_cmpestri("is", 2, "This is a string", 16, 0x11) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x11) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x11) = 0000000000000000-0000000000000093 +_mm_cmpistri("is", "This is a string", 0x11) => 0 +_mm_cmpestri("is", "This is a string", 0x11) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x11) = 0000000000000000-0000000000000093 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x10) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x10) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x10) = 0000000000000000-0000000000003fc5 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x10) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x10) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x10) = 0000000000000000-0000000000003fc5 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x11) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x11) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x11) = 0000000000000000-00000000000000f7 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x11) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x11) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x11) = 0000000000000000-00000000000000f7 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x10) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x10) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x10) = 0000000000000000-000000000000e2b7 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x10) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x10) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x10) = 0000000000000000-000000000000e2b7 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x11) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x11) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x11) = 0000000000000000-00000000000000b7 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x11) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x11) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x11) = 0000000000000000-00000000000000b7 +_mm_cmpestri("This is a string", 16, "", 0, 0x10) => 0 +_mm_cmpestri("This is a string", 16, "", 0, 0x10) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "", 0, 0x10) = 0000000000000000-000000000000ffff +_mm_cmpistri("This is a string", "", 0x10) => 0 +_mm_cmpestri("This is a string", "", 0x10) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "", 0x10) = 0000000000000000-000000000000ffff +_mm_cmpestri("This is a string", 16, "", 0, 0x11) => 0 +_mm_cmpestri("This is a string", 16, "", 0, 0x11) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "", 0, 0x11) = 0000000000000000-00000000000000ff +_mm_cmpistri("This is a string", "", 0x11) => 0 +_mm_cmpestri("This is a string", "", 0x11) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "", 0x11) = 0000000000000000-00000000000000ff +_mm_cmpestri("", 0, "This is a string", 16, 0x10) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x10) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x10) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0x10) => 0 +_mm_cmpestri("", "This is a string", 0x10) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x10) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0x11) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x11) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x11) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0x11) => 0 +_mm_cmpestri("", "This is a string", 0x11) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x11) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x30) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x30) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x30) => 16 +_mm_cmpestri("This is a string", "This", 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x30) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x31) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x31) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x31) => 8 +_mm_cmpestri("This is a string", "This", 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x31) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x30) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x30) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x30) = 0000000000000000-000000000000db90 +_mm_cmpistri("This", "This is a string", 0x30) => 4 +_mm_cmpestri("This", "This is a string", 0x30) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x30) = 0000000000000000-000000000000db90 +_mm_cmpestri("This", 4, "This is a string", 16, 0x31) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x31) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x31) = 0000000000000000-0000000000000090 +_mm_cmpistri("This", "This is a string", 0x31) => 4 +_mm_cmpestri("This", "This is a string", 0x31) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x31) = 0000000000000000-0000000000000090 +_mm_cmpestri("This is a string", 16, "is", 2, 0x30) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x30) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x30) => 16 +_mm_cmpestri("This is a string", "is", 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x30) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x31) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x31) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x31) => 8 +_mm_cmpestri("This is a string", "is", 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x31) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x30) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x30) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x30) = 0000000000000000-000000000000db93 +_mm_cmpistri("is", "This is a string", 0x30) => 0 +_mm_cmpestri("is", "This is a string", 0x30) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x30) = 0000000000000000-000000000000db93 +_mm_cmpestri("is", 2, "This is a string", 16, 0x31) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x31) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x31) = 0000000000000000-0000000000000093 +_mm_cmpistri("is", "This is a string", 0x31) => 0 +_mm_cmpestri("is", "This is a string", 0x31) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x31) = 0000000000000000-0000000000000093 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x30) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x30) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x30) = 0000000000000000-0000000000003fc5 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x30) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x30) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x30) = 0000000000000000-0000000000003fc5 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x31) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x31) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x31) = 0000000000000000-00000000000000f7 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x31) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x31) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x31) = 0000000000000000-00000000000000f7 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x30) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x30) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x30) = 0000000000000000-000000000000e2b7 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x30) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x30) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x30) = 0000000000000000-000000000000e2b7 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x31) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x31) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x31) = 0000000000000000-00000000000000b7 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x31) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x31) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x31) = 0000000000000000-00000000000000b7 +_mm_cmpestri("This is a string", 16, "", 0, 0x30) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x30) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x30) => 16 +_mm_cmpestri("This is a string", "", 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x30) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x31) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x31) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x31) => 8 +_mm_cmpestri("This is a string", "", 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x31) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x30) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x30) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x30) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0x30) => 0 +_mm_cmpestri("", "This is a string", 0x30) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x30) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0x31) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x31) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x31) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0x31) => 0 +_mm_cmpestri("", "This is a string", 0x31) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x31) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x4c) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x4c) => 16 +_mm_cmpestri("This is a string", "This", 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x4d) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x4d) => 8 +_mm_cmpestri("This is a string", "This", 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x4c) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x4c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x4c) = 0000000000000000-00000000000000ff +_mm_cmpistri("This", "This is a string", 0x4c) => 0 +_mm_cmpestri("This", "This is a string", 0x4c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x4c) = 0000000000000000-00000000000000ff +_mm_cmpestri("This", 4, "This is a string", 16, 0x4d) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x4d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x4d) = 0000000000000000-000000000000ffff +_mm_cmpistri("This", "This is a string", 0x4d) => 0 +_mm_cmpestri("This", "This is a string", 0x4d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x4d) = 0000000000000000-000000000000ffff +_mm_cmpestri("This is a string", 16, "is", 2, 0x4c) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x4c) => 16 +_mm_cmpestri("This is a string", "is", 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x4d) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x4d) => 8 +_mm_cmpestri("This is a string", "is", 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4c) => 5 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4c) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x4c) = 000000000000ff00-0000000000ff0000 +_mm_cmpistri("is", "This is a string", 0x4c) => 5 +_mm_cmpestri("is", "This is a string", 0x4c) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x4c) = 000000000000ff00-0000000000ff0000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4d) => 5 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4d) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x4d) = 000000000000ffff-0000000000000000 +_mm_cmpistri("is", "This is a string", 0x4d) => 5 +_mm_cmpestri("is", "This is a string", 0x4d) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x4d) = 000000000000ffff-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4c) => 16 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x4c) => 16 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x4c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4d) => 8 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x4d) => 8 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x4d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4c) => 16 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x4c) => 16 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x4c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4d) => 8 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x4d) => 8 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x4d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x4c) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x4c) => 16 +_mm_cmpestri("This is a string", "", 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x4d) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x4d) => 8 +_mm_cmpestri("This is a string", "", 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x4c) => 15 +_mm_cmpestri("", 0, "This is a string", 16, 0x4c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x4c) = 00000000ffffffff-00000000ffffffff +_mm_cmpistri("", "This is a string", 0x4c) => 15 +_mm_cmpestri("", "This is a string", 0x4c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x4c) = 00000000ffffffff-00000000ffffffff +_mm_cmpestri("", 0, "This is a string", 16, 0x4d) => 7 +_mm_cmpestri("", 0, "This is a string", 16, 0x4d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x4d) = 00000000ffffffff-00000000ffffffff +_mm_cmpistri("", "This is a string", 0x4d) => 7 +_mm_cmpestri("", "This is a string", 0x4d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x4d) = 00000000ffffffff-00000000ffffffff +_mm_cmpestri("This is a string", 16, "This", 4, 0x2c) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x2c) => 16 +_mm_cmpestri("This is a string", "This", 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x2d) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x2d) => 8 +_mm_cmpestri("This is a string", "This", 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x2c) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x2c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x2c) = 0000000000000000-0000000000000001 +_mm_cmpistri("This", "This is a string", 0x2c) => 0 +_mm_cmpestri("This", "This is a string", 0x2c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x2c) = 0000000000000000-0000000000000001 +_mm_cmpestri("This", 4, "This is a string", 16, 0x2d) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x2d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x2d) = 0000000000000000-0000000000000001 +_mm_cmpistri("This", "This is a string", 0x2d) => 0 +_mm_cmpestri("This", "This is a string", 0x2d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x2d) = 0000000000000000-0000000000000001 +_mm_cmpestri("This is a string", 16, "is", 2, 0x2c) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x2c) => 16 +_mm_cmpestri("This is a string", "is", 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x2d) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x2d) => 8 +_mm_cmpestri("This is a string", "is", 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x2c) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x2c) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x2c) = 0000000000000000-0000000000000024 +_mm_cmpistri("is", "This is a string", 0x2c) => 2 +_mm_cmpestri("is", "This is a string", 0x2c) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x2c) = 0000000000000000-0000000000000024 +_mm_cmpestri("is", 2, "This is a string", 16, 0x2d) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x2d) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x2d) = 0000000000000000-0000000000000024 +_mm_cmpistri("is", "This is a string", 0x2d) => 2 +_mm_cmpestri("is", "This is a string", 0x2d) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x2d) = 0000000000000000-0000000000000024 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2c) => 16 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x2c) => 16 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x2c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2d) => 8 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x2d) => 8 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x2d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2c) => 16 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x2c) => 16 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x2c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2d) => 8 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x2d) => 8 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x2d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x2c) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x2c) => 16 +_mm_cmpestri("This is a string", "", 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x2d) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x2d) => 8 +_mm_cmpestri("This is a string", "", 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x2c) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x2c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x2c) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0x2c) => 0 +_mm_cmpestri("", "This is a string", 0x2c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x2c) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0x2d) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x2d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x2d) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0x2d) => 0 +_mm_cmpestri("", "This is a string", 0x2d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x2d) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x34) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x34) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x34) => 16 +_mm_cmpestri("This is a string", "This", 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x34) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x35) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x35) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x35) => 8 +_mm_cmpestri("This is a string", "This", 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x35) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x34) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x34) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x34) = 0000000000000000-0000000000000a90 +_mm_cmpistri("This", "This is a string", 0x34) => 4 +_mm_cmpestri("This", "This is a string", 0x34) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x34) = 0000000000000000-0000000000000a90 +_mm_cmpestri("This", 4, "This is a string", 16, 0x35) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x35) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x35) = 0000000000000000-0000000000000090 +_mm_cmpistri("This", "This is a string", 0x35) => 4 +_mm_cmpestri("This", "This is a string", 0x35) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x35) = 0000000000000000-0000000000000090 +_mm_cmpestri("This is a string", 16, "is", 2, 0x34) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x34) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x34) => 16 +_mm_cmpestri("This is a string", "is", 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x34) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x35) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x35) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x35) => 8 +_mm_cmpestri("This is a string", "is", 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x35) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x34) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x34) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x34) = 0000000000000000-0000000000008b93 +_mm_cmpistri("is", "This is a string", 0x34) => 0 +_mm_cmpestri("is", "This is a string", 0x34) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x34) = 0000000000000000-0000000000008b93 +_mm_cmpestri("is", 2, "This is a string", 16, 0x35) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x35) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x35) = 0000000000000000-0000000000000093 +_mm_cmpistri("is", "This is a string", 0x35) => 0 +_mm_cmpestri("is", "This is a string", 0x35) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x35) = 0000000000000000-0000000000000093 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x34) => 6 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x34) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x34) = 0000000000000000-0000000000000040 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x34) => 6 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x34) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x34) = 0000000000000000-0000000000000040 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x35) => 4 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x35) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x35) = 0000000000000000-0000000000000050 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x35) => 4 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x35) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x35) = 0000000000000000-0000000000000050 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x34) => 4 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x34) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x34) = 0000000000000000-0000000000000a90 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x34) => 4 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x34) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x34) = 0000000000000000-0000000000000a90 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x35) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x35) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x35) = 0000000000000000-0000000000000091 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x35) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x35) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x35) = 0000000000000000-0000000000000091 +_mm_cmpestri("This is a string", 16, "", 0, 0x34) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x34) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x34) => 16 +_mm_cmpestri("This is a string", "", 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x34) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x35) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x35) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x35) => 8 +_mm_cmpestri("This is a string", "", 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x35) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x34) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x34) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x34) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0x34) => 0 +_mm_cmpestri("", "This is a string", 0x34) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x34) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0x35) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x35) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x35) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0x35) => 0 +_mm_cmpestri("", "This is a string", 0x35) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x35) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x36) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x36) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x36) => 16 +_mm_cmpestri("This is a string", "This", 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x36) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x37) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x37) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x37) => 8 +_mm_cmpestri("This is a string", "This", 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x37) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x36) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x36) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x36) = 0000000000000000-0000000000000a90 +_mm_cmpistri("This", "This is a string", 0x36) => 4 +_mm_cmpestri("This", "This is a string", 0x36) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x36) = 0000000000000000-0000000000000a90 +_mm_cmpestri("This", 4, "This is a string", 16, 0x37) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x37) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x37) = 0000000000000000-0000000000000090 +_mm_cmpistri("This", "This is a string", 0x37) => 4 +_mm_cmpestri("This", "This is a string", 0x37) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x37) = 0000000000000000-0000000000000090 +_mm_cmpestri("This is a string", 16, "is", 2, 0x36) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x36) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x36) => 16 +_mm_cmpestri("This is a string", "is", 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x36) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x37) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x37) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x37) => 8 +_mm_cmpestri("This is a string", "is", 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x37) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x36) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x36) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x36) = 0000000000000000-0000000000008b93 +_mm_cmpistri("is", "This is a string", 0x36) => 0 +_mm_cmpestri("is", "This is a string", 0x36) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x36) = 0000000000000000-0000000000008b93 +_mm_cmpestri("is", 2, "This is a string", 16, 0x37) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x37) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x37) = 0000000000000000-0000000000000093 +_mm_cmpistri("is", "This is a string", 0x37) => 0 +_mm_cmpestri("is", "This is a string", 0x37) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x37) = 0000000000000000-0000000000000093 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x36) => 6 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x36) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x36) = 0000000000000000-0000000000000040 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x36) => 6 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x36) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x36) = 0000000000000000-0000000000000040 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x37) => 4 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x37) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x37) = 0000000000000000-0000000000000050 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x37) => 4 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x37) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x37) = 0000000000000000-0000000000000050 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x36) => 4 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x36) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x36) = 0000000000000000-0000000000000a90 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x36) => 4 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x36) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x36) = 0000000000000000-0000000000000a90 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x37) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x37) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x37) = 0000000000000000-0000000000000091 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x37) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x37) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x37) = 0000000000000000-0000000000000091 +_mm_cmpestri("This is a string", 16, "", 0, 0x36) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x36) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x36) => 16 +_mm_cmpestri("This is a string", "", 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x36) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x37) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x37) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x37) => 8 +_mm_cmpestri("This is a string", "", 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x37) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x36) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x36) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x36) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0x36) => 0 +_mm_cmpestri("", "This is a string", 0x36) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x36) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0x37) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x37) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x37) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0x37) => 0 +_mm_cmpestri("", "This is a string", 0x37) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x37) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x74) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x74) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x74) => 16 +_mm_cmpestri("This is a string", "This", 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x74) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x75) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x75) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x75) => 8 +_mm_cmpestri("This is a string", "This", 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x75) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x74) => 11 +_mm_cmpestri("This", 4, "This is a string", 16, 0x74) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x74) = 00000000ff0000ff-0000000000000000 +_mm_cmpistri("This", "This is a string", 0x74) => 11 +_mm_cmpestri("This", "This is a string", 0x74) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x74) = 00000000ff0000ff-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x75) => 7 +_mm_cmpestri("This", 4, "This is a string", 16, 0x75) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x75) = 0000000000000000-0000000000000000 +_mm_cmpistri("This", "This is a string", 0x75) => 7 +_mm_cmpestri("This", "This is a string", 0x75) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x75) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x74) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x74) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x74) => 16 +_mm_cmpestri("This is a string", "is", 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x74) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x75) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x75) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x75) => 8 +_mm_cmpestri("This is a string", "is", 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x75) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x74) => 15 +_mm_cmpestri("is", 2, "This is a string", 16, 0x74) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x74) = 00000000ff0000ff-000000000000ffff +_mm_cmpistri("is", "This is a string", 0x74) => 15 +_mm_cmpestri("is", "This is a string", 0x74) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x74) = 00000000ff0000ff-000000000000ffff +_mm_cmpestri("is", 2, "This is a string", 16, 0x75) => 7 +_mm_cmpestri("is", 2, "This is a string", 16, 0x75) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x75) = 0000000000000000-00000000ffffffff +_mm_cmpistri("is", "This is a string", 0x75) => 7 +_mm_cmpestri("is", "This is a string", 0x75) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x75) = 0000000000000000-00000000ffffffff +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x74) => 6 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x74) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x74) = 0000000000ff0000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x74) => 6 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x74) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x74) = 0000000000ff0000-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x75) => 6 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x75) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x75) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x75) => 6 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x75) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x75) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x74) => 11 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x74) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x74) = 00000000ff0000ff-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x74) => 11 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x74) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x74) = 00000000ff0000ff-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x75) => 7 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x75) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x75) = 0000000000000000-000000000000ffff +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x75) => 7 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x75) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x75) = 0000000000000000-000000000000ffff +_mm_cmpestri("This is a string", 16, "", 0, 0x74) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x74) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x74) => 16 +_mm_cmpestri("This is a string", "", 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x74) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x75) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x75) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x75) => 8 +_mm_cmpestri("This is a string", "", 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x75) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x74) => 15 +_mm_cmpestri("", 0, "This is a string", 16, 0x74) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x74) = 00000000ffffffff-00000000ffffffff +_mm_cmpistri("", "This is a string", 0x74) => 15 +_mm_cmpestri("", "This is a string", 0x74) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x74) = 00000000ffffffff-00000000ffffffff +_mm_cmpestri("", 0, "This is a string", 16, 0x75) => 7 +_mm_cmpestri("", 0, "This is a string", 16, 0x75) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x75) = 00000000ffffffff-00000000ffffffff +_mm_cmpistri("", "This is a string", 0x75) => 7 +_mm_cmpestri("", "This is a string", 0x75) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x75) = 00000000ffffffff-00000000ffffffff +crc32(0x0, byte:0x0) => 0x0 +crc32(0x0, byte:0xa) => 0x6be22838 +crc32(0x6be22838, dword:0x0) => 0xb545d4c9 +crc32(0xb545d4c9, dword:0x123456) => 0xc4dd37b5 +crc32(0xc4dd37b5, word:0x8765) => 0x89047b68 diff --git a/tests32/ref26.txt b/tests32/ref26.txt new file mode 100644 index 00000000..358877e1 --- /dev/null +++ b/tests32/ref26.txt @@ -0,0 +1,810 @@ +Testing: s = (0x1.123456789abcp2) -> (double)s +FE_TONEAREST 0x1.123456789abcp+2 +FE_DOWNWARD 0x1.123456789abcp+2 +FE_UPWARD 0x1.123456789abcp+2 +FE_TOWARDZERO 0x1.123456789abcp+2 + +Testing: s = (0x1.123456789abcp2) -> (float)s +FE_TONEAREST 0x1.123456p+2 +FE_DOWNWARD 0x1.123456p+2 +FE_UPWARD 0x1.123458p+2 +FE_TOWARDZERO 0x1.123456p+2 + +Testing: s = (-(0x1.123456789abcp2)) -> (double)s +FE_TONEAREST -0x1.123456789abcp+2 +FE_DOWNWARD -0x1.123456789abcp+2 +FE_UPWARD -0x1.123456789abcp+2 +FE_TOWARDZERO -0x1.123456789abcp+2 + +Testing: s = (-(0x1.123456789abcp2)) -> (float)s +FE_TONEAREST -0x1.123456p+2 +FE_DOWNWARD -0x1.123458p+2 +FE_UPWARD -0x1.123456p+2 +FE_TOWARDZERO -0x1.123456p+2 + +Testing: d = (0x1.123456789abcp512) -> (float)d +FE_TONEAREST inf +FE_DOWNWARD 0x1.fffffep+127 +FE_UPWARD inf +FE_TOWARDZERO 0x1.fffffep+127 + +Testing: s = (0x1.123456789abcp29) -> (double)s +FE_TONEAREST 0x1.123456789abcp+29 +FE_DOWNWARD 0x1.123456789abcp+29 +FE_UPWARD 0x1.123456789abcp+29 +FE_TOWARDZERO 0x1.123456789abcp+29 + +Testing: s = (0x1.123456789abcp29) -> (float)s +FE_TONEAREST 0x1.123456p+29 +FE_DOWNWARD 0x1.123456p+29 +FE_UPWARD 0x1.123458p+29 +FE_TOWARDZERO 0x1.123456p+29 + +Testing: s = (0x1.123456789abcp29) -> (int16_t)s +FE_TONEAREST -32768 +FE_DOWNWARD -32768 +FE_UPWARD -32768 +FE_TOWARDZERO -32768 + +Testing: s = (0x1.123456789abcp29) -> (int8_t)s +FE_TONEAREST 0 +FE_DOWNWARD 0 +FE_UPWARD 0 +FE_TOWARDZERO 0 + +Testing: s = (0x1.123456789abcp29) -> (unsigned short)s +FE_TONEAREST 35535 +FE_DOWNWARD 35535 +FE_UPWARD 35535 +FE_TOWARDZERO 35535 + +Testing: s = (0x1.123456789abcp29) -> (unsigned char)s +FE_TONEAREST 0 +FE_DOWNWARD 0 +FE_UPWARD 0 +FE_TOWARDZERO 0 + +Testing: s = (-(0x1.123456789abcp29)) -> (double)s +FE_TONEAREST -0x1.123456789abcp+29 +FE_DOWNWARD -0x1.123456789abcp+29 +FE_UPWARD -0x1.123456789abcp+29 +FE_TOWARDZERO -0x1.123456789abcp+29 + +Testing: s = (-(0x1.123456789abcp29)) -> (float)s +FE_TONEAREST -0x1.123456p+29 +FE_DOWNWARD -0x1.123458p+29 +FE_UPWARD -0x1.123456p+29 +FE_TOWARDZERO -0x1.123456p+29 + +Testing: d = (-0x1.123456789abcp30) -> (int32_t)d +FE_TONEAREST -1150096798 +FE_DOWNWARD -1150096798 +FE_UPWARD -1150096798 +FE_TOWARDZERO -1150096798 + +Testing: d = (-0x1.123456789abcp62) -> (int64_t)d +FE_TONEAREST -4939628135293321216 +FE_DOWNWARD -4939628135293321216 +FE_UPWARD -4939628135293321216 +FE_TOWARDZERO -4939628135293321216 + +Testing: s = (0x1.123456789abcp2f) -> (double)s +FE_TONEAREST 0x1.123456p+2 +FE_DOWNWARD 0x1.123456p+2 +FE_UPWARD 0x1.123458p+2 +FE_TOWARDZERO 0x1.123456p+2 + +Testing: s = (0x1.123456789abcp2f) -> (float)s +FE_TONEAREST 0x1.123456p+2 +FE_DOWNWARD 0x1.123456p+2 +FE_UPWARD 0x1.123458p+2 +FE_TOWARDZERO 0x1.123456p+2 + +Testing: s = (-(0x1.123456789abcp2f)) -> (double)s +FE_TONEAREST -0x1.123456p+2 +FE_DOWNWARD -0x1.123458p+2 +FE_UPWARD -0x1.123456p+2 +FE_TOWARDZERO -0x1.123456p+2 + +Testing: s = (-(0x1.123456789abcp2f)) -> (float)s +FE_TONEAREST -0x1.123456p+2 +FE_DOWNWARD -0x1.123458p+2 +FE_UPWARD -0x1.123456p+2 +FE_TOWARDZERO -0x1.123456p+2 + +Testing: s = (0x1.123456789abcp29f) -> (double)s +FE_TONEAREST 0x1.123456p+29 +FE_DOWNWARD 0x1.123456p+29 +FE_UPWARD 0x1.123458p+29 +FE_TOWARDZERO 0x1.123456p+29 + +Testing: s = (0x1.123456789abcp29f) -> (float)s +FE_TONEAREST 0x1.123456p+29 +FE_DOWNWARD 0x1.123456p+29 +FE_UPWARD 0x1.123458p+29 +FE_TOWARDZERO 0x1.123456p+29 + +Testing: s = (0x1.123456789abcp29f) -> (int16_t)s +FE_TONEAREST -32768 +FE_DOWNWARD -32768 +FE_UPWARD -32768 +FE_TOWARDZERO -32768 + +Testing: s = (0x1.123456789abcp29f) -> (int8_t)s +FE_TONEAREST 0 +FE_DOWNWARD 0 +FE_UPWARD 0 +FE_TOWARDZERO 0 + +Testing: s = (0x1.123456789abcp29f) -> (unsigned short)s +FE_TONEAREST 35520 +FE_DOWNWARD 35520 +FE_UPWARD 35584 +FE_TOWARDZERO 35520 + +Testing: s = (0x1.123456789abcp29f) -> (unsigned char)s +FE_TONEAREST 0 +FE_DOWNWARD 0 +FE_UPWARD 0 +FE_TOWARDZERO 0 + +Testing: s = (-(0x1.123456789abcp29f)) -> (double)s +FE_TONEAREST -0x1.123456p+29 +FE_DOWNWARD -0x1.123458p+29 +FE_UPWARD -0x1.123456p+29 +FE_TOWARDZERO -0x1.123456p+29 + +Testing: s = (-(0x1.123456789abcp29f)) -> (float)s +FE_TONEAREST -0x1.123456p+29 +FE_DOWNWARD -0x1.123458p+29 +FE_UPWARD -0x1.123456p+29 +FE_TOWARDZERO -0x1.123456p+29 + +Testing: f = -0x1.123456789abcp30f -> (int32_t)f +FE_TONEAREST -1150096768 +FE_DOWNWARD -1150096896 +FE_UPWARD -1150096768 +FE_TOWARDZERO -1150096768 + +Testing: d = -0x1.1234567p0 -> (double)((int)d) +FE_TONEAREST -0x1p+0 +FE_DOWNWARD -0x1p+0 +FE_UPWARD -0x1p+0 +FE_TOWARDZERO -0x1p+0 + +Testing: d = 0x1.9234567p0 -> (double)((int)d) +FE_TONEAREST 0x1p+0 +FE_DOWNWARD 0x1p+0 +FE_UPWARD 0x1p+0 +FE_TOWARDZERO 0x1p+0 + +Testing: d = -0x1.9234567p0 -> (double)((int)d) +FE_TONEAREST -0x1p+0 +FE_DOWNWARD -0x1p+0 +FE_UPWARD -0x1p+0 +FE_TOWARDZERO -0x1p+0 + +Testing: d = 0x1.1234567p0 -> (double)((long int)d) +FE_TONEAREST 0x1p+0 +FE_DOWNWARD 0x1p+0 +FE_UPWARD 0x1p+0 +FE_TOWARDZERO 0x1p+0 + +Testing: d = -0x1.1234567p0 -> (double)((long int)d) +FE_TONEAREST -0x1p+0 +FE_DOWNWARD -0x1p+0 +FE_UPWARD -0x1p+0 +FE_TOWARDZERO -0x1p+0 + +Testing: d = 0x1.9234567p0 -> (double)((long int)d) +FE_TONEAREST 0x1p+0 +FE_DOWNWARD 0x1p+0 +FE_UPWARD 0x1p+0 +FE_TOWARDZERO 0x1p+0 + +Testing: d = -0x1.9234567p0 -> (double)((long int)d) +FE_TONEAREST -0x1p+0 +FE_DOWNWARD -0x1p+0 +FE_UPWARD -0x1p+0 +FE_TOWARDZERO -0x1p+0 + +Testing: (d1 = (1.0), d2 = (0x1.0000000000001p0)) -> d1 + d2 +FE_TONEAREST 0x1p+1 +FE_DOWNWARD 0x1p+1 +FE_UPWARD 0x1.0000000000001p+1 +FE_TOWARDZERO 0x1p+1 + +Testing: (d1 = -(1.0), d2 = (0x1.0000000000001p0)) -> d1 + d2 +FE_TONEAREST 0x1p-52 +FE_DOWNWARD 0x1p-52 +FE_UPWARD 0x1p-52 +FE_TOWARDZERO 0x1p-52 + +Testing: (d1 = (1.0), d2 = -(0x1.0000000000001p0)) -> d1 + d2 +FE_TONEAREST -0x1p-52 +FE_DOWNWARD -0x1p-52 +FE_UPWARD -0x1p-52 +FE_TOWARDZERO -0x1p-52 + +Testing: (d1 = -(1.0), d2 = -(0x1.0000000000001p0)) -> d1 + d2 +FE_TONEAREST -0x1p+1 +FE_DOWNWARD -0x1.0000000000001p+1 +FE_UPWARD -0x1p+1 +FE_TOWARDZERO -0x1p+1 + +Testing: (d1 = (1.0), d2 = (0x1.0000000000001p0)) -> d1 - d2 +FE_TONEAREST -0x1p-52 +FE_DOWNWARD -0x1p-52 +FE_UPWARD -0x1p-52 +FE_TOWARDZERO -0x1p-52 + +Testing: (d1 = -(1.0), d2 = (0x1.0000000000001p0)) -> d1 - d2 +FE_TONEAREST -0x1p+1 +FE_DOWNWARD -0x1.0000000000001p+1 +FE_UPWARD -0x1p+1 +FE_TOWARDZERO -0x1p+1 + +Testing: (d1 = (1.0), d2 = -(0x1.0000000000001p0)) -> d1 - d2 +FE_TONEAREST 0x1p+1 +FE_DOWNWARD 0x1p+1 +FE_UPWARD 0x1.0000000000001p+1 +FE_TOWARDZERO 0x1p+1 + +Testing: (d1 = -(1.0), d2 = -(0x1.0000000000001p0)) -> d1 - d2 +FE_TONEAREST 0x1p-52 +FE_DOWNWARD 0x1p-52 +FE_UPWARD 0x1p-52 +FE_TOWARDZERO 0x1p-52 + +Testing: (d1 = (1.0), d2 = (0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST 0x1p-52 +FE_DOWNWARD 0x1p-52 +FE_UPWARD 0x1p-52 +FE_TOWARDZERO 0x1p-52 + +Testing: (d1 = -(1.0), d2 = (0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST 0x1p+1 +FE_DOWNWARD 0x1p+1 +FE_UPWARD 0x1.0000000000001p+1 +FE_TOWARDZERO 0x1p+1 + +Testing: (d1 = (1.0), d2 = -(0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST -0x1p+1 +FE_DOWNWARD -0x1.0000000000001p+1 +FE_UPWARD -0x1p+1 +FE_TOWARDZERO -0x1p+1 + +Testing: (d1 = -(1.0), d2 = -(0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST -0x1p-52 +FE_DOWNWARD -0x1p-52 +FE_UPWARD -0x1p-52 +FE_TOWARDZERO -0x1p-52 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 + d2 +FE_TONEAREST 0x1.2bc55ef8922bp+1 +FE_DOWNWARD 0x1.2bc55ef8922bp+1 +FE_UPWARD 0x1.2bc55ef8922bp+1 +FE_TOWARDZERO 0x1.2bc55ef8922bp+1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 + d2 +FE_TONEAREST 0x1.12233445566p-4 +FE_DOWNWARD 0x1.12233445566p-4 +FE_UPWARD 0x1.12233445566p-4 +FE_TOWARDZERO 0x1.12233445566p-4 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 + d2 +FE_TONEAREST -0x1.12233445566p-4 +FE_DOWNWARD -0x1.12233445566p-4 +FE_UPWARD -0x1.12233445566p-4 +FE_TOWARDZERO -0x1.12233445566p-4 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 + d2 +FE_TONEAREST -0x1.2bc55ef8922bp+1 +FE_DOWNWARD -0x1.2bc55ef8922bp+1 +FE_UPWARD -0x1.2bc55ef8922bp+1 +FE_TOWARDZERO -0x1.2bc55ef8922bp+1 + +Testing: (d1 = (0x1.233445566778p0f), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd404804dp+0 +FE_DOWNWARD 0x1.5ebd3ddf57ep+0 +FE_UPWARD 0x1.5ebd428e6d5cp+0 +FE_TOWARDZERO 0x1.5ebd3ddf57ep+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd404804dp+0 +FE_DOWNWARD -0x1.5ebd404804dp+0 +FE_UPWARD -0x1.5ebd4025c068p+0 +FE_TOWARDZERO -0x1.5ebd3ddf57ep+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd404804dp+0 +FE_DOWNWARD -0x1.5ebd4025c068p+0 +FE_UPWARD -0x1.5ebd404804dp+0 +FE_TOWARDZERO -0x1.5ebd3ddf57ep+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd404804dp+0 +FE_DOWNWARD 0x1.5ebd428e6d5cp+0 +FE_UPWARD 0x1.5ebd3ddf57ep+0 +FE_TOWARDZERO 0x1.5ebd3ddf57ep+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd40f80919p+0 +FE_DOWNWARD 0x1.5ebd3e8f5c27dp+0 +FE_UPWARD 0x1.5ebd40f809191p+0 +FE_TOWARDZERO 0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd40f80919p+0 +FE_DOWNWARD -0x1.5ebd40f809191p+0 +FE_UPWARD -0x1.5ebd3e8f5c27dp+0 +FE_TOWARDZERO -0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd40f80919p+0 +FE_DOWNWARD -0x1.5ebd3e8f5c27ep+0 +FE_UPWARD -0x1.5ebd40f80919p+0 +FE_TOWARDZERO -0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd40f80919p+0 +FE_DOWNWARD 0x1.5ebd40f80919p+0 +FE_UPWARD 0x1.5ebd3e8f5c27ep+0 +FE_TOWARDZERO 0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd402bc44c4p+0 +FE_DOWNWARD 0x1.5ebd402bc44c4p+0 +FE_UPWARD 0x1.5ebd402bc44c5p+0 +FE_TOWARDZERO 0x1.5ebd402bc44c4p+0 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd402bc44c4p+0 +FE_DOWNWARD -0x1.5ebd402bc44c5p+0 +FE_UPWARD -0x1.5ebd402bc44c4p+0 +FE_TOWARDZERO -0x1.5ebd402bc44c4p+0 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd402bc44c4p+0 +FE_DOWNWARD -0x1.5ebd402bc44c5p+0 +FE_UPWARD -0x1.5ebd402bc44c4p+0 +FE_TOWARDZERO -0x1.5ebd402bc44c4p+0 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd402bc44c4p+0 +FE_DOWNWARD 0x1.5ebd402bc44c4p+0 +FE_UPWARD 0x1.5ebd402bc44c5p+0 +FE_TOWARDZERO 0x1.5ebd402bc44c4p+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd40f80919p+0 +FE_DOWNWARD 0x1.5ebd3e8f5c27dp+0 +FE_UPWARD 0x1.5ebd40f809191p+0 +FE_TOWARDZERO 0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd40f80919p+0 +FE_DOWNWARD -0x1.5ebd40f809191p+0 +FE_UPWARD -0x1.5ebd3e8f5c27dp+0 +FE_TOWARDZERO -0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd40f80919p+0 +FE_DOWNWARD -0x1.5ebd3e8f5c27ep+0 +FE_UPWARD -0x1.5ebd40f80919p+0 +FE_TOWARDZERO -0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd40f80919p+0 +FE_DOWNWARD 0x1.5ebd40f80919p+0 +FE_UPWARD 0x1.5ebd3e8f5c27ep+0 +FE_TOWARDZERO 0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd3f7bc003ap+0 +FE_DOWNWARD 0x1.5ebd3f7bc003ap+0 +FE_UPWARD 0x1.5ebd41c2288e5p+0 +FE_TOWARDZERO 0x1.5ebd3f7bc003ap+0 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd3f7bc003ap+0 +FE_DOWNWARD -0x1.5ebd3f7bc003bp+0 +FE_UPWARD -0x1.5ebd41c2288e4p+0 +FE_TOWARDZERO -0x1.5ebd3f7bc003ap+0 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd3f7bc003ap+0 +FE_DOWNWARD -0x1.5ebd41c2288e5p+0 +FE_UPWARD -0x1.5ebd3f7bc003ap+0 +FE_TOWARDZERO -0x1.5ebd3f7bc003ap+0 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd3f7bc003ap+0 +FE_DOWNWARD 0x1.5ebd41c2288e4p+0 +FE_UPWARD 0x1.5ebd3f7bc003bp+0 +FE_TOWARDZERO 0x1.5ebd3f7bc003ap+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd404804dp+0 +FE_DOWNWARD 0x1.5ebd3ddf57ep+0 +FE_UPWARD 0x1.5ebd428e6d5cp+0 +FE_TOWARDZERO 0x1.5ebd3ddf57ep+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd404804dp+0 +FE_DOWNWARD -0x1.5ebd404804dp+0 +FE_UPWARD -0x1.5ebd4025c068p+0 +FE_TOWARDZERO -0x1.5ebd3ddf57ep+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd404804dp+0 +FE_DOWNWARD -0x1.5ebd4025c068p+0 +FE_UPWARD -0x1.5ebd404804dp+0 +FE_TOWARDZERO -0x1.5ebd3ddf57ep+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd404804dp+0 +FE_DOWNWARD 0x1.5ebd428e6d5cp+0 +FE_UPWARD 0x1.5ebd3ddf57ep+0 +FE_TOWARDZERO 0x1.5ebd3ddf57ep+0 + +Testing: (d1 = (0x1.233445566778p0), d2 = (5)) -> d1 *d2 +FE_TONEAREST 0x1.6c0156ac0156p+2 +FE_DOWNWARD 0x1.6c0156ac0156p+2 +FE_UPWARD 0x1.6c0156ac0156p+2 +FE_TOWARDZERO 0x1.6c0156ac0156p+2 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (5)) -> d1 *d2 +FE_TONEAREST -0x1.6c0156ac0156p+2 +FE_DOWNWARD -0x1.6c0156ac0156p+2 +FE_UPWARD -0x1.6c0156ac0156p+2 +FE_TOWARDZERO -0x1.6c0156ac0156p+2 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(5)) -> d1 *d2 +FE_TONEAREST -0x1.6c0156ac0156p+2 +FE_DOWNWARD -0x1.6c0156ac0156p+2 +FE_UPWARD -0x1.6c0156ac0156p+2 +FE_TOWARDZERO -0x1.6c0156ac0156p+2 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(5)) -> d1 *d2 +FE_TONEAREST 0x1.6c0156ac0156p+2 +FE_DOWNWARD 0x1.6c0156ac0156p+2 +FE_UPWARD 0x1.6c0156ac0156p+2 +FE_TOWARDZERO 0x1.6c0156ac0156p+2 + +Testing: (d1 = (15), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.2111111111102p+4 +FE_DOWNWARD 0x1.2111111111102p+4 +FE_UPWARD 0x1.2111111111102p+4 +FE_TOWARDZERO 0x1.2111111111102p+4 + +Testing: (d1 = -(15), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.2111111111102p+4 +FE_DOWNWARD -0x1.2111111111102p+4 +FE_UPWARD -0x1.2111111111102p+4 +FE_TOWARDZERO -0x1.2111111111102p+4 + +Testing: (d1 = (15), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.2111111111102p+4 +FE_DOWNWARD -0x1.2111111111102p+4 +FE_UPWARD -0x1.2111111111102p+4 +FE_TOWARDZERO -0x1.2111111111102p+4 + +Testing: (d1 = -(15), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.2111111111102p+4 +FE_DOWNWARD 0x1.2111111111102p+4 +FE_UPWARD 0x1.2111111111102p+4 +FE_TOWARDZERO 0x1.2111111111102p+4 + +Testing: (d1 = (0x1.233445566778p0f), d2 = (15)) -> d1 *d2 +FE_TONEAREST 0x1.110101ap+4 +FE_DOWNWARD 0x1.1100ffcp+4 +FE_UPWARD 0x1.110101ap+4 +FE_TOWARDZERO 0x1.1100ffcp+4 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = (15)) -> d1 *d2 +FE_TONEAREST -0x1.110101ap+4 +FE_DOWNWARD -0x1.110101ap+4 +FE_UPWARD -0x1.1100ffcp+4 +FE_TOWARDZERO -0x1.1100ffcp+4 + +Testing: (d1 = (0x1.233445566778p0f), d2 = -(15)) -> d1 *d2 +FE_TONEAREST -0x1.110101ap+4 +FE_DOWNWARD -0x1.1100ffcp+4 +FE_UPWARD -0x1.110101ap+4 +FE_TOWARDZERO -0x1.1100ffcp+4 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = -(15)) -> d1 *d2 +FE_TONEAREST 0x1.110101ap+4 +FE_DOWNWARD 0x1.110101ap+4 +FE_UPWARD 0x1.1100ffcp+4 +FE_TOWARDZERO 0x1.1100ffcp+4 + +Testing: (d1 = (15), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.2111108p+4 +FE_DOWNWARD 0x1.2111108p+4 +FE_UPWARD 0x1.2111126p+4 +FE_TOWARDZERO 0x1.2111108p+4 + +Testing: (d1 = -(15), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.2111108p+4 +FE_DOWNWARD -0x1.2111108p+4 +FE_UPWARD -0x1.2111126p+4 +FE_TOWARDZERO -0x1.2111108p+4 + +Testing: (d1 = (15), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.2111108p+4 +FE_DOWNWARD -0x1.2111126p+4 +FE_UPWARD -0x1.2111108p+4 +FE_TOWARDZERO -0x1.2111108p+4 + +Testing: (d1 = -(15), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.2111108p+4 +FE_DOWNWARD 0x1.2111126p+4 +FE_UPWARD 0x1.2111108p+4 +FE_TOWARDZERO 0x1.2111108p+4 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca44203ab9p-1 +FE_DOWNWARD 0x1.e38ca44203ab8p-1 +FE_UPWARD 0x1.e38ca44203ab9p-1 +FE_TOWARDZERO 0x1.e38ca44203ab8p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca44203ab9p-1 +FE_DOWNWARD -0x1.e38ca44203ab9p-1 +FE_UPWARD -0x1.e38ca44203ab8p-1 +FE_TOWARDZERO -0x1.e38ca44203ab8p-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca44203ab9p-1 +FE_DOWNWARD -0x1.e38ca44203ab9p-1 +FE_UPWARD -0x1.e38ca44203ab8p-1 +FE_TOWARDZERO -0x1.e38ca44203ab8p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca44203ab9p-1 +FE_DOWNWARD 0x1.e38ca44203ab8p-1 +FE_UPWARD 0x1.e38ca44203ab9p-1 +FE_TOWARDZERO 0x1.e38ca44203ab8p-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca44203ab9p-1 +FE_DOWNWARD 0x1.e38ca44203ab8p-1 +FE_UPWARD 0x1.e38ca44203ab9p-1 +FE_TOWARDZERO 0x1.e38ca44203ab8p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca44203ab9p-1 +FE_DOWNWARD -0x1.e38ca44203ab9p-1 +FE_UPWARD -0x1.e38ca44203ab8p-1 +FE_TOWARDZERO -0x1.e38ca44203ab8p-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca44203ab9p-1 +FE_DOWNWARD -0x1.e38ca44203ab9p-1 +FE_UPWARD -0x1.e38ca44203ab8p-1 +FE_TOWARDZERO -0x1.e38ca44203ab8p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca44203ab9p-1 +FE_DOWNWARD 0x1.e38ca44203ab8p-1 +FE_UPWARD 0x1.e38ca44203ab9p-1 +FE_TOWARDZERO 0x1.e38ca44203ab8p-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0f)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca534ae61p-1 +FE_DOWNWARD 0x1.e38ca534ae61p-1 +FE_UPWARD 0x1.e38ca211bd4adp-1 +FE_TOWARDZERO 0x1.e38ca534ae61p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0f)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca534ae61p-1 +FE_DOWNWARD -0x1.e38ca534ae611p-1 +FE_UPWARD -0x1.e38ca211bd4acp-1 +FE_TOWARDZERO -0x1.e38ca534ae61p-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0f)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca534ae61p-1 +FE_DOWNWARD -0x1.e38ca211bd4adp-1 +FE_UPWARD -0x1.e38ca534ae61p-1 +FE_TOWARDZERO -0x1.e38ca534ae61p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0f)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca534ae61p-1 +FE_DOWNWARD 0x1.e38ca211bd4acp-1 +FE_UPWARD 0x1.e38ca534ae611p-1 +FE_TOWARDZERO 0x1.e38ca534ae61p-1 + +Testing: (d1 = (1.0), d2 = (0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST 0x1p-52 +FE_DOWNWARD 0x1p-52 +FE_UPWARD 0x1p-52 +FE_TOWARDZERO 0x1p-52 + +Testing: (d1 = -(1.0), d2 = (0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST 0x1p+1 +FE_DOWNWARD 0x1p+1 +FE_UPWARD 0x1.0000000000001p+1 +FE_TOWARDZERO 0x1p+1 + +Testing: (d1 = (1.0), d2 = -(0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST -0x1p+1 +FE_DOWNWARD -0x1.0000000000001p+1 +FE_UPWARD -0x1p+1 +FE_TOWARDZERO -0x1p+1 + +Testing: (d1 = -(1.0), d2 = -(0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST -0x1p-52 +FE_DOWNWARD -0x1p-52 +FE_UPWARD -0x1p-52 +FE_TOWARDZERO -0x1p-52 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing X87 instruction: "FSQRT" (ST0 = 0x1p+2, ST1 = 0x0p+0) +FE_TONEAREST ST0 = 0x1p+1 +FE_DOWNWARD ST0 = 0x1p+1 +FE_UPWARD ST0 = 0x1p+1 +FE_TOWARDZERO ST0 = 0x1p+1 + +Testing X87 instruction: "FSQRT" (ST0 = 0x1.0000000000001p+1, ST1 = 0x0p+0) +FE_TONEAREST ST0 = 0x1.6a09e667f3bcdp+0 +FE_DOWNWARD ST0 = 0x1.6a09e667f3bcdp+0 +FE_UPWARD ST0 = 0x1.6a09e667f3bcep+0 +FE_TOWARDZERO ST0 = 0x1.6a09e667f3bcdp+0 + +Testing X87 instruction: "FSQRT" (ST0 = 0x1.123456789abcp+31, ST1 = 0x0p+0) +FE_TONEAREST ST0 = 0x1.76b0aac9e6a5p+15 +FE_DOWNWARD ST0 = 0x1.76b0aac9e6a4fp+15 +FE_UPWARD ST0 = 0x1.76b0aac9e6a5p+15 +FE_TOWARDZERO ST0 = 0x1.76b0aac9e6a4fp+15 + +Testing X87 instruction: "FSQRT" (ST0 = 0x1.123456789abdp+31, ST1 = 0x0p+0) +FE_TONEAREST ST0 = 0x1.76b0aac9e6a5bp+15 +FE_DOWNWARD ST0 = 0x1.76b0aac9e6a5ap+15 +FE_UPWARD ST0 = 0x1.76b0aac9e6a5bp+15 +FE_TOWARDZERO ST0 = 0x1.76b0aac9e6a5ap+15 + diff --git a/tests32/roundtest.h b/tests32/roundtest.h new file mode 100644 index 00000000..320e22c9 --- /dev/null +++ b/tests32/roundtest.h @@ -0,0 +1,114 @@ +#pragma STDC FENV_ACCESS ON +#include +#include + +#ifdef USE_ASM_ROUNDING +int fesetround_(int rounding_direction) { + uint16_t old_cw; + __asm__("FNSTCW %0" : "=m"(old_cw)::); + uint16_t new_cw = (old_cw & ~0xc00) | rounding_direction; + __asm__("FLDCW %0" ::"m"(new_cw)); + return old_cw & 0xc00; +} +int fegetround_() { + uint16_t cw; + __asm__("FNSTCW %0" : "=m"(cw)::); + return cw & 0xc00; +} +#define fesetround fesetround_ +#define fegetround fegetround_ +#define FE_TONEAREST 0 +#define FE_DOWNWARD 0x400 +#define FE_UPWARD 0x800 +#define FE_TOWARDZERO 0xc00 +#else +#include +#endif + +#define FE_TONEAREST_INDEX 0 +#define FE_DOWNWARD_INDEX 1 +#define FE_UPWARD_INDEX 2 +#define FE_TOWARDZERO_INDEX 3 +int FE_MODES[] = {FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, FE_TOWARDZERO}; +char *FE_MODES_STR[] = { + "FE_TONEAREST", + "FE_DOWNWARD", + "FE_UPWARD", + "FE_TOWARDZERO", +}; + +void assert_round(double *array) { + assert(array[FE_DOWNWARD_INDEX] <= array[FE_TONEAREST_INDEX]); + assert(array[FE_TONEAREST_INDEX] <= array[FE_UPWARD_INDEX]); + if (array[FE_TOWARDZERO_INDEX] < 0) + assert(array[FE_TOWARDZERO_INDEX] == array[FE_UPWARD_INDEX]); + else if (array[FE_TOWARDZERO_INDEX] > 0) + assert(array[FE_TOWARDZERO_INDEX] == array[FE_DOWNWARD_INDEX]); + else if (array[FE_TOWARDZERO_INDEX] == 0) + assert(array[FE_TOWARDZERO_INDEX] == array[FE_UPWARD_INDEX] || + array[FE_TOWARDZERO_INDEX] == array[FE_DOWNWARD_INDEX]); +} + +#define TEST_(exec, expr, format) \ + do { \ + if (sizeof(#exec) == 1) \ + printf("Testing: %s\n", #expr); \ + else \ + printf("Testing: %s -> %s\n", #exec, #expr); \ + for (int i = 0; i < sizeof(FE_MODES) / sizeof(FE_MODES[0]); i++) { \ + fesetround(FE_MODES[i]); \ + exec; \ + printf("%-15s" format "\n", FE_MODES_STR[i], expr); \ + assert(FE_MODES[i] == fegetround()); \ + } \ + printf("\n"); \ + } while (0) + +#define TEST(exec, expr) TEST_(exec, expr, "%a") + +#if defined(i386) || defined(__i386__) || defined(__i386) || \ + defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) +#define TEST_X87(instruction, st0, st1, deep_change) \ + do { \ + double _st0 = (st0), _st1 = (st1); \ + double array1[4], array2[4]; \ + double __st0, __st1; \ + printf("Testing X87 instruction: %s (ST0 = %a, ST1 = %a)\n", #instruction, \ + _st0, _st1); \ + for (int i = 0; i < sizeof(FE_MODES) / sizeof(FE_MODES[0]); i++) { \ + fesetround(FE_MODES[i]); \ + __st0 = _st0, __st1 = _st1; \ + switch (deep_change) { \ + case -1: /* the instruction pops */ \ + __asm__(instruction : "+t"(__st0) : "u"(__st1) : "st(1)"); \ + printf("%-15s ST0 = %a\n", FE_MODES_STR[i], __st0); \ + break; \ + case 0: \ + __asm__(instruction : "+t"(__st0) : "u"(__st1) :); \ + printf("%-15s ST0 = %a\n", FE_MODES_STR[i], __st0); \ + break; \ + case 1: /* the instruction pushes */ \ + __asm__(instruction : "+t"(__st0), "=u"(__st1)::); \ + printf("%-15s ST0 = %a, ST1 = %a\n", FE_MODES_STR[i], __st0, __st1); \ + array2[i] = __st1; \ + } \ + array1[i] = __st0; \ + assert(FE_MODES[i] == fegetround()); \ + } \ + if (deep_change == 1) \ + assert_round(array2); \ + assert_round(array1); \ + printf("\n"); \ + } while (0) +#else +#define TEST_X87(instruction, st0, st1, deep_change) \ + do { \ + double _st0 = (st0), _st1 = (st1); \ + printf("Cannot test X87 instruction: %s (ST0 = %a, ST1 = %a) because it " \ + "is not compiled to x86\n\n", \ + #instruction, _st0, _st1); \ + } while (0) +#endif + +#define TEST_X87_1(i, st0) TEST_X87(i, st0, 0.0, 0) +#define TEST_X87_2(i, st0, st1) TEST_X87(i, st0, st1, -1) diff --git a/tests32/test01 b/tests32/test01 new file mode 100755 index 0000000000000000000000000000000000000000..f4b84e5fed9bbb1e79a9aa9e2018463792af4870 GIT binary patch literal 7360 zcmeHMZETxY6~6vR=dQ+eGq-eYpf03a3+-E{WLZl)5hr%jkF-tm(P^sMcaH7Erj8x# z*Cm}IXz}`yg-8V^_JbemBw&9wfrNyjZHSa~%_a@0bTGj{1J+JTp%WQ{Qi)LWJooy# zZ%QY@Po&)F_?~mmbI-l^-1ENgxi?>pwr_Vh96}eTa0yDyCAX&$_4LP;rcngNLa|n? z5_Mt$ny70$4h$%W4x}2ixj`;aH{|XUZV%}`$Rz5}ED4nm=u6rGgCzDBex>&;7Q*wa z+d~SV({d2UrQV4u0DXWu&@^Nc^&Eqg0zQSYNfF2-t?PKtN;G4z=96v@X+3l#t=|tl z#Q!L?kKsip^!EAPL>r0yxxS5=bnnJYVnZgKEe;uloUuvi*q8dYy*>C<>!8gbhT&0-;$5GI6J{D>J(9Wnc2=?of(WozCt z2V&_gTKWfa*-DEk+S+%vw3?fYP?ci@aYZWL9N_62`iRA!PJfKLcJiQrl%3)Ll_;~= z_XX(gJ?Hk^gN}aIa9&sGx@YaJaqGDq$^O8`s5`-eyVSh_mX(cPH}!gr~OC*7X? z2U1&6P5%@f{?>Qa{x@1zKWUf8SHb*-I{cJwE;zbkoHjAtB|RhWm97U;RFp53F8E*n zaPsV!^?(>>i^QM5=^Xjl`9H04T>8aLYvoI_<7KN>cJz0so|jcmb{u=gQMRXf$uXkhRH4;j*G8M&Bhd@V=NQW)(W?y;Q_;6}Br}<*=-avAqq(W*JNZmvb>CF<-FwAY z@vU*j+RNPdkq=(NhKrvcmo6CXxtjdkQX0X|rEZnWr3>30J9zleSZsEV`_A?}dZ26i zc>qpKKD-heeBC>msSl3*$cqV1|K(qpWyu3}-No~_oF{KsYZ}U9KZaER-DRtOJ*lVs z^vlGQrW|nBmVXqllrDG=9ySk6V*MW?Tx3kO$}!%=GbMwF>rm9DL8!E+rG7%qbP zpMWxgj>G78Q8SKaP;)sfjwd>WW7y+Z>2q`0JuvTqc@NBcVBQ1s9+>yQ|EmZ5$k%6Z=H>jE zj*`5fOJ8$)n3vWgx4$1X&!fmQWxmJrl@~H|H|BqTzg5n?fb%BLW_9Stv)vnz??wGM zi03QjPfI~8%pnCbZ{|^KXMVT@#3T0v`ja0=&9fON#xpc)q+Yo*Xh&L^<2+|j4?_m~ zKNp^#b*E)m{{s~tu&u4N_4C2CJ-x-ORSZ64G#a4|O+_g+e5Iku2sIj8)~WX3rcgsu zs428Xo0?Pe4uB2nq^Hj1N>&-K;Dp{U-rEir?42tcoetF1f=hrj)Es3_Ox4Sw)WCGnZJ#W_cD?`pRVuPk1OUv7D6%RAojm zVzVkUf^Qd>SSjOPx46XzWj+IXd?Z&L#z;8 zsQJvGf*cS}pysnjnfOzv`HWF^z#rcuQz@Je<6RfZKY$Q9rSY}mCy?#))mYZVzm8gu z&nN0_$l9L{`11;6JwEj}AnX0()47lnsQAwT|E_|}b3Y@w7W3a|n_v)ayCDz4KaAvB zC)Nj9??({cj6v4>;fK5qvW}-(#1rqabYZkSY3on?H*ESK^yeTiugq_W^M3InWc!`Y zD>gjs{RT3xEO;*D{C|ZySn2P_emw=fj(6&>L1uh&J-j2DfqZ-ZE5s~h-hJ?lO1#5% zNDQKFDP)c3{8rzgzk>dJ=K_lUcpl?me0qI znaQk`KPLL}v4NzSC=Lu9Ll>K50%^^GTFHVnw7E%6aeHTYPt=U=jbM&y!kVAc4R>gf z$M%Nz>}&DElFP>|blkN^Mx literal 0 HcmV?d00001 diff --git a/tests32/test01.c b/tests32/test01.c new file mode 100644 index 00000000..3cf91ceb --- /dev/null +++ b/tests32/test01.c @@ -0,0 +1,19 @@ +#include +#include + +int main(int argc, char **argv) +{ + const char msg[] = "Hello World!\n"; + //syscall(4, STDOUT_FILENO, msg, sizeof(msg)-1); + asm ( + "movl $4, %%eax \n" + "movl $1, %%ebx \n" + "movl %0, %%ecx \n" + "movl $13, %%edx \n" + "int $0x80 \n" + : + :"r" (msg) + :"%eax","%ebx","%ecx","%edx" + ); + return 0; +} diff --git a/tests32/test02 b/tests32/test02 new file mode 100755 index 0000000000000000000000000000000000000000..c3c099c4eccf6619887c3db07aeb8b6919944e73 GIT binary patch literal 7268 zcmeHMZ){W76~F#N8^Cn}4V0C1ywa=$2Cqp-3mubYlQ@Abga8SsWAN(OPHb>&W7^oCoA2GA>ySegc*iP@q?JSM8d z18Aa7p@t4bbdl%+?SQQCVaP=4(JT>U0xmr$1aTHyDlGjaFWNqBVFNm?1#(>Kogi1B zzXCmR95Ru5HHRqd6*i%rsC4b`nc-m=EBrikM5W&XJ;Zx}{xQ7R3cY=PD=`+4{XxW2 z@mSYW@$jm6ERpHc(@DMF(y=e~Ep46n6^OL87V_*{31l1fZyehD_&d$tIkPBxZ0ye; zUweA6>iP)RT?V8N87oa_U}f9SzVz-0c{`XkK?C1tljnnf)Fv+lKWvjV@O3ts_RFWq z-?zyc__@HN2ol#akC8$gLR|kd!q~XkNSonU!pNi}VPP1dzM#<^O9bPw0}+w#Pltl> zIGWi5hQX9+^af)Iv_J^$HA2z7Mt3k47cH$D*EbsVdhG;Pr>~yi8!%AECLEjw0LScZ-R`MFg>3}xX@92qfZ6}}86d$w$69&{3lC%HStv`(ZFAl+Ky!87+nnpZq<#vIS1UHheiYMr{dwqy9WdR$OW#q?{VyL7ltrM z_H4ya=dH-<1?-UV7M8T~Peg&mmkKz<#3qVu6soRG*Y z8_F{Dn9scIn5THM7DA!-u8daUY4kXsrJ>^lRN2#N#XU6i^W`4fL(t6^j+tX+vaELiq<+Yk-p#z5 zJ?q)I+t`)Q?MGZxWG%X_@RA%XAqOif9K{eaXVbEI2b-CsJZlb|Imcqxy0zf>tbHD~ z9iTq|?F0Qe=ux&~@Ux)I#|oqa^RybY5^V&>fvv)Eu*|X8<95G@b`5O|og4jqpu$_$ z?Dc%He6H#46JL0A-HQ6^rA%<@G}w?QFq|B}3T+uSGMir1^SZ5P%VoGY0bfq~0x&JdfUluVt{MKb&Ni=_ zH*IEMCIT}Nn2Eql1ZE=e{}zF(sE>z%c=b#4fR3QRK*26d6c(sCWIc|WQC9b;vt(T^ zYXtEByjx8E6rJHhd<8FE)*`=w%%b&|Kz`@&UAq8CVC`}V^*G@dWGkzfPnNvUVl<1mWL6rO?VoxA>sQyj4J1j$nlu zIqQ`keKvUojCp^HZ3zSAqdM?Dn)4bf?Vtm0h(xg4^}hxy2dHpmLNnmv$jl;S~uhiv+# z(7#Gq0|Myp$2Pr&wl^WW$pGd#9}(vu+wWB_+3Y#q2as=KJbr6%eWyS@8h!v3*e?ec zUINua>xbH1A)E6~7v zgz-j7=WRZpo@OL%*4FDG5lWe9Gt=D-cJj`~Fnf&i@X7>RbDa-V-s6eIdh)W)ge#u0CNz!a*|#M^mrJd_HwY zhTAaXo{nL3oO1g%Y0sN9L>x}7J2D7UFU*W^I%!0Mi7+qIrr+pIySkfnTMIuEYh|p} zecu$5?tMn|Yq0D}r%R*X_X5y}CvjB>JKXH4{o$40{qOPgbbqfI>=Js~Oj$IlxL5+$ zgZqS@NSYDdzkcH?GuTs-dJ-AED-**FZY(TxO3`3CD)exF0{$#&rYz0=NGcsmCZ-4m zbg4+3_7<}*ZVFwlTnDT7Bq5rSKKwFEVUv_QsYjxvyo`q7LP=IvD?zOuipK!K-dG4T zVj}1WozQVOdXezz{CyJ2I*5-H9$WjJz3NLH;Rzrg+q6@6>l%0krALaqH&%9h?-Q$) z5va0j0)HE|4gIkmAZp-Ck4|Yv+cqHI+O%UGMjQr@N06L1ZTJ@64&-BocC6cotk)Ev zn}pr?WsOBU))hoP7uC3IC+-EZCL_;!gXjZq9~YuH0Gth^T@*G%A9&@D^JBf21=4Ok z@C0m#e0$T5Z+T_MyCcq(KcK-nvpy9dz literal 0 HcmV?d00001 diff --git a/tests32/test02.c b/tests32/test02.c new file mode 100644 index 00000000..2ef0ed46 --- /dev/null +++ b/tests32/test02.c @@ -0,0 +1,9 @@ +#include +#include + +int main(int argc, char **argv) +{ + const char msg[] = "Hello World!\n"; + syscall(4, STDOUT_FILENO, msg, sizeof(msg)-1); + return 0; +} diff --git a/tests32/test03 b/tests32/test03 new file mode 100755 index 0000000000000000000000000000000000000000..02689a2c355426772277ed1e6a2b720441196b27 GIT binary patch literal 7180 zcmeHMU2Igx6`uWpEWue8$4MYSxgl<2Qn*=z8%TMm*S|oF0snv^3b$+T+PlsExVv}L zHHuoyhJfp?M5C&zT2&3AQeIjm5>ncVRx(+_kCX?R=D`nCbrXmdl?JLL)M{OBzwge@ zavi9e=gP-A_nb55%$b=p=k7f-{%(6$hs)&>3OvFiC{25WXaard5vgesnph+n#452; zEJPD^3N>^fdeKHiSJ4Mq;e(Kg)S=l%kSf&NCj@Z;TLMx)*0-+&Dui{4 z(X~!;EP{2i2G1DTYtt6sBxf6=`r0L1UIupPxOI{ahmJS??ZEh73RiCK>gy?U&&NvT z6+#pX<*Sypt5`TjvU`tpN`tQaIvjj5v9i82bX@(-m4=R&uh7X`C+XySLGZ=Hd_Hr* zTs3i+35+#7*gt-?aJ_D~b*XSRaIti}Xnsk2Tq?c^ttkHjkFmD~(ZAp6VC{wRtG#Dt z+~cLfb?=$Ku69lRVaBYRc%_~$-!<$g z0-xx7=rkuJa!*VY7z)g1Y2kW}b!r`i@}F*77JQVyf*$7zG<4nNZ~ry=o2aWV6}#%a zh@JJVSq`(id;`75O0VI)fyZLO_aTB;{-$*K8~75%=*)Bb_7}sm)d=?Q-P2qCwcRf* z`%NV38;YmA7^3`-e_K|uAi%CYcjmVH$Sw1Wjh2iP7SeB-_3Lc>;c40w&bu)6XKv>{ zD4ea?cfi!0=t5 z)1V`u>oLenpd+AM4)e*2oaVL?TnBrE>qVbyMUB^c4DA})m}Or_e>>)WUx&YD`;x_` zH!r^S=$0op)UOFZ-wcewhCG3`eZUi#@)kC<)wo1wV1YX)+Lm~7`Go<#(r3JbdZTHIeB@;9{k*R}bBJN#Ow zzb;hr2SVrkHKFr#Zr&_N*t^&YEc{kjLj3l;j&gd5&rZ@;uC<9YfmmUzU}Idml=Y^bDM! z^r9?of|eow6O{A%yufp@f;TblIZn_4tGKWVcr~0kTU)=XHS`bUQf5xuq;J%N>o;u5 z*<#~&8aL~~rnRzJb@~kDS)U+p53uH{%!r_NtIBdBj4i=qM_a~L%5q|ixs(}sRPI%o zCt#fSt1_b~V@vA6Ed_xwCwS}~lY1{^?wk;>R`tvb)Vfuf8G@R)D&wL7z?>m?#1flM zRb^S#@-Bhkv3FXCdO2;#+;N#}q#k?cWv)qCR@Z93Je7=ME=m2vlF=mb*cpXHsmeU$ z+yM_VyAoQv(JTILafQK3^0t@?((st`Ml-1WNz(;}Xk62PoeSf(x0Q1m*ih zp#3N)-z9-(`}?I*|o?0il@?X5NJCpAWDVy zl@GPZhi=HrEAe3e2xJ9oz#O8i$rko6I`mxq&m1z%_-=T~0G7HR5x<4(yl1)KuxJ0P zkiUWPc`oAmPJ`BHcmM*}zn7t(uH-ZIpF(E-a=pB_nT333eanOof#UB2&t|lL0J73^ zKFb-%3TU7=(4W7pgj)VG4ra`(nHw6?2gRL>8^cT*gS@)oO;99l3@6e9;e-(})0wOh z&gI2mIysVvn$d{9X~X8mdmHikC~kx^neeC)O_`ZdF_Z}>qedi`Opc<9Lo#4#&M`Hk zSu?m1lQN8sp3shVqrJP$z^&0-%ZM=Ap6d?n*w#8%V_#IE3Ab}b`__twt!+KR=IBFUrgN7N)rJmOZ^1_Hl!e$tb z?ovjeoO7Ah+^p`->>D$K9p$ZJ$MRD{=Qb8qeLx}lrvr@B4{ zS{OqkM(o>gKakB7ma98cKkjQ>y;6xvTFl> z3-t&6@wbVnfyYmT4YVV61Nn8O-8--$9sSdfwKEO8k8ODAYxe= zfhxQ6;8}}c`u6vn|5H&qG}%1mKLS~G(T;V&<^N*$XXv>Xv}3(64ZE328;I?X@%s^w z^RvfAoiGLG4UiRZOd{v3?1TmZfn|RMYOWulf$j9i@1zfQN{1%f2kFNZK1cyTyC)@U yKRK2{##liU>@+y!`~PJieWS_FQI4sg51YHu(UHCgJbO6pjv|R?ZH;^=yZ-=ZU7ei( literal 0 HcmV?d00001 diff --git a/tests32/test03.c b/tests32/test03.c new file mode 100644 index 00000000..fb5dcd8e --- /dev/null +++ b/tests32/test03.c @@ -0,0 +1,7 @@ +#include + +int main(int argc, char **argv) +{ + printf("Hello World!\n"); + return 0; +} diff --git a/tests32/test04 b/tests32/test04 new file mode 100755 index 0000000000000000000000000000000000000000..a6b7b89cb4d7b817fc1d8c5349cffecde55d77f5 GIT binary patch literal 9976 zcmeHNdvILUc|Ug_(rUF{J^jL_TtEhsSgVJHZGs)Nwq#q4{FV$9%poGh*Trw>;_r;qC8t z&ONJ@p_%;IKm2LF`#sNho_o)C&(Xt!!`ltR5E{I~D=6*s3DF07&yC8`Crr^G)`|{s zv#5iLHjO3<5K%;;7jy)&#x}@A+M$*RQiV#Kw@ORj643mr@$I28YM5+7RPrZJId@Vd!BbeZCt&wj6|45B&g5OXhw}QX!D*4Mb zvI)KsIFE*~?JXP`^gGV}ZV=Yc9;@giGC8YMv=hRzCJLFHleFUL!w}+=F)NwL#j=@) zY=|rd?^waH#$%bB*fBh`b(_^2Ss&@E^4(RgC$b*lM|N2WyI`j>MaM3T?An&i=j@T# zSeEfp4;XV@%OqjXSi#h^F(k~W*XSLo#3f!&SaKwhDKbucmwSo@c?83 z*J}XuRhM4ALCHQ-(TkAlumCQRVlv+*#e~n3VsV`Zt;b-_kz!mAlrIM6{tW?-&#qrB z#B>=Caq^7gpZg@3^4Y+Bv!e1WN5Aqk>m^j44&j+5`^IY(z|(Abn&vlNk@5<#$pBI z(3txc0+r92Gxp`4Gxy$iXeKs4+w-3focebJ+B>p;j%(}q>@k#`DF;|&ru^*-Ao~th zo;6{cyBp=-o?hKCn>?+a$fM(TdZtPU4rIr%(AM16AK~rSy9F zZ0NoRtV6RiM=>t$I{Kol?pee(kzXY8CJrDXh&;%-e4)iRj4{MuKL@*xOFO1Iwj8!3@?=k32=(ytc zqMRJRaA12l^v6w&j&D-jb={pG>+QIy8TNkQ{qP}Apf7)K_dvIkih+5YHhNezMo#+6Y`5fomgh zZ3M23z_k(he>?&cNLoxFQV)sDil0Ezg9KijhaP#5%-4}8%Iu%tI?UUdqhQ+??_8kkEf7i;(z#QP0!5!3|pnfT`1w(S$< z+R?F6&MBE2@#)pw*}JhM#h%ahY>IUE-KNxXgxE_pPKwCPOzMRADr!=}ea6?I3k|}X zAH2+#HF$P|^PXdN=k?VeK~KF#fae8XPyI_IzWS_G)*X~e{{TFFK0iJpg*V{8#Bzc9 z6l@;OtZ!osPtPr=$@ln48h!qEs98D@oUQ#AYo^#1q%60EP` j$A85EAj{XnGhZ>%u&lU2`4RQKZ$hQZ>^brPy6~Rdw z3@NPU(h+`-6wKfh-F#B$2;NS?FNL+ijdZJ%!nz9*WpBELQORa#aUdFXZonY;T}8xKR+ z8C=N#YmCQ1hJzPq=`_9qVI+8wLPQGp1mB|2C58Kg?@{QM!k-2W*3)aOL77DGAcgg^ zZRz0O(d~BQBy?HP_uWW%rN@FZE$Fi8F>cGuT%C;4x(w*gV->xHh) z_Z>(fP9&SXgo}w<&Zg9US!-_<;Z789`YdDIWl-Pr6dwM5#a~Z-RPuGcZz4$jk6~@* zqvZ-?KFT(rGdOYoE@s+bg`t5hs>WpeRsDPebI)^FONP6aztxl-3y z#wiNvzyrfnJl-|AX@j+)uf}DgF01_9KscJRi%xf6B#tTt&)M?5ku>)?@CiE!9#ij3 zP1r@HM*K{^>LFPylj2m-vI~VQ&d`(%Q|;mMTpDQgdA#SvW}o5x`ojSe!s}A_#>0UK zUbu$A^S!ZB(z0_r+&fZ=B`il+`E0_%JE6SlJbu1V=YRhuPbiUx2e4`g} z4v6wy>HN6eRkX)A4$}A2g^Xic6Anryv$0fBDp~JXtca7o@mS%oT~OMBjW)13I6XDD z_4KIS%Iq9p-;0M+%Gp~|HX4zMLyQ&T=`EQJn>Lu8DYJ7AJd!wnj34ftDC8YG?&J%d zMW>L@r8uB$IF1)nrhLfu@?=w3*?j!4PzRgBikAvjJfAI%!+^o*wR(5}in2U{++%GY z8XmMJvL!TjB3~3dXAxErU8!0{DOb#-a(2Rur(*?r#A~Xp8d-l$1vp`qq8bW>}JNwvwH1c+*oIALfGmpEUcb;#O~*Kq@pz*p@pz}tYEfmHy{`;gxU%v}iT z_5>%cRT;lT0MEb(yk8-Fw<@c^Kd;JuX=lz!kSzpd4oL9I(|)`}RT#+3B2{il>cuS$ zfjK9^D>GJ=`zjf)Kfsx)o%s{;%&N=`8Q}KUE3g*;m@^Z+qDj)rRhikYx=SJT%1jsM zd`y_7%#2s%+N55Y`Knx7$;_06yvI?p%BY!3D|wk>OhvphqsHb_m21;V#%J=f0NzEn z7_>9vUjVPnXKUr_7X)x#nV~PJyuxjmtMUp{eqU%0pZKqeO!Qm@W%lT_JDwhlC-xoj zN{#$6$oy6z(B2Qq{&7hdNSpV7^4o-9;LGADD8FwA^gjX0y9a`S@x8kKC!z1-#Sy@e zUm%L-lkMa8jE>JQlQWR@_k)2ioR=Z%__V(YnRjOjTEy?b==n0lG9qOg(0>j=s|W3;od$r3(b)l6&u=s2CdhjIwPOA4hCJo=pXC#fHQWT|7-dsw zSf1&n1{2H^kbPtTEyx1?26F8^)^j!fT)n@7d<^yRESddz9yDa)0cghjJOaCZKhVyM znZFPAkN09sniu-BLR^MSBeOvIe?Zv<*0&r3r~TQ!n>mm!n4nCN`7KLm<(FvnMH(+S zMW>WZA~9IF9kZNqE6)2d>^)W@Z>6&Nu~^nhV3#XevC^c7=f@|qwqqwE8+$kLeg6?o zysyhxu|gp>g2yT@c#Ix+c+DD9@`?%fh{= z9&?VyN8f@*ic{m*VnqZQkD_VKA=j`A6C#pBQWS}99qM#qDOW=N8W}5PaLb)ZhzO;0 zte6&eLP6h(p|Ek}`~W%9X2f(2W_&eC5o6In+@WKSbtBdI(@hgnF3D-S+-IXe+M z?XI)3bt9?Y<{$FpZp5EIf8xv`i1-+(0&RqwfqaG2kGTcW1h0Yb z8bS|H`!VMrc1VkQXuko7@8V2}@tBJcP4Mn(Rld9EyBo-ifqu+Uh{wS5^$%A1F#|XV zXRbr+2VYw+MDY-?0Z6}L_z?TS z>v-$~Go&(*ep`W$!-uHrWrm^sc;>;jvL3!;i8q7SKtIBxK<#%1KE!TmQ4hwZ?-zjD zk2w~RHVteWktb!^PZmVs|DeJJUFJ#1+K+o8QDsodQMd0~t{=yRdl9iixyYyX;~X&_ z{c8UoMmpi4{eA>q`!Tm8&S|F_zn8!>V?;M)&cOeZ(J`RXT@(Kdz6nS_<{q#9AAY}v zopV7y<|MDd@3N}{k?}Zwe*t9sWW7ky&LQ|($QsxNBHOI}gb4uy%kmm@Ti=9&ddA~k z9Dtv;K_z35zUA`W6ae&NKBs|o5$9d1^}X;jwNPVggfsm$?1!J;>#5VWLR z+F0Ya<|@BIB%}YWgV*>mCu4ElkB#_I{D_Of1=@(4T|cdV8|im#22LLWb2!aY4k0bC zoeymzt*J)z!H>D}P0;rOIp!Dw`P=1OXgG^BeM?P29gpYiwSI<)!)I-TO|$ + +int main(int argc, char **argv) +{ + printf("Hello, argc=%d argv[%d]=%s\n", argc, argc-1, argv[argc-1]); + return 0; +} diff --git a/tests32/test05 b/tests32/test05 new file mode 100755 index 0000000000000000000000000000000000000000..e4d5bb6f7b1f0d7c98d834455074f51731977993 GIT binary patch literal 7384 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 Su)4O}HKH6oCpG57vilEs>}K8o literal 0 HcmV?d00001 diff --git a/tests32/test05.c b/tests32/test05.c new file mode 100755 index 00000000..c6a4e67f --- /dev/null +++ b/tests32/test05.c @@ -0,0 +1,62 @@ +#include +#include +#include +#include + +int fact(int i) { + if (i<2) return i; + return i*fact(i-1); +} + +#define SET(M) dels[M/8] |= (1<<(M%8)) +#define GET(M) ((dels[M/8]>>(M%8))&1) + +int main(int argc, const char** argv) +{ + int j = 5; + if(argc>1) + j = atoi(argv[1]); + if(j==0) + j=5; + if(j>15) j=15; + + int k = fact(j); + printf("fact(%d)=%d\n", j, k); + + uint8_t* dels = (char*)calloc((k+7)/8, 1); + SET(0); + SET(1); + + for (int i=2; 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 Ra&LI;rErCK+fz~7`yZZm4x0b~ literal 0 HcmV?d00001 diff --git a/tests32/test06.c b/tests32/test06.c new file mode 100644 index 00000000..5a2e0ba0 --- /dev/null +++ b/tests32/test06.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include + +const int thread_count = 2; +pthread_t tid[2]; +const char *thread_messages[2] = { + "First thread executing", + "Second thread executing" +}; + +void *doSomething(void *arg) +{ + pthread_t id = pthread_self(); + int num = -1; + + for (int i = 0 ; i < thread_count ; ++i) + { + if (pthread_equal(id, tid[i])) + { + num = i + 1; + if (num == 2) printf("[%02d] %s\n", num, thread_messages[i]); + break; + } + } + + for (unsigned int i = 0 ; i < 0x10000 ; ++i); + if (num == 2) printf("[%02d] Thread done.\n", num); + + return NULL; +} + +int main(int argc, char const *argv[]) +{ + int err; + + for (int i = 0 ; i < thread_count ; ++i) + { + //printf("[00] Thread %d starting\n", i + 1); + err = pthread_create(&tid[i], NULL, doSomething, NULL); + if (err) + { + printf("[00] Couldn't create thread %d: %s\n", i + 1, strerror(err)); + } + for (unsigned int i = 0 ; i < 0x1000 ; ++i); + } + + //printf("[00] Waiting for all threads to end...\n"); + for (int i = 0 ; i < thread_count ; ++i) + pthread_join(tid[i], NULL); + printf("\n[00] Done.\n"); + + return 0; +} diff --git a/tests32/test07 b/tests32/test07 new file mode 100755 index 0000000000000000000000000000000000000000..75cefd936ed290390824309c8435e4885fe09acf GIT binary patch literal 7220 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 bF(m}BxzE}<(ieeu6uaGV9Af)^NW1?4WBt*C literal 0 HcmV?d00001 diff --git a/tests32/test07.c b/tests32/test07.c new file mode 100644 index 00000000..a20936f7 --- /dev/null +++ b/tests32/test07.c @@ -0,0 +1,20 @@ +#include +#include + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +int main(int argc, char **argv) +{ + long double zero = 0.0; + + double si = sin(M_PI / 2.0); + + int a = 3; + float b = 1.5; + float mul = a * b; + + printf("0 is %Lf, sin(pi/2) is %f and 3*1.5 is %f.\n", zero, si, mul); + return 0; +} diff --git a/tests32/test08 b/tests32/test08 new file mode 100755 index 0000000000000000000000000000000000000000..bfc135d73dd3e6bd91bba5071a60ed0c7c6c53d3 GIT binary patch literal 7312 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 +#include + +//from https://crypto.stanford.edu/pbc/notes/pi/code.html +// 800 first decimals of PI + +int main() { + int r[2800 + 1]; + int i, k; + int b, d; + int c = 0; + + for (i = 0; i < 2800; i++) { + r[i] = 2000; + } + + for (k = 2800; k > 0; k -= 14) { + d = 0; + + i = k; + for (;;) { + d += r[i] * 10000; + b = 2 * i - 1; + + r[i] = d % b; + d /= b; + i--; + if (i == 0) break; + d *= i; + } + printf("%.4d", c + d / 10000); + c = d % 10000; + } + + return 0; +} \ No newline at end of file diff --git a/tests32/test09 b/tests32/test09 new file mode 100755 index 0000000000000000000000000000000000000000..c5d953b003ceae72be4dde03da369c191e794241 GIT binary patch literal 7316 zcmeHMZ)_CD6`%8+i2-vM;(!xK*${`A6mM)G0ZOX+{1;kd4A>-;z~<~b`%awi+`Bzu z)3n98x+!(tS_oBDn! z))3(!A?7n`AX&#ww&5$PX9JQ|C3 zJQ@pC#-j0bpP5RS%ax9Osc&j&$5kNGYAxj1w-m@W>R%gtzu+i4>21N;*%nfm)~ zl7Hxu4e&F82N5)`Z4M)cxO6fej|*%4Mk{59qH!yo3Wr2jBDqWSCZln?OQch=aJW}k zR%c((>WapLvFM&KM0Q4>VA8gFg3-8WYF=MkXDv6Y%@vb;6&$y1utMQvxI3D%!^yS{ zb+JS|+!pMJ(MNYrBJTLGl<92^F<0;MrCZjm~1f zuTlwM{vxf#yAB=422l1Hie7>|4Gu4pV&kupVq+&rVfY^CUD)*VqzK{#Qp7VydY2Ge zGM9>SN8oTEJ9D8BLz!~$gU9T`+)gl=6GhvzB7d0C&mZErg#4jmTq9)1&gTJ#IP(bA zW1~`L7Dm`Oc1+5A07Q5hdtJ%~*shWMAr96xQvK1+eSghdxZK*dIma9t$nISr#Bk>I zzvc6-!vv z6eDs5!_DPB>{I@06Bu<9){!g2K!tDL3lBEt^9Cg3jBneH;owAe$fq`Gr2WaQSU((L z{V>I#L$UIT;ln<3$$kCb`TTH3fL(g(`1OLpYxYCcd9@E1pgnJwFOzuS2yHT_JqXR3 z>*)_NCyKZ4w02~NcVpk2JiY>71KB!`!NlcrkoQ|%BpM4DkzmT`Grnj%6q+GggUN8* zp3+3y1>UtaptvnW8C*RL8Ufu4`ddu@0O$kGGB<)U&7J}s2Ymyy9${zZ6Fhr13(s>! zo(07|-*?e&ppB{bn+a?HsPGpx`is9jd#3H{6JNS-?IX*}7xRXx0iK5qd4d6K1Kx}A zW1u47FB&YUomE($@fL(mX5k)hR3Z9+LD-nIsW0}3rjo*fw5XfyO+Pnn`*Ab`PS(Mg zewp5#u=UXvunx$rdkSqk*dWIU_={ig2K*)8@df;)nZg#o5%re`{1x^7W%d554Su7^ zUmD2zO9H3-#eviQqQFT%9MZoJ>y5z|9y@p7P6X~m;7$bYMBq*Y{%<1Ci~89B;x#6b z)$UOg6DZ8Zw^2KzzL0e}>Pz`uf|^U#=X}5Oo%)aK`NS{L87@Q&FF|w>e}Fs#^i?3g zY51PJ2S{L@GKzYf?@I&78e$G`KJXxvka7-NE0MqR~N$!cPZ zy^^^DScB>YdscWtFjfSwjG~IMlKF+KVy|TGoXPV5M%nZ=w^`gw{m z6!FT;Lc&bSWlG^(y~uDUw6et~KFM>1BhGpXgdac5$0a`infDBV`c>1^K1$*}_(}d(5cGJwV~#=A z@$n!&XCdqHsDBT#jz90XkEwU!=MnQnAttaF`@@u)i}~K;nvj9EYU&XWhGcGmU;K=E zDgXxJ-9*^|?&dbgI{qcl&xWk?V=nUJ8OZ%keCThttN&v3-|v#??`6sc5I}#whWrim z=QjiA`=-m@KpUS&J~Dtg1@pz9AiK|5axQ!NFT}zPte@Wp^mhcb*uVu)g8lsk>}#BS zknw>%^P5dPw^<1J#(K*{1!O)y_`O2=O33qJPvCm%AZy_GTU`A)U(2O8pq~wy&uGG2 zK4CkPcFIn7b(x*w#!-%C_gI}g%t_%OCzPtG<^5_apINh@v);S*5)o&J7Q}f2!K(n>6v2ja7o7EPm zZEm1fdEnKVO3OKa#=%zK>c`FQux<5rT6QEI-(`06Ip=9LHTs|ohhyPT&z^39$;idt8WO4{$n=cB~DFHQ=>Bu7R(|43KuU zz=N +#include +#include + +void forkexample() +{ + int x = 1; + + if (fork() == 0) + printf("Child has x = %d\n", ++x); + else { + usleep(20000); + printf("Parent has x = %d\n", --x); + } +} +int main() +{ + forkexample(); + return 0; +} \ No newline at end of file diff --git a/tests32/test10 b/tests32/test10 new file mode 100755 index 0000000000000000000000000000000000000000..fd02d55b47ddd2eaa25937a196a6277c42ce1031 GIT binary patch literal 15844 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 BT5SLT literal 0 HcmV?d00001 diff --git a/tests32/test10.cpp b/tests32/test10.cpp new file mode 100644 index 00000000..f3c61316 --- /dev/null +++ b/tests32/test10.cpp @@ -0,0 +1,27 @@ +// using atomic as a lock +#include // std::cout +#include // std::atomic +#include // std::thread +#include // std::vector +#include // std::stringstream + +std::atomic lock_stream[10]; +std::stringstream stream; + +void append_number(int x) { + while (lock_stream[x].load()) {} + stream << "thread #" << x << '\n'; + if (x != 9) lock_stream[x + 1].store(false); +} + +int main () +{ + std::vector threads; + for (int i = 0; i < 10; ++i) lock_stream[i].store(true); + for (int i=0; i<10; ++i) threads.push_back(std::thread(append_number,i)); + lock_stream[0].store(false); + for (auto& th : threads) th.join(); + + std::cout << stream.str(); + return 0; +} diff --git a/tests32/test11 b/tests32/test11 new file mode 100755 index 0000000000000000000000000000000000000000..c8bf7541d2229dc10f4a2e009b921d258c3d1146 GIT binary patch literal 22496 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%0DE~oVsbuoGHe=DnjOPQv^UFJ(Q9|2bdM`#w3P; zi6*n&w2W*cP`l03+)y+=O_uT@>_Y({9mAD21Yol~-5aB^tHiH4+rnJWNp8+3H1UY4 z-X*jt^?8$Nb$rdoxmIpQSsM4?9r97gb_^kRxRq5yCQBEJN zsU#6MSE-t4W`*X1YU_jA!Gr1=9FLH4;TX~SGzM_1S#ck@n)F^du>86Rt z6*~NH%4z8^O}SgKg3^RRy0JmoCm&QeO)Zl5>GdME_IbyDsZSoHt2U~MS94gIii;rn zQF6x&%uMr%d_Gg@Y@<2y7s)+iZqMVjg12P1T+<6F-R3 zNz^|Kaz5G8YQ3oFezf8cnT$-A2G51vnctj zh)KZ{pV{_*1Nt48N;demBNmD_znXg+u=D&yL7?3*%zc8aR3>VG^Vt!Tf+thWbj(iF zwqq84WEMVNfcqiOd*YL*$at5lUhxdNaB~|FBtPQ+^#Xb7|Nboe=d*CNU2EQEf+X|e%FfYXD=mXAYa7^WDsTcr`RiS*gwh*_ZuLJHR+T;E3 z$L;=Ldw8$iNy`BIWdTn4CxAP*ENK5};7 z67zv;eycs)!>10obEAg#{J^tqlxBQt#rL3(duy!*PX2Q6(GfBptiPJLop8p9Ex@Pa zTPu2jJGaMJe@B5l{fpSR6W_!v{yo4Qee_@6Shwx@Q9cg-Ep1jGl)>N0S@mBa&f9QE zm^x!XDi zM4+c{=hpVVz|QXO-CcVEd)l}5bp@Qipcz{_wK+Q*(cxM9IpulS^=Rf_wmlWe3;dzI zknm646gE?Vv7taJl8zl|8a!@KKMPb?TR9aF9Gi0XlV9xQ1-LJhBf{xwo&j%6Is0?C zQUP~*%8Rfr?}JXS0%gzS@wIu))==ThFJGCVdRL1=$3ZRJ>nbnKy`-$&u=1o9XEtq3 z(&(%`o8`>DKnxSO!fm9uKA6D`CF6leFc#vDQ<%$Q-r(%t#k;olYIH0RIcD#(HKX!i zGHF}2cJH#!1#9t{mqh0~QJRi-;e>Qr5x3No zLNq0B8pQ+>Wh!Bn5eJe>t})RRi>J&cO#PZTRSGpmLpG^>YcJ-WVIg^uAa)3A3f&Zg zKC8r)Kyr>^X~4x}Arb&DVUAGV0>(yCqKPM?Xad+2jsw7+XgKm@hD=-zwk9)TpT3b0 zR5%!9Ep`gww)9vhwN>4LVJ$cs9fBwE6wSa-u3wsDC0tfUakT)=988B%B^V3i8f2r< z*l^r|gM)(!^QePik3Q3Z5jh7W867{3$A`E)%qvX9!WM2_Y5(xC79#ws=HFG}zKc#x z=WqN{5ODKd$~pTR);mHd`M<%m9@&xOe9oEENhS`CTqofF!h0#S%Xeg${eb0-Pn48n z-hqsN3u$*XWS9>@FYee&zbV7Nm1~jt7X!9@*M{%g@Esc`Ip7T-@ckId@v$#6|5F{i zq%$8u=KC~+`A!XUKj1>UKn347;M|pRw?Kw@KVTFx(Lc^hGRTzMip+O;n2!Ud9PT2^ zwo>j6Wco@wvSDbPpRk>%kLhE`j+~z|41&{0fJ7;Kw@s!#KPCpuwBsbg%=aTZ`Z!Nu z9&;K29`!MO2HBD0{EHcnhVser?_pbxaS?tiuV6(xIdWeDPBP^R_r0{mWE%+c36Uc= zvJ@|BAlFOfmZYQaj4kH^LGI((G_$>q-1i~Jc2kb?@^g^$SgPdFk$Vo9mvYFCoWr9a zVdk^QrO1@yIv@*u?i_O;B1*lAp-QNOp z?Yx+cZn=sx5dt#9-RV zk?XPLoOWE_Cd4BJ;S!9h?uRT8u07NFC3Eq0P4 y$FiV#q6Kn3bm|Jw`CcIV*N4n&OF{EQTb~d=D +#include +#include +#include +#include + +void foo(void); /* Functions that use the TLS data */ +void bar(void); + +#define checkResults(string, val) { \ + if (val) { \ + printf("Failed with %d at %s", val, string); \ + exit(1); \ + } \ +} + +/* + Use the keyword provided by pthread.h to delcare the following variable + is thread specific, i.e. it is only visible to a specific thread, + not shared/common to all thread. + These variables are stored in thread local storage (TLS) area. + */ +__thread int TLS_data1 = 10; +__thread int TLS_data2 = 20; +__thread char TLS_data3[10]; + +// Sync, because it's needed apparently... +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t* mutex_ptr = &mutex; +static pthread_cond_t thread_state_cond = PTHREAD_COND_INITIALIZER; +static pthread_cond_t* thread_state_cond_ptr = &thread_state_cond; +static int status = 0; + +#define NUMTHREADS 2 +pthread_t thread[NUMTHREADS]; + +typedef struct { + int data1; + int data2; +} threadparm_t; + +void *thread_run(void *parm) +{ + int rc; + threadparm_t *gData; + + pthread_mutex_lock(mutex_ptr); + if (pthread_self()==thread[0]) { + printf("Thread 1: Entered (%d/%d)\n", TLS_data1, TLS_data2); + fflush(stdout); + } else { + while (!status) pthread_cond_wait(thread_state_cond_ptr, mutex_ptr); + printf("Thread 2: Entered (%d/%d)\n", TLS_data1, TLS_data2); + fflush(stdout); + status = 0; + pthread_mutex_unlock(mutex_ptr); + pthread_cond_broadcast(thread_state_cond_ptr); + } + + gData = (threadparm_t *)parm; + + /* Assign the value from global variable to thread specific variable*/ + TLS_data1 = gData->data1; + TLS_data2 = gData->data2; + strcpy(TLS_data3, "---"); + TLS_data3[1] = (pthread_self()==thread[0])?'1':'2'; + + foo(); + return NULL; +} + +void foo() { + if (pthread_self()==thread[0]) { + printf("Thread 1: foo(), TLS data=%d %d \"%s\"\n", TLS_data1, TLS_data2, TLS_data3); + fflush(stdout); + status = 1; + pthread_cond_broadcast(thread_state_cond_ptr); + while (status) pthread_cond_wait(thread_state_cond_ptr, mutex_ptr); + pthread_mutex_unlock(mutex_ptr); + } else { + printf("Thread 2: foo(), TLS data=%d %d \"%s\"\n", TLS_data1, TLS_data2, TLS_data3); + fflush(stdout); + } + while(!thread[1]) + usleep(300); + if(pthread_self()==thread[0]) + pthread_join(thread[1], NULL); + bar(); +} + +void bar() { + printf("Thread %d: bar(), TLS data=%d %d \"%s\"\n", + (pthread_self()==thread[0])?1:2, TLS_data1, TLS_data2, TLS_data3); + fflush(stdout); + return; +} + +int main(int argc, char **argv) +{ + int rc=0; + int i; + threadparm_t gData[NUMTHREADS]; + + printf("Create/start %d threads\n", NUMTHREADS); + fflush(stdout); + for (i=0; i < NUMTHREADS; i++) { + /* Create per-thread TLS data and pass it to the thread */ + gData[i].data1 = i; + gData[i].data2 = (i+1)*2; + rc = pthread_create(&thread[i], NULL, thread_run, &gData[i]); + checkResults("pthread_create()\n", rc); + } + + //printf("Wait for all threads to complete, and release their resources\n"); + for (i=0; i < NUMTHREADS; i++) { + rc = pthread_join(thread[i], NULL); + //checkResults("pthread_join()\n", rc); + } + + thread_state_cond_ptr = NULL; + i = pthread_cond_destroy(&thread_state_cond); + checkResults("destroying cond\n", i); + mutex_ptr = NULL; + i = pthread_mutex_destroy(&mutex); + checkResults("destroying mutex\n", i); + + printf("Main completed\n"); + fflush(stdout); + return 0; +} diff --git a/tests32/test12 b/tests32/test12 new file mode 100755 index 0000000000000000000000000000000000000000..83ba1cea158ac1f2cafebc98267d920c9d2edc8d GIT binary patch literal 7424 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 N#)WH+R6-}&{{Zo&q%r^i literal 0 HcmV?d00001 diff --git a/tests32/test12.c b/tests32/test12.c new file mode 100755 index 00000000..4892a10d --- /dev/null +++ b/tests32/test12.c @@ -0,0 +1,35 @@ +#include +#include +#include + +typedef uint32_t uint32; +typedef uint32 angle_t; + +int main(int argc, char **argv) +{ + int64_t i64 = 1000000000000; + double d = i64; + printf("%lli => %f\n", i64, d); + i64 = -i64; + d = i64; + printf("%lli => %f\n", i64, d); + + d = M_PI/4.0; + d = d*(1<<30)/M_PI; + angle_t u32 = (angle_t)d; + printf("(angle_t)%f = %u == 0x%08X\n", d, u32, u32); + + int16_t a=0, b=0; + asm volatile ( + "fldpi \n" + "fisttp %0 \n" + : "=m" (a)); + asm volatile ( + "fldpi \n" + "fchs \n" + "fistp %0 \n" + : "=m" (b)); + printf("go PI trucated=%d, -PI rounded=%d\n", a, b); + + return 0; +} diff --git a/tests32/test13 b/tests32/test13 new file mode 100755 index 0000000000000000000000000000000000000000..823cb65b8ec08095b478b5fa037c89bf7a55b6e8 GIT binary patch literal 7512 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 +#include +#include + +static ucontext_t uctx_main, uctx_func1, uctx_func2; + +#define handle_error(msg) \ + do { perror(msg); exit(EXIT_FAILURE); } while (0) + +static void func1(void) +{ + printf("func1: started\n"); + printf("func1: swapcontext(&uctx_func1, &uctx_func2)\n"); + if (swapcontext(&uctx_func1, &uctx_func2) == -1) + handle_error("swapcontext"); + printf("func1: returning\n"); +} + +static void func2(int a, int b) +{ + printf("func2: started (%d, %d)\n", a, b); + printf("func2: swapcontext(&uctx_func2, &uctx_func1)\n"); + if (swapcontext(&uctx_func2, &uctx_func1) == -1) + handle_error("swapcontext"); + printf("func2: returning\n"); +} + +int main(int argc, char *argv[]) +{ + char func1_stack[16384]; + char func2_stack[16384]; + + if (getcontext(&uctx_func1) == -1) + handle_error("getcontext"); + uctx_func1.uc_stack.ss_sp = func1_stack; + uctx_func1.uc_stack.ss_size = sizeof(func1_stack); + uctx_func1.uc_link = &uctx_main; + makecontext(&uctx_func1, func1, 0); + + if (getcontext(&uctx_func2) == -1) + handle_error("getcontext"); + uctx_func2.uc_stack.ss_sp = func2_stack; + uctx_func2.uc_stack.ss_size = sizeof(func2_stack); + /* Successor context is f1(), unless argc > 1 */ + uctx_func2.uc_link = (argc > 1) ? NULL : &uctx_func1; + makecontext(&uctx_func2, func2, 2, 1, 2); + + printf("main: swapcontext(&uctx_main, &uctx_func2)\n"); + if (swapcontext(&uctx_main, &uctx_func2) == -1) + handle_error("swapcontext"); + + printf("main: exiting\n"); + exit(EXIT_SUCCESS); +} \ No newline at end of file diff --git a/tests32/test14 b/tests32/test14 new file mode 100755 index 0000000000000000000000000000000000000000..93824888bae0122edfabdf655a48a2ea8751066f GIT binary patch literal 19276 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 HJO%zAQ$IIt literal 0 HcmV?d00001 diff --git a/tests32/test14.c b/tests32/test14.c new file mode 100755 index 00000000..65702be3 --- /dev/null +++ b/tests32/test14.c @@ -0,0 +1,111 @@ +// Code from https://martin.uy/blog/pthread_cancel-glibc-stack-unwinding/ +#include +#include +#include +#include + +static pthread_mutex_t mutex; +static pthread_mutex_t* mutex_ptr = NULL; +static pthread_cond_t thread_state_cond; +static pthread_cond_t* thread_state_cond_ptr = NULL; +static int thread_state = 0; // Sync + +void thread_cleanup(void* args) { + pthread_mutex_lock(mutex_ptr); + printf("Thread: thread_state = 2.\n"); + thread_state = 2; + pthread_cond_broadcast(thread_state_cond_ptr); + pthread_mutex_unlock(mutex_ptr); +} + +static void thread_f(void) { + int ret = -1; + pthread_mutex_lock(mutex_ptr); + printf("Thread: thread_state = 1.\n"); + thread_state = 1; + pthread_cond_broadcast(thread_state_cond_ptr); + pthread_mutex_unlock(mutex_ptr); + while (1) { + sleep(1000); + } +} + +static void* thread_main(void* args) { + pthread_cleanup_push(&thread_cleanup, NULL); + thread_f(); + // This should never be executed + pthread_cleanup_pop(0); + return NULL; +} + +int main(void) { + int ret = 0; + pthread_t thread; + pthread_attr_t thread_attributes; + pthread_attr_t* thread_attributes_ptr = NULL; + + if (pthread_mutex_init(&mutex, NULL) != 0) + goto error; + mutex_ptr = &mutex; + + if (pthread_cond_init(&thread_state_cond, NULL) != 0) + goto error; + thread_state_cond_ptr = &thread_state_cond; + + if (pthread_attr_init(&thread_attributes) != 0) + goto error; + + thread_attributes_ptr = &thread_attributes; + + if (pthread_create(&thread, thread_attributes_ptr, &thread_main, NULL) != 0) + goto error; + + thread_attributes_ptr = NULL; + if (pthread_attr_destroy(&thread_attributes) != 0) + goto error; + + // Wait for thread to go deep into the call stack + pthread_mutex_lock(mutex_ptr); + while (thread_state != 1) + pthread_cond_wait(thread_state_cond_ptr, mutex_ptr); + printf("Main thread: thread_state == 1.\n"); + pthread_mutex_unlock(mutex_ptr); + + if (pthread_cancel(thread) != 0) + goto error; + + // Wait for thread to execute the cleanup function + pthread_mutex_lock(mutex_ptr); + while (thread_state != 2) + pthread_cond_wait(thread_state_cond_ptr, mutex_ptr); + printf("Main thread: thread_state == 2.\n"); + pthread_mutex_unlock(mutex_ptr); + + thread_state_cond_ptr = NULL; + if (pthread_cond_destroy(&thread_state_cond) != 0) + goto error; + + mutex_ptr = NULL; + if (pthread_mutex_destroy(&mutex) != 0) + goto error; + + goto cleanup; + +error: + ret = -1; + +cleanup: + if (thread_attributes_ptr != NULL) + pthread_attr_destroy(thread_attributes_ptr); + if (thread_state_cond_ptr != NULL) + pthread_cond_destroy(thread_state_cond_ptr); + if (mutex_ptr != NULL) + pthread_mutex_destroy(mutex_ptr); + + if (ret == -1) + printf("Finished with errors.\n"); + else + printf("Finished with no errors.\n"); + + return ret; +} diff --git a/tests32/test15 b/tests32/test15 new file mode 100755 index 0000000000000000000000000000000000000000..386f69d9fb584b1d4a6569d46a7f52b5211565c0 GIT binary patch literal 15376 zcmeHOYiv}<6`p+n+u|$>bpr`*vT5wdw6NF~&@}Yn#V=e87y|}G!e#MZd$+82o!z^x zU7-fDA&F%x zG1rDltyJ~b9qH_uZ_b%BGiPS*o!L9{SW8E%&*u|5_(ebvjgJRI8^E9bgpzC!QL$9i zijRmYu^35|Z8#1c&|zdC1(8MyfKCCQIuQ(!J_Jmn49Swfgg{=>1Tv5)7ZFDeE>H*3 z6Mi8`i`?=kz!}Iv129T*=f4sY;>yp1AyPABTS2Th?ZcFqhI|?_QUo#*<+MRM3w#!J zCq;otTGn~hN>(DF5@nN`AtPz|F316I3AE2aj!WN0MHILI)?^dF+ir>^$t65Pq3%*KntjV)WW&WV36yV@XkV?SjPIxum$=xi%p& zcQC0{#6OgnJDF6J_zW=XQ~#$!BX5+h%yjPQD&G&miOGjit+CSKOSauPR+_m8wyXQq ziElj{40V>ji(K!HR#i{-j`xm_Grx=x0c(MRz2h&}qPS1<$EtoAwguX`dhf{9(sX5t zscdrOSCeBeJwRdaxQ;mqD*rlaj{Ndm`QCH?@cS-Y{F@d1iL`aeS}AQsI+d|Y%9!HtiQ{^v{ zO_ooCb?@#>h0X*+<)Z*7Rkm%+eD}b?LywFlX6IZ&|LiRvMQu-#mHNu z$Es_~Z~xP_$G%a9g|U-Y@VjR6+zr3Arv5#rHmF}|I=Iias@F<7^&@JPrhF*ylh=!H zmR_kic*uA}w{;Bdmi;lhwwi;8aXHrdkn6cHkkr1Lv*)r@UF0e%epVep@V z4}d@Oj%}X>{{#3H@Q%OOb{)P~?gHoc_DZBN_`cXBe8)n*)fK_u)BK)^v?|al*x5{l z<|QGf)iH`R`5hYZC^2aKZQDK!F2bSKaK-1AEwzF};t(?8#IHwCiAw0Lnr+m z;fkjM@o?nHU_4w|TGSMd_J^zE;o9c#+U9WG_HeW(8_x+Pes8Q1OE20nY=T2RsjW9`HQidBF34=K;?Ho(DV+{2x4U2H%MXK-i99 zud9e>bQ$MaT%J?@I;aA~^X52^D>BaoLwAAm{P=2c?&0nRm4Uf`B__Rw^WlGe-_Ff~ zbMN>3<2b(yUImV=w0IG;6vX}Dhd~V7a|?X&<;me%5ckTn*y>|@V~ zxETWCE;+t+N>IFGvxPHGd;Mr1TU3X6K^@}zz&TGe=G6~*G6CEtR*5EXj(^I1sQ>4| zIk$+Je-NDWh1iGoew7g?uzb!p9f-dPka*R<{@}=4;lD$C30V6#irHA}sxW)+Az%~v z5taI#z}o*2=;JRY`P@+Qu-LaCf8PRp3|N=P{39-T6h=-1S3C7z?q4as1MI#Z@sdlQ z^}7f>gZ?lPXZv^tWUZ4wg8q90@(XCMY(LujI56+|@P9b!|DE>Exb9zI%HC|>Dp3K< zGdKLNjrz;glm;Re;y#x?>-&4!bH>{WKc0d;d8=R*dwXL&B5CH$zI4Gd^M=)L^ki~b zvw(XS$(+%b$sI{#jHH#z7mP%4Nc80T2QsE*Ch^d@t%lK?&Zdn-KA#vi%&e6k7QOjI zziA|k{r$tp;z9;At$C{IjtOdH7_D9L?JY*jj%M60G3IL~h0%OqM|^vG(|n1%jDjRQ z7>$;#j)kqwUBYPV*tsR%VeD*e-QBXs*c0E<(L$^8Vo6V-DC-P7^x&pgpJ^EbJ%*Jk zW{<{>3^}(@8XIq3H@ThOfH2Ht!b&W-_)O-bkrxryfw~OaKzg0ScYh-?F~2UC`APdhTo*CUH9;rz z8WCr?Ow;Y{L!2uErg4om4n025wLR()4}hq*1;jPkY3S7=PCdSfwcaq|tSifr&pK4D znsF!Sa@oaNk86%P=pEKd;A|6h9|LJUKAXoOcwIZg(E}4FU3y%rX7B)ZuK;wpqmCZi zEALB2=Z_by_Z63(yw?c5W~Aw$^%t3!KS>+FxBTvz?H-uEEq`T}lK_b_qRP|J`c zckcFxz$v$%g tpMqW;408T|97Nj@5XUIX)FFe(yUvx7wivj&a_fC + +int main(int argc, char **argv) { printf("%d, %d/%d\n", returnVersion(), acquireVersion1(), acquireVersion2()); return 0; } + +#elif defined(V2) +int __attribute__((noinline)) getVersion() { asm(""); return 2; } +int returnVersion() { return getVersion(); } + +#elif defined(V1) +int __attribute__((noinline)) getVersion() { asm(""); return 1; } +int acquireVersion() { return getVersion(); } + +#else +int getVersion(); +int acquireVersion(); + +int acquireVersion1() { return getVersion(); } +int acquireVersion2() { return acquireVersion(); } + +#endif diff --git a/tests32/test15_dv1.so b/tests32/test15_dv1.so new file mode 100755 index 0000000000000000000000000000000000000000..2925ce8f88ced47a897f22e5343c66e6c7340cff GIT binary patch literal 14860 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 literal 0 HcmV?d00001 diff --git a/tests32/test15_v2.so b/tests32/test15_v2.so new file mode 100755 index 0000000000000000000000000000000000000000..b42d6d8725a39fbc9f5c410c7c374c310773bc7c GIT binary patch literal 14888 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 literal 0 HcmV?d00001 diff --git a/tests32/test16 b/tests32/test16 new file mode 100755 index 0000000000000000000000000000000000000000..1ff6e436e3d3e897e8a9706e9165873a148e05ee GIT binary patch literal 15368 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 Ui-EJMYP}aX3GqiMQGZ(RA1Bk@EC2ui literal 0 HcmV?d00001 diff --git a/tests32/test16.c b/tests32/test16.c new file mode 100644 index 00000000..6dc40230 --- /dev/null +++ b/tests32/test16.c @@ -0,0 +1,32 @@ +/* + * Compile with (on x86_64 archs): + * gcc -m32 -DV1 -shared -o test16_v1.so test16.c -Wl,--version-script=test16_version.map + * gcc -m32 -DV2 -shared -o test16_v2.so test16.c + * gcc -m32 -shared -o test16_dv1.so test16.c -L. -Wl,-z,origin,-rpath='$ORIGIN' -l:test16_v1.so + * gcc -m32 -DMAIN -o test16 test16.c -L. -Wl,-z,origin,-rpath='$ORIGIN' -l:test16_dv1.so -l:test16_v2.so + */ + +#if defined(MAIN) +int returnVersion(); +int acquireVersion1(); +int acquireVersion2(); +#include + +int main(int argc, char **argv) { printf("%d, %d/%d\n", returnVersion(), acquireVersion1(), acquireVersion2()); return 0; } + +#elif defined(V1) +int __attribute__((noinline)) getVersion() { asm(""); return 1; } +int acquireVersion() { return getVersion(); } + +#elif defined(V2) +int __attribute__((noinline)) getVersion() { asm(""); return 2; } +int returnVersion() { return getVersion(); } + +#else +int getVersion(); +int returnVersion(); + +int acquireVersion1() { return getVersion(); } +int acquireVersion2() { return returnVersion(); } + +#endif diff --git a/tests32/test16_dv1.so b/tests32/test16_dv1.so new file mode 100755 index 0000000000000000000000000000000000000000..2dbb5dd68193226cd6011dfc6c6432fd7374bf56 GIT binary patch literal 14864 zcmeHOQEVJX8UF9iZH~rC+$NwlNy#-bB|%|pyKX2{qH8<0=fnvEes7Roqs!~;6Ks>Yv9so6sDN4ml=?gqT9;jqQBpfv$i&$O0Z)V3? z8#h8o@HBt)?LYtg|NJxi&E8GcH}kdr;ek{tB}Oum5n3Z{BHgS!s6E}1ldSBMopO)z z>soz1mk}XaXri6U2F)^Y4i&_0Nq-JTjEg7|$@a^R$ns}3?nc|)!0m`(zBKg%z@r*V zPz3$VG4gI$G`Xn{ppKxAI8Oft!uCinqwpvD&!TUFZK1%B$cF&l58Gsc^|A>Sj5BRG zW`gz1!L}FC8*R4##kw2g#lwg?**94NDc+x7|?eC=My$_kq09=6ixy| zcZ#s%yJWMRfj*V6#q%aBLDj2=`C90C;th=*@rr)UpDfiwzczNHuN+kUvHW=1*S?KC zUST@#O_Zwna_LE5@`bN7N;UtKU#pjbYNt&4VO(D4>XMotHfmMl4gGr9dC)uC>C^)$ zm&Oaw&OsR->OIvdgHU~5m(%GyDDB5ahX#j^;$|S^opV99$QQ5ALX(di@a^A^;F^(F zaHY`y0yO=U`koS|J1sxbrg|ytnP6H%>IKW*7U=>4k;&@LE0FT#lmX z>5E}Hdb|1S?CFK%aH7}vMjO3s-g%>!uOoP3-o(uAZeN&~zxi+R3OpAsy@0%P-{K3^ z+*7=M`f_;h>{Cm+pY11~dAE6W$8mPo_SV8&c)!dq%>DF!#L41IxLmk&8toBvBAKIk zwPpY1XBOUA-1Ekbbm|YkTMl>3erJU#-wE%)EsY$H-a*3I$5)V3XPcO3lEu#>=)%G# zU(df74`OYHhy1oQ7w1NBe@hhwLKz ze`~EFs~rF7efIkt{UFs{LdIj?aDl| z583%v-+}k>L(net6!g%wC^`py3i=1oI{-@R$x%t2%cgdi-YvHcy@|{^ zX9)kRAK-_}ieUFsSOzQumI2FvWxz6E8L$jk25!lKi#@tacqzr}tJ(`p%{{-{ zfS&{W^_Lrf`CeK?>^;!jkG>0<@5(y??*HXGEN!A2N&fzR6qKR4zdMILzue|K5Bm=2 z*MZFd--XqFWLE^Kr5gtKY99u+1AIUJ2tc_JMZtM!{Bj&zM?U<#96$+PiGwRB{1aN` zLfwBQ*o$n0`)aM)e+X>P-Asls1X zpMMJD&qAB~P2qmOt33L`{@0J^MYw*M)BaSG(K6E zq5D_u&GJXseD)|Q@bgy|Vt!NL_d4wyFO)5^2?H|xF@8G-=+ejb+hsrPRX(!v0PR?E z(4R}#dtpz)PM(4IYQoR>uP1EI?)MTlyZIsPwL2e$M@WP5$ z;Ngin&R7%!Z?YVW=gVF(3~F^R-*x z`p3Mnp5Ebpbk0%U`iRMzgCwq-JoB;sRLQ!ND>o0BxUN1hvi5Ar+U8xiIL#tXeWnuT z$DzZT)>Ec5S#3B|`TCSN#hEI?v<_?H&~sLwcv)k3@YVb>9g#I+H zoMv(Ssdz%CifCah-9*o_&Oyg1|ax;S{YDtKi0aQ( z(g45viHA`(YmZq2xjz0QUZc1s5bYbpeGGM63z?7WqXNpz15;^!wmu24560ziAznw> z2xBP^0cLHyf*69IRWm-ALi7S$OIhZcL%1mG?<%cf%5i`z3*)#J5nP{5KE`vM{vyCJ zs8x#t26(?l7)N;(FmYVF2!t?xbEx1tMZVNIKIdj%jAb10eSrVx zVjS0~l@Ew}1%7hOIJGul^WGAQrax-(QUo|Y#_{~s656 zg!u^mU(m$0x`;s>>y4Q5uTa7M*)P|owsmpLLAeC547U=-@i{d@pMjc-*wKzS7s)wy moEP@n2JjhGoIq2G58^i#(-~}2&6G>w`>rLiTfAIr?WEv literal 0 HcmV?d00001 diff --git a/tests32/test16_v1.so b/tests32/test16_v1.so new file mode 100755 index 0000000000000000000000000000000000000000..2903f1cee4aab9e94ee88f96671fed2a0486d7ba GIT binary patch literal 14888 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 literal 0 HcmV?d00001 diff --git a/tests32/test17 b/tests32/test17 new file mode 100755 index 0000000000000000000000000000000000000000..dadb82f4401b2489d9b95e19ddb45d79f1f18d58 GIT binary patch literal 140776 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 +#include +#include +#include +#include +#include +#include +#include +#include + +typedef unsigned char u8x16 __attribute__ ((vector_size (16))); +typedef unsigned short u16x8 __attribute__ ((vector_size (16))); +typedef unsigned int u32x4 __attribute__ ((vector_size (16))); +typedef unsigned long long int u64x2 __attribute__ ((vector_size (16))); +typedef float f32x4 __attribute__ ((vector_size (16))); +typedef double d64x2 __attribute__ ((vector_size (16))); + +typedef union { + __m128i mm; + __m128 mf; + __m128d md; + u8x16 u8; + u16x8 u16; + u32x4 u32; + u64x2 u64; + f32x4 f32; + d64x2 d64; +} v128; + +uint64_t _ucomiss_(float a, float b) +{ + uint64_t ret = 0x202; + v128 va, vb; + va.f32[0] = a; + vb.f32[0] = b; + if(_mm_ucomigt_ss(va.mf, vb.mf)) + ret |= 0x000; + else if(_mm_ucomilt_ss(va.mf, vb.mf)) + ret |= 0x001; + else if(_mm_ucomieq_ss(va.mf, vb.mf)) + ret |= 0x040; + else + ret |= 0x045; + return ret; +} + +uint64_t _minss_(float a, float b) +{ + v128 va, vb, ret; + va.f32[0] = a; + vb.f32[0] = b; + ret.mf = _mm_min_ss(va.mf, vb.mf); + return ret.u64[0]; +} +uint64_t _maxss_(float a, float b) +{ + v128 va, vb, ret; + va.f32[0] = a; + vb.f32[0] = b; + ret.mf = _mm_max_ss(va.mf, vb.mf); + return ret.u64[0]; +} + +#define CMPSS(A, B) \ +uint64_t _cmpss_##A(float a, float b) \ +{ \ + v128 va, vb, ret; \ + va.f32[0] = a; \ + vb.f32[0] = b; \ + ret.mf = _mm_cmp##B##_ss(va.mf, vb.mf); \ + return ret.u64[0]; \ +} +CMPSS(0, eq) +CMPSS(1, lt) +CMPSS(2, le) +CMPSS(3, unord) +CMPSS(4, neq) +CMPSS(5, nlt) +CMPSS(6, nle) +CMPSS(7, ord) +#undef CMPSS + +const v128 a128_8 = {.u8 = { + 0xff, 0x80, 0x7f, 0x00, 0x01, 0x02, 0x03, 0x81, + 0xfe, 0x84, 0x72, 0x52, 0xa5, 0x00, 0xc0, 0x32 +}}; +const v128 a128_16 = {.u16 = { + 0xffff, 0x8000, 0x7fff, 0x0000, 0x0001, 0x0002, 0x0003, 0x8001 +}}; +const v128 a128_32 = {.u32 = { + 0xffffffff, 0x80000000, 0x7fffffff, 0x00000000 +}}; +const v128 a128_64 = {.u64 = { + 0xffffffffffffffffLL, 0x8000000000000000LL +}}; + +const v128 b128_8 = {.u8 = { + 0x00, 0x01, 0x05, 0x15, 0x20, 0x80, 0xff, 0x00, + 0x08, 0x07, 0x81, 0x06, 0x0a, 0x0f, 0x10, 0x01 +}}; +const v128 b128_16 = {.u16 = { + 0x8000, 0x7fff, 0xffff, 0xffff, 0x0050, 0x9000, 0xfffe, 0x8001 +}}; +const v128 b128_32 = {.u32 = { + 0x00000001, 0x80000000, 0x00000005, 0xfffffffe +}}; +const v128 b128_64 = {.u64 = { + 0x0000000000000001LL, 0x8000000000000000LL +}}; +const v128 c128_32 = {.u32 = { + 0x00000001, 0x80000000, 0x80000005, 0x0000fffe +}}; + +const v128 a128_pd = {.d64 = { 1.0, 2.0}}; +const v128 b128_pd = {.d64 = { 0.0, -2.0}}; +const v128 c128_pd = {.d64 = { INFINITY, -INFINITY}}; +const v128 d128_pd = {.d64 = { NAN, -0.0}}; +const v128 a128_ps = {.f32 = { 1.0, 2.0, 3.0, -4.0}}; +const v128 b128_ps = {.f32 = { 0.0, -2.0, -10.0, 0.5}}; +const v128 c128_ps = {.f32 = { INFINITY, -INFINITY, -INFINITY, 1.0}}; +const v128 d128_ps = {.f32 = { NAN, -0.0, -NAN, INFINITY}}; + +v128 reverse_pd(v128 a) { + v128 ret; + ret.md = _mm_shuffle_pd(a.md, a.md, 1); + return ret; +} + +void print_8(v128 v) { + for(int i=0; i<16; ++i) + printf("0x%x ", v.u8[i]); +} +void print_16(v128 v) { + for(int i=0; i<8; ++i) + printf("0x%x ", v.u16[i]); +} +void print_32(v128 v) { + for(int i=0; i<4; ++i) + printf("0x%x ", v.u32[i]); +} +void print_64(v128 v) { + for(int i=0; i<2; ++i) + printf("0x%"PRIx64" ", v.u64[i]); +} +#define print_128 print_64 +void print_ps(v128 v) { + for(int i=0; i<4; ++i) + if(isnanf(v.f32[i])) + printf("nan "); + else + printf("%g ", v.f32[i]); +} +void print_pd(v128 v) { + for(int i=0; i<2; ++i) + if(isnan(v.d64[i])) + printf("0x%"PRIx64" ", v.u64[i]); + else + printf("%g ", v.d64[i]); +} +#define print_sd print_pd + +int main(int argc, const char** argv) +{ + float a, b; + uint32_t flags; + uint32_t maxf = 0x7f7fffff; + uint32_t minf = 0xff7fffff; + uint32_t r; + +#define GO1(A, N) \ +a = 1.0f; b = 2.0f; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +b = INFINITY; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +b = -INFINITY; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +b = NAN; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +b = a; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +a = b = INFINITY; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +a = -INFINITY; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +a = b = NAN; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); + +#define GO2(A, N) \ +a = 1.0f; b = 2.0f; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +a = -INFINITY; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +a = +INFINITY; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +a = NAN; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +b = *(float*)&maxf; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +a = -INFINITY; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +a = +INFINITY; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); + + GO1(_ucomiss_, "ucomiss") + GO2(_minss_, "minss") + GO2(_maxss_, "maxss") + GO1(_cmpss_0, "cmpss 0") + GO1(_cmpss_1, "cmpss 1") + GO1(_cmpss_2, "cmpss 2") + GO1(_cmpss_3, "cmpss 3") + GO1(_cmpss_4, "cmpss 4") + GO1(_cmpss_5, "cmpss 5") + GO1(_cmpss_6, "cmpss 6") + GO1(_cmpss_7, "cmpss 7") + + #undef GO1 + #undef GO2 + v128 a128; + int i; + + #define GO1(A, N, C) \ + a128.mm = _mm_##A##_epi##N(a128_##N.mm); \ + printf("%s(", #C); print_##N(a128_##N); \ + printf(") = "); print_##N(a128); printf("\n"); + #define GO1C(A, N, C, A1, I) \ + a128.mm = _mm_##A##_epi##N(A1.mm, I); \ + printf("%s(", #C); print_##N(A1); \ + printf("%d) = ", I); print_##N(a128); printf("\n"); + #define GO2(A, N, C, A1, A2) \ + a128.mm = _mm_##A##_epi##N(A1.mm, A2.mm); \ + printf("%s(", #C); print_##N(A1); \ + printf(", "); print_##N(A2); \ + printf(") = "); print_##N(a128); printf("\n"); + #define GO2u(A, N, C, A1, A2) \ + a128.mm = _mm_##A##_epu##N(A1.mm, A2.mm); \ + printf("%s(", #C); print_##N(A1); \ + printf(", "); print_##N(A2); \ + printf(") = "); print_##N(a128); printf("\n"); + #define GO2f(A, C, A1, A2) \ + a128.mm = _mm_##A##_si128(A1.mm, A2.mm); \ + printf("%s(", #C); print_128(A1); \ + printf(", "); print_128(A2); \ + printf(") = "); print_128(a128); printf("\n"); + #define GO2C(A, N, C, A1, A2, I) \ + a128.mm = _mm_##A##_epi##N(A1.mm, A2.mm, I); \ + printf("%s(", #C); print_##N(A1); \ + printf(", "); print_##N(A2); \ + printf("%d) = ", I); print_##N(a128); printf("\n"); + #define GO2i(A, A1, A2) \ + i = _mm_##A##_si128(A1.mm, A2.mm); \ + printf("p%s(", #A); print_64(A1); \ + printf(", "); print_64(A2); \ + printf(") = %d\n", i); + #define GO3PS(A, N, A1, A2, A3) \ + a128.mf = _mm_##A##_ps(A1.mf, A2.mf, A3.mf); \ + printf("p%s%s(", #A, "ps"); print_##N(A1); \ + printf(", "); print_##N(A2); \ + printf(", "); print_##N(A3); \ + printf(") = "); print_##N(a128); printf("\n"); + #define GO1ipd(A, C, A1) \ + i = _mm_##A##_pd(A1.md); \ + printf("%s(", #C); print_64(A1); \ + printf(") = 0x%x\n", i); + #define GO1pd(A, C, A1) \ + a128.md = _mm_##A##_pd(A1.md); \ + printf("%s(", #C); print_pd(A1); \ + printf(") = "); print_pd(a128); printf("\n"); + #define GO2pd(A, C, A1, A2) \ + a128.md = _mm_##A##_pd(A1.md, A2.md); \ + printf("%s(", #C); print_pd(A1); \ + printf(", "); print_pd(A2); \ + printf(") = "); print_pd(a128); printf("\n"); + #define GO2Cpd(A, C, A1, A2, I) \ + a128.md = _mm_##A##_pd(A1.md, A2.md, I); \ + printf("%s(", #C); print_pd(A1); \ + printf(", "); print_pd(A2); \ + printf(", %d) = ", I); print_pd(a128); printf("\n"); + #define GO1isd(A, C, A1) \ + i = _mm_##A##_sd(A1.md); \ + printf("%s(", #C); print_64(A1); \ + printf(") = 0x%x\n", i); + #define GO1sd(A, C, A1) \ + a128.md = _mm_##A##_sd(A1.md); \ + printf("%s(", #C); print_sd(A1); \ + printf(") = "); print_sd(a128); printf("\n"); + #define GO2sd(A, C, A1, A2) \ + a128.md = _mm_##A##_sd(A1.md, A2.md); \ + printf("%s(", #C); print_sd(A1); \ + printf(", "); print_sd(A2); \ + printf(") = "); print_sd(a128); printf("\n"); + #define GO2Csd(A, C, A1, A2, I) \ + a128.md = _mm_##A##_sd(A1.md, A2.md, I); \ + printf("%s(", #C); print_sd(A1); \ + printf(", "); print_sd(A2); \ + printf(", %d) = ", I); print_sd(a128); printf("\n"); + #define GO1ips(A, C, A1) \ + i = _mm_##A##_ps(A1.mf); \ + printf("%s(", #C); print_32(A1); \ + printf(") = 0x%x\n", i); + #define GO1ps(A, C, A1) \ + a128.mf = _mm_##A##_ps(A1.mf); \ + printf("%s(", #C); print_ps(A1); \ + printf(") = "); print_ps(a128); printf("\n"); + #define GO2ps(A, C, A1, A2) \ + a128.mf = _mm_##A##_ps(A1.mf, A2.mf); \ + printf("%s(", #C); print_ps(A1); \ + printf(", "); print_ps(A2); \ + printf(") = "); print_ps(a128); printf("\n"); + #define GO2Cps(A, C, A1, A2, I) \ + a128.mf = _mm_##A##_ps(A1.mf, A2.mf, I); \ + printf("%s(", #C); print_ps(A1); \ + printf(", "); print_ps(A2); \ + printf(", %d) = ", I); print_ps(a128); printf("\n"); + #define GO1ps2dq(A, C, A1) \ + a128.mm = _mm_##A##_epi32(A1.mf); \ + printf("%s(", #C); print_ps(A1); \ + printf(") = "); print_32(a128); printf("\n"); + + #define MULITGO2pd(A, B) \ + GO2pd(A, B, a128_pd, b128_pd) \ + GO2pd(A, B, b128_pd, c128_pd) \ + GO2pd(A, B, a128_pd, d128_pd) \ + GO2pd(A, B, b128_pd, d128_pd) \ + GO2pd(A, B, c128_pd, d128_pd) \ + GO2pd(A, B, d128_pd, d128_pd) + + #define MULITGO2Cpd(A, B, I) \ + GO2Cpd(A, B, a128_pd, b128_pd, I) \ + GO2Cpd(A, B, b128_pd, c128_pd, I) \ + GO2Cpd(A, B, a128_pd, d128_pd, I) \ + GO2Cpd(A, B, b128_pd, d128_pd, I) \ + GO2Cpd(A, B, c128_pd, d128_pd, I) \ + GO2Cpd(A, B, d128_pd, d128_pd, I) + + #define MULITGO2ps(A, B) \ + GO2ps(A, B, a128_ps, b128_ps) \ + GO2ps(A, B, b128_ps, c128_ps) \ + GO2ps(A, B, a128_ps, d128_ps) \ + GO2ps(A, B, b128_ps, d128_ps) \ + GO2ps(A, B, c128_ps, d128_ps) \ + GO2ps(A, B, d128_ps, d128_ps) + + #define MULTIGO1ps2dq(A, B) \ + GO1ps2dq(A, B, a128_ps) \ + GO1ps2dq(A, B, b128_ps) \ + GO1ps2dq(A, B, c128_ps) \ + GO1ps2dq(A, B, d128_ps) + + #define MULITGO2Cps(A, B, I) \ + GO2Cps(A, B, a128_ps, b128_ps, I) \ + GO2Cps(A, B, b128_ps, c128_ps, I) \ + GO2Cps(A, B, a128_ps, d128_ps, I) \ + GO2Cps(A, B, b128_ps, d128_ps, I) \ + GO2Cps(A, B, c128_ps, d128_ps, I) \ + GO2Cps(A, B, d128_ps, d128_ps, I) + + #define MULTIGO2sd(A, B) \ + GO2sd(A, B, a128_pd, a128_pd) \ + GO2sd(A, B, a128_pd, b128_pd) \ + GO2sd(A, B, a128_pd, c128_pd) \ + GO2sd(A, B, a128_pd, d128_pd) \ + GO2sd(A, B, b128_pd, d128_pd) \ + GO2sd(A, B, c128_pd, d128_pd) \ + GO2sd(A, B, a128_pd, reverse_pd(a128_pd)) \ + GO2sd(A, B, a128_pd, reverse_pd(b128_pd)) \ + GO2sd(A, B, a128_pd, reverse_pd(c128_pd)) \ + GO2sd(A, B, a128_pd, reverse_pd(d128_pd)) \ + GO2sd(A, B, b128_pd, reverse_pd(d128_pd)) \ + GO2sd(A, B, b128_pd, reverse_pd(d128_pd)) + + + GO2(shuffle, 8, pshufb, a128_8, b128_8) + GO2(hadd, 16, phaddw, a128_16, b128_16) + GO2(hadd, 32, phaddd, a128_32, b128_32) + GO2(hadds, 16, phaddsw, a128_16, b128_16) + GO2(maddubs, 16, pmaddubsw, a128_8, b128_8) + GO2(hsub, 16, phsubw, a128_16, b128_16) + GO2(sign, 8, psignb, a128_8, b128_8) + GO2(sign, 16, psignw, a128_16, b128_16) + GO2(sign, 32, psignd, a128_32, b128_32) + GO2(mulhrs, 16, pmulhrsw, a128_16, b128_16) + GO3PS(blendv, 32, a128_32, b128_32, c128_32) + GO2i(testz, a128_32, b128_32) + GO2i(testc, a128_32, b128_32) + GO2i(testnzc, a128_32, b128_32) + GO1(abs, 8, pabsb) + GO1(abs, 16, pabsw) + GO1(abs, 32, pabsd) + GO1(cvtepi8, 16, pmovsxbw); + GO1(cvtepi8, 32, pmovsxbd); + GO1(cvtepi8, 64, pmovsxbq); + GO1(cvtepi16, 32, pmovsxwd); + GO1(cvtepi16, 64, pmovsxwq); + GO1(cvtepi32, 64, pmovsxdq); + GO1(cvtepu8, 16, pmovzxbw); + GO1(cvtepu8, 32, pmovzxbd); + GO1(cvtepu8, 64, pmovzxbq); + GO1(cvtepu16, 32, pmovzxwd); + GO1(cvtepu16, 64, pmovzxwq); + GO1(cvtepu32, 64, pmovzxdq); + GO2(min, 32, pminsd, a128_32, b128_32) + GO2(max, 32, pmaxsd, a128_32, b128_32) + GO2C(blend, 16, pblendw, a128_16, b128_16, 0) + GO2C(blend, 16, pblendw, a128_16, b128_16, 0xff) + GO2C(blend, 16, pblendw, a128_16, b128_16, 0xaa) + GO2C(blend, 16, pblendw, a128_16, b128_16, 2) + GO2C(alignr, 8, palignr, a128_8, b128_8, 0) + GO2C(alignr, 8, palignr, a128_8, b128_8, 2) + GO2C(alignr, 8, palignr, a128_8, b128_8, 7) + GO2C(alignr, 8, palignr, a128_8, b128_8, 15) + GO2C(alignr, 8, palignr, a128_8, b128_8, 16) + GO2C(alignr, 8, palignr, a128_8, b128_8, 0xff) + GO1ipd(movemask, movmskpd, a128_64) + GO1pd(sqrt, psqrtpd, a128_pd) + GO1pd(sqrt, psqrtpd, b128_pd) + GO1pd(sqrt, psqrtpd, c128_pd) + GO1pd(sqrt, psqrtpd, d128_pd) + MULITGO2pd(and, andpd) + MULITGO2pd(andnot, andnpd) + MULITGO2pd(or, orpd) + MULITGO2pd(xor, xorpd) + MULITGO2pd(add, addpd) + MULITGO2pd(mul, mulpd) + MULITGO2pd(sub, subpd) + MULITGO2pd(min, minpd) + MULITGO2pd(div, divpd) + MULITGO2pd(max, maxpd) + GO2(unpacklo, 8, punpcklbw, a128_8, b128_8) + GO2(unpacklo, 16, punpcklwd, a128_16, b128_16) + GO2(unpacklo, 32, punpckldq, a128_32, b128_32) + GO2(packs, 16, ppacksswb, a128_16, b128_16) + GO2(cmpgt, 8, pcmpgtb, a128_8, b128_8) + GO2(cmpgt, 16, pcmpgtw, a128_16, b128_16) + GO2(cmpgt, 32, pcmpgtd, a128_32, b128_32) + GO2(packus, 16, packuswb, a128_16, b128_16) + GO2(unpackhi, 8, punpckhbw, a128_8, b128_8) + GO2(unpackhi, 16, punpckhwd, a128_16, b128_16) + GO2(unpackhi, 32, punpckhdq, a128_32, b128_32) + GO2(packs, 32, ppackssdw, a128_32, b128_32) + GO2(unpacklo, 64, punpcklqdq, a128_64, b128_64) + GO2(unpackhi, 64, punpckhqdq, a128_64, b128_64) + GO1C(shuffle, 32, pshufd, a128_32, 0) + GO1C(shuffle, 32, pshufd, a128_32, 0xff) + GO1C(shuffle, 32, pshufd, a128_32, 0xaa) + GO1C(shuffle, 32, pshufd, a128_32, 2) + GO1C(srli, 16, psrlw, a128_16, 0) + GO1C(srli, 16, psrlw, a128_16, 0xff) + GO1C(srli, 16, psrlw, a128_16, 0xaa) + GO1C(srli, 16, psrlw, a128_16, 2) + GO1C(srli, 32, psrld, a128_32, 0) + GO1C(srli, 32, psrld, a128_32, 0xff) + GO1C(srli, 32, psrld, a128_32, 0xaa) + GO1C(srli, 32, psrld, a128_32, 2) + GO1C(srli, 64, psrlq, a128_64, 0) + GO1C(srli, 64, psrlq, a128_64, 0xff) + GO1C(srli, 64, psrlq, a128_64, 0xaa) + GO1C(srli, 64, psrlq, a128_64, 2) + GO1C(srai, 16, psraw, a128_16, 0) + GO1C(srai, 16, psraw, a128_16, 0xff) + GO1C(srai, 16, psraw, a128_16, 0xaa) + GO1C(srai, 16, psraw, a128_16, 2) + GO1C(srai, 32, psrad, a128_32, 0) + GO1C(srai, 32, psrad, a128_32, 0xff) + GO1C(srai, 32, psrad, a128_32, 0xaa) + GO1C(srai, 32, psrad, a128_32, 2) + GO1C(slli, 16, psllw, a128_16, 0) + GO1C(slli, 16, psllw, a128_16, 0xff) + GO1C(slli, 16, psllw, a128_16, 0xaa) + GO1C(slli, 16, psllw, a128_16, 2) + GO1C(slli, 32, pslld, a128_32, 0) + GO1C(slli, 32, pslld, a128_32, 0xff) + GO1C(slli, 32, pslld, a128_32, 0xaa) + GO1C(slli, 32, pslld, a128_32, 2) + GO1C(slli, 64, psllq, a128_64, 0) + GO1C(slli, 64, psllq, a128_64, 0xff) + GO1C(slli, 64, psllq, a128_64, 0xaa) + GO1C(slli, 64, psllq, a128_64, 2) + GO2(cmpeq, 8, pcmpeqb, a128_8, b128_8) + GO2(cmpeq, 16, pcmpeqw, a128_16, b128_16) + GO2(cmpeq, 32, pcmpeqd, a128_32, b128_32) + MULITGO2pd(hadd, haddpd) + GO2(srl, 16, psrlw, a128_16, b128_16) + GO2(srl, 32, psrld, a128_32, b128_32) + GO2(srl, 64, psrlq, a128_64, b128_64) + GO2(add, 64, paddq, a128_64, b128_64) + GO2(mullo, 16, pmullw, a128_16, b128_16) + GO2u(subs, 8, psubusb, a128_8, b128_8) + GO2u(subs, 16, psubusw, a128_16, b128_16) + GO2u(min, 8, pminub, a128_8, b128_8) + GO2f(and, pand, a128_8, b128_8) + GO2u(adds, 8, paddusb, a128_8, b128_8) + GO2u(adds, 16, paddusw, a128_16, b128_16) + GO2u(max, 8, pmaxub, a128_8, b128_8) + GO2f(andnot, pandn, a128_8, b128_8) + GO2u(avg, 8, pavgb, a128_8, b128_8) + GO2(sra, 16, psraw, a128_16, b128_16) + GO2(sra, 32, psrad, a128_32, b128_32) + GO2u(avg, 16, pavgb, a128_16, b128_16) + GO2u(mulhi, 16, pmulhuw, a128_16, b128_16) + GO2(mulhi, 16, pmulhw, a128_16, b128_16) + GO2(subs, 8, psubsb, a128_8, b128_8) + GO2(subs, 16, psubsw, a128_16, b128_16) + GO2(min, 16, pminsw, a128_16, b128_16) + GO2f(or, por, a128_8, b128_8) + GO2(adds, 8, paddusb, a128_8, b128_8) + GO2(adds, 16, paddusw, a128_16, b128_16) + GO2(max, 16, pmaxsw, a128_16, b128_16) + GO2f(xor, pxor, a128_8, b128_8) + GO2(sll, 16, psllw, a128_16, b128_16) + GO2(sll, 32, pslld, a128_32, b128_32) + GO2(sll, 64, psllq, a128_64, b128_64) + GO2u(mul, 32, pmuludq, a128_32, b128_32) + GO2(madd, 16, pmaddwd, a128_16, b128_16) + GO2u(sad, 8, psadbw, a128_8, b128_8) + GO2(sub, 8, psubb, a128_8, b128_8) + GO2(sub, 16, psubw, a128_16, b128_16) + GO2(sub, 32, psubd, a128_32, b128_32) + GO2(sub, 64, psubq, a128_64, b128_64) + GO2(add, 8, paddb, a128_8, b128_8) + GO2(add, 16, paddw, a128_16, b128_16) + GO2(add, 32, paddd, a128_32, b128_32) + GO2ps(movehl, pmovhlps, a128_ps, b128_ps) + GO2ps(unpacklo, unpcklps, a128_ps, b128_ps) + GO2ps(unpackhi, unpckhps, a128_ps, b128_ps) + GO2ps(movelh, pmovhps, a128_ps, b128_ps) + GO1ps(sqrt, psqrtps, a128_ps) + GO1ps(sqrt, psqrtps, b128_ps) + GO1ps(sqrt, psqrtps, c128_ps) + GO1ps(sqrt, psqrtps, d128_ps) + //GO1ps(rsqrt, prsqrtps, a128_ps) // difference in precision + //GO1ps(rsqrt, prsqrtps, b128_ps) // same + //GO1ps(rsqrt, prsqrtps, c128_ps) // same + //GO1ps(rsqrt, prsqrtps, d128_ps) // difference in the handling of NAN, (-)0, and INF in Dynarec + //GO1ps(rcp, prcpps, a128_ps) // deference in precision + //GO1ps(rcp, prcpps, b128_ps) // deference in precision + //GO1ps(rcp, prcpps, c128_ps) // deference in precision + GO1ps(rcp, prcpps, d128_ps) + MULITGO2ps(and, andps) + MULITGO2ps(andnot, andnps) + MULITGO2ps(or, orps) + MULITGO2ps(xor, xorps) + MULITGO2ps(add, addps) + MULITGO2ps(mul, mulps) + MULITGO2ps(sub, subps) + MULITGO2ps(min, minps) + MULITGO2ps(div, divps) + MULITGO2ps(max, maxps) + //MULITGO2Cps(cmp, cmpps, 0) // use avx for some reason + MULITGO2Cps(shuffle, shufps, 0) + MULITGO2Cps(shuffle, shufps, 0x15) + MULITGO2Cps(shuffle, shufps, 0xff) + MULITGO2Cps(shuffle, shufps, 0x02) + MULTIGO2sd(sqrt, sqrtsd) + MULTIGO2sd(add, addsd) + MULTIGO2sd(mul, mulsd) + MULTIGO2sd(sub, subsd) + MULTIGO2sd(min, minsd) + MULTIGO2sd(div, divsd) + MULTIGO2sd(max, maxsd) + MULTIGO1ps2dq(cvtps, cvtps2dq) + MULITGO2Cps(dp, dpps, 0xff) + MULITGO2Cps(dp, dpps, 0x3f) + MULITGO2Cps(dp, dpps, 0xf3) + MULITGO2Cps(dp, dpps, 0x53) + + return 0; +} + diff --git a/tests32/test17_o2 b/tests32/test17_o2 new file mode 100755 index 0000000000000000000000000000000000000000..95b6894c9f8affd933c959ab68d701fa01955a38 GIT binary patch literal 251636 zcmeFadz@AC`Uk$NQ6n8YL~(K&Oqz&Pj^f005<=)^S5zb2ri@A#LPupA8q=KPn1-l` zL`Z7f?7i0W{=DDM^L(E5 zeAZg~GE>j%aekdTbt3j(y-2+XZe4Xsoyh6%nDJ&kGMygDiX0NjiJTZ|8L1C@&}M(G zf&uuGfq3}A5wl?1{u}|@_=7gsO+WD9{xt&w{-8b5SnTkK&+%u*33ce_AZ_mgO!71F zs7M5V^msG4PQ;AipVI((I{cvD$X6F0c7c5t*y#ti;Ro%=fj^4?Z-2VMHvU*!&(9|g zo7SsN#Qtmq8~#{(FR;UA=pXW9NWH zjGHuZX#SA#_&6alZv3b*6Gs4Q=;R@JBSwuGQZVYK;Sn5yIXxqCL5~Z&o}1VH)OM$K zaL-S3&pMnAa(yq!8#a9W@R6e?OdLMG?gLn4tVteRLi zu_?YT^UAe}3cRXJEWk?!{FhkJ2!7||(=WFHG_e4$VDi!Y_z)^XA!R1GryZh?e+{j1kc>RU@Kj9lxf|i0FIWvNN}q%?88P z=Gox$uH4a)n7I%fh_7pwsKoJ!N*rejfdWUql#z`vMUXK%lBk?ZNF<7xhITl)Vyd@+ zXmwe}@9axwAQ}+xAtPIlM=w^P7i;&47dTS9NI>k~i&ZswaT^S;ju*U#Bu%QzHiK)B zibN%{nP-8gx)ArJOvnZ>NJ7Y!PC-|2oS9g&D;oims6?We`2|CdkF&1KfSulzHslKK zOX-X9dTZFaKO)R;B5t`-T^x`2k4GZH59-pYh zVWT7Ft7BC7k!itEqa!%v1{8?rz+n@%s3#V;z5Q)B@Q-=fhRosepI3oXFO4fgfVj}xwO=}WH1SMRFO+V$R*sD z(xoaeKwLqWw*DG$2?v{_fhSx}+NE^>OH?9Z%*+9X>i7!l(k|HPU3wjE8&((MzLYNQ z0Yk{8i-IoUU~@b0)SRWg083ONVa#L_L-VbLnD(0Ic*ysHDt42;;+<_XUus)R{ldGT>M# zr$NAwSF-$qH+8kcLW51-j|~=8^&UQUXqqT6K71D94hRemqxv>5nz59D$y~-tDtf{~ zXl`TDl10SPxNsRf!b-3^I%qYxLq}gV{igY!OA*Y5-)!EAY4wYftY#YMR>iFI*>@;=;Y=HB+a~@0hk!PV3?5i%s-&+S}XUcq((ROm9c={(! z2J&GtkVa)QhnVnp((#f()=9AUxH`}akcy=RP> z?LTrv))zjmU4`ZVd37QFrilE=;K4IjSa9_IebI-qXN;Lxk}rHH*2b5;;Gpe$jfI7e z+x^Xv9~qpZSKtgAA}QG{*{#_ZeU{-FW9BwtvA!T%`kD44gJ(PEB>93fo}NYf;%7Z( z_Uz_}a5TqYzGXFX;LgvHiN&A#}N0bfcghGCD*60SuO*D{-( zJnFGnyQ+fc!e*j!HvD!y_T%q4F*pztgG7|x6a*=I>;pnzJ#alX1%d93NJc$&kPw7= zYzhJyqDKDOvOhSZC0+J@uF*UrY^?81%(gdd$27m%Vt@<7g}e zj4WL#=x(eTW9Fa2V)NpTk(3enD1tq;yRg_}q-J0AG2$6v{ZI16^|Af>vX`>E2Y$!Q zik&_mn4csTbWNSd_>sZ9T+b}wp31%?vFP668Dr)&VF~rrlq`N^pm&(BzU7(T46fr$ z8+cSRU4t*WULFw^9E~ioL%y;Ycy0W*Y*l%blKQg+!+Nj|wQ zTN9IRldj!>; z=NmN6r}bY4^Ms7Gnmf7%@PsilMVPElwTe#Pun82YIYsDf+H2*QrqI+e^U+s4d-)I_ zEPbVh?KuA4=o3`Eq%jo^gQKC84?Vkg3?bp*7b1dl(e!yird2`lrFCt4-1a8YT zf*-hZn)2}Lmfd74UELJHEu=p&5#12s>wgSsy(g-Hgzx;oy;~$&_a#?=?I~`Buc<2a zG8SCwCkdTh>RqF&nNF|yzHi0Mi9%-}Q+V{%(mUOTJ$1~yZ#Y=%9n$W%+;xEZj38!a z2%TN0YU!O`u(Wq)CVA(U;M(WTQ^WnwFDO{LRp?8EDwb=lwk7h={}oYxCR&0;!S{}^ zXjS#sq6aIJuKUN5t7 z{wqw@C$%c3XVMgI1?nbDDOT$AOfp&%#>}suadev{x?1|=7gp!fQem<_A>)2C?tJou zF*8D#X8bXq{KD#dYM$g1GS=QFPZ%?Aead;VKGiBZy`1W0HfG{NXVYFQ$25hej+xV$ zE_9u{W_2A1H*LKKR_a~bIl_F%k-p&F4+rGhuhffygKn622NGnrubVW<=2bXmiYx?g zziWtpX=Q|XVjGoOA<|cO`qj0m(Ao7%HL9BE{34^NV`jrAoF^mISxfJ9-}BTlbED8% z?~r!CC7OP9JxSz6=H9Wx)otK`u1O00Kkb*+ic2biez)G;#?=-dk`sV9Hb z{vqdENKSGI;SRVV8#5<}-?oHmnN`0a1=qTFJ`T=#ElWtxxu=eqLZG8G>`6LI%5Vn; zP*U*(u3`g4cahZEGG82Z(;n5j!DA9Y89PcYV;BmGb^`nvTWLG<(Q_>)bRQb)1_F&>O#0_>pifF zog^;hLym&0SdAQzYrl&9??Vbpt~a|AlRe|E`$w)f=P^;r>rEm`6H_<1XboI%_GKb> z>W=MrzZIaDtzcI_Na$==SM4nQfu|`nb<8~T0hfV+Okr=SrFXhJ`UN9qMhczv4ryx< ztfvU}?q))lVnwVeSifxPz+>j+Y7W+Vr&h$8=(Km9I%aNSx+O^GuQ&PX?hlnnyZ1h(+PAH~9*9zaHh_Ai3UrkcnK;)^Z;GLK&RLoQqtISi!OdY06dA+&c zF!w-7y6ergxKcm$K9|KJIR=*bqOF(aC{J^}nJ-MpkhD^#XTr52biMhPB%jo(n4U>5 ztZoH*2i{4Ar-61=#3<#EOwS~vHDS!$DNJ_BsHIPSVRb%rN%9F9YwwdMjG3R_<>+Qe z#%t-5Us#<_i-pPN2^nkelP8RstCM`HRdjke)yr(m93gZz?X_}DQ)ud#S@#atWWgz%X#$6X>cAN6*^mGwJcg) zWu7`_`Y~O~m3qHn?tzkYEArB2U;Yei_K zo+wP#C$$2lXVMF+TY*jzCc6S5qa2dynPjvkjG1k(b98pesHIPSVRb&;BTUvOWUReU zo-k&52-6J7crAVM3#;>~Zjw*PSbLv5VazOhjq_xEs#SD)In~Q-%#0E`oAz2crYSUa z%pAjX_L}-FTpwSdRW<{{O|zD5Lzy{m=JNTt`( zJKaM)HJtw?d55(7Eq5JYu*0u=g@aA8Qr8r$Ursf3%uEtGn>)2q*F@(74Bllvk?B(2 zcKJgkvh`&O^Zz~3EGD841NdudK6lu!M>%SxzL<$pt<*JT%2!r!9`|nGd9+nl%c9j) z=BZ<53Dc!qsrMV^9wL$X33`r|>dL~>eLM!zv zFLB1KPih59&!iVtw*pNQCc7#kqa2dynPjvkjF~fp$u1eS^vN%*&ZiygIXdeTGS=QF zPZ%=~3)2kAcrAVM3#;>~f09qgSbLv5VayzwBiG$y5RU-%F+OO1R9fg&0r9SA7tke%O zQOfQ~L}_B`mb_BOn8-CfwHBs7Qqr%~4TR3FHmd2>M5k99-Sn2N9zDu_fSs_ z=YK+Hy+hjlmb+d~gB|`Dp-Zt+*A#5JmHO2+9IW+Dt<*Kq`2d3}^%SN{dE4a=l}LyG zE26JfQ-JijJHJx%TLky(QI1-vA7Ua`w6&Z^Us=I<>@9S*%4%7(y2?Ct%+zDLl{kO? z-Bx@;vfnWG;2^%qUs7=>+=MVsS8-V^l4D?*FWUNPj`B1s^=M&2hNP7`Jrk}Kp_Mu- z$tSe}rDxI$t6PEITgB1YRS~0QOGYhy@(Zi;scVu?$XI)yJRyAk z=>?8%hGe{!KKX^!`Sc%QvUx(r+WX`QV`f;APqm6pFQkme{)vr<!*A!F@*@`N$-{4<;<>r<_w)61z|W@F|WrlSuGLQ$1?$2Q;uZh(v8qh5h` zo+f?3&Syze!{>j6E+66xuG9@6+_d!`SgAKxa)g?Luc>R~fL!~PdKPo2l^Q-pgctbu zg%4|9Za|AQoKdF)nhLJY z4Ta9uS1rp`*O#Y`ndMJXrc$oX`weps6r)?6AHmhR0O&?U$Ie*+?`?wbf`X^Ti{WWW zybD;Pt>?}D4IfGt!NZ7Xr^u`D9BZd%%(Ul`6$5ePj>gf}^j!|o*6?A)25(02^P2t4 zp^S+)x0sA<_^PYP;Dz~gQzTLnU;Pdp9YyrjNIlI*OUWCOAkIeF=6L`D+31F58(ZgW z0XB4WBRqnOnLr0_HG>Cmu@1V3YeN5$_(c%I72xU}Jg}mNb%VZ%ja;3}?ETD8#>5+0 z485r|+BzfKOlAy!ZI(Gpd_)cFW6b&3nXL=pakDaWKs~EFj@4F(sa1oG1Tf;XZH3|554+D8I!?}Sxe*cEe z<7}}?#_E+w2GJvMsJ~>b7sJXn*g%_Pn`@b*pE;e4bOA?MXp?PvvQhGMcnTj*bv`r^ zaw)8gGA^_-^Z~PS6=&tO|4>%wI|)e!eE9Npsjj7Lq4hsf-BZ;Yvn89;VB9$-}{gnN(a}Jq>%*~Z z4CLX=fDgYdrVxl#Ce1W;KK#zsm2#joT*(K{N}GqNoQG!^Mu!NIK+`$g`fwi`>DVA6 z93DTy-f;>5XV?R6cZIJRVDF7K-Ig5DygSg zz<5$br#dyI0|9*Kk3QTDKAr(jer+^QarSReFSI`Hf0v~$IH(s77 z;wYuX?*&y%2X?e)Ko(SgdpsQZy~s(EL#yUyh6F;NNV3SKWd935V19uDg3tf(xFxd@ zgy!HVADyCT863I+$fdt-wR_TNG`P|+=61O!_OR$!|Z z?}jlr;9XUKt}7rQt0SVjc0}0(3Dz=vaSx zi4qHG8weI)`dvIbB?Z;X43<`MND@`KqdE*M=vDomIcYh1e{X^(hD7vE^-BhpwTLSpzhGjbYO(Ywy=DXD+@0Fex!eY*P;+KLaybLbw#jriW}_qh%z8#G*l1bdlxF){drWQsYyT_w>ziZde#Qol zqh}Z^U(7q15rK7L79pDDC*UShKNAzZElO{^)9Vk`0sXDsNh$Qs59np4(90IRCrIyq z4^tKv?68T3`06@616Cj3^NbC|_ud+*N;-9zEeN*`!n8e2h-Rbf_A@uKxpc1;19KS@ zz^vZP*76k)I`rJq#qbCxHJhPGqOIvV1n#0m%WyjaJMcsRi=a0Z0hSUJK~qr}XwygM zEK~$LR%=hceTd_3Zh;FYlMaNxmVh+-8yH2WHnvb7VIFY!6|rKp=o(dGT{-u{w4qb* z{SOS|vnM<`fT;5V&J1A$xj-`D#o6Koq^)ZTFaF}Z=$6Wh2I2)43w!bVdoqxi|-x`=i;?hIu~y+B9M!6LNpuQxSv_d=0GlHG6Ce`DYgc4 zVN2QP;+hm*ToCZ$LP20@+P>YAy^wa%N*uw1!WL*f=SXX?;vsSc93pUV{Q3Ze9ayC9 z0dPrtC;;H>c62@IrsfTT=ENJlj|X2NIxr&I3r@cZ7twr{lwOO69kqhqaQ@583pU#8 znuR#+bmDcMon8D65OV|b5{vcs1UG#*vbCZ)snT67P+c#oe*W5t+zKZ*!^*v96G(EI zDde7Z>1oK;;x;5#(uspy?Siz2&YF3Yw^IDXA30stpXA^;9vP6kkAOLW=+1L;bJ)6| zGs)4ZDMW`iq`Cv0kFF2PEuU-UR&F3U_*(HjFG!J6bSH@%4!6mCj}cIXZNS>Uq<9j{ z(-lSZWzW50=I6Ow`T2GT#IV4UQVV~V5%XqP1pGOG=@vn<6^tlvR4uY_+Lq^JE5VAf zpi^-FkFf!^4wjAdhBJcRf=EFC+hG<#dgn5Ns)7)wXPccXDG?Cnd0@q3iuIZ@mah_} z*REx(EWtm{p$t$?i4D^FkVTN*+l;7aZsP;JsZQ@*u=@BOV{9P4K9-H*D@>u+<)} zsOYs(dQqo09IQURj*Jat>(dpwa~+vNZ?#2`-tPM;0~MW>-h+&QeEtYlAKy!i4P&6zAin07jr1;M zL?H3MKCh4dHjJnkSnbognGq1*sbtNO9(pz6{Wo<)$}Ul~zRpu+y-Iol07g4Iv!!711( z87tl3i+jV}pwuEr??pgBT=0rA-+Y+lv|a^E|0_yLmO zpw_Z1f+Tx0qGE~)ao;iB)5Ri4Z@lQuRPp`A=}iQykMDfO2D0`2v$_*xr_kGE5u{f) zh2DP{0Y^#(Sbco&l~FDN*}B!TQG8D`A`stI7D0MJmz19{%dRL0xMy1!l=?wy_ zkFPCb1KIlUX?SgtzvAT=&!MC6yLlQhzl)( z^lk=(?xZI>t?6LFPWq3x@tQ(9X%8kWb=MR$nRNC1U4@SH1O_g5R|6|&KrfEAh7-FD z7Dx{K`fm!jytxe+PBkB81O&VntUln^8B0`jOaa?XmW={lENt$ofF^_PAN8_8l8rO4 zLbunpPPP!NeqQ@AHc+?qEE~!Gl@Y0~4nBBFcZEhG>&gjEW0x@kqCFI>KH6<}QDy?= zJJYg}>q9&|Nm)>Ae6}=(023(pOtWJR~rif3>6} zJCYHB#2;Z1BzvC7?oes{ZYd=K!n^>iKFp(2u)WAw>3To^lfn!net|`h-n)dznKv7b zAv#(I%)<-gXlu9*ywT~t0VqG64>4;X&PyyS#W|G`f$}-oB1m@-BLe9?*y-hg)yLUR z^zb;RgA+RQ*8l3B5KW=C+#*Qtn-a`K&cYnav2f3Ca?9dw210rbfP9$G(~z-&Al-d4Y2pK? z=}#~M;*7v}Y{377@^uaPRUSh3&M3>!E^n};6z=1KaPt6&%PoRr?_fm5URAvvoNN(T zeVA9KU~6F6NbgKW&{qJFN6=zEU!t2rQ>&*=h1N0x!aN$RemcJ{=9J{y3IMiyEgR{* z%!t5rPO=D!?=eP{x+V*i*vIKT4ptxE&5T{5v(?J7k=}q5dIwnq>2(x6*JMHO)5W$M zoC#JR-yw{pn^pEGd6u!#4ZggSG7yNb%pyqdB}SCGCJTBKoZib|_3_O~!FGXVqxf!2 zfoN$Fq}LA+(VRj&6v^d`Y?I;SuAt#LbT_i3cox*^i0Gg~Y*cU$4Ugmg{zliKELEu| z_xW;t%37os(?8oH$eC9Nkwetho9h_?#k7&F3sE2ZSjb(H`ialU9V`;)?;WfN zOx|Rr@Ma?;pi++qD|Yw$sk@^SaHHaz z+bId^^twM7==Az-%T4O*1n5q$X_+VBC<`Pf<^T{56IfK`jYxz2E2_E9nKD3O4$uww z{!b>Smka0+gIB(eu&gA19wW;AX?Az=6PB8<9@9B!Zsp}h%|^Cj{9wV^XUQK5De%A| zGT$FGFL7^@M1cy40kGsJ%)pU~7*Xce1C?Dz+W(}MqWF=9V&6s(t%y;bZ@w7D2jIfZ%xPZ$yrW z4wgOx2j4KK`#hk0yfagA>R;XxUKf_+ z0G&_H*c2jvwjz|AOBfNDwqG961%Gl1H{NFi6#Xe;<@(G^UKcPOF=K9}Yy?gbW?2z( zV?84R$HI7vplm!sh+sB)IyW9=D_u^Eh~~**LLZLt*%-nif#vB>R)pNhP2tAZ3v@P) z6*sVpQJF(&zRU>7MhmvmA`NcPi*M1^)OP%l^1*b@Mt4gACp))W5prW0BLdkNW)YN) zdkB#ecxAY&b7MAJsh*)veh0362Y2PM)OTqyA+UNb-j|JhWEeokjA-yEW!hi9PXOv_60%Nba@_gxnhtm$}Mo5mJM@^>?^ zyp59o_CZP{L_dqIOPayJ5z(PbGU3s^Ljm3b%1ODDQIrZQXUO1a=8!(sh7ptlLO`GD zZV}{1Lq-G^*Atx|jlc?NcwN%4^%hD4O*_%~B6#WnT?9`vklx%Y2O6AjQV|qcAjuaq zu)MQM!$?Lz8cM*5MerWSJD9W|)2*lgpB1rHU5$vG^&v1gx!3ugGNxa|u zgW{!$rZC|C#)X!S1YczY%`hQg3R+nN2|mt<@_|b5ASYPPR+;FL$rJrQ4t%(%Y=APb zD%0obgrCcZK;U^6L4F)39N0%J$Jva4OrHQ&2z;jm{=<~eM4L@>wcuNf&@*iQV-X~{ zlo6!`HgHJIOh$mfpGkCc>zE{rJizN?tRA*aOO86BF^dAI*7Jj`&kZvbN zR7|nDQ1gAA?pa_3*?Mpn8Qa<+3|{UIY--!2dzED+-R(D1Mv~qENfq7E0!jWk23E{e z@<%%P-g;CL{}Z?cUQJ?DUGZ5p7x zUh3qZW^23$+=79|fIea|9M9oj&(^@%_u-bE+~~^)-H6Pt`z1l7-yRT9=I|atVjmH` zHa?KVpkCH964KBHP;f`~6ih=Ar3&BwawEkU$bKIhLhtw63}#}Mcba!{Y#)IImuL(p zW|pR)X~Z=0#;ku@Cb=5<_CAUL{F()p{%|$IOe0b-ts!hPytsyUgmz;@`Qi`c;D&6^ zcWmc_)%(>f1=~bs!}nkQGMS<;U!kZjcT~TD6)zJ{hl~}K;Q|PkiR*bt*$jx=wwCR) zF&0YLW5T%678f|TmdyCE!NypD0C zeF22|W6~2-kaiVP&R+&2mLL^H04`=Zw)$Z8E^fYo5)_E`hkH3%$lr5pF5jr~_b!<+ z+T~z{f;)=~&OppiaJTc2K*4PnMwr}@!ni}{&oPbyD>{clhKtpJQ7OR`25M6l_1-+cQaVA{<={8 zZRYwrpN9nc#dcwY{IwEBY&Lds*E+`5U`6MUD`tM1M4<+#?qw>;Uo{}o<u(d+Uws}D zsOaN`5%TxNMD7Us_^sy{zXU5fhg|UaXT}Do-k(LzN&fBwL^LN}z>@*}xg4LuBEW|+ z9C(ir9=$CAET)mU^HOl%EZm&Nvl$Uc;{eB&3s&#xVJX;7VK!`o-%sG6_o_4=>ZpDI zE0$poD#HkL4QPX_cu3$d{>yOhL7Yu=X{c^`^stcJ) zs__s&q&b?i9BF+3Vg8tO^L3P+fPX*yn@gPY_Y5Nf`Fo2H=;AW4dKd3Z!S*P#Vg9aR zb9r->zdIb&wP3|E><GJ1D*8>Ri$E34Ukp6I&&foQn2j+T=4zJDX1=FD#>3l zAUJ>Ux8iqx2sahn*-Vxry&XW9KPK&;g7k-f>HM9+h=uNKCOg}_MF`AaC$M@K8>V1; zl-V$UUyq?=Ea+_W2UK@Bs&Bvwr|rWqe{k9If`HvUqJ`bzjF4``mi{yF8QNKloYVY0 zX$$jm2npBMqX6kY3w{j%B|mhEcQIQbjO)OH*9-+94%%IrF>q84W^g~#l8x%75T01m z<;__ExxLp?xaB=;xUd{GbCUbO3W^gY+&35;I66*du>CCeVumDLH8z9dFm(dLaScPaH_@y9SAakNCHvSC zB&N|M(+OqzS{d@^b_V*-PBekLYh~RLDEX96{0$OClpsc^#)F+dd19Rma|>Cr_is^t zK!5P31MPwpTgFa=YyJYiRo8bKez2Au93bi7k*4^9})X7P`>Dk!fza-earW z&z|D$X9E`{<{p+Q!Bj|MOjpZK8JWlkk|#t4T#r};dC*%loCgrhzL~aQ`m$ACh?!z< z?7LJnVSdUn@x#5DDjqGV_+s|aNG3nOL27sE%fa1^j zd=wOX=oL$y;xAx@CK#6{_zHtpYRM5+atRwtP=x$x1ouw^TE&0>3#SyUCp(>gg9ZD0 z5%>42nJO@Sx6F{~J5P+*)kz1+c?cUNizhH5K1Icp%LwRXEx`&>cS%e?jpT{zZs{P6 zZ`~nU)oi5K>PQQgh)On!*0YR=&s18ai~z0Yz>0Cr=D6-;aH=mqdeBOaU`&|~@7921 zH<6sHB(HLk=Ytg#=Sz4^8N5=5xBGSp@7EC&dmy~`*eKy`W<-3k(t4T^5Z(u1#qb{E z@X8q+(7M3J_0JSqCk5gv5UmwTE7Qd_2CQ)Uwix5;RaC;q`I#vckF?P>PocP{kV2Q} zejU!mzfmc^#|VgSFIWeZls*lL{d*UcVbRCTOFU%W23s!Bia+Hc{mc_=49wm7fZ_~M z+@cg8af)|>71Fsv=I%-c2lCm`YMsNzz}y`Z&}uGPJCxR*+bDjB?k`})xm(L~w{uwd zFeqj^_bK_80czGWFra&NK=%4&@_aX%Nw%xLk-Y`ZK;`%^M2hInoEP~?eDjae{fb<@4 zdfjAvGl+gf^i%zvNpxzI!S+DJSuk3y#-ChGNeP7f`>p!WS;dIJ+nqjS1WfX3v9b%F zSr;%oD7iPJzHeq!z>#~Iqn{a^!iAdxE_4%xa@3}oTw={gI~F@pc-F`hHSRK3dx$ii~4g49P6?o0*;4(EIZ_cLSJ7&xph4rpD% zhy{(dNVsqs+S+Md23CygbB-&E!GY9vwp#Vr7>KJyKNwnH1t$#bM8^DTj;osEvA*F{}pg=U`rk)A)vKvDkY(xS;fYH)*LoUT=N*Qpoh}Bkr7ZE z4}!Ir)|3JL;Xckd1_yFD(`xl$V<3lP16u7wYoOA)#A$T^E2QvenXil#T3J@>i^1U| zzg|G=MMjhsSS>jJ`s5Z{8!v$s=W8F&*K7s{a(KGcx|xlE95xMT4G^sM*}jhg|6YYE@&dV&UxEqA@0-r5~)-PS~aoCnDwHkF}s_S&n@dHLi> z3-hky7gzc+bfvo}$Td$o4ETU{f5+%V@u7{q+tL;;U+7X}g&QP3{5Ft}a`*afD|iPK zo>-ZGD=4ivn;5!$<`!u_x#n7j0UyLJUl#a-{jNYfXToZz_YNJscQT8A!+Trv#gwGP zj9?6uG9-ejnMGfGqQ?akhCa%u@?&#Fnj!c~D%+OMIU#%&WGiKZzuAt=GVd7g3SShIu%(pjL|G_u3 zgAd0@X0~5JnIT=C18@S9X_mQB;>5EIC0&A|6DVU!6qKBp$_`HhJ(%*Sv+7V=(gq{MM>v}-55hhDq&ig zPaLK6j4Y8=$LmUmfoRbVs_iA(@A~tE;~W!Z3-kJ9>!n2d8e{yspPHH{6o#UGoH5Hc z`e<)=7?4FfM%#&_y@}!eogGnguY-$hOk~yEPEZ(U|7W-)HrY7bX#k2DmT0X@>mtbmekvUmG$-!e78sBRjY+xEV3^<5(@Zl24%hxfA z*`H@LHJfips)CmoLz+^cPb&<`E?`W&(N@=O?s6EAMLWhG~DP7l{`lwNA#tDfe%9Uhqo&lWa18eixa`7r&1x@NKg4-bHc;&wp6x2|&S3(Bgu3#Yt@0 z*viaZj!g8XhV-s=5YU@O=J*QI+awX;>jV&x59}<~ix0GV_$_C20+Z#)L@!E&G@jDe z)cihC#n%|kz4;hrl>sHiW8VR>q7sY^E(c!g6RMZz9fhbo4j6a|1-%rNpB)6EdIHV8 zse^`M8N>Ac^tFY#(v21Ri$e6X9R%nvX8KG}2l@^0;HM_a^fVjfTGZ^FU=twpU-u^O zaiDmArl#M4=H4Y(fiSIz@-wj%Z20y&Og@cmVCE&$&m?*pC?0&^AmDuom`h40L(Zdp z>~S)KVsPIob`h)S2G!9~NDwEIioY+>0N!6=;{=sfXzpW=lkO4(1`{)1_o5(5U1y~m z(Ab3E9B(N^r3#>MG~##(_fV~}8qIy|JqJt*&IGFzvdSEHkkDyXv~>$}O|r@rtfG>- z$Uz{MD_Mmngi?FdS965IkZN5~?cr5-jWvNqs%ZDI4ra8@-o*|rs%M2&TPX~w9wn*;UbUXXfGXO3tmaaRRcG(ru{JZJx{fhA z)+ZH)ROd5h!4$7r;xM3!b|35bFk_xWi|VCe%-$fajGl}a6o$l?FlNC_AM*VU1LA1+Ax{l67C5wod?jP_WOP>; zQtc?JbG>S|!+SN&qN%?GHW-N(9-(K^=W99mQtF-EJFDGaIJ zCaR4-a$V{=hXGZz`&eU)*4aDPp+&WQSha=1km{kL+T5%DHcG{cb|34u?x6$YHHQ|} z6=BTd3PY;18M8ojo8i!`t8W1Sht=ZDuGuNhE$(p%z}Yl^-+fbRkZt9iy5u6 zH`$>j){$Y=z6wLC=Zb29S3S*PKo#vi)+57=bsbt%zdJ7!>qjGeK1lU7!nlt7g0q9- zn_z>Ee0QKD&t+0QwMA}_2v25=o`~TJL&AL-vtWu3_wNn^;%N8bo)~64!l6aAE@SjW z>>QpH?nm7yB@1SH)mI$`RMGCIb}6HEtn(aNRA(|qm+_4XL$T(I>RhjSxx;`e+I_5N zF_NpHbv-tp3wEI}sFynCpM746WGX9qg+n_VeEdU{`QgG77@ zWAtR)uP`KD#Fzyue8|^341|pKXb!y~7#$$@nCQhTpNI3qG94U+xN6z((NliE!f^bIS+G&X?=ToY*nOy1GFoS} zyF-g=$FOR)!jS3_qPoSaMjQrI(GFS9gqsfoL743d@zdt7w>&JOXvA)h2J-f>lhE$(mOuW&@?zY&y4g;!a_pwf4w9eirhn86T zhgHv07*ai*F{SP-zNtCRVL%n_KGyn-*4f)VI4RccXH!0OtZyg`slLFN(&jeSrl#Cs zKo#wBzdqVOz7cO^^Bh6_NLJ_)9LCL*Y0EJ8_ z_il9%aIcKad{cZ-S>|4Jk7@!Fg^tBcZ-7Ai)pM5XC?rv*GG@8Et-2DMOtf{bX`-Oy zP(6SK9r|vd4G$d3ATxbSLv)aBhv+>P5j(W{Z(Jbmo@qz(A4ee$&0|cty92u|Itp>95o5>=x~M!zC{xx!Fpx`iBS?;zmNd0_U1(KJk$ z;m{(wyHjY&whc(i!W)b!Ze!bB)U0qAP(^z*hnvh`U8BA-W->(}en(;BXN;bZ%N2&> zCn?=e+B*owPiF2XgXw)Kp?*@ARrJxav%e3RUcLCJW2iJ6es}SHqZP3PX-O2AE(<${Yk7S;S^KTJnNNOYzdcS~Qr&bhTXUm?Sf2F-9LP ztrUhFIx6H)hJ%1ZP07sFl9zh*dFQW`n#%5Q7|U_HI+m20rHs+@I8R~7lbL`CrsgIG z0Z&TE%tugO>LchPR?)Arc61bylM@-EkDwzIhCHbo@?_WLHX!h%9+_=U_qD* zPZE7?z_Rjv+acMLEe-;n>|`?~BM<-V6&}aF%`OEqu6iogd2YCPF*A(0QDG<_`5`Z2 z4gy|`0yC^D&%6WL?p5*AnU~(UO!XNx$GJhG-B>VgzM|&$K9qry;+4P_-;p^wB5!pt zpSGu9$~)U$-_~qmFu&;)?LPEMM(cy{VTTs^e=|m3_uXPKAk6O{G1o9E-oxrPF#RnG z-)xI^znq-S=#}mqEZ3am(4u=ZWAwDtw-~RxyB)>5e4y3MHQRdI@&H}5`*>euw2t>F zhZfz37^8LnX)#{+W=543Sly;3-=Z*HwEK83vFLZD4bj_7@ZAX=+#r!ZUZC#OlN>>4 zriFShemsq$FP>t(h??!aRP<=~(Z9rK9of?kE%FP(n7b^->;6M@XL{Yy7KPEH-A8|! zMce4*LMCed>IR8?wm{vbi8RxwX=tIDqmPuD`?)PeAD?TzXkb3;siH@_kN#yw6QLYx z&p5QmFJ#P0cc|r>yDi4+P8Hq7Ubn!aFnYB6=zB4mZj6y`TXT*>i|#3m(KB<5#dzHY zqPxQD{&1O!7wtaY>QgB@I^OjTExMJA(Yg;?jMx1aqv9LA?i7o{c+u|T9l~gx!%H1n zbk7d!o@6mzx2foE@wyong}P|>@qT#<#j9g^?^2r`(S0$DdCFqE?t_eq@9?@aEedtf z?&H0V(RzLdJGAIt!WcalXIV@peZz#5bT$Lyd%g5w7KqYl_aXn(CN#yLUXm2@Ta3}u zvC3is(vLGR-e{Y<0d$WAqBPol)HgF)N1gA`5_Lbu=o#r|F#+jQMY_3{{<8(5G}?XC z5k~7|e$yi<>MbXSis5C82}oBkFy6*X&$mF7M!S!?kkLAs;~iR}9uk(m)M5hCokY5` zmu_i+D2;X>b;B_2&le{}{lAk!QNL|50qK%PXQc!Ae_-l9+! z?LOWI8Li`;>CmEkGh=jZ=Ua@|y_`|yQ><=V)77F-7wtaYR*cp;Y~s+OTQ97;>%vgH zTXQHY#WSsL)VyL*sEc+V?|&Jsb2!(bMYotSI^M|^nx zT6B*HV(C8@eA7 zu8sC=rECKL@C57vE8Iw&yPly0pryU3IYD9Qs-QPv)OScXFbVCNwND0-5z)ixo6f;8 zyiCCh7R=TRc#N5Y!(z`kB5~;R6DbdKR#@NNC)0`*l>B<0pn*4~k8~JFnYCNLI)M}7 z7oHtq^{`*pv8GPKUmTJ6bqQmZFSdU1?F_iVyZZt=O>!-Fy!eG8l+y<04Tk~0tlj#x z$orK8Pkp|sTT(8xU$;9V@vD+C6?3g$bfW;@X?vxDQoimasQPB~2BxFKfL~&lZ;C&B z3Hk*^_9EmA-g8g4OMK4GW?lV3xv$RmiJ+TUM>9rWtE^WTa_Yxy5+Qa;*24}1PKjOq zg2v(YtIAh{Q}~yWg9%$iWMgS+h%DD!?#Luzw=qWFPidzxMuwp*N;WmZmriIE41y z(OXJ)00&GN{pkU?@3{Fl^sDh2se1IySJ%y~t9{FHoRX}5;v4dcZy5?hzI6!uwym3u z5quMSi6pCdFZ=i=ybOf*9lq@M`Xpnt>R^Q-)e^>( zyT4S{)|}-qpo(@MYaXL@_8K{~sQxXiYI1!(NVO?r{NF2UYSuXnsG{A+`sJ|{tDe_; z99mRgWQ<-d#w!e|K4dX|UN3bRP({0sbwXG*%b`W}GGSEfz}|C`Vm;Ynyy|9$0adj7 zSbuLGiuDPH7S(FT=nj9o!ceT0gvrr2;IDQVP({0s^^UOW=?*QbLm9Kc_3l=tvBHpQ zuEp5nwUya%w#^5qqTR=On5gFOm7dZH-k)L7qWaCBDIas3Y729}!jS6AgyBD;4o4T< z@t@Ni9DoI()9?7u!i;o7z=`Jp?n9r+0{*XWv@&Npv^bH^7#;eN3PVnG6CRYLL%fyw zuComWRM8II`Rzb=jta56BB2_Owr*uA-B|JAvtvSq@o$A8AF3EL$F<8A=30jVAJFb2 zzdOvB>(HV)hB2k?vV$%Y@sg>Df|B^TR=ipg(8BEcn@RxM{oEfJ7GLAgBL3ac6teC% z4=4<&zQ&k2u2;7(H#rQ1jCLRLgN)Xlq=!R`>dnIFt{modhx)`SI!-}JyeC6-%l`c= z6*Ag=$j38UUueJK&?3IC8HG%eR7EXJxx$d@2aM4z`woYJklCI?mj>TQ2hgPfoKyzS za?6-R=eDaO5ofLoJM$NXA!jZj48O&I9FCe_&r~TuyH7z2X4LuL=+L72TT@CwxjXM~ zYZfUCslG25cQ(@2+~zQl0<`;Cf1J@;HRjNwS}2UJleabP6^2xY2xhPCet8VLLGb5@|%lN(=Gi}WZg(20ikK%kZ`ov*oI}E6z-N(9;(K^=A4lSzpS;ozd z@qC3L)k%VB?p2R>7*IvKkM#mZ>(c(AV^XXqgjF{w45=oL#8}-Q7KKh;-Ub|i3))W9 z$=jNFZU{KB3*bKVH8eQzYVTNwme3zyOu1W5+M0_MhMc&GG5))++nQDm1FC3;PF@}8 zNH$Zs%Ot4?uf3AvmxdT#nF45{8> zRec?v?l7Q=c0bz#!m9NhT2%ka7~NmC|JCP%R1dSNzQ$f~7*IvKkM+|dC^I_NyBu0n zS20Gn&jN)Z)j5nQ@9b5(I}E6z-N$+@qjmOU&bsSXjOB~K!*WUwEI}6Gg@c(REHMTLBi;|bFOKq zFr<2>V0PF(nQQ*n!R7;0(e7hCB&@p3p+)tJ!zdriU3bnkvlNC@*9vBfR~_dtpo(@M zYZ;?;tX&;iRId|8cPAy+{6%3%^%B9j^N(EfYkL(d+I_4o!m1k`T2y~)OtI>d%|!}B zs_$EjJziUx+Z+aBMZ1snaY4J2I6B$Iv&_rfAQ8WXq03!=%rz$~42fSs7=60EJaD?5 zYxcBL8MqkWJ_E3Weh+U(UPPzPbbr=o;^?qX>)YDAiBCWNi83+ApN03Av+y|zNmRM&Bqig7G&6x^As`-L(v)ty!xur273K9IHCre$Zh+741IOb&S@rUgyvf>wL>- z+h$vHiNcWT6v3#|?bZ$hs%ZDIUK&>YtxZy_Cs{^+y8XVwkZOIwsMGBVhXGZ#=g{9X zfa6O3RtMdO_9njfBaeFUo;pg|qOAz*%@l)6@+C z-$n!6XQXr3i7!u1%1E=Y6E7+ZIq}266b#+Mp(CcFdB|Zv746XAKYj*I`6o#DnqCqGHvm6GT5j(v^`+amUy+jLNhlcavGxIQ!jMcfm%#lcD zZea|4DXCQ5$qGZxToHDrfy00^Vwd|bgYEqnOprfJj$|SI8t|H&q|AI*pAP|*nFkbx zoOz8fIkeD{!wt+$4g=1h-KXF|X4J*e!=WVwH#26ATM$~99EBm(eu62m*A*>HhQoj= z+jHoJR{Odu%*z_MkPoKe(6B?xTP3C8tAi*FbKF|d!rZGca*kKnrt>!jSldf^p5eh56}38w7~6-5)ABPzjKU$$^5% zU=s2~D(^{0BF=2f;7qvY-NKY83^}ucFf1koG0I`U8Ec;n>M$kt(;oS-=@WDV3oY76|^sFj)T z&?5c@WBjWF^hJGmuXd7xQeGZmD7|1ybS+FThXHZ4!+O$xV#7%@ESK_8jVMuiyW9GOkgBIpGhk=mM z?nAzZ(YmnDb!br?FN|s-XrVBqdZ}RCjrbPu{tOi>+I_59Vb#|hT2%KY_QBcCSl#U( zR~S;=EEsn^(!vxv48)3dAL|p0*0J_;Xi>dg7*(6^pfIF*b+RgbY7m=Erh|g`l>qZ0 zpAr`TAj>95#1FQ__5z`Wc}8JK{PTUB78UZ{4g;!a_aQ&aXkF3699mRMEu&SHKa$qM zoT;EBo=?ymI?WCC??W9Fd>8^S7kNp=PB=9;r-VKEpha^0Ay4paa+uivDkypK(eIQ7 z-NlO?23$aUN$KaH9LKA&9HRMh|Z@9x4n0nu%+lGhUtb7-Aqe|?>5t!!)@nXlkBbY@Xt@! z+_iLc`LJ`Uq%TU0cUeY!-=D5D+;$Ek;|9g}_OCWxn5M`yVO$A&wNt05=}c6%fvrSk z4*ljiE%7YMuN#QPXUeEdB`Vj!7W{Dy`pqmCcoyYLJ7TG{m0r1vS!hS1axabFqgd)V z7Oc6=U@_nR0zt-qgyZ?8LgWGV$V-LI>DjK_@1t$XaBmS^XxJm0{_YR_C5fkCY%y85 zEP4y){jlG$bz!!K@Bf^{mZ)4zt}RjyUX_NiyJmF$?Fli?B(52X@z6AkKkZRIUd29+ z7_l$JSU_C)ig5*uOcnJbn$h{VYgIUh>WCkkhOD0^^C?UsOH}qC$GR)`j!naOkY;r5 z?FliqA+8+7`0CH81FnGmZkl}xLyV1>OEKP^6qgNw@WZ>JOM4E2>$NZO4!;R zJ*8|J%x_7&@w>s6jeBj&E+R~F6S&9ft7Yx)|s%6KdE8YnAI@4m`+!Mtd9%pWMcKpDQ^4d(VIkN0sYRW z-`v};NyFMlSn-4*nzPb&`IT}4K|6}da4YFF;us=CL(t8-Lf9X~bxLvDrxeGfYAow^ zWAI_t#jqa>pcAqBl;XBeDYJ%~%a}B*F=1^+tUjfGddsf+(i56+6a@qy)$*d%VEEp5TC*% zvS15g#_4GoM`=dq9-flC(qfcRoQMV3e-1=?ms9%KrsZU9Q zK5l_yAI^j6H!~KeVVsbf5l%*ejPDQ^o|q&mneogtjK?{~z-j!{WJZ0J!i-;hlRD}* zV85GdH#55uo{_J0bgN*-GGat)umSxeB_p1X*r=INw+UuES2Gr`+ze#^-L`i>a}pS$ z|Cx6>XcZUY?{;s+*EKFGL!zS9MRW&#+UE}z(Q82^#m7TKDWVsTN{UaT=h!BI%3iqP z%4Oc&0U0SoiembF$Lei=I(SnN(MSJNhAPzt##EQ>0W@^~5`2v2EV0Y<65NKBigpy0 zU?<#)SD5|bi9MgV4mHRWU)QWxKQjcj)qRma$gIyPnkF$fAm-Wj7ReuEUZ#9r`E}6e zC9tjTmi$5H$%=Vs5_2Eeh78L>T5YPg1(Qwpicrs;yZ9{6P`rmE@&5J|dhBkg{6UXr zE9NJGNzdOy#O&^_1eyKCzV>-*8CFJ7$!7SiP73-FGw$TdxPX}5jg}yD>Y9UVBx2qW zWd8k2^ci)w zITlVlt``B1&Bc95%tge!A~kcmG~?|b>KN#uWrjDvfzN1SpWDJV93xxl1MevsbuP5k z5;{ww^iuTPO@I6Xnf!cx4%@_(59E%?FYoD@%9EJpSf*u~$t@mqW|Z2eAxTWVEYoDo z9zj_^RyDSDNnOClh4ztv>A^lF-?GNmuTk-o%JYJ z5|uxIP=fC5x%EGZskLVE=}B@WQMrYfHq&pef}NiSqx%@P*{9?iFS?BK@m@?mBCJP` zCGp&wng`EqRBXtzFTj(R#B-VB37yd>ofMX8RI zS3e8pXgO>XlS#>>Pi6K1LNQH8COTn&qZdwGu7mCB_$=Kc3vr0P+{10?z1$u+6ver5@0HgLw*WyR^7tqz~M#rI@H3y=Q^ z&kJ)PkAc&-lHt4BRSmduaNeMjA$!-3xXb=;_s!se;uqX$Jh$*WT7O5*ZEu zd&LqJd*E0!k8j_X_@TIYHjT26cD(rv2d%jb29?|iFWN^+@O=Z3GdD~;w)oZ^Fubs8 z;t`h@eIDP@q*r1S%+t$jOD3Kexod67)9}`hNW?q>zoxH=!gxUS(H!v|8Lc-ItzB(e ztp2TToy~9Vnb@TGZip*U_}0XRP?9}+CGgC*c+g(pWVR7^?T-HCHzYEB062Z^vww%b zS-vA<+H!O%GO1N@d>8w47<|iNq9O}+nu8%e;4$sMvObQ$I?RcFBHx$&z*5`<69C(d zdt_(8?{3+d?cR!>x?x$}x{=5Yjh5Aehv#8zWJ1Q;lItVOF0k8^b}j1)&)dC4fzwDF z-y=J7cXZI|5z$-V&ySyV)S5b+m!LgwKlU}NBS{3o@oQGs*^j;Me(d%3W6#)+{h+i?jAjw|b4YPksx9lb(qDOVhZVtJNR%J$8N7iISu&^%g7wcpCL3fzGc6lz&eWQ|z z*;yq8*{78(Z?XxR%`^3(bmHsl^z3K0eM}R7=C_l+jIV2i$Hv;bXna!|e{;(5&+_=X zFn)fz@$W;GPG9@CRO3lJBXRv+xc+g&zq0Zp?gH=cqtU;^hoR#;no+E6qOBq9#Ki0z z{3)q81_Fth<7j*%*p-PtG1HiKWM4Vh9u8246wd|3SWb+bk13Fk@>W1oUH?OK)A5id z=&+ZY*FU0+#Mft>xo^^E)+@~G*3BjH;{gxIp5`%zef|Cj&es=kwLX3A#mW39hxo_T zj{gGB-^biZ_F62~|=f}W-k3`I#=j0@8VO~NL!r+Eo*j^yU$TQ`5*P#Vl#L40Ev)3~R(H_U7CeatJrVscKc z!T)y3{~lTz{ny5}VV$5qR0usy15Hv3|KH!@^8y{L4-~06g516VK9(I{mwDw{>}&`A z9mv3e3>?V7feakTz<~@L$iRUN9LT_d3>?V7|Cbr42jq1kbt9)uZaFy%e-{+MG$dId(zOc*N&PnA*^m_BmMypWHBV?Wi%hdnD{0iMv~lgndIM zhxQGrwnGL5}{!erFpCvMMmvgZc7 z=LWlH7(cnmj)EtQfhX1^qi&ikqi&i^qhPWT3iAsO`P$Bu{JkO24%8N%nIaR0DT*W>dcli~NcNn^$hy`})e;%Dd& zKSMvp4H6DLlX(0;B#fCr zkltv@0ilN2dvP~10Zr?yQ=q>M%felw+Cw+PO=x%OU)5CDm==jtCEx*`(+@t!pIiY} z!7B}`;W=#6zAo_EH~dV4{rGRsRDMJr{I^TCcO`h+{jTC?yMTxOb*aOT(+&c%eSns2 zF-N8;dt@Knb_chn!b75GBy!ijM4f4oItLw@1+Hc`m|nkOv@v|zjsFS3G~9yc_&62! zF$1q5^&)kqB_P~7b?Z&vciZ^h3nNwS0X7vsKoN<|@6vnO3%MOS?9PS9Rgj-m@O;%P z-(Pqg{CwA;Lq+cW_nlew+QyB!_g#O_Eut4m<_r6W5qSONc#{1M#ZN*$e^yr>tN1ZF z|9*auAO8v7=2tc;Pu2$e7_0EGFV*}uET{m@~{a{_68kc5 zYcPI#@A?ZHMxs@X+t;ZR=?Q0>I2YJ$pkKgz*jkhMLP@KMJX2Hrz%Kch3oqHWu&VGp zk;sKDe5Ab&#SqvZ*{1N@&<-YiB>Z03!k>&tW~34PhF5mb9(a^7%ozC1SZ&AW@NcTX zx?pyp%R&|+S-(P*iK#cCY5Gt9i1e5fS=!DWQ8EDf9rjb`$K&faj5LO+z-+;G2Bs0R zKK-^MkGnN7JyE>7|9_*KIv5gyXg6}so2kj$KUjuVEo?cKgDI`7vv3A|<(gk)^!A~v$U;&0l*v9>cL0bfDwm-ub+3B$h{Kg;q zuL_>P7>9?a#NP#;;J<0`W9?WAustmy+^~t;S<~SW^}vpr)8OSk*iAfyU&VIp^Z2g{ z?OnVZ@RT;l-zs<)2gZN>rU4)Lhx-wO z`{rx^fN$C=;DsOJ>jHa-Btyh@I!nFc!Zy-TtEK*Ved`Dqo}&5(bJWr zyVMwvNyUJGh=3s=BBF)}3J4Mq5plwZ6M{yZ08t|%PKXh~S&X1Kp+=nN5D_QTi1QpH z&Vn)GJjL*>wd<^w*SGrqxX*X*ueYA(>|ST@wf3r0-PP$%I@K$gJI~L-(;QN}Z#M9F zG7k=qkJX{EIZIy8edTc)GZ+uymB7lM2h!7?kNT#1ax@3)pKWjG{rD#tAzR0J|J1o3 z+7~i37fv-=(44m#^qLJmhuix(Ty8G{BP&)$CHxx`Ie)mK8xp}OW;r{=sL(inW(2L0!4`sbX_r++^B`G%+elW)hA zDb?X&o1fe9V&dQPl}zI2^}qP(`ARFN>-zbDsEc_(Brl%ZtutK0NifC?QGok`DEk9 z)wn$sw=MCDqLsKEgWFE{X?ZhlXXADQZU^CCAxp5IZLp8r5@(NfiSjV9U2b;v+(asD ziCjL$&mV5wh%1rV7SBa*RLPyYqM7eWoXZP`<>l_*VvA|nGu__p_v+cVYZvw#gz+#q zdZokMIEAy1Os3w8-iX#kUJGQdvFcT3oi-==jC3K zH8`*3#o2@N+FXz`ICYE{Eh546%c<|K|UFREBObQv1k$Rp>YK|5Cq0(XR>p z=Az#Ne*Z2Aa7RtB9V*G|G)jB6@8($4vw7LWu{Zy$7K|e{nc{BUH=^N~q2Hl69~=HZ z=*`E;!{|Nc$>xpk@&P&|H{nLK%n7EueOso2>E$hx!StCevx4cCAXv|U zH2B%UFARQh@bmlP*?kim~eeC@XEyv z#mJ>CUgU3yn`yfy+_t#=W@^ImeF9&mw8v<`obLxX#}zFpjV@&e(Hh5FH-@g0q*{S=G*1m63O$z=9UQ!c#G(BZ`$Y?Td1y7~ULBCYAxqdE?|3~9RtFX~ z!#G3lw18V>r;bnICP=lyaqO0zGiB;Dm){SS?fLqZIBAv zw>cTSygtx`+qIcZO?LJ(Z1Xton_y^*w~%VR65$h!Hd!uj4Q_*xExyH#<$v?}UvY%9 zy0^^2P3sm29BmTVtL#=V&HJ0>9<95ud=?})dMxL)z+$p`=I_ZocX^o4zXP1L^Oj?o z=V2*j9`@^*FKBln^IY`|pC5;P&g#`-4)c?cpU-^CPjYQv1Z~@sk8|y~H``7h;I`h; zz%KpWHoF+wwXfTDprQW#T>BA3laSl)V4~xY%Rd^(<;|vVhpdw^$*0d&Ms2CyaV<6}M}nlIq|73j~5 z=Ce7!9Qv8j{8Y}dPwuQ}K9Tc}Fh4t*kHNfq74E#vj!We7F`C33)?*MrPuHm(4$%WS z%<2guQTapLgxmRU-m4Gfu@WqF1*>h^nI%3k@=3bw(e9yeCBTmu1xy^{9@>J5+wdG* zjeDfSfpC5JVPwvRU^qsHZE=!4vW%Q9om-00VI)@eC^L^@_Athlr@P0tV4~L$^hpd# zq>_k>vjUp6A>P5EkCdom?HX;0f0X&-b|)y?59FyNr8( zD(t(Qe!6=puoJQvwSE}MX}uHfBybY$V*H4CCCDnko(FS~osRNp7%uq=e#!H&ajpcX zHpm)7&PT{ziTZ*xC$B5}ERHzS#JLIe8`GT0#<@G{>LH(yRr|(YmY8i1J7ss`8t~t%A zFwXW7r%s$Lz}XBVy1%|M&dw3X;bCWMZ-;sta&pEOBwS&4dNJZ56x8jsQQw!xFUt@jjgPEPZ7?#caQ^t?ghm4kD3nm65ejGi}H zyi38kB+Xl4JVwu3Al|j$T%G3S>`Y%q&$FNIygzOQ=aw|@P~$Or-dgp$ADrcB-csW+ zdR~a9bzAQWaGoO1&h5X9w>usyuLY?Ba(HgPjQVQpH3u_tax6mSUJtfBn!F{byaUc# z7{Qg8tOcm2$QmDjT~D}u(fF+(b&(o>i~2fpa@d%h9E)uHcCh7>YWyoWKVw+q1YV$S zq{tfIYK;#-5pNJ_XQYCQG(B}jePm=n!qOlJ@8a# zr9A{L5V%U5%^x92To1vvxmSL0v8CZ5O`G}g%itETMHa0aJ0Y; z0(S{~D)58A&UlDhpS=X83tS}dw7_cuo$xp?)ii;@#V*CJpu zhrc1kJ4Phn&=)TW%wa0BWf=D|#nmC8QYz=&qgQN7M92(KEK@QCTO>`hD&VfCW_Wmf& zp+9~tkmVLd4*4zo8uFmY#jyLKBS1bzNLHK!dxY*TRO1{fP))c;B8ORWC`7{oIq;4w zq61lR4(yS1&t-6U6V<@I9yzR)!)P=tkwYoK1Uirv=fEB*_elnaZSc#Ig!?vf*ayD> zh|UKzER(}5fO0yJ73aVnN%v<4hf-7ndpC)D`ZhVtN5cv^EC#5g1K;JvIj~2{wM8}V zez?un&>2-YB=N?}*03B6tK?7vP)!H2;vCo`>H1`FSZ`}6iX0}(VGSDA%Ap>hjt*qS zIj~2{jm+TC2d|0~?vTjgWjQpWVS^l+0h;JQR-6NSB;BM84l_^<-06`+0p6n7QOd)k zBbSddKDTxR$j1oDigRF(lsi9zL$$5p^2lMn9178}Kn}$KMRXu5&VfCWt}=r|fEOKs zTNXKNki%#+ERjPgzyvyw73aVnDfd_ghvBFu+_RCxSo~%$Iv>!mOb)XE%IQE>oCA9# z-J2O4=Gz+TBZr6OFdq#oppFh?W!;BN))NfR zBBbuZ4?gw?-43V@%*%cbiR{Pu;}EuVI2zT2>m50KD2GNgY>-1UKocFvigRF(q$|$g zu+-MDf8Az5(_>=C-dGB|v0YdAh~SS*J^G%S!qF+dR= z$cl4dkEENH!J%tMsNC$xfp36q4WrSpL=JrFoInS%;vCo`bQKvKjzTrzu8$n}R?!@$ zqG6dFW&xDbfvh+O_DH(hGB_-FbAS=#+Jwo?%28Xq_hF2no zZhU#cN9%Gltdc_wKs6o6igRF(r28;~L$~eG)O{5>%$36$G^~|FJwP2D$cl4dkCgi* zgF_jrc%z74U*U{fFNa1nY>-1UKocFvigRF(q-%+4+!^9h@Iq=7`ITWH{fgFkfis(RAoCA9#-LMP}#hrLRjEx*x z@`-|L7>$M{awr9uKnJqo9M~h}j?Un4A*u;?a^!Hj9HydSnH**Tl+%H%I0yDfy7CMT zFWVaCMhWXxW)-xHWR<&xenl4`^5=hZ=xtI*=9T zz#d8WU^0LaG($%=DekCe;8uU_NMxb9teKeRv< z=QNLabUvVAfgFkfis(RAoCA9#UB?)Q5qRWJLp96wM0K}B(1}ft;rRei!pWhSlmbk^ z2+7JSLndnm!)%1qb@-nl_6Xe`sP3Q0ei(`DI}xxY=}=>97#cauVN*Ix1t{Z$4zmEt zF+#H99M~i2_;;^3hj0h3VPfR)1)I`=uYf8zp~GT;N{o=KI0yC!-6n9BKfn=|EPT1A8RhybKPNwuWmXhh=hDgNC(os0XN{16gqn>=C-#GdO%@ zYj_}X*c?BsYz>WQ*dT{yfF?SS73aVnNw+eC1HYj#%hg5>Wpc>FVsg14-VYrC@-afP z;vCo`bRT7KI2+Z3`#N%1BZopXERaJnKoK3tigRF(r2934!*jNV0Dlg^`OpVHO6(|& zM#B<0lmbkk16gqn>=C-HP>p-Ew%(Cz=ny$vDTk?OSSE*A0OfQbE6#yElCB_w!!f94 zxdD;G&vKZLh81#H3{Xi2vf>=rBXs=ZS=<`#ur-W{9LDp<5zn~gXjmnO8h~m#kQL{^ z9!WPLgTs1T!{o@}aXG9(!&*6L5|S0?z#gGHGlRpf-FTEPh#cDUshn%5NB258XcCeY z=fEDJyAsv7qg0M+;1;8b$5Oc*8qvK$4$S~f7$I444(yR~_o5o-@CvF4_XMhNsFyr8@RV4he3E6wxd*th6Qpc1}LHfS#b{Rk#e7B zaF~K>!hIh(ES1A(G%S%rDZm6ekQL{^9!b}n!QpXR!{#YFO4)b{vo%abLwl04pFo(D z(}Aow2lhxg{^dFDD5bh{4Le2-ljJZT4J$CBpFjYWbRa9vfjyG0Uj~Qqs0MCO?qZsd$k-i3CW6cV2`9bF@wW5wuTvz zLxmjHpnI(xGzrOyb6}5@yC{RhE zR~0#o!4r%frDim2l0zPzadR<3vf>=rBk7*X;P9HQ;l;?|K{<3p!+buK+d1tgAz5(_ z?2&Ts#yBMTL%1hY?lV;TCxSNJ&~$rb3(>TI4s9_h1}MS^$;#@1OxCUp0})bXcy-4f zq5A>Vk%{a}`I@iXzviREWK97dyIi5yA+CeVSbI0yDfy4*0{;Xzvi|MZMC zyf25TXvp`lwuV^%<#Zq`&VfBbw^Ig(CR@XH+HLKvtXs zdnDb=3=SXK8ZL|+CU*BnsSynu_bV0~!{{p%|cu4rIkSut(@#%HXiV*6>c` zaIqXlqhX00N&zO&fvh+O_DDK@W-soH%k9NAY=|7bk;7CpER(}5fO0yJ73aVnp=-+E zFb36xwjHJUXjmbK#Q>FbAS=#+J(8{ss{dL;4xcryMm5W#!v>e-a#@b1 zRTy?}Yw|CH?fA6B7Gb)@f0~%bW9Grg4IZuV;Ioy~bi%2IVIG>qc~BfWwfIkuB-imF z2!ZPq9jR&RzXrW))xRE~4kIM%Uncha${s1#`@fHrIrJ#xeX&>M@U9#h(Xc@d%>Yew zAS=#+J(6z!3=T6<4cz$1VE`U_c8v1y5;K=CGwrMc$j1oDigRF(lsi6y!;7|t(;|mO zawtT@0yz`|6w!gKI0yDfy4e{V+V$odDk6s_IgCcb5;>FtOrQf(z@e;L?0 zL2=5d#eY6t&Eq`~5{}V(bmN`Rl`Ka8N_l7!=Rt8Y-6F>0PY?pf=so7iV>$X)$wQMk z4~kRi7XRsCXGMoT^jH<$8x87TgWlEZzXqTdBP8ozCU)MjN6NkN-}i<&l%bk%A4d+O zxg;K?dNiz)LnA-~9mtAvV2`A0_-_ZhFP^eBF#6;4pj?{Kv`H?S{L8@ZZ;De+E&g?! zp2bI2z5pT1{f<4@9k2grSchyL-g@Qo?bn-_bOgx92+7L&3Yn}841Xe|2IGmAJwlh- z9OqIZyOgj04)m}8=uo%|j}t#C28S7PC`7{oITQmF(SfWu2lhz1E*TtVqMGFjBZv3p zFd7X@B8O%(igREOe1;~2!+KQl8Jfspl^hz;ut5&Z08Mlt zE6#yE@EMv64*hn8%Do;rbj2h(AMhqSmv6M~d;rMD2+4|bV2{v!lEL8uRPh;_$l+o+ z6ry2)9Et&o=s;GS1AE{zG#MP;L^aDLx3I_3H*y$_h9z<+1(-kwvf>=rBXs;How#$l z9X=+HCx*yje@vqD0S(LKFbklZ4rIkSut(DM%;0c1s#&go zz#b`gP6mg)&@|yLi5%XP!x}WKl|wy19UaJub6}68yEcQvJT`SpBZq$d{ZVQ}!v;At z12oZrtT+euNVx|xIDCL=!mWrLu9ZU`eqoc#U)tCi2at~uk`?E`9!Xc5!J#{wy7wc8 z-{nwa^KC#iVgG)F`(el){wUR;VYM9A0Mycf|D+V>z#d6=X@)iI&E0m_L~FQ1 z4)thQCkIVJvf>=rBjs+3ahQ!)Wb;wYa`&S;AQ6On!tMrS8_~Ui4p(5(4A6uTl9hEU zGFkUBJcf`uahIqEK0|}*s6_T9NMxUlfGtUf_u-ImuS5vQ_-+Y4zmEt=|EPT1AByS=L`-G2PWZm zj~srK!+bQXki%ktN;;4g=fEEL3{3`y{ZY+wVAFTw~U*KJ1JG$j1oDigRF(lv|R)p)($!33pHA zFnX{*N`+`xActarB07*2=fECG$A4&vdn}#GQ^36tIovOY(P&sA2Tek<;vCo`<=)BQ z@Pw`5)5xLKK7I|Q=srOXnuKJDxC;?>N%a+rng<#L!0P=OJW73aVnDc3E7!y;4@u5aWpU|)Zf7NcRM9F_xA z(SfWu2lhz1!5JLZ*&0Sg4vXYagND^|&?F=)&VfBrZbFR1K)l=8{M+P>X7oTO2v8ltW&3oYNS#hK>OF7$I444(t)S zdowt+!%2qE&_oVhhWa%WqG5p?iUEq~KvtXsd*CxP85|~}n&sY(94?f@Xf!O5Ln*)n zI*=9Tz#gIdJcGmCwubK`hp*%?6%EVeFbklZ4rIkSum?UvlfmIKvtXsdxUOVRO22?#W;=e8Jfu9ZaFMR!zww{094a~tT+euz-MSOILt*g z%MFSga`*FVSc8VOa;OKWqXSuS4(t)S12Q;y?;Vz-VU-+e0IKOgR-6NSq+I6= z4!!VHgn#^x9A?R34I0+Up&p=)4rIkSut(ArWpF6xlbstLIjogKBN{fyp&6iw4rIkS zut&-rlEL8>Tf?!D!#*SZQOfIyGY%s<;{ft8LbBo<*dysq&*0FWPj+rro4FjP6Bp&?F=)&VfCWZdnG0DqF+Dk;7y;j7Iko zIcO4+73aVnDfes!hhNO$waDRRIh3ON1UXCvD8mTJigRF(l&jC+Fa%Gh3Aa9SC>Z6B z(kwJAm&1I33ObM#=fECG_eTbYtN4WNa$4CLH(w5m(XdhunuKJ|nGv!c-h6Qpc1}LHfS#b{R5xN^QIE+ITpFN2jK9s{~G%S%rDZm6ekQL{^9{B7@ z28YGAhEC}Y42vAP zjn(;3fb#((Iv)V?F+#H99M~i2_z&@M&l-oKn&nC(hq-bnM8g6(XcCeY=fEDJJ2`{H zE#`1msBP1)%fjv_0 z)(j4Nl<DrjS-R+=fECG_j3k^Zv3%^OR(7) z_qH6?pkXbBIn)ExVT5GGIj~2{wLmrQ(K;PfTrDqBI+ zzF=rXNUg-HJN5|O*Qkz3WPglA_UryNA06IB6`ys89EKh09hReEl^kjSs_8&hoCAB{ zvkqVKvtXsd*HJU85|zAH4KRy%H)t&h;tgl?uU*5`4}NtaSrSex`Q$}G}{`EiX7I+ zp%4uVyW`=XS}??XB{Gk@ki)(nA^8v%o2Tek<;vCo`bUS8n7-L=N?G=!ow5a?m6sE6#yELN_Rb!_}w;t|W38 zbfiB@h3H-&hhl&tjF7B22lhz0BQiLAj%vc45IHQB!)P=tkwYoK1Uirv=fECGHzR{X z-*H^SoX8=&)URPG8kWgn7C<>2$cl4dkCa=O!Qp&V6Yi$SVUir?qhW;{76Vk$fvh+O z_DH&_3=Xf`8Xk`vR?A^I8dk}n2B4Y_WW_nKN6NjJ!D0J@xdvW?6_3`QNBN_)1`TWF zP!CW?2eRTE*aM$+$lx#))xb4I4i$1}M8gI-XcCeY=fEB*_jd+|$7~IoZEb64ltVMR zH_1VhkgPZd_DH&IP>p*f;Kp+eT_cAv6a7)j>w|L|BRZ%3BqS@&fj#h9hYSuQ%wg}y z;XyfcMALjZ6ao}rgk;4zut&rqX(!y|__NBcDtqhXO8Mgx@4fvh+O_DH%Z zsKz;bZEKhwIn0nlDH=|YgC-$aaSrT}au>!pOv5X({)a&27NA;$|9_>!<;YG&cm97# zZ~-Q>0Ln2!va+s2ChHc4dk|9B;ME;_gl-9{2PU!~frA9PtkV7*-6CHS| z(l`h92;COj#IJ!bh7)dURN=5n4tcxajKi>dx+6e7Mo3ni1A8Q0H&o+}(vPTSxxT2v zq3dye4gCL`0yz`|6w!gKI0yC!-C$JX9E$K#HQ`1@4j0Q|G#Zx3p%h>O9mtAvU=Lg` zB!k1nsN%B@k;6A~n2LsFa+n2BP6x8$9M}V&b;#iGj;-N>$YKBEbv~eBg&Yzn!C^A03HNB^kT=P%VGSDA z%Ap>hjt*qSIj~34t;*m~WozJdPw`kfRSu14*dPZ@LbBo<*dufwXK?u59M(k+Z_1$= z-J9f~Nk~?l1ABz-_Y4jL_;TB2Z)6;FawrBUq61lR4(yS1g&7>)wKeP+Is7h%(P&sAhf;tEbRa9vfjv@g zL0y+IC|gk;4zum?Wtkip?=bNDTCxI+%j=-woUyj^knVT5GGIj~2{CELfJasBa@ z0pH<*D%KF5xGm0c-1;O@Z zApORD`quU-8`SrV#7I(h5DXz{dvn{SGvFt zU|eq-M|<-i_`~)G+3YhAT(Su9CL>G&VT&MWe=_%lgpo#QgV-KFoD%MI5ORZHFA{o_ zumcG>&mk@}0wcFAgWw2~-m>~K#I;suPztj zy|b*&$gO1%JjFV{y4U3l=#X%)q7qnSeXAh&i1p#9xSS@iw&8QGMb=vd!C$QBTD?8u ziB@Oi);b8bn~Hi*tFMIq39B=5YlDNp`s?OjkC@G8D~qhR#rj!qw0a}Ht>FNxGjeN( z^|RiLip#kWti@Jmz;p^|L<1>bZzl zTAh(wd#s=Je5?0F{M71<+_uB|PeFZ8tDldf&<7_?V3GCwAQ;5@VpOsh+CdtRcq>Rz zB&kCX98c02Buz5XTErH3{6&$ZjzMr8NI?qs^k_V}lwf54MaB1N#r39O_Qz2yy4)VUNhI6ILt531A-|qnK$5MsA&hpx3E>ucm>0`o9&}+b>PQ*c*y2L2#5Q zaMH~NdzL9c%l_UT!)p<*#UYO(p7-4jL9kGY3b5zJDDtt}_-aQ)D!K;2vr=3S_O&sJ zrKVt{V#gr(MT*rb`F9! z#M`nTp2IMre$N|^k-P#t`H9yXoLern?+o^1V-c#f^z^ykb}t? z0H>uz_n3&$i;k7(8gQeL>B;@pB9}oolcBiw7W#NgL5l}Icef@ zUdHZyWFkgx{ez&4qOVbT5rXF_`VfBQ(ok4y9{ zIL}D*CBWxt(HSOU^rG)1O6`diVA$?y;&N`qbM3b0(}|JWo8s(gT8>D0&E! zkpLqwBGJq_6ftsx=n#oc2InM+t^l~4qU0@j+Du+d(Y*F}`w#?kDX2mA0o3oq2p+)X zEr2<n+_Sn}Bg^q##-$(J$cqB+=G;;guFfB--v0x-fdtj}q+x&h8lIbOgX*Y0**> zF?!KXGyU$J3(h$bEdjVGE$T6sPK;hOL852Cd0L{+0X|KO?l%#m7cG=1rwH#jFl_fU zaXF)K@QW{{6C<~QLGS`aC!(?w1Upi6Bqk#O_QUX^c_u>S2GL&G} zM2ue4=Pd7ZA2|0)^aj9dX;I;2bYk?P<0bkDoF61=I}op^F{0hO!$gc;v`C`e!PyPN z)})C`j>IFPV+EbAZSP!h5WGUcWMmHm`49?@z~mf&voKr^1yv?syL88k5E=`M8n~2ei-j?WIaPE;v6PGg&-(+{d6?9_cwl`h^L6m(bD%pz=T+UI5 zYmCImZBP(&JO`w5l1?#FKg3ZB*ol$b;2_wSB!0DC_7EdIhOfY@H4-EDai1WVOw!w^ zWWR{ua*jrPTu#y~l1?*Hf5d@Tk;KStzaV&!q=QHrW~40;mm7(Z+wdTG zkEHG-ZD*vl*t2d|vlAn?5kb&I(%;QF#sb z32v8F`4N1;IFypGGCIH-3==a_|r)J7Cfo!{tzP+N~5ZdeNm4 z4FzXk3=^FIaC};nxQ!x4FRGE~QgAMj=pKN((xQ1LV)UY)BzhH`S0wr#;JdUa_jWol zdQtaTeob2q!X1cVySFRAE*R08=9`Goi;k4&U~mq?Fp(yBhmSAD+-n(~7`dGt1alzD zz6F)+s}WqzVTgAciILkmL2xHYGf0|Zq+9WDXnz+wF>)&pf?ASRqLTfPJ!b0gb&Wq7 ziILl^Aozi#KTyeTKyWz^ARc!&J27%QF9_P52htjno-xuN==ZLX7`e^HuRcg>*9D}_ z5M0ikJ0#pb_plQqxATKwB1zAolKmKh%jtqnPa27l$8Am!Ttw2|-0{A)g5YkF+K`ko(oDo9Mq(uC;vjg9q-#i;Yb1VMX_w{f#7NR5LGUw4op>-?+rj)0 z@pdCIa+{0SgR?>UjimKPx({)y``C$*+oeHJJR781lAbow8knAIBt~xYg5cQMAbrby zs<(aWi!UfW_#|XLrlJ`0CaL50S*kLvU3P{6^BtsAR7|a5;t8{f-Zl#7NTBL6Cnw zNF%wrVq0BpC%mLK5+h011i@gE)}fMJhv1Sg^~S+`oSl}o$E&3vI30xGD`d|cgfDZ) z2tL5%7JwxfF6U>=hCM+6Be%tPyi>FlzGC;4LC(E|5oBZX3&2kpE@ykpR+xy9+maxt zqo@d#?FZx6P8dONOhy3ghv9M-!>QksbYkRoa}aEW7qP)psGI@LX%sETTLHx!(GjrRzA$5hjok-oR%m*3<)hsr77oSf!8YCJ~r?g)av z#k&EV>(acoE7*^bygP$n#|wPFXTf+T@9LA=4>?49NIUd7A3jz2au94{Nl@u{@gJ{KtUi1_=Phgnn zOMuTYBGLZOP{ha$q8~5xq83B(8+i;9?E$bmMkHEkB1Ucy?R1eB9ShFU7$(xh<+R0` z`mdrBBe&&2FoB{zs9X-gWfXPAb$!7$Ml!|=-=j7Zeu zSvoOtgXjf`b^~Wu3=A7!=7P8yLXw17`^CtiFN^}H-?Ec!TF8XW8jNI-Ef<+XCIABLWa2Q2Rpj`xT z0Y)S``+4pjBR7a%ljuHh?v>~RfcMg(4JKmrqU=k&Q`T^_!!V~_06SwuPLp1s6QdXH zA<-e=94yiK0OzGebtYo;qNx(y1I}F%y#w%8S~T`WIx%|DtrBen=WmHLaXG7SSXP^e zk=yD$%RpynKR?f?p^agh}U-_%jPe zBpUS^MT}lFQlgRIjKDC_bbvEVbQoGJeUl0rUPK;i( z{XFk<8aSs&bR)nGY0-BkV)UYM5g<-q5JHT!j(e8b1B1SKIU81AGIZC3-04`07POGC6<5tmu$hq9F=@D=ql1LMm zti^B6&iIC+7uq{l9RwpNScmK46unvsA!>j6WBsfQ4Scmff&c(0}w*V}`h&mLn=RPp{ z4lU;UwN!y~H->ds15k@$9X0?oVniL@wGNEiN2@qc9sUC64-D(jVJs{#tixb{ff!MT zlfLCXF!~Nxsl!3w9Ef2ZrURUTVI6J&xCSHY;2PM0(XZkib+`wdyD+T7s{pTHScmTc zzQb@i2jIicqpSlXH{2J&6%du8@+UaIV`NRnB(hs*WX5h0c?ijT0OTKpKcZroT`@or zhS^O7D8-2E)>#KeZm>H|b|--|1!EJtUf*$bjNa}c*ibYZ#H; zMb?3l8|>D~t`3|JF*dP#$;gb}uFC?yx@HiYFwCygID9Sv!|e6}7=#hob#CMiGjfC7 z0qnqoISQPS7@OD~Z)8Sqw@`McfOs;7*)0UP0>kVc0(bx;vRh#t7`ef&Ms_veRAYEM z-qCx0&wXR`-_G zV2Qdy&_$wQ07Eb$(PsK=H5K=cErFNPh6@c`q}q7gsRiP4KnC7KD& z42c#2@V_gfJM$b9F?!Ku6!EcB4bGDo{?6o~e%i>4p1hJ|-aqvq)?wIgxkH?5#w2q1 z!9d3|9yxYJ~k1f7d=1`9U8%Dz}Up0^UquZqbGkQhn9!p zcK{gX&=;T&M&xjii5R`8_0`^C95`b!yaP|F_l?Zx$%90m0phfO$TRVGxcpzZJB-|F zf?zty*PwDeh}U8Sb2pi|9Exr>5u+E~Ezy$@JT6fkz=s%-sKc*xV)UXBQ)r9+D{UaJ*>1u-)qeP>2!TnL|y)=tXNO;=^SuIAbvU zoykLesgW5yx$U+7089h%bPRL27T{`($l)myF?!KH6w%>va300j#9^b689n(-IeZA> z`xxfX1n?(DVlNqB#JwF(T0ee^bQhMd1y8O}Bxw z6vIR>06d2g-I<^NO%bCP?M4wF^51~-6~-p_&rZ!GGkWrga@f4oxe&t~3IKXyL=J~F zQ^e>+*U4ctI3*aHINW4pMo+Gl!>J%n#W05}0Ty6H4zD%SfzgZpki)~^JczN0L+gzs zGkS92A~fY=>|GG~VRdu(9pG1t$YH377`^BSig=XTABA7uV{GDZsgW5yd4U{?K-?3< z97+KuU_=h9HgdNZy=a9TW`i>e!#nV#+7Hwydh&Xamx6fnKjayBHGi3r8M&>*-+gby z9$baWb0Dt52rk}a;&Lczk)Q*k7mbtXD+s=jD4dAD0ANI-i%i7G4NjLz)N`V9-7(Cm z1Ym!RNE8HgV%!=jh-xI73Qie@i539N$B0DNnuw7bL_bON;6(h^55q)n1H6e5iE^{( z#K;Yz?v>#2K>RwXCtCqFHRn?YQRVGgSRR$@dBJ+rwMMlWiR!x!LuhOvpmR3kHb za_5`SlnYNDgFozHm_v7fZWxin%_d^>qR|v_4f}&L9AguQFO1CS$rs3>48#*L%wax2 z1xDo1E{AJi^rHLaa6dT9F*b2H+{ldnVe+LM-URV=40HGy;75$e;Z_qddWTkv{TkXG zi(fNgcn6+T-ILrMMo->be`oSgZ?-vii*Y-!an#z}><>VH5c^@+ z0XP(3JVx|z8E+y+ZV(N=**lyK&PI}Hp$4EDBXW4lM2uc^ zD@9zxT5#$yHgVW`3$B6DAKLdxrb93Zatw3m3ebfK`xVec6ESkb8gg#&4#U71g0YFi zZANDF4ttVJhshvL!Z3$<0CO=Sho4Qv=p9awLlro8V|WMNX{Y6K4UC?Awa9Bgto?`F z3C~8=MrP!;3jh2;@<3EJfY^u;^x0(MawytkOFA%mQL{v?PQaUg3={DmV*6r5qWet5 z=ta9O^-kl#87I+9fEj5~K^~nLy=byTi@>>FqH2IA)1tdf#OOsgNmLI`okVUj-rT1} z-CEFz(Tm=cs0(LUCMlVX;>en<0oZ}>#3vjWCc>k<15u+FNqlgd4 zyTMt8;qOcy>Q*heTa2DOMGmzfzKmhJ)d!a>#2m9;4^&A>Kl8 zu1NC+wx&6w=N&CxB{+-Hyb9wndfuht-3iX^XmlA-;JlIMCEL=M(en-zuO6JbH1AO3F?!xv z;;jSc>oo61<1u>PE#mzQ&W~x{r^aLSyqCn=2+rSW-cIefe~g~@gLs>td{ zfLAQWW6VS9Iehr-P8^rvsI&#Ab(;62@fbaCuy|d->6GT>ZcSfC&zmA%Z*Y30d8Ni< z^t^@Q6@jy7ns>kP7(MR^@kW5NUz+!~@fbbtQ}M=wGcL{JiGnxlh@Q9EGQZwq!8tn3 z^7u6w@6Gmh><$*^T-47=bH?FvoA|A5#5qfxd8p4N$LO$djOpK$VXp;(UVo$7#-%_OZA94;!a%#Q9DfSB9Ub zY0l;y=v5qXwz}J|eG70l!-$U06yxk4ads1@9qMh;oTrU5KH?lEPG{8lKjcxLT>STE z!W|QF&K0Ks^`2?YF~*r1ac&W3chq-Fa~?O&*%9Y?arQxd5IH&H@t6#^rxzpd`xk@Y zJMt!>G76lLY2J9_F?wFxdpz%Oa1KrLmKl%H^9G7{0yxK~d4C#@(esWMZyGqKr+Fov zxPOeEce!}ygL7V*cZ2a5J?|0m_|NhcY2LTSWAwa_#k&!l8`8Xio$1Tyc{x>nz01J4 zBh9lsQ+Kh00Vb^MNv9E3e82u+IA_ zbDT0)DRZYXZz}VZGHqJ>KHUMV&v<1{Rpwe{?oj3>Wi}|2-^TaZ7r^?Qr%a_XuPgI~ zGOgNrRc`=O9jnZl%G|EZDrJ6EhS!xe)c^oHhQ|ub7kEINkCpjBneFjb%v8M6ob@?D znR&`oEAzKN@ity{p1?|hzXbYk>p2wyZwhRKr+hOl6}U}+KQXM-2Tw%?W(ZUZ1bB#9 zX}G|Afwu)Zb?}^{1(phYF3`23=Nu)lNMNl%x9vTrOyEI*-vx?0dCr9bFAKEn>`UVX zDg{0h=-$P1rU~%t=52xD4jzmZs1*20pifuNIa}a4fz~_v(lG*e2&@;_wVUUZ3%nxG zekWg=BJj9Cs=F_Z7g!?jjleEFJZHARYXTj6`qE^92L*@ zV1+<#FJBrXaJ9f=0v`(WDD>o+0xt@*>+MU&3p_0Fp1_|19r}23nZQ#5UkDWLA}@he z0=a#CX}rMA0_z3(?dmxf2)rr4?~Au1cDTT;0{oJ6EA6$L2mH!$%X}cfFYva^nF22e z@LQ{`#4ndNaEk!Hs@XDo5Ac9ro@^O@Kd}LRjj#cJ+pmE~1>BxK!>_ot62FPo0KYKS z0KeDO0Kb0K0KX;G0Kd%Cz$gKJHK=9y4W0)0MVkgL5a8EVTBdWc2mBI9%kaAz4e%=! z4e*-}4e$#J4e)ye4Gb9M!5o2Ffp&v^X`;a00zV5B@8dcAnlx+po&dje%rg9LFa!Jw zF9W{`@C&glbA?zevb3{JtLp{8}CZ{Pr9Jp9%20 zXe={BfZyz58GZqa0e(-40e+o{0eopqadbkIZ1*!yiEkWZ9IKl&7na?us3h+92mf_{-4DhOP23j5I z0k6SknZ*LUqM2oQ;V}ceK9~Xib=5%LQ6BUF$m2WfzRHYJ<``vWD8s*m)(imo36S)naSs=#J_Rbk-t-!r<8d~ znU9s>CC^Nrcbs?c0$}btE3>yUqm(&XnUeraK3Anm0CT@xnJ1K4txTOV>y>F%hSylL zh9d#&$R7o;4B z@GyYgr>m5CR~cT8&Gz|wm9kFo$8akE>$9UWyh59ii&Yv6U`K4CGSifq1z_aMRk{Vh z?w$LTc~%)-yUob_%ZHh60I<&d^M_^fCi@I8_zz46hMqkP*MWsgotn;(Vyr&GW8)xJVDrKMK$*llvf!&nhrR0pfw@L>A*ltWv=1gTSQsxF_ zc#%1iKd90RD!r!6=gRz`Oir1%;N|B`-W9-hY;OR&FUBcziZW*_!(TZWhgYF9Ie%ef z@+VbVtqgx(W90S9G%LeP(wV#+fXRCT7kDzj0U%}@25jsUhmUf|B;2dH$cN~bAv zkunRExlI{f?at)ysI*R{-;~+nH1D-7fbC%~Wp)QJ`7o6Z2e7m0G-YlUcnV-F|KjqJ zG9N3$OXFFe7N>iQo&ZK3piGG}ygr_hXQ_09N_Q&rlrp?Xo{_&(DLlh>ZU8T8_ zlxO4-DjliPNy?n3%;n1P3U9Wnyk?%spHS&ll|EADdu9GsW~*slz8!$cdjQyu4OD5Q zGDj(MvNGo@!|Ujo{05coRp}{ZUQ^~{WqweGSJX54X4AcU2LM~w&dThq%qV4!R^}uC zlb@y1tudDQhNVC zz~nEg^pQ&Il=)kkEoOR)?E!4(d2K$E@2=8Fl@3$pWM$4#<}zij0WkU9D%Ge|tIS$u z8kGso^6tD|pUK+;*xCzKDpF>QGNsC#t_-i-XYzR}Emo;YnU%_{QRXvccnv?3|EW^m z*?!0J0c?NzC{wJ=SY>!MKa=y?Rz{wsQiU=%E3;ggRm$+XekT7=rAC#Slxca6-ydFj z$}IXS!z=um{6LkCSLqC8E>Y$hW$sdj*ZMR0Gb+8K(&x(jrc6$`ci$Gk9yYw{pUHPo zX{bsEDRY7{)0MeYnX3Ryev3+vsPwEd?GLI?qyfW`7^9g{-e^#l*Ebra{!1iZ=GQ*TPT$$qlOn$mb7pru& zGWRL7LYX&|`3S(|>s0z%r7h0$?%e?FX!KKNxH4k_OwLOY*{)7gX^t}2Ds!7Mk1MkZ zz~ry1^o2@4DwCY;-P-_|MR#TT0+@V|O5;>IMwuDPT&T?T$}9yi`C}@*qS6P-e5cG` z%CtD&@6WaXCf^Cbc5E+|MksTnGAAi>i82cTOuj^=hg5n-nRk@=T$$gLNzC!`769hH z1AyI4yC^eMnS+#>sthkLY3>)Rv`D38%2X@!vNB&OvjM>5%__CJz`J(>u>I+$%s$GD zS7suB$)~GysY=%=bB{7lDD$c^?*W+nOO^gmDRrTD-wwczMh|5MDzhJe$q!a(ib`iH zbD1(XD08nej{%tcd6hm;>1$>FQf9M@{Qh(Ru>IKyz~sBBG(x3AlsQS6vy{19nd<;d ze!EIfsPv*TA1Sj=nI>g;oluka1+cqm7=Z2AIAta)Geenq%J6!jCVxVuS5^8*neUbP zTbZpc@fN&tsL2NbnEN=Dj!|ZYG8Zayy)wLpsL5Yc=_8faDf727Tg>$q+XF<81OStd zR_Pd(PF3bYWv*1_4rT5KF!?(wZBVIMnO2v2uTB8bS)dHBFlzFHRGO+%xiZ%&bGtIn zDDw({$v;r(JC*)YrrkX6-W4EnSEd-i%OU1ioQ^Sd%_D!e-{Y-;lT z0qn4ps#K=TY-Q#vvs9TX0F%F=(w8dzq)h5^@6{H-EP5!zOP!khP?gG5I$N3f%2X*WrixlOQM>*RHd^3>~{s1D6>?V`;~c48D1>a~D1h8L%U8Ky-$}CrAl`_1*s>y#;DY?*lwE?iTcUPvrGW#nt4#4Ec zsx%A0)?T5^oyt6-%uC9=1z_^eRQeUbR+@dKci#rUGToHfQ<)(ECO=4}698=O)0MeY znd_9fM;Tr>*5n_l^gV!i{jJPaSNY8L0CqHXRfboTHF=3j69H`PQGY}`N}L+rV7C1FRN6qQiC$?THi1az}$N( z!>iqze1u9z0@%(^R%WI$yxOgi7pTPliZ=3t%B)g`SGzUxhblFy)TB(y>%5#-yESrm z0NcYNmG)ES2xX23F!I?d%?Gf%@&;w@Rpv1OBR{Xw2P%E7OmMxI=K>hHJ%H^-p-M%{ zj8W!r03%OUsa&N?l(|uv+X0OHq)KZ5?9hFn%y-KC24Liz8~ko;3t;4(l-Wm_5&$C~ zuF_PM%9UB5%pw3IFH@;nr5Ba?NSQAIjQpocd5io5X5G#bDj8;2=#vNC4^82KWV zZcyn?WnNO|EdV2bs?skiWmWp!*c!mRIs+KFw@Uk}G+LQslqmx+^7$%V17LUe&B{Ei zObvjMYgJmSQlm00Z_;T6VC3!q(P^d9{>qdpGa10hGgO+V(lyH5rOZPBMqaH_9e}O< zYi0gYCTFoHw+67?*a^VMyD2k9nZp6B^JJCERhp;FVr7;A82M3^URLQHW!5S46M&J! zC4M*Z0ix4NnZ1-53Si`eR60SW>B=lnW)Xmqm#I{((#y)!EAtJ2k$+Wb^PBx{v<0x^ z(?gkE0gOCcr3nD`P(MMLbCkIVz{pprbf-#>DD%299|9Qp8V9SN(U=5MVT`Ij66rBn*i*md6hCRD)WvqUn=uGfXSOxYPHlqTDAkQ>nrtx}CjwaTnjrcs&Tc5lH; zuA98z|FHKRU{X|B+tppwO#wqjk|Ki`KqZQZNK)5?V!&0=bwM&HNrpi{lprE1A_!ta zz=VlaLHBaX6M;+z zG8f2mB#8Sun0_EZ+S(1I{2UKCm;{-fCO}$}Anxs8>O_L{y)TeaKqdmYAIKaM#Qiy# z-XcM+uTOw%1@aq^ivRLByq$o!wI*@-nKy8 zb4ifCHzh$5YX#&yAf18a0pSe|#C-xxvtW7@$csSU0P;DIEhLEhPMC7$dR2D-36f7e zAjbhY6A15=Anx5^8cKrneKe5Ufjj_YArRg}LEKlvw2=hq`}aT+PkBf=5+t8GKzMfr zac>FJxiDP}q#uy0f!qq@E)vB35tv>eL9V#hfP4hxYaqLTq~>|%}@62yHiOy80q6So^kxrH8*OM(pVF+kdqAnxbD)RhDo zs5~I!fZPG(F(3;`5ck(%`iKPS={G?304ci&qd|gj8jv9FtzbHr1nGMhAcKKi59CfD z50N15t6}vNegfhy^;$oG1aYrJf(%PDm`($736Lv*Tnpr862$#3nC8IrB9PTUz5ucn z$Q}~Jz2a+L>xYpb!_o}M89*)p(htaR62yHxO!vSv2gqU|tATt8gtuK0_upWu@VeLf zAtcCX91G-BAQuDaNrJc!hUo^F?ga8UkQacw4TQI15%+Ik+5=PBWnSyGNs!TK0^}4R zyeW&gUj|biOk;uE0pt-N&jaD@S;YNQn6|={Snjo6nFMM5Fd)r=oI--QpAS<{n63hH z6Oem=JOPBaY!UYrFnt2k_du)_Uh5S|khwS%NMjPjy$wtqVCn{B2#_0q+zsSm62$!( zn3luz5s>eI>;Y1KrI!zH=pyb%ksyh+hUpw2U4i5Q83W{262$#Mm=?mc9LUE&z5`MK zBeGL16c-SEs$@4>?A?l)2qDJtCJwD z9|@!tkh6hw0n(oYaUTKGtuW03@-&d8Kt2Srkpywy22<)yuk|V<$Y|69(gH|(AeWFJ z?gL;N1Je{Bvw+YUIem|1aV&r)3-3~22$=Fuk~CKWG;>Y(v}2q zKO3elFbx87J&2R_iPgPA7Dzn??tXi zf{gRgKw1Gg2MF)pB<>?&x(%iWfV>FgEgr=TazHI zp9fP{Ao)PX0l5Fg*a%d?3q!tOfE7ke^8q_nc3?)@zX8t zd;nxKke^5pcl$H1^(rJt>qh`-0i->U%YgJFLENu~X(CKBfy@K)8j!U>z9K=~e}t*b z=U(dvlOXfn9LSkKIsv(Y1aTh*(*&6A1u_@Nt3cKO`H}>2{|`*1*L$rWM1r*549FQk zE(Owu1aZF#rkh~82gnmZUIy|$kS|CO_kY8b{K9L!5((1!;XsZDau$$_Nf7s5Fb#+4 zW*{?wJOyMakatKB_s?P429v!3l|X`2LOmcYft*2txL*X*urU7|?1aW@~rll}_0Aw?eT|mli@>)NT1aYrNf=o(FnA!um3`ic3aX_Y! zAny0UG#{qdfUE`bEs)=Ul>XXtuTFxrel!U(EUkc?3#1#6AwaGpL0X>-(}OTQ17tan zkAeIEWETnIUUIY7`avW}>-B-O1#&)+o2a7|0P;4F^+0|E!rKgrdp#1g zXi1RP+XJ}_$dy3G0^w}~#r-vy*21&}$ZjBIzW18QB|)0tZ2-l+3rvGy;{E+3pF4p( z3giVKyse+O?}4fO4_;*6uTR{Y0yzapM+6TAiNQuv_1u<*)S~xvJ%M0Kz;ziTk?r}$*o>n2a%wo3ZyNN z^MG^*awQ4kJ`$$eV0r+^0wBwPtOLT^^ojdVFuDKnTCYxm^!;cct$>^hgg5LH_bXt! z7N%Q)+z;ewAg=>?j|6f50;cUSrM7vkS0h12qaKi!KzI{BalZ(r%VD}2$V4DBfy@K4 zm;`Zu6Q=br@jiUgcjrg1^#e!{q%IKNeox#_hUr3>dI1>@2>DEyE(J0G$S5FFfbfoa;{F6oFT?aMkne!(0aAX4*E;W=C+AR~bA272Ot2TYH_#M|VF z`&&Rh2eJ)F0SV$><`<8gOM(<6?|~=oe*klsLe>pOA34yI`^@dkI|{v41ufP4nz zTN1?m7npK>MM;n#?u~$)2&5a3fh36gwJ=SFiTAS;_h*2-4&);sn@AA%T`-m1<+Wam z1aWTy+vkVk+#3uF}#-r7#wzlP~om`d;VT0fWsnTv)%P6Bcc z3F7`wm24*^*OeFnbeJv%(ig}zKqdjXmjrQt z9Hy6G;w|c=^$kFN1d=ZBTIZeV#Jx5NLT(BZ?>{F8szHA#@R8o_iTkiP@z0c0o;-g!>kr@%BDriDP>0kQ$ePe6DNI&nXO1Zlkm2{J5a z0_g!{2#_0r@NRVC{vb>XVOkF4V<6uFDFDLz(usQw5~TI|BuMM6ft&}VE0BC3yhEM1 zPlD+In0OyL3AhZ%S|Hy7;qB+dJxzPK3As86(mHQ4CrB$GX9MX1g!h&c_YpAN3KQ=j zC+<%JSqkJsAiQy$xNn0gMSHeM>%2XjxYq;H0!VuxyepizkA&$qn0W6uabEyr8IUbN zc90%1GBASVDh3rJ@mya}ARkA`U~Ob-EB1Y`w}Pk``taN=H;c59Qi zYLg(XHvw`AkPCtI0m2)@iThZX?ttkLAkPC?1>|!eyhWV2SD2`T!XYj^_#dq0@Eun@dj_=z6r?B zKuXcRY0?Dm>n83kNf7cmF!Anfg5&`i3*-(UylI=buYl=Gn0RY8aW9eMwN;G-L7D(* zLxQ-shv_nyc(XPk-wb3rkSBrg9&O_O4on+i`U!|z#%sMg2@>#VAiP_fxSs~oB`{q9 z>I7sckQ;$a2f}-~ ziTgsBR>Jf#ke`60%XzI=CqY{0UERdJDNLuq)Dg%PKt=$$6$tO|Chm{H^dd~Wi<|WH z3n1Hoq{@4(^X6^ho=bv|kAaD|XcOcjAiaTH4TN`Q6ZdH_Jqi==zb5W)0{INcP9VJP znz&aYLCA-bAj86&s|nH$$UlJe2f}-*iTjN(O^1nhP80WKK-L1;2Bd%lZJjnb)7DAQ z)`6S{q$`koAY(`n_xUg_gJ9F{WfHIogbomTK)4UWdK8$;*^;W`LULs$Xf7YOC(xli2NK;R(}WFmyw5Y|KBk9dXCgkF0rLOTd! zAxwwx4umZb>d-sC#p?tJ`4Db_unfZI5NgqGSmJdYgsULj3Sk9=FCZL9J70;{F%bGe zxE{h35|%Zm2jKUBd<&u8fu8$`5Jp0{1HuOozK3u)ZA&GMwuUeQ!c++FLih$k-I|_P zTL{-emWaR;qhZRt>B zk4qa`E@?tLq?4AI&P85ri1o;UZzgGDq{)^`AMaWR^syc-)0Bjg{Vc1XFY&gMgN#yz zV?5z_2z@+(Vt-iDvhK6|*!+9g6#Kr)i2a$yzF%UupxBM*U!o~up9f(WghxGrV)rUd z+bYg#oUl4c-hAOv?7RKE-`3doNbGJDw+qL9mmDPTUp#>#t*0!fwDlwLpNUYUDSnnq zG}2UwG=QS?<4A)L>8>Es*iy6`_tr)U>r}~!|7L?CP4pwp*GRWYq>&V57)PpwNR5I> zmr_nQ&80}KB@+K(2t~TdkMxK}x>+LKMN#hHNS~8~Os!R8u|xZr4kW#e1mHhjp#bCj z0Mj+V4HDoXa(;jV%nAaesYJ#!@&oXWffQg&CCuF<4RD6FRL@QbyIn{Ig5GrwqbNmpV#359) zs+6G+XG@4tUWl{(5Grwqv;7dB#359)syGy)y@Ytx3(?*Wp%RB^?}zXt4xyq|WmgHy zI!i*NX`SYdoaKj5i9?*_hwvm0p`uk~8-+MiLY(1+IMWZI5{Ed`58+81LPe{}77Ec$ zLQL>NwDUu##39=GAv}pgsAyIBGC{k@m*Tp3+Y8aW8tS5XZI(Dh3#pi65d#5Tc2O$mOM_mV}tpAYrv6EiwHE3RbO)RjURk zK?`KHu2!u&Dm#t23yIogId9rck}^C*!mp)EV-5W~fHFNqn&J15e@Xx9Y@rKgItAAw z`B{g#k5UuKG%W_(h_RLaC4V8-9ujuZKdVkl@a-9DvnfHv5xhvW#M}^wVratdcSXV;k%fwkd!6X zCBD^y^?LUGHNh!<=39SFcsV!cthS4Fw{P7J>rb?Dr+yG?4SIgi(fA?ZjmE(|R-47z z+_!Fq?+hNR4Pw2}w{C#%W1Mpnv5xkwO%l~OO={+1HXf$KI*L}z)X_qn<5Q0|sYiR% zoC|4rPpw);d95dAX_>rLRaqyQVy>#=$?ZvQ$g-7FiG5~sQ_5H+OgXI<7sZ4S&X;zeP$Uxv&6^BX-u>1+|9i1KJRXW zcelsu!n~=>o8a@NO75D&R4s*^G2F-T%$x7?#vjPK^2XO?*~)pIs@fUB@+UrTguxr( z@di|rDoKnh)Q1}SoU0@4)v*XQ!?ZSm*Y5dQ%6aSl{$m9dxiRdPrWxKqp7*xo6_Md z)r6+Uo-EY2eClK~fyqc<3y;9fLjA?3-fVX3W^`*9Cvd$`52c?HbOf$9qh61w?P>h& zkwQJkr;aqEjzrYkc?5b0b+}LMVRowry7e@z3U+6qKIBt7o7B#rHs+`o3w5f!X`k&eI#CiMhR@1ZN$K31sb`P5_0 z1dc@l^{Kw>hC&_TQyZFt)ewVq1ykz@^ZJ6l zFEx=%yQWb0_|%$a0yUAqDxTP?Lalo!Mxd%mtqSTm9@h#&J>RERFsT(lUBWG>QhrDH3jN_xLgVxzI@;JsRfR4#TGb+>BZfhFPLA1THsTEF{!_R zdNwWf_K!k6@-U3Rk0$j;PzP`gd@s}seCqcm^?Oitved-*O zItSFBd3BjB)Qf!TY?C@0)VDe6ETN9^sk2P#EKo0E>fJ*9mruRhq}~ncVO#@Kg}T;uMyL&Z>KKzc2Go-{>Ik7;>{CaWxsGtW zg=ijM1w({7)~60JsY5`$jT0Cs)F*xFK(ku|(XH9MWLz%Pbw2fSGwS7tx`m6dyHHbg zF#_GqsNE6u8IIaXsEvGTCzIL<)N}cY?I_fL_|%RjwIit4@oaSv>Nua;!K8KowKQL` zX9@KwpL&*K+_}$k4%LhMT#kCGP(Sghrh-P0grH5%nmZf(Akz?^7F?)CQoo;dP*{P@ndxbxmqrP!DG6 zAwvDkrygQb4*_*0CvcEZOCE_4ILI8=gD|c=m|8`sO?_$=M}CmfJ4_YlNS%V|oIrV@ zcJ`^|O=@{iKjAg2lu&Q-sijP6DNtAORp1Eq8K3Gn^6;byIF3HBmRiA4f3rE8^*;4C z+sO4d+skz-&(=<%mOct2u+yaO1ocgNytTIpwV6-dW>U9-+LrGH-wCygPyNm|a{bQs za?RszZ4&APpSsC5?%bPf@6P=<&UL*|7y8uowy|cdx4kuM5a+s1s2hChI+MB%)CoLW z@7r>_IT|DIzFk9~nLBV#p0ZhK?pvR-t1+OX{*-+fEBgHUl-*RHU)%CJFjS&m==%*t z)HZzObrtJi-`dr#u5G@=)7L4%%1qzdDRDs1W~amvQ%9k$^r;;al>=(WL~W&B z%l+&i)SrB6hlJ6S4hiXrRqAP8#?KOJE0MbH&=;x8|A&Y)uWSV@zb^r$(NcwBdLm7PUQ`k9leWw%r-$@HV*ZY|cFTe#|XFmJHW+hOo_ zD6dH_jehb1J7G`KhRAt?LM`FNv#0tEXpvsE6Gu7(PxZO{-jrDK%?$T9>$7Q>N!qzyHMNt)a@p9 zJE+%Cp(ZyAb&OBloU9f^-JCp>6q?McNAdfY@7K}v>zJ&q56d4=DJG9f zvhs#cJxa5&N=@Jd_9WQKAFyh-_9P?$tJG<V>lU?Yr?(^|J*(8eX?;q5 zDpdYNRjHqv)K5X}&O`a3P%rnXADYw;LA`;8vQvUb;C7$dDPfFyr-V1^7jps~g}TJ2 zc1#%4-Z9}#dw1?uYoUJYQ(K$V)}R*9b(Cx_)GG9qns%$XNo@{lf)i*W)DwMb6O-Bm z)b*S|HKF$Psnrryf@!aoID{3e)I)SgRut+TKDDArtqAHf!UYO2Zm&tJki>RkE3RxA?rx25+;+JAxLF}T*-1{-?q|d zd!^SlU1U~rDf2G&c}or6QuKw#<|XEh_IWQEyq7#)3C?K|^B(niiwxc(kM|jm;auju zi2hy#h4n11fD39I~P1ksl}K9S)$7l{hSSpFLAnH44-@Xh|Vka9Cb#*fS+xyq%SBI&oP3odC*~zhoWghqaHRu>7ko9QH0bJN5%~w*N(k zatrBj28BG0!}8k9o+;~e3e-N~+(3XcoDLM0zy6)%hrNWuo<$Icy-?1MeHoqY%jr;V zFdZ(Wkbmc}yo|DE%KAG6Iy>PU!`U9L+42|DbN#SSaoCa)&MIF?&W>G^&h`;>DA$+{ z-6&)i4$BKUd#0?*DC{{2$K|lQG+X}4e6=6eZBAidCy29MEoaAGM`wE@9m@Schk+Eb zKZoU8345k2`ehFK8r=Dm0B5y^<*)0v`e8dar?A%%#9{fDkdl)f`wlwW_tBx;<8-)& zLSD^b`DVtRDQhT&Jul(Rzc$!dSXka ztj3j+RTrLAm6~ZvGJV&;5PcO@GtszGhs2_j=vVM6raRV7T%5Y7bb<_N-*7=y11=GP zOJ77wj9WT!0YxsEqUX&PrB6s5U-}G+P^v+qO?A7h0JRfGR6nCqZf(11bq-$IW0qEC zj?XN8e1u8ATtP8wCrQf&Qps7GzuxI^1H{nnr(UWWDSTrZ#nOWwdLRvr5-? zn4W94RGQN^o2o6r{7IruUUhtB(!9`hGNr>EKeU0>rh3cj{mb(BmO7y})!1Pb5{H$o zRNAg}V66+PR!EemIyl@LYPvffQ8iJzv`!cM*Yziwn&Zq`%J9`oNk5OIakGx{x+N3L zBYAWP&>F69c7jO_LV%JQmQHZTx!p!JsZ4?@FU>{H_javUY3d-lV48%}%PpQon$Iu zFSQdXyK*|=BvNJU=SL(`CF-Zjv`Uq@C{-%mNEi!*!S=Mhf(SYHrV_`J^%Su_VOZZ| z>piJ54O5As>3>L@m4x(@#f?yia%ua9k%?XeRE04R(;4bvID|{{? z26vUgo#%1i^0|Z<+{wuxhwrb^9Hu0Z10e=?qY?LRFYYEkE+GbYi^09!<9_RN2{E`o z7~Dx7cdO4O#Nggw0%ZH`i_YyBzDOJ@yfxEy`0Sk$AWlE4p=o}|l#=V_9yQQkp z_>^uy7fkyU$4{=8@HEVc^e{r-OC9W98h9SOH=b3=Gbg=?lKV19t~9mBjg?NjHB)7% z(R6b!Sy&Qj_sr*ra};xWq{^I0oE9ODTbuegQM*<(b#U5k^*_)KJ!nv&@j9s!}C;7q5tX&5jzGXqQUbqZ01&bh2T^)@vSP9xpHHlqJfvcRU5@f-g~5|8;r9Uuo{gtNgFg+@EXa|JBh<9^&7G#?l=mxCxn0)wHPb zP3V_|-h_VhZ$k8Jt*hM*y$RhUH=!N=O=y3IlofP;2cq zE~No&*-N= za$Y06o@sYEee$sXf^q!)7;e7?`zts3^lq;UWWSCZeNM0+CsjUmC@P*@2TK!fZlPB~ zOaDsfSX7|ryhuHZ6Q~#?HbxrjnKkMdKfRXwF={(M>frr(!S4UbEow^kvXK8u&i}Yx zMy|LOXw*v9+4vnXv)A7r614bt$p1p!>}`+ThWgQ{dFzdQ4`W;`o$y#7U&a*cv0z_= zMV7984Hv4zeGT?kZfTn;VXq5hzm8k3nvLo^2-uPB7VK-V$bz`9;X-w|ufhJxEp1aJ>~(?c*KvzpWcxO$6s_p& zm%zd6t|N1s^%OpCek73I^0)f8{2~JtW3nb)<@P^C~hV1Rn7e&LI1Rcytlp0bjy#tq9?fJ+Xv%uUEkAF zoWGpg*IEdfE)eq`-==zj1ki-f0CCUev2R;bqu;Xr`SRD&+&>%wa^tg(&@b{mHjif z_@h3a+x>X`|COA6-H#Q(y!8~bRX z8#M^M6HQrb?8HW4tpVv@and_6(mbE!4%R@cnA38S+tLs8eT*~Ng5m&plI| zmIY2;V+-L#FYwgH2w^AspPaaumdZ$I!fE?C83lhzR)mbtgpF^7jB^7ccVM9Zrby~@ zS)L*anmT9(z2{GIJM6nC1&ib3H__=|}Hr+N*id19NB7Tq|ZS zZ<_lfdXW2-ro9Z=xrT$}%i1zP72emssG@Uz=^rAyqFJ{c))qv;ph7jZDWP)Pr|7sr> zvhR%9uMgROfnDNrDc&J=Uf1Y_k6QI#YZ`0PZf<&#Pn_lx-7(7B91C`PjI$-iF;)sM z4y_d0BfqUFu{htxIJd<(-+{x!&m-;jk~gUGiy>*%rMKQM%)A<}`p zw)1Ol)AkH{r!KGA8xn5M^uC7l{I_YB?hAG4(|DI+gh>1UJ-c>bcBlhu;~j_*A|3c| z*|*JP+|uprFI7-5E9SjF-RH5RPG8RKTo zw}DRCPJgM8svbvAlKeL3U$5!8QPKM6*_y!>}vYXzw#xpYZTFl69xp8Y&no{6`86ghR z_GazR!_jWiGq3S5LXXYz5Eb0yR)*~JWA?X0_9tWZJH;;dS+7brF~_?=`HoC&NpoQo z1S$1du^^wBL4@;AD3On1_Qyi@_q{}e(tI*xf7`PM12HX@!{%5UZ-inz9g8u~kKtX_ ztAY@7bUwbM*M0^MhxZJV2ZA}?ooPeJIDMEDmuLGTWV=^wxbD`6j5EZ@4^|qT1u4@R z-dXiOf4eQ z9{;(PisVo+7Kg(%n=MXuj$VT@8S?pn4yyNa3YP;!8IG3zzyw#!j!?Camr}+@4f1>( zvR@}xgK57#RFqqW>A*{TLzIjAl~AY`Mo8V7v6h7h3*&_ALyi4nHYP3HpE9qzPlj^_ z>6ty!9gVx!D-y$8%U&3k&@5=YP}dPrqQ4gNd{#WYNf6E*G0xYqEO$va%?xB%{ZDv! z*gpvk#r?5q`66V$H)bCl8mT>I4$*0OBot~*EY!b3_IG0T|AYqp78!JJR*j~(7&p4l zt#K!8(m=~nIiQ0Luj_FPSY8jy?pTOq8?l9f4#(>OB@Y_Oh>O~YjnIlfKT8{}EQm6eN78sEN>~vg(9=)2 z4SG1r&=DO4>Vk~Rlm58K2ew8+L8rWwqkVcj+TMGSPCphUydNRFDg@Nf^Zt-Xoi3Nz ziBYsie=3I7k$x6E0J(=t=*>AD}5{B^4=r#>F{@0LAagV<%Ku8_x_Ot z3J+blMH;<1mh_LIq@#;Gx<;!!4JhtUxw_f}_X2~awZP2%#nRD~^owXQGfTd^OWXcU zN?6*-+haqqB~wlHyeM3R%8+ok^`ZCFF5L{RdvME}yQCje@8MW+1Xs#r3cjeJlm5ydQzfXo8B98-4sM|N)KJqVdO z1(RP$&vo+YGX?sQ3zJWuH+YW}#-$Xa#1@)D7=K6%zLN3bAf+2C#LT(SRK8>uz~V>& z{BQFL6+j_9*8<=TZ-WAOCezg)qr?XN&&{C8f6<)$C6UR`oc*8Ni|+GL1Bqr_&s5Qech z{DBN(>B!s))xmRS9lRQ;gZ~k)Nkxt2e$0@^oaR0~nZINP=K_YoXMfu<*Zl#a+_Q^`$J@6MZ@xb&W{XPZ${V8`WvfYmSg-Yg>2fM%D*q{>q z&Ln@;IG_GphQ4p3&ojMmFjij6b1;|=h1&=J!S)7!aD2)Cxk&%yLz0!(@`og)>;;LQ z-ZDw!v60i+OZp!>dX+w;nxNl%f7bgI%4G@K3stWu-mO6=)awB4VImWn!9y!6qX!Ss zpU;B}A!EgVO`DL-cB1pa1(l&2d+qSwpFb=k_e7VGFT=}7M!T_${2_K@8Tmuv z|IzvHd;Bq#qz1p2UkBhtez`tt-ZnCkq7OA|Cit-~Rjtvalx-y)JDsdofzNI$c4NuD zi6@pN`dtB`*xPB%Ns4Vk!mY>x1y$2eY)X|<<>_nZP-Eh2znK^#px(<^w4dU2iY2=F zh)rVfnx(0bk05S4wr=A?C^-N6-Cx0D!$P<1*tp2U6f^%<3_6O9>I21QKYeXa?q9rm zHZuIXi)Vi{#eZ_P?{(TSb3gvj;KjVc_QxOPdDLZ1g&vTyg7NHafvoc30- zE!WCQX4K+e5%ikePvamD+j}(^?qH@HN&I(07?-sS#qY>sKZJ;mh5V?qSHrnKOS@94 z47W`maCwgsbl2i_PEh;p#2D|ga`XL%lqdXW3D47e9(hM@5u(`R>5)gS$I4;O&-83` znnG%SP89b#q@idZRgd?R`q#C5x6!2D%aqh(g(UTXk<{2ilG^ncdP)$)AOB z2P32Kk&)D>LXs-@ok=}pB=vEor0y?dr0DPV{3+gD2}_jSjlYI+kZ zP)k+@dl({woe&5am^F-{@y?f`p?jm*@GPuXUK8>4orlUvf)^A|1!K^n2V{jhvVb06%3UYq8 z0sZ>q<#h(H$H4sNY-`+1kf8$xaf_0~!0z5zGw|C8+Uz^Hb6%d+g)?r})aqtro_FOS zvQfUBhcwOWsi!{DLf)V*$c1hB0`?m)q(^VRuX(-md-m+x12h^4&Z@gMKxZBr&66cg zIj;}3EqJdUgS+Jo@~B?oJYL#MV_dz#^qr;4)C)dKBy*Svm-(PH`}W3^(5U7aL+1@L zQM>a%czF))kvF)Tm!IOCRF|Qc0uqJVc}SD)GEPmp>o|#lxNOL``gQ5kUsA~H(w*AO z*A%HfdiOC>(3Fp9!jPA;K-zgiWUACx3Zci9Jb~P`fnB;?k&o`=_s{FotACH~x!rnq z8Kli>U%hto`!l`o0E`6Z>WwF-Gzf7xu+R0YQ`p*Szdrqq^z-`mmEKUI0|)i#Ke)4I z+GR*D?y^^*Jj~wMil~9Q^reIcaV&3S_P89lqmkhYozH!|iK7uF>k!FF3m{yl{RRe2chQ__H1eA@ z9jXf-jb{G=l(>$%^pUDs`^Y`_#tUQA-0C}^f3I9Q&~QkzT%pn<9_G$Nn)jy5ich-W zz|$)Q9&K-MhsZ>C?wa4H?_jFVf%$`Vyv%NRGdHN)K#Zoh7I2aF>^q=~rjR$NuQ6kE zB@U*m-d~hy0_gJ78O=YY$-uL1<70wywR6B z)q4qdp4!EADKpxAKt7c&ErCP5OU<7v87f)bLw7@OGQHfiPke(5io{>wP%Sc?-m>Bq zpQrJyiKhS;rkTIj0ushZY4PIX*CGg(V=e%h0U9)_hej69HVKU(P`xU041}f-j)g#X zYvmj#^UTY&QEKL}>xAKY#>(mOJ!4<9PJODkP7KLhwO)Zq!N_xlEC7;?-iFM_3SLmT z>CQtMH@i|UL^^X3vQAgzseH}Q4C%5zuzTk&0|yQoFf@op1uNtT29Gm3PM(RoKy!E6*%#!V-1xZM#!VVDY0xOQe!nh*y7g|= zZNQ)&eU2k7FRzClo6zYPI`qn|e-52`cF7yozgzD?1Nslh&#Rx`|EfOyyVoDwg)V4H zT&F$syd_m*ww&jUaO{$$wT*j2Qy_EWb&?mt;ogmd2E|`7r02wu0r5*=V4hiNdW+MQ zD?HM;`EkYZP~%~TMV$b;8ubYrZP1WOTe#iIG8K9>;|}0@)Q4iP4-~7vE{EKk#>X}2 zW;N{Be{jQreH!*2(62|sydGT}_UbdZVb=jen>TC7oII;xe%_#lefyB1TepS;(*t?^ zzJ2=V53S#;e}2QpO&a#;->q+c_Z~|0l!kqdY2M7Bb?t*lU=Qs_-5pF1V-0#+Jq&rU zA?F$LKtmopY+#Q(^2;0ConqAI2Ne#(>Hs>olp9d}KK)x;kM*~#l;v2#f9X->Edre6 zWXExaB(J2ynrB(FN+kXl{AYRnTaZZ4pl*+9<19$L>!`fgdDmH!BDtVoxmxIumm~Re97%=hK|8%LqQI!1=n&3uQ%KGSYdW>`UboZ{xgF zZb^BS7duPJFQ_0g#a~e2-HIYp%y%n(R!KPp&S#arsjTuy=bOr7s)|f8$5fqI4V;P9 zW>p7gR`vU9sNBZ6zs7?Hs=U~F@W8td5}De%`=Hr1MW(i9*PM5-atfSz2ftKH<&n-y zwbs-Ync7-Yd&42%Y&c|l9dNeS8Go3{ZJhCkEv>8aVrOaH4fRNtG2Bq^n7!I$;yiuS=0+k@4x1Z2)mUU2!>1a*-9+UA=j|pljuDx1m~qU!ri!<5<~9A{IF%PW zKO8sVc#@^93CB-uAvm=)wZ%eDUg9il@oQ_rsjXjI-`hrgM>_YmdA_a61yl+ zZEU;qM8(@UJ5QW{ipqlD#_B;yQi)@O>k;!-DwY;uJRJ+fz#Kv7n#~x+y1_@ zMW%k;clP3QR4#B9pEL1Xk*TeT=iYyw;xu39efD>i7dxN*efI?b&YQ#oIWmE*sxn<;BkU z?z4N4EN#v1@kCF-sjVk^{_M$1oS%En=_@$3HK*@SDpOlO^_|jR;}kek`fpH~+S<^6 z#{k9KI6DT+%Tsx=GcRxTV3MV+)q~gO3r=mV&A)Gm%1fO4hOD_-WNK^8)iXzkOl{2^ z@!~Zq7dS6oGvQj1sjUgu&KjwB8)w$YPsVr`_F{*`U$0|Lnj>+{^=hLANqhs^5{JZ5 zH>-^rC2@tPQL`j|J;94f7xsk2f?HIhrb%2m(X+L2NE~;Yr!96!d~gbD(mIKArmBrv zC-L9VmN+ENxLa-1I*DI<8nsU1_0zqW1rCX{7JD7H+@$}XxiBl3NQBSO0;cawLV&{W z&%?)x{X$YYZnbq@NG`K6u*+<$*agOlZADh>0$sgncneD0R#M{7;NDj9p;9UrI1iOt zR9a-3)q<-g-F?*E^(7AV_wM?O z8mL_0ENZZ(p~%$VH4V+x7%T9|$O`=WvBIZ(UO#qSGm<5rb7dXKRY(-Y!b-Ef; zKI>ZSJVA39>FhjVS}Tnct8%x`V3*jS}UMpo$wCnKK;C(rsD@|pEFtkMNe zuu5BzRr)(!u_>SLPQR%g^0}$qBWEI?N6vixERiXn*UvInb*$tgBP;oW4#KDLSk-@Qa->dPft{~n$?n^I7lReN?8t^tt;A zktv_MuQ2ZpxFd{=+!1cNQuvh5O;^qsM6%>FV-W5L1x|2Bup)PaZ}jd!`Ft~E{7}td zq%(f#>|rWXUxqCmE;8k_bhvp3!ChlycdY9!9PK{XmI5?7D+H0s*;#1A*BMhTJ_zTfzF7+PeacbLy^RX-Xy61PoaP4Xns zzrz$b<{ie0-(eQru2CpY64y*qjq)UM`yHNE;E;IRU8+%@B!=%y{=H~q z|620FQox@pwaJ&iF7;(;3HW8{n{z<8FXv5P{xawGGQeLb^9^MBLCoc!$d=Q6KZmD% zrj-hi3IzoPSI_jvl!b&H`Y&YrzpB{Oar2*LrJMEOpK{abL6%!kgWet1#m*l;%o&@w zDFNuF#IFfEfAdi1*TkqKz){I3D%$xwhdQIHeX}l^JZ7dtr)i%ilZ|IObXxs+(k@vr z)1mYI>ytcT1tVuVB!0C%nQD9Hp|xf@Bt8CxZzAzOU%*7t(hbREqnQq!KHQK@ba3c+ z+m}f@f9+Kcoge*@F*(fOrK%%kHk9!BR$^lsq}4jteBT6ycfPHq;Aj&n8>w)!e(-sa>Idbe-~hmN}# z8#Uaa^KJAl;SLTR-`t`Yoi_?b$C=+KM&||eKH&}y9dGXi-tLL z-X<6wpZbol<-;60FQ<11cW~%jb0Y?K>5t^Bj6nbq9xz zUwasxe-n(3&;Fu3IAIzCkfMKXL=}=(y3t=)6rZIzBO8d31hZJoD(d)5GXI z?ncJw`0S0!qw{LP=y=^tiqZLQdb|I54jte0FgkA#jE=Y8tUNkDb~E$n_^F4{dAneA zoI62zbbg86hj5-l$6q~+&f{;fsSfD)&@IY)?G}3rVdpw@{KdoWnrOc`kuf^HIZ=7v zPqZiB$`~E*yH&B5Z?(S?jE>VMDMsg6lkAd{N0i)Jqf~kOAn)dwu2UyLcZQ}Epy`v9 zsVav$PgZ`qvd3FbJie3Yf8g?x-Sj#p4|i^?d}n3yy|c17Q%M`n$%Cu}d8V(BCMx6* zKi%q3ddx`Ip6OILIB_nS-T7opCoX5P?4iEcI}l$9#2SY&p$~Hhizseyk(i@s-NRWF zbR>!CL~rJPDB=|?HaWuQP9V{1c$0|2ZBRF1m9_Kl9M0^art*rZF)9EQC<11tA+goebi$1AL-kp zy8166dlmUHh{}xGH}p~Lzbmjub>TOwZdv*PZ|=+NALz5%vi}6KYyYA;@smmSUEdzn zN71jBCEaQ@;2+hM-^sT}^-&|)|3Tj#)s_E^Z;$Fr#J|yjXg{hee~4%22W{>Tbjwoy z3lV?l;L`;z;}g~Ciw5cc>7G5RgFi9i51sgu|NDV|NEd&auiTpGpVmX5YrS>x?NMF% z_xtv!uJ!h%Z;$HAKlI>m{TaH{Tj#(Y)usOKCcD-b%?I@-&}T{gt@rIwUFYxcT82N( zU!d#w_x0^jUH#|z_NcDoztguzb>+9t4YwcYT0dibdsJ8dm7X2-03G#LzBb~kKXmXf z^z2a`^)}u2*ZxBXe?!C{I_j_PA!uLw4_*9ez6O(BznHRQ{R?!hx0if-R9C)RC+r{S zT5lbEdsJ8d>7E_=K&Si{^ZKzV;tw7CMu%$qq!)1gL5Kfv&mPsmUmEc@bh%zD9p=Z6 z>e60UvU~RrxgHE%u9w+?J*o@;8?sl|^?wQHf6U>~XSL<^Yy|1v7l*RG1v=SjeBSWw zQJvRO+>eS1__{;5Z4 z`>0pwsK-g3J*tDhF7TIngAV?oN27n*K6KP~f6tylmwJ9Nut#-iFQDh&~z z>V@ht(3RiAw?}p6mv-lqUHixOQtpSQPWE4YUGuHk2<^pmspr0dJ*rE4&y!u-qxPx3 zH~M@_>O0W2o*Ojw+iSz)8R*I%>f58b*3&D#J*q1|r-{Z#y+TKQUg+7QI{32!f2lX< z;C~bGhmLw~dW_$`_#3*^^L2qestf;JvYYF-p-VkiY3kdfI@Nd5y@c%M`u%{f&yxE7 zj&!rW1D)(NA153OdsNr@xXHI`y#~7SKl1HSUHNsJAwJa$)pwvP|0>@e)s_D`+0FI4 z+;N6Z@jCjt=6fIMW`7M`>UnEmkLr?No92j5?bG;9BwgcKQs05D^}W`&M|I^Na(vi7 z(6yfX`u3=<{tG-i>J>Wb(`teE>JJ_KcAg#e3LXAaBmU6A|19Ef=u*%1Ptf+IJ*p=| zm--$-cC)?>UFvyBV2|oj-%d-+hqZ*~qrIRK;NTlxM4 z952w7f1PiS>RR9L`gX0?Kv#b4)`%a~l|PW|W_>?v>Xc8i4eXllnWUTjHFT-xy90Yv zm-^n~$D{UXJe#*gJWJ|3(6ye&`1Yu-{8hd^s%t$~IT7)ry7Djc?5J1hsL#hD{?NhS z9{5YWL5F|qlfvyoM}3d?>=|^a?+*ieRG0P+KRI0AhA#Ddd0>y~Qr}OI-CVza_Vrm( z-);Zq=P&aY=wzq*zSXx!b*-1re7n|bpew)rDTp7{l|RC_Q@v0<2DO0W2zSsEnsIL6nbHo0DuJwGmZ;$HgKi{*XUZJBte~b7- z2mkc*w0+bobok%q*`qr6pG5o(UF!L$4u1ToF7-W}>}Gu%y43Safjz2AeJ9Vyd{|3( zKF;)Ysu!C7sid3p9q44I`u@_lM|G{2CV%(+3pie&D}S_akLp_At9`rHYoIH?)&+}Gv0G0`X*`=e0>RK;r ze7n|bpez5dOA$Y+D}S(W*Ln?f<-h9Nqq_1d{?q6WU621DUHeOX>fa3CuK9jVx>?_b zF7@23lW&jeGCtRnUB{2wr!NT0^|dUEz71yiPL^%AKoqy1D36IUl$B%?k}dZuk{gPL z=;K^N6<+WyCYJ-N!>Qwi>Ny z9#KZ7Rt_9&=8-AWFe6hQH)o9zW@O4^SJoI|MyB3gk)N$EABPy3@(43B^|r$hvz1JF zgc+Gyc_kDh)2N3Tneu3Im6=DT7-2@HJf6)OBh1Lu+j>K@<#Bt6ktvTbBU5j4hMBEo z$|KCk)XIoZj7%dIW@O6ayR0$7j7)i4I^66_raZ!oOub!|HAc&;%~mqy5oToS?bD$c zneqrTGPP1?gqcUC-i8^O@|cn}MwpQ)5Br*Id4w66dYhLuM)lEVE16=18JRL2I>wBV zX~e>ecq^8h9%orKi@3i;8SzoK+^H0!svjd$D`7^wFP3}Y4Q7mZU!sgmdEB2hMwpQ) zk9y;?9N>h0VtF>JT>jpoe7^N2Fyy(Pv?W{miVMH!i5EXW!o%*d2!gPXJE5oW|k z%ywsIiD9`1PsmoMVMe^SmOF=H6kVrbM!dI{d(16njQFTW8JY5UE^CZ1BU2tHPRy1^ zm=Pa!%Uzx&20dF&qq+4Sz{jwR2k=#@=mU6-JD8;p;2+;_=9MY)FeB6WT={?*BU9#K zMy6I051KJD%~P0>DUX}7#t1Vq<&pDHwmia&Oue0$C5G)jw1{RPm;VBva&Y9lM9;Y| zdwQEG^inpHIf@Wrw$*c6?>ve;nR)87#f=#-v&DR|*f9fUwwO(yD{h_vv*?(X`#8m{ zEaRDtS>buhDqD<^x7>lmtfnzX>WGgjh@54PEO))nT;eh5r$L#kCGa4ee+E7G1+<Er^zh3@3z}%3G&R=qkx$$&-aTRGhk-Rv)#+Z%`;$T8>J=1j@j%L zw4N=`fSGNSp7vvA%QIkRYrWp9$TQn)2Fz@E&MbD!fSE1N1C|yy&w!b2lx{9|%soCc zTb=zBTdJhP2bz|5BC_r;DGFtg=()d$7RGhk*LrNkOMRc7n^O~lmt%$8@s%r;7sKSa!I ztq06(F%Mi@+?W9~TaO+pcFcg8ZR8t%RNRqYM9kuie89{$N@uJ?%xrlE%xt6do*y&Y zYzEA1dH(Zb+UBNou25B?~Iljy7Fzu|x!(s4@b9~xirZML{!Mr>Rp?nsK_ z$L-0ZX?+Ej7$wqCdT3Z09jN4Xpo138w@jI zF=+bc1PyKpH5eOB3RnMovqAo@8x8Upaf1;?hI(m5F{&hJz*6q@BpN-W5Pmoc&EZyr z8sx9=!QgU;GcxsXBgOEBwDu2XgPAI-2QiEx&CpwnJ4`0mE zV9IUr@1j$(-D^XPSP$ug#a$sreBz>vOfjz9YUU9ud1@uXh)yjrz7EBR4{wx_DUW~t z$IK&Bj4&fpZ{N!rBh1Lu+cUPAdBiVf+YK|~eMz}jhhoGTw!1jQh+n}`Mm$E!{ZBYX zv><6-j{VW>OZ>8pF=BI@a(jhi(A9^s_kZOj#E4(3^h+@zMy9@e8e(Lc{o32jzGP}8 z!ibGW$~`|6Bi>5NU7Lkry9fPb<`M6U?am4@GSz9Akts&a9idh-jCzC-n>pK^5{eP; zZIqEIkMcj8d1Q(aX2g4Ix#K8C@MU23ag&3Kx$_OJiw<)*rFXnh;8nOHkBh&Q~W@PHi!=V`QnX}z* zLySzVL>RI0NVzqCHTx28CFS0qg<-p!LX3D{Y`5Dkvz2(AMj4r6d=!e2Y1AW(*v!$( zUUr*##CscMWXj{UtTDojOuao}PqsY5j7+_KDikBrRT*Z)`;v0M48@2uZ1;%Y%uF*~ zm0?CaM#{Z793xhRwtH`gk?E?8Fk*9?a^DWe7#Y7;Rw@YfWmLf6O5iVx!;DOQIVBV$ zQw7}^Vr051BaGO1q}*3RG2*SH+|%eWJa~$aGi>+f5F_3f`n_b@Y&VFJsZPU;Ofjwx z#mH2r5k_q0_>I+xEcd7|BU2vJC`QniOydz|Wa@2>oh?R~k*T-z&Nm~EOjl)?5${XN zoga!3XV~t}5F^u78D_*|q}(H&P^PgewB7z8My9JW!iddn%AFOCk>RSOZD7q2%WzeO z8JYT0g*L7(YW6Mn5@H0;LGi0H#)yqa%6%Y9D=D{by68M?w{M6M?~CPbA%>A@ERQH7 z9>aErlrZziRHqR}Z00QYJBktH5x=6MjCdZFJIu`%Bg}|jmGq07C9}l{Gcxsd3dIQO zBhytGX2koFa$gI@h%+p=WT}MtIpLDv{=)s@&rQONc#M>LA;mBa~n*m$Je?O9q$xmV^Cormqd z5MsppV!OweF=NE*G|I>nwcQ^Au~j8TdowygL?NsS(CU?ax85QOcVU305AY*&6j37F6QExN z=n++zD=$UuOQQeI)8|Yjr>bG;WGZt_Wsj+xQ_b+X&s27kLT`=LcdP!rx}iKkil4zx zrgB;h!}2UC-aB1OALzddwu^|;lZ7JEuvl)HgP72l#ZDs1Yh&k&DBMyt{a}4W6z*aX zg`0CQ6NKAUM2WjdMB%!%jNC3Xl}AkFS5rAF*YLT^RK7KpR<#Yb zx+5{2+ z0(o+IYve(}Zgr{ElrjDOxRX=fN^Ldd^3;Oh6|7VvLq6A#2O9DuL!N8Ms||UpA#E|JJvsL{D>cxN=R$5qyX(mmmv%}wvQj+#>|3Lyb9yH$#g$>G<)os@Ipt1q&c8Qd zrQVL{{B~i-D(_UP>Qt>|rBt;@wNm_IVZ)@Vn)n^UhDlX5@#};Qld5XsHwQab6{mV_ zE2XmKRHPpB8-#(YtT?|Z*s;nw73w&3j>?+M$4|s_DY8NmVsX51Uj~(}u7~RWl!9i)x_`7b*!pRjRsaqWvWkFHu-(Jz*Sb9 z-=phTu2Z(UQ~OverK;sru5P9HmAam(W@D&o;sj4P^bFN`hRZaZTT*IWQn)v;=s85x(KKVVlz*Sb9-*;<-QdL9o zt8WdHs%ql5+!`iT)xtE_jq@oJ{3UT*w?S>sAnRZaYE zSt9{eH35FjtYK1BP5ee#!=$R3_~o*ONmVuRdu0D#W9J$gS6YYhH=&6*1((KFUeK&T1OKGsM=Npy-el28&&V~r$~M1NQ# z2_?Pt@Cr#Ni7v5b@M8poPx2qm3cDG4Rf9@exHN}@BYk%W?H3Tq^xB>KY|Nhs-!m6A{r zU0}ohRIL3;H`s7qvCh*4Hd|QkTcH+~hOlPMg_7t6Yvv}@1ZWFuB%vfaz#2&?iDs}y z5=x@)tC56~XaQ>^p(MJ$n#l__c^bhQNhpb)utpL}q8+RmOQ^Bv3~MBzB$~pS4u$HF zez2yMP_1YMYb2p0y22VsD2ax!MiNS*_p6bFl4t{KB%vfaz8Xm=iDs`x5=x@atC56~ zX!&X+p(MJyhW)8n`;#uO;k;s*&6*1((c{%jK&T1O?$t;_NpyBK zl28&&UX3J_L_b#}2_@0m)ks1~bage87i#h}cr}tx61`rHB$Py(S2LDSW6|-|NJ2?8 zdo>*j)ggUeO)H^V(el+uLP>OYHIh&gjb4o;ltfQgBMBwZ&ecdlNpx~Gl28&&U5zA^ zME_PJ2_@0W)ks1~bZrg$Q?d3Z-CM(X#X3*d)@)(9Z-rV|8n~J@7fPactC@gM6QGT& zk%W@y*lHx9B$~GxNhpavtws_`qGhX*gp%miY9=q#2fq? zHES-^n$wfjOhBj!(4N&uLP>ODHIh&gO<9d3ltlkkBMBwZiq%L$NpxW~lNW08G-NfG zEYu~_o7J=usugWn%~(Q>MTb@+2_?~-)pRIShri6E^;-sq$6Rh*%*@S$I|_q^{Vw;F z6n72o!o!O<&r#YoxD7Xjwv&VW55GC24PDy#E|;T`SBPnBl;$9xraX+-Y;`#r%7mEz z%VEgpBj7Yf4xa#r`15$O%XklddHdHa&hK%#Nj%WydB(4r_-`gYjAyzb=aPy4V&Vxr z)@9C9dtL4o6W_^V_CJLuyP=;im{@KJee1Llx%=umfU&Eu=*D}5gzHHim6U+y@ybsKO4V;YO z3%UO>_d3G7na_{FXH5I+;7?}vi`V;mHBH;U4PWnrmrOo3L3cek-$%jD%x@bxD_ozq zgGcZHoA;gbD}ebxJMbZspGVFN_^Q!QgPVpw0OqTL`;z??!CSNS+tk0qHNbqb9oFMx z;K2#LqO>1A4Gx9#yA0mhUH@UX27C_p|7mFK|Le>*?Y|AaYS!bs;NJZkcGtk^%N5`5 z*#5`hb0+_%;1S$k{Q4u+e+52c?$7VQH*tNBXZoMOw@mvx;ERUufrrpvSkDLGYeru? z(3>CEXA5}3jQ2P=lstk1WTU?u+%)r@0WX{RodTaR_viiKA;agu>5CDE&Hd}$9QdZu z8{mtE-SeeZGFoUj@1tVHC(*o1;&w86s8DiH+DT__4q-WN#q*VR61RL(^QCH|9=Fk? z-0<_&Mlq`Ta?)tEebiZWrADn;jgz=s82RrRey&ol_^8#2&ilBYw9dP^R#c09xl^m1 zM-xLHnaPS&?`O_Vo}Bj6r;d2<{E-iynml>@IkY-@>IFZ2EK`piIqUq<6Q`#pPx#X_ zGtW=Y`q{~;6Vu+6M)!^Tv3;)Ds?-yIa6ejBE5(v;Cs8Z$wWv~`IC|pv)N_7cVGQE& z*^|C^?XxGJMs_Gi|Ti-+sBBDvH^=cj=S`L@zY}y zYZ#ZKB+91KomaE$qh_WGUY{_EiFcD5LGKL#obAb z7RJ;8yYn1hmmdbfXq}|pO~-94)tc?L9}U4FG@GwA>e;H{J}BWp2*#Z6U>{V_h$FNc zej%!tv1nTMCU%N0&mTXHPRfl^xWt{-TbiaSKRuvLuBY` zm|BY#(`(f_>@j~{xTqvW9Kx(QNs9J;=14Ok-34=Eh_Kc}>tPt`vwnL8_r7FHxbvta;=f(J*`2QCE zJm8OJe0z775U|?!cGOs&KwXQG#Dvv))S-%Gkg}E&J`TZap zw}=L;TX8Ooi)QIqFXH&`EN>AxtP?nA#|65VQ2E}N?Y@s3)(OO+KVHK+)C;K0n?k*h z9M(Ky=50p}dHB?oUKhtnf4<@3@{F^>JeHSHc}>jAGY9ny;!uETpP$1qy40vW9Sc`G`o2x&h|OhCxdA6t|Q)visel|AKdG4F*euPZ$};I7oW)SXkjD(}j-2HXX6Zsn?F_Wj_M;T0(I4BowMecAB5YwqBlPY2?tRyF z(oRVGwMp+p=bd}*`R=**o_k+>?|biltD~#a%_HUHnM2byc-3`4ag(=z)wNfdX7d0mb2W zkU_35KM@jQ;%kcAVe@;1Y&U%(DW+hbf}K1Loy>mG2l;uF(Hw3Xv2 z6a(oS>+}UkFPov?HbcK=hJII_ego3i*Xi^(Ql}e8Gp3qoe^x7y2AF+mK!Sar&&VQf zeT-L|FxPD~3syXpF^h#nToh6RnOIunidI47@~Mo~FVfk}z@EXJFbfGwO0#b$X7;Cm zOFfhjrb%b;5zAZVU@VmpYr590T5aAES`k`VOSht;p7mxtkxvYy3RWWDvwk%kCwgMN zY5Eu#%w`-Prh;A)i1u? zkds>8t@M_#l4HL1bGeU*=w3o%@pux)$)5zA|zD81(2 zQLztmcV$1vJq5{rt`XNHljlwYYCp$aNRsArC#23@Xp))dj!1nWbzaW>RO*YV8`MXo z&SbKM`iRuWaqS<0E@{R4yAJ-fbauSEXLFT%#(kA;G_za^zh&Fq<m1z{|=82fZ9^;qcqlV)A6H|-h-8+?=A7X^X8=0JpAMoU7oZq zLzufa*(c#}c;^&+DsTNGbW*(+pna7G;S)X{c{PkGMDa_*C58g+nO_=fv=1{x)jyrL zZTP6(2Fn{I0zK3Ho!bG+aC5Li$M9DD1SR%W7D?ZJyXY^M{1~_H>PqDa?b_ohmv+Nb zcXc`PRJmZaBFmk@9{=FZvuJ>Wfl^(litayB3?A#4_~6$s{CT)zVi;}rcMtD8TP`h- z6`cH3Hub$LQCMbQFS9>U*(0jiUBLznuKkTER=cUXK~|bUrEpd*oq7{3-7~lPGgYQE zX%`pBrYw`Law@yJ4qg5^Iv~o4$?ZFKmSa=32{5wt-fdf|9|O3ra+P%3IGhf)RA(Wl ze0UPol}i)2-t@-N^ImJo3L7EYYFojjlAn5&w$d>VLVo-C;+fKGjXQRkJN4*sVpLGA zyobIo>o|dTafbWa>juCH2jk}C5 z#xD~$_r~I8&dNLLK-Myx9MO@Nxr2C5=vm~ub1lkp<6r&2wz*-y5Bt@ZA(N1C$U`66 z_HoElkY^z~|8CoUynB2e@~e>kf7tc`NIo$jc^=vXL+tA1D#6R<#0XG6}1l$O?5pW~m zM!=1L8v!>0brCo*Ux-J*+%J(EX~Rb9a)>BCRKFUM-_b6D@q@vF(vtA zlvPZX&Pc0RE1eNX+f*^&@j)_(F(Ub7^i)ihu0B*|td-7@0y%y2$q~adgqkjAgczym zoEh+6(*siHTp{_yJe4q%@Hvj#YdS|*h{tNW3O?r;$tOo#%`v5`ryP20e9lbbx7*78 zd6ft&;gd5-h+s|UQw_|en$8)0fqatv>G= z67{b@(m(xpaL05)@*W|1@RWwnOL(7=h~EpT`|Ck}pOF@IVf}}Y+#SZV8A$qj0rC{e z^O+3G&us56kpK4exPUzJ&QWPz>5tD>bbEM5or138=|MdI23@y@_K%?J@!}oH=TssL z26+(Q&0ZvG@tG^GgFTG#Cu{-Q7h=L81M(i|r-A2`Ti^|dccJU?G4RxBcO9OyAwNUk zKSO^8`qD6fpeB@mc80wLx}J{AkFtK6pNuZ7^;6fd-3HuJj<_zei{ir-(q~;hMWrH0&2qeoew{?FR(;B$3$w&!7%cgTQz8v1(GGqCCY_FNf zSoyu8KOY-RnDOG^;9eA|(@Y?(X;3RsuvWCAQGMBrl^C+j-eSKfBnBQZld()ZoyfyM z=jO=z4zpuJ)Wji@=`P~JjBei$S-)=ebc;NbGCS5f9@a)T3v*4^##NCnb7N=c zmX02?C$g%mgI?unm%c(#cIGoqwG6elg$5Fqnd>vHWHEDpsCURYRTB>DQ!=gkfK7dt zbJk{BRw5p=V$K1bX$JG6YT`p^X#FXj3wR#N!QjA^I&LG6`dl#MoX(81IA*+%bwWJz zu+T+Ef2RAXMT%o7%>JC2d=Tz?3k9cYd0NOcaTG|88P5n^^573gUx-j)@1Payg|zZY zCUpu&l@j@!2xYQXA{1G*ZkZJuaI}F;G1Oa3;hb11E<)6ju|iUW;(Igjr=*ovmIo5~ zLMoe?rkJqh6KUdABA2#ANOmfOWC#!bMTk>UggC*0$;zP$C6dmRPR8LvYpST4+p2_4 zqk`CAst=WCEqX@NIOHKjOoVWQ4dSM8?%dB7T$Ax%6>s!uaR(75Bkkb@cosc})H|B3Y${c)W_Hjq{;6NMvo1DNYS;wNV6KLU zEkMq2x0AGr1`fr(oM=DLYYf5dU!s&U^znr&r0_{T2UVA>(#NKb$@&H#>_lNNPh zQDUD2YaG{KWVS~W)8rq5HIBa{6MdKjOGvAa^0HN#lNn42^rtP;0*)W;mpA$DrfaNzMhXM|dt&+X!Wv{1%w2ObnM? z*G&Eg++SelSP;kc4$rxcJ9!Y&7vuLdn9U)M>&mg^7srM5R_kyg45jtr`-8X->u^Ef zg21sJO~jBs1~Z@ahQs)c2kw_hYcia~6eQaRvn1lU|I$R8W;te#VJ&c@sEk;2N%pr1 fl5?4LYO3CfIaF7WzDQg$)#FN-1hcdeHl6%8L&2uM literal 0 HcmV?d00001 diff --git a/tests32/test18.c b/tests32/test18.c new file mode 100644 index 00000000..f609b754 --- /dev/null +++ b/tests32/test18.c @@ -0,0 +1,30 @@ +#include +#include +#include + +static jmp_buf context_buf; + +static void segv_handler(int sig) +{ + printf("sig = %d\n", sig); + longjmp(context_buf, 1); +} + +void test() +{ + if(!setjmp(context_buf)) { + int *bad_ptr = (int*)0xdeadbeef; + printf("*bad_ptr = %d\n", *bad_ptr); + } else { + printf("got bad_ptr\n"); + } +} + +int main() +{ + if(signal(SIGSEGV, segv_handler) == SIG_ERR) + printf("Err = %m\n"); + //printf("handler = %p\n", segv_handler); + test(); + return 0; +} diff --git a/tests32/test19 b/tests32/test19 new file mode 100755 index 0000000000000000000000000000000000000000..9ee17c3aeb1d5f3fae5d5fd92d36a8e7948d3e54 GIT binary patch literal 15676 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 T +#include +#include +#include +#include +#include + +#if defined(__x86_64__) +#error Nope! +#else +uint64_t _fucomip_(double a, double b) +{ + uint32_t ret; + asm volatile ( + "fldl %2\n" + "fldl %1\n" + "fucomip %%st(1)\n" + "fstp %%st(0)\n" + "pushfl\n" + "popl %%eax\n" + :"=a" (ret):"m"(a), "m"(b):"cc"); + return ret; +} +uint64_t _fucompp_(double a, double b) +{ + uint32_t ret; + asm volatile ( + "fldl %2\n" + "fldl %1\n" + "fucompp\n" + "fstsw %%ax\n" + :"=a" (ret):"m"(a), "m"(b):"cc"); + return ret; +} +uint64_t _fistpw_(double a) +{ + uint16_t ret; + uint16_t t1, t2; + asm volatile ( + "fldl %1\n" + "fstcw %2\n" + "mov %2, %%ax\n" + "mov $0x0c, %%ah\n" + "mov %%ax, %3\n" + "fldcw %3\n" + "fistp %0\n" + "fldcw %2\n" + :"=m" (ret):"m"(a), "m"(t1), "m"(t2):"cc"); + return ret; +} +uint64_t _fistpl_(double a) +{ + uint32_t ret; + uint16_t t1, t2; + asm volatile ( + "fldl %1\n" + "fstcw %2\n" + "mov %2, %%ax\n" + "mov $0x0c, %%ah\n" + "mov %%ax, %3\n" + "fldcw %3\n" + "fistpl %0\n" + "fldcw %2\n" + :"=m" (ret):"m"(a), "m"(t1), "m"(t2):"cc"); + return ret; +} +uint64_t _fistpq_(double a) +{ + uint64_t ret; + uint16_t t1, t2; + asm volatile ( + "fldl %1\n" + "fstcw %2\n" + "mov %2, %%ax\n" + "mov $0x0c, %%ah\n" + "mov %%ax, %3\n" + "fldcw %3\n" + "fistpq %0\n" + "fldcw %2\n" + :"=m" (ret):"m"(a), "m"(t1), "m"(t2):"cc"); + return ret; +} +uint64_t _frndint_(double a) +{ + uint64_t ret; + uint16_t t1, t2; + asm volatile ( + "fldl %1\n" + "fstcw %2\n" + "mov %2, %%ax\n" + "mov $0x0c, %%ah\n" + "mov %%ax, %3\n" + "fldcw %3\n" + "frndint\n" + "fstpl %0\n" + "fldcw %2\n" + :"=m" (ret):"m"(a), "m"(t1), "m"(t2):"cc"); + return ret; +} +#endif + +int main(int argc, const char** argv) +{ + double a, b; + char pf, cf, zf; + char pa, ca, za; + uint64_t flags; + uint64_t tests[][2] = { + {0x0, 0x4082c00000000000LL}, + {0x8000000000000000LL, 0x4082c00000000000LL}, + {0x8000000000000000LL, 0x0}, + {0x8000000000000000LL, 0x3ff0000000000000LL}, + {0x3ff0000000000000LL, 0x3fe89d9000000000LL}, + {0x3ff0000000000000LL, 0x7ff0000000000000LL}, + {0xfff0000000000000LL, 0x7ff0000000000000LL}, + {0x3ff0002ca0000000LL, 0xaeff000025000000LL}, + {0x3ff0000050000000LL, 0xc082c00000000000LL}, + {0x0, 0x7ff8000000000001LL}, + {0x7ff8000000000001LL, 0x7ff8000000000001LL}, + }; + int n = sizeof(tests)/sizeof(tests[0]); + for(int i=0; i>0)&1?'C':'-'; + za = (flags>>(0+6))&1?'Z':'-'; + pa = (flags>>(0+2))&1?'P':'-'; + printf("%c%c%c\n", za, pa, ca); + printf("FUCOMPP 0x%llx 0x%llx ", *(uint64_t*)&a, *(uint64_t*)&b); + flags = _fucompp_(a, b); + ca = (flags>>8)&1?'C':'-'; + za = (flags>>(8+6))&1?'Z':'-'; + pa = (flags>>(8+2))&1?'P':'-'; + printf("%c%c%c\n", za, pa, ca); + printf("FRNDINT 0x%llx => 0x%llx\n", *(uint64_t*)&a, _frndint_(a)); + printf("FRNDINT 0x%llx => 0x%llx\n", *(uint64_t*)&b, _frndint_(b)); + printf("FISTP 0x%llx => word: %x\n", *(uint64_t*)&a, _fistpw_(a)); + printf("FISTP 0x%llx => word: %x\n", *(uint64_t*)&b, _fistpw_(b)); + printf("FISTP 0x%llx => long: %x\n", *(uint64_t*)&a, _fistpl_(a)); + printf("FISTP 0x%llx => long: %x\n", *(uint64_t*)&b, _fistpl_(b)); + printf("FISTP 0x%llx => quad: %llx\n", *(uint64_t*)&a, _fistpq_(a)); + printf("FISTP 0x%llx => quad: %llx\n", *(uint64_t*)&b, _fistpq_(b)); + } + printf("\nDone\n"); +} diff --git a/tests32/test20 b/tests32/test20 new file mode 100755 index 0000000000000000000000000000000000000000..d329fa9d6fa8a025ef13eb5a1b0762440adbcfa1 GIT binary patch literal 15544 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 P`*}W#IWLW{$>hHP)s$x| literal 0 HcmV?d00001 diff --git a/tests32/test20.c b/tests32/test20.c new file mode 100644 index 00000000..017e925c --- /dev/null +++ b/tests32/test20.c @@ -0,0 +1,48 @@ +#include +#include +#include +#include +#include +#include + +#if defined(__x86_64__) +#error Nope! +#else +__attribute__((naked)) uint64_t _idiv_(uint32_t a, uint32_t b) +{ + asm volatile ( + "xor %%eax, %%eax\n" + "mov 4(%%esp), %%edx\n" + "mov 8(%%esp), %%ecx\n" + "shrd $0x10, %%edx, %%eax\n" + "sar $0x10, %%edx\n" + "idiv %%ecx\n" + "ret" + :::); +} +#endif + +int main(int argc, const char** argv) +{ + uint32_t tests[][2] = { + {0x000002d0, 0x00000500}, + {0xfffffa5d, 0x000186a0}, + {0x00001701, 0x000186a0}, + {0xffff9a19, 0x000186a0}, + {0xffffe7f3, 0x000186a0}, + {0x00015840, 0x000186a0}, + {0xff451330, 0x000186a0}, + {0xffff626a, 0x000186a0}, + {0x00009120, 0x000186a0}, + }; + int n = sizeof(tests)/sizeof(tests[0]); + uint64_t res; + for(int i=0; i> 32; + printf("=> 0x%x / 0x%x (%lld/%d => %d + %d)\n", modo, divi, ((int64_t)tests[i][0])<<16, tests[i][1], divi, modo); + } + printf("\nDone\n"); +} diff --git a/tests32/test21 b/tests32/test21 new file mode 100755 index 0000000000000000000000000000000000000000..07bea1b02ea876eccaaca75fe1fb508ab59f1082 GIT binary patch literal 15060 zcmeHOZ)_CD6`wmF;DUnE3N_xZE2xwf4|us zvpBS>+E11CS#RIGdB1rx^JdPoe`dZOZfXbw0zy%dC=%30%7oYmS+U8nY!sT9C)S9E z#WFD)S+ptMj{@Wn^2kNttAcKRTng08q8I$7D8KeD3V(S%U^7;I!^ z-vc|;&k*Zpw_0HLwr>sUBC|Y%SRapdtdB?6#bb%gfSyk3)sC$kHpX`QuBXM>@T|Hm zm+kjXw*8>+!~X2wR{dh$w^^S4>4O*&@$4^&axR#58B0xQNXoo7zw(FkOnZsG6fH#J zuu>p3@LG>fd!p?v4qtHd*?vJ=!zvG@z_CAm;*5ji1c8uU^xbQ zli1$WxUJ5p)~oal)9K3T)P{|sVs}g9_QqYPyKSctHB)AHENz*oww-nHWWsEVbi_?m z)ZLp*xD7EJ=skfPlK{pjk0*0Y3u&R}pBU>J=Vdms{sV}0=%j9XPFQu+g ze_iTVaqSv`E~)BI`;PrSJ8`wSt);+1L-{r|>j3`twA*KH09zQu<@)f_ihS2d*NBo# z^RF<$LKl~#Q10b5NatSU^^2FSWy3E{p(Oft|I^1l%1)K-cGVxOsC3np*dHvAN-V7Zhf zFyQ!PJLzxo8CZtPEAqLfiV$LDzi zg(uKbX0MRhJ5~00_V9$TW@itNi_A*2(9Vq8nTcGsQo8h|OnM(x-bd}sST5Tqy}$Jj*4wJWlu=tD-QB41}|q`fA+b3dvlRnd1!JTe**JRe$_g}m~)pXpZo~;5%446N5GGO z9|1oCegymo_!00U;77oT06y>Gdt*>oX4s_?;vpTwdbyR+%UQ)D~kG_2SaP$+~?t?5q9*4XESr57Tnr)wgiUv^Xe^r*%!s(E4ieexsVN5GGO9|1oCegymo_!00U;77oZfFFVXH3Fv>2(cf`M>6iET?Wp8`SqF` zYq5b=T*jv3#gN=Dy9AO?WDkM4Z^>@6(x{-M!g802j+9( z17H%Lr>|olEg;w}?>uj!8RGLy!y(hZ1&I5dYrxzW&u7Vp!EEbI+fE)q7QUP&j{}D< zy-DWd@iO@}=zoX&Z=W3BX5}Ec=iNz)O=x@rxEw%AonuI% z-Uzw0#)(q^BgY-?94k@)Pxgl(IqoFlk3w>6NdeUUhLe<6)<3g7r(rp?!T|;32;C__ z{Li7P*aa}+??UGp0EZTc-yy-VCj~I#SDmE1a=hG+EacdFt0#Y{#pKn$4)nIdUOr? zIgd{J`_MTrNDG3C#3*#{e*8Z|*J`90?OQC*fAAa$-@Povc<^^5G^fAZzyB%pJN;QK zZ0MY$e2+qWh(98iSpNgi6`u94@YprjH&aJ_q=iBJGFv-SR+XN_e*8#B%&;Qe0vTy5 z)77PSiaUGv4XfAak9Zz;d;zra;rqV_vGax#Xy?t@hGNXFsy%9WA5HljF zRAkUF6INBx5?t(h6-q0e$XlSY388*VZ>J6M4sDE}>?aszJ zWaBW05#Hficht8CV|&x?ZM99t?uLfeaGTLqyR9jV5;M;~)Tq-8IJfZc&npZ(u}Q}Z zI-{@CuzE6y=k<;O_teC+4|Ls(My!aCokeAzDH9z)uJ?$=bXlIJKxk3gITYa@%$T;b zeRrRk;NgsEvy6H=Y4k)AQ68_DaqPoP;Os|NpV9MGcyRC5@XPmV4 zMAAJ%j}9hy*hESz~UvWPZTbc<`i|NoKr%jQ9-0P)`^xREqX@NIKVn$D0EEvUd(0Z=ky<4xrXAWE7v~n z*)LU?Hqt6Ej*&>*DP)o>XmClbZ#;UYa9l^!S~3$?kBq-yUF6T7|6|A+(p`lxt;BK7CtrlFh*;7-FxO|81=nWsgGj4-nNNNm%=MgU zuIc0&q`mb*6$imwGl}Cp0=Wih<&S;fy+RgD+%_=pDagFnAddGL3inN<*;dvg|1Y9* z8q+QjM|ugYa2he-{WQ45m=OCaSmBN!lg#!gVw!vctZ@AQPkx-8atW%W@8PO&T*t`j z{X7AxeQ&rp=|Y17ehosA!u=Q-^hcccY~D=V+aBCInh@l33IwVAy^HjGFowZ7ONdQ% z%7!eNrv4jnDVR9kkBt2b+=sApEQph54}oKY<@g{;UyL97#(qc~?kC2vnQ>-Zh%I<< zyzjUUoQ6C_#E`FnmA~>D_^P~n+=wCl70misFW1?nz$qKDqz}qlZW?Au#4UHz6s$|J vXV}FS;9f@t@2$C>({~w|bD4E28mktf)>DwaNW8W2;+8#*Ij@YcspLNatiB@3 literal 0 HcmV?d00001 diff --git a/tests32/test21.c b/tests32/test21.c new file mode 100644 index 00000000..cc003ffc --- /dev/null +++ b/tests32/test21.c @@ -0,0 +1,41 @@ +/* + * Compile with (on x86_64 archs): + * gcc -m32 -DV1 -shared -o test21_v1.so test21.c + * gcc -m32 -DV2 -shared -o test21_v2.so test21.c + * gcc -m32 -o test21 test21.c -ldl -Wl,-z,origin,-rpath='$ORIGIN' + */ + +#if defined(V1) +int __attribute__((noinline)) getVersion() { asm(""); return 1; } +int acquireVersion() { return getVersion(); } + +#elif defined(V2) +int __attribute__((noinline)) getVersion() { asm(""); return 2; } +int returnVersion() { return getVersion(); } + +#else +#include +#include +#include + +typedef int(*iFv_t)(void); + +int main(int argc, char **argv) { + void* v1 = dlopen("test21_v1.so", RTLD_NOW); + void* v2 = dlopen("test21_v2.so", RTLD_NOW); + if(!v1 || !v2) { + printf("Error openning libs: v1=%p, v2=%p\n", v1, v2); + exit(-1); + } + iFv_t returnVersion = (iFv_t)dlsym(v2, "returnVersion"); + iFv_t acquireVersion = (iFv_t)dlsym(v1, "acquireVersion"); + if(!returnVersion || !acquireVersion) { + printf("Error getting symbol return=%p/acquire=%p\n", returnVersion, acquireVersion); + exit(-2); + } + printf("%d/%d\n", returnVersion(), acquireVersion()); return 0; + dlclose(v2); + dlclose(v1); +} + +#endif diff --git a/tests32/test21_v1.so b/tests32/test21_v1.so new file mode 100755 index 0000000000000000000000000000000000000000..572bf57957907b44cb9fb47aabbfbb079cc3a987 GIT binary patch literal 14380 zcmeHOYiv|S6rL@M6e#5xkcV(J8!QGcZEX}pWJ_rQ(*k`UF@y}aySLrdebn7s(-I7i zLLxSp#%K(Y=np|L8jS%WMt=y42BQf`Oyq|@NG!=3n+UNQ1j71#_wJOX7DGtDPCEPKjrY#> zJ=Jvlmz|Mim(E0Z59EXKE-z(<0n@dQz4>>;hkJiK!g8V16%-8E3x}0CHYElO=2l|B z*a|dG7J_4&f~UC=dU-)vNZB4wCS=;NQjU~Du5D?MVLN5FN7Ig-YH6s6B@=dw)f%%s z-^d;r>at{8G-1V}+icNpJI~mubTpX|R_KM!Xv$Va_xToM3}twR)FS9Gy|Fe&46Y=GoTsJ4BRyX%{>Ff*~bySEAtzc z)V)17a=F~zubiUXxt`O-n=`qiTxjLqb=POEbr}I|eX4`rIe|=D->rYye&#y$4sz{( zg$vUCyLnxD#(AK3_f;?V)Q$Tt^$bjFWEYdZ&FpvPi@wbMWAm9adkB|ZrzF}Vs<|*n z&wziynSGg)*?A|g7x^yyaMhXC``RE=o_EIKHa0Zo&Ld&(mK(_FWozsEW8&QFOq6X# z;I7OV;Tpjva8i{GwWmW{&xm^vqvo}M=$&h+Q3@49=aU51A6(DTy76^BQ%%gHuPy| z{(emHZEF&~?Zv*?C4T?QSp6EPn*)6RdoJg$uS<*TN=u%eINtGhi50V!JyIEXi1k6> z1Y*>83T)E?e2RYE+|{MUdy7_17`@?ZWcG48@E^W|pE+L#4#1CaEt&z%fM!55pc&8% zXa+O`ngPv#W3US_UmS^o28 zF4={3G1t~5*uTvE;|Eb52b~1Q16;dupZFl!A*I-kxGB&w~yJd|>}1v|Z5uPjm!%@%;VJOAGwh=oq>`JY@_h zh%%oQ$3L9|Gyqq|iv=k2{h<`$ZCH#lpFhQix1bi~!hQNY$DqW35gJy0X;}FH%7y#- z4-NB+P|8U=oo#JqNZi`qFP*pyaf5#v=K#V<*&a)_S}_@RlBu+`I=e(D8SjYMjvY43 zM~>j8|ERQ5DXUxB2`AMp+EP~Bmf_BLycg)e7yTJRMP1BI(#>d!o~9?Tp64i=tuSmLgU6~JTo5q?=Nu&{y3&TLisO7lxZl6#{c3!% zd>rpr7#^x<=S9VBLz(#)S7mrO0$YiS+k*;zMvyP}j2AX#DIa5L6Meu$fN}hMD7!=4 zLHNlr<2bMLY#7gjshrg0Wi!C>F^*@8`VptNK-EychheKY&dY;{b3gkT1X1Jr7`BRY zUx4ykeX2O>V*vYSzy2UFERH!Sp98evc7<{C@-`KH3huMW`vQnN2M7P3FazNDCINg$ e*{71h3L%a%L0*)J$9`Mf`;Q87N(DiyxPJhNDQ_qM literal 0 HcmV?d00001 diff --git a/tests32/test21_v2.so b/tests32/test21_v2.so new file mode 100755 index 0000000000000000000000000000000000000000..47daabe99ecd657e80b06c6a1ffe760d2d41dcab GIT binary patch literal 14376 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 literal 0 HcmV?d00001 diff --git a/tests32/test22.c b/tests32/test22.c new file mode 100644 index 00000000..120f39e3 --- /dev/null +++ b/tests32/test22.c @@ -0,0 +1,70 @@ +// build with gcc -march=corei7 -O2 -g -maes -mpclmul -m32 test22.c -o test22 +#include +#include +#include + +// Hard coding types and alignment +typedef long long v2di __attribute__((vector_size(16))); +typedef union { + unsigned long long v[2]; + v2di m; +} mm128i; + +int need_stop(mm128i *var) { + if (var->v[0] >= 0xEEEEFFFFFFFFEEEFULL) { + if (var->v[1] == 0xFFFFFFFFFFFFFFFFULL) return 1; + else { + var->v[0] += 0x1111000000001111ULL; + ++var->v[1]; + } + } else var->v[0] += 0x1111000000001111ULL; + if (var->v[1] >= 0xF000000000000000ULL) return 1; + else var->v[1] += 0x1000000000000000ULL; + return 0; +} + +int main() { + mm128i x = { .v = {0, 0} }; + do { + mm128i y = { .v = {0, 0} }; + do { + mm128i enc = { .m = _mm_aesenc_si128(x.m, y.m) }; + mm128i enclast = { .m = _mm_aesenclast_si128(x.m, y.m) }; + mm128i dec = { .m = _mm_aesdec_si128(x.m, y.m) }; + mm128i declast = { .m = _mm_aesdeclast_si128(x.m, y.m) }; + printf("enc (0x%016llX%016llX, 0x%016llX%016llX) = 0x%016llX%016llX\n", x.v[1], x.v[0], y.v[1], y.v[0], enc.v[1], enc.v[0]); + printf("enclast(0x%016llX%016llX, 0x%016llX%016llX) = 0x%016llX%016llX\n", x.v[1], x.v[0], y.v[1], y.v[0], enclast.v[1], enclast.v[0]); + printf("dec (0x%016llX%016llX, 0x%016llX%016llX) = 0x%016llX%016llX\n", x.v[1], x.v[0], y.v[1], y.v[0], dec.v[1], dec.v[0]); + printf("declast(0x%016llX%016llX, 0x%016llX%016llX) = 0x%016llX%016llX\n", x.v[1], x.v[0], y.v[1], y.v[0], declast.v[1], declast.v[0]); + } while (!need_stop(&y)); + mm128i keygenassist00 = { .m = _mm_aeskeygenassist_si128(x.m, 0) }; + printf("keygenassist(0x%016llX%016llX, 0x00) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist00.v[1], keygenassist00.v[0]); + mm128i keygenassist01 = { .m = _mm_aeskeygenassist_si128(x.m, 0x01) }; + printf("keygenassist(0x%016llX%016llX, 0x01) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist01.v[1], keygenassist01.v[0]); + mm128i keygenassist02 = { .m = _mm_aeskeygenassist_si128(x.m, 0x02) }; + printf("keygenassist(0x%016llX%016llX, 0x02) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist02.v[1], keygenassist02.v[0]); + mm128i keygenassist04 = { .m = _mm_aeskeygenassist_si128(x.m, 0x04) }; + printf("keygenassist(0x%016llX%016llX, 0x04) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist04.v[1], keygenassist04.v[0]); + mm128i keygenassist08 = { .m = _mm_aeskeygenassist_si128(x.m, 0x08) }; + printf("keygenassist(0x%016llX%016llX, 0x08) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist08.v[1], keygenassist08.v[0]); + mm128i keygenassist10 = { .m = _mm_aeskeygenassist_si128(x.m, 0x10) }; + printf("keygenassist(0x%016llX%016llX, 0x10) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist10.v[1], keygenassist10.v[0]); + mm128i keygenassist38 = { .m = _mm_aeskeygenassist_si128(x.m, 0x38) }; + printf("keygenassist(0x%016llX%016llX, 0x38) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist38.v[1], keygenassist38.v[0]); + mm128i keygenassist4F = { .m = _mm_aeskeygenassist_si128(x.m, 0x4F) }; + printf("keygenassist(0x%016llX%016llX, 0x4F) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist4F.v[1], keygenassist4F.v[0]); + mm128i keygenassistFF = { .m = _mm_aeskeygenassist_si128(x.m, 0xFF) }; + printf("keygenassist(0x%016llX%016llX, 0xFF) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassistFF.v[1], keygenassistFF.v[0]); + mm128i imc = { .m = _mm_aesimc_si128(x.m) }; + printf("imc (0x%016llX%016llX) = 0x%016llX%016llX\n", x.v[1], x.v[0], imc.v[1], imc.v[0]); + + mm128i pclmul00 = { .m = _mm_clmulepi64_si128(keygenassist00.m, x.m, 0) }; + printf("pclmul(0x%016llX%016llX, 0x00) = 0x%016llX%016llX\n", x.v[1], x.v[0], pclmul00.v[1], pclmul00.v[0]); + mm128i pclmul01 = { .m = _mm_clmulepi64_si128(keygenassist00.m, x.m, 0x01) }; + printf("pclmul(0x%016llX%016llX, 0x01) = 0x%016llX%016llX\n", x.v[1], x.v[0], pclmul01.v[1], pclmul01.v[0]); + mm128i pclmul10 = { .m = _mm_clmulepi64_si128(keygenassist00.m, x.m, 0x10) }; + printf("pclmul(0x%016llX%016llX, 0x10) = 0x%016llX%016llX\n", x.v[1], x.v[0], pclmul10.v[1], pclmul10.v[0]); + mm128i pclmul11 = { .m = _mm_clmulepi64_si128(keygenassist00.m, x.m, 0x11) }; + printf("pclmul(0x%016llX%016llX, 0xFF) = 0x%016llX%016llX\n", x.v[1], x.v[0], pclmul11.v[1], pclmul11.v[0]); + } while (!need_stop(&x)); +} diff --git a/tests32/test23 b/tests32/test23 new file mode 100755 index 0000000000000000000000000000000000000000..7da449871f335b4e636cb1da571e1bf3ce18668f GIT binary patch literal 15016 zcmeHOe{2-T6`ngg;DF;hJ8lCZ2`l0TsLEm+7tw~6^N%xeYrxo!gNeej_U+l%obTMb zz4o9{1Gz@6>$oxq@lR8Uib{?8LsTLXs*+Z~xd~MoiKdZSwSSaQQyuC>u@$$VV&(dM zyF2zm9JT6SRkhE0``(-P&70Xbv!0u~ooBhNb2M^zs+~K{R#|+ z=b@6_^$V&Hh0oi(4UKLGv)_z|aAF4j8Tc)x4W^$l$S(mexeYd1`ns-}ky=Fv$)AFc zEd6`ohxs95eBM$w{O_{^dM%H!+r^ z8YqL(fK)4~E%}6YvWzt4OXc`hRh!QXrq)enH#Pgcf>tX%Qo3 z48_u>k?P&m8c!ySUVR{LAnMRaGT}6*+0Z3{%%l&QEyvaVD-+vr4>DirwXwT-S1nFi zFc!OqBeC1DUp{scQ^7Cx!6tE@RzMb|++o|5AzNO7y$pjlO^IX`C^3LDl$=z+Ek`oT zDLLRCc^U9B;AOzefR_O;16~Ha40svvGT>!ki464QiWP$ zU!H$_>{?$>;Z>9!%^yKidvnFQz_yv3Le$w>1RD!acl8y1#QJnR07rBze06`|-1&Yu zj=?c*!2{c7!_)irmon3Rg|DGBaLxv^{A&Ncz`5{M;C14|(}7EfyPpBNP>`DnHk_X@ z=K7yJ@YIAppKo~gz}P$JU{`Nc1mQ{kLNf%=u>sBSXnyDJ1%s5V5Ozd0MBbV0)2K& z_LK3hKLO8pZCxHNYrfn-jidQjHX%0W2#P)OGT>#v%Yc^wF9Ti%ybO35@G{_Kz{`M_ zf&cLg@aIAwev3>Qrt&$ZKKqI63gKH*_UHzbbLU@){o*L(cE}Tuoscg<79rap`I|J! zceq>lo~iJysVp!5mT!3lzZKvH{uFT5-V^%LSYiE^OzesGN~L;8QB~1iRr!U$O0zsG zcHIByCmZY5F#=GtUIe{F!WLpe$o9 z^MCyUoXz>>*P4ITiarwVk(U8416~Ha40svvGT>#v%Yc^wF9Ti%ybS#RWkA6T%9rs@ zJKs6xzOjDUIiE>2{(#V6Z(OjeL)*?`O5R0-N*p6#R^L&E;o*W?@TGpse)c;>_n7Kc32-!Iasc zCh>N^J`mGPeMp!_+HBmS4hneEW+obix_Bf&Ge@*R9tudKN+hWb#ghYiT#J~=R9e$B zSuvO#8I2pJ5mD=xM(|)lOw&^-{g7rP%+w(fP3a?s7Rii^96}YBr2%Q)2Gz9o?&e)# zExfx;!x@CO{@u;HI$BW+2RgLyV~+Q+wr-*A?A+7R+^OwpZ|@2BYQ4=Zonh3t^UOp@ zo{9LkrysK0wyHyhsf`Y5=5QwQv^tP=4qPn6s22l5Ga|aF3+pb?+=psKvM6<*&seC< zQyIu9YTJh_VBCJUSF`UDRMVzAMmX1xFL6&b= zPY(+8Mx1zC8I7AlRe zL3g(cQyd0!4J3~1Jvjtj#^XKke_swvTnl_w}apBW_X1?cQ6+pz!uDbyVzj`U5i z#3{sp>n)Fcfoa7&?!tAUkj(x_qE7xUSjIaD4B7hM?f_w0^nF|=Tj1k$(pc zfQjShiQ-4#{tQ3If;j6eA#gKJ8H5#!`8x?_|A^yxt}A#0^3MBZy9F1HpCjfz0ypcz zas95S$2y8KNo +#include +#include +#include +// Build with `gcc -march=core2 -O2 -m32 test23.c -o test23` + + +uint64_t a = 0x12345678abcdefed; +uint32_t b = 0x12345678; +uint16_t c = 0x1234; + +int main() +{ + uint32_t ret2; + uint16_t ret3; + + asm volatile( + "movbe %1, %0\n" + : "=r"(ret2) + : "m"(b) + : "memory"); + printf("ret = 0x%x\n", ret2); + + asm volatile( + "movbe %1, %0\n" + : "=r"(ret3) + : "m"(c) + : "memory"); + printf("ret = 0x%x\n", ret3); + + asm volatile( + "movbe %1, %0\n" + : "=m"(ret2) + : "r"(b) + : "memory"); + printf("ret = 0x%x\n", ret2); + + asm volatile( + "movbe %1, %0\n" + : "=m"(ret3) + : "r"(c) + : "memory"); + printf("ret = 0x%x\n", ret3); + + asm volatile( + "bswap %0\n" + : "+r"(ret2) + : + :); + printf("ret = 0x%x\n", ret2); + return 0; +} diff --git a/tests32/test24 b/tests32/test24 new file mode 100755 index 0000000000000000000000000000000000000000..c43b0fd5c358f5a8c48dc0f3ee8a7f012a75fef9 GIT binary patch literal 39860 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 +#include +#include +// Build with `gcc -march=core2 -O0 -m32 test24.c -o test24 -lm` + +#define TEST(fn, val) \ + printf("Testing %s(%f)\n", #fn, val); \ + fesetround(FE_UPWARD); \ + printf("FE_UPWARD: %.1f\n", (double)fn(val)); \ + printf("Current rounding mode: 0x%x\n", fegetround()); \ + fesetround(FE_DOWNWARD); \ + printf("FE_DOWNWARD: %.1f\n", (double)fn(val)); \ + printf("Current rounding mode: 0x%x\n", fegetround()); \ + fesetround(FE_TOWARDZERO); \ + printf("FE_TOWARDZERO: %.1f\n", (double)fn(val)); \ + printf("Current rounding mode: 0x%x\n", fegetround()); \ + fesetround(FE_TONEAREST); \ + printf("FE_TONEAREST: %.1f\n", (double)fn(val)); \ + printf("Current rounding mode: 0x%x\n\n", fegetround()); + +int main() +{ + TEST(rint, 1.0f); + TEST(rint, 1.3f); + TEST(rint, 1.5f); + TEST(rint, 1.8f); + + TEST(rint, 2.0f); + TEST(rint, 2.3f); + TEST(rint, 2.5f); + TEST(rint, 2.8f); + + TEST(rintf, 1.0f); + TEST(rintf, 1.3f); + TEST(rintf, 1.5f); + TEST(rintf, 1.8f); + + TEST(rintf, 2.0f); + TEST(rintf, 2.3f); + TEST(rintf, 2.5f); + TEST(rintf, 2.8f); + + TEST(nearbyint, 1.0f); + TEST(nearbyint, 1.3f); + TEST(nearbyint, 1.5f); + TEST(nearbyint, 1.8f); + + TEST(nearbyint, 2.0f); + TEST(nearbyint, 2.3f); + TEST(nearbyint, 2.5f); + TEST(nearbyint, 2.8f); + + TEST(nearbyintf, 1.0f); + TEST(nearbyintf, 1.3f); + TEST(nearbyintf, 1.5f); + TEST(nearbyintf, 1.8f); + + TEST(nearbyintf, 2.0f); + TEST(nearbyintf, 2.3f); + TEST(nearbyintf, 2.5f); + TEST(nearbyintf, 2.8f); + + TEST(llrintf, 1.0f); + TEST(llrintf, 1.3f); + TEST(llrintf, 1.5f); + TEST(llrintf, 1.8f); + + TEST(llrintf, 2.0f); + TEST(llrintf, 2.3f); + TEST(llrintf, 2.5f); + TEST(llrintf, 2.8f); + + TEST(llrint, 1.0f); + TEST(llrint, 1.3f); + TEST(llrint, 1.5f); + TEST(llrint, 1.8f); + + TEST(llrint, 2.0f); + TEST(llrint, 2.3f); + TEST(llrint, 2.5f); + TEST(llrint, 2.8f); + + TEST(lrintf, 1.0f); + TEST(lrintf, 1.3f); + TEST(lrintf, 1.5f); + TEST(lrintf, 1.8f); + + TEST(lrintf, 2.0f); + TEST(lrintf, 2.3f); + TEST(lrintf, 2.5f); + TEST(lrintf, 2.8f); + + TEST(lrint, 1.0f); + TEST(lrint, 1.3f); + TEST(lrint, 1.5f); + TEST(lrint, 1.8f); + + TEST(lrint, 2.0f); + TEST(lrint, 2.3f); + TEST(lrint, 2.5f); + TEST(lrint, 2.8f); + + return 0; +} diff --git a/tests32/test25 b/tests32/test25 new file mode 100755 index 0000000000000000000000000000000000000000..4a6213a639d6bbc733a589dc77cb470b1e79e486 GIT binary patch literal 264064 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

    F_#T-8~X1p?eY*Wl?)0dD?%xQr#`a38!H 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 N3JM3 +#include +#include +#include +#include +#include +#include +#include +#include + +typedef unsigned char u8x16 __attribute__ ((vector_size (16))); +typedef unsigned short u16x8 __attribute__ ((vector_size (16))); +typedef unsigned int u32x4 __attribute__ ((vector_size (16))); +typedef unsigned long int u64x2 __attribute__ ((vector_size (16))); +typedef float f32x4 __attribute__ ((vector_size (16))); +typedef double d64x2 __attribute__ ((vector_size (16))); + +const char* string1 = "This is a string"; +const char* string2 = "This\0 string "; +const char* string3 = "is\0 "; +const char* string4 = "maestrum-foo-bar"; +const char* string5 = "\0 "; + +typedef union { + __m128i mm; + __m128 mf; + __m128d md; + u8x16 u8; + u16x8 u16; + u32x4 u32; + u64x2 u64; + f32x4 f32; + d64x2 d64; +} v128; + +v128 load_string(const char* s) +{ + v128 ret; + for(int i=0; i<16; ++i) + ret.u8[i] = s[i]; + return ret; +} +v128 load_stringw(const char* s) +{ + v128 ret; + for(int i=0; i<8; ++i) + ret.u16[i] = s[i]; + return ret; +} + +int main(int argc, const char** argv) +{ + printf("test SSE 4.2\n"); + + v128 a, b, c; + int ret; + int fa, fc, fo, fs, fz; + #define GO1(A, B, C) \ + ret = _mm_cmpestri(a.mm, strlen(A), b.mm, strlen(B), C); \ + printf("_mm_cmpestri(\"%s\", %d, \"%s\", %d, 0x%x) => %d\n", A, strlen(A), B, strlen(B), C, ret); \ + fa = _mm_cmpestra(a.mm, strlen(A), b.mm, strlen(B), C); \ + fc = _mm_cmpestrc(a.mm, strlen(A), b.mm, strlen(B), C); \ + fo = _mm_cmpestro(a.mm, strlen(A), b.mm, strlen(B), C); \ + fs = _mm_cmpestrs(a.mm, strlen(A), b.mm, strlen(B), C); \ + fz = _mm_cmpestrz(a.mm, strlen(A), b.mm, strlen(B), C); \ + printf("_mm_cmpestri(\"%s\", %d, \"%s\", %d, 0x%x) flags: a:%d s:%d z:%d c:%d o:%d\n", A, strlen(A), B, strlen(B), C, fa, fs, fz, fc, fo); \ + c.mm = _mm_cmpestrm(a.mm, strlen(A), b.mm, strlen(B), C); \ + printf("mm_cmpestrm(\"%s\", %d, \"%s\", %d, 0x%x) = %016x-%016x\n", A, strlen(A), B, strlen(B), C, c.u64[1], c.u64[0]); \ + ret = _mm_cmpistri(a.mm, b.mm, C); \ + printf("_mm_cmpistri(\"%s\", \"%s\", 0x%x) => %d\n", A, B, C, ret); \ + fa = _mm_cmpistra(a.mm, b.mm, C); \ + fc = _mm_cmpistrc(a.mm, b.mm, C); \ + fo = _mm_cmpistro(a.mm, b.mm, C); \ + fs = _mm_cmpistrs(a.mm, b.mm, C); \ + fz = _mm_cmpistrz(a.mm, b.mm, C); \ + printf("_mm_cmpestri(\"%s\", \"%s\", 0x%x) flags: a:%d s:%d z:%d c:%d o:%d\n", A, B, C, fa, fs, fz, fc, fo); \ + c.mm = _mm_cmpistrm(a.mm, b.mm, C); \ + printf("mm_cmpestrm(\"%s\", \"%s\", 0x%x) = %016x-%016x\n", A, B, C, c.u64[1], c.u64[0]) + + #define GO(A, B, C) \ + a = load_string(A); \ + b = load_string(B); \ + GO1(A, B, C); \ + a = load_stringw(A);\ + b = load_stringw(B);\ + GO1(A, B, C+1) \ + + #define GO2(C) \ + GO(string1, string2, C); \ + GO(string2, string1, C); \ + GO(string1, string3, C); \ + GO(string3, string1, C); \ + GO(string1, string4, C); \ + GO(string4, string1, C); \ + GO(string1, string5, C); \ + GO(string5, string1, C); + + GO2(0x00) + GO2(0x04) + GO2(0x08) + GO2(0x0c) + GO2(0x10) + GO2(0x30) + GO2(0b1001100) + GO2(0b0101100) + GO2(0b0110100) + GO2(0b0110110) + GO2(0b1110100) + + unsigned int crc = 0; + printf("crc32(0x%x, byte:0x%x) => ", crc, 0); + crc = _mm_crc32_u8(crc, 0); + printf("0x%x\n", crc); + printf("crc32(0x%x, byte:0x%x) => ", crc, 10); + crc = _mm_crc32_u8(crc, 10); + printf("0x%x\n", crc); + printf("crc32(0x%x, dword:0x%x) => ", crc, 0); + crc = _mm_crc32_u32(crc, 0); + printf("0x%x\n", crc); + printf("crc32(0x%x, dword:0x%x) => ", crc, 0x123456); + crc = _mm_crc32_u32(crc, 0x123456); + printf("0x%x\n", crc); + printf("crc32(0x%x, word:0x%x) => ", crc, 0x8765); + crc = _mm_crc32_u16(crc, 0x8765); + printf("0x%x\n", crc); + + return 0; +} diff --git a/tests32/test26 b/tests32/test26 new file mode 100755 index 0000000000000000000000000000000000000000..4efc881e57caf79c19646f6d32a8d61dc3329497 GIT binary patch literal 68564 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 +#include +#include +#include +#define USE_ASM_ROUNDING +#include "roundtest.h" + +// Build with +// `gcc -march=core2 -O0 -m32 test26.c -o test26 -std=c99 -masm=intel +// -mfpmath=387 -frounding-math` + +#define TEST_CONVERT_(stype, s_) \ + do { \ + stype s; \ + TEST_(s = (s_), (double)s, "%a"); \ + TEST_(s = (s_), (float)s, "%a"); \ + /* converting too large float to integer, the result is undefined, on both \ + * c99 and FISTP instruction */ \ + if (INT64_MIN <= s && INT64_MAX <= s) \ + TEST_(s = (s_), (int64_t)s, "%" PRId64); \ + if (INT32_MIN <= s && INT32_MAX <= s) \ + TEST_(s = (s_), (int32_t)s, "%" PRId32); \ + if (INT16_MIN <= s && INT16_MAX <= s) \ + TEST_(s = (s_), (int16_t)s, "%" PRId16); \ + if (INT8_MIN <= s && INT8_MAX <= s) \ + TEST_(s = (s_), (int8_t)s, "%" PRId8); \ + if (0 <= s && UINT64_MAX <= s) \ + TEST_(s = (s_), (uint64_t)s, "%" PRIu64); \ + if (0 <= s && UINT32_MAX <= s) \ + TEST_(s = (s_), (unsigned int)s, "%" PRIu32); \ + if (0 <= s && UINT16_MAX <= s) \ + TEST_(s = (s_), (unsigned short)s, "%" PRIu16); \ + if (0 <= s && UINT8_MAX <= s) \ + TEST_(s = (s_), (unsigned char)s, "%" PRIu8); \ + } while (0) + +#define TEST_CONVERT(stype, s_) \ + do { \ + TEST_CONVERT_(stype, s_); \ + TEST_CONVERT_(stype, -(s_)); \ + } while (0) + +#define TEST_2NUMBER(d1type, d1_, d2type, d2_, operation) \ + do { \ + d1type d1; \ + d2type d2; \ + TEST((d1 = (d1_), d2 = (d2_)), operation); \ + TEST((d1 = -(d1_), d2 = (d2_)), operation); \ + TEST((d1 = (d1_), d2 = -(d2_)), operation); \ + TEST((d1 = -(d1_), d2 = -(d2_)), operation); \ + } while (0) + +int main() { + double d; + float f; + int64_t i64; + TEST_CONVERT(double, 0x1.123456789abcp2); // FISTTP + TEST_(d = (0x1.123456789abcp512), (float)d, "%a"); + TEST_CONVERT(double, 0x1.123456789abcp29); + TEST_(d = (-0x1.123456789abcp30), (int32_t)d, "%" PRId32); + TEST_(d = (-0x1.123456789abcp62), (int64_t)d, "%" PRId64); + + TEST_CONVERT(float, 0x1.123456789abcp2f); + TEST_CONVERT(float, 0x1.123456789abcp29f); + TEST_(f = -0x1.123456789abcp30f, (int32_t)f, "%" PRId32); + // to be fixed: + //TEST_(f = -0x1.123456789abcp62f, (int64_t)f, "%" PRId64); + // The direction of rounding when an integer is converted to a floating-point + // number that cannot exactly represent the original value + // https://gcc.gnu.org/onlinedocs/gcc/Floating-point-implementation.html + // to be fixed: + //TEST_(i64 = INT64_MAX, (double)i64, "%a"); // FILD and FSTP + TEST(d = -0x1.1234567p0, (double)((int)d)); + TEST(d = 0x1.9234567p0, (double)((int)d)); + TEST(d = -0x1.9234567p0, (double)((int)d)); + + TEST(d = 0x1.1234567p0, (double)((long int)d)); + TEST(d = -0x1.1234567p0, (double)((long int)d)); + TEST(d = 0x1.9234567p0, (double)((long int)d)); + TEST(d = -0x1.9234567p0, (double)((long int)d)); + + TEST_2NUMBER(double, 1.0, double, 0x1.0000000000001p0, d1 + d2); + TEST_2NUMBER(double, 1.0, double, 0x1.0000000000001p0, d1 - d2); + TEST_2NUMBER(double, 1.0, double, 0x1.0000000000001p0, d2 - d1); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d1 + d2); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d1 - d2); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d2 - d1); + + TEST_2NUMBER(double, 0x1.233445566778p0, double, 0x1.3456789abcdep0, d1 + d2); + TEST_2NUMBER(float, 0x1.233445566778p0f, float, 0x1.3456789abcdep0f, d1 *d2); + TEST_2NUMBER(float, 0x1.233445566778p0f, double, 0x1.3456789abcdep0, d1 *d2); + TEST_2NUMBER(double, 0x1.233445566778p0, double, 0x1.3456789abcdep0, d1 *d2); + TEST_2NUMBER(float, 0x1.233445566778p0f, double, 0x1.3456789abcdep0, d1 *d2); + TEST_2NUMBER(double, 0x1.233445566778p0, float, 0x1.3456789abcdep0, d1 *d2); + TEST_2NUMBER(float, 0x1.233445566778p0f, float, 0x1.3456789abcdep0f, d1 *d2); + TEST_2NUMBER(double, 0x1.233445566778p0, int, 5, d1 *d2); + TEST_2NUMBER(int, 15, double, 0x1.3456789abcdep0f, d1 *d2); + TEST_2NUMBER(float, 0x1.233445566778p0f, int, 15, d1 *d2); + TEST_2NUMBER(int, 15, float, 0x1.3456789abcdep0f, d1 *d2); + + TEST_2NUMBER(double, 0x1.233445566778p0, double, 0x1.3456789abcdep0, d1 / d2); + TEST_2NUMBER(double, 0x1.233445566778p0, double, 0x1.3456789abcdep0, d1 / d2); + TEST_2NUMBER(double, 0x1.233445566778p0, float, 0x1.3456789abcdep0f, d1 / d2); + + TEST_2NUMBER(double, 1.0, double, 0x1.0000000000001p0, d2 - d1); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d1 + d2); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d1 - d2); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d2 - d1); + + TEST_X87_1("FSQRT", 0x1.0000000000000p2); + TEST_X87_1("FSQRT", 0x1.0000000000001p1); + TEST_X87_1("FSQRT", 0x1.123456789abcp31); + TEST_X87_1("FSQRT", 0x1.123456789abdp31); + + return 0; +} diff --git a/x86lib/libgcc_s.so.1 b/x86lib/libgcc_s.so.1 new file mode 100755 index 0000000000000000000000000000000000000000..27b054853cc37f1f89f1677c761e6cff6569dfd2 GIT binary patch literal 116256 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%0ARvsSOM|rn4@UrI69ltw!iI=eTO#Js+|j^=8Jjj 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 z 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 literal 0 HcmV?d00001 diff --git a/x86lib/libstdc++.so.6 b/x86lib/libstdc++.so.6 new file mode 100755 index 0000000000000000000000000000000000000000..f26626c067e82bfe68ff579a331a4ac961c700f6 GIT binary patch literal 1582360 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

    UHux&VEAv6#jy={Y8q=M>2{P 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
    G5cre+68#c$=Ll#JV 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%0D7th9sK# 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 Ut;=$=;9lmQ(QGssz0YFMd}w_pX8vpP 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�BroX3;`hE4`0E(2uV+FZy@P&hi+W-oUqN5ELtlU# ztbM&80{-ow?>T(bLLcS#&PgKbA3G#O4wt^u3je z{0!nLulH>n8C?-`39%mcqCnN|n;Og5P1YIcn6|RCjKp(*^!+h$@p-q`Slkpg}(SLZ1Ja!&|V1smbKRf z{$qiEnSUy`3H(gy?++`nUL;78@yE8eMBYW<)n<5>xuX4UUY?EL!d_AQ_394z3lF&I zWBmkw?{@%SNPZ;KZ^|UWBObXK3p+&CvwIZQyI2L8b(`^T*AMcHBv&&3CU^|&(;uEc z^alZ7+l0()4xaWaP)33?TMSFaD{q5e2J-E-`U4;Ee@CD_fhX%Ua@A1!Q3}8^ta*RB zY8~>1Q22QG8~lLeKOtQII}miAV={ixXC8oGj>hx&J&FX9`NQza0|(!zNdhKur3(A* z9pSHb<94HFRTIlAW&%0cY!c$$rOAFkgtq6BKAE*vc62%(^z9AHqRefPy1Np zRH67!OAG6PK6mHlU#gFI3HoXRH(v$fkz^!wD&*=_oPh7PiY@YI1%2QK`-5Rvd3b^K zI9c)WStjC3>3AikCpTWfFr=M@yvo|^*P;C%5fj0U{{ZoT50X8}Bq=8Iqh4wM6Q@5iee$ z;>Ba|U!*^UE%q~TBKYN2vpy&77f%O12JrF|1Vtdt<;T~%iuNIjNQ%_VKjbm^N+kUn z&CP!id6S%w^bcad&Yy?*>M`GVlnH%Ifd7oHJpPZZMgL-c{97nCeHL+%w?B%2uO5lh2tTp-%LF|Jiu4XZZi}7 zX3X>7RoDwdioU;tfbY$UE&4p=CEDYGT?@=l^hpQEk2WPgU0wjcNUSE)-({UZzfnSx zK8;=9P0-hjqHp7H;O7PWCvH8BFl?sx6dAG&Mbn}~rM;^RN#>3WNTedzB z34ta03d{tqeT@L|6&3I1o<$xn@E59C|71DQ?Bw$jIkV9?EA0YFm>@9&G zJOHQ7)mH)jSR{j#jei34l!CvZ2HEvJLOCC0GCsjaub#jUk}}HtpI9mEE480B8j9T% z_Fahf#J_d+1^(N~Gs`*nP2LF@NgeMm`9ObZQ2J{t6t@%!L}l`E81b(U75|<`JnMvb zHVoqvejOBvTvn9+x2c7{^$qbcH{U?uQ(W5252XD^@Ix&4LBjQ)vkLMB`5es2hYt2< z^5K6*p`NU__Be9Vfgfe-iG*U25Rt3Jk&ocD$$1 z&r_kFJEK3LS7{Fc69xMSwTm+1!%xtcLzGzmo4~7v_Ch4ABm73%J3%o-AlYgVH-AMo za>r5p<#`YCh9rbHQBV3OE&+ePRbuxqNPo*z0V6gRF=||YZ}>-*lt1Nh9rQtB#N}MQ zLlg9i0nZ0eZQ2@wi&;@4`Ka?|6%di{;$CZZWMpL_rv-P{Sevg9v z5W{|`bL~y%0{>LJnNkn=KoVOIu0AUO@>kz1Z-igZC!)Oq-Uk8L1fQFSfxnQT7;2F% z+aXzaJ(5l4qfFpafuKa-QAvaaY(2>XEurF9P3)IAQTrw3pFtmCb39DOuO|8e^J`)} zGXGL5;1kJ^#VC{dUl?B_T7*{(n#&F;0%kWwKS4k62a++1xcT?M-^@TVQLs7Nepce*NTe*YXDa6apN)vYG;IAm2juD7%KM+u z>F^IIc`BL=`M~3bMBd2$LqQz!vr_yTlZ5z>w%5tX`AErIA1IQH5Z<2(x{QG!pR)C@ zcmez(kulUF3(sH3TP>0&in#e!gRwKZ2-&x>$$F&VKMf7up66PlVVo`wMaateL{ z;#Uchd%B?+q3>7dcLwr=WwY~T!k;jQe8}|aaTppWAdldOwBOVn^uPn!GX9&_5&VSx z^7&lsRMw z?5tFW~1}1i{L9CS>1ICiA_&4f#eg+dOXllfZbDfY*yF_s9M~{eQgwL>>Te zfvxtPLIGc@A_KF|j&~09)j+aoPp&-q zCE$ZTl+ka?C+I`$H^}JKRtNfuYCjhGvND&K$1L!3CF}hP=uAhw-rY8OIcuwj6$bC`11t0Xo8NmS1Dm;2R~?UJm=Y z$=H82Mm^C-LkxfqPhpF^?X!nHP*h}kaPX{!ew9-CHA?_^`zbI`vn+mQr6MmZ zLoE1{TF=45(0A1Qy*ves9p!&?JrDk|#fxCv_WAK7>fM}d!?Jpb*k0=!gw)O#}e zixpeG2Ubc^|5V7n*G%9ktPwC`Z6)@-6jJV00e%Pn%Jh3Y4F7P-ztqHh$+b#sf5ML^ zAQ(P)Z~$&PyS_8sKws>aTXN;8fZK+m-x}DqN|bZv9Rv@aHJ|-~`2Qi1<$x^#mSoC^miIlkf}KKS`CsKYGI3&&xls-u6l@`mg6x z;2YnkWcCYZKAHSb{(DsxFoCZ-^tlxAHil)(VL*(} zB_R{dmH&7Pm|;}>GJ?o2#lMf?INDSGg(d8F{%s}pdnJMQ5aLxa;#G5QJ>I&Q4+)wj zY*~-#34XH#zctIdI-|S`xtS?@;|Tqqe_X^Aqdgf<=mWs<{bd+8p7K?!H;Vs0`e-NK z6r%d~i54)DYQ+})y$bvznZ?I5^A`a>k-U7b1b@VWKV<&bfEm!gc<5pl$KP+(LVimW z8AYz_g!3r*lllF@8Q2(zRaI=+p9=o~e7+PhP-`rHeR4s+Kz@IrdlC2%k507X>J0$T zN5p?x-1@3)F&_Mp;avSp;NOYD|GkIc&k{cVafbg!9){uI4d)uX?hQp@>_r*p7A*mtlIJN^YDz;}k<-yQl2 z{a^9l8x8M(9;cf3!w5aKupi)Lqr|>FLCX7KxWx`4_FZbipTdqnH20q-^ZB1*I`EJ4 z6!P4Bnyu>fi2S@#V*NRyAL1thKkz?g`q#G<`xOzqd=8n2axw2;b$AVZM#VQn#zSAl z@cdCx34XZ9)64EJ=s!(~jpqsc>+69J#5c0}uE#=OKtIU%=_l;FE9`r-zEWpGQ1+$D zdH(@l)c&$2@b4s2Z1ErWegpq2DYf`->%5>}D1I2@4|_UEk+FfnCh)uf|4Z@EKq`l? zQp`7tnr|)SDe1Km(-HLqUxoPo`xWOkWbhq+jPdUB{!cjcWd`)6Y(4)$;Y$`MvHQ_v zzS~|6FSRWYn8e^~EUnp~`wN-1U^db7=_V8~X!dZv1a(FQ(e-c*DPb%)`5CCiu^g zk1s~8guI+oWO{P_Plo|sJZJ+pW%0EchC+--dLDA+%E9<$7jOUU!@-aC@(kFXZEpa4 zb)@Fk&IWz)z4!!IA69_<7wmsF>tj8}9Q@~lh<+pZcZB?wL4IZap2BhPdtI~q5dM4l6#f(ZO`we(FB^(b z2zxK%$Cvot9(#oU-u_wwemup0f3ydFZK(AXAs$H<@cKUh^+T!p#_2mO|fgoj5^!0`OC*b=uSs#Jl3Gx*}jUR9Y^uhx}FjMUMJDLHX zIFF#njh}+{UR3)hr=gE1|H}^aQlsjBeFr=OKHi%V3wlxhb{*_@{V$&1{Lo*X>Muw1 z)l~j`(aqPepKtl^$D5U4pXu*?wt)W%KVES!&?k+LXT6|rGC~!ZU~YZp<=CGHQ(@z4 z!Y}jv!Jjx!2DGyDEWHYP`N}g=lnFnmZz28~AD_sd0ey#vm{DB&h9dAA>?70&+rQ5z ztgnHO=g3=T8K4i;9Xnoy56Wu1e(D;83OxL@lhZG608a+sA^c42OMDcnsrlP{Mg`y> zh93lextEY%DxUnN27CF6Kd<@P9{7WPw&2FAn2r5i>if<_L*UO3=M%a5GkD-Git_h* z)Bzqm@C354@I0Igd7$FC4)9;4?UY*l^9KvCeoDX1Lx0nceE$w>@dgLA9Jr=alm&Q-d}+@GWj?JLcXsN`t&kE|6n0=iG%N@3*`Nv3hN(|_;_U# z>@ECFY!k5UGZ7D(hV%SYWsmvbAAxPz`iCGynKJKxOzs1Hw_3=)LrCaRst^9$#QP8T z;15~C9|GE0`BH?wmf|rl89jFo0luE_{CEuVd6tsTJ&t%&4E9@-R%AN6GZF>cU@M!f#L7K8VaD10_xKhy{Np+Ou!U5)_$r^vUQKYJhtd<;-%@n4c8 zfbS*${cMXT^a~aLC=ti-unPOmCBbLFK><@j#Y;H@0S_LwlKFq55kCe|_P+QnBjI zFOQ=Uk7PtDv2SOR@qX-Q7zGO7S$~1wUJ5P#331mmsQAt<4)2~&<1bnWeL}5A4f9Fx zcoWFX!n5H!_(4U9Im(rl=7OK9g)Q=M9_=GML@oZ2-xrK0uheqh!;JyG`tbXIlPBTr zA)Now#CSwsr=q?R^$-hozR~@_kFZxuQ6}r_mk0j^@HN{XedgJD`0rG_;_d8@Y(B3_*7pdAEZf9?-x0&HiN#}jGW~cSip&!DmEmv4a=?F>KQAfg2mE#5 z{qJBy)Z<|}s7V%oW{A(65TB80$$Z~H&m4-L9igwtqf))_gYbtVzDMGV-0Eib@+r)ei%pD@b=%p~gjj#WI)Q&IkM zE%pbD9`oz_u^94B@yFUV0!Bie4^3@^{_3d2z-?gX+rJrQTxwX$!DGA^?`2_p8NQst z!9Qt=E$6F3pvaHqGP>g-ajt*a4U_}k(n#H$iK#3Yj!o!@9bkB?9407x><>s{u?Uxs*61M#GcUZR`8FV1tx z?CDj=XBpyYqTk8)`qSQ64~4IMZ`d>J*J-iq(_@;_uzo6j%mBaofL{Z-`S7APQ%{w> z-(tQG{C>FZNA&;2>l+t*pYu`0_Z|*k;gBB*6>lEILNuiEOh?6Ld5zc%d{F$mED-HC zDz=<&J*ESAU7Ghxi2Qriqdyf-Uh%{G&lLZ7cZ0khP+;H|HPfRA{1zZ$AeL-d0>j~h z^OSa6*%T#u=mQnS7JDpBM0`lC|EnhW7Z1K_a`P!KfqlRubXW!} zUq8>_`!c0(0^x8~8u9xXYN?Pn;9DlIPqE+Pg!>V2!&&_8%t9Idu`*Y_0K%5xyt9}q z--rYK@gSpYy+vWbN2($l-xGS>0;5QN^5-vgK|c|tA9`Mc{zUvI!g$30b(FxqWb)tZ zE(`^|o+>aRhP}CCdFPsGW!G06^6MZ#~!G7aH{`-S(qJWXeW511qZ~Pv7 z|Dfmt)y-5v7kBV@cd`O9_&zNzz- zITz92Uc~xeWd26Tj~7LszzE1A{AsvB?D|f22L37hoY{wWG^zGm5qP*!{QLPBzHd|X zNIMCClPaH~?$46_#NE(GPKbYG_QePK$SDW%2>v1Kor`#;K8%lN8jXS9AR%*(gRcbp z-A;Fu*!S#7`$+VQK>Q?=hc_?`Qp(;q#lYX7^so0t36`W&L9Zu@%p6QZ`j=}!o^f7b1UFyuRN&)|kmVmzzXS2i z4eI`b3haI5H4*zpJ;6_xOx#z1{=;yr{~Id7{Mf${bK_lZMV|!_WF2b%Ne7Jlo6;W| z`S>0L{1JI2_TLZwp(%ym+pWgigmp`){eow$>Q~uAzvKHV(88`)?giF|^E5Jh)29;r zi2dKOT>Ug(&;$F;)+iHwBo@jsQa>dIXkqbt9rTleehysw53S~_g*?PU9w3(Ne8xJk zf7tH=m@Iw{!_o1>IhYB4vlO-XhnfxOucpLY=f>}I7V=8bFHQ{p zh*MzspUjt_iTR}pOac@>DccQze!r%`T;cRV6zr*lvZu~nQIGyn-1w#!pg*X1>tzu5 zCz`*{(_0FB!2T0|j*M?ziiK?wwVWrKkM&gEN0cRBPY9uU{&`u~Ic zR^q&gCCX&|3jbk#>ib7D{DCs+ys;U+_e$`+m+(Jn|K=#ZH&OZ}5B~jn_-8VGI_?(m zv4%fyp@8^9gN{E^@O_!;A94=(z6JiaZfp9(}I4;C^|Lu~uRLeO`fSD^T;}7Cq%!dL8k|3st;Y!K!~F`GzBGY7 zcthd)bq~yM#eaXAa2fg!_D_xLKdKP;^5@Tol$cf1=>d*!90sJE@W$}Fv<$9{T>MZ0J@y-CQ{?|I#-`l)>J-QY8j?!nk@b8nCix{Al z9nWV6=--CdA7@f9es@0p6a&5t&_~9vO%H(2X#RWu!JDvG)c3;t1=zo!^y?jS$X~7k z|%Ye`$jCWn|--o;i{;ULl%INc35&SzE^S5bUpJ5Kpuzo;b(aDg58n1^(75wCHCIbJ%C>@9g5%n@kMpWyBX;SqJ*m zhm!9|JHSiDHwz#i^`-pxnqJQU|9O6Y!sI#NrQ(GNFkEHJ`TYv=PPZh9hxY~IGYQU1 z55@e19tDArC&c4NIC!os#rbWVH|WgOizR?Bga6((&=>g7kZ*}M#BG7U-TZm*jn|;> zu|G-t1HxaUus(lE|9C^cXW;yuOus(>J}Y5A8m=xzpdb9B8F=P9q z9LksL2LfM9`EmdZeFXe>qW_3~8hRJ&OXlyZxkJ7)&hz(U(=mV9HvYcL>kAlv93P*3 zdyDbGkIvkBa?oD9orhO@rhu`a;wRr!$h)zKfm_0^Uls9|dQ1MnQ;;XXE=KXrIo>%$sXWjVymEZHQ9@rj!`-DbdiMHAsaKpx;$u=vbv!uVn(W*XK<;2Df~AtQ{} zw|b`l5Bw>aKHNGU-=`6TiqN0vpPSXt57m796nGQz0ewuwg7C{`CzSh$TKvgvpl^Nx z_J=uqc7bB4rR;TwJjC;q|MY4a@OMwx@;xmH>yv=KleqCyP)~o=7xohSaYW4#{csZlR|fL&62cekkMZ$QHaXvP z6Zk`Wg1^)7m-AhDdFhk{dB^vn`y70R@JB2tf5bHb^!de~uh1=qKOV&I&t2*Z{Na2y z(8l63Y%A9Loxjg!4}c_8JoQT%R%L)80yFbza^J`#!G1vYV z^r;m3MyAh7&^|Vi*9T5gw5RSzth@vMND?sT=c&pNt_g@}o z;(HclAAY3a`U9m;W?;QyeBZgm!P5kOVsKug4_Dszj@S=*CY&n|4Z->jDz=;ta99QZ z2Jv@Ct{$w0DrN-A3jU4>+!7xJ#afq zra#gR(0(4jKj=9f6XU#<6*s>>u}>I}@E4JX+vu1>?I)Pdf;>>?C8k1N3{g+o6Zw*0 zpx7fkKE}gt{TB`U9Si@N z_*Y~+pPry^Ds?~85&FrHm*17gFg`^uPas-E#e4mh0bVhGKCd_SvowSvrUwV_M$r2P z`pf*^P1|walG+cs19@Ro`TcQ^Ec8eGK>Qs7U*J-#w@KLIKTd)?xj~*}^1FfH^D%$l zsH_<9Vn0`g|8&^z8;FlIIQ%ZM1;5~YfQ;XFF9JN2KFYlec(A`Wh@0OZ^~0!o^(oj7 zr0x$q!N!LMbzfBh@fL%4%MAUAeApy_A1M0t`3`wkR$|WwlJyN}gR+?dGa21Txg!|Q zN672{apxfaHherj@fPF_=QYXrr2TgIfA#SHuq?Kmz60&yU(5K>4f{hrXZig-lfRg6 z8n5qLvCH8zf zSwB+`c(9)*gC`x1)NYFY>-K>kJBgUL9KXyuj`Nh%{9g+IkDq+YeL6>5=rihk;nma7 zzwk#oaO;1ggt9&FU)G+*dPnm6Q%#$(ze?GIjv2787X10}pV&w-qWt$?;4de{@9kvx z{R4YG9q|{+WPPvUczPm!)rt55B6td`o<6aUC|%Q zXZwfZpt33M6B79(QYH55T`OL=41=<)1_8z=s*14s12(nIisO z&h__s1N`88P6Ssz0sUi2=^wqGfNznIN#^SBBi@nX`+Zo1| z;+OW&PdZYe4u8jVqY`t7n=g|1KPX@0 z%GU5-e^U1&E}(paD(gf4=>wlKdQ=YrKTz>sChUnCWlxTE1^)K&{fOJ>Y-9f6uRhylZ>lv&-Q3^*GPN^}llx{w<|1s}cVVqvF5vr_eVz zA1>2hS5`oN5FbIUvHX<^|3w1-WgJ(I=?nfj1$)Hd4ooC#6KqRO;dqB#rlYS zCh{3@9sIXg#Ogx=pT}&-7w&JsO<~7x7y@{4o>azP`<(<#4wY}ii|n`G5V8682tNlb zfqZ=v;*J<6ABfLtDF0JyGV~X9{^$+(t!yYSAEQqLUW&i}gZ}fu{=-ZT9+y)L)0wIt z#K2#o;!Q8IUxn|{HeCBOtltsqZ}uP58Eoe;$r1c{($TfhmmT=~8VT^PCGf9h_O44H z#*0#9_Hy_fS|wn_YD&y8Zv0=Mw+3}T^4oOOQ~6?Eb%uVjS7P>}J;BdV*dHm*r}gE^ zoj(HKUwM8=zJiHx-b;pWWyE(rVZ6R{I1Bh7?=t#~y8{1uf+ADNjaO0!`-=Ug2$Tsu z+kw%gOXL}tEq4Ae><`s%;`jSBuwQJthW9`IVZ8c@{P``wxcnygl=Pp%7#LN1m(Sw-f7E619B4 z&~}78EA!_OAE6xs|G@}9hJZ`>S@ffLzkN2DrpCwcA zS$o6_rmK1RnTB{a0`Y8HuD>xDP3pnN!@*C0-zpIUwZ-zshJWBEFaCRL@GSI)yvp`_ zZffJcO``04wm##J4^0u&_qS&gV1L^3=M(y2|04MWzdzFv_O~pZ$Cu$itnV&wAFoA0 zUhuuB4+qcle$Y2=O6>VWA}_yzA1w+$!%yHm3GglBuUzbZmL22w*M|NCKhgKECSp9w zKJSHNCP_oQ!O3%H*c(fVUUQydJ=A{QWCg@8_mtTE7(%c74fq~K@%LWvL%yQ|bAW?i z6M`T{{3pZjJ9VrN^z!HG>kcFSq2QN7K7ED>+56jMy`?iiFZg?2XwR{l4?wWwvhV|tjcyApdpjIOR|#MFOVddp=*qWcV|&QA$h!hp$N`;7@A* zVK4%#vdg@E4?PO})i&!>LeG9MEMimsK5D2lSwDY15vgk#De{-e@ngcnSS;h zgZ{|Z0<*@-QzG<#J$1kJ5#Z0K;C~{A^CLdIJ~vERLgUTimtB(jg8_z@k zQ1M2bBHHWn`C!-m0)LI?@1HD({*c0-mf^oR2Jpjwm6a>^;rbFKf8kQd8{$F>^WqKS6x{tsC&iGt~Har|US#n;d`MQ4#TIEESIyT?f7c`2CAgj3)`< z$4gj^_E-3PV0{q3nj(Ic>4Tpz49S6fd(Y00r)>&M6GyLN=)(x;Lov7B7pcH6?)OMg zCikW50AFw9tA&`c^g9515CMB2lXnN;FE&ina=xS34)Fa`Xz}k}B3{w(6}8-V)`w$O z27PSD&6ltV@V(^oYuyq<9`HS3Cs&`@3Hl*|&);C0g7XKIJzh=xLF&AveS5U`&5x)W_ea;dK9AlJU+jN{xI;{5?Pvo=k zy@ryn?V}(sRs8oxdwdx6ImhRR{{j82(ShHOe+hax`SSU+-TZwdPhF~eCPsxKfvEFdL0J)GFH?gzyEZg-$n|V zZJ3YnQvv)P>1svnF*n0k%G~^l$-oCiZ--uh-%ZH8gZz>4H^5)cfWNHHwU1kf z^-}g_F44!Ad424;6a0kuHIr*^i}=q6@gJFwjQ0!n+X?ZkOrH|PD2Y;G@j>im3F5bW z#BT$*{+E;iKNZieG)Ki|{(EmE_@!)^sO3D7 z4@azic=LV|fo~4t!!pDlP%A7y{u&JZMaf5e67YxoD>8j?0Q%X2(wCL6NA;9FA{!~m zv-$Y;BH$5G`G#kF2R>Aq?^hA~efSIHMS;)9HAWZu0RG5Q4u7);0bkqs?{$5LqKy47 z+4|NXKF^5Zid~GzW++% zWcFB(u?c|w#Q8m$KG*_(LkfSRD>uK!NMcWUeXDpH{jncnz>UA>0qDC^p0UCP8^N!^ z9^gj{^yB1tB;+BVif`&6sAbf9BAc+k#o&Ibn4M3LF|Gu?;J?e{VPZM(c@p-Jlb2Cz zFn^(9i+#C=_&J%%7m)(|N8o(&d=9=a2!10aztX<~=I~EGo*9w|`ceM3EgVDfNd7#b z(JAbIQ}(Dg_E+jB^YA%fKUia`h&j&9C-)lq1M#^gSAGUV8@sI8Unl&3h}g%r^2|G~ z-V**&1`b8z2a7*N2u3XSb7k}hDg{1q-qe|^S6C!q1c(QH&7N2jZ{a4Tv z^0R=0$G;Bp{DPx;#IC0V@kc)LFNs-v=rKVEWdFz9m%ztWRsT=1D~k;ZC{{5jARtPT zCTXLfWeE^kN@&U=Ak)cYl1w|vjG0N(B4Ak*M9?bAq9A1x5XGV(s2~AB0RbzUfCyz# zP(bPiC@BB$xy!rfy?5Vx_e~1_-{+$=^X|Flo_p@u?z!6r?B6^>(f6rI5FG56oQB`j z-&=8?!vc05`i;k6pOIhJ_VOd}w~g?(2rC5s=2oa zTIPfqlKx}<4Ey_TbN+4%%>NoN|3jD}=xh2X=$&r%(|`FE^skEh|5f{~Cj*eRcNOeI z<$QDB;pZSvHdXX>m!R)BA1Lkptjr+BYaHX% zrplLLqEcb;!ll25eY(NK$H%`6|KBjf+y8PQ^m;w=3Hz${u0eij74l0o-z5J0qyy#O zHv5O~!1`|Yb7uZ@?q%3N!SwA_1Tu}7k3;Q5{rgtJ9({a@ci-OMVR#ymuOxp+_#cM+ zZ-D&k@i^i>@arP8-w&aAX5Kp|XLeNZUnfJy=7-afh@JN(v;XnlM=+l7PtyO*%G?hB zcmcEDN9+lBHeWpBCgc~{{$AejWKZ0Tno@LH+{^NFxU)9_XvBkGQ&*o;m{o0@6yd~O~<4gV<{ulRS zl0Fmu+c40lVZS8YrJ!f%$5=n$^e)ByBP{;gbs&>j^{2_+dceo7gZzHn?C-l5{ojrC z|3Sp_YcDb9GuJMJe4+olsrIh=2JADFuWb&2e#|ubvFnzQH?}`y5yrdWadY4O1JJ_^ z&a*%b#Q2ZHAMJ;HEct8lM}O~wd|^JQTD#^=gz5Qh0&ucB}CDagyM=KijCU5fj!*!a)+8P12O^-$99 ztGJ#^1-zngn}p@)IZh0PDAmzq4VF)|_SDJNhiau?(W`8h3r*TLScN4!SzP5k&d;+fUhkMvFj--hwn1NN5e zAC>O_eV)$jLkkSd62$w{QBL~#kqwZKNhY3|Hh}no#ShnBjrLgmXQ0>(uS@?$_T?Qr zf`3&rA9@+_{f51#c<0~ee;f82`7Yuw!H;9U)r9%hk?Qwk$je&DiyqG}E{1+>XYQ-` z`8eoh`%6yW9rAsw+5daG8DhT{{r)rVV>Odt^WV zF^G5<@d5Rp?87pYkFxS(-hjRj%n;QR#)?hqvKiu~*Ub|2C-iN#%^u7Z9()3+(1C zW(WKx{yYhK{>tb%6TdU8f0Lg?PY}PtZHe{|fj#MB^1jQ~kQb(}U%dn4iTL>Q3Vz?? zLC*o^ez z{xN>sw;b|{`QY}7o{wIF^=~HM&^w{xq#N`H90wa1npK z1OE{GAJP5}to@Dx_>KFeKBn6H!+(*VXZu+`_b15Hol`O&nko6Y2Ku`O`b+Ty$=6Kq ze-^{n2!HlE?5)=CSAGTijr9idFC-t87s0RB%>JAV>|^&I&HmY|VSh60KHXnK-ZF?s zXgoEWKS=%wJ`eme z82+VK;QbUPPnRMdT+Pnke)?;8Z-(*fOVE$?htClC8j`1m9*qCHO@40KEolD`bD!X; zn2*iFe2nZP!OtGWc%6X#E-D^qUW5A_n7x>X`NsI5S%1F!*BF0xKIiU7P=1}6e>^`Q z@d;ahIuadU|2?x`ZVBS!H4mHf5qy9x5K1m)V_b!-Fves(H7 z%Ov>sI23!$7p7$}4C41;x4>R4oi6sb5r6+#MMrmh0(cn_qo=Z6@UKEzX1f9`|*ZA5&o<$c?kC_mKHKM}vzu-~VH5zk?LUE9~6+zWfb=5HVP z5d0ZyuZDc!YUBgqMuj|I^LF4{Z19hDK>jW;`J`hZe+_JY_BY7O+5vgKne<`BrSP}R zzx}I>`iS3jKIIkU8#Bm{^ecY6d<5XJe(_QD`?8RzvftNZ zzCZ5?Ge6AJ`Yg`B()g3SZn*{OFEaFBg85tJ*Ek=EW{JMdE{DFqXzs`V;*T zZv^tX?G$moiRz!bGsf#E+^+_OC3?U2Lm)C?Mm>Yk@0)?-(!3pH1_`x_=8N&?B5|p=w|ts)obC8u|HzAqW{m3$F-2h z5`I(vbKk)Gm5hJAH2?XxnV;YNU97h-d3)^^v=4r?D}1~B0QMR2hV*Zi_U`#<285&z7}Y*>c;E&5OJ6hA*n^2Elo3;NN>^yAmy_rr|e=PyD&l;x*(hhVJw zq0CoMf4Z*4e2K~1sRv{HHaGh%Z#oIbL(o3BCfZ-}Yv|hvX8*~~@V^U~{M^z7{TiQ~ zX#_mU&()to&1SQnwD$tY8}_e5tTLoO-v+)7z(@Qg_#fW_`C$6{`Ol)iSDN#jj{^Ui z*W~^Kf~n~p-^<2(KNOD_K@GZ1<97nqPgk+^(*>J?e{4VJ z{-1*Wz}{$m`N59Rx8mf?&Px6_!~C%k^T$TurT+f>W&E+p)XXDrsPy}s&%+)wdw($a zRbl*k?PApbpvfN|gZbr#S<^CKR`~D!3kZGLyyrN!2m1d9W6v&xe^~?nf?*TwZ43Xl z0sGBq{D|NCLOwPy`TYAB#&0*1&;9J9@Mmm2;+SFd7yI`cRsB8Qf&O+F_+i-3#sPEw z;avv<5dLFx{6q2i=4W942J^Q&B0qC0=4&%WIo3BJACEDA(z*@W!}>7TBSd5BSyspN@B*-U9LA z90NaR4fJo8+5fT?=C7;S{B_cOuz%k+`R#@R+GF#l8^Pa3@R#JB#{bc0Fg{oh)bVP^ zQP98p&HFTC2cZ0a=Dgcg@c$LI-|mJLz}JNPw;%?D?^*m_-E8RH{#N*d!71WC0UGaL zzJT8^PS4z_+P@w0S%G}&_Rs!0?$=}ddJ_F@dcVmBY_k&lXfgQr#C)cS&1X7M-q32w zfA!)dyq|93xl_LY{$ju9yHxw{!}zY-(~R$apG1G*k87&@+yU5&=S+V4p6|e(GJS2q z{AR=3OuRn{`OZe1uY?#0ew>bY`M9qc`8yK)seHunYg5bzDwq#Y{7wAZ5{gklK1Q#P z+zi9rg!%C_loS8Hi2Cb4YWnvZOtc!lW7bdhLjLz*mj4@A2zkJMF+Jb7|L53G&CW-3 z-vRkRzIzwd{$_swzkg@$OWgj07|#OfU!xG4Yme1=R06(x_6w^k*pUNT}herNM z>vIj`-Q8yRG4p-k5B6W`@_)d8jpMS(BUSxRW4@DN^PQ`=g?+*Na~{fxzZ*V|aE`5i zTmt;7+YSB&kDxs^zuBdTc>WQSf0~5+z&w^8cpUQ8&CVyBi}+zluQ~s)0Q%L$^lSDr zfWO_`*Rvnu(|MR5Y5KPsLHRaj{`{|Q{Qj`Xmp}C+_&IL!!E^!JdgKdqyi>Uj_6h4V z^ud47=m_iD&@BjlUtA^uN49mB)y^Y?&nb4Je$*pnt^ zPu_ueYBy#tZay)Sc^3ZUZKC~|nb&>@d&1(AqyLQY#Cd-mf4=+;=-(TV4`shD#r*q) za}52>bRXEg=6!^%sH5ji_SRGG1^iYRU)|qh@%uJbKmUD>okxs&hdJMH0`Nb;@c$e3a~jSkX#U=rhkW4t zfY$dr$Dx1N??&{|cpgXd$4TZq(>nN%4WBmi$18yUb%uY(yD`2vAJK*SM1N)y__wRs zFLUZu_>K8`n<~E#^><+WKJ*gg+t6QdLByMHEQUT@wwc&JPWiy&kRMsi@*`ir0Q(yu zKM+F!|J@mw|ABt;4@CdZ9+{LmgRS>&mBah%xQ|8Km)Ft$0@nV2Pe*+AgxMe7@wH6m z709!u=REB1ID+l(*zU*JAI{`+;hpIJ3bWs%>sZ8tdm4XTJq`NK@co|Ve;AJz&`a{r z{t2|i=96Fh7wTt>KRX=pQ3dnM0{~C_{R-xjtM8gF-pio={_3(xnNyhmcpUQ9$o4;d z@XJ`AV(l-*`pWu@$uI2+ew@O_b1{B@kNv*zN?a$!#^FEGn1cF0l$jD?*w~LWAbqn`u{oB z|Igk6eLz00qVUf`yu0?t=6o zWad81)$qp|?Eh%RKV+Y8`Um{uG!wu42L5I3d(HX%GURK?i$=blei8D?-e;)(5Bk27 ziTCf`3Gox|`+(aM@-^iPu+NOX-dU)>-(>In$}VRC|EnfHa`=`QAIO82&kWY1*CHNh zQurRF^9KJh>n+o;p4xQcRPVlvi{Vcju-^AU1%EW`%{bft_PMWu-#8E21~no1uR&fa zkQc50pF9x#KXY29QPuwe8e1fx|GL9mjmOQQCXkX zK_8L7kmE5cv;PM4|KC%*^NZVVg89!!&3TJM)}lV{*EmP@@1I+Pe#GlPAclI#s`zw>herBS7CB}bznHm4D z{S@|lKeNB}x9I3S%%1!l^4`t->kAJ;KF*oq#oGsc0R26|ym#;j?vt4Zdj_@%e*N@W z_=D$7zG*4)8Qoto_et&eQON7O>Eb}%Ga-wFTsGSmNQ ze}}%}JqkVFn}mGAYQ&FPU%!R?)?Aj~dKmiC)H&I^pQYg@$j6x84>c?E-*&tQ0DIPe z_Q{^jIUM85_Ft@nJzl+wiC>>bK7B3jkNJ`6?IQ^v%rNu?zao=6hesfgZO0(~SD7 z-fisfwm-r0BJ*bpFrRC{d`{07|N3jtkMmrbpO@bc{T!Q~`Joz*&dczAC6kZ${S5Ob z=I@Sz{aA(l5MYb2ADwr>eylY9=Pbil4+@R{y`r4UmvHryHZ*eZxpP@gH z0ufJLaVGkQ@z?hCATel99u{)+Pz_A%NtC*w-4qo>o6MEDEMt|#(ET!|2_m#^S)-*`|dmm z{J+iIAGgEv;P0bTGCzS_5`X^-d)dh5FU#J6{$O$BXHXC-|NB{(zc7AY1^HQp^@T>X zPx7$eVaS(be*^hr;qM{enTs~doUeXAgLq`gx*1}B3-M>w@u2^E)4X`B^EZ$mtXKB} zp4z*(1bJlp5x;@?+-i0n{Gl5mKgi!|dAjOz(6_}nKd1Wh8v5IK`!w(U@{5lE|JnJg z(r(bl_UYdJ5|1uJ`z+u4%#Tt3lP2G@@1HO}&zkmnABMbKW#)qyWB#%M`$u4QB>gB~ z&C36{bW&z($lv==PWI!J(~*B;{%5~afREXu*I+-^!G36ax)$=8!FmVjC-M7}ut%pM z{?YpQt3Sj4ZZP*7?D})`kFCEf?m~Q$G5MzMU!i}?jJ(}{Kj_DN|7+kMjnDoVxHU|^ ze{gmt)5(5+2lja#>@&4bClZ7f_Mi4|Vl= z;KP0G+FtH*8t$KA{JG#+*mv{~p9O!P+8%!(ULZ7t|ExP9?`;0CGwI9qMqegBhyK1W z-MjC)P{w^C*dGNmF2-Yc0rY{b-~98x=s%l3)J})JeayT+xyc&XBk1=YqW-MRb9X_W zvA(V4@oyNo@grt<`)z0TBR*#FR0;8U<7MXj)B)?@@4ssFee#LW_ruM7 z^~djs@g1C;*sMi)SHnKjc#*!|{B>+MVf;N~AN21TbKZA<==&aQ z{8s!C{QZ-eKm5KK@^Q!1%q|dk8vhp`pOl%0#XBwkr+f;(cQ^DM07Y4I>EujK@ndui z_S3TVpMt$y%ixbfyx73*)#ef0Uy@eHdEyfBA#E1c)m^jJ^}t>3H-&*_)Y%eKC&MtnRx%go$#CG z3s(OEi7;Z+zd$B0om>Uil07@iOjnQ}y?~1^Qo{?%fY^ z3FK)F?9pz5-dUOTebC3JCwu34+b+lbgsgvEbHT4~8G8P`2SV| z!Tztte)D70?{7bY@nh>X`}`LE>m1xiqWWJ#y!~}1pI_V>^s)Ovz5#z!WBUIk2;TTC zGyiMGd~Y4wkN+6T*SycXU;J;3|2P}}ZIF0rx^IS;|JZ?gyqAJZp3=}kjW1ng8AZFHeWmu@N4ch z=QrMdFXZiX^IpRqkhj&$fBqc#&dJDU>GpHCLSKth#QkmJhb@-d6gUo%Zt1+L-Tx#Z1KkI|N{HR%P`{wx=zb&U{ z{sl0iZ$HS(YUaNVgQH%>`1?WRHxFRmiT7H}lbR z0sjJne_K`FVC~=3n3|@#AB#huy~;d$;w2;1|wsl078* z`Vi)0ud?~ry=y@~<{LB~RR0Cw--F>l`3Ufroe$au(Acj01pvHR_%!ij?K76EVZzkq9J1~1Y^fc_lZ6+SQ5dLflyU%C066!PfnV2uH zy+z(OtVnEkkTF3NEq0j8azf1mw0{4w62L)a*OpS%?JrLz2V7usKf_Ip)% z1@ZD$ES@`W4VE`pe6Z#o$UDyS5PstC)#IT52(zAd))jEq%zmEn4D|aMbN|BsX2U;x z)vS-MnhN_h5BU={o{OG9|Dlh2DSGzB_?*w=aW&$v$^#}pe$=<%j~IPZ?}R*z8h?HB zi?C-{kAPVf{r?B#;dLet!@z$V!~et;(9fOBeHaJ8zI~6`yI;Vubh7?^=TYzv^Be7- zCm~*6g?N1n)m|+>DRVxXFF&;g{+-$L^MU_$hW}BF_dj2f`7!dB+haby;Y1@pPwfDH zUNKeVw@7|>gS}pNyNRE^_Y%f?lDtoY%I86T&tUTV6vZc>n3DOoqVGe8!Tz!HA8oH- zd^d&sY%2M+6!ouV^`AQ#=NFlL-0~&(L-xD#Oz792re$aw1-1VL%r919exc>@&VOS3 zX3X&7&rfuL-i(m#NPP!8J!(u&jD~0b>__Hk$@96fALc+1>6r5jI?eB&4)XJ}>XO^Kp;oE%` z#`iGuzWR&b%Vd7Sdzu#b?BytDq0-p$`b(#P2H(fj<7)$m>+tg9f}WkW=NKmCdL-tnqPQDoSC!xR0{*HVO@ztU!8B8-of8OZDeCcu1-VDh9nm?NR39mbN zQf3~`Ywren$Xa28 z{ulIT-6Y(1tNObg;)%+IhW;&)@0pJC^*SEe@u%3H!u-YEuYtew&HH5k1ETJ;%=+Fl z*PuUhjenl|5Pshz=^^=j=_^<-VB`M{=<8|FFRc%|ehl)p#=Ix-M+p9|IB!kzK=f~Q z75K@_@tfqa^m**3W%_hp1^72N`?sEgJ>G-)gDo#d{LA#|=eJ@0I5Ne{PrUs| zAimG!zxz=CHfGOn!0)XXz7L?i#{c4crIMfGa`?Mbre!)dk@RhGDe?iVy|u8v|77;} zKZjy`KWNsg9!2?kSv-3?^4lA(p62cMJ*gA^gyl1SM~-S!)8AK-UpRpIqsv+$kGD5_^bj{H30~kN{#Q1H?5<^`C@1Ud`G&Yg_am`6>$QNZzkS{mHDqhhsb&CYk-3y(CYYnEw5si2kv7 z>ml%`VSAI$|KWR}Z*2bhIPmYr@SjTiYp|aS(-@&I)4}h>tb7RVjla#bx8Me}&*lf$ z{0`&6){{Q@666o_l^q1WSs9?qG-7`84%NREz?Yd~@V$E~$|3JlRQc`*B-dmA;~uL1 zKmH8={x@@9^)|mmfBVe-lFz{rY|7T>UV;6poNea6uOq+s0JC>%E`_{Ey)GucnCiTS@D2SdF~C!>(Ut_{v-IEUx)o!WcKs7 zV?57b@^;Z@;18ZL@2BkrelPjoWN&};62M=};D3tosbG8%jtTjDeg*i8{O&vPoBFc= z_1C>&?8(b_fnUgfmsR07uPuehL$pRj?lmRsEZwpOr0f zf4s6!AA>zRpV_xhHekMV7xo(|_%EaU1y=rTj9&xhv!q|dpC7&q`Wnprug5#CL0z4w-`xf1o+ew7vo>~T!~r=vfwv+-Q;3-lN949LRxBc8$heBB4l`M8t8 zuX$6Ad>;*bmoj_g#A zS>HVa^U(%2ADwb90NMO=i(4Rn@P~SS(t-Km`rn)R?2bnSr|{SD&7aclxUUeR+E;+@r#%zMM%90xx!|D<@6>VE-(JHDei?{yr$9{~R-?a6yH zo!4YCQ(64;U-W17iKf5%BVJn1?#q50`(4&yze|^Df0thPgFj66){8GfygSbF9m}R* z{*Cp7_b7eo_&4xvGb8h3RsRUsyStgatNjWE%gy@bc{EYQ{sfXQ>d&U|*K1ER`!PR( z@mq!Q+eYEr1^0)o$A0og{3dySTM_b&`1}Ln_sq=K&PRHQ`QNAaf;~aJ+pX%aLHpfk zU;EGPp)ZxiGekMHU;IAAfyr|d@MnNu%KyyFQNKleb)I>TZRR21C(EDT+7JKB{NE3r zLpi+Zp{o7geFyx(ds|1V-w&_FAIyIpy$tg+rr*Cu{$t5)CSSP4BalB959J{L>$WiG z8Lq{ChlVC|-sei#|E(ClN02|bfQ`p}(DyOuyO!VQ;h)!Hf6;P~Mf~_C?9&>=6BOT) ze(VHBu4ehtqp@FV72e<4N5Mac_187q&G7Q6-9N>72iCt)BwEMu-m)H#hag`S%qMg_ z{|fx?s@#msZy~_c{sTXQKV$m%$-`0qLbKkqC+5# zg#NDi%4F~T;++xScP}ydy6<=L^mI248|Ab$`;_?|JCW(BB1SzSRzUHV%9C5#Xo! z3gu1kz??UpJKY2R9BJ@y>Hk7_^>JLud4hd2>v|05A#v= z`|$1Y8~c&>RKIt47v%kTlmGbhPtl+K%=y@Vy#)Du)$D(K{sH)dYt8+p?MTFo<9s>7 zHo>14cLILIW8{yiKjYBfah%uujVf;ee<~N4`S>sdvvP--ufHAh)yx6Y#rhHTZz|%Y z?$4X|3-&$@_UQq$|M>DJpdU9G`?C8ww12WWzjD-*p!YGep82g_*aPItq zPkspUb)&hT_k-WW_6cTxhLBhoKi0(O7eFx9F2{aM5J3FC{s_n~^3yE}-+fE5-U9zS z9ly!`p9n(kVETLH>A2pC>BIaBGnt22dp{~;d~jY}$CJxW!hDhScOLTnjmY=IEQ$6H zgne1d?8{v+RP&H8fSVHK=VN}}aI|?J?7QgiJeH52`dh%W`PQVvU{A3AdN=CRdiY%* zL4B;ZlN+S|p0pnJ4f8vVe+uHAC4ZQn*3{t~js zB=1G|i&a=3A^S@FdO45&VSWL#EcD}qxsXSeKR+7&t`YmIc2n@@z8(BUyiEE{^?!UG z_zQl@_+n<}Gke26VLe96@1a<4Yxs@XFER#uJrDOw!!3*c9AP+Zi4mG^(%2cY7^9JUq}hLQ4CX^i{%y`v zEj%CmZ7}CU4_}Y*XY=PDfSz@rXO*I7yCDc3@~L~^H}UUApo)U6StoL`B`Yz+h6_$>^~ci3+{qFIM(Fb9=aFfv&z^597RV!fb)||zm9s2 z^kI5tT(viXcy(=Yh8Tb9Zw>uf|GZgGc+a0uj{Rs5L(%`6Uxk0&%Dl&QU?2F|&gAQI z(97bfQy#`|>`&A2*FldWzGUkO@4p4|Uz(nIS>eA8@aq};`+tOd5%cc{9fbC#oA(oD zLomm2UW>+u=-(aVmwC|azxXul%c|Ps49t+A|CMq4{`9oWzMD$;tB_A@y3DLkZif1s zu>5ur?eEOme*yZr?g=A*FF?N=v3{!c`yR;eIP__Av`6}L!+$WIhs?;pZ43IgLj2s& zG1WV-zq||b#o~keP`-+l|MA@zFT~3*>!SXlyQ4kaUj{K0{rL*UZ~QK-Cn|Y82JuH@ z&iI>!(C76#nS9LQgQ$=88d0C<>j(cE2F-coS3ZXEW%H%KA%0kk_yJ*$Xn)evh*N{~L{dE$M_j{$*u2ta z{<3`Tg~+dVv-#C~Ah>IHHu=bxVJO!gY~r)WE`a<~^HdK<^s1Ut_<$ z!Ef-7)SmFa<3RA|G}HfGreeGxUn^Dle_`K`XZGk>lviM{boslNV_=ZK?NRWrLtn