qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v7 15/27] tcg/tci: Change encoding to uint32_t units


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v7 15/27] tcg/tci: Change encoding to uint32_t units
Date: Sat, 12 Jun 2021 12:21:54 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1

On 6/1/21 5:00 PM, Richard Henderson wrote:
> This removes all of the problems with unaligned accesses
> to the bytecode stream.
> 
> With an 8-bit opcode at the bottom, we have 24 bits remaining,
> which are generally split into 6 4-bit slots.  This fits well
> with the maximum length opcodes, e.g. INDEX_op_add2_i32, which
> have 6 register operands.
> 
> We have, in previous patches, rearranged things such that there
> are no operations with a label which have more than one other
> operand.  Which leaves us with a 20-bit field in which to encode
> a label, giving us a maximum TB size of 512k -- easily large.
> 
> Change the INDEX_op_tci_movi_{i32,i64} opcodes to tci_mov[il].
> The former puts the immediate in the upper 20 bits of the insn,
> like we do for the label displacement.  The later uses a label
> to reference an entry in the constant pool.  Thus, in the worst
> case we still have a single memory reference for any constant,
> but now the constants are out-of-line of the bytecode and can
> be shared between different moves saving space.
> 
> Change INDEX_op_call to use a label to reference a pair of
> pointers in the constant pool.  This removes the only slightly
> dodgy link with the layout of struct TCGHelperInfo.
> 
> The re-encode cannot be done in pieces.
> 
> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  include/tcg/tcg-opc.h    |   4 +-
>  tcg/tci/tcg-target.h     |   3 +-
>  tcg/tci.c                | 541 +++++++++++++++------------------------
>  tcg/tci/tcg-target.c.inc | 379 ++++++++++++---------------
>  tcg/tci/README           |  20 +-
>  5 files changed, 384 insertions(+), 563 deletions(-)
[ ... ]

> +    case 0:
> +        /* tcg_out_nop_fill uses zeros */
> +        if (insn == 0) {
> +            info->fprintf_func(info->stream, "align");

"nop"?

Otherwise,
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> +            break;
> +        }
> +        /* fall through */
> +
>      default:
>          info->fprintf_func(info->stream, "illegal opcode %d", op);
>          break;
>      }



reply via email to

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