Skip to content
  • John Baldwin's avatar
    MFamd64: Add support for extended FPU states on i386. This includes · 824fc460
    John Baldwin authored
    support for AVX on i386.
    - Similar to amd64, move the FPU save area out of the PCB and instead
      store saved FPU state in a variable-sized buffer after the PCB on the
      stack.
    - To support the variable PCB location, alter the locore code to only use
      the bottom-most page of proc0stack for init386().  init386() returns
      the correct stack pointer to locore which adjusts the stack for thread0
      before calling mi_startup().
    - Don't bother setting cr3 in thread0's pcb in locore before calling
      init386().  It wasn't used (init386() overwrote it at the end) and
      it doesn't work with the variable-sized FPU save area.
    - Remove the new-bus attachment from npx.  This was only ever useful for
      external co-processors using IRQ13, but those have not been supported
      for several years.  npxinit() is now called much earlier during boot
      (init386()) similar to amd64.
    - Implement PT_{GET,SET}XSTATE and I386_GET_XFPUSTATE.
    - npxsave() is now only called from context switch contexts so it can
      use XSAVEOPT.
    
    Differential Revision:	https://reviews.freebsd.org/D1058
    Reviewed by:	kib
    Tested on:	FreeBSD/i386 VM under bhyve on Intel i5-2520
    824fc460