qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Qemu-devel] [SPARC] Branch condition problems


From: Blue Swirl
Subject: RE: [Qemu-devel] [SPARC] Branch condition problems
Date: Wed, 21 Mar 2007 19:42:20 +0100

I have noticed that the branches have some problem on the sparc target
in very rare conditions. This happens when a store double instruction
(std) is used in the delay slot, as in the following test:

  tst  %g0
  bne  9b5d8
  std  %o2, [ %o1 ]

Inserting a nop between bne and std "fixes" the problem.

tst %g0 sets the zero flag, so that the branch should never be taked. It
happens however that it is sometimes taken. This seems to be due to the
fact that T2 holds the result of the condition, and std replace T2 with
another value. flush_T2() is called before altering T2, but it does not
seems to work.

I am currently stuck at that point, I hope somebody who has better
understanding of the branch code on Sparc could fix that.

Nice analysis, thanks. Flush_T2 is probably a misnomer. One solution could be adding a new field to CPU structure for std's (and stda's) use, so that T2 does not need to be used.

_________________________________________________________________
Interest Rates near 39yr lows! $430,000 Mortgage for $1,399/mo - Calculate new payment http://www.lowermybills.com/lre/index.jsp?sourceid=lmb-9632-18466&moid=7581





reply via email to

[Prev in Thread] Current Thread [Next in Thread]