diff options
Diffstat (limited to 'sys/arch/powerpc64/powerpc64/trap.c')
-rw-r--r-- | sys/arch/powerpc64/powerpc64/trap.c | 8 |
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; |