MOVE16 (Ax)+,(Ay)+ MOVE16 (xxx).L,(An) MOVE16 (An)+,(xxx).L MOVE16 (xxx).L,(An)+ MOVE16 (An),(xxx).L Size = (Line)
Data is transferred between a source and destination line, each aligned to 16 byte boundaries (address $XXXXXXX0). Transfers use burst reads and writes, making them faster on CPU systems (e.g. Warp Engine and Cyberstorm) which support such bursts. Note that Commodore's 3640 board performs 'bursts' as a succession of slow 32 bit transfers, so it does not gain the advantage Motorola intended for long word transfers after the first in each line.
This instruction is only implemented on the 68040 and 68060.
LEA $810000F,A0 MOVE16 (A0)+,$8000002
The line at address $8100000 is read into a temporary holding register by a burst read starting at address $8100000. Address values of $8100000 to $810000F in A0 all cause the same line to be read, but potentially starting at different long words. The line is then written to addresses $8000000 through $800000F. At the end 16 is added to be address in A0, making it $800001F.
If the source is in the data cache it is read from there; if not, the value is read from main memory, but is NOT put into the cache.
The write to the destination is not allocated a line in the cache, even if the target address is copyback cacheable. This is because MOVE16 is intended for large memory moves, where the data that has moved is unlikely to be immediately needed for further processing.
Postincrement source and destination ----------------------------------------------------------------- |15 |14 |13 |12 |11 |10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |---|---|---|---|-----------|-----------|---|---|---|-----------| | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |Ax REGISTER| |---------------------------------------------------------------| | 1 |Ay REGISTER| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ----------------------------------------------------------------- Ax is the source address register, Ay points to the destination. Absolute long source or destination address ----------------------------------------------------------------- |15 |14 |13 |12 |11 |10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |---|---|---|---|-----------|-----------|---|---|---|-----------| | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |OP-MODE|Ay REGISTER| |---------------------------------------------------------------| | High Order word of absolute address | |---------------------------------------------------------------| | Low Order word of absolute address | ----------------------------------------------------------------- OP-MODE 00 -> MOVE16 (Ay)+,(xxx).L 01 -> MOVE16 (xxx).L,(Ay)+ 00 -> MOVE16 (Ay)+,(xxx).L 01 -> MOVE16 (xxx).L,(Ay)+ Ay register specifies the number of the address register which takes part in indirect addressing with or without autoincrement. The second and third words of the instruction specify the absolute address used as a source or destination (depending on the OP-MODE).