On Tue, 16 Oct 2018, Fredrik Noring wrote: > One option is to create a new array such as > > static TCGv_i64 mmi_gpr[32]; > > that represents the upper 64 bits of each GPR. Then cpu_gpr must be of > a 64-bit type too, even when QEMU runs in 32-bit user mode. The R5900 > does not implement CP0.Status.UX in hardware, though, so system mode is > 64 bits, regardless.
It's more like modern CP0.Status.PX however, as the hardware does not implement 64-bit memory segments and only has legacy 32-bit segments implemented. Due to a hardware quirk however the value recorded in the target register (usually $ra) does not get sign-extended with linked jump or branch instructions, contrary to what is expected with processors implementing 32-bit segments only. This has implications for kernel code running from KSEG0/KSEG1/KSEG2 and has to be worked around in software, as experience has shown. Maciej