summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1997-01-04 13:56:18 +0000
committerbde <bde@FreeBSD.org>1997-01-04 13:56:18 +0000
commit96974e95d6e49a86b20f315327c9896dfc8b3b97 (patch)
tree9d6b867af1e7695235777d287bcd8946cfa609af /sys
parent1fc3295f28ba3496ff5789b449cc7f853b4b38dd (diff)
downloadFreeBSD-src-96974e95d6e49a86b20f315327c9896dfc8b3b97.zip
FreeBSD-src-96974e95d6e49a86b20f315327c9896dfc8b3b97.tar.gz
Fixed context switching of FPU state after a fault in
i586_optimized_copyin/out.
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/support.S23
-rw-r--r--sys/amd64/amd64/support.s23
-rw-r--r--sys/i386/i386/support.s23
3 files changed, 60 insertions, 9 deletions
diff --git a/sys/amd64/amd64/support.S b/sys/amd64/amd64/support.S
index 6c945e4..c996b46 100644
--- a/sys/amd64/amd64/support.S
+++ b/sys/amd64/amd64/support.S
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: support.s,v 1.44 1996/11/12 14:54:16 bde Exp $
+ * $Id: support.s,v 1.45 1996/11/29 14:32:30 bde Exp $
*/
#include "opt_cpu.h"
@@ -893,8 +893,6 @@ ENTRY(fastmove)
pushl %ebp
movl %esp,%ebp
subl $PCB_SAVEFPU_SIZE+3*4,%esp
- movl _curpcb,%eax
- movl $fastmove_fault,PCB_ONFAULT(%eax)
movl 8(%ebp),%ecx
cmpl $63,%ecx
@@ -944,6 +942,8 @@ ENTRY(fastmove)
/* npxproc = curproc; */
movl _curproc,%eax
movl %eax,_npxproc
+ movl _curpcb,%eax
+ movl $fastmove_fault,PCB_ONFAULT(%eax)
4:
movl %ecx,-12(%ebp)
cmpl $1792,%ecx
@@ -1024,6 +1024,9 @@ fastmove_loop:
ALIGN_TEXT
fastmove_tail:
+ movl _curpcb,%eax
+ movl $fastmove_tail_fault,PCB_ONFAULT(%eax)
+
movb %cl,%al
shrl $2,%ecx /* copy longword-wise */
cld
@@ -1040,6 +1043,20 @@ fastmove_tail:
ALIGN_TEXT
fastmove_fault:
+ movl _curpcb,%edi
+ addl $PCB_SAVEFPU,%edi
+ movl %esp,%esi
+ cld
+ movl $PCB_SAVEFPU_SIZE>>2,%ecx
+ rep
+ movsl
+
+ smsw %ax
+ orb $CR0_TS,%al
+ lmsw %ax
+ movl $0,_npxproc
+
+fastmove_tail_fault:
movl %ebp,%esp
popl %ebp
addl $8,%esp
diff --git a/sys/amd64/amd64/support.s b/sys/amd64/amd64/support.s
index 6c945e4..c996b46 100644
--- a/sys/amd64/amd64/support.s
+++ b/sys/amd64/amd64/support.s
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: support.s,v 1.44 1996/11/12 14:54:16 bde Exp $
+ * $Id: support.s,v 1.45 1996/11/29 14:32:30 bde Exp $
*/
#include "opt_cpu.h"
@@ -893,8 +893,6 @@ ENTRY(fastmove)
pushl %ebp
movl %esp,%ebp
subl $PCB_SAVEFPU_SIZE+3*4,%esp
- movl _curpcb,%eax
- movl $fastmove_fault,PCB_ONFAULT(%eax)
movl 8(%ebp),%ecx
cmpl $63,%ecx
@@ -944,6 +942,8 @@ ENTRY(fastmove)
/* npxproc = curproc; */
movl _curproc,%eax
movl %eax,_npxproc
+ movl _curpcb,%eax
+ movl $fastmove_fault,PCB_ONFAULT(%eax)
4:
movl %ecx,-12(%ebp)
cmpl $1792,%ecx
@@ -1024,6 +1024,9 @@ fastmove_loop:
ALIGN_TEXT
fastmove_tail:
+ movl _curpcb,%eax
+ movl $fastmove_tail_fault,PCB_ONFAULT(%eax)
+
movb %cl,%al
shrl $2,%ecx /* copy longword-wise */
cld
@@ -1040,6 +1043,20 @@ fastmove_tail:
ALIGN_TEXT
fastmove_fault:
+ movl _curpcb,%edi
+ addl $PCB_SAVEFPU,%edi
+ movl %esp,%esi
+ cld
+ movl $PCB_SAVEFPU_SIZE>>2,%ecx
+ rep
+ movsl
+
+ smsw %ax
+ orb $CR0_TS,%al
+ lmsw %ax
+ movl $0,_npxproc
+
+fastmove_tail_fault:
movl %ebp,%esp
popl %ebp
addl $8,%esp
diff --git a/sys/i386/i386/support.s b/sys/i386/i386/support.s
index 6c945e4..c996b46 100644
--- a/sys/i386/i386/support.s
+++ b/sys/i386/i386/support.s
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: support.s,v 1.44 1996/11/12 14:54:16 bde Exp $
+ * $Id: support.s,v 1.45 1996/11/29 14:32:30 bde Exp $
*/
#include "opt_cpu.h"
@@ -893,8 +893,6 @@ ENTRY(fastmove)
pushl %ebp
movl %esp,%ebp
subl $PCB_SAVEFPU_SIZE+3*4,%esp
- movl _curpcb,%eax
- movl $fastmove_fault,PCB_ONFAULT(%eax)
movl 8(%ebp),%ecx
cmpl $63,%ecx
@@ -944,6 +942,8 @@ ENTRY(fastmove)
/* npxproc = curproc; */
movl _curproc,%eax
movl %eax,_npxproc
+ movl _curpcb,%eax
+ movl $fastmove_fault,PCB_ONFAULT(%eax)
4:
movl %ecx,-12(%ebp)
cmpl $1792,%ecx
@@ -1024,6 +1024,9 @@ fastmove_loop:
ALIGN_TEXT
fastmove_tail:
+ movl _curpcb,%eax
+ movl $fastmove_tail_fault,PCB_ONFAULT(%eax)
+
movb %cl,%al
shrl $2,%ecx /* copy longword-wise */
cld
@@ -1040,6 +1043,20 @@ fastmove_tail:
ALIGN_TEXT
fastmove_fault:
+ movl _curpcb,%edi
+ addl $PCB_SAVEFPU,%edi
+ movl %esp,%esi
+ cld
+ movl $PCB_SAVEFPU_SIZE>>2,%ecx
+ rep
+ movsl
+
+ smsw %ax
+ orb $CR0_TS,%al
+ lmsw %ax
+ movl $0,_npxproc
+
+fastmove_tail_fault:
movl %ebp,%esp
popl %ebp
addl $8,%esp
OpenPOWER on IntegriCloud