On 23 December 2013 03:45, Lauren E Guckert <lguck...@utexas.edu> wrote:
> IN TRANSLATE.C:
> DISAS_INSN FUNCTION:
>
> ++    TCGv t0 = tcg_temp_new();
> ++    TCGv t1 = tcg_temp_new();
> ++    t0= pc_start; t1 = b;
> ++    tcg_gen_helper_fast_trace(t0,t1);

The TCGv type represents a TCG value. You have to
use the TCG functions to manipulate them. If you just
assign a random value like 'b' to them then things are
obviously going to go wrong. Look at other code which
passes constant values to helper functions (hint, it
will use tcg_const_i32() or tcg_const_i64() to create
the TCGv.)

> IN TCG/TCG-OP.H ADDED (here if I pass 0 args, it executes fine and prints
> dummy message correct number of times):
> static inline void tcg_gen_helper_fast_trace(target_ulong pc,int op)
> {
>         int sizemask = 0;
> TCGArg args[2];
> #ifdef TARGET_X86_64
>  sizemask |= tcg_gen_sizemask(0,0,0);
>  sizemask |= tcg_gen_sizemask(1,1,0);
>  sizemask |= tcg_gen_sizemask(2,1,0);
>     args[0] = GET_TCGV_I64(pc);
>     args[1] = GET_TCGV_I64(op);
> tcg_gen_helperN(tcg_helper_fast_trace64, 0, sizemask, ((TCGArg)(-1)),2 ,
> args);

Why are you doing this rather than just using a simple helper
declared in helper.h like everything else? Why is yours special?

thanks
-- PMM

Reply via email to