All of lore.kernel.org
 help / color / mirror / Atom feed
From: Olivier Danet <odanet@caramail.com>
To: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>,
	qemu-devel <qemu-devel@nongnu.org>
Cc: Blue Swirl <blauwirbel@gmail.com>, Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] target-sparc has inverse cwp logic for SAVE/RESTORE?
Date: Sun, 18 May 2014 18:06:18 +0200	[thread overview]
Message-ID: <5378DA7A.2070902@caramail.com> (raw)
In-Reply-To: <5378AC30.9090900@ilande.co.uk>

On 18/05/2014 14:48, Mark Cave-Ayland wrote:
> Hi all,
> 
> I've been working on debugging a window-related OpenBIOS issue and noticed that the cwp register logic in QEMU appears to be backwards according to the SPARCv9 specification. From sections 6.3.6.1 and 6.3.6.2:
> 
> "The SAVE instruction allocates a new register window and saves the caller’s register window by incrementing the CWP register."
> 
> "The RESTORE instruction restores the previous register window by decrementing the CWP register."
> 
> In target-sparc/win_helper.c the logic in helper_save() and helper_restore() is inverted, i.e. executing SAVE decrements cwp while executing RESTORE increments cwp.
> 
> The surprise here was that executing SAVE when cwp == 0 changed cwp to 7 rather than 1. AFAICT there should be no functional difference, but it would make things less confusing when debugging window traps if the logic from the specification was followed. Does anyone know why this is currently done this way?
> 
> 
> ATB,
> 
> Mark.
> 
The problem may be related to the fact that the 32bits SPARCv8 and 64bits SPARCv9 work in opposite directions !

SparcV9 standard, page 360/399 :
The SPARC-V9 CWP register is incremented during a SAVE instruction and decremented during
a RESTORE instruction. Although this is the opposite of PSR.CWP’s behavior in SPARC-V8, the
only software it should affect is a few trap handlers that operate in privileged mode, and that must
be rewritten for SPARC-V9 anyway. This change will have no effect on nonprivileged software.


Olivier

  reply	other threads:[~2014-05-18 16:04 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-18 12:48 [Qemu-devel] target-sparc has inverse cwp logic for SAVE/RESTORE? Mark Cave-Ayland
2014-05-18 16:06 ` Olivier Danet [this message]
2014-05-19 10:56   ` Mark Cave-Ayland
2014-05-24  6:26     ` Blue Swirl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5378DA7A.2070902@caramail.com \
    --to=odanet@caramail.com \
    --cc=blauwirbel@gmail.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.