summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjake <jake@FreeBSD.org>2002-01-01 20:15:39 +0000
committerjake <jake@FreeBSD.org>2002-01-01 20:15:39 +0000
commit30c8fe6f8c9855ed976faa14f066c0575da9a2de (patch)
treedc918dc43d669f2fbfbacfa4ca9d5845f8fab2bc
parentcd7fe8e633ca4f9bc70c89b2dac09d0a6a6d4ca8 (diff)
downloadFreeBSD-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.S12
-rw-r--r--sys/sparc64/sparc64/exception.s12
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
OpenPOWER on IntegriCloud