about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-08-26 17:45:13 +0200
committerGitHub <noreply@github.com>2024-08-26 17:45:13 +0200
commitb5105a1e57bba3305d5dce93ab4d2f7faab6b34a (patch)
treeab26b700d3c48f2c8e32a1084ae7c2e7a8448b06
parent9beb745765e9c99bad6410094a97bf0bf9ebc1eb (diff)
downloadbox64-b5105a1e57bba3305d5dce93ab4d2f7faab6b34a.tar.gz
box64-b5105a1e57bba3305d5dce93ab4d2f7faab6b34a.zip
Added preliminary Box32 support (#1760)
* 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 <pablopro5051@gmail.com>
Co-authored-by: KreitinnSoftware <80591934+KreitinnSoftware@users.noreply.github.com>
-rw-r--r--.github/workflows/release.yml31
-rw-r--r--CMakeLists.txt249
-rw-r--r--README.md2
-rwxr-xr-xrebuild_wrappers.py7
-rwxr-xr-xrebuild_wrappers_32.py1616
-rw-r--r--src/box32.c283
-rw-r--r--src/box64context.c32
-rw-r--r--src/core.c105
-rw-r--r--src/custommem.c55
-rw-r--r--src/dynarec/arm64/arm64_emitter.h19
-rw-r--r--src/dynarec/arm64/dynarec_arm64_64.c92
-rw-r--r--src/dynarec/arm64/dynarec_arm64_6664.c30
-rw-r--r--src/dynarec/arm64/dynarec_arm64_helper.h26
-rw-r--r--src/dynarec/dynarec.c19
-rw-r--r--src/dynarec/dynarec_native_pass.c2
-rw-r--r--src/elfs/elfhash.c14
-rw-r--r--src/elfs/elfhash32.c46
-rw-r--r--src/elfs/elfload_dump.c4
-rw-r--r--src/elfs/elfloader.c101
-rw-r--r--src/elfs/elfloader32.c264
-rw-r--r--src/elfs/elfloader_private.h6
-rwxr-xr-xsrc/elfs/elfparser32.c6
-rw-r--r--src/emu/x64emu.c57
-rw-r--r--src/emu/x64emu_private.h6
-rw-r--r--src/emu/x64int3.c14
-rw-r--r--src/emu/x64run.c10
-rw-r--r--src/emu/x64run64.c10
-rw-r--r--src/emu/x64run_private.c53
-rw-r--r--src/emu/x64run_private.h21
-rw-r--r--src/emu/x64tls.c81
-rwxr-xr-xsrc/emu/x86int3.c347
-rwxr-xr-xsrc/emu/x86syscall.c2
-rw-r--r--src/emu/x86syscall_32.c447
-rw-r--r--src/emu/x87emu_private.c18
-rw-r--r--src/include/box32.h5
-rw-r--r--src/include/box32context.h7
-rw-r--r--src/include/box64context.h11
-rw-r--r--src/include/debug.h2
-rw-r--r--src/include/elfload_dump.h4
-rwxr-xr-xsrc/include/myalign32.h409
-rw-r--r--src/include/regs.h1
-rw-r--r--src/include/threads.h15
-rw-r--r--src/include/x64emu.h7
-rw-r--r--src/include/x64run.h3
-rw-r--r--src/librarian/librarian.c35
-rw-r--r--src/librarian/library.c108
-rw-r--r--src/librarian/library_private.h18
-rw-r--r--src/library_list_32.h12
-rw-r--r--src/library_list_static_32.h10
-rwxr-xr-xsrc/libtools/myalign32.c935
-rwxr-xr-xsrc/libtools/myalign64_32.c104
-rw-r--r--src/libtools/signal32.c842
-rw-r--r--src/libtools/signals.c15
-rw-r--r--src/libtools/threads.c35
-rwxr-xr-xsrc/libtools/threads32.c854
-rw-r--r--src/tools/box32stack.c137
-rw-r--r--src/tools/box64stack.c10
-rw-r--r--src/tools/callback.c306
-rw-r--r--src/wrapped/generated/wrappedaluredefs.h2
-rw-r--r--src/wrapped/generated/wrappedaluretypes.h2
-rw-r--r--src/wrapped/generated/wrappedalureundefs.h2
-rw-r--r--src/wrapped/generated/wrappedalutdefs.h2
-rw-r--r--src/wrapped/generated/wrappedaluttypes.h2
-rw-r--r--src/wrapped/generated/wrappedalutundefs.h2
-rw-r--r--src/wrapped/generated/wrappedanldefs.h2
-rw-r--r--src/wrapped/generated/wrappedanltypes.h2
-rw-r--r--src/wrapped/generated/wrappedanlundefs.h2
-rw-r--r--src/wrapped/generated/wrappedatkbridgedefs.h2
-rw-r--r--src/wrapped/generated/wrappedatkbridgetypes.h2
-rw-r--r--src/wrapped/generated/wrappedatkbridgeundefs.h2
-rw-r--r--src/wrapped/generated/wrappedatkdefs.h2
-rw-r--r--src/wrapped/generated/wrappedatktypes.h2
-rw-r--r--src/wrapped/generated/wrappedatkundefs.h2
-rw-r--r--src/wrapped/generated/wrappedatomicdefs.h2
-rw-r--r--src/wrapped/generated/wrappedatomictypes.h2
-rw-r--r--src/wrapped/generated/wrappedatomicundefs.h2
-rw-r--r--src/wrapped/generated/wrappedatspidefs.h2
-rw-r--r--src/wrapped/generated/wrappedatspitypes.h2
-rw-r--r--src/wrapped/generated/wrappedatspiundefs.h2
-rw-r--r--src/wrapped/generated/wrappedayatanaappindicator3defs.h2
-rw-r--r--src/wrapped/generated/wrappedayatanaappindicator3types.h2
-rw-r--r--src/wrapped/generated/wrappedayatanaappindicator3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedbz2defs.h2
-rw-r--r--src/wrapped/generated/wrappedbz2types.h2
-rw-r--r--src/wrapped/generated/wrappedbz2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedcairodefs.h2
-rw-r--r--src/wrapped/generated/wrappedcairogobjectdefs.h2
-rw-r--r--src/wrapped/generated/wrappedcairogobjecttypes.h2
-rw-r--r--src/wrapped/generated/wrappedcairogobjectundefs.h2
-rw-r--r--src/wrapped/generated/wrappedcairotypes.h2
-rw-r--r--src/wrapped/generated/wrappedcairoundefs.h2
-rw-r--r--src/wrapped/generated/wrappedcapdefs.h2
-rw-r--r--src/wrapped/generated/wrappedcaptypes.h2
-rw-r--r--src/wrapped/generated/wrappedcapundefs.h2
-rw-r--r--src/wrapped/generated/wrappedcrashhandlerdefs.h2
-rw-r--r--src/wrapped/generated/wrappedcrashhandlertypes.h2
-rw-r--r--src/wrapped/generated/wrappedcrashhandlerundefs.h2
-rw-r--r--src/wrapped/generated/wrappedcrypto3defs.h2
-rw-r--r--src/wrapped/generated/wrappedcrypto3types.h2
-rw-r--r--src/wrapped/generated/wrappedcrypto3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedcryptodefs.h2
-rw-r--r--src/wrapped/generated/wrappedcryptotypes.h2
-rw-r--r--src/wrapped/generated/wrappedcryptoundefs.h2
-rw-r--r--src/wrapped/generated/wrappedcurldefs.h2
-rw-r--r--src/wrapped/generated/wrappedcurltypes.h2
-rw-r--r--src/wrapped/generated/wrappedcurlundefs.h2
-rw-r--r--src/wrapped/generated/wrappedd3dadapter9defs.h2
-rw-r--r--src/wrapped/generated/wrappedd3dadapter9types.h2
-rw-r--r--src/wrapped/generated/wrappedd3dadapter9undefs.h2
-rw-r--r--src/wrapped/generated/wrappeddbusdefs.h2
-rw-r--r--src/wrapped/generated/wrappeddbusglib1defs.h2
-rw-r--r--src/wrapped/generated/wrappeddbusglib1types.h2
-rw-r--r--src/wrapped/generated/wrappeddbusglib1undefs.h2
-rw-r--r--src/wrapped/generated/wrappeddbusmenuglibdefs.h2
-rw-r--r--src/wrapped/generated/wrappeddbusmenuglibtypes.h2
-rw-r--r--src/wrapped/generated/wrappeddbusmenuglibundefs.h2
-rw-r--r--src/wrapped/generated/wrappeddbustypes.h2
-rw-r--r--src/wrapped/generated/wrappeddbusundefs.h2
-rw-r--r--src/wrapped/generated/wrappeddecor0defs.h2
-rw-r--r--src/wrapped/generated/wrappeddecor0types.h2
-rw-r--r--src/wrapped/generated/wrappeddecor0undefs.h2
-rw-r--r--src/wrapped/generated/wrappedevent21defs.h2
-rw-r--r--src/wrapped/generated/wrappedevent21types.h2
-rw-r--r--src/wrapped/generated/wrappedevent21undefs.h2
-rw-r--r--src/wrapped/generated/wrappedexpatdefs.h2
-rw-r--r--src/wrapped/generated/wrappedexpattypes.h2
-rw-r--r--src/wrapped/generated/wrappedexpatundefs.h2
-rw-r--r--src/wrapped/generated/wrappedfaudiodefs.h2
-rw-r--r--src/wrapped/generated/wrappedfaudiotypes.h2
-rw-r--r--src/wrapped/generated/wrappedfaudioundefs.h2
-rw-r--r--src/wrapped/generated/wrappedflacdefs.h2
-rw-r--r--src/wrapped/generated/wrappedflactypes.h2
-rw-r--r--src/wrapped/generated/wrappedflacundefs.h2
-rw-r--r--src/wrapped/generated/wrappedfontconfigdefs.h2
-rw-r--r--src/wrapped/generated/wrappedfontconfigtypes.h2
-rw-r--r--src/wrapped/generated/wrappedfontconfigundefs.h2
-rw-r--r--src/wrapped/generated/wrappedfreebl3defs.h2
-rw-r--r--src/wrapped/generated/wrappedfreebl3types.h2
-rw-r--r--src/wrapped/generated/wrappedfreebl3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedfreetypedefs.h2
-rw-r--r--src/wrapped/generated/wrappedfreetypetypes.h2
-rw-r--r--src/wrapped/generated/wrappedfreetypeundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgbmdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgbmtypes.h2
-rw-r--r--src/wrapped/generated/wrappedgbmundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgconf2defs.h2
-rw-r--r--src/wrapped/generated/wrappedgconf2types.h2
-rw-r--r--src/wrapped/generated/wrappedgconf2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedgcryptdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgcrypttypes.h2
-rw-r--r--src/wrapped/generated/wrappedgcryptundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgdk3defs.h2
-rw-r--r--src/wrapped/generated/wrappedgdk3types.h2
-rw-r--r--src/wrapped/generated/wrappedgdk3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedgdkpixbuf2defs.h2
-rw-r--r--src/wrapped/generated/wrappedgdkpixbuf2types.h2
-rw-r--r--src/wrapped/generated/wrappedgdkpixbuf2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedgdkx112defs.h2
-rw-r--r--src/wrapped/generated/wrappedgdkx112types.h2
-rw-r--r--src/wrapped/generated/wrappedgdkx112undefs.h2
-rw-r--r--src/wrapped/generated/wrappedgio2defs.h2
-rw-r--r--src/wrapped/generated/wrappedgio2types.h2
-rw-r--r--src/wrapped/generated/wrappedgio2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedglesv2defs.h2
-rw-r--r--src/wrapped/generated/wrappedglesv2types.h2
-rw-r--r--src/wrapped/generated/wrappedglesv2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedglib2defs.h2
-rw-r--r--src/wrapped/generated/wrappedglib2types.h2
-rw-r--r--src/wrapped/generated/wrappedglib2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedgmodule2defs.h2
-rw-r--r--src/wrapped/generated/wrappedgmodule2types.h2
-rw-r--r--src/wrapped/generated/wrappedgmodule2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedgmpdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgmptypes.h2
-rw-r--r--src/wrapped/generated/wrappedgmpundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgnutlsdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgnutlstypes.h2
-rw-r--r--src/wrapped/generated/wrappedgnutlsundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgobject2defs.h2
-rw-r--r--src/wrapped/generated/wrappedgobject2types.h2
-rw-r--r--src/wrapped/generated/wrappedgobject2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedgompdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgomptypes.h2
-rw-r--r--src/wrapped/generated/wrappedgompundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgssapidefs.h2
-rw-r--r--src/wrapped/generated/wrappedgssapikrb5defs.h2
-rw-r--r--src/wrapped/generated/wrappedgssapikrb5types.h2
-rw-r--r--src/wrapped/generated/wrappedgssapikrb5undefs.h2
-rw-r--r--src/wrapped/generated/wrappedgssapitypes.h2
-rw-r--r--src/wrapped/generated/wrappedgssapiundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstallocatorsdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstallocatorstypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstallocatorsundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstappdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstapptypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstappundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstaudiodefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstaudiotypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstaudioundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstbasedefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstbasetypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstbaseundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstcheckdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstchecktypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstcheckundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstcontrollerdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstcontrollertypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstcontrollerundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstfftdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstffttypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstfftundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstgldefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstgltypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstglundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstnetdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstnettypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstnetundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstpbutilsdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstpbutilstypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstpbutilsundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstreamerdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstreamertypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstreamerundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstriffdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstrifftypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstriffundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstrtpdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstrtptypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstrtpundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstrtspdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstrtsptypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstrtspundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstsdpdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstsdptypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstsdpundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgsttagdefs.h2
-rw-r--r--src/wrapped/generated/wrappedgsttagtypes.h2
-rw-r--r--src/wrapped/generated/wrappedgsttagundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstvideodefs.h2
-rw-r--r--src/wrapped/generated/wrappedgstvideotypes.h2
-rw-r--r--src/wrapped/generated/wrappedgstvideoundefs.h2
-rw-r--r--src/wrapped/generated/wrappedgthread2defs.h2
-rw-r--r--src/wrapped/generated/wrappedgthread2types.h2
-rw-r--r--src/wrapped/generated/wrappedgthread2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedgtk3defs.h2
-rw-r--r--src/wrapped/generated/wrappedgtk3types.h2
-rw-r--r--src/wrapped/generated/wrappedgtk3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedgtkx112defs.h2
-rw-r--r--src/wrapped/generated/wrappedgtkx112types.h2
-rw-r--r--src/wrapped/generated/wrappedgtkx112undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n64defs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n64types.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n64undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n66defs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n66types.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n66undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n67defs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n67types.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n67undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n72defs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n72types.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n72undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n73defs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n73types.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n73undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n74defs.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n74types.h2
-rw-r--r--src/wrapped/generated/wrappedicui18n74undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc64defs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc64types.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc64undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc66defs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc66types.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc66undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc67defs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc67types.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc67undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc72defs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc72types.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc72undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc73defs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc73types.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc73undefs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc74defs.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc74types.h2
-rw-r--r--src/wrapped/generated/wrappedicuuc74undefs.h2
-rw-r--r--src/wrapped/generated/wrappedidn2defs.h2
-rw-r--r--src/wrapped/generated/wrappedidn2types.h2
-rw-r--r--src/wrapped/generated/wrappedidn2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedkrb5defs.h2
-rw-r--r--src/wrapped/generated/wrappedkrb5types.h2
-rw-r--r--src/wrapped/generated/wrappedkrb5undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlberdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlbertypes.h2
-rw-r--r--src/wrapped/generated/wrappedlberundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlcms2defs.h2
-rw-r--r--src/wrapped/generated/wrappedlcms2types.h2
-rw-r--r--src/wrapped/generated/wrappedlcms2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedldaprdefs.h2
-rw-r--r--src/wrapped/generated/wrappedldaprtypes.h2
-rw-r--r--src/wrapped/generated/wrappedldaprundefs.h2
-rw-r--r--src/wrapped/generated/wrappedldlinuxdefs.h2
-rw-r--r--src/wrapped/generated/wrappedldlinuxtypes.h2
-rw-r--r--src/wrapped/generated/wrappedldlinuxundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibasounddefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibasoundtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibasoundundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibbsddefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibbsdtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibbsdundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibcdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibcmusldefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibcmusltypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibcmuslundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibcryptdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibcrypttypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibcryptundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibctypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibcundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibcupsdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibcupstypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibcupsundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibdldefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibdltypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibdlundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibdrmamdgpudefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibdrmamdgputypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibdrmamdgpuundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibdrmdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibdrmtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibdrmundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibegldefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibegltypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibeglundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibformdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibformtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibformundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibformw6defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibformw6types.h2
-rw-r--r--src/wrapped/generated/wrappedlibformw6undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibformwdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibformwtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibformwundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibfusedefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibfusetypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibfuseundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibgldefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibgltypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibgludefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibglundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibglutypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibgluundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibglxdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibglxtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibglxundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibharfbuzzdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibharfbuzztypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibharfbuzzundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibhogweed6defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibhogweed6types.h2
-rw-r--r--src/wrapped/generated/wrappedlibhogweed6undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibibusdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibibustypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibibusundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibicedefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibicetypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibiceundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibmdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibmtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibmundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibncurses6defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibncurses6types.h2
-rw-r--r--src/wrapped/generated/wrappedlibncurses6undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibncursesdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibncursestypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibncursesundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibncursesw6defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibncursesw6types.h2
-rw-r--r--src/wrapped/generated/wrappedlibncursesw6undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibncurseswdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibncurseswtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibncurseswundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibnettle8defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibnettle8types.h2
-rw-r--r--src/wrapped/generated/wrappedlibnettle8undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibnumadefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibnumatypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibnumaundefs.h2
-rw-r--r--src/wrapped/generated/wrappedliboggdefs.h2
-rw-r--r--src/wrapped/generated/wrappedliboggtypes.h2
-rw-r--r--src/wrapped/generated/wrappedliboggundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibpaneldefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibpaneltypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibpanelundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibpcidefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibpcitypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibpciundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibpcredefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibpcretypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibpcreundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibpthreaddefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibpthreadtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibpthreadundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibresolvdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibresolvtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibresolvundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibrtdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibrttypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibrtundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibsmdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibsmtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibsmundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibsndfiledefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibsndfiletypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibsndfileundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibsqlite3defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibsqlite3types.h2
-rw-r--r--src/wrapped/generated/wrappedlibsqlite3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibssh2defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibssh2types.h2
-rw-r--r--src/wrapped/generated/wrappedlibssh2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibssl3defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibssl3types.h2
-rw-r--r--src/wrapped/generated/wrappedlibssl3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibssldefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibssltypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibsslundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibtasn1defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibtasn1types.h2
-rw-r--r--src/wrapped/generated/wrappedlibtasn1undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibtiff5defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibtiff5types.h2
-rw-r--r--src/wrapped/generated/wrappedlibtiff5undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibtinfo6defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibtinfo6types.h2
-rw-r--r--src/wrapped/generated/wrappedlibtinfo6undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibtinfodefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibtinfotypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibtinfoundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibunistring2defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibunistring2types.h2
-rw-r--r--src/wrapped/generated/wrappedlibunistring2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibusb1defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibusb1types.h2
-rw-r--r--src/wrapped/generated/wrappedlibusb1undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibuuiddefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibuuidtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibuuidundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvadefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvadrmdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvadrmtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibvadrmundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvatypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibvaundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvawaylanddefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvawaylandtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibvawaylandundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvax11defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvax11types.h2
-rw-r--r--src/wrapped/generated/wrappedlibvax11undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvdpaudefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvdpautypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibvdpauundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvorbisdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibvorbistypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibvorbisundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibx11defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibx11types.h2
-rw-r--r--src/wrapped/generated/wrappedlibx11undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibx11xcbdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibx11xcbtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibx11xcbundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxaudefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxautypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxauundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbcursordefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbcursortypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbcursorundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri2defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri2types.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri3defs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri3types.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbglxdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbglxtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbglxundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbicccmdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbicccmtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbicccmundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbimagedefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbimagetypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbimageundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbkeysymsdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbkeysymstypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbkeysymsundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbpresentdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbpresenttypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbpresentundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbrandrdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbrandrtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbrandrundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbrenderdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbrendertypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbrenderundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbrenderutildefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbrenderutiltypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbrenderutilundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbshapedefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbshapetypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbshapeundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbshmdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbshmtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbshmundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbsyncdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbsynctypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbsyncundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbutildefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbutiltypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbutilundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxfixesdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxfixestypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxfixesundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxineramadefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxineramatypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxineramaundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxinputdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxinputtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxinputundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxkbdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxkbtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxkbundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxtestdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxtesttypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcbxtestundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcompositedefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcompositetypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcompositeundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcursordefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcursortypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxcursorundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxdamagedefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxdamagetypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxdamageundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxdmcpdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxdmcptypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxdmcpundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxextdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxexttypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxextundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxfixesdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxfixestypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxfixesundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxftdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxfttypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxftundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxidefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxitypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxiundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxmudefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxmutypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxmuundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxpmdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxpmtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxpmundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxpresentdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxpresenttypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxpresentundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxrandrdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxrandrtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxrandrundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxrenderdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxrendertypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxrenderundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxssdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxsstypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxssundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxtdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxtstdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxtsttypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxtstundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxttypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxtundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxxf86vmdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibxxf86vmtypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibxxf86vmundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibzdefs.h2
-rw-r--r--src/wrapped/generated/wrappedlibztypes.h2
-rw-r--r--src/wrapped/generated/wrappedlibzundefs.h2
-rw-r--r--src/wrapped/generated/wrappedlzmadefs.h2
-rw-r--r--src/wrapped/generated/wrappedlzmatypes.h2
-rw-r--r--src/wrapped/generated/wrappedlzmaundefs.h2
-rw-r--r--src/wrapped/generated/wrappedmpg123defs.h2
-rw-r--r--src/wrapped/generated/wrappedmpg123types.h2
-rw-r--r--src/wrapped/generated/wrappedmpg123undefs.h2
-rw-r--r--src/wrapped/generated/wrappednotifydefs.h2
-rw-r--r--src/wrapped/generated/wrappednotifytypes.h2
-rw-r--r--src/wrapped/generated/wrappednotifyundefs.h2
-rw-r--r--src/wrapped/generated/wrappednsldefs.h2
-rw-r--r--src/wrapped/generated/wrappednsltypes.h2
-rw-r--r--src/wrapped/generated/wrappednslundefs.h2
-rw-r--r--src/wrapped/generated/wrappednspr4defs.h2
-rw-r--r--src/wrapped/generated/wrappednspr4types.h2
-rw-r--r--src/wrapped/generated/wrappednspr4undefs.h2
-rw-r--r--src/wrapped/generated/wrappednss3defs.h2
-rw-r--r--src/wrapped/generated/wrappednss3types.h2
-rw-r--r--src/wrapped/generated/wrappednss3undefs.h2
-rw-r--r--src/wrapped/generated/wrappednssutil3defs.h2
-rw-r--r--src/wrapped/generated/wrappednssutil3types.h2
-rw-r--r--src/wrapped/generated/wrappednssutil3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedopenaldefs.h2
-rw-r--r--src/wrapped/generated/wrappedopenaltypes.h2
-rw-r--r--src/wrapped/generated/wrappedopenalundefs.h2
-rw-r--r--src/wrapped/generated/wrappedopencldefs.h2
-rw-r--r--src/wrapped/generated/wrappedopencltypes.h2
-rw-r--r--src/wrapped/generated/wrappedopenclundefs.h2
-rw-r--r--src/wrapped/generated/wrappedp11kitdefs.h2
-rw-r--r--src/wrapped/generated/wrappedp11kittypes.h2
-rw-r--r--src/wrapped/generated/wrappedp11kitundefs.h2
-rw-r--r--src/wrapped/generated/wrappedpamdefs.h2
-rw-r--r--src/wrapped/generated/wrappedpamtypes.h2
-rw-r--r--src/wrapped/generated/wrappedpamundefs.h2
-rw-r--r--src/wrapped/generated/wrappedpangocairodefs.h2
-rw-r--r--src/wrapped/generated/wrappedpangocairotypes.h2
-rw-r--r--src/wrapped/generated/wrappedpangocairoundefs.h2
-rw-r--r--src/wrapped/generated/wrappedpangodefs.h2
-rw-r--r--src/wrapped/generated/wrappedpangoft2defs.h2
-rw-r--r--src/wrapped/generated/wrappedpangoft2types.h2
-rw-r--r--src/wrapped/generated/wrappedpangoft2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedpangotypes.h2
-rw-r--r--src/wrapped/generated/wrappedpangoundefs.h2
-rw-r--r--src/wrapped/generated/wrappedplc4defs.h2
-rw-r--r--src/wrapped/generated/wrappedplc4types.h2
-rw-r--r--src/wrapped/generated/wrappedplc4undefs.h2
-rw-r--r--src/wrapped/generated/wrappedplds4defs.h2
-rw-r--r--src/wrapped/generated/wrappedplds4types.h2
-rw-r--r--src/wrapped/generated/wrappedplds4undefs.h2
-rw-r--r--src/wrapped/generated/wrappedpng16defs.h2
-rw-r--r--src/wrapped/generated/wrappedpng16types.h2
-rw-r--r--src/wrapped/generated/wrappedpng16undefs.h2
-rw-r--r--src/wrapped/generated/wrappedpsl5defs.h2
-rw-r--r--src/wrapped/generated/wrappedpsl5types.h2
-rw-r--r--src/wrapped/generated/wrappedpsl5undefs.h2
-rw-r--r--src/wrapped/generated/wrappedpulsedefs.h2
-rw-r--r--src/wrapped/generated/wrappedpulsemainloopglibdefs.h2
-rw-r--r--src/wrapped/generated/wrappedpulsemainloopglibtypes.h2
-rw-r--r--src/wrapped/generated/wrappedpulsemainloopglibundefs.h2
-rw-r--r--src/wrapped/generated/wrappedpulsesimpledefs.h2
-rw-r--r--src/wrapped/generated/wrappedpulsesimpletypes.h2
-rw-r--r--src/wrapped/generated/wrappedpulsesimpleundefs.h2
-rw-r--r--src/wrapped/generated/wrappedpulsetypes.h2
-rw-r--r--src/wrapped/generated/wrappedpulseundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1defs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1imagedefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1imagetypes.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1imageundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1mixerdefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1mixertypes.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1mixerundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1netdefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1nettypes.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1netundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1sounddefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1soundtypes.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1soundundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1ttfdefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1ttftypes.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1ttfundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1types.h2
-rw-r--r--src/wrapped/generated/wrappedsdl1undefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2defs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2imagedefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2imagetypes.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2imageundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2mixerdefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2mixertypes.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2mixerundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2netdefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2nettypes.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2netundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2ttfdefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2ttftypes.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2ttfundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2types.h2
-rw-r--r--src/wrapped/generated/wrappedsdl2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedsecret1defs.h2
-rw-r--r--src/wrapped/generated/wrappedsecret1types.h2
-rw-r--r--src/wrapped/generated/wrappedsecret1undefs.h2
-rw-r--r--src/wrapped/generated/wrappedselinuxdefs.h2
-rw-r--r--src/wrapped/generated/wrappedselinuxtypes.h2
-rw-r--r--src/wrapped/generated/wrappedselinuxundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsmime3defs.h2
-rw-r--r--src/wrapped/generated/wrappedsmime3types.h2
-rw-r--r--src/wrapped/generated/wrappedsmime3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedsmpeg2defs.h2
-rw-r--r--src/wrapped/generated/wrappedsmpeg2types.h2
-rw-r--r--src/wrapped/generated/wrappedsmpeg2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedsmpegdefs.h2
-rw-r--r--src/wrapped/generated/wrappedsmpegtypes.h2
-rw-r--r--src/wrapped/generated/wrappedsmpegundefs.h2
-rw-r--r--src/wrapped/generated/wrappedsoftokn3defs.h2
-rw-r--r--src/wrapped/generated/wrappedsoftokn3types.h2
-rw-r--r--src/wrapped/generated/wrappedsoftokn3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedssl3defs.h2
-rw-r--r--src/wrapped/generated/wrappedssl3types.h2
-rw-r--r--src/wrapped/generated/wrappedssl3undefs.h2
-rw-r--r--src/wrapped/generated/wrappedtbbbinddefs.h2
-rw-r--r--src/wrapped/generated/wrappedtbbbindtypes.h2
-rw-r--r--src/wrapped/generated/wrappedtbbbindundefs.h2
-rw-r--r--src/wrapped/generated/wrappedtbbmallocdefs.h2
-rw-r--r--src/wrapped/generated/wrappedtbbmallocproxydefs.h2
-rw-r--r--src/wrapped/generated/wrappedtbbmallocproxytypes.h2
-rw-r--r--src/wrapped/generated/wrappedtbbmallocproxyundefs.h2
-rw-r--r--src/wrapped/generated/wrappedtbbmalloctypes.h2
-rw-r--r--src/wrapped/generated/wrappedtbbmallocundefs.h2
-rw-r--r--src/wrapped/generated/wrappedtcmallocminimaldefs.h2
-rw-r--r--src/wrapped/generated/wrappedtcmallocminimaltypes.h2
-rw-r--r--src/wrapped/generated/wrappedtcmallocminimalundefs.h2
-rw-r--r--src/wrapped/generated/wrappedudev0defs.h2
-rw-r--r--src/wrapped/generated/wrappedudev0types.h2
-rw-r--r--src/wrapped/generated/wrappedudev0undefs.h2
-rw-r--r--src/wrapped/generated/wrappedudev1defs.h2
-rw-r--r--src/wrapped/generated/wrappedudev1types.h2
-rw-r--r--src/wrapped/generated/wrappedudev1undefs.h2
-rw-r--r--src/wrapped/generated/wrappedunwinddefs.h2
-rw-r--r--src/wrapped/generated/wrappedunwindtypes.h2
-rw-r--r--src/wrapped/generated/wrappedunwindundefs.h2
-rw-r--r--src/wrapped/generated/wrappedutildefs.h2
-rw-r--r--src/wrapped/generated/wrappedutiltypes.h2
-rw-r--r--src/wrapped/generated/wrappedutilundefs.h2
-rw-r--r--src/wrapped/generated/wrappedvorbisfiledefs.h2
-rw-r--r--src/wrapped/generated/wrappedvorbisfiletypes.h2
-rw-r--r--src/wrapped/generated/wrappedvorbisfileundefs.h2
-rw-r--r--src/wrapped/generated/wrappedvulkandefs.h2
-rw-r--r--src/wrapped/generated/wrappedvulkantypes.h2
-rw-r--r--src/wrapped/generated/wrappedvulkanundefs.h2
-rw-r--r--src/wrapped/generated/wrappedwaylandclientdefs.h2
-rw-r--r--src/wrapped/generated/wrappedwaylandclienttypes.h2
-rw-r--r--src/wrapped/generated/wrappedwaylandclientundefs.h2
-rw-r--r--src/wrapped/generated/wrappedwaylandcursordefs.h2
-rw-r--r--src/wrapped/generated/wrappedwaylandcursortypes.h2
-rw-r--r--src/wrapped/generated/wrappedwaylandcursorundefs.h2
-rw-r--r--src/wrapped/generated/wrappedwaylandegldefs.h2
-rw-r--r--src/wrapped/generated/wrappedwaylandegltypes.h2
-rw-r--r--src/wrapped/generated/wrappedwaylandeglundefs.h2
-rw-r--r--src/wrapped/generated/wrappedxineramadefs.h2
-rw-r--r--src/wrapped/generated/wrappedxineramatypes.h2
-rw-r--r--src/wrapped/generated/wrappedxineramaundefs.h2
-rw-r--r--src/wrapped/generated/wrappedxkbcommondefs.h2
-rw-r--r--src/wrapped/generated/wrappedxkbcommontypes.h2
-rw-r--r--src/wrapped/generated/wrappedxkbcommonundefs.h2
-rw-r--r--src/wrapped/generated/wrappedxkbcommonx11defs.h2
-rw-r--r--src/wrapped/generated/wrappedxkbcommonx11types.h2
-rw-r--r--src/wrapped/generated/wrappedxkbcommonx11undefs.h2
-rw-r--r--src/wrapped/generated/wrappedxkbregistrydefs.h2
-rw-r--r--src/wrapped/generated/wrappedxkbregistrytypes.h2
-rw-r--r--src/wrapped/generated/wrappedxkbregistryundefs.h2
-rw-r--r--src/wrapped/generated/wrappedxml2defs.h2
-rw-r--r--src/wrapped/generated/wrappedxml2types.h2
-rw-r--r--src/wrapped/generated/wrappedxml2undefs.h2
-rw-r--r--src/wrapped/generated/wrappedxshmfencedefs.h2
-rw-r--r--src/wrapped/generated/wrappedxshmfencetypes.h2
-rw-r--r--src/wrapped/generated/wrappedxshmfenceundefs.h2
-rw-r--r--src/wrapped/generated/wrappedxsltdefs.h2
-rw-r--r--src/wrapped/generated/wrappedxslttypes.h2
-rw-r--r--src/wrapped/generated/wrappedxsltundefs.h2
-rw-r--r--src/wrapped/generated/wrapper.c12
-rw-r--r--src/wrapped/generated/wrapper.h2
-rw-r--r--src/wrapped/wrappedlibdl.c46
-rw-r--r--src/wrapped/wrappedlibrt.c5
-rw-r--r--src/wrapped32/generated/converter32.c61
-rw-r--r--src/wrapped32/generated/converter32.h37
-rw-r--r--src/wrapped32/generated/functions_list.txt365
-rw-r--r--src/wrapped32/generated/wrappedcrashhandlerdefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedcrashhandlertypes32.h17
-rw-r--r--src/wrapped32/generated/wrappedcrashhandlerundefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedldlinuxdefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedldlinuxtypes32.h21
-rw-r--r--src/wrapped32/generated/wrappedldlinuxundefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedlibcdefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedlibctypes32.h49
-rw-r--r--src/wrapped32/generated/wrappedlibcundefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedlibdldefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedlibdltypes32.h36
-rw-r--r--src/wrapped32/generated/wrappedlibdlundefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedlibmdefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedlibmtypes32.h90
-rw-r--r--src/wrapped32/generated/wrappedlibmundefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedlibpthreaddefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedlibpthreadtypes32.h97
-rw-r--r--src/wrapped32/generated/wrappedlibpthreadundefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedlibrtdefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedlibrttypes32.h17
-rw-r--r--src/wrapped32/generated/wrappedlibrtundefs32.h8
-rw-r--r--src/wrapped32/generated/wrapper32.c423
-rw-r--r--src/wrapped32/generated/wrapper32.h200
-rwxr-xr-xsrc/wrapped32/wrappedcrashhandler.c32
-rwxr-xr-xsrc/wrapped32/wrappedcrashhandler_private.h49
-rwxr-xr-xsrc/wrapped32/wrappedldlinux.c58
-rwxr-xr-xsrc/wrapped32/wrappedldlinux_private.h25
-rw-r--r--src/wrapped32/wrappedlib_init32.h325
-rwxr-xr-xsrc/wrapped32/wrappedlibc.c2867
-rwxr-xr-xsrc/wrapped32/wrappedlibc_private.h2178
-rwxr-xr-xsrc/wrapped32/wrappedlibdl.c165
-rwxr-xr-xsrc/wrapped32/wrappedlibdl_private.h15
-rwxr-xr-xsrc/wrapped32/wrappedlibm.c154
-rwxr-xr-xsrc/wrapped32/wrappedlibm_private.h446
-rwxr-xr-xsrc/wrapped32/wrappedlibpthread.c97
-rwxr-xr-xsrc/wrapped32/wrappedlibpthread_private.h187
-rwxr-xr-xsrc/wrapped32/wrappedlibrt.c80
-rwxr-xr-xsrc/wrapped32/wrappedlibrt_private.h50
-rwxr-xr-xtests32/bashbin0 -> 1367848 bytes
-rwxr-xr-xtests32/benchfloatbin0 -> 11776 bytes
-rwxr-xr-xtests32/benchfloat.c888
-rwxr-xr-xtests32/extensions/mmxbin0 -> 287144 bytes
-rw-r--r--tests32/extensions/mmx.c674
-rw-r--r--tests32/extensions/mmx.txt106
-rw-r--r--tests32/ref01.txt1
-rw-r--r--tests32/ref02.txt1
-rw-r--r--tests32/ref03.txt1
-rw-r--r--tests32/ref04.txt1
-rw-r--r--tests32/ref05.txt6
-rw-r--r--tests32/ref06.txt4
-rw-r--r--tests32/ref07.txt1
-rw-r--r--tests32/ref08.txt1
-rw-r--r--tests32/ref09.txt2
-rw-r--r--tests32/ref10.txt10
-rw-r--r--tests32/ref11.txt8
-rw-r--r--tests32/ref12.txt4
-rw-r--r--tests32/ref13.txt8
-rw-r--r--tests32/ref14.txt5
-rw-r--r--tests32/ref15.txt1
-rw-r--r--tests32/ref16.txt1
-rw-r--r--tests32/ref17.txt564
-rw-r--r--tests32/ref17_o2.txt840
-rw-r--r--tests32/ref18.txt2
-rw-r--r--tests32/ref19.txt222
-rw-r--r--tests32/ref20.txt11
-rw-r--r--tests32/ref21.txt1
-rw-r--r--tests32/ref22.txt1248
-rw-r--r--tests32/ref23.txt5
-rw-r--r--tests32/ref24.txt640
-rw-r--r--tests32/ref25.txt1062
-rw-r--r--tests32/ref26.txt810
-rw-r--r--tests32/roundtest.h114
-rwxr-xr-xtests32/test01bin0 -> 7360 bytes
-rw-r--r--tests32/test01.c19
-rwxr-xr-xtests32/test02bin0 -> 7268 bytes
-rw-r--r--tests32/test02.c9
-rwxr-xr-xtests32/test03bin0 -> 7180 bytes
-rw-r--r--tests32/test03.c7
-rwxr-xr-xtests32/test04bin0 -> 9976 bytes
-rw-r--r--tests32/test04.c7
-rwxr-xr-xtests32/test05bin0 -> 7384 bytes
-rwxr-xr-xtests32/test05.c62
-rwxr-xr-xtests32/test06bin0 -> 7724 bytes
-rw-r--r--tests32/test06.c55
-rwxr-xr-xtests32/test07bin0 -> 7220 bytes
-rw-r--r--tests32/test07.c20
-rwxr-xr-xtests32/test08bin0 -> 7312 bytes
-rwxr-xr-xtests32/test08.c36
-rwxr-xr-xtests32/test09bin0 -> 7316 bytes
-rwxr-xr-xtests32/test09.c20
-rwxr-xr-xtests32/test10bin0 -> 15844 bytes
-rw-r--r--tests32/test10.cpp27
-rwxr-xr-xtests32/test11bin0 -> 22496 bytes
-rw-r--r--tests32/test11.c131
-rwxr-xr-xtests32/test12bin0 -> 7424 bytes
-rwxr-xr-xtests32/test12.c35
-rwxr-xr-xtests32/test13bin0 -> 7512 bytes
-rw-r--r--tests32/test13.c54
-rwxr-xr-xtests32/test14bin0 -> 19276 bytes
-rwxr-xr-xtests32/test14.c111
-rwxr-xr-xtests32/test15bin0 -> 15376 bytes
-rw-r--r--tests32/test15.c32
-rwxr-xr-xtests32/test15_dv1.sobin0 -> 14860 bytes
-rwxr-xr-xtests32/test15_v1.sobin0 -> 14796 bytes
-rwxr-xr-xtests32/test15_v2.sobin0 -> 14888 bytes
-rwxr-xr-xtests32/test16bin0 -> 15368 bytes
-rw-r--r--tests32/test16.c32
-rwxr-xr-xtests32/test16_dv1.sobin0 -> 14864 bytes
-rwxr-xr-xtests32/test16_v1.sobin0 -> 14888 bytes
-rwxr-xr-xtests32/test16_v2.sobin0 -> 14792 bytes
-rwxr-xr-xtests32/test17bin0 -> 140776 bytes
-rw-r--r--tests32/test17.c611
-rwxr-xr-xtests32/test17_o2bin0 -> 251636 bytes
-rwxr-xr-xtests32/test18bin0 -> 15672 bytes
-rw-r--r--tests32/test18.c30
-rwxr-xr-xtests32/test19bin0 -> 15676 bytes
-rw-r--r--tests32/test19.c148
-rwxr-xr-xtests32/test20bin0 -> 15544 bytes
-rw-r--r--tests32/test20.c48
-rwxr-xr-xtests32/test21bin0 -> 15060 bytes
-rw-r--r--tests32/test21.c41
-rwxr-xr-xtests32/test21_v1.sobin0 -> 14380 bytes
-rwxr-xr-xtests32/test21_v2.sobin0 -> 14376 bytes
-rwxr-xr-xtests32/test22bin0 -> 20872 bytes
-rw-r--r--tests32/test22.c70
-rwxr-xr-xtests32/test23bin0 -> 15016 bytes
-rw-r--r--tests32/test23.c52
-rwxr-xr-xtests32/test24bin0 -> 39860 bytes
-rw-r--r--tests32/test24.c104
-rwxr-xr-xtests32/test25bin0 -> 264064 bytes
-rw-r--r--tests32/test25.c130
-rwxr-xr-xtests32/test26bin0 -> 68564 bytes
-rw-r--r--tests32/test26.c116
-rwxr-xr-xx86lib/libgcc_s.so.1bin0 -> 116256 bytes
-rw-r--r--x86lib/libpng12.so.0bin0 -> 165756 bytes
-rw-r--r--x86lib/libstdc++.so.5bin0 -> 757220 bytes
-rwxr-xr-xx86lib/libstdc++.so.6bin0 -> 1582360 bytes
-rw-r--r--x86lib/libunwind.so.8bin0 -> 58788 bytes
914 files changed, 25927 insertions, 1022 deletions
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
         $<TARGET_OBJECTS:dynarec_native>
@@ -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.

+

 <img src="docs/img/Box64Icon.png" width="96" height="96">

 

 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 <letter> <structure name> <signature equivalent>"
+  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<<len(Define.defines))
+			if any( # i matches any clause
+				all( # i matches all conditions in the clause
+					(i & (1<<Define.defines.index(define.name)) == 0) == define.inverted_
+					for define in clause.defines)
+				for clause in self.clauses)
+		]
+		
+		last_combined = needed[:]
+		uncombinable: List[Tuple[int, int]] = []
+		while len(last_combined) > 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 <stdio.h>
+		#include <stdlib.h>
+		#include <stdint.h>
+		
+		#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 <stdint.h>
+		#include <string.h>
+		
+		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 <stdint.h>
+#include <stdlib.h>
+#include <pthread.h>
+
+#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);
@@ -1498,6 +1486,54 @@ void LoadEnvVars(box64context_t *context)
 }
 
 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()
 {
 #ifdef HAVE_TRACE
@@ -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; j<ver->vn_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; i<h->initarray_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; i<h->initarray_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; i<h->initarray_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; i<ctx->elfsize; ++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; i<cnt; ++i) {
+            int t = ELF32_R_TYPE(rela[i].r_info);
+            if(t == R_386_COPY) {
+                Elf32_Sym *sym = &head->DynSym._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; i<h->numDynSym; ++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; i<context->elfsize; ++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; i<context->elfsize; ++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; i<context->elfsize; ++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 <dlfcn.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <pthread.h>
+#include <signal.h>
+
+#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 <elf.h>
+#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 <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sys/syscall.h>   /* For SYS_xxx definitions */
+#include <unistd.h>
+#include <time.h>
+#include <sys/mman.h>
+#include <sys/select.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <asm/stat.h>
+#include <errno.h>
+#include <sched.h>
+#include <sys/wait.h>
+#include <sys/utsname.h>
+#ifndef __NR_socketcall
+#include <linux/net.h>
+#include <sys/socket.h>
+#endif
+#include <sys/resource.h>
+#include <poll.h>
+
+#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; i<cnt; i++) {
+        if(syscallwrap[i].x86s == s) {
+            int sc = syscallwrap[i].nats;
+            switch(syscallwrap[i].nbpars) {
+                case 0: *(int32_t*)&R_EAX = syscall(sc); break;
+                case 1: *(int32_t*)&R_EAX = syscall(sc, R_EBX); break;
+                case 2: *(int32_t*)&R_EAX = syscall(sc, R_EBX, R_ECX); break;
+                case 3: *(int32_t*)&R_EAX = syscall(sc, R_EBX, R_ECX, R_EDX); break;
+                case 4: *(int32_t*)&R_EAX = syscall(sc, R_EBX, R_ECX, R_EDX, R_ESI); break;
+                case 5: *(int32_t*)&R_EAX = syscall(sc, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI); break;
+                case 6: *(int32_t*)&R_EAX = syscall(sc, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI, R_EBP); break;
+                default:
+                   printf_log(LOG_NONE, "ERROR, Unimplemented syscall wrapper (%d, %d)\n", s, syscallwrap[i].nbpars); 
+                   emu->quit = 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; i<cnt; i++) {
+        if(syscallwrap[i].x86s == s) {
+            int sc = syscallwrap[i].nats;
+            switch(syscallwrap[i].nbpars) {
+                case 0: return syscall(sc);
+                case 1: return syscall(sc, u32(4));
+                case 2: return syscall(sc, u32(4), u32(8));
+                case 3: return syscall(sc, u32(4), u32(8), u32(12));
+                case 4: return syscall(sc, u32(4), u32(8), u32(12), u32(16));
+                case 5: return syscall(sc, u32(4), u32(8), u32(12), u32(16), u32(20));
+                case 6: return syscall(sc, u32(4), u32(8), u32(12), u32(16), u32(20), u32(24));
+                default:
+                   printf_log(LOG_NONE, "ERROR, Unimplemented syscall wrapper (%d, %d)\n", s, syscallwrap[i].nbpars); 
+                   emu->quit = 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<<s))) {
+                printf_log(LOG_INFO, "Warning: Unsupported libc Syscall 0x%02X (%d)\n", s, s);
+                warned|=(1<<s);
+            }
+            errno = ENOSYS;
+            return -1;
+    }
+    return 0;
+}
+#endif //BOX32
\ No newline at end of file
diff --git a/src/emu/x87emu_private.c b/src/emu/x87emu_private.c
index 92c14268..c64f49cb 100644
--- a/src/emu/x87emu_private.c
+++ b/src/emu/x87emu_private.c
@@ -295,7 +295,6 @@ void fpu_savenv(x64emu_t* emu, char* p, int b16)
     // other stuff are not pushed....
 }
 
