summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/arch/powerpc64/powerpc64/trap.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/arch/powerpc64/powerpc64/trap.c b/sys/arch/powerpc64/powerpc64/trap.c
index 46eecf2d8aa..a0cd9cb12ec 100644
--- a/sys/arch/powerpc64/powerpc64/trap.c
+++ b/sys/arch/powerpc64/powerpc64/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.26 2020/07/10 18:34:24 kettenis Exp $ */
+/* $OpenBSD: trap.c,v 1.27 2020/07/11 12:17:59 kettenis Exp $ */
/*
* Copyright (c) 2020 Mark Kettenis <kettenis@openbsd.org>
@@ -267,13 +267,15 @@ trap(struct trapframe *frame)
break;
case EXC_FPU|EXC_USER:
- restore_vsx(p);
+ if ((frame->srr1 & (PSL_FP|PSL_VEC|PSL_VSX)) == 0)
+ restore_vsx(p);
curpcb->pcb_flags |= PCB_FP;
frame->srr1 |= PSL_FP;
break;
case EXC_VEC|EXC_USER:
- restore_vsx(p);
+ if ((frame->srr1 & (PSL_FP|PSL_VEC|PSL_VSX)) == 0)
+ restore_vsx(p);
curpcb->pcb_flags |= PCB_VEC;
frame->srr1 |= PSL_VEC;
break;