qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 14/30] tcg/loongarch: Implement bswap32_i32/bswap64_i64


From: Richard Henderson
Subject: Re: [PATCH 14/30] tcg/loongarch: Implement bswap32_i32/bswap64_i64
Date: Mon, 20 Sep 2021 08:11:15 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0

On 9/20/21 1:04 AM, WANG Xuerui wrote:
+    case INDEX_op_bswap32_i32:
+        tcg_out_opc_revb_2h(s, a0, a1);
+        tcg_out_opc_rotri_w(s, a0, a0, 16);
+        break;
+    case INDEX_op_bswap64_i64:
+        tcg_out_opc_revb_d(s, a0, a1);
+        break;

You're missing INDEX_op_bswap32_i64, which in addition has a third argument consisting of TCG_BSWAP_* bits.

I would have expected revb_2w to be the preferred implementation of bswap32. I would expect something like


    case INDEX_op_bswap32_i32:
        /* All 32-bit values are computed sign-extended in the register. */
        a2 = TCG_BSWAP_OS;
        /* fall through */
    case INDEX_op_bswap32_i64:
        tcg_out_opc_revb_2w(s, a0, a1);
        if (a2 & TCG_BSWAP_OS) {
            tcg_out_ext32s(s, a0, a0);
        } else if (a2 & TCG_BSWAP_OZ) {
            tcg_out_ext32u(s, a0, a0);
        }
        break;


r~



reply via email to

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