Correct fix for the generator bug

This commit is contained in:
rajdakin 2019-06-23 20:35:42 +02:00
parent 29a33b9836
commit bb075ea82e
5 changed files with 100 additions and 443 deletions

View File

@ -124,7 +124,7 @@ set(WRAPPEDS
"${CMAKE_HOME_DIRECTORY}/src/wrappedldlinux.c"
)
set(WRAPPER "${CMAKE_HOME_DIRECTORY}/src/wrapper.c" "${CMAKE_HOME_DIRECTORY}/src/wrapper.h")
add_custom_command(OUTPUT ${WRAPPER} COMMAND "${CMAKE_HOME_DIRECTORY}/rebuild_wrappers.py" "${CMAKE_HOME_DIRECTORY}" "PANDORA" ${PANDORA} "HAVE_LD80BITS" ${LD80BITS} "NOALIGN" ${NOALIGN} "HAVE_TRACE" ${HAVE_TRACE} "USE_FLOAT" ${USE_FLOAT} MAIN_DEPENDENCY "${CMAKE_HOME_DIRECTORY}/rebuild_wrappers.py" DEPENDS ${WRAPPEDS} BYPRODUCTS ${WRAPPER})
add_custom_command(OUTPUT ${WRAPPER} COMMAND "${CMAKE_HOME_DIRECTORY}/rebuild_wrappers.py" "${CMAKE_HOME_DIRECTORY}" "PANDORA" "HAVE_LD80BITS" "NOALIGN" "HAVE_TRACE" "USE_FLOAT" MAIN_DEPENDENCY "${CMAKE_HOME_DIRECTORY}/rebuild_wrappers.py" DEPENDS ${WRAPPEDS} BYPRODUCTS ${WRAPPER})
if(USE_FLOAT)
set(BOX86 box86f)

View File

