The SparcV8 standard states, page 134 :
"If any of the three instructions after a write state register instruction reads any ﬁeld
that was changed by the original write state register instruction, the contents of that
ﬁeld read by that instruction are undeﬁned."
The restore instruction depends on the %WIM register, three NOPs must be inserted.
diff a/openbios-devel/arch/sparc32/wuf.S b/openbios-devel/arch/sparc32/wuf.S
@@ -121,7 +121,7 @@ fnwin_patch1: srl %t_wim, 7, %twin_tmp2
fnwin_patch2: and %twin_tmp1, 0xff, %twin_tmp1
wr %twin_tmp1, 0x0, %wim /* Make window 'I' invalid */
restore %g0, %g0, %g0 /* Restore to window 'O' */
/* Trapped from kernel, we trust that the kernel does not
Signed-off-by: Olivier DANET <odanet(a)caramail.com>