-// this is the 64bits version (slightly different than the 32bits!)
 typedef struct xsave32_s {
     uint16_t ControlWord;        /* 000 */
     uint16_t StatusWord;         /* 002 */
@@ -311,9 +310,10 @@ typedef struct xsave32_s {
     uint32_t MxCsr;              /* 018 */
     uint32_t MxCsr_Mask;         /* 01c */
     sse_regs_t FloatRegisters[8];/* 020 */  // fpu/mmx are store in 128bits here
-    sse_regs_t XmmRegisters[16]; /* 0a0 */
-    uint8_t  Reserved4[96];      /* 1a0 */
+    sse_regs_t XmmRegisters[8];  /* 0a0 */
+    uint8_t  Reserved4[56*4];    /* 1a0 */
 } xsave32_t;
+// this is the 64bits version (slightly different than the 32bits!)
 typedef struct xsave64_s {
     uint16_t ControlWord;        /* 000 */
     uint16_t StatusWord;         /* 002 */
@@ -354,8 +354,7 @@ void fpu_fxsave32(x64emu_t* emu, void* ed)
     for(int i=0; i<8; ++i)
         memcpy(&p->FloatRegisters[i].q[0], (i<stack)?&ST(i):&emu->mmx[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], (i<stack)?&ST(i):&emu->mmx[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((i<stack)?&ST(i):&emu->mmx[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((i<stack)?&ST(i):&emu->mmx[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 <stdint.h>
+
+#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; i<nb; ++i) {
-        if(strcmp(lib->name, 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <wchar.h>
+#include <sys/epoll.h>
+#include <fts.h>
+
+#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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <asm/stat.h>
+#include <sys/vfs.h>
+
+#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 <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <signal.h>
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <syscall.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <ucontext.h>
+#include <setjmp.h>
+#include <sys/mman.h>
+#include <pthread.h>
+#ifndef ANDROID
+#include <execinfo.h>
+#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; i<nargs; ++i) {
+        uint32_t v = va_arg(va, uint32_t);
+        *p = v;
+        p++;
+    }
+    va_end (va);
+
+    printf_log(LOG_DEBUG, "%04d|signal #%d function handler %p called, RSP=%p\n", GetTID(), R_EDI, from_ptrv(fnc), from_ptrv(R_ESP));
+
+    int oldquitonlongjmp = emu->flags.quitonlongjmp;
+    emu->flags.quitonlongjmp = 2;
+    int old_cs = R_CS;
+    R_CS = 0x23;
+
+    emu->eflags.x64 &= ~(1<<F_TF); // this one needs to cleared
+
+    if(dynarec)
+        DynaCall(emu, fnc);
+    else
+        EmuCall(emu, fnc);
+
+    if(!emu->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; i<argc; ++i) {
+        // push value
+        --esp;
+        *esp = argv[(argc-1)-i];
+    }
+    // push the return value
+    --esp;
+    *esp = to_ptr(my_context->exit_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 <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <signal.h>
+#include <errno.h>
+#include <setjmp.h>
+#include <sys/mman.h>
+#include <dlfcn.h>
+
+#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 <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/mman.h>
+
+#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);
-
-    Push64(emu, R_RBP); // push rbp
-    R_RBP = R_RSP;      // mov rbp, rsp
+    #ifdef BOX32
+    if(box64_is32bits) {
+        Push_32(emu, R_RBP); // push ebp
+        R_RBP = R_ESP;       // mov ebp, esp
 
-    R_RSP -= stackn*sizeof(void*);   // need to push in reverse order
+        R_ESP -= nargs*4;   // need to push in reverse order
 
-    uint64_t *p = (uint64_t*)R_RSP;
+        ptr_t *p = (ptr_t*)from_ptrv(R_ESP);
 
-    va_list va;
-    va_start (va, nargs);
-    for (int i=0; i<nargs; ++i) {
-        if(i<6) {
-            int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9};
-            emu->regs[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; i<nargs; ++i) {
+            *p = va_arg(va, uint32_t);
             p++;
         }
+        va_end (va);
+    } else
+    #endif
+    {
+        int align = (nargs>6)?(((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; i<nargs; ++i) {
+            if(i<6) {
+                int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9};
+                emu->regs[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;
+    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
+    }
 
-    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;
+    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);
-
-    Push64(emu, R_RBP); // push rbp
-    R_RBP = R_RSP;      // mov rbp, rsp
+    #ifdef BOX32
+    if(box64_is32bits) {
+        Push_32(emu, R_RBP); // push ebp
+        R_RBP = R_ESP;       // mov ebp, esp
 
-    R_RSP -= stackn*sizeof(void*);   // need to push in reverse order
+        R_ESP -= nargs*4;   // need to push in reverse order
 
-    uint64_t *p = (uint64_t*)R_RSP;
+        ptr_t *p = (ptr_t*)from_ptrv(R_ESP);
 
-    va_list va;
-    va_start (va, nargs);
-    for (int i=0; i<nargs; ++i) {
-        if(i<6) {
-            int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9};
-            emu->regs[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; i<nargs; ++i) {
+            *p = va_arg(va, uint32_t);
             p++;
         }
+        va_end (va);
+    } else
+    #endif
+    {
+        int align = (nargs>6)?(((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; i<nargs; ++i) {
+            if(i<6) {
+                int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9};
+                emu->regs[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 <stdio.h>
 #include <stdlib.h>
@@ -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 <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#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 <stdint.h>
+#include <string.h>
+
+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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+
+#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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+
+#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; i<cnt; ++i) {
+        k = kh_put(symbolmap, lib->w.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; i<cnt; ++i) {
+        k = kh_put(symbol2map, lib->w.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; i<cnt; ++i) {
+        if(MAPNAME(datamap)[i].weak) {
+            k = kh_put(datamap, lib->w.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; i<cnt; ++i) {
+        k = kh_put(datamap, lib->w.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 <stdlib.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <string.h>
+#include <wchar.h>
+#include <dlfcn.h>
+#include <signal.h>
+#include <errno.h>
+#include <err.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/select.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <glob.h>
+#include <ctype.h>
+#include <dirent.h>
+#include <search.h>
+#include <sys/types.h>
+#include <poll.h>
+#include <sys/epoll.h>
+#include <ftw.h>
+#include <sys/syscall.h> 
+#include <sys/socket.h>
+#include <sys/utsname.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <setjmp.h>
+#include <sys/vfs.h>
+#include <spawn.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <locale.h>
+
+#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; i<my_context->atfork_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; i<my_context->atfork_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; i<emu->context->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; i<emu->context->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; i<emu->context->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; i<emu->context->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; j<i; ++j)
+            newargv[j+1] = argv[j];
+        if(self) newargv[1] = emu->context->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; j<i; ++j)
+            newargv[j+1] = argv[j];
+        if(self) newargv[1] = emu->context->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<<FEATURE_CMOV) 
+                                     | (1<<FEATURE_MMX) 
+                                     | (1<<FEATURE_SSE) 
+                                     | (1<<FEATURE_SSE2) 
+                                     | (1<<FEATURE_SSE3)
+                                     | (1<<FEATURE_SSSE3)
+                                     | (1<<FEATURE_MOVBE)
+                                     | (1<<FEATURE_ADX);
+}
+
+EXPORT const unsigned short int *my32___ctype_b;
+EXPORT const int32_t *my32___ctype_tolower;
+EXPORT const int32_t *my32___ctype_toupper;
+
+#ifdef ANDROID
+static void ctSetup()
+{
+}
+#else
+static void ctSetup()
+{
+    my32___ctype_b = *(__ctype_b_loc());
+    my32___ctype_toupper = *(__ctype_toupper_loc());
+    my32___ctype_tolower = *(__ctype_tolower_loc());
+}
+#endif
+
+#if 0
+EXPORT void my32___register_frame_info(void* a, void* b)
+{
+    // nothing
+}
+EXPORT void* my32___deregister_frame_info(void* a)
+{
+    return NULL;
+}
+
+EXPORT void* my32____brk_addr = NULL;
+#endif
+// 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;
+
+typedef struct __jmp_buf_tag_s {
+    jump_buff_i386_t __jmpbuf;
+    int              __mask_was_saved;
+    sigset_t         __saved_mask;
+} __jmp_buf_tag_t;
+
+void EXPORT my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val)
+{
+    jump_buff_i386_t *jpbuff = &((__jmp_buf_tag_t*)p)->__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<LOG_DEBUG) {dynarec_log(LOG_DEBUG, "mmap(%p, %zu, 0x%x, 0x%x, %d, %d) =>", 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<LOG_DEBUG) {dynarec_log(LOG_DEBUG, "%p\n", ret);}
+    #ifdef DYNAREC
+    if(box64_dynarec && ret!=(void*)-1) {
+        if(flags&0x100000 && addr!=ret)
+        {
+            // program used MAP_FIXED_NOREPLACE but the host linux didn't support it
+            // and responded with a different address, so ignore it
+        } else {
+            if(prot& PROT_EXEC)
+                addDBFromAddressRange((uintptr_t)ret, length);
+            else
+                cleanDBFromAddressRange((uintptr_t)ret, length, prot?0:1);
+        }
+    } 
+    #endif
+    if(ret!=(void*)-1)
+        setProtection((uintptr_t)ret, length, prot);
+    return ret;
+}
+
+EXPORT void* my32_mmap64(x64emu_t* emu, void *addr, size_t length, int prot, int flags, int fd, int64_t offset)
+{
+    if(prot&PROT_WRITE) 
+        prot|=PROT_READ;    // PROT_READ is implicit with PROT_WRITE on i386
+    if(box64_log<LOG_DEBUG) {dynarec_log(LOG_DEBUG, "mmap64(%p, %zu, 0x%x, 0x%x, %d, %ld) =>", 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<LOG_DEBUG) {dynarec_log(LOG_DEBUG, "%p\n", ret);}
+    #ifdef DYNAREC
+    if(box64_dynarec && ret!=(void*)-1) {
+        if(flags&0x100000 && addr!=ret)
+        {
+            // program used MAP_FIXED_NOREPLACE but the host linux didn't support it
+            // and responded with a different address, so ignore it
+        } else {
+            if(prot& PROT_EXEC)
+                addDBFromAddressRange((uintptr_t)ret, length);
+            else
+                cleanDBFromAddressRange((uintptr_t)ret, length, prot?0:1);
+        }
+    }
+    #endif
+    if(ret!=(void*)-1)
+        setProtection((uintptr_t)ret, length, prot);
+    return ret;
+}
+
+EXPORT void* my32_mremap(x64emu_t* emu, void* old_addr, size_t old_size, size_t new_size, int flags, void* new_addr)
+{
+    dynarec_log(/*LOG_DEBUG*/LOG_NONE, "mremap(%p, %zu, %zu, %d, %p)=>", 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_size<new_size) {
+            setProtection((uintptr_t)ret+old_size, new_size-old_size, prot);
+            #ifdef DYNAREC
+            if(box64_dynarec)
+                addDBFromAddressRange((uintptr_t)ret+old_size, new_size-old_size);
+            #endif
+        } else if(old_size && new_size<old_size) {
+            freeProtection((uintptr_t)ret+new_size, old_size-new_size);
+            #ifdef DYNAREC
+            if(box64_dynarec)
+                cleanDBFromAddressRange((uintptr_t)ret+new_size, new_size-old_size, 1);
+            #endif
+        } else if(!old_size) {
+            setProtection((uintptr_t)ret, new_size, prot);
+            #ifdef DYNAREC
+            if(box64_dynarec)
+                addDBFromAddressRange((uintptr_t)ret, new_size);
+            #endif
+        }
+    } else {
+        if(old_size
+        #ifdef MREMAP_DONTUNMAP
+        && !(flags&MREMAP_DONTUNMAP)
+        #endif
+        ) {
+            freeProtection((uintptr_t)old_addr, old_size);
+            #ifdef DYNAREC
+            if(box64_dynarec)
+                cleanDBFromAddressRange((uintptr_t)old_addr, old_size, 1);
+            #endif
+        }
+        setProtection((uintptr_t)ret, new_size, prot); // should copy the protection from old block
+        #ifdef DYNAREC
+        if(box64_dynarec)
+            addDBFromAddressRange((uintptr_t)ret, new_size);
+        #endif
+    }
+    return ret;
+}
+
+EXPORT int my32_munmap(x64emu_t* emu, void* addr, unsigned long length)
+{
+    dynarec_log(LOG_DEBUG, "munmap(%p, %lu)\n", addr, length);
+    #ifdef DYNAREC
+    if(box64_dynarec) {
+        cleanDBFromAddressRange((uintptr_t)addr, length, 1);
+    }
+    #endif
+    int ret = munmap(addr, length);
+    if(!ret)
+        freeProtection((uintptr_t)addr, length);
+    return ret;
+}
+
+EXPORT int my32_mprotect(x64emu_t* emu, void *addr, unsigned long len, int prot)
+{
+    dynarec_log(LOG_DEBUG, "mprotect(%p, %lu, 0x%x)\n", addr, len, prot);
+    if(prot&PROT_WRITE) 
+        prot|=PROT_READ;    // PROT_READ is implicit with PROT_WRITE on i386
+    int ret = mprotect(addr, len, prot);
+    #ifdef DYNAREC
+    if(box64_dynarec) {
+        if(prot& PROT_EXEC)
+            addDBFromAddressRange((uintptr_t)addr, len);
+        else
+            cleanDBFromAddressRange((uintptr_t)addr, len, 0);
+    }
+    #endif
+    if(!ret)
+        updateProtection((uintptr_t)addr, len, prot);
+    return ret;
+}
+#if 0
+#ifndef ANDROID
+typedef struct my32_cookie_s {
+    uintptr_t r, w, s, c;
+    void* cookie;
+} my32_cookie_t;
+
+static ssize_t my32_cookie_read(void *p, char *buf, size_t size)
+{
+    my32_cookie_t* cookie = (my32_cookie_t*)p;
+    return (ssize_t)RunFunction(my_context, cookie->r, 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <elf.h>
+#include <link.h>
+
+#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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <complex.h>
+#include <math.h>
+
+#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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <errno.h>
+#include <pthread.h>
+
+#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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <signal.h>
+
+#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 00000000..bad714a1
--- /dev/null
+++ b/tests32/bash
Binary files differdiff --git a/tests32/benchfloat b/tests32/benchfloat
new file mode 100755
index 00000000..3eb1a959
--- /dev/null
+++ b/tests32/benchfloat
Binary files differdiff --git a/tests32/benchfloat.c b/tests32/benchfloat.c
new file mode 100755
index 00000000..93b8207a
--- /dev/null
+++ b/tests32/benchfloat.c
@@ -0,0 +1,888 @@
+/*
+**
+** LINPACK.C        Linpack benchmark, calculates FLOPS.
+**                  (FLoating Point Operations Per Second)
+**
+** Translated to C by Bonnie Toy 5/88
+**
+** Modified by Will Menninger, 10/93, with these features:
+**  (modified on 2/25/94  to fix a problem with daxpy  for
+**   unequal increments or equal increments not equal to 1.
+**     Jack Dongarra)
+**
+** - Defaults to double precision.
+** - Averages ROLLed and UNROLLed performance.
+** - User selectable array sizes.
+** - Automatically does enough repetitions to take at least 10 CPU seconds.
+** - Prints machine precision.
+** - ANSI prototyping.
+**
+** To compile:  cc -O -o linpack linpack.c -lm
+**
+**
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <time.h>
+#include <float.h>
+
+#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<nreps;i++)
+        {
+        matgen(a,lda,n,b,&norma);
+        t1 = second();
+        dgefa(a,lda,n,ipvt,&info,1);
+        tdgefa += second()-t1;
+        t1 = second();
+        dgesl(a,lda,n,ipvt,b,0,1);
+        tdgesl += second()-t1;
+        }
+    for (i=0;i<nreps;i++)
+        {
+        matgen(a,lda,n,b,&norma);
+        t1 = second();
+        dgefa(a,lda,n,ipvt,&info,0);
+        tdgefa += second()-t1;
+        t1 = second();
+        dgesl(a,lda,n,ipvt,b,0,0);
+        tdgesl += second()-t1;
+        }
+    totalt=second()-totalt;
+    if (totalt<0.5 || tdgefa+tdgesl<0.2)
+        return(0.);
+    kflops=2.*nreps*ops/(1000.*(tdgefa+tdgesl));
+    toverhead=totalt-tdgefa-tdgesl;
+    if (tdgefa<0.)
+        tdgefa=0.;
+    if (tdgesl<0.)
+        tdgesl=0.;
+    if (toverhead<0.)
+        toverhead=0.;
+    printf("%8ld %6.2f %6.2f%% %6.2f%% %6.2f%%  %9.3f\n",
+            nreps,totalt,100.*tdgefa/totalt,
+            100.*tdgesl/totalt,100.*toverhead/totalt,
+            kflops);
+    return(totalt);
+    }
+
+
+/*
+** For matgen,
+** 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].
+*/
+static void matgen(REAL *a,int lda,int n,REAL *b,REAL *norma)
+
+    {
+    int init,i,j;
+
+    init = 1325;
+    *norma = 0.0;
+    for (j = 0; j < n; j++)
+        for (i = 0; i < n; i++)
+            {
+            init = (int)((long)3125*(long)init % 65536L);
+            a[lda*j+i] = (init - 32768.0)/16384.0;
+            *norma = (a[lda*j+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<p,j++)
+**                      dgesl(a,lda,n,ipvt,c[j][0],0);
+**         }
+**
+**   linpack. this version dated 08/14/78 .
+**   cleve moler, university of new mexico, argonne national lab.
+**
+**   functions
+**
+**   blas daxpy,ddot
+*/
+static void dgesl(REAL *a,int lda,int n,int *ipvt,REAL *b,int job,int roll)
+
+    {
+    REAL    t;
+    int     k,kb,l,nm1;
+
+    if (roll)
+        {
+        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_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 00000000..65b66532
--- /dev/null
+++ b/tests32/extensions/mmx
Binary files differdiff --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<stdint.h>
+#include<stdio.h>
+#include<stdbool.h>
+#include<limits.h>
+#include<immintrin.h>
+#include<cpuid.h>
+
+
+
+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 <assert.h>
+#include <stdio.h>
+
+#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 <fenv.h>
+#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 00000000..f4b84e5f
--- /dev/null
+++ b/tests32/test01
Binary files differdiff --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 <sys/syscall.h> 
+#include <unistd.h>                                      
+                                                                                
+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 00000000..c3c099c4
--- /dev/null
+++ b/tests32/test02
Binary files differdiff --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 <sys/syscall.h> 
+#include <unistd.h>                                      
+                                                                                
+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 00000000..02689a2c
--- /dev/null
+++ b/tests32/test03
Binary files differdiff --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 <stdio.h>
+
+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 00000000..a6b7b89c
--- /dev/null
+++ b/tests32/test04
Binary files differdiff --git a/tests32/test04.c b/tests32/test04.c
new file mode 100644
index 00000000..520360ed
--- /dev/null
+++ b/tests32/test04.c
@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+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 00000000..e4d5bb6f
--- /dev/null
+++ b/tests32/test05
Binary files differdiff --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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+
+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; i<k; i++)
+        if (!GET(i)) {
+            int m = 2 * i;
+            while (m < k) {
+                SET(m);
+                m += i;
+            }
+        }
+ 
+    printf("Prime list 0..%d: ", k);
+    for (int i=0; i<k; i++)
+        if (!GET(i))
+            printf("%d ", i);
+    printf("\n");
+
+    free(dels);
+
+    signed char sc = -5;
+    unsigned char uc = 83;
+    signed short int ss = -53;
+    unsigned short int us = 65500;
+
+    int it = sc+uc+ss+us;
+
+    printf("(un)signed char = %hhd/%hhu (un)signed int = %hd/%hu total=%d\n", sc, uc, ss, us, it);
+
+    printf("%hu/5=%hu, %hu%%5=%hu\n", us, us/5, us, us%5);
+    printf("%d/5=%d, %d%%5=%d\n", it, it/5, it, it%5);
+
+    printf("%d/%hd=%d + %d", it, ss, it/ss, it%ss);
+
+    return 0;
+}
\ No newline at end of file
diff --git a/tests32/test06 b/tests32/test06
new file mode 100755
index 00000000..46e3858d
--- /dev/null
+++ b/tests32/test06
Binary files differdiff --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 <stdio.h>
+#include <string.h>
+#include <pthread.h>
+#include <unistd.h>
+
+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 00000000..75cefd93
--- /dev/null
+++ b/tests32/test07
Binary files differdiff --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 <math.h>
+#include <stdio.h>
+
+#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 00000000..bfc135d7
--- /dev/null
+++ b/tests32/test08
Binary files differdiff --git a/tests32/test08.c b/tests32/test08.c
new file mode 100755
index 00000000..f5f5bce5
--- /dev/null
+++ b/tests32/test08.c
@@ -0,0 +1,36 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+//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 00000000..c5d953b0
--- /dev/null
+++ b/tests32/test09
Binary files differdiff --git a/tests32/test09.c b/tests32/test09.c
new file mode 100755
index 00000000..e4a56050
--- /dev/null
+++ b/tests32/test09.c
@@ -0,0 +1,20 @@
+#include <stdio.h> 
+#include <sys/types.h> 
+#include <unistd.h> 
+  
+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 00000000..fd02d55b
--- /dev/null
+++ b/tests32/test10
Binary files differdiff --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 <iostream>       // std::cout
+#include <atomic>         // std::atomic
+#include <thread>         // std::thread
+#include <vector>         // std::vector
+#include <sstream>        // std::stringstream
+
+std::atomic<bool> 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<std::thread> 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 00000000..c8bf7541
--- /dev/null
+++ b/tests32/test11
Binary files differdiff --git a/tests32/test11.c b/tests32/test11.c
new file mode 100644
index 00000000..c40edeb0
--- /dev/null
+++ b/tests32/test11.c
@@ -0,0 +1,131 @@
+#define _MULTI_THREADED
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pthread.h>
+#include <unistd.h>
+
+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 00000000..83ba1cea
--- /dev/null
+++ b/tests32/test12
Binary files differdiff --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 <stdio.h>
+#include <stdint.h>
+#include <math.h>
+
+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 00000000..823cb65b
--- /dev/null
+++ b/tests32/test13
Binary files differdiff --git a/tests32/test13.c b/tests32/test13.c
new file mode 100644
index 00000000..38dd891f
--- /dev/null
+++ b/tests32/test13.c
@@ -0,0 +1,54 @@
+#include <ucontext.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+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 00000000..93824888
--- /dev/null
+++ b/tests32/test14
Binary files differdiff --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 <pthread.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <unistd.h>
+
+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 00000000..386f69d9
--- /dev/null
+++ b/tests32/test15
Binary files differdiff --git a/tests32/test15.c b/tests32/test15.c
new file mode 100644
index 00000000..34f91401
--- /dev/null
+++ b/tests32/test15.c
@@ -0,0 +1,32 @@
+/*
+ * Compile with (on x86_64 archs):
+ *  gcc -m32 -DV1 -shared -o test15_v1.so test15.c
+ *  gcc -m32 -DV2 -shared -o test15_v2.so test15.c -Wl,--version-script=test15_version.map
+ *  gcc -m32 -shared -o test15_dv1.so test15.c -L. -Wl,-z,origin,-rpath='$ORIGIN' -l:test15_v1.so
+ *  gcc -m32 -DMAIN -o test15 test15.c -L. -Wl,-z,origin,-rpath='$ORIGIN' -l:test15_dv1.so -l:test15_v2.so
+ */
+
+#if defined(MAIN)
+int returnVersion();
+int acquireVersion1();
+int acquireVersion2();
+#include <stdio.h>
+
+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 00000000..2925ce8f
--- /dev/null
+++ b/tests32/test15_dv1.so
Binary files differdiff --git a/tests32/test15_v1.so b/tests32/test15_v1.so
new file mode 100755
index 00000000..74a2d6cf
--- /dev/null
+++ b/tests32/test15_v1.so
Binary files differdiff --git a/tests32/test15_v2.so b/tests32/test15_v2.so
new file mode 100755
index 00000000..b42d6d87
--- /dev/null
+++ b/tests32/test15_v2.so
Binary files differdiff --git a/tests32/test16 b/tests32/test16
new file mode 100755
index 00000000..1ff6e436
--- /dev/null
+++ b/tests32/test16
Binary files differdiff --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 <stdio.h>
+
+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 00000000..2dbb5dd6
--- /dev/null
+++ b/tests32/test16_dv1.so
Binary files differdiff --git a/tests32/test16_v1.so b/tests32/test16_v1.so
new file mode 100755
index 00000000..2903f1ce
--- /dev/null
+++ b/tests32/test16_v1.so
Binary files differdiff --git a/tests32/test16_v2.so b/tests32/test16_v2.so
new file mode 100755
index 00000000..4bc1def7
--- /dev/null
+++ b/tests32/test16_v2.so
Binary files differdiff --git a/tests32/test17 b/tests32/test17
new file mode 100755
index 00000000..dadb82f4
--- /dev/null
+++ b/tests32/test17
Binary files differdiff --git a/tests32/test17.c b/tests32/test17.c
new file mode 100644
index 00000000..70902fb6
--- /dev/null
+++ b/tests32/test17.c
@@ -0,0 +1,611 @@
+// build with  gcc -O0 -g -msse -msse2 -mssse3 -msse4.1 test17.c -o test17
+// and -m32 for 32bits version
+#include <inttypes.h>
+#include <string.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <math.h>
+#include <pmmintrin.h>
+#include <immintrin.h> 
+
+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 00000000..95b6894c
--- /dev/null
+++ b/tests32/test17_o2
Binary files differdiff --git a/tests32/test18 b/tests32/test18
new file mode 100755
index 00000000..c0389045
--- /dev/null
+++ b/tests32/test18
Binary files differdiff --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 <signal.h>
+#include <setjmp.h>
+#include <stdio.h>
+
+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 00000000..9ee17c3a
--- /dev/null
+++ b/tests32/test19
Binary files differdiff --git a/tests32/test19.c b/tests32/test19.c
new file mode 100644
index 00000000..edb1f755
--- /dev/null
+++ b/tests32/test19.c
@@ -0,0 +1,148 @@
+#include <string.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <math.h>
+
+#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<n; ++i)
+  for(int j=0; j<2; ++j) {
+   *(uint64_t*)&a = tests[i][0+j];
+   *(uint64_t*)&b = tests[i][1-j];
+   printf("FUCOMI 0x%llx 0x%llx ", *(uint64_t*)&a, *(uint64_t*)&b);
+   flags = _fucomip_(a, b);
+   ca = (flags>>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 00000000..d329fa9d
--- /dev/null
+++ b/tests32/test20
Binary files differdiff --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 <string.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <math.h>
+
+#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<n; ++i) {
+   printf("SDHLD/SAR/IDIV 0x%x 0x%x ", tests[i][0], tests[i][1]);
+   res = _idiv_(tests[i][0], tests[i][1]);
+   uint32_t divi = res & 0xffffffffLL;
+   uint32_t modo = res >> 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 00000000..07bea1b0
--- /dev/null
+++ b/tests32/test21
Binary files differdiff --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 <stdio.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+
+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 00000000..572bf579
--- /dev/null
+++ b/tests32/test21_v1.so
Binary files differdiff --git a/tests32/test21_v2.so b/tests32/test21_v2.so
new file mode 100755
index 00000000..47daabe9
--- /dev/null
+++ b/tests32/test21_v2.so
Binary files differdiff --git a/tests32/test22 b/tests32/test22
new file mode 100755
index 00000000..829c5397
--- /dev/null
+++ b/tests32/test22
Binary files differdiff --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 <stdio.h>
+#include <stdint.h>
+#include <wmmintrin.h>
+
+// 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 00000000..7da44987
--- /dev/null
+++ b/tests32/test23
Binary files differdiff --git a/tests32/test23.c b/tests32/test23.c
new file mode 100644
index 00000000..35016d6d
--- /dev/null
+++ b/tests32/test23.c
@@ -0,0 +1,52 @@
+#include <stdio.h>
+#include <string.h>
+#include <stddef.h>
+#include <stdint.h>
+// 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 00000000..c43b0fd5
--- /dev/null
+++ b/tests32/test24
Binary files differdiff --git a/tests32/test24.c b/tests32/test24.c
new file mode 100644
index 00000000..47f08e28
--- /dev/null
+++ b/tests32/test24.c
@@ -0,0 +1,104 @@
+#include <stdio.h>
+#include <fenv.h>
+#include <math.h>
+// 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 00000000..4a6213a6
--- /dev/null
+++ b/tests32/test25
Binary files differdiff --git a/tests32/test25.c b/tests32/test25.c
new file mode 100644
index 00000000..b2204308
--- /dev/null
+++ b/tests32/test25.c
@@ -0,0 +1,130 @@
+// build with  gcc -O0 -g -msse -msse2 -mssse3 -msse4.1 -msse4.2 -m32 test25.c -o test25
+// and -m32 for 32bits version
+#include <inttypes.h>
+#include <string.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <math.h>
+#include <pmmintrin.h>
+#include <immintrin.h>
+
+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 00000000..4efc881e
--- /dev/null
+++ b/tests32/test26
Binary files differdiff --git a/tests32/test26.c b/tests32/test26.c
new file mode 100644
index 00000000..f2097a18
--- /dev/null
+++ b/tests32/test26.c
@@ -0,0 +1,116 @@
+#include <fenv.h>
+#include <float.h>
+#include <inttypes.h>
+#include <stdint.h>
+#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 00000000..27b05485
--- /dev/null
+++ b/x86lib/libgcc_s.so.1
Binary files differdiff --git a/x86lib/libpng12.so.0 b/x86lib/libpng12.so.0
new file mode 100644
index 00000000..3eb1d0c1
--- /dev/null
+++ b/x86lib/libpng12.so.0
Binary files differdiff --git a/x86lib/libstdc++.so.5 b/x86lib/libstdc++.so.5
new file mode 100644
index 00000000..7e586f0a
--- /dev/null
+++ b/x86lib/libstdc++.so.5
Binary files differdiff --git a/x86lib/libstdc++.so.6 b/x86lib/libstdc++.so.6
new file mode 100755
index 00000000..f26626c0
--- /dev/null
+++ b/x86lib/libstdc++.so.6
Binary files differdiff --git a/x86lib/libunwind.so.8 b/x86lib/libunwind.so.8
new file mode 100644
index 00000000..593a1df0
--- /dev/null
+++ b/x86lib/libunwind.so.8
Binary files differ