On 9/22/21 11:09 AM, WANG Xuerui wrote:
+    if (sextreg(val, 0, 52) == val) {
+        /*
+         * Fits in 52-bits, upper bits are already properly sign-extended by
+         * cu32i.d.
+         */
+        return;
+    }
+    tcg_out_opc_cu52i_d(s, rd, rd, top);
+}

Oh, future improvement: constants with 52 low zero bits can be loaded with cu52i(rd, zero, val >> 52).

Which means there's a set of interesting constants:

  abc0_0000_0000_0def

        ori     rd, zero, 0xdef
        cu52i   rd, rd, 0xabc

  abcf_ffff_ffff_fdef

        cu52i   rd, zero, 0xabc - 1
        addi.d  rd, rd, 0xdef

Also,

+    tcg_out_opc_lu12i_w(s, rd, upper);
+    if (low != 0) {
+        tcg_out_opc_ori(s, rd, rd, low & 0xfff);
+    }

when upper == 0 and low != 0, we can omit the lu12i.


r~

Reply via email to