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



> 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()?

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