Module Name: src Committed By: maxv Date: Sat Nov 4 07:38:42 UTC 2017
Modified Files: src/sys/arch/x86/x86: fpu.c Log Message: Always set XCR0_X87, to force a reload of CW. That's needed for compat options where fx_cw is not the standard fpu value. To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 src/sys/arch/x86/x86/fpu.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/x86/fpu.c diff -u src/sys/arch/x86/x86/fpu.c:1.22 src/sys/arch/x86/x86/fpu.c:1.23 --- src/sys/arch/x86/x86/fpu.c:1.22 Sat Nov 4 07:35:00 2017 +++ src/sys/arch/x86/x86/fpu.c Sat Nov 4 07:38:42 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: fpu.c,v 1.22 2017/11/04 07:35:00 maxv Exp $ */ +/* $NetBSD: fpu.c,v 1.23 2017/11/04 07:38:42 maxv Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. All @@ -96,7 +96,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.22 2017/11/04 07:35:00 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.23 2017/11/04 07:38:42 maxv Exp $"); #include "opt_multiprocessor.h" @@ -557,6 +557,13 @@ fpu_save_area_clear(struct lwp *l, unsig fpu_save->sv_xmm.fx_mxcsr = __INITIAL_MXCSR__; fpu_save->sv_xmm.fx_mxcsr_mask = x86_fpu_mxcsr_mask; fpu_save->sv_xmm.fx_cw = x87_cw; + + /* Force a reload of CW */ + if (x86_fpu_save == FPU_SAVE_XSAVE || + x86_fpu_save == FPU_SAVE_XSAVEOPT) { + fpu_save->sv_xsave_hdr.xsh_xstate_bv |= + XCR0_X87; + } } else { memset(&fpu_save->sv_87, 0, x86_fpu_save_size); fpu_save->sv_87.s87_tw = 0xffff;