From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47151) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WDxgz-0003UT-Ns for qemu-devel@nongnu.org; Thu, 13 Feb 2014 09:55:10 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WDxgx-0005Xh-0U for qemu-devel@nongnu.org; Thu, 13 Feb 2014 09:55:09 -0500 Received: from mel.v6.act-europe.fr ([2a02:2ab8:224:1::a0a:d2]:43358 helo=smtp.eu.adacore.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WDxgw-0005Vs-Q3 for qemu-devel@nongnu.org; Thu, 13 Feb 2014 09:55:06 -0500 Message-ID: <52FCDCD7.3070903@adacore.com> Date: Thu, 13 Feb 2014 15:55:19 +0100 From: Fabien Chouteau MIME-Version: 1.0 References: <1392285137-10598-1-git-send-email-sebastian.huber@embedded-brains.de> <52FCB414.2050306@adacore.com> <52FCC1F3.9020205@embedded-brains.de> In-Reply-To: <52FCC1F3.9020205@embedded-brains.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2] SPARC: Add and use CPU_FEATURE_CASA List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Sebastian Huber Cc: blauwirbel@gmail.com, qemu-devel@nongnu.org On 02/13/2014 02:00 PM, Sebastian Huber wrote: > On 2014-02-13 13:01, Fabien Chouteau wrote: >> On 02/13/2014 10:52 AM, Sebastian Huber wrote: >>> The LEON3 processor has support for the CASA instruction which is >>> normally only available for SPARC V9 processors. Binutils 2.24 >>> and GCC 4.9 will support this instruction for LEON3. GCC uses it to >>> generate C11 atomic operations. >>> >>> The CAS synthetic instruction uses an ASI of 0x80. If TARGET_SPARC64 is >>> not defined use a supervisor data load/store for an ASI of 0x80 in >>> helper_ld_asi()/helper_st_asi(). >>> >> >> Hello Sebastian, >> >> If I understand correctly, the difference with V1 is that ASI 0x80. Why >> did you chose Supervisor data access against User data access? > > User data access would work also. I don't have a preference here. > >> (I cannot >> find documentation about 0x80 ASI) > > GCC will generate CAS instructions, e.g. ... > In the GNU Binutils you find: > > opcodes/sparc-opc.c:{ "cas", F3(3, 0x3c, 0)|ASI(0x80), F3(~3, ~0x3c, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, 0, v9andleon }, /* casa [rs1]ASI_P,rs2,rd */ > > This is where the 0x80 comes from. > In some leon3 doc I found this: 62.2.7 Compare and Swap instruction (CASA) LEON3 implements the SPARC V9 Compare and Swap Alternative (CASA) instruction. The CASA is enabled the interger load delay is set to 1 and the NOTAG generic is 0. The CASA operates as described in the SPARC V9 manual. The instruction is privileged but setting ASI = 0xA (user data) will allow it to be used in user mode. Which confirm privileged instruction. I will ask our GCC expert if they know where that 0x80 ASI comes from.