about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-04-18 13:16:54 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-04-18 13:16:54 +0200
commitd529bf3c0c35bd156c6fa7998f937b99950b262e (patch)
treeee0230b7b04967c4794326d3e4a6b14b8ea12558 /src
parent802c5a9d5b8faa2a103be6aed5ad7e25d3604c17 (diff)
downloadbox64-d529bf3c0c35bd156c6fa7998f937b99950b262e.tar.gz
box64-d529bf3c0c35bd156c6fa7998f937b99950b262e.zip
Added wrapped libpng16
Diffstat (limited to 'src')
-rwxr-xr-xsrc/library_list.h2
-rw-r--r--src/wrapped/generated/functions_list.txt13
-rw-r--r--src/wrapped/generated/wrappedpng16types.h31
-rw-r--r--src/wrapped/generated/wrapper.c33
-rw-r--r--src/wrapped/generated/wrapper.h13
-rwxr-xr-xsrc/wrapped/wrappedpng16.c398
-rwxr-xr-xsrc/wrapped/wrappedpng16_private.h101
7 files changed, 590 insertions, 1 deletions
diff --git a/src/library_list.h b/src/library_list.h
index 5dced694..9736f5c2 100755
--- a/src/library_list.h
+++ b/src/library_list.h
@@ -33,7 +33,7 @@ GO("libvorbis.so.0", libvorbis)
 GO("libogg.so.0", libogg)
 GO("libFLAC.so.8", flac)
 //GO("libpng12.so.0", png12)
-//GO("libpng16.so.16", png16)
+GO("libpng16.so.16", png16)
 GO("libXxf86vm.so.1", libxxf86vm)
 GO("libXinerama.so.1", xinerama)
 GO("libXrandr.so.2", libxrandr)
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 874c534e..4d73c063 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -125,6 +125,7 @@
 #() CFui
 #() CFpi
 #() CFpu
+#() CFpp
 #() uFEp
 #() uFiu
 #() uFui
@@ -230,6 +231,7 @@
 #() vFpLL
 #() vFppi
 #() vFppu
+#() vFppd
 #() vFppL
 #() vFppp
 #() iFEiw
@@ -426,6 +428,7 @@
 #() vFpiip
 #() vFpiuL
 #() vFpiup
+#() vFpipi
 #() vFpipp
 #() vFpuuu
 #() vFpudd
@@ -442,6 +445,7 @@
 #() vFppdd
 #() vFpppi
 #() vFpppu
+#() vFpppL
 #() vFpppp
 #() cFpiii
 #() iFEiip
@@ -532,6 +536,7 @@
 #() uFpuuu
 #() uFppiu
 #() uFpppi
+#() uFpppp
 #() UFpipp
 #() dFppiL
 #() lFEpip
@@ -662,6 +667,7 @@
 #() vFppiup
 #() vFppipp
 #() vFppWui
+#() vFppuui
 #() vFpppii
 #() vFpppip
 #() vFppppi
@@ -783,6 +789,7 @@
 #() vFEiiipp
 #() vFEpuipp
 #() vFEpLLpp
+#() vFEppppp
 #() vFiiiiii
 #() vFiiiuil
 #() vFiuippp
@@ -844,6 +851,7 @@
 #() vFppLppi
 #() vFppLppp
 #() vFpppiii
+#() vFpppipu
 #() vFppppii
 #() vFpppppi
 #() vFpppppp
@@ -1066,6 +1074,7 @@
 #() iFppppiipi
 #() iFpppppppp
 #() uFuipppppp
+#() pFEppppppp
 #() pFuiiiuuuu
 #() pFuupupipp
 #() pFpCuwwWWu
@@ -1091,6 +1100,7 @@
 #() vFpipiuiipp
 #() vFpipppiipi
 #() vFppiiipiii
+#() vFppuuiiiii
 #() vFpplpppppi
 #() vFpppppippp
 #() iFEpiiiiipi
@@ -1106,6 +1116,7 @@
 #() iFpppiipiiu
 #() iFppppppppu
 #() iFppppppppp
+#() uFppppppppp
 #() pFEppiiuuLi
 #() pFEppuippuu
 #() pFpiiiiuuuu
@@ -1129,6 +1140,7 @@
 #() vFuffiiffiip
 #() vFuddiiddiip
 #() vFffffffffff
+#() vFppdddddddd
 #() vFpppppppppp
 #() iFEppppppppp
 #() iFiiiiiiiiip
@@ -1136,6 +1148,7 @@
 #() iFppuuiiiiii
 #() iFppuuiiuupi
 #() iFppppiiuuii
+#() uFpppppppppp
 #() pFpCuWCCuuCW
 #() pFpuuuwwwwWW
 #() pFppuiipuuii
diff --git a/src/wrapped/generated/wrappedpng16types.h b/src/wrapped/generated/wrappedpng16types.h
new file mode 100644
index 00000000..27b20f38
--- /dev/null
+++ b/src/wrapped/generated/wrappedpng16types.h
@@ -0,0 +1,31 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v1.3.0.11) *
+ *******************************************************************/
+#ifndef __wrappedpng16TYPES_H_
+#define __wrappedpng16TYPES_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 (*vFpp_t)(void*, void*);
+typedef void (*vFppp_t)(void*, void*, void*);
+typedef void (*vFpppp_t)(void*, void*, void*, void*);
+typedef void* (*pFpppp_t)(void*, void*, void*, void*);
+typedef void (*vFppppp_t)(void*, void*, void*, void*, void*);
+typedef void* (*pFppppppp_t)(void*, void*, void*, void*, void*, void*, void*);
+
+#define SUPER() ADDED_FUNCTIONS() \
+	GO(png_set_read_user_transform_fn, vFpp_t) \
+	GO(png_set_read_fn, vFppp_t) \
+	GO(png_set_error_fn, vFpppp_t) \
+	GO(png_set_write_fn, vFpppp_t) \
+	GO(png_create_read_struct, pFpppp_t) \
+	GO(png_set_progressive_read_fn, vFppppp_t) \
+	GO(png_create_read_struct_2, pFppppppp_t) \
+	GO(png_create_write_struct_2, pFppppppp_t)
+
+#endif // __wrappedpng16TYPES_H_
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 280af39d..dfef1b84 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -159,6 +159,7 @@ typedef int64_t (*IFpu_t)(void*, uint64_t);
 typedef uint8_t (*CFui_t)(uint64_t, int64_t);
 typedef uint8_t (*CFpi_t)(void*, int64_t);
 typedef uint8_t (*CFpu_t)(void*, uint64_t);
+typedef uint8_t (*CFpp_t)(void*, void*);
 typedef uint64_t (*uFEp_t)(x64emu_t*, void*);
 typedef uint64_t (*uFiu_t)(int64_t, uint64_t);
 typedef uint64_t (*uFui_t)(uint64_t, int64_t);
@@ -264,6 +265,7 @@ typedef void (*vFpLi_t)(void*, uintptr_t, int64_t);
 typedef void (*vFpLL_t)(void*, uintptr_t, uintptr_t);
 typedef void (*vFppi_t)(void*, void*, int64_t);
 typedef void (*vFppu_t)(void*, void*, uint64_t);
+typedef void (*vFppd_t)(void*, void*, double);
 typedef void (*vFppL_t)(void*, void*, uintptr_t);
 typedef void (*vFppp_t)(void*, void*, void*);
 typedef int64_t (*iFEiw_t)(x64emu_t*, int64_t, int16_t);
@@ -460,6 +462,7 @@ typedef void (*vFpiii_t)(void*, int64_t, int64_t, int64_t);
 typedef void (*vFpiip_t)(void*, int64_t, int64_t, void*);
 typedef void (*vFpiuL_t)(void*, int64_t, uint64_t, uintptr_t);
 typedef void (*vFpiup_t)(void*, int64_t, uint64_t, void*);
+typedef void (*vFpipi_t)(void*, int64_t, void*, int64_t);
 typedef void (*vFpipp_t)(void*, int64_t, void*, void*);
 typedef void (*vFpuuu_t)(void*, uint64_t, uint64_t, uint64_t);
 typedef void (*vFpudd_t)(void*, uint64_t, double, double);
