comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon@pogner.demon.co.uk>
To: rleif@rleif.com
Cc: comp.lang.ada@ada.eu.org
Subject: Re: Ada and ASM
Date: Sat, 6 Sep 2003 08:25:00 +0100
Date: 2003-09-06T08:25:00+01:00	[thread overview]
Message-ID: <mailman.10.1062833240.295.comp.lang.ada@ada.eu.org> (raw)
In-Reply-To: <E19vQkV-0006EH-Ek@punt-3.mail.demon.net> (rleif@rleif.com)

> I want to replace the ASM call by Ada syntax. Assuming one had a
> package Asm, then I would like something like the following
> 
> A,B:Asm.register_32;
> A:=10_000;
> Asm.Move(From=>A To=>B);
> 
> The assembly operations are expressed as true Ada subprograms.

All very well if all you wanted to do was move things about. But
machines have all sorts of features, not all of which have
counterparts on each architecture to be supported. What about reading
the high-resolution clock? (rdtsc on Pentium, mftb on PowerPC).

   function Clock return Time is
      type Half is (Low, High);
      Lower, Upper : Interfaces.Unsigned_32;
      Results : array (Half) of Interfaces.Unsigned_32;
      Result : Time;
      for Result'Address use Results (Low)'Address;
   begin
      System.Machine_Code.Asm
        ("rdtsc" & ASCII.LF & ASCII.HT &
           "movl %%eax, %0"& ASCII.LF & ASCII.HT &
           "movl %%edx, %1",
         Outputs => (Interfaces.Unsigned_32'Asm_Output ("=g", Lower),
                     Interfaces.Unsigned_32'Asm_Output ("=g", Upper)),
         Clobber => "eax, edx");
      Results := (Low => Lower, High => Upper);
      return Result;
   end Clock;

is an Intel version, the PPC version (which I can't post) is quite
different in structure. For a start, you have to read the timestamp in
two bites! (on 32-bit implementations).

The major reason for using asm must be precisely to accommodate these
sorts of differences.



       reply	other threads:[~2003-09-06  7:25 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E19vQkV-0006EH-Ek@punt-3.mail.demon.net>
2003-09-06  7:25 ` Simon Wright [this message]
2003-09-06 13:14   ` Ada and ASM Marin David Condic
2003-09-06 15:25   ` Wes Groleau
     [not found] <200309051909.h85J9Flb002351@smaug.pushface.org>
2003-09-06  0:15 ` Robert C. Leif
     [not found] <E19vIlZ-0002mO-Fg@punt-3.mail.demon.net>
2003-09-05 19:09 ` Simon Wright
2003-09-05 21:38   ` Jerry van Dijk
2003-09-06  6:11     ` David Marceau
2003-09-07  7:18       ` sk
2003-09-04  7:47 luiX_
2003-09-04 11:43 ` David C. Hoos, Sr.
2003-09-04 15:07   ` Martin Krischik
2003-09-06  0:22   ` Freejack
2003-09-06  2:18     ` Jerry van Dijk
2003-09-06 12:59       ` Jeffrey Creem
2003-09-06 15:33         ` Wes Groleau
2003-09-06 17:11           ` Jerry van Dijk
2003-09-07  4:02             ` Wes Groleau
2003-09-06 17:16         ` Jerry van Dijk
2003-09-04 14:47 ` Martin Krischik
2003-09-04 15:08 ` Martin Krischik
2003-09-04 19:31 ` Leif Holmgren
2003-09-05  2:42   ` Robert C. Leif
2003-09-05 21:32   ` Jerry van Dijk
2003-09-23 10:45   ` Jacob Sparre Andersen
2003-09-05  5:46 ` Simon Wright
2003-09-05 15:44   ` Robert C. Leif
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox