PERFORCE change 96809 for review
Kip Macy
kmacy at FreeBSD.org
Mon May 8 00:32:00 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=96809
Change 96809 by kmacy at kmacy_storage:sun4v_rwbuf on 2006/05/08 00:31:23
re-load floating point registers on fp not available trap if bit is set in PCB
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/exception.S#49 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/exception.S#49 (text+ko) ====
@@ -591,35 +591,36 @@
.endm
.macro tl0_fp_restore
- ba,a %xcc, tl0_fp_restore
- nop
+ GET_PCB(PCB_REG) ! 3 instructions
+ ldx [%g6 + PCB_FLAGS], %g1
+ ba,pt %xcc, tl0_fp_restore
+ wr %g0, FPRS_FEF, %fprs
.align 32
.endm
.macro tl0_fp_enable
- wr %g0, FPRS_FEF, %fprs
+ GET_PCB(PCB_REG) ! 3 instructions
+ ldx [PCB_REG + PCB_FLAGS], %g1
+ andcc %g1, PCB_FEF, %g0
+ bnz,pt %xcc, tl0_fp_restore
+ wr %g0, FPRS_FEF, %fprs
retry
.align 32
.endm
ENTRY(tl0_fp_restore)
- GET_PCB(PCB_REG)
-
- ldx [%g6 + PCB_FLAGS], %g1
andn %g1, PCB_FEF, %g1
stx %g1, [%g6 + PCB_FLAGS]
-
- wr %g0, FPRS_FEF, %fprs
- wr %g0, ASI_BLK_S, %asi
- ldda [PCB_REG + PCB_UFP + (0 * 64)] %asi, %f0
- ldda [PCB_REG + PCB_UFP + (1 * 64)] %asi, %f16
- ldda [PCB_REG + PCB_UFP + (2 * 64)] %asi, %f32
- ldda [PCB_REG + PCB_UFP + (3 * 64)] %asi, %f48
- membar #Sync
- done
+
+ ldd [PCB_REG + PCB_UFP + (0 * 64)], %f0
+ ldd [PCB_REG + PCB_UFP + (1 * 64)], %f16
+ ldd [PCB_REG + PCB_UFP + (2 * 64)], %f32
+ ldd [PCB_REG + PCB_UFP + (3 * 64)], %f48
+ retry
END(tl0_fp_restore)
.macro tl1_insn_excptn
+ nop
.align 32
.endm
More information about the p4-projects
mailing list