[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] target-mips: implement UserLocal Register
From: |
Richard Henderson |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] target-mips: implement UserLocal Register |
Date: |
Sat, 17 May 2014 11:11:07 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 |
On 05/16/2014 11:13 AM, Petar Jovanovic wrote:
> +target_ulong helper_rdhwr_ul(CPUMIPSState *env)
> +{
> + if ((env->hflags & MIPS_HFLAG_CP0) ||
> + (env->CP0_HWREna & (1 << 29))) {
> + return env->CP0_UserLocal;
> + } else {
> + helper_raise_exception(env, EXCP_RI);
> + }
> +
> + return 0;
> +}
> +
You shouldn't need a helper at all. We're supposed to check all of these
sorts of permissions at translation time, so you should be able to issue a
load or an exception directly from the translator.
> + if (env->CP0_Config3 & (1 << CP0C3_ULRI)) {
What is this check, and why isn't it present in ctx->hflags?
> + tcg_gen_ld_tl(arg, cpu_env,
> + offsetof(CPUMIPSState, CP0_UserLocal));
> + tcg_gen_ext32s_tl(arg, arg);
One operation: tcg_gen_ld32s_tl.
> #else
> - /* XXX: Some CPUs implement this in hardware.
> - Not supported yet. */
> + save_cpu_state(ctx, 1);
> + gen_helper_rdhwr_ul(t0, cpu_env);
> + gen_store_gpr(t0, rt);
> + break;
> #endif
>
This should be at least partially merged with the user-only tls_value code.
r~