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.


|