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~

Reply via email to