Re: Intermediate step for new arch for lc040 compatibility
Tetsuya Isaki <[email protected]> Tue, 29 Apr 2025 14:40:34 +0900
| Newsgroups | gmane.os.netbsd.ports.m68k |
|---|---|
| Message-ID | <x7ikmnle3x.wl%[email protected]> |
At Tue, 29 Apr 2025 07:55:10 +1000,
Nat Sloss wrote:
> As opposed to 14 failures with this change (same for mc68030 with
> fp emulation
> and a full '040 in quemu).
Have you confirmed that the atf tests you used have passed on real,
known-good hardware?
You cannot use QEMU for such a purpose.
QEMU emulates 68040 as if it were 68040+6888x, which, of course,
does not exist. (see also source code in qemu/target/m68k/)
# In addition, QEMU 6888x emulation is not good quality. From
# this viewpoint as well, you cannot use it as a test reference,
# at least.
By the way, we can see the 68040+6888x botch easily as follows:
Build the kernel with this patch.
```
--- src/sys/arch/virt68k/conf/GENERIC.orig
+++ src/sys/arch/virt68k/conf/GENERIC
@@ -32,13 +32,11 @@
makeoptions COPY_SYMTAB=1
# CPUs this kernel supports
-options M68030
options M68040
maxusers 16
# Needed on m68040 boards to emulate some missing FP instructions
-options FPSP
options DDB
options DIAGNOSTIC
```
Then, run virt68k on QEMU with this kernel.
qv68k# dmesg -t | grep 680
Qemu 9.2.2: MC68040+MMU+FPU, 4k+4k on-chip physical I/D caches
qv68k# cat a.c
#include <stdio.h>
int main(int ac, char *av[])
{
float result;
__asm__ volatile(
"fmovecr #0,%%fp0;" /* fp0 <- pi */
"fcos.x %%fp0,%%fp0;"
"fmove.s %%fp0,%0"
: "=d" (result)
);
printf("cos(pi)=%f\n", result);
return 0;
}
qv68k# cc a.c
qv68k# ./a.out
cos(pi)=-1.000000
QEMU/68040 ran unimplemented fcos (and fmovecr) instructions,
without any software support (FPSP)!
(In reality, if correctly emulated, you should probably see several
unimplemented FP signals before you reach the login prompt.)
---
Tetsuya Isaki <[email protected] / [email protected]>