@ -15,6 +15,27 @@ def splitchar(s):
ret.append(values.index(c))
return ret
def value(define):
return define[9:-1] if define.startswith("!") else define[8:-1]
def splitdef(dnf, defines):
cunjs = dnf.split(" || ")
clauses = [c.split(" && ") for c in cunjs]
ret = [len(cunjs)]
for cunj in clauses:
for c in cunj:
ret.append(len(c))
for cunj in clauses:
for c in cunj:
ret.append(defines.index(value(c)) * 2 + (1 if c.startswith("!") else 0))
ret.append(0)
return ret
def invert(define):
return define[1:] if define.startswith("!") else ("!" + define)
def main(root, defines):
# Initialize variables: gbl for all values, vals for file-per-file values, redirects for redirections
gbl = {}
@ -43,17 +64,15 @@ def main(root, defines):
if dependants != []:
dependants.pop()
elif preproc_cmd.startswith("ifdef"):
defines[preproc_cmd[5:].strip()]
if preproc_cmd[5:].strip() not in defines:
raise KeyError(preproc_cmd[5:].strip())
dependants.append("defined(" + preproc_cmd[5:].strip() + ")")
elif preproc_cmd.startswith("ifndef"):
defines[preproc_cmd[5:].strip()]
if preproc_cmd[5:].strip() not in defines:
raise KeyError(preproc_cmd[5:].strip())
dependants.append("!defined(" + preproc_cmd[6:].strip() + ")")
elif preproc_cmd.startswith("else"):
before = dependants.pop()
if before.startswith("!"):
dependants.append("defined(" + before[9:-1].strip() + ")")
else:
dependants.append("!defined(" + before[8:-1].strip() + ")")
dependants[-1] = invert(dependants[-1])
else:
raise NotImplementedError("Unknown preprocessor directive: {0} ({1}:{2})".format(
preproc_cmd.split(" ")[0], filename, line[:-1]
@ -93,25 +112,23 @@ def main(root, defines):
# Sort the file local values and add it to the dictionary
for k in locval:
locval[k].sort(key=lambda v: splitchar(v))
locval[k].sort(key=splitchar)
vals[filename] = locval
gbl_vals = {}
for k in gbl:
ks = k.split(" && ")
for v in gbl[k]:
if k == "()":
gbl_vals[v] = [k]
if k == "":
gbl_vals[v] = []
continue
if gbl_vals.has_key(v):
if gbl_vals[v] == []:
continue
for other_key in gbl_vals[v]:
if "!" + other_key == k:
gbl_vals[v].append(k)
break
if other_key == "()":
break
other_key_vals = other_key.split(" && ")
for other_key_val in other_key_vals:
if other_key_val not in k:
if other_key_val not in ks:
break
else:
break
@ -119,21 +136,39 @@ def main(root, defines):
gbl_vals[v].append(k)
else:
gbl_vals[v] = [k]
for v in gbl_vals:
for k in gbl_vals[v]:
if " && ".join([invert(v2) for v2 in k.split(" && ")]) in gbl_vals[v]:
gbl_vals[v] = []
break
gbl = {}
gbl_idxs = []
for k in gbl_vals:
key = "(" + (") || (".join(gbl_vals[k])) + ")"
if len(gbl_vals[k]) == 1:
key = gbl_vals[k][0]
else:
key = "(" + (") || (".join(gbl_vals[k])) + ")"
gbl[key] = gbl.get(key, []) + [k]
if (key not in gbl_idxs) and (key != "()"):
gbl_idxs.append(key)
gbl_idxs.sort(key=lambda v: splitdef(v, defines))
redirects_vals = {}
for k in redirects:
ks = k.split(" && ")
for v in redirects[k]:
if redirects_vals.has_key(v):
for other_key in redirects_vals[v]:
if k == "":
redirects_vals[(v, redirects[k][v])] = []
continue
if redirects_vals.has_key((v, redirects[k][v])):
if redirects_vals[(v, redirects[k][v])] == []:
continue
for other_key in redirects_vals[(v, redirects[k][v])]:
if other_key == "()":
break
other_key_vals = other_key.split(" && ")
for other_key_val in other_key_vals:
if other_key_val not in k:
if other_key_val not in ks:
break
else:
break
@ -142,11 +177,15 @@ def main(root, defines):
else:
redirects_vals[(v, redirects[k][v])] = [k]
redirects = {}
redirects_idxs = []
for k, v in redirects_vals:
key = "(" + (") || (".join(redirects_vals[(k, v)])) + ")"
val = redirects.get(key, {})
val[k] = v
redirects[key] = val
if (key not in redirects_idxs) and (key != "()"):
redirects_idxs.append(key)
redirects_idxs.sort(key=lambda v: splitdef(v, defines))
# Sort the table
for k in gbl:
@ -230,7 +269,7 @@ typedef void (*wrapper_t)(x86emu_t* emu, uintptr_t fnc);
file.write(files_headers["wrapper.h"])
for v in gbl["()"]:
file.write("void " + ''.join(v) + "(x86emu_t *emu, uintptr_t fnc);\n")
for k in gbl:
for k in gbl_idxs:
if k != "()":
file.write("\n#if " + k + "\n")
for v in gbl[k]:
@ -239,7 +278,7 @@ typedef void (*wrapper_t)(x86emu_t* emu, uintptr_t fnc);
file.write("\n")
for v in redirects["()"]:
file.write("void " + ''.join(v) + "(x86emu_t *emu, uintptr_t fnc);\n")
for k in redirects:
for k in redirects_idxs:
if k != "()":
file.write("\n#if " + k + "\n")
for v in redirects[k]:
@ -260,7 +299,7 @@ typedef void (*wrapper_t)(x86emu_t* emu, uintptr_t fnc);
file.write("typedef " + types[values.index(v[0])] + " (*" + ''.join(v) + "_t)"
+ "(" + ', '.join(types[values.index(t)] for t in v[2:]) + ");\n")
for k in gbl:
for k in gbl_idxs:
if k != "()":
file.write("\n#if " + k + "\n")
for v in gbl[k]:
@ -273,6 +312,7 @@ typedef void (*wrapper_t)(x86emu_t* emu, uintptr_t fnc);
+ "(" + ', '.join(types[values.index(t)] for t in v[2:]) + ");\n")
file.write("#endif\n")
file.write("\n")
# Next part: function definitions
# Helper functions to write the function definitions
@ -280,11 +320,11 @@ typedef void (*wrapper_t)(x86emu_t* emu, uintptr_t fnc);
if len(args) == 0:
return ""
if d % 4 != 0:
raise ValueError("{d} is not a multiple of 4. Did you try passing a V and something else?")
raise ValueError("{d} is not a multiple of 4. Did you try passing a V and something else?".format(d=d))
if args[0] == "0":
return "(void*)(R_ESP + {p}), ".format(p=d) + function_args(args[1:], d + 4)
elif args[0] == 1:
elif args[0] == "1":
return "1, " + function_args(args[1:], d)
arg = [
@ -341,7 +381,7 @@ typedef void (*wrapper_t)(x86emu_t* emu, uintptr_t fnc);
for v in gbl["()"]:
function_writer(file, ''.join(v), ''.join(v) + "_t", v[0], v[2:])
for k in gbl:
for k in gbl_idxs:
if k != "()":
file.write("\n#if " + k + "\n")
for v in gbl[k]:
@ -350,7 +390,7 @@ typedef void (*wrapper_t)(x86emu_t* emu, uintptr_t fnc);
file.write("\n")
for v in redirects["()"]:
function_writer(file, v, redirects["()"][v] + "_t", v[0], v[2:])
for k in redirects:
for k in redirects_idxs:
if k != "()":
file.write("\n#if " + k + "\n")
for v in redirects[k]:
@ -362,9 +402,6 @@ typedef void (*wrapper_t)(x86emu_t* emu, uintptr_t fnc);
return 0
if __name__ == '__main__':
defines = {}
for i in range(2, len(sys.argv), 2):
defines[sys.argv[i]] = sys.argv[i + 1] == "TRUE"
if main(sys.argv[1], defines) != 0:
if main(sys.argv[1], sys.argv[2:]) != 0:
exit(2)
exit(0)

View File

@ -755,6 +755,7 @@ typedef void (*vFppiiipiii_t)(void*, void*, int32_t, int32_t, int32_t, void*, in
typedef void (*vFppuuiiiii_t)(void*, void*, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t);
typedef void (*vFpppppippp_t)(void*, void*, void*, void*, void*, int32_t, void*, void*, void*);
typedef void (*vFppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*);
typedef int32_t (*iFEpppipppp_t)(x86emu_t*, void*, void*, void*, int32_t, void*, void*, void*, void*);
typedef int32_t (*iFiiiiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*);
typedef int32_t (*iFiiiipiiip_t)(int32_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t, int32_t, void*);
typedef int32_t (*iFdddpppppp_t)(double, double, double, void*, void*, void*, void*, void*, void*);
@ -829,23 +830,13 @@ typedef void (*vFfffffffffffffff_t)(float, float, float, float, float, float, fl
typedef uint32_t (*uFpppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
typedef void (*vFppuiiiiipuiiiiiiii_t)(void*, void*, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t);
#if (!defined(HAVE_LD80BITS))
typedef double (*LFL_t)(double);
typedef double (*LFLL_t)(double, double);
typedef double (*LFLp_t)(double, void*);
#endif
#if (defined(NOALIGN)) || (!defined(NOALIGN))
typedef int32_t (*iFEpppipppp_t)(x86emu_t*, void*, void*, void*, int32_t, void*, void*, void*, void*);
#endif
#if (defined(NOALIGN))
#if defined(NOALIGN)
typedef int64_t (*IFpi_t)(void*, int32_t);
typedef double (*dFpi_t)(void*, int32_t);
typedef int32_t (*iFppiiiip_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, void*);
#endif
#if (!defined(NOALIGN))
#if !defined(NOALIGN)
typedef int64_t (*IFEp_t)(x86emu_t*, void*);
typedef double (*dFEp_t)(x86emu_t*, void*);
typedef int32_t (*iFEpI_t)(x86emu_t*, void*, int64_t);
@ -859,11 +850,18 @@ typedef int32_t (*iFEpppi_t)(x86emu_t*, void*, void*, void*, int32_t);
typedef int32_t (*iFEppiiiip_t)(x86emu_t*, void*, void*, int32_t, int32_t, int32_t, int32_t, void*);
#endif
#if (defined(HAVE_LD80BITS))
#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 (*LFL_t)(double);
typedef double (*LFLL_t)(double, double);
typedef double (*LFLp_t)(double, void*);
#endif
void iF(x86emu_t *emu, uintptr_t fcn) { iF_t fn = (iF_t)fcn; R_EAX=fn(); }
void vFE(x86emu_t *emu, uintptr_t fcn) { vFE_t fn = (vFE_t)fcn; fn(emu); }
void vFv(x86emu_t *emu, uintptr_t fcn) { vFv_t fn = (vFv_t)fcn; fn(); }
@ -1596,6 +1594,7 @@ void vFppiiipiii(x86emu_t *emu, uintptr_t fcn) { vFppiiipiii_t fn = (vFppiiipiii
void vFppuuiiiii(x86emu_t *emu, uintptr_t fcn) { vFppuuiiiii_t fn = (vFppuuiiiii_t)fcn; fn(*(void**)(R_ESP + 4), *(void**)(R_ESP + 8), *(uint32_t*)(R_ESP + 12), *(uint32_t*)(R_ESP + 16), *(int32_t*)(R_ESP + 20), *(int32_t*)(R_ESP + 24), *(int32_t*)(R_ESP + 28), *(int32_t*)(R_ESP + 32), *(int32_t*)(R_ESP + 36)); }
void vFpppppippp(x86emu_t *emu, uintptr_t fcn) { vFpppppippp_t fn = (vFpppppippp_t)fcn; fn(*(void**)(R_ESP + 4), *(void**)(R_ESP + 8), *(void**)(R_ESP + 12), *(void**)(R_ESP + 16), *(void**)(R_ESP + 20), *(int32_t*)(R_ESP + 24), *(void**)(R_ESP + 28), *(void**)(R_ESP + 32), *(void**)(R_ESP + 36)); }
void vFppppppppp(x86emu_t *emu, uintptr_t fcn) { vFppppppppp_t fn = (vFppppppppp_t)fcn; fn(*(void**)(R_ESP + 4), *(void**)(R_ESP + 8), *(void**)(R_ESP + 12), *(void**)(R_ESP + 16), *(void**)(R_ESP + 20), *(void**)(R_ESP + 24), *(void**)(R_ESP + 28), *(void**)(R_ESP + 32), *(void**)(R_ESP + 36)); }
void iFEpppipppp(x86emu_t *emu, uintptr_t fcn) { iFEpppipppp_t fn = (iFEpppipppp_t)fcn; R_EAX=fn(emu, *(void**)(R_ESP + 4), *(void**)(R_ESP + 8), *(void**)(R_ESP + 12), *(int32_t*)(R_ESP + 16), *(void**)(R_ESP + 20), *(void**)(R_ESP + 24), *(void**)(R_ESP + 28), *(void**)(R_ESP + 32)); }
void iFiiiiiiiip(x86emu_t *emu, uintptr_t fcn) { iFiiiiiiiip_t fn = (iFiiiiiiiip_t)fcn; R_EAX=fn(*(int32_t*)(R_ESP + 4), *(int32_t*)(R_ESP + 8), *(int32_t*)(R_ESP + 12), *(int32_t*)(R_ESP + 16), *(int32_t*)(R_ESP + 20), *(int32_t*)(R_ESP + 24), *(int32_t*)(R_ESP + 28), *(int32_t*)(R_ESP + 32), *(void**)(R_ESP + 36)); }
void iFiiiipiiip(x86emu_t *emu, uintptr_t fcn) { iFiiiipiiip_t fn = (iFiiiipiiip_t)fcn; R_EAX=fn(*(int32_t*)(R_ESP + 4), *(int32_t*)(R_ESP + 8), *(int32_t*)(R_ESP + 12), *(int32_t*)(R_ESP + 16), *(void**)(R_ESP + 20), *(int32_t*)(R_ESP + 24), *(int32_t*)(R_ESP + 28), *(int32_t*)(R_ESP + 32), *(void**)(R_ESP + 36)); }
void iFdddpppppp(x86emu_t *emu, uintptr_t fcn) { iFdddpppppp_t fn = (iFdddpppppp_t)fcn; R_EAX=fn(*(double*)(R_ESP + 4), *(double*)(R_ESP + 12), *(double*)(R_ESP + 20), *(void**)(R_ESP + 28), *(void**)(R_ESP + 32), *(void**)(R_ESP + 36), *(void**)(R_ESP + 40), *(void**)(R_ESP + 44), *(void**)(R_ESP + 48)); }
@ -1670,23 +1669,13 @@ void vFfffffffffffffff(x86emu_t *emu, uintptr_t fcn) { vFfffffffffffffff_t fn =
void uFpppppppppppppppp(x86emu_t *emu, uintptr_t fcn) { uFpppppppppppppppp_t fn = (uFpppppppppppppppp_t)fcn; R_EAX=(uint32_t)fn(*(void**)(R_ESP + 4), *(void**)(R_ESP + 8), *(void**)(R_ESP + 12), *(void**)(R_ESP + 16), *(void**)(R_ESP + 20), *(void**)(R_ESP + 24), *(void**)(R_ESP + 28), *(void**)(R_ESP + 32), *(void**)(R_ESP + 36), *(void**)(R_ESP + 40), *(void**)(R_ESP + 44), *(void**)(R_ESP + 48), *(void**)(R_ESP + 52), *(void**)(R_ESP + 56), *(void**)(R_ESP + 60), *(void**)(R_ESP + 64)); }
void vFppuiiiiipuiiiiiiii(x86emu_t *emu, uintptr_t fcn) { vFppuiiiiipuiiiiiiii_t fn = (vFppuiiiiipuiiiiiiii_t)fcn; fn(*(void**)(R_ESP + 4), *(void**)(R_ESP + 8), *(uint32_t*)(R_ESP + 12), *(int32_t*)(R_ESP + 16), *(int32_t*)(R_ESP + 20), *(int32_t*)(R_ESP + 24), *(int32_t*)(R_ESP + 28), *(int32_t*)(R_ESP + 32), *(void**)(R_ESP + 36), *(uint32_t*)(R_ESP + 40), *(int32_t*)(R_ESP + 44), *(int32_t*)(R_ESP + 48), *(int32_t*)(R_ESP + 52), *(int32_t*)(R_ESP + 56), *(int32_t*)(R_ESP + 60), *(int32_t*)(R_ESP + 64), *(int32_t*)(R_ESP + 68), *(int32_t*)(R_ESP + 72)); }
#if (!defined(HAVE_LD80BITS))
void LFL(x86emu_t *emu, uintptr_t fcn) { LFL_t fn = (LFL_t)fcn; double db=fn(FromLD((void*)(R_ESP + 4))); fpu_do_push(emu); ST0val = db; }
void LFLL(x86emu_t *emu, uintptr_t fcn) { LFLL_t fn = (LFLL_t)fcn; double db=fn(FromLD((void*)(R_ESP + 4)), FromLD((void*)(R_ESP + 16))); fpu_do_push(emu); ST0val = db; }
void LFLp(x86emu_t *emu, uintptr_t fcn) { LFLp_t fn = (LFLp_t)fcn; double db=fn(FromLD((void*)(R_ESP + 4)), *(void**)(R_ESP + 16)); fpu_do_push(emu); ST0val = db; }
#endif
#if (defined(NOALIGN)) || (!defined(NOALIGN))
void iFEpppipppp(x86emu_t *emu, uintptr_t fcn) { iFEpppipppp_t fn = (iFEpppipppp_t)fcn; R_EAX=fn(emu, *(void**)(R_ESP + 4), *(void**)(R_ESP + 8), *(void**)(R_ESP + 12), *(int32_t*)(R_ESP + 16), *(void**)(R_ESP + 20), *(void**)(R_ESP + 24), *(void**)(R_ESP + 28), *(void**)(R_ESP + 32)); }
#endif
#if (defined(NOALIGN))
#if defined(NOALIGN)
void IFpi(x86emu_t *emu, uintptr_t fcn) { IFpi_t fn = (IFpi_t)fcn; ui64_t r; r.i=fn(*(void**)(R_ESP + 4), *(int32_t*)(R_ESP + 8)); R_EAX=r.d[0]; R_EDX=r.d[1]; }
void dFpi(x86emu_t *emu, uintptr_t fcn) { dFpi_t fn = (dFpi_t)fcn; double db=fn(*(void**)(R_ESP + 4), *(int32_t*)(R_ESP + 8)); fpu_do_push(emu); ST0val = db; }
void iFppiiiip(x86emu_t *emu, uintptr_t fcn) { iFppiiiip_t fn = (iFppiiiip_t)fcn; R_EAX=fn(*(void**)(R_ESP + 4), *(void**)(R_ESP + 8), *(int32_t*)(R_ESP + 12), *(int32_t*)(R_ESP + 16), *(int32_t*)(R_ESP + 20), *(int32_t*)(R_ESP + 24), *(void**)(R_ESP + 28)); }
#endif
#if (!defined(NOALIGN))
#if !defined(NOALIGN)
void IFEp(x86emu_t *emu, uintptr_t fcn) { IFEp_t fn = (IFEp_t)fcn; ui64_t r; r.i=fn(emu, *(void**)(R_ESP + 4)); R_EAX=r.d[0]; R_EDX=r.d[1]; }
void dFEp(x86emu_t *emu, uintptr_t fcn) { dFEp_t fn = (dFEp_t)fcn; double db=fn(emu, *(void**)(R_ESP + 4)); fpu_do_push(emu); ST0val = db; }
void iFEpI(x86emu_t *emu, uintptr_t fcn) { iFEpI_t fn = (iFEpI_t)fcn; R_EAX=fn(emu, *(void**)(R_ESP + 4), *(int64_t*)(R_ESP + 8)); }
@ -1700,12 +1689,18 @@ void iFEpppi(x86emu_t *emu, uintptr_t fcn) { iFEpppi_t fn = (iFEpppi_t)fcn; R_EA
void iFEppiiiip(x86emu_t *emu, uintptr_t fcn) { iFEppiiiip_t fn = (iFEppiiiip_t)fcn; R_EAX=fn(emu, *(void**)(R_ESP + 4), *(void**)(R_ESP + 8), *(int32_t*)(R_ESP + 12), *(int32_t*)(R_ESP + 16), *(int32_t*)(R_ESP + 20), *(int32_t*)(R_ESP + 24), *(void**)(R_ESP + 28)); }
#endif
#if (defined(HAVE_LD80BITS))
#if defined(HAVE_LD80BITS)
void DFD(x86emu_t *emu, uintptr_t fcn) { DFD_t fn = (DFD_t)fcn; long double ld=fn(*(long double*)(R_ESP + 4)); fpu_do_push(emu); ST0val = ld; }
void DFDD(x86emu_t *emu, uintptr_t fcn) { DFDD_t fn = (DFDD_t)fcn; long double ld=fn(*(long double*)(R_ESP + 4), *(long double*)(R_ESP + 16)); fpu_do_push(emu); ST0val = ld; }
void DFDp(x86emu_t *emu, uintptr_t fcn) { DFDp_t fn = (DFDp_t)fcn; long double ld=fn(*(long double*)(R_ESP + 4), *(void**)(R_ESP + 16)); fpu_do_push(emu); ST0val = ld; }
#endif
#if !defined(HAVE_LD80BITS)
void LFL(x86emu_t *emu, uintptr_t fcn) { LFL_t fn = (LFL_t)fcn; double db=fn(FromLD((void*)(R_ESP + 4))); fpu_do_push(emu); ST0val = db; }
void LFLL(x86emu_t *emu, uintptr_t fcn) { LFLL_t fn = (LFLL_t)fcn; double db=fn(FromLD((void*)(R_ESP + 4)), FromLD((void*)(R_ESP + 16))); fpu_do_push(emu); ST0val = db; }
void LFLp(x86emu_t *emu, uintptr_t fcn) { LFLp_t fn = (LFLp_t)fcn; double db=fn(FromLD((void*)(R_ESP + 4)), *(void**)(R_ESP + 16)); fpu_do_push(emu); ST0val = db; }
#endif
void iFEpvvpp(x86emu_t *emu, uintptr_t fcn) { iFEppp_t fn = (iFEppp_t)fcn; R_EAX=fn(emu, *(void**)(R_ESP + 4), *(void**)(R_ESP + 16), *(void**)(R_ESP + 20)); }
void iFEvpVV(x86emu_t *emu, uintptr_t fcn) { iFEpVV_t fn = (iFEpVV_t)fcn; R_EAX=fn(emu, *(void**)(R_ESP + 8), (void*)(R_ESP + 12), (void*)(R_ESP + 12)); }
void iFEv(x86emu_t *emu, uintptr_t fcn) { iFE_t fn = (iFE_t)fcn; R_EAX=fn(emu); }

View File

@ -754,6 +754,7 @@ void vFppiiipiii(x86emu_t *emu, uintptr_t fnc);
void vFppuuiiiii(x86emu_t *emu, uintptr_t fnc);
void vFpppppippp(x86emu_t *emu, uintptr_t fnc);
void vFppppppppp(x86emu_t *emu, uintptr_t fnc);
void iFEpppipppp(x86emu_t *emu, uintptr_t fnc);
void iFiiiiiiiip(x86emu_t *emu, uintptr_t fnc);
void iFiiiipiiip(x86emu_t *emu, uintptr_t fnc);
void iFdddpppppp(x86emu_t *emu, uintptr_t fnc);
@ -828,23 +829,13 @@ void vFfffffffffffffff(x86emu_t *emu, uintptr_t fnc);
void uFpppppppppppppppp(x86emu_t *emu, uintptr_t fnc);
void vFppuiiiiipuiiiiiiii(x86emu_t *emu, uintptr_t fnc);
#if (!defined(HAVE_LD80BITS))
void LFL(x86emu_t *emu, uintptr_t fnc);
void LFLL(x86emu_t *emu, uintptr_t fnc);
void LFLp(x86emu_t *emu, uintptr_t fnc);
#endif
#if (defined(NOALIGN)) || (!defined(NOALIGN))
void iFEpppipppp(x86emu_t *emu, uintptr_t fnc);
#endif
#if (defined(NOALIGN))
#if defined(NOALIGN)
void IFpi(x86emu_t *emu, uintptr_t fnc);
void dFpi(x86emu_t *emu, uintptr_t fnc);
void iFppiiiip(x86emu_t *emu, uintptr_t fnc);
#endif
#if (!defined(NOALIGN))
#if !defined(NOALIGN)
void IFEp(x86emu_t *emu, uintptr_t fnc);
void dFEp(x86emu_t *emu, uintptr_t fnc);
void iFEpI(x86emu_t *emu, uintptr_t fnc);
@ -858,12 +849,18 @@ void iFEpppi(x86emu_t *emu, uintptr_t fnc);
void iFEppiiiip(x86emu_t *emu, uintptr_t fnc);
#endif
#if (defined(HAVE_LD80BITS))
#if defined(HAVE_LD80BITS)
void DFD(x86emu_t *emu, uintptr_t fnc);
void DFDD(x86emu_t *emu, uintptr_t fnc);
void DFDp(x86emu_t *emu, uintptr_t fnc);
#endif
#if !defined(HAVE_LD80BITS)
void LFL(x86emu_t *emu, uintptr_t fnc);
void LFLL(x86emu_t *emu, uintptr_t fnc);
void LFLp(x86emu_t *emu, uintptr_t fnc);
#endif
void iFEpvvpp(x86emu_t *emu, uintptr_t fnc);
void iFEvpVV(x86emu_t *emu, uintptr_t fnc);
void iFEv(x86emu_t *emu, uintptr_t fnc);

View File

@ -1,372 +0,0 @@
#if defined(GO01) && defined(GO02) && defined(GO03) && defined(GO04) && defined(GO05) && defined(GO06) && defined(GO07) && defined(GO08) && defined(GO09) && defined(GO10) && defined(GO11) && defined(GO12) && defined(GO13) && defined(GO14) && defined(GO15)
GO01(E)
GO01(v)
GO01(i)
GO01(u)
GO01(p)
GO01(f)
GO01(d)
GO02(E,i)
GO02(E,p)
GO02(W,W)
GO02(i,i)
GO02(i,u)
GO02(i,p)
GO02(i,f)
GO02(i,d)
GO02(u,i)
GO02(u,u)
GO02(u,p)
GO02(u,f)
GO02(u,d)
GO02(p,i)
GO02(p,u)
GO02(p,p)
GO02(f,i)
GO02(f,f)
GO02(f,p)
GO02(d,d)
GO02(d,p)
GO02(p,W)
GO02(p,U)
GO03(E,i,p)
GO03(E,p,i)
GO03(E,p,p)
GO03(i,i,i)
GO03(i,i,p)
GO03(i,u,i)
GO03(i,u,u)
GO03(i,u,p)
GO03(i,p,i)
GO03(i,p,u)
GO03(i,p,p)
GO03(i,f,f)
GO03(i,d,d)
GO03(u,i,i)
GO03(u,i,u)
GO03(u,i,p)
GO03(u,i,f)
GO03(u,i,d)
GO03(u,u,i)
GO03(u,u,u)
GO03(u,u,p)
GO03(u,u,f)
GO03(u,u,d)
GO03(u,p,i)
GO03(u,p,p)
GO03(u,f,f)
GO03(u,d,d)
GO03(I,p,i)
GO03(U,p,i)
GO03(p,i,i)
GO03(p,i,u)
GO03(p,i,p)
GO03(p,u,c)
GO03(p,u,u)
GO03(p,u,p)
GO03(p,p,i)
GO03(p,p,u)
GO03(p,p,p)
GO03(f,p,p)
GO03(p,p,V)
GO03(f,f,f)
GO03(d,p,p)
GO03(d,d,d)
GO04(E,i,p,p)
GO04(E,p,p,p)
GO04(E,p,u,p)
GO04(i,W,i,i)
GO04(i,i,i,i)
GO04(i,i,i,u)
GO04(i,i,i,p)
GO04(i,i,u,p)
GO04(i,u,i,p)
GO04(i,u,u,u)
GO04(i,p,i,i)
GO04(i,p,u,u)
GO04(i,p,u,p)
GO04(i,f,f,f)
GO04(i,d,d,d)
GO04(u,i,i,i)
GO04(u,i,i,p)
GO04(u,i,u,i)
GO04(u,i,u,u)
GO04(u,i,u,p)
GO04(u,i,p,i)
GO04(u,i,p,u)
GO04(u,i,p,p)
GO04(u,i,f,i)
GO04(u,i,f,f)
GO04(u,i,d,d)
GO04(u,u,i,i)
GO04(u,u,i,u)
GO04(u,u,i,p)
GO04(u,u,u,i)
GO04(u,u,u,u)
GO04(u,u,u,p)
GO04(u,u,u,f)
GO04(u,u,u,d)
GO04(u,u,p,i)
GO04(u,u,p,p)
GO04(u,u,f,f)
GO04(u,p,i,i)
GO04(u,p,p,i)
GO04(u,f,f,f)
GO04(u,d,d,d)
GO04(p,c,c,c)
GO04(p,i,i,u)
GO04(p,i,p,p)
GO04(p,i,p,V)
GO04(p,p,i,i)
GO04(p,u,i,p)
GO04(p,u,p,V)
GO04(p,u,u,p)
GO04(p,u,u,u)
GO04(p,u,p,p)
GO04(p,p,i,p)
GO04(p,p,u,u)
GO04(p,p,u,p)
GO04(p,p,p,i)
GO04(p,p,p,p)
GO04(p,p,p,u)
GO04(p,f,p,V)
GO04(f,f,f,f)
GO04(d,d,d,d)
GO05(E,p,i,p,p)
GO05(E,p,p,p,u)
GO05(E,p,p,p,p)
GO05(i,i,i,i,i)
GO05(i,i,i,i,u)
GO05(i,i,u,u,p)
GO05(i,u,i,i,p)
GO05(i,u,i,p,i)
GO05(i,u,u,u,u)
GO05(i,p,i,i,i)
GO05(i,p,i,p,u)
GO05(i,p,i,p,p)
GO05(i,p,u,p,i)
GO05(i,p,p,p,p)
GO05(i,f,f,f,f)
GO05(i,d,d,d,d)
GO05(u,i,i,i,i)
GO05(u,i,i,i,u)
GO05(u,i,i,i,p)
GO05(u,i,i,u,p)
GO05(u,i,i,p,p)
GO05(u,i,u,i,i)
GO05(u,i,u,i,u)
GO05(u,i,u,i,p)
GO05(u,i,u,u,u)
GO05(u,i,p,u,p)
GO05(u,i,u,u,p)
GO05(u,i,u,p,i)
GO05(u,i,p,i,p)
GO05(u,i,p,p,p)
GO05(u,i,f,f,f)
GO05(u,i,d,d,d)
GO05(u,u,i,i,i)
GO05(u,u,i,u,i)
GO05(u,u,i,u,u)
GO05(u,u,i,u,p)
GO05(u,u,i,p,i)
GO05(u,u,i,p,u)
GO05(u,u,i,p,p)
GO05(u,u,u,i,i)
GO05(u,u,u,i,u)
GO05(u,u,u,i,p)
GO05(u,u,u,u,i)
GO05(u,u,u,u,u)
GO05(u,u,u,u,p)
GO05(u,u,p,i,i)
GO05(u,p,u,p,i)
GO05(u,p,p,i,p)
GO05(u,p,p,p,p)
GO05(u,f,f,f,f)
GO05(u,d,d,d,d)
GO05(p,c,c,c,c)
GO05(p,i,i,i,i)
GO05(p,i,p,i,i)
GO05(p,i,p,p,p)
GO05(p,u,i,p,p)
GO05(p,u,p,p,u)
GO05(p,p,i,i,p)
GO05(p,i,i,i,p)
GO05(p,i,i,p,p)
GO05(p,p,u,u,u)
GO05(p,p,u,u,p)
GO05(p,p,p,i,i)
GO05(p,p,p,p,u)
GO05(p,p,p,p,p)
GO05(f,f,f,f,f)
GO06(i,i,i,i,i,i)
GO06(i,p,p,p,p,p)
GO06(i,f,f,i,f,f)
GO06(i,d,d,i,d,d)
GO06(u,i,i,i,i,i)
GO06(u,i,i,u,i,i)
GO06(u,i,i,u,u,p)
GO06(u,i,u,i,i,i)
GO06(u,i,u,i,i,p)
GO06(u,i,u,i,u,u)
GO06(u,i,u,u,i,p)
GO06(u,i,u,u,u,u)
GO06(u,i,u,p,i,i)
GO06(u,i,u,p,i,u)
GO06(u,i,p,i,u,p)
GO06(u,i,f,f,f,f)
GO06(u,i,d,d,d,d)
GO06(u,u,i,i,i,i)
GO06(u,u,i,u,i,i)
GO06(u,u,i,u,i,u)
GO06(u,u,i,u,u,p)
GO06(u,u,u,i,u,p)
GO06(u,u,u,i,p,i)
GO06(u,u,u,i,p,p)
GO06(u,u,u,u,i,i)
GO06(u,u,u,u,i,p)
GO06(u,u,u,u,u,u)
GO06(u,u,u,u,f,f)
GO06(u,u,u,p,p,i)
GO06(u,u,u,p,p,p)
GO06(u,u,f,f,f,f)
GO06(u,u,d,d,d,d)
GO06(u,p,u,p,i,p)
GO06(u,p,p,p,p,p)
GO06(u,f,f,i,i,p)
GO06(u,f,f,f,f,f)
GO06(u,d,d,i,i,p)
GO06(p,i,i,i,i,u)
GO06(p,i,i,i,p,p)
GO06(p,i,u,u,u,u)
GO06(p,p,i,i,i,i)
GO06(p,p,u,i,i,u)
GO06(p,p,u,p,i,i)
GO06(p,p,p,p,p,p)
GO06(f,f,f,f,f,f)
GO06(d,d,d,d,d,d)
GO07(i,i,i,i,i,i,p)
GO07(i,i,i,i,u,u,p)
GO07(i,i,u,p,u,i,p)
GO07(i,i,f,f,f,f,p)
GO07(i,u,p,u,u,u,p)
GO07(u,i,i,i,i,i,i)
GO07(u,i,i,i,u,i,p)
GO07(u,i,i,i,u,u,p)
GO07(u,i,u,i,i,i,i)
GO07(u,i,u,i,i,i,p)
GO07(u,i,u,i,i,u,u)
GO07(u,i,u,p,i,i,u)
GO07(u,i,p,i,i,i,i)
GO07(u,i,p,p,p,p,p)
GO07(u,i,p,f,f,f,f)
GO07(u,i,p,d,d,d,d)
GO07(u,u,i,i,i,i,i)
GO07(u,u,i,i,i,u,i)
GO07(u,u,i,i,i,u,u)
GO07(u,u,i,i,u,u,p)
GO07(u,u,i,p,p,p,p)
GO07(u,u,i,u,i,i,i)
GO07(u,u,u,i,i,i,i)
GO07(u,u,u,i,i,i,p)
GO07(u,u,u,i,u,i,i)
GO07(u,u,u,i,u,p,i)
GO07(u,u,u,u,i,i,p)
GO07(u,u,u,u,u,u,u)
GO07(u,u,u,u,f,f,f)
GO07(u,u,u,f,f,f,f)
GO07(u,u,u,d,d,d,d)
GO07(u,u,f,f,i,i,p)
GO07(u,u,d,d,i,i,p)
GO07(u,f,f,f,f,f,f)
GO07(u,d,d,d,d,d,d)
GO07(p,p,i,i,u,u,i)
GO07(p,p,i,p,p,p,p)
GO07(p,p,p,p,p,p,p)
GO08(E,p,i,p,p,p,p,p)
GO08(i,i,i,i,u,u,i,p)
GO08(i,u,p,u,i,u,u,p)
GO08(i,u,p,u,u,u,u,p)
GO08(u,i,i,i,i,i,i,i)
GO08(u,i,i,i,i,u,u,p)
GO08(u,i,i,i,u,u,u,u)
GO08(u,i,i,i,p,i,u,p)
GO08(u,i,i,f,p,p,p,p)
GO08(u,i,u,i,i,i,i,i)
GO08(u,i,u,i,i,i,i,p)
GO08(u,i,p,p,p,p,p,p)
GO08(u,u,i,i,i,i,i,i)
GO08(u,u,i,i,i,u,i,p)
GO08(u,u,i,i,i,u,u,p)
GO08(u,u,i,i,u,u,p,p)
GO08(u,u,i,u,i,i,i,i)
GO08(u,u,i,u,i,i,i,p)
GO08(u,u,u,i,i,i,i,i)
GO08(u,u,u,i,u,i,i,i)
GO08(u,u,u,i,p,i,p,p)
GO08(u,u,u,u,u,f,f,f)
GO08(u,u,u,u,u,u,u,u)
GO08(p,u,p,p,p,p,p,p)
GO08(p,p,i,i,u,u,u,i)
GO08(p,p,p,i,p,p,p,p)
GO08(f,f,f,f,f,f,f,f)
GO09(u,i,i,i,i,i,i,i,i)
GO09(u,i,i,i,i,i,u,i,p)
GO09(u,i,i,i,i,i,u,u,p)
GO09(u,i,u,i,i,i,i,i,p)
GO09(u,i,u,p,u,f,f,u,p)
GO09(u,u,i,i,i,i,i,i,i)
GO09(u,u,i,u,i,i,i,i,i)
GO09(u,u,i,u,i,i,i,i,p)
GO09(u,u,i,u,i,i,u,u,p)
GO09(u,u,u,i,i,i,i,i,p)
GO09(u,u,u,u,u,u,u,u,u)
GO09(u,u,p,i,u,i,u,u,f)
GO09(u,f,f,f,f,f,f,f,f)
GO09(p,i,i,i,i,u,u,u,u)
GO09(p,u,p,p,p,p,p,p,p)
GO09(p,p,i,u,i,i,p,p,u)
GO09(p,p,p,p,p,i,p,p,p)
GO09(f,f,u,u,u,u,f,f,f)
GO10(i,i,i,i,i,i,i,i,i,u)
GO10(u,i,i,i,i,i,i,i,i,i)
GO10(u,i,i,i,i,i,i,u,u,p)
GO10(u,i,u,i,i,i,i,u,u,p)
GO10(u,u,i,i,i,i,i,i,i,i)
GO10(u,u,i,i,i,i,i,u,i,p)
GO10(u,u,i,i,i,i,i,u,u,p)
GO10(u,u,i,u,i,i,i,i,i,p)
GO10(u,u,i,u,i,i,i,u,u,p)
GO10(u,u,u,u,u,u,u,i,i,i)
GO10(u,u,u,u,u,u,u,u,u,u)
GO10(u,u,p,i,i,u,p,u,u,f)
GO10(u,f,f,i,i,f,f,i,i,p)
GO10(u,d,d,i,i,d,d,i,i,p)
GO10(p,p,p,p,i,i,i,i,u,u)
GO10(f,f,f,f,f,f,f,f,f,f)
GO11(u,i,i,i,i,i,i,i,u,i,p)
GO11(u,i,i,i,i,i,i,i,u,u,p)
GO11(u,i,u,i,i,i,i,i,u,u,p)
GO11(u,u,i,u,i,i,i,i,u,u,p)
GO11(u,u,u,u,u,u,u,u,u,u,u)
GO11(u,u,f,f,i,i,f,f,i,i,p)
GO11(u,u,f,f,f,f,f,f,f,f,f)
GO11(u,u,d,d,i,i,d,d,i,i,p)
GO11(u,f,f,f,f,f,f,f,f,f,f)
GO11(p,p,i,i,u,u,u,i,p,i,i)
GO12(u,u,i,i,i,i,i,i,i,u,i,p)
GO12(u,u,i,i,i,i,i,i,i,u,u,p)
GO12(u,u,u,u,u,u,u,u,u,u,u,u)
GO12(p,p,p,i,i,i,p,p,p,p,p,p)
GO12(f,f,f,f,f,f,f,f,f,f,f,f)
GO13(u,i,i,i,i,i,i,i,i,i,u,u,p)
GO13(u,u,u,u,u,u,u,u,u,u,u,u,u)
GO13(u,f,f,f,f,f,f,f,f,f,f,f,f)
GO14(u,f,f,i,i,f,f,i,i,f,f,i,i,p)
GO14(u,d,d,i,i,d,d,i,i,d,d,i,i,p)
GO15(u,u,i,i,i,i,u,u,i,i,i,i,i,i,i)
GO15(f,f,f,f,f,f,f,f,f,f,f,f,f,f,f)
#else
#error You must not include wrappers.h but wrapper.h
#endif