comp.lang.ada
 help / color / mirror / Atom feed
From: Erik Baigar <erik@baigar.de>
Subject: Endian-problem/bug with system.bit_ops (gnat3.15)...
Date: Sat, 15 Mar 2008 08:58:12 +0100
Date: 2008-03-15T08:58:12+01:00	[thread overview]
Message-ID: <47DB8194.62FE76B0@baigar.de> (raw)


Dear Ada users,

in porting an application from Meridian's Ada83 to gnat3.15 I
encountered
some issues with the system.bit_ops. They (especially the Bit_And which 
I used) show behaviour which depends on the processor used:

The code contains expressions of the form
 
  Bit_And ( MEMORY (OPERAND_ADDRESS)'Address,18, ACCUMULATOR'Address,18,
            ACCUMULATOR'Address);

which are used in the simulation of a vintage processor. I used length
18 here since the processor has 18-bit registers. This code works well
on the Intel (little endian) platform but fails on SPARC (big endian).
It required some investigation to locate the problem, but replacing 
the length 18 by 32 (all are integers here), i.e. using

  Bit_And ( MEMORY (OPERAND_ADDRESS)'Address,32, ACCUMULATOR'Address,32,
            ACCUMULATOR'Address);

solved the problem and the code now runs on little and big endian 
systems. I know, system.bit_ops are version dependent and non portable,
but I'd not expect behaviour depending on the target system at the 
first glance... 

   Regards,

      Erik.



             reply	other threads:[~2008-03-15  7:58 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-15  7:58 Erik Baigar [this message]
2008-03-15 12:22 ` Endian-problem/bug with system.bit_ops (gnat3.15) Niklas Holsti
2008-03-15 18:53   ` Erik Baigar
2008-03-15 19:26     ` Niklas Holsti
2008-03-15 19:45       ` Erik Baigar
replies disabled

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