Incompatibilities between TAO100 and TAOmille (xtc)

   This note describes APEmille-specific restrictions and incompatibilities of the xtc TAO Compiler with respect to TAO100.

   For APEmille-specific syntax extensions see TAOmille-newsyntax.html.

write / read start : count   for complex data types:

In TAO100 the item counter "count" is  interpreted always *)  as the number of (single-precision) real words to be written/read, while the data type of "start" may change the output format.
For instance:
 
complex c[10]
write  c[0] : 3
complex c[10]
write  c[0].re : 3
complex c[10]
write  c[0].im : 3

prints:
 
( c[0].re  ,  c[0].im )
 
 
c[0].re
c[0].im
c[1].re
c[0].im
c[1].re
c[1].im

*) Note:  If the format is NOT binary and the start element is a complex  variable (i.e. without. re or .im),  odd count values are interpreted as the nearest smaller even value (in the above example  count=3 prints only 2 real words as 1 complex number).

In TAOmille not only the format depends on the datatype used before the colon ":", but also the interpretation of the item counter "count" depends on the datatype of "start".

For instance
 
complex c[10]
write  c[0] : 3
complex c[10]
write  c[0].re : 3

prints:
 
( c[0].re  ,  c[0].im )
( c[1].re  ,  c[1].im )
( c[2].re  ,  c[2].im )
c[0].re
c[0].im
c[1].re

 

Note: Programs compiled with TAO100 and TAOmille will only print/read the same number of words if the start elemet is specified in terms of a single-precision real data type (and therefore, the counter refers to the number of real data words).



Remote Memory Access

In APEmille remote offsets (like right, etc.) are only supported (by hardware) on the right-hand side of an assignment, while on APE100 remote offsets were possible on both sides.

For instance, the following statement is incorrect on APEmille:

a[right] = x
where the remote offset is used on the left-hand side of the assignment (and hence it would generate a remote communication for a data transfer from Register to Memory, which is not supported by the APEmille hardware)

Note: TAOmille does not raise an error if a remote offset is used (explicitly or implicitly in an integer variable) on the left-hand side of an assignment, and the program will crash at execution time.



Indices of matrix types or arrays:

In TAO100 remote offsets (like right, etc.) are only supported in the right-most index of a matrix type or an array, while in TAOmille they should work correctly for any index.



Subroutine arguments:

Explicit reference to Real and Imaginary part of complex types is not (yet) allowed in subroutine arguments. Therefore, a subroutine declared as
subroutine sub(real x)
not be called as
call sub(c[i].re)
call sub(c[i].im)
where c is declared as a complex array.

rot( integer, integer) and shift operations:

 
Instruction TAO100 TAOmille
rot( i, n) Cyclic rotation of i by n bit positions LEFT

Undocumented instruction!

Cyclic rotation of i by n bit positions RIGHT

Incompatible with TAO100!

lsh( i, n) Not supported! Logical shift of i by n bit positions RIGHT: i >> n 
ash( i, n) Not supported! Arithmetic shift of i by n bit positions RIGHT: i >> n 
shift( i, n) Logic shift of i by n bit positions LEFT: i << n 

Undocumented instruction!

Logic shift of i by n bit positions LEFT :  i << n 

Less efficient than lsh on APEmille!

ashift( i, n) Arithmetic shift of i by n bit positions LEFT:  i << n 

Undocumented instruction!

Arithmetic shift of i by n bit positions LEFT:  i << n 

Less efficient than ash APEmille!



Please, report any other incompatibilities not listed here to apeadm@ifh.de.
APE Group -- DESY Zeuthen 6/2000

$Id: TAOmille-100.html,v 1.1 2001/04/26 08:58:36 noe Exp $