@@ -476,6 +479,7 @@ typedef void (*vFppup_t)(void*, void*, uint64_t, void*);
 typedef void (*vFppdd_t)(void*, void*, double, double);
 typedef void (*vFpppi_t)(void*, void*, void*, int64_t);
 typedef void (*vFpppu_t)(void*, void*, void*, uint64_t);
+typedef void (*vFpppL_t)(void*, void*, void*, uintptr_t);
 typedef void (*vFpppp_t)(void*, void*, void*, void*);
 typedef int8_t (*cFpiii_t)(void*, int64_t, int64_t, int64_t);
 typedef int64_t (*iFEiip_t)(x64emu_t*, int64_t, int64_t, void*);
@@ -566,6 +570,7 @@ typedef uint64_t (*uFpuip_t)(void*, uint64_t, int64_t, void*);
 typedef uint64_t (*uFpuuu_t)(void*, uint64_t, uint64_t, uint64_t);
 typedef uint64_t (*uFppiu_t)(void*, void*, int64_t, uint64_t);
 typedef uint64_t (*uFpppi_t)(void*, void*, void*, int64_t);
+typedef uint64_t (*uFpppp_t)(void*, void*, void*, void*);
 typedef uint64_t (*UFpipp_t)(void*, int64_t, void*, void*);
 typedef double (*dFppiL_t)(void*, void*, int64_t, uintptr_t);
 typedef intptr_t (*lFEpip_t)(x64emu_t*, void*, int64_t, void*);
@@ -696,6 +701,7 @@ typedef void (*vFppiip_t)(void*, void*, int64_t, int64_t, void*);
 typedef void (*vFppiup_t)(void*, void*, int64_t, uint64_t, void*);
 typedef void (*vFppipp_t)(void*, void*, int64_t, void*, void*);
 typedef void (*vFppWui_t)(void*, void*, uint16_t, uint64_t, int64_t);
+typedef void (*vFppuui_t)(void*, void*, uint64_t, uint64_t, int64_t);
 typedef void (*vFpppii_t)(void*, void*, void*, int64_t, int64_t);
 typedef void (*vFpppip_t)(void*, void*, void*, int64_t, void*);
 typedef void (*vFppppi_t)(void*, void*, void*, void*, int64_t);
@@ -817,6 +823,7 @@ typedef void* (*pFppppp_t)(void*, void*, void*, void*, void*);
 typedef void (*vFEiiipp_t)(x64emu_t*, int64_t, int64_t, int64_t, void*, void*);
 typedef void (*vFEpuipp_t)(x64emu_t*, void*, uint64_t, int64_t, void*, void*);
 typedef void (*vFEpLLpp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, void*, void*);
+typedef void (*vFEppppp_t)(x64emu_t*, void*, void*, void*, void*, void*);
 typedef void (*vFiiiiii_t)(int64_t, int64_t, int64_t, int64_t, int64_t, int64_t);
 typedef void (*vFiiiuil_t)(int64_t, int64_t, int64_t, uint64_t, int64_t, intptr_t);
 typedef void (*vFiuippp_t)(int64_t, uint64_t, int64_t, void*, void*, void*);
@@ -878,6 +885,7 @@ typedef void (*vFpplppp_t)(void*, void*, intptr_t, void*, void*, void*);
 typedef void (*vFppLppi_t)(void*, void*, uintptr_t, void*, void*, int64_t);
 typedef void (*vFppLppp_t)(void*, void*, uintptr_t, void*, void*, void*);
 typedef void (*vFpppiii_t)(void*, void*, void*, int64_t, int64_t, int64_t);
+typedef void (*vFpppipu_t)(void*, void*, void*, int64_t, void*, uint64_t);
 typedef void (*vFppppii_t)(void*, void*, void*, void*, int64_t, int64_t);
 typedef void (*vFpppppi_t)(void*, void*, void*, void*, void*, int64_t);
 typedef void (*vFpppppp_t)(void*, void*, void*, void*, void*, void*);
