From: Simon Wright <simon@pushface.org>
Subject: Re: Forcing GNAT to use 32-bit load/store instructions on ARM?
Date: Tue, 01 Jul 2014 18:18:10 +0100
Date: 2014-07-01T18:18:10+01:00 [thread overview]
Message-ID: <ly4mz1c819.fsf@pushface.org> (raw)
In-Reply-To: lou87q$7u2$2@dont-email.me
Simon Clubley <clubley@remove_me.eisner.decus.org-Earth.UFP> writes:
> On 2014-06-30, Jeffrey Carter <spam.jrcarter.not@spam.not.acm.org> wrote:
>> On 06/30/2014 03:11 PM, daniel.dmk@googlemail.com wrote:
>>>
>>> Does anyone know how I can force GNAT to generate the appropriate
>>> instructions?
>>
>> If you need specific machine instructions, you should use a
>> machine-code insertion.
>>
>
> The issue here is that Pragma Atomic should have given him the guarantee
> he needs.
>
> There is a place for specific assembly language insertions (for example,
> on ARM when you need to access the CPSR register), but that should not
> be required here.
Just for fun I tried this on Intel (x86_64) with GNAT GPL 2014 and GCC
4.9.0 on this:
procedure Atom is
type R is record
A : Boolean;
B : Boolean;
end record with Size => 32;
for R use record
A at 0 range 0 .. 0;
B at 0 range 31 .. 31;
end record;
V : R with Atomic, Import, Convention => C, External_Name => "foo";
begin
V := (A => True, B => True);
V.A := False;
end Atom;
and found that the compiler did a reaonable thing:
movl _T3b.2569(%rip), %edx
movq _foo@GOTPCREL(%rip), %rax
movl %edx, (%rax)
mfence
movq _foo@GOTPCREL(%rip), %rax
movl (%rax), %edx
andl $-2, %edx
movl %edx, (%rax)
.const
.align 2
_T3b.2569:
.byte 1
.space 2
.byte 128
next prev parent reply other threads:[~2014-07-01 17:18 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-30 22:11 Forcing GNAT to use 32-bit load/store instructions on ARM? daniel.dmk
2014-06-30 23:41 ` Jeffrey Carter
2014-07-01 12:06 ` Simon Clubley
2014-07-01 15:44 ` Niklas Holsti
2014-07-01 17:26 ` Simon Clubley
2014-07-01 17:18 ` Simon Wright [this message]
2014-07-01 19:43 ` Simon Wright
2014-07-01 17:28 ` Jeffrey Carter
2014-07-01 0:55 ` anon
2014-07-01 4:30 ` Niklas Holsti
2014-07-01 8:11 ` Dmitry A. Kazakov
2014-07-01 12:09 ` Simon Clubley
2014-07-01 12:20 ` Dmitry A. Kazakov
2014-07-01 17:00 ` Simon Clubley
2014-07-01 19:36 ` Dmitry A. Kazakov
2014-07-01 20:08 ` Simon Clubley
2014-07-02 22:24 ` Randy Brukardt
2014-07-06 20:40 ` MatthiasR
2014-07-07 0:25 ` Simon Clubley
2014-07-07 22:38 ` Randy Brukardt
2014-07-08 6:51 ` Simon Wright
2014-07-10 11:47 ` Simon Wright
2014-07-10 13:06 ` Simon Clubley
2014-07-11 18:05 ` Simon Wright
2014-07-11 20:22 ` Simon Clubley
2014-07-08 8:50 ` Brian Drummond
2014-07-08 12:12 ` Simon Clubley
2014-07-08 13:26 ` G.B.
2014-07-08 17:13 ` Simon Clubley
2014-07-08 15:36 ` Adam Beneschan
2014-07-08 15:40 ` Adam Beneschan
2014-07-08 20:34 ` Randy Brukardt
2014-07-09 7:31 ` Dmitry A. Kazakov
2014-07-10 0:11 ` Simon Clubley
2014-07-20 11:35 ` MatthiasR
2014-07-20 15:49 ` Simon Clubley
2014-07-26 11:05 ` MatthiasR
2014-08-10 11:20 ` MatthiasR
2014-07-01 12:03 ` Simon Clubley
2014-07-01 19:52 ` daniel.dmk
2014-07-01 20:40 ` Simon Clubley
2014-07-01 20:55 ` Simon Clubley
2014-07-01 21:01 ` Niklas Holsti
2014-07-01 21:20 ` Simon Clubley
2014-07-01 22:38 ` Niklas Holsti
2014-07-02 16:49 ` Simon Clubley
2014-07-01 21:55 ` daniel.dmk
2014-07-02 7:30 ` Simon Wright
2014-07-02 18:52 ` daniel.dmk
2014-07-04 23:51 ` Niklas Holsti
2014-07-05 0:18 ` Niklas Holsti
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox