Message ID | 20210214175912.732946-1-f4bug@amsat.org (mailing list archive) |
---|---|
Headers | show |
Series | target/mips: Reintroduce the R5900 CPU (with more testing) | expand |
On 2/14/21 6:58 PM, Philippe Mathieu-Daudé wrote: > The R5900 CPU was removed some time ago (frankly I don't remember > why). This series add it back, but to prove it works, we also add > testing at the end. > > The main motivation is to have MIPS R5900 coverage, but to be able > to run real world r5900 binaries, I had to implement more opcodes. > > 42 patches are a lot, but 3 are already queued in linux-user-for-6.0, > and the 11 last ones are pure testing. I suppose in next versions > I'll split the testing patches, but to show the final objective I > included them in here. > > I tagged it RFC because some parts because: > > - We'd rather not add yet another target, but we need the > ILP32-on-64bit ABI (o32 64-bit) > > - RDHWR glibc kludge for user-mode > > - Avocado patches are only here to show the final test. > They are useful for my set of tests, but not meant to > be merged in mainstream. > > - gitlab jobs are only here to show the tests work. > If the target is ever accepted, it would go in an already > existing job. > > I'm OK to maintain 64-bit o32 and the testing out of tree, but the > TCG opcodes are worthwhile review for mainstream. > > Note: there is a sign-extension bug somewhere but I can't find it: > > $ qemu-r5900o32el busybox free > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= > =A0total =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0used =C2=A0=C2=A0=C2= > =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0free =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0sha= > red =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0buffers > =C2=A0Mem: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A03682012 =C2=A0=C2=A0=C2=A0=C2=A0= > =C2=A0=C2=A0812620 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A02869392 =C2=A0=C2=A0=C2=A0= > =C2=A0=C2=A01367556 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0321136 > Swap: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A02095100 =C2=A0=C2=A0=C2=A0=C2=A0-149854= > 4 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A03593644 > Total: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A05777112 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0-= > 685924 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A06463036 > > $ free # host > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= > =A0total =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0used =C2=A0=C2=A0=C2=A0=C2= > =A0=C2=A0=C2=A0=C2=A0free =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0shared =C2=A0buff/cac= > he =C2=A0=C2=A0available > Mem: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A016264924 =C2=A0=C2=A0=C2=A0=C2=A093= > 23500 =C2=A0=C2=A0=C2=A0=C2=A02822500 =C2=A0=C2=A0=C2=A0=C2=A01377288 =C2=A0= > =C2=A0=C2=A0=C2=A04118924 =C2=A0=C2=A0=C2=A0=C2=A05149548 > Swap: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A018872316 =C2=A0=C2=A0=C2=A011084368 =C2= > =A0=C2=A0=C2=A0=C2=A07787948 [Same but unescaped] Note: there is a sign-extension bug somewhere but I can't find it: $ qemu-r5900o32el busybox free total used free shared buffers Mem: 3682012 812620 2869392 1367556 321136 Swap: 2095100 -1498544 3593644 Total: 5777112 -685924 6463036 $ free # host total used free shared buff/cache available Mem: 16264924 9323500 2822500 1377288 4118924 5149548 Swap: 18872316 11084368 7787948 See the used swap: 11084368 = 0x00a92250 -1498544 = 0xffe92250 Regards, Phil.
On 2/14/21 6:58 PM, Philippe Mathieu-Daudé wrote: > The R5900 CPU was removed some time ago (frankly I don't remember > why). This series add it back, but to prove it works, we also add > testing at the end. > > The main motivation is to have MIPS R5900 coverage, but to be able > to run real world r5900 binaries, I had to implement more opcodes. > > 42 patches are a lot, but 3 are already queued in linux-user-for-6.0, > and the 11 last ones are pure testing. I suppose in next versions > I'll split the testing patches, but to show the final objective I > included them in here. > > I tagged it RFC because some parts because: > > - We'd rather not add yet another target, but we need the > ILP32-on-64bit ABI (o32 64-bit) > > - RDHWR glibc kludge for user-mode > > - Avocado patches are only here to show the final test. > They are useful for my set of tests, but not meant to > be merged in mainstream. > > - gitlab jobs are only here to show the tests work. > If the target is ever accepted, it would go in an already > existing job. > > I'm OK to maintain 64-bit o32 and the testing out of tree, but the > TCG opcodes are worthwhile review for mainstream. I forgot to mention, to debug this target with gdb (the various multimedia opcodes are not recognized by QEMU disas). I start QEMU listening for GDB with: $ qemu-r5900o32el -g 1234 ... Then start Debian's gdb-multiarch via Docker: $ docker run -it --rm -v /tmp:/tmp -u $UID --network=host \ registry.gitlab.com/qemu-project/qemu/qemu/debian10 \ gdb-multiarch -q \ --ex 'set architecture mips:5900' --ex 'set endian little' The target architecture is assumed to be mips:5900 The target is assumed to be little endian (gdb) Connect to QEMU on host: (gdb) target remote 172.17.0.1:1234 Opcodes are displayed properly: (gdb) x/20i 0x0002553c 0x2553c: pcpyld a1,a1,a1 0x25540: li a2,255 0x25544: andi t1,a0,0x7 0x25548: beqz t1,0x255fc 0x2554c: andi t1,a0,0xf 0x25550: lw t0,0(a0) 0x25554: addiu a0,a0,4 0x25558: pceqb t2,t0,zero 0x2555c: pceqb t3,t0,a1 0x25560: or t4,t3,t2 0x25564: pextlw t4,zero,t4 0x25568: beqz t4,0x255fc One limitation is we can not access the upper halves of the 128-bit general purpose registers :( [Maybe we can but I don't know how...] Regards, Phil.
On 2/14/21 6:58 PM, Philippe Mathieu-Daudé wrote: > The R5900 CPU was removed some time ago (frankly I don't remember > why). This series add it back, but to prove it works, we also add > testing at the end. > > The main motivation is to have MIPS R5900 coverage, but to be able > to run real world r5900 binaries, I had to implement more opcodes. > Philippe Mathieu-Daud=C3=A9 (40): > linux-user/mips64: Restore setup_frame() for o32 ABI > linux-user/mips64: Support o32 ABI syscalls > target/mips/translate: Make cpu_HI/LO registers public > target/mips: Promote 128-bit multimedia registers as global ones > target/mips: Rename 128-bit upper halve GPR registers > target/mips: Introduce gen_load_gpr_hi() / gen_store_gpr_hi() helpers > target/mips/translate: Use GPR move functions in gen_HILO1_tx79() Generic patches 3-7 applied to mips-next.