On 6/7/23 09:47, Yeqi Fu wrote:
+void helper_native_memcpy(CPUMIPSState *env)
+{
+ CPUState *cs = env_cpu(env);
+ NATIVE_FN_W_3W();
+ void *ret;
+ void *dest = g2h(cs, arg0);
+ void *src = g2h(cs, arg1);
+ size_t n = (size_t)arg2;
+ ret = memcpy(dest, src, n);
+ env->active_tc.gpr[2] = (target_ulong)h2g(ret);
+}
I would expect everything except for the guest ABI to be handled by common code, so that
you do not have N copies of every native emulated function. This needs to be something like
abi_ptr do_native_memcpy(CPUArchState *env, abi_ptr dst, abi_ptr src,
abi_ptr len, uintptr_t ra);
void helper_native_memcpy(CPUMIPSState *env)
{
env->active_tc.gpr[2] =
do_native_memcpy(env, env->active_tc.gpr[4],
env->active_tc.gpr[5],
env->active_tc.gpr[6], GETPC());
}
Even better, provide some guest abstraction akin to va_start/va_arg so that all of the
per-native function code becomes shared.
r~