On 2021/7/16 上午12:15, Richard Henderson wrote: > On 7/15/21 4:21 AM, LIU Zhiwei wrote: >> Also on a side note, could you give me some advice for the following >> question? >> >> I have been supporting  running 32bit application on qemu-riscv64. >> After this patch set, >> it is hard to define a  method,  such as gpr_dst_s or gpr_dst_u, to >> extend the destination >> register. I can only extend the destination register(ext32s or >> ext32u) in each instruction >> with scattered code. >> >> Can we just omit the extension of the destination register? > > It's hard to give advice on code that I haven't seen. > > In general I would think that the destination register need not be > extended for 32-bit mode, unless the architecture says otherwise. > (What does the architecture say about the contents of the registers > when transitioning from a 32-bit mode user program to a 64-bit mode > kernel?) > As privileged specification says, "Whenever XLEN in any mode is set to a value less than the widest supported XLEN, all operations must ignore source operand register bits above the configured XLEN, and must sign-extend results to fill the entire widest supported XLEN in the destination register. Similarly, pc bits above XLEN are ignored, and when the pc is written, it is sign-extended to fill the widest supported XLEN." If we want to strictly obey the spec, we should 1) Ignore MSB 32bits for source register, and sign-extend the destination register. 2) Always use 32bit operation(TCG 32bit OP). I want to still use TCG 64bit OP and just extend the source to 64bit by ext32s or ext32u. Is is OK? Thanks, Zhiwei > > r~