[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 14/29] tcg/mips: Support bswap flags in tcg_out_bswap16
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH v3 14/29] tcg/mips: Support bswap flags in tcg_out_bswap16 |
Date: |
Sat, 26 Jun 2021 11:30:47 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 |
On 6/26/21 8:36 AM, Richard Henderson wrote:
> Merge tcg_out_bswap16 and tcg_out_bswap16s. Use the flags
> in the internal uses for loads and stores.
>
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> tcg/mips/tcg-target.c.inc | 63 +++++++++++++++++++--------------------
> 1 file changed, 30 insertions(+), 33 deletions(-)
> -static inline void tcg_out_bswap16(TCGContext *s, TCGReg ret, TCGReg arg)
> +static void tcg_out_bswap16(TCGContext *s, TCGReg ret, TCGReg arg, int flags)
> {
> + /* ret and arg can't be register tmp0 */
> + tcg_debug_assert(ret != TCG_TMP0);
> + tcg_debug_assert(arg != TCG_TMP0);
> +
> + /* With arg = abcd: */
> if (use_mips32r2_instructions) {
> - tcg_out_opc_reg(s, OPC_WSBH, ret, 0, arg);
> - } else {
> - /* ret and arg can't be register at */
> - if (ret == TCG_TMP0 || arg == TCG_TMP0) {
> - tcg_abort();
> + tcg_out_opc_reg(s, OPC_WSBH, ret, 0, arg); /* badc */
> + if (flags & TCG_BSWAP_OS) {
> + tcg_out_opc_reg(s, OPC_SEH, ret, 0, ret); /* ssdc */
> + } else if ((flags & (TCG_BSWAP_IZ | TCG_BSWAP_OZ)) == TCG_BSWAP_OZ) {
> + tcg_out_opc_imm(s, OPC_ANDI, ret, ret, 0xffff); /* 00dc */
> }
> -
> - tcg_out_opc_sa(s, OPC_SRL, TCG_TMP0, arg, 8);
> - tcg_out_opc_sa(s, OPC_SLL, ret, arg, 8);
> - tcg_out_opc_imm(s, OPC_ANDI, ret, ret, 0xff00);
> - tcg_out_opc_reg(s, OPC_OR, ret, ret, TCG_TMP0);
> + return;
> }
> -}
>
> -static inline void tcg_out_bswap16s(TCGContext *s, TCGReg ret, TCGReg arg)
> -{
> - if (use_mips32r2_instructions) {
> - tcg_out_opc_reg(s, OPC_WSBH, ret, 0, arg);
> - tcg_out_opc_reg(s, OPC_SEH, ret, 0, ret);
> + tcg_out_opc_sa(s, OPC_SRL, TCG_TMP0, arg, 8); /* 0abc */
> + if (!(flags & TCG_BSWAP_IZ)) {
> + tcg_out_opc_imm(s, OPC_ANDI, TCG_TMP0, TCG_TMP0, 0x00ff); /* 000c */
> + }
> + if (flags & TCG_BSWAP_OS) {
> + tcg_out_opc_sa(s, OPC_SLL, ret, arg, 24); /* d000 */
> + tcg_out_opc_sa(s, OPC_SRA, ret, ret, 16); /* ssd0 */
> } else {
> - /* ret and arg can't be register at */
> - if (ret == TCG_TMP0 || arg == TCG_TMP0) {
> - tcg_abort();
> + tcg_out_opc_sa(s, OPC_SLL, ret, arg, 8); /* bcd0 */
> + if (flags & TCG_BSWAP_OZ) {
> + tcg_out_opc_imm(s, OPC_ANDI, ret, ret, 0xff00); /* 00d0 */
> }
> -
> - tcg_out_opc_sa(s, OPC_SRL, TCG_TMP0, arg, 8);
> - tcg_out_opc_sa(s, OPC_SLL, ret, arg, 24);
> - tcg_out_opc_sa(s, OPC_SRA, ret, ret, 16);
> - tcg_out_opc_reg(s, OPC_OR, ret, ret, TCG_TMP0);
> }
> + tcg_out_opc_reg(s, OPC_OR, ret, ret, TCG_TMP0); /* ssdc */
> }
Thanks for adding the comments!
- [PATCH v3 10/29] tcg/ppc: Split out tcg_out_bswap64, (continued)
- [PATCH v3 10/29] tcg/ppc: Split out tcg_out_bswap64, Richard Henderson, 2021/06/26
- [PATCH v3 12/29] tcg/ppc: Use power10 byte-reverse instructions, Richard Henderson, 2021/06/26
- [PATCH v3 16/29] tcg/tci: Support bswap flags, Richard Henderson, 2021/06/26
- [PATCH v3 15/29] tcg/mips: Support bswap flags in tcg_out_bswap32, Richard Henderson, 2021/06/26
- [PATCH v3 20/29] tcg: Make use of bswap flags in tcg_gen_qemu_st_*, Richard Henderson, 2021/06/26
- [PATCH v3 25/29] target/sh4: Improve swap.b translation, Richard Henderson, 2021/06/26
- [PATCH v3 22/29] target/arm: Improve vector REV, Richard Henderson, 2021/06/26
- [PATCH v3 14/29] tcg/mips: Support bswap flags in tcg_out_bswap16, Richard Henderson, 2021/06/26
- Re: [PATCH v3 14/29] tcg/mips: Support bswap flags in tcg_out_bswap16,
Philippe Mathieu-Daudé <=
- [PATCH v3 17/29] tcg: Handle new bswap flags during optimize, Richard Henderson, 2021/06/26
- [PATCH v3 24/29] target/i386: Improve bswap translation, Richard Henderson, 2021/06/26
- [PATCH v3 19/29] tcg: Make use of bswap flags in tcg_gen_qemu_ld_*, Richard Henderson, 2021/06/26
- [PATCH v3 13/29] tcg/s390: Support bswap flags, Richard Henderson, 2021/06/26
- [PATCH v3 23/29] target/arm: Improve REVSH, Richard Henderson, 2021/06/26
- [PATCH v3 29/29] tcg/riscv: Remove MO_BSWAP handling, Richard Henderson, 2021/06/26
- [PATCH v3 18/29] tcg: Add flags argument to tcg_gen_bswap16_*, tcg_gen_bswap32_i64, Richard Henderson, 2021/06/26
- [PATCH v3 21/29] target/arm: Improve REV32, Richard Henderson, 2021/06/26