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.

Reply via email to