@@ -1100,6 +1108,7 @@ typedef int64_t (*iFpppipppp_t)(void*, void*, void*, int64_t, void*, void*, void
 typedef int64_t (*iFppppiipi_t)(void*, void*, void*, void*, int64_t, int64_t, void*, int64_t);
 typedef int64_t (*iFpppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*);
 typedef uint64_t (*uFuipppppp_t)(uint64_t, int64_t, void*, void*, void*, void*, void*, void*);
+typedef void* (*pFEppppppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*);
 typedef void* (*pFuiiiuuuu_t)(uint64_t, int64_t, int64_t, int64_t, uint64_t, uint64_t, uint64_t, uint64_t);
 typedef void* (*pFuupupipp_t)(uint64_t, uint64_t, void*, uint64_t, void*, int64_t, void*, void*);
 typedef void* (*pFpCuwwWWu_t)(void*, uint8_t, uint64_t, int16_t, int16_t, uint16_t, uint16_t, uint64_t);
@@ -1125,6 +1134,7 @@ typedef void (*vFddddddddd_t)(double, double, double, double, double, double, do
 typedef void (*vFpipiuiipp_t)(void*, int64_t, void*, int64_t, uint64_t, int64_t, int64_t, void*, void*);
 typedef void (*vFpipppiipi_t)(void*, int64_t, void*, void*, void*, int64_t, int64_t, void*, int64_t);
 typedef void (*vFppiiipiii_t)(void*, void*, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t);
+typedef void (*vFppuuiiiii_t)(void*, void*, uint64_t, uint64_t, int64_t, int64_t, int64_t, int64_t, int64_t);
 typedef void (*vFpplpppppi_t)(void*, void*, intptr_t, void*, void*, void*, void*, void*, int64_t);
 typedef void (*vFpppppippp_t)(void*, void*, void*, void*, void*, int64_t, void*, void*, void*);
 typedef int64_t (*iFEpiiiiipi_t)(x64emu_t*, void*, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t);
@@ -1140,6 +1150,7 @@ typedef int64_t (*iFpppiiuuii_t)(void*, void*, void*, int64_t, int64_t, uint64_t
 typedef int64_t (*iFpppiipiiu_t)(void*, void*, void*, int64_t, int64_t, void*, int64_t, int64_t, uint64_t);
 typedef int64_t (*iFppppppppu_t)(void*, void*, void*, void*, void*, void*, void*, void*, uint64_t);
 typedef int64_t (*iFppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*);
+typedef uint64_t (*uFppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef void* (*pFEppiiuuLi_t)(x64emu_t*, void*, void*, int64_t, int64_t, uint64_t, uint64_t, uintptr_t, int64_t);
 typedef void* (*pFEppuippuu_t)(x64emu_t*, void*, void*, uint64_t, int64_t, void*, void*, uint64_t, uint64_t);
 typedef void* (*pFpiiiiuuuu_t)(void*, int64_t, int64_t, int64_t, int64_t, uint64_t, uint64_t, uint64_t, uint64_t);
@@ -1163,6 +1174,7 @@ typedef void (*vFuupiiupuuf_t)(uint64_t, uint64_t, void*, int64_t, int64_t, uint
 typedef void (*vFuffiiffiip_t)(uint64_t, float, float, int64_t, int64_t, float, float, int64_t, int64_t, void*);
 typedef void (*vFuddiiddiip_t)(uint64_t, double, double, int64_t, int64_t, double, double, int64_t, int64_t, void*);
 typedef void (*vFffffffffff_t)(float, float, float, float, float, float, float, float, float, float);
+typedef void (*vFppdddddddd_t)(void*, void*, double, double, double, double, double, double, double, double);
 typedef void (*vFpppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef int64_t (*iFEppppppppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef int64_t (*iFiiiiiiiiip_t)(int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*);
@@ -1170,6 +1182,7 @@ typedef int64_t (*iFpuupiuiipp_t)(void*, uint64_t, uint64_t, void*, int64_t, uin
 typedef int64_t (*iFppuuiiiiii_t)(void*, void*, uint64_t, uint64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t);
 typedef int64_t (*iFppuuiiuupi_t)(void*, void*, uint64_t, uint64_t, int64_t, int64_t, uint64_t, uint64_t, void*, int64_t);
 typedef int64_t (*iFppppiiuuii_t)(void*, void*, void*, void*, int64_t, int64_t, uint64_t, uint64_t, int64_t, int64_t);
+typedef uint64_t (*uFpppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef void* (*pFpCuWCCuuCW_t)(void*, uint8_t, uint64_t, uint16_t, uint8_t, uint8_t, uint64_t, uint64_t, uint8_t, uint16_t);
 typedef void* (*pFpuuuwwwwWW_t)(void*, uint64_t, uint64_t, uint64_t, int16_t, int16_t, int16_t, int16_t, uint16_t, uint16_t);
 typedef void* (*pFppuiipuuii_t)(void*, void*, uint64_t, int64_t, int64_t, void*, uint64_t, uint64_t, int64_t, int64_t);
@@ -1372,6 +1385,7 @@ void IFpu(x64emu_t *emu, uintptr_t fcn) { IFpu_t fn = (IFpu_t)fcn; R_RAX=(int64_
 void CFui(x64emu_t *emu, uintptr_t fcn) { CFui_t fn = (CFui_t)fcn; R_RAX=(unsigned char)fn((uint64_t)R_RDI, (int64_t)R_RSI); }
 void CFpi(x64emu_t *emu, uintptr_t fcn) { CFpi_t fn = (CFpi_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI, (int64_t)R_RSI); }
 void CFpu(x64emu_t *emu, uintptr_t fcn) { CFpu_t fn = (CFpu_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI, (uint64_t)R_RSI); }
+void CFpp(x64emu_t *emu, uintptr_t fcn) { CFpp_t fn = (CFpp_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI, (void*)R_RSI); }
 void uFEp(x64emu_t *emu, uintptr_t fcn) { uFEp_t fn = (uFEp_t)fcn; R_RAX=(uint64_t)fn(emu, (void*)R_RDI); }
 void uFiu(x64emu_t *emu, uintptr_t fcn) { uFiu_t fn = (uFiu_t)fcn; R_RAX=(uint64_t)fn((int64_t)R_RDI, (uint64_t)R_RSI); }
 void uFui(x64emu_t *emu, uintptr_t fcn) { uFui_t fn = (uFui_t)fcn; R_RAX=(uint64_t)fn((uint64_t)R_RDI, (int64_t)R_RSI); }
@@ -1477,6 +1491,7 @@ void vFpLi(x64emu_t *emu, uintptr_t fcn) { vFpLi_t fn = (vFpLi_t)fcn; fn((void*)
 void vFpLL(x64emu_t *emu, uintptr_t fcn) { vFpLL_t fn = (vFpLL_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); }
 void vFppi(x64emu_t *emu, uintptr_t fcn) { vFppi_t fn = (vFppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX); }
 void vFppu(x64emu_t *emu, uintptr_t fcn) { vFppu_t fn = (vFppu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX); }
+void vFppd(x64emu_t *emu, uintptr_t fcn) { vFppd_t fn = (vFppd_t)fcn; fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0]); }
 void vFppL(x64emu_t *emu, uintptr_t fcn) { vFppL_t fn = (vFppL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); }
 void vFppp(x64emu_t *emu, uintptr_t fcn) { vFppp_t fn = (vFppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); }
 void iFEiw(x64emu_t *emu, uintptr_t fcn) { iFEiw_t fn = (iFEiw_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (int16_t)R_RSI); }
@@ -1673,6 +1688,7 @@ void vFpiii(x64emu_t *emu, uintptr_t fcn) { vFpiii_t fn = (vFpiii_t)fcn; fn((voi
 void vFpiip(x64emu_t *emu, uintptr_t fcn) { vFpiip_t fn = (vFpiip_t)fcn; fn((void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX); }
 void vFpiuL(x64emu_t *emu, uintptr_t fcn) { vFpiuL_t fn = (vFpiuL_t)fcn; fn((void*)R_RDI, (int64_t)R_RSI, (uint64_t)R_RDX, (uintptr_t)R_RCX); }
 void vFpiup(x64emu_t *emu, uintptr_t fcn) { vFpiup_t fn = (vFpiup_t)fcn; fn((void*)R_RDI, (int64_t)R_RSI, (uint64_t)R_RDX, (void*)R_RCX); }
+void vFpipi(x64emu_t *emu, uintptr_t fcn) { vFpipi_t fn = (vFpipi_t)fcn; fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (int64_t)R_RCX); }
 void vFpipp(x64emu_t *emu, uintptr_t fcn) { vFpipp_t fn = (vFpipp_t)fcn; fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void vFpuuu(x64emu_t *emu, uintptr_t fcn) { vFpuuu_t fn = (vFpuuu_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); }
 void vFpudd(x64emu_t *emu, uintptr_t fcn) { vFpudd_t fn = (vFpudd_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0]); }
@@ -1689,6 +1705,7 @@ void vFppup(x64emu_t *emu, uintptr_t fcn) { vFppup_t fn = (vFppup_t)fcn; fn((voi
 void vFppdd(x64emu_t *emu, uintptr_t fcn) { vFppdd_t fn = (vFppdd_t)fcn; fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0]); }
 void vFpppi(x64emu_t *emu, uintptr_t fcn) { vFpppi_t fn = (vFpppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX); }
 void vFpppu(x64emu_t *emu, uintptr_t fcn) { vFpppu_t fn = (vFpppu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint64_t)R_RCX); }
+void vFpppL(x64emu_t *emu, uintptr_t fcn) { vFpppL_t fn = (vFpppL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); }
 void vFpppp(x64emu_t *emu, uintptr_t fcn) { vFpppp_t fn = (vFpppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void cFpiii(x64emu_t *emu, uintptr_t fcn) { cFpiii_t fn = (cFpiii_t)fcn; R_RAX=fn((void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); }
 void iFEiip(x64emu_t *emu, uintptr_t fcn) { iFEiip_t fn = (iFEiip_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (int64_t)R_RSI, (void*)R_RDX); }
@@ -1779,6 +1796,7 @@ void uFpuip(x64emu_t *emu, uintptr_t fcn) { uFpuip_t fn = (uFpuip_t)fcn; R_RAX=(
 void uFpuuu(x64emu_t *emu, uintptr_t fcn) { uFpuuu_t fn = (uFpuuu_t)fcn; R_RAX=(uint64_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); }
 void uFppiu(x64emu_t *emu, uintptr_t fcn) { uFppiu_t fn = (uFppiu_t)fcn; R_RAX=(uint64_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (uint64_t)R_RCX); }
 void uFpppi(x64emu_t *emu, uintptr_t fcn) { uFpppi_t fn = (uFpppi_t)fcn; R_RAX=(uint64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX); }
+void uFpppp(x64emu_t *emu, uintptr_t fcn) { uFpppp_t fn = (uFpppp_t)fcn; R_RAX=(uint64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void UFpipp(x64emu_t *emu, uintptr_t fcn) { UFpipp_t fn = (UFpipp_t)fcn; R_RAX=fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void dFppiL(x64emu_t *emu, uintptr_t fcn) { dFppiL_t fn = (dFppiL_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (uintptr_t)R_RCX); }
 void lFEpip(x64emu_t *emu, uintptr_t fcn) { lFEpip_t fn = (lFEpip_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX); }
@@ -1909,6 +1927,7 @@ void vFppiip(x64emu_t *emu, uintptr_t fcn) { vFppiip_t fn = (vFppiip_t)fcn; fn((
 void vFppiup(x64emu_t *emu, uintptr_t fcn) { vFppiup_t fn = (vFppiup_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (uint64_t)R_RCX, (void*)R_R8); }
 void vFppipp(x64emu_t *emu, uintptr_t fcn) { vFppipp_t fn = (vFppipp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void vFppWui(x64emu_t *emu, uintptr_t fcn) { vFppWui_t fn = (vFppWui_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint16_t)R_RDX, (uint64_t)R_RCX, (int64_t)R_R8); }
+void vFppuui(x64emu_t *emu, uintptr_t fcn) { vFppuui_t fn = (vFppuui_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (int64_t)R_R8); }
 void vFpppii(x64emu_t *emu, uintptr_t fcn) { vFpppii_t fn = (vFpppii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (int64_t)R_R8); }
 void vFpppip(x64emu_t *emu, uintptr_t fcn) { vFpppip_t fn = (vFpppip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (void*)R_R8); }
 void vFppppi(x64emu_t *emu, uintptr_t fcn) { vFppppi_t fn = (vFppppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int64_t)R_R8); }
@@ -2030,6 +2049,7 @@ void pFppppp(x64emu_t *emu, uintptr_t fcn) { pFppppp_t fn = (pFppppp_t)fcn; R_RA
 void vFEiiipp(x64emu_t *emu, uintptr_t fcn) { vFEiiipp_t fn = (vFEiiipp_t)fcn; fn(emu, (int64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void vFEpuipp(x64emu_t *emu, uintptr_t fcn) { vFEpuipp_t fn = (vFEpuipp_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void vFEpLLpp(x64emu_t *emu, uintptr_t fcn) { vFEpLLpp_t fn = (vFEpLLpp_t)fcn; fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
+void vFEppppp(x64emu_t *emu, uintptr_t fcn) { vFEppppp_t fn = (vFEppppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void vFiiiiii(x64emu_t *emu, uintptr_t fcn) { vFiiiiii_t fn = (vFiiiiii_t)fcn; fn((int64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9); }
 void vFiiiuil(x64emu_t *emu, uintptr_t fcn) { vFiiiuil_t fn = (vFiiiuil_t)fcn; fn((int64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (uint64_t)R_RCX, (int64_t)R_R8, (intptr_t)R_R9); }
 void vFiuippp(x64emu_t *emu, uintptr_t fcn) { vFiuippp_t fn = (vFiuippp_t)fcn; fn((int64_t)R_RDI, (uint64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); }
@@ -2091,6 +2111,7 @@ void vFpplppp(x64emu_t *emu, uintptr_t fcn) { vFpplppp_t fn = (vFpplppp_t)fcn; f
 void vFppLppi(x64emu_t *emu, uintptr_t fcn) { vFppLppi_t fn = (vFppLppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int64_t)R_R9); }
 void vFppLppp(x64emu_t *emu, uintptr_t fcn) { vFppLppp_t fn = (vFppLppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); }
 void vFpppiii(x64emu_t *emu, uintptr_t fcn) { vFpppiii_t fn = (vFpppiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9); }
+void vFpppipu(x64emu_t *emu, uintptr_t fcn) { vFpppipu_t fn = (vFpppipu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (void*)R_R8, (uint64_t)R_R9); }
 void vFppppii(x64emu_t *emu, uintptr_t fcn) { vFppppii_t fn = (vFppppii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int64_t)R_R8, (int64_t)R_R9); }
 void vFpppppi(x64emu_t *emu, uintptr_t fcn) { vFpppppi_t fn = (vFpppppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int64_t)R_R9); }
 void vFpppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppp_t fn = (vFpppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); }
@@ -2313,6 +2334,7 @@ void iFpppipppp(x64emu_t *emu, uintptr_t fcn) { iFpppipppp_t fn = (iFpppipppp_t)
 void iFppppiipi(x64emu_t *emu, uintptr_t fcn) { iFppppiipi_t fn = (iFppppiipi_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int64_t)R_R8, (int64_t)R_R9, *(void**)(R_RSP + 8), *(int64_t*)(R_RSP + 16)); }
 void iFpppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppp_t fn = (iFpppppppp_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); }
 void uFuipppppp(x64emu_t *emu, uintptr_t fcn) { uFuipppppp_t fn = (uFuipppppp_t)fcn; R_RAX=(uint64_t)fn((uint64_t)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); }
+void pFEppppppp(x64emu_t *emu, uintptr_t fcn) { pFEppppppp_t fn = (pFEppppppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); }
 void pFuiiiuuuu(x64emu_t *emu, uintptr_t fcn) { pFuiiiuuuu_t fn = (pFuiiiuuuu_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (uint64_t)R_R8, (uint64_t)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16)); }
 void pFuupupipp(x64emu_t *emu, uintptr_t fcn) { pFuupupipp_t fn = (pFuupupipp_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (uint64_t)R_RCX, (void*)R_R8, (int64_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); }
 void pFpCuwwWWu(x64emu_t *emu, uintptr_t fcn) { pFpCuwwWWu_t fn = (pFpCuwwWWu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint64_t)R_RDX, (int16_t)R_RCX, (int16_t)R_R8, (uint16_t)R_R9, *(uint16_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16)); }
@@ -2338,6 +2360,7 @@ void vFddddddddd(x64emu_t *emu, uintptr_t fcn) { vFddddddddd_t fn = (vFddddddddd
 void vFpipiuiipp(x64emu_t *emu, uintptr_t fcn) { vFpipiuiipp_t fn = (vFpipiuiipp_t)fcn; fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (uint64_t)R_R8, (int64_t)R_R9, *(int64_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); }
 void vFpipppiipi(x64emu_t *emu, uintptr_t fcn) { vFpipppiipi_t fn = (vFpipppiipi_t)fcn; fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int64_t)R_R9, *(int64_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int64_t*)(R_RSP + 24)); }
 void vFppiiipiii(x64emu_t *emu, uintptr_t fcn) { vFppiiipiii_t fn = (vFppiiipiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (void*)R_R9, *(int64_t*)(R_RSP + 8), *(int64_t*)(R_RSP + 16), *(int64_t*)(R_RSP + 24)); }
+void vFppuuiiiii(x64emu_t *emu, uintptr_t fcn) { vFppuuiiiii_t fn = (vFppuuiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9, *(int64_t*)(R_RSP + 8), *(int64_t*)(R_RSP + 16), *(int64_t*)(R_RSP + 24)); }
 void vFpplpppppi(x64emu_t *emu, uintptr_t fcn) { vFpplpppppi_t fn = (vFpplpppppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int64_t*)(R_RSP + 24)); }
 void vFpppppippp(x64emu_t *emu, uintptr_t fcn) { vFpppppippp_t fn = (vFpppppippp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int64_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); }
 void iFEpiiiiipi(x64emu_t *emu, uintptr_t fcn) { iFEpiiiiipi_t fn = (iFEpiiiiipi_t)fcn; R_RAX=(int64_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9, *(void**)(R_RSP + 8), *(int64_t*)(R_RSP + 16)); }
@@ -2353,6 +2376,7 @@ void iFpppiiuuii(x64emu_t *emu, uintptr_t fcn) { iFpppiiuuii_t fn = (iFpppiiuuii
 void iFpppiipiiu(x64emu_t *emu, uintptr_t fcn) { iFpppiipiiu_t fn = (iFpppiipiiu_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (void*)R_R9, *(int64_t*)(R_RSP + 8), *(int64_t*)(R_RSP + 16), *(uint64_t*)(R_RSP + 24)); }
 void iFppppppppu(x64emu_t *emu, uintptr_t fcn) { iFppppppppu_t fn = (iFppppppppu_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uint64_t*)(R_RSP + 24)); }
 void iFppppppppp(x64emu_t *emu, uintptr_t fcn) { iFppppppppp_t fn = (iFppppppppp_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); }
+void uFppppppppp(x64emu_t *emu, uintptr_t fcn) { uFppppppppp_t fn = (uFppppppppp_t)fcn; R_RAX=(uint64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); }
 void pFEppiiuuLi(x64emu_t *emu, uintptr_t fcn) { pFEppiiuuLi_t fn = (pFEppiiuuLi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (uint64_t)R_R8, (uint64_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(int64_t*)(R_RSP + 16)); }
 void pFEppuippuu(x64emu_t *emu, uintptr_t fcn) { pFEppuippuu_t fn = (pFEppuippuu_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (int64_t)R_RCX, (void*)R_R8, (void*)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16)); }
 void pFpiiiiuuuu(x64emu_t *emu, uintptr_t fcn) { pFpiiiiuuuu_t fn = (pFpiiiiuuuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (uint64_t)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16), *(uint64_t*)(R_RSP + 24)); }
@@ -2376,6 +2400,7 @@ void vFuupiiupuuf(x64emu_t *emu, uintptr_t fcn) { vFuupiiupuuf_t fn = (vFuupiiup
 void vFuffiiffiip(x64emu_t *emu, uintptr_t fcn) { vFuffiiffiip_t fn = (vFuffiiffiip_t)fcn; fn((uint64_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], (int64_t)R_RSI, (int64_t)R_RDX, emu->xmm[2].f[0], emu->xmm[3].f[0], (int64_t)R_RCX, (int64_t)R_R8, (void*)R_R9); }
 void vFuddiiddiip(x64emu_t *emu, uintptr_t fcn) { vFuddiiddiip_t fn = (vFuddiiddiip_t)fcn; fn((uint64_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], (int64_t)R_RSI, (int64_t)R_RDX, emu->xmm[2].d[0], emu->xmm[3].d[0], (int64_t)R_RCX, (int64_t)R_R8, (void*)R_R9); }
 void vFffffffffff(x64emu_t *emu, uintptr_t fcn) { vFffffffffff_t fn = (vFffffffffff_t)fcn; fn(emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0], emu->xmm[6].f[0], emu->xmm[7].f[0], *(float*)(R_RSP + 8), *(float*)(R_RSP + 16)); }
+void vFppdddddddd(x64emu_t *emu, uintptr_t fcn) { vFppdddddddd_t fn = (vFppdddddddd_t)fcn; fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0], emu->xmm[5].d[0], emu->xmm[6].d[0], emu->xmm[7].d[0]); }
 void vFpppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppppppp_t fn = (vFpppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); }
 void iFEppppppppp(x64emu_t *emu, uintptr_t fcn) { iFEppppppppp_t fn = (iFEppppppppp_t)fcn; R_RAX=(int64_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); }
 void iFiiiiiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiiiiiip_t fn = (iFiiiiiiiiip_t)fcn; R_RAX=(int64_t)fn((int64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9, *(int64_t*)(R_RSP + 8), *(int64_t*)(R_RSP + 16), *(int64_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); }
@@ -2383,6 +2408,7 @@ void iFpuupiuiipp(x64emu_t *emu, uintptr_t fcn) { iFpuupiuiipp_t fn = (iFpuupiui
 void iFppuuiiiiii(x64emu_t *emu, uintptr_t fcn) { iFppuuiiiiii_t fn = (iFppuuiiiiii_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9, *(int64_t*)(R_RSP + 8), *(int64_t*)(R_RSP + 16), *(int64_t*)(R_RSP + 24), *(int64_t*)(R_RSP + 32)); }
 void iFppuuiiuupi(x64emu_t *emu, uintptr_t fcn) { iFppuuiiuupi_t fn = (iFppuuiiuupi_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int64_t*)(R_RSP + 32)); }
 void iFppppiiuuii(x64emu_t *emu, uintptr_t fcn) { iFppppiiuuii_t fn = (iFppppiiuuii_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int64_t)R_R8, (int64_t)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16), *(int64_t*)(R_RSP + 24), *(int64_t*)(R_RSP + 32)); }
+void uFpppppppppp(x64emu_t *emu, uintptr_t fcn) { uFpppppppppp_t fn = (uFpppppppppp_t)fcn; R_RAX=(uint64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); }
 void pFpCuWCCuuCW(x64emu_t *emu, uintptr_t fcn) { pFpCuWCCuuCW_t fn = (pFpCuWCCuuCW_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint64_t)R_RDX, (uint16_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16), *(uint8_t*)(R_RSP + 24), *(uint16_t*)(R_RSP + 32)); }
 void pFpuuuwwwwWW(x64emu_t *emu, uintptr_t fcn) { pFpuuuwwwwWW_t fn = (pFpuuuwwwwWW_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (int16_t)R_R8, (int16_t)R_R9, *(int16_t*)(R_RSP + 8), *(int16_t*)(R_RSP + 16), *(uint16_t*)(R_RSP + 24), *(uint16_t*)(R_RSP + 32)); }
 void pFppuiipuuii(x64emu_t *emu, uintptr_t fcn) { pFppuiipuuii_t fn = (pFppuiipuuii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (void*)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16), *(int64_t*)(R_RSP + 24), *(int64_t*)(R_RSP + 32)); }
@@ -2579,6 +2605,7 @@ int isSimpleWrapper(wrapper_t fun) {
 	if (fun == &CFui) return 1;
 	if (fun == &CFpi) return 1;
 	if (fun == &CFpu) return 1;
+	if (fun == &CFpp) return 1;
 	if (fun == &uFiu) return 1;
 	if (fun == &uFui) return 1;
 	if (fun == &uFuu) return 1;
@@ -2671,6 +2698,7 @@ int isSimpleWrapper(wrapper_t fun) {
 	if (fun == &vFpLL) return 1;
 	if (fun == &vFppi) return 1;
 	if (fun == &vFppu) return 1;
+	if (fun == &vFppd) return 1;
 	if (fun == &vFppL) return 1;
 	if (fun == &vFppp) return 1;
 	if (fun == &iFiwC) return 1;
@@ -2837,6 +2865,7 @@ int isSimpleWrapper(wrapper_t fun) {
 	if (fun == &vFpiip) return 1;
 	if (fun == &vFpiuL) return 1;
 	if (fun == &vFpiup) return 1;
+	if (fun == &vFpipi) return 1;
 	if (fun == &vFpipp) return 1;
 	if (fun == &vFpuuu) return 1;
 	if (fun == &vFpudd) return 1;
@@ -2853,6 +2882,7 @@ int isSimpleWrapper(wrapper_t fun) {
 	if (fun == &vFppdd) return 1;
 	if (fun == &vFpppi) return 1;
 	if (fun == &vFpppu) return 1;
+	if (fun == &vFpppL) return 1;
 	if (fun == &vFpppp) return 1;
 	if (fun == &cFpiii) return 1;
 	if (fun == &iFiiii) return 1;
@@ -2925,6 +2955,7 @@ int isSimpleWrapper(wrapper_t fun) {
 	if (fun == &uFpuuu) return 1;
 	if (fun == &uFppiu) return 1;
 	if (fun == &uFpppi) return 1;
+	if (fun == &uFpppp) return 1;
 	if (fun == &UFpipp) return 1;
 	if (fun == &dFppiL) return 1;
 	if (fun == &lFiipL) return 1;
@@ -3041,6 +3072,7 @@ int isSimpleWrapper(wrapper_t fun) {
 	if (fun == &vFppiup) return 1;
 	if (fun == &vFppipp) return 1;
 	if (fun == &vFppWui) return 1;
+	if (fun == &vFppuui) return 1;
 	if (fun == &vFpppii) return 1;
 	if (fun == &vFpppip) return 1;
 	if (fun == &vFppppi) return 1;
@@ -3193,6 +3225,7 @@ int isSimpleWrapper(wrapper_t fun) {
 	if (fun == &vFppLppi) return 1;
 	if (fun == &vFppLppp) return 1;
 	if (fun == &vFpppiii) return 1;
+	if (fun == &vFpppipu) return 1;
 	if (fun == &vFppppii) return 1;
 	if (fun == &vFpppppi) return 1;
 	if (fun == &vFpppppp) return 1;
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index 59fec967..59394a25 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -155,6 +155,7 @@ void IFpu(x64emu_t *emu, uintptr_t fnc);
 void CFui(x64emu_t *emu, uintptr_t fnc);
 void CFpi(x64emu_t *emu, uintptr_t fnc);
 void CFpu(x64emu_t *emu, uintptr_t fnc);
+void CFpp(x64emu_t *emu, uintptr_t fnc);
 void uFEp(x64emu_t *emu, uintptr_t fnc);
 void uFiu(x64emu_t *emu, uintptr_t fnc);
 void uFui(x64emu_t *emu, uintptr_t fnc);
@@ -260,6 +261,7 @@ void vFpLi(x64emu_t *emu, uintptr_t fnc);
 void vFpLL(x64emu_t *emu, uintptr_t fnc);
 void vFppi(x64emu_t *emu, uintptr_t fnc);
 void vFppu(x64emu_t *emu, uintptr_t fnc);
+void vFppd(x64emu_t *emu, uintptr_t fnc);
 void vFppL(x64emu_t *emu, uintptr_t fnc);
 void vFppp(x64emu_t *emu, uintptr_t fnc);
 void iFEiw(x64emu_t *emu, uintptr_t fnc);
@@ -456,6 +458,7 @@ void vFpiii(x64emu_t *emu, uintptr_t fnc);
 void vFpiip(x64emu_t *emu, uintptr_t fnc);
 void vFpiuL(x64emu_t *emu, uintptr_t fnc);
 void vFpiup(x64emu_t *emu, uintptr_t fnc);
+void vFpipi(x64emu_t *emu, uintptr_t fnc);
 void vFpipp(x64emu_t *emu, uintptr_t fnc);
 void vFpuuu(x64emu_t *emu, uintptr_t fnc);
 void vFpudd(x64emu_t *emu, uintptr_t fnc);
@@ -472,6 +475,7 @@ void vFppup(x64emu_t *emu, uintptr_t fnc);
 void vFppdd(x64emu_t *emu, uintptr_t fnc);
 void vFpppi(x64emu_t *emu, uintptr_t fnc);
 void vFpppu(x64emu_t *emu, uintptr_t fnc);
+void vFpppL(x64emu_t *emu, uintptr_t fnc);
 void vFpppp(x64emu_t *emu, uintptr_t fnc);
 void cFpiii(x64emu_t *emu, uintptr_t fnc);
 void iFEiip(x64emu_t *emu, uintptr_t fnc);
@@ -562,6 +566,7 @@ void uFpuip(x64emu_t *emu, uintptr_t fnc);
 void uFpuuu(x64emu_t *emu, uintptr_t fnc);
 void uFppiu(x64emu_t *emu, uintptr_t fnc);
 void uFpppi(x64emu_t *emu, uintptr_t fnc);
+void uFpppp(x64emu_t *emu, uintptr_t fnc);
 void UFpipp(x64emu_t *emu, uintptr_t fnc);
 void dFppiL(x64emu_t *emu, uintptr_t fnc);
 void lFEpip(x64emu_t *emu, uintptr_t fnc);
@@ -692,6 +697,7 @@ void vFppiip(x64emu_t *emu, uintptr_t fnc);
 void vFppiup(x64emu_t *emu, uintptr_t fnc);
 void vFppipp(x64emu_t *emu, uintptr_t fnc);
 void vFppWui(x64emu_t *emu, uintptr_t fnc);
+void vFppuui(x64emu_t *emu, uintptr_t fnc);
 void vFpppii(x64emu_t *emu, uintptr_t fnc);
 void vFpppip(x64emu_t *emu, uintptr_t fnc);
 void vFppppi(x64emu_t *emu, uintptr_t fnc);
@@ -813,6 +819,7 @@ void pFppppp(x64emu_t *emu, uintptr_t fnc);
 void vFEiiipp(x64emu_t *emu, uintptr_t fnc);
 void vFEpuipp(x64emu_t *emu, uintptr_t fnc);
 void vFEpLLpp(x64emu_t *emu, uintptr_t fnc);
+void vFEppppp(x64emu_t *emu, uintptr_t fnc);
 void vFiiiiii(x64emu_t *emu, uintptr_t fnc);
 void vFiiiuil(x64emu_t *emu, uintptr_t fnc);
 void vFiuippp(x64emu_t *emu, uintptr_t fnc);
@@ -874,6 +881,7 @@ void vFpplppp(x64emu_t *emu, uintptr_t fnc);
 void vFppLppi(x64emu_t *emu, uintptr_t fnc);
 void vFppLppp(x64emu_t *emu, uintptr_t fnc);
 void vFpppiii(x64emu_t *emu, uintptr_t fnc);
+void vFpppipu(x64emu_t *emu, uintptr_t fnc);
 void vFppppii(x64emu_t *emu, uintptr_t fnc);
 void vFpppppi(x64emu_t *emu, uintptr_t fnc);
 void vFpppppp(x64emu_t *emu, uintptr_t fnc);
@@ -1096,6 +1104,7 @@ void iFpppipppp(x64emu_t *emu, uintptr_t fnc);
 void iFppppiipi(x64emu_t *emu, uintptr_t fnc);
 void iFpppppppp(x64emu_t *emu, uintptr_t fnc);
 void uFuipppppp(x64emu_t *emu, uintptr_t fnc);
+void pFEppppppp(x64emu_t *emu, uintptr_t fnc);
 void pFuiiiuuuu(x64emu_t *emu, uintptr_t fnc);
 void pFuupupipp(x64emu_t *emu, uintptr_t fnc);
 void pFpCuwwWWu(x64emu_t *emu, uintptr_t fnc);
@@ -1121,6 +1130,7 @@ void vFddddddddd(x64emu_t *emu, uintptr_t fnc);
 void vFpipiuiipp(x64emu_t *emu, uintptr_t fnc);
 void vFpipppiipi(x64emu_t *emu, uintptr_t fnc);
 void vFppiiipiii(x64emu_t *emu, uintptr_t fnc);
+void vFppuuiiiii(x64emu_t *emu, uintptr_t fnc);
 void vFpplpppppi(x64emu_t *emu, uintptr_t fnc);
 void vFpppppippp(x64emu_t *emu, uintptr_t fnc);
 void iFEpiiiiipi(x64emu_t *emu, uintptr_t fnc);
@@ -1136,6 +1146,7 @@ void iFpppiiuuii(x64emu_t *emu, uintptr_t fnc);
 void iFpppiipiiu(x64emu_t *emu, uintptr_t fnc);
 void iFppppppppu(x64emu_t *emu, uintptr_t fnc);
 void iFppppppppp(x64emu_t *emu, uintptr_t fnc);
+void uFppppppppp(x64emu_t *emu, uintptr_t fnc);
 void pFEppiiuuLi(x64emu_t *emu, uintptr_t fnc);
 void pFEppuippuu(x64emu_t *emu, uintptr_t fnc);
 void pFpiiiiuuuu(x64emu_t *emu, uintptr_t fnc);
@@ -1159,6 +1170,7 @@ void vFuupiiupuuf(x64emu_t *emu, uintptr_t fnc);
 void vFuffiiffiip(x64emu_t *emu, uintptr_t fnc);
 void vFuddiiddiip(x64emu_t *emu, uintptr_t fnc);
 void vFffffffffff(x64emu_t *emu, uintptr_t fnc);
+void vFppdddddddd(x64emu_t *emu, uintptr_t fnc);
 void vFpppppppppp(x64emu_t *emu, uintptr_t fnc);
 void iFEppppppppp(x64emu_t *emu, uintptr_t fnc);
 void iFiiiiiiiiip(x64emu_t *emu, uintptr_t fnc);
@@ -1166,6 +1178,7 @@ void iFpuupiuiipp(x64emu_t *emu, uintptr_t fnc);
 void iFppuuiiiiii(x64emu_t *emu, uintptr_t fnc);
 void iFppuuiiuupi(x64emu_t *emu, uintptr_t fnc);
 void iFppppiiuuii(x64emu_t *emu, uintptr_t fnc);
+void uFpppppppppp(x64emu_t *emu, uintptr_t fnc);
 void pFpCuWCCuuCW(x64emu_t *emu, uintptr_t fnc);
 void pFpuuuwwwwWW(x64emu_t *emu, uintptr_t fnc);
 void pFppuiipuuii(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedpng16.c b/src/wrapped/wrappedpng16.c
new file mode 100755
index 00000000..e3220c5e
--- /dev/null
+++ b/src/wrapped/wrappedpng16.c
@@ -0,0 +1,398 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <dlfcn.h>
+
+#include "wrappedlibs.h"
+
+#include "debug.h"
+#include "wrapper.h"
+#include "bridge.h"
+#include "librarian/library_private.h"
+#include "x64emu.h"
+#include "emu/x64emu_private.h"
+#include "callback.h"
+#include "librarian.h"
+#include "box64context.h"
+#include "emu/x64emu_private.h"
+
+const char* png16Name =
+#ifdef ANDROID
+	"libpng16.so"
+#else
+	"libpng16.so.16"
+#endif
+	;
+#define LIBNAME png16
+
+typedef void  (*vFpp_t)(void*, void*);
+typedef void  (*vFppp_t)(void*, void*, void*);
+typedef void  (*vFpppp_t)(void*, void*, void*, void*);
+typedef void* (*pFpppp_t)(void*, void*, void*, void*);
+typedef void  (*vFppppp_t)(void*, void*, void*, void*, void*);
+typedef void* (*pFppppppp_t)(void*, void*, void*, void*, void*, void*, void*);
+
+#define SUPER() \
+    GO(png_set_read_fn, vFppp_t)                \
+    GO(png_set_error_fn, vFpppp_t)              \
+    GO(png_set_read_user_transform_fn, vFpp_t)  \
+    GO(png_set_write_fn, vFpppp_t)              \
+    GO(png_create_read_struct_2, pFppppppp_t)   \
+    GO(png_create_write_struct_2, pFppppppp_t)  \
+    GO(png_set_progressive_read_fn, vFppppp_t)  \
+    GO(png_create_read_struct, pFpppp_t)        \
+
+
+typedef struct png16_my_s {
+    #define GO(A, B)    B   A;
+    SUPER()
+    #undef GO
+    // functions
+} png16_my_t;
+
+void* getPng16My(library_t* lib)
+{
+    png16_my_t* my = (png16_my_t*)calloc(1, sizeof(png16_my_t));
+    #define GO(A, W) my->A = (W)dlsym(lib->priv.w.lib, #A); if(!my->A) my->A = (W)dlsym(lib->priv.w.lib, "yes" #A);
+    SUPER()
+    #undef GO
+    return my;
+}
+
+void freePng16My(void* lib)
+{
+    //png16_my_t *my = (png16_my_t *)lib;
+}
+#undef SUPER
+
+#define SUPER() \
+GO(0)   \
+GO(1)   \
+GO(2)   \
+GO(3)
+
+// user_write
+#define GO(A)   \
+static uintptr_t my_user_write_fct_##A = 0;   \
+static void my_user_write_##A(void* png_ptr, void* data, int32_t length)    \
+{                                       \
+    RunFunction(my_context, my_user_write_fct_##A, 3, png_ptr, data, length);\
+}
+SUPER()
+#undef GO
+static void* finduser_writeFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_user_write_fct_##A == (uintptr_t)fct) return my_user_write_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_user_write_fct_##A == 0) {my_user_write_fct_##A = (uintptr_t)fct; return my_user_write_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 user_write callback\n");
+    return NULL;
+}
+// user_flush
+#define GO(A)   \
+static uintptr_t my_user_flush_fct_##A = 0;   \
+static void my_user_flush_##A(void* png_ptr)    \
+{                                       \
+    RunFunction(my_context, my_user_flush_fct_##A, 1, png_ptr);\
+}
+SUPER()
+#undef GO
+static void* finduser_flushFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_user_flush_fct_##A == (uintptr_t)fct) return my_user_flush_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_user_flush_fct_##A == 0) {my_user_flush_fct_##A = (uintptr_t)fct; return my_user_flush_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 user_flush callback\n");
+    return NULL;
+}
+// user_read
+#define GO(A)   \
+static uintptr_t my_user_read_fct_##A = 0;   \
+static void my_user_read_##A(void* png_ptr, void* data, int32_t length)    \
+{                                       \
+    RunFunction(my_context, my_user_read_fct_##A, 3, png_ptr, data, length);\
+}
+SUPER()
+#undef GO
+static void* finduser_readFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_user_read_fct_##A == (uintptr_t)fct) return my_user_read_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_user_read_fct_##A == 0) {my_user_read_fct_##A = (uintptr_t)fct; return my_user_read_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 user_read callback\n");
+    return NULL;
+}
+// error
+#define GO(A)   \
+static uintptr_t my_error_fct_##A = 0;   \
+static void my_error_##A(void* a, void* b)    \
+{                                       \
+    RunFunction(my_context, my_error_fct_##A, 2, a, b);\
+}
+SUPER()
+#undef GO
+static void* finderrorFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_error_fct_##A == (uintptr_t)fct) return my_error_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_error_fct_##A == 0) {my_error_fct_##A = (uintptr_t)fct; return my_error_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 error callback\n");
+    return NULL;
+}
+// warning
+#define GO(A)   \
+static uintptr_t my_warning_fct_##A = 0;   \
+static void my_warning_##A(void* a, void* b)    \
+{                                       \
+    RunFunction(my_context, my_warning_fct_##A, 2, a, b);\
+}
+SUPER()
+#undef GO
+static void* findwarningFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_warning_fct_##A == (uintptr_t)fct) return my_warning_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_warning_fct_##A == 0) {my_warning_fct_##A = (uintptr_t)fct; return my_warning_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 warning callback\n");
+    return NULL;
+}
+// malloc
+#define GO(A)   \
+static uintptr_t my_malloc_fct_##A = 0;   \
+static void my_malloc_##A(void* a, unsigned long b)    \
+{                                       \
+    RunFunction(my_context, my_malloc_fct_##A, 2, a, b);\
+}
+SUPER()
+#undef GO
+static void* findmallocFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_malloc_fct_##A == (uintptr_t)fct) return my_malloc_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_malloc_fct_##A == 0) {my_malloc_fct_##A = (uintptr_t)fct; return my_malloc_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 malloc callback\n");
+    return NULL;
+}
+// free
+#define GO(A)   \
+static uintptr_t my_free_fct_##A = 0;   \
+static void my_free_##A(void* a, void* b)    \
+{                                       \
+    RunFunction(my_context, my_free_fct_##A, 2, a, b);\
+}
+SUPER()
+#undef GO
+static void* findfreeFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_free_fct_##A == (uintptr_t)fct) return my_free_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_free_fct_##A == 0) {my_free_fct_##A = (uintptr_t)fct; return my_free_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 free callback\n");
+    return NULL;
+}
+
+// progressive_info
+#define GO(A)   \
+static uintptr_t my_progressive_info_fct_##A = 0;   \
+static void my_progressive_info_##A(void* a, void* b)    \
+{                                       \
+    RunFunction(my_context, my_progressive_info_fct_##A, 2, a, b);\
+}
+SUPER()
+#undef GO
+static void* findprogressive_infoFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_progressive_info_fct_##A == (uintptr_t)fct) return my_progressive_info_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_progressive_info_fct_##A == 0) {my_progressive_info_fct_##A = (uintptr_t)fct; return my_progressive_info_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 progressive_info callback\n");
+    return NULL;
+}
+
+// progressive_end
+#define GO(A)   \
+static uintptr_t my_progressive_end_fct_##A = 0;   \
+static void my_progressive_end_##A(void* a, void* b)    \
+{                                       \
+    RunFunction(my_context, my_progressive_end_fct_##A, 2, a, b);\
+}
+SUPER()
+#undef GO
+static void* findprogressive_endFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_progressive_end_fct_##A == (uintptr_t)fct) return my_progressive_end_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_progressive_end_fct_##A == 0) {my_progressive_end_fct_##A = (uintptr_t)fct; return my_progressive_end_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 progressive_end callback\n");
+    return NULL;
+}
+
+// progressive_row
+#define GO(A)   \
+static uintptr_t my_progressive_row_fct_##A = 0;   \
+static void my_progressive_row_##A(void* a, void* b, uint32_t c, int d)    \
+{                                       \
+    RunFunction(my_context, my_progressive_row_fct_##A, 4, a, b, c, d);\
+}
+SUPER()
+#undef GO
+static void* findprogressive_rowFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_progressive_row_fct_##A == (uintptr_t)fct) return my_progressive_row_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_progressive_row_fct_##A == 0) {my_progressive_row_fct_##A = (uintptr_t)fct; return my_progressive_row_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 progressive_row callback\n");
+    return NULL;
+}
+
+
+// user_transform
+#define GO(A)   \
+static uintptr_t my_user_transform_fct_##A = 0;   \
+static void my_user_transform_##A(void* ptr, void* row, void* data)    \
+{                                       \
+    RunFunction(my_context, my_user_transform_fct_##A, 3, ptr, row, data);\
+}
+SUPER()
+#undef GO
+static void* finduser_transformFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_user_transform_fct_##A == (uintptr_t)fct) return my_user_transform_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_user_transform_fct_##A == 0) {my_user_transform_fct_##A = (uintptr_t)fct; return my_user_transform_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libpng16 user_transform callback\n");
+    return NULL;
+}
+
+#undef SUPER
+
+EXPORT void my16_png_set_read_fn(x64emu_t *emu, void* png_ptr, void* io_ptr, void* read_data_fn)
+{
+    library_t * lib = GetLibInternal(png16Name);
+    png16_my_t *my = (png16_my_t*)lib->priv.w.p2;
+
+    my->png_set_read_fn(png_ptr, io_ptr, finduser_readFct(read_data_fn));
+}
+
+EXPORT void my16_png_set_read_user_transform_fn(x64emu_t *emu, void* png_ptr, void* read_transform_fn)
+{
+    library_t * lib = GetLibInternal(png16Name);
+    png16_my_t *my = (png16_my_t*)lib->priv.w.p2;
+
+    my->png_set_read_user_transform_fn(png_ptr, finduser_transformFct(read_transform_fn));
+}
+
+EXPORT void my16_png_set_error_fn(x64emu_t* emu, void* pngptr, void* errorptr, void* error_fn, void* warning_fn)
+{
+    library_t * lib = GetLibInternal(png16Name);
+    png16_my_t *my = (png16_my_t*)lib->priv.w.p2;
+
+    my->png_set_error_fn(pngptr, errorptr, finderrorFct(error_fn), findwarningFct(warning_fn));
+}
+
+EXPORT void my16_png_set_write_fn(x64emu_t* emu, void* png_ptr, void* io_ptr, void* write_fn, void* flush_fn)
+{
+    library_t * lib = GetLibInternal(png16Name);
+    png16_my_t *my = (png16_my_t*)lib->priv.w.p2;
+
+    my->png_set_write_fn(png_ptr, io_ptr, finduser_writeFct(write_fn), finduser_flushFct(flush_fn));
+}
+
+EXPORT void* my16_png_create_read_struct_2(x64emu_t* emu, void* user_png_ver, void* error_ptr, void* error_fn, void* warn_fn, void* mem_ptr, void* malloc_fn, void* free_fn)
+{
+    library_t * lib = GetLibInternal(png16Name);
+    png16_my_t *my = (png16_my_t*)lib->priv.w.p2;
+
+    return my->png_create_read_struct_2(user_png_ver, error_ptr, finderrorFct(error_fn), findwarningFct(warn_fn), mem_ptr, findmallocFct(malloc_fn), findfreeFct(free_fn));
+}
+
+EXPORT void* my16_png_create_write_struct_2(x64emu_t* emu, void* user_png_ver, void* error_ptr, void* error_fn, void* warn_fn, void* mem_ptr, void* malloc_fn, void* free_fn)
+{
+    library_t * lib = GetLibInternal(png16Name);
+    png16_my_t *my = (png16_my_t*)lib->priv.w.p2;
+
+    return my->png_create_write_struct_2(user_png_ver, error_ptr, finderrorFct(error_fn), findwarningFct(warn_fn), mem_ptr, findmallocFct(malloc_fn), findfreeFct(free_fn));
+}
+
+EXPORT void my16_png_set_progressive_read_fn(x64emu_t* emu, void* png_ptr, void* user_ptr, void* info, void* row, void* end)
+{
+    library_t * lib = GetLibInternal(png16Name);
+    png16_my_t *my = (png16_my_t*)lib->priv.w.p2;
+
+    my->png_set_progressive_read_fn(png_ptr, user_ptr, findprogressive_infoFct(info), findprogressive_rowFct(row), findprogressive_endFct(end));
+}
+
+EXPORT void* my16_png_create_read_struct(x64emu_t* emu, void* png_ptr, void* user_ptr, void* errorfn, void* warnfn)
+{
+    library_t * lib = GetLibInternal(png16Name);
+    png16_my_t *my = (png16_my_t*)lib->priv.w.p2;
+
+    return my->png_create_read_struct(png_ptr, user_ptr, finderrorFct(errorfn), findwarningFct(warnfn));
+}
+
+#define CUSTOM_INIT \
+    lib->priv.w.altprefix=strdup("yes"); \
+    lib->priv.w.p2 = getPng16My(lib); \
+    lib->altmy = strdup("my16_");
+
+#define CUSTOM_FINI \
+    freePng16My(lib->priv.w.p2); \
+    free(lib->priv.w.p2);
+
+#include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedpng16_private.h b/src/wrapped/wrappedpng16_private.h
new file mode 100755
index 00000000..f4868119
--- /dev/null
+++ b/src/wrapped/wrappedpng16_private.h
@@ -0,0 +1,101 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+# error meh!
+#endif
+
+GO(png_convert_from_time_t, vFpu)
+GOM(png_create_read_struct, pFEpppp)
+GO(png_create_info_struct, pFp)
+GO(png_create_write_struct, pFpppp)
+GO(png_destroy_read_struct, vFppp)
+GO(png_destroy_write_struct, vFpp)
+GO(png_error, vFpp)
+GO(png_free, vFpp)
+GO(png_get_bit_depth, CFpp)
+GO(png_get_color_type, CFpp)
+GO(png_get_error_ptr, pFp)
+GO(png_get_iCCP, uFpppppp)
+GO(png_get_IHDR, uFppppppppp)
+GO(png_get_image_height, uFpp)
+GO(png_get_image_width, uFpp)
+GO(png_get_io_ptr, pFp)
+GO(png_get_PLTE, uFpppp)
+GO(png_get_pHYs, uFppppp)
+GO(png_get_rows, pFpp)
+GO(png_get_tRNS, uFppppp)
+GO(png_get_valid, uFppu)
+GO(png_init_io, vFpp)
+GO(png_malloc, pFpu)
+GO(png_read_end, vFpp)
+GO(png_read_image, vFpp)
+GO(png_read_info, vFpp)
+GO(png_read_png, vFppip)
+GO(png_read_update_info, vFpp)
+GO(png_set_bgr, vFp)
+GO(png_set_compression_level, vFpi)
+GO(png_set_crc_action, vFpii)
+GOM(png_set_error_fn, vFEpppp)
+GO(png_set_expand, vFp)
+GO(png_set_expand_gray_1_2_4_to_8, vFp)
+GO(png_set_filler, vFpui)
+GO(png_set_filter, vFpii)
+GO(png_set_gray_to_rgb, vFp)
+GO(png_set_IHDR, vFppuuiiiii)
+GO(png_set_interlace_handling, iFp)
+GO(png_set_longjmp_fn, pFppu)   //TODO: need wrapping?
+GO(png_set_packing, vFp)
+GO(png_set_packswap, vFp)
+GO(png_set_palette_to_rgb, vFp)
+GO(png_set_PLTE, vFpppi)
+GO(png_set_pHYs, vFppuui)
+GOM(png_set_read_fn, vFEppp)
+GOM(png_set_read_user_transform_fn, vFEpp)
+GO(png_set_rows, vFppp)
+GO(png_set_sig_bytes, vFpi)
+GO(png_set_strip_16, vFp)
+GO(png_set_tIME, vFppp)
+GO(png_set_tRNS, vFpppip)
+GO(png_set_tRNS_to_alpha, vFp)
+GOM(png_set_write_fn, vFEpppp)
+GO(png_set_swap, vFp)
+GO(png_sig_cmp, iFpuu)
+GO(png_warning, vFpp)
+GO(png_write_end, vFpp)
+GO(png_write_chunk, vFpppu)
+GO(png_write_info, vFpp)
+GO(png_write_png, vFppip)
+GO(png_write_row, vFpp)
+GO(png_write_rows, vFppu)
+GO(png_get_rowbytes, uFpp)
+GO(png_set_add_alpha, vFpui)
+GO(png_get_sRGB, uFppp)
+GO(png_set_gamma, vFpdd)
+GO(png_get_gAMA, uFppp)
+GO(png_read_row, vFppp)
+GO(png_get_channels, CFpp)
+GO(png_set_iCCP, vFpppipu)
+GO(png_set_sRGB, vFppi)
+GO(png_set_compression_mem_level, vFpi)
+GO(png_set_text, vFpppi)
+GO(png_get_cHRM, uFpppppppppp)
+GO(png_set_compression_strategy, vFpi)
+GO(png_set_gAMA, vFppd)
+GOM(png_create_read_struct_2, pFEppppppp)
+GO(png_get_header_ver, pFp)
+GO(png_set_compression_buffer_size, vFpu)
+GOM(png_create_write_struct_2, pFEppppppp)
+GO(png_set_cHRM, vFppdddddddd)
+GO(png_permit_mng_features, uFpu)
+GO(png_set_keep_unknown_chunks, vFpipi)
+GO(png_set_oFFs, vFppiii)
+GO(png_get_libpng_ver, pFp)
+GO(png_get_text, uFpppp)
+GO(png_set_sBIT, vFppp)
+GO(png_set_bKGD, vFppp)
+GO(png_get_x_offset_pixels, iFpp)
+GO(png_get_y_offset_pixels, iFpp)
+GO(png_write_image, vFpp)
+GO(png_process_data, vFpppL)
+GO(png_progressive_combine_row, vFppp)
+GO(png_get_progressive_ptr, pFp)
+GO(png_get_interlace_type, CFpp)
+GOM(png_set_progressive_read_fn, vFEppppp)