qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH V3 01/12] add MIPS DSP internal functions


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH V3 01/12] add MIPS DSP internal functions
Date: Tue, 27 Mar 2012 08:33:26 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120316 Thunderbird/11.0

On 03/27/12 02:24, Jia Liu wrote:
> +ifeq ($(TARGET_BASE_ARCH), mips)
> +libobj-y += dsp_helper.o
> +endif
...

> +#include "dyngen-exec.h"
> +
> +/*** MIPS DSP internal functions begin ***/
> +static inline void set_DSPControl_overflow_flag(uint32_t flag, int position)
> +{
> +    env->active_tc.DSPControl |= (target_ulong)flag << position;
> +}

In order to use dyngen-exec.h, and the global ENV variable, 
you must also do

dsp_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)

in the Makefile.target.  If you had tested i386 host instead
of x86_64, you should have seen this failure.

Better, from the point of view of one working toward eliminating
dyngen-exec.h and these special calling conventions, is to actually
pass down env in the helper.  E.g.

+/** DSP Arithmetic Sub-class insns **/
+uint32_t helper_addq_ph(CPUMIPSState *env, uint32_t rs, uint32_t rt)

+DEF_HELPER_FLAGS_3(addq_ph, 0, i32, env, i32, i32)

where mipsdsp_add_i16 and thence set_DSPControl_overflow_flag also
grow ENV parameters.

In addition, we can't use TCG_CALL_CONST | TCG_CALL_PURE on any
function that sets DSPControl, because that's the cpu_dspctrl tcg
variable.

You might get better performance out of TCG if you do *not* make
DSPControl a TCG variable, but instead perform explicit loads from
that slot in the few places that need it.  That way you can at
least set TCG_CALL_CONST.  (Though not TCG_CALL_PURE, because the
functions do have side effects.)  

> +    if (len == 2)
> +        env->active_tc.DSPControl &= 0xFCFFFFFF;
> +    else if (len == 4)
> +        env->active_tc.DSPControl &= 0xF0FFFFFF;

Run all your patches through ./scripts/checkpatch.pl and fix the
errors that will report.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]