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~