Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/sys/arch/m68k/m68k
On Thu, 10 Apr 2025 00:44:02 Izumi Tsutsui wrote:
> > Module Name: src
> > Committed By: nat
> > Date: Wed Apr 9 00:04:41 UTC 2025
> >
> > Modified Files:
> > src/sys/arch/m68k/m68k: fpu.c
> >
> > Log Message:
> > Add workaround for fpu test for kernels defined with M68040.
> >
> > This is to accomodate kernels built without the -mlcfix option passed to
> > gas(1).
> >
> > As discussed on tech-kern - It would be remiss of me otherwize.
>
> Do you have a certain scenario that the write-pending could happen
> just before F-line Unimplemented Exception by the fnop in fpu_probe()?
I did it to be on the safe side. If the kernel was to be built with -mlcfix
passed to gas(1) the nop would be inserted. I'm unaware as to how many writes
might be pending in the pipeline?
But if you don't deem it necessary I'll remove it.
>
> On hp300 objdump -d GENERIC/netbsd shows:
>
> 000146a4 <fpu_probe>:
> struct fpframe fpframe;
> label_t faultbuf;
> uint8_t b;
> 146a4: 4e56 fe80 linkw %fp,#-384
> 146a8: 2f02 movel %d2,%sp@-
>
> nofault = (int *)&faultbuf;
> 146aa: 41ee fe80 lea %fp@(-384),%a0
> 146ae: 23c8 002d eb00 movel %a0,2deb00 <nofault>
>
> if (setjmp(&faultbuf)) {
> 146b4: 486e fe80 pea %fp@(-384)
> 146b8: 4eb9 0002 029c jsr 2029c <setjmp>
> 146be: 588f addql #4,%sp
> 146c0: 4a80 tstl %d0
> 146c2: 670a beqs 146ce <fpu_probe+0x2a>
>
> nofault = (int *)0;
> 146c4: 42b9 002d eb00 clrl 2deb00 <nofault>
> 146ca: 4280 clrl %d0
>
> return FPU_NONE;
> 146cc: 6054 bras 14722 <fpu_probe+0x7e>
>
> }
> __asm("fnop");
> 146ce: f280 0000 fnop
>
> nofault = NULL;
> 146d2: 42b9 002d eb00 clrl 2deb00 <nofault>
>
> if (cputype == CPU_68060)
> 146d8: 2039 002c 5018 movel 2c5018 <cputype>,%d0
> 146de: 7203 moveq #3,%d1
> 146e0: b280 cmpl %d0,%d1
>
> return FPU_68060;
> 146e2: 6730 beqs 14714 <fpu_probe+0x70>
>
> if (cputype == CPU_68040)
> 146e4: 5580 subql #2,%d0
>
> return FPU_68040;
> 146e6: 6730 beqs 14718 <fpu_probe+0x74>
>
> __asm("fsave %0@" : : "a" (&fpframe) : "memory");
> 146e8: 41ee febc lea %fp@(-324),%a0
> 146ec: f310 fsave %a0@
>
> b = fpframe.fpf_fsize;
> 146ee: 142e febd moveb %fp@(-323),%d2
>
> fpframe.fpf_null = 0;
> 146f2: 42ae febc clrl %fp@(-324)
>
> fpframe.fpf_idle.fpf_ccr = 0;
> 146f6: 426e fec0 clrw %fp@(-320)
>
> m68881_restore(&fpframe);
> 146fa: 2f08 movel %a0,%sp@-
> 146fc: 4eb9 0000 1bd6 jsr 1bd6 <m68881_restore>
> 14702: 588f addql #4,%sp
>
> if (b == 0x18)
> 14704: 0c02 0018 cmpib #24,%d2
>
> return FPU_68881;
> 14708: 6712 beqs 1471c <fpu_probe+0x78>
>
> if (b == 0x38)
> 1470a: 0c02 0038 cmpib #56,%d2
>
> return FPU_68882;
> 1470e: 6710 beqs 14720 <fpu_probe+0x7c>
>
> return FPU_UNKNOWN;
> 14710: 7005 moveq #5,%d0
>
> 14712: 600e bras 14722 <fpu_probe+0x7e>
> 14714: 7004 moveq #4,%d0
> 14716: 600a bras 14722 <fpu_probe+0x7e>
> 14718: 7003 moveq #3,%d0
> 1471a: 6006 bras 14722 <fpu_probe+0x7e>
> 1471c: 7001 moveq #1,%d0
> 1471e: 6002 bras 14722 <fpu_probe+0x7e>
> 14720: 7002 moveq #2,%d0
> 14722: 242e fe7c movel %fp@(-388),%d2
> 14726: 4e5e unlk %fp
> 14728: 4e75 rts
>
> ---
> Izumi Tsutsui
Home |
Main Index |
Thread Index |
Old Index