On 30/04/2019 17:36, Richard Henderson wrote:
> On 4/28/19 7:38 AM, Mark Cave-Ayland wrote:
>> +#define GEN_VSX_HELPER_X3(name, op1, op2, inval, type)
>> \
>> +static void gen_##name(DisasContext *ctx)
>> \
>> +{
>> \
>> + TCGv_i32 opc;
>> \
>> + TCGv_ptr xt, xa, xb;
>> \
>> + if (unlikely(!ctx->vsx_enabled)) {
>> \
>> + gen_exception(ctx, POWERPC_EXCP_VSXU);
>> \
>> + return;
>> \
>> + }
>> \
>> + opc = tcg_const_i32(ctx->opcode);
>> \
>> + xt = gen_vsr_ptr(xT(ctx->opcode));
>> \
>> + xa = gen_vsr_ptr(xA(ctx->opcode));
>> \
>> + xb = gen_vsr_ptr(xB(ctx->opcode));
>> \
>
> Do you still need to pass opc?
>
> Anyway, I guess this is still progress...
> Reviewed-by: Richard Henderson <[email protected]>
Right, it looks like VSX_CMP is the culprit here. Am I right in thinking that
it's
best to remove the opc parameter from GEN_VSX_HELPER_X3 above, and then have a
separate gen and helper function for just the VSX_CMP instructions? Presumably
this
reduces of the overhead at both translation and execution time for the
instructions
that don't require it.
ATB,
Mark.