diff options
author | jake <jake@FreeBSD.org> | 2002-01-01 20:15:39 +0000 |
---|---|---|
committer | jake <jake@FreeBSD.org> | 2002-01-01 20:15:39 +0000 |
commit | 30c8fe6f8c9855ed976faa14f066c0575da9a2de (patch) | |
tree | dc918dc43d669f2fbfbacfa4ca9d5845f8fab2bc | |
parent | cd7fe8e633ca4f9bc70c89b2dac09d0a6a6d4ca8 (diff) | |
download | FreeBSD-src-30c8fe6f8c9855ed976faa14f066c0575da9a2de.zip FreeBSD-src-30c8fe6f8c9855ed976faa14f066c0575da9a2de.tar.gz |
Add a soft trap for restoring the fpu registers from the pcb.
-rw-r--r-- | sys/sparc64/sparc64/exception.S | 12 | ||||
-rw-r--r-- | sys/sparc64/sparc64/exception.s | 12 |
2 files changed, 24 insertions, 0 deletions
diff --git a/sys/sparc64/sparc64/exception.S b/sys/sparc64/sparc64/exception.S index 1770b09..6648f1d 100644 --- a/sys/sparc64/sparc64/exception.S +++ b/sys/sparc64/sparc64/exception.S @@ -361,6 +361,18 @@ .endr .endm + .macro tl0_fp_restore + wr %g0, FPRS_FEF, %fprs + wr %g0, ASI_BLK_S, %asi + ldda [PCB_REG + PCB_FPSTATE + FP_FB0] %asi, %f0 + ldda [PCB_REG + PCB_FPSTATE + FP_FB1] %asi, %f16 + ldda [PCB_REG + PCB_FPSTATE + FP_FB2] %asi, %f32 + ldda [PCB_REG + PCB_FPSTATE + FP_FB3] %asi, %f48 + membar #Sync + done + .align 32 + .endm + .macro tl0_insn_excptn wr %g0, ASI_IMMU, %asi rdpr %tpc, %g3 diff --git a/sys/sparc64/sparc64/exception.s b/sys/sparc64/sparc64/exception.s index 1770b09..6648f1d 100644 --- a/sys/sparc64/sparc64/exception.s +++ b/sys/sparc64/sparc64/exception.s @@ -361,6 +361,18 @@ .endr .endm + .macro tl0_fp_restore + wr %g0, FPRS_FEF, %fprs + wr %g0, ASI_BLK_S, %asi + ldda [PCB_REG + PCB_FPSTATE + FP_FB0] %asi, %f0 + ldda [PCB_REG + PCB_FPSTATE + FP_FB1] %asi, %f16 + ldda [PCB_REG + PCB_FPSTATE + FP_FB2] %asi, %f32 + ldda [PCB_REG + PCB_FPSTATE + FP_FB3] %asi, %f48 + membar #Sync + done + .align 32 + .endm + .macro tl0_insn_excptn wr %g0, ASI_IMMU, %asi rdpr %tpc, %g3 |