Data Movement
Memory-to-memory data transfer instructions
Data movement instructions enable efficient data transfer between different memory units in the architecture, supporting bulk memory operations for array manipulation and data reorganization.
MEM_CPY
Performs a data transfer between memory units with flexible addressing modes. The instruction supports optional immediate offset addressing for both source and destination through opcode variants.
MEM_CPY rs, rt, rd, immMEM[dest_addr] ← MEM[src_addr] (GRF[rt] bytes)Addressing Modes
The opcode bits X and Y control immediate offset addressing for source and destination:
X=0src_addr = GRF[rs]X=1src_addr = GRF[rs] + immY=0dest_addr = GRF[rd]Y=1dest_addr = GRF[rd] + immOperation Flags
The MEM_CPY instruction uses optional flags to enable offset addressing for source and/or destination addresses:
Source OffsetDestination OffsetFlag Combinations:
| Flags | Opcode | Source Address | Destination Address |
|---|---|---|---|
| (none) | 110000 | GRF[rs] | GRF[rd] |
DST_O | 110001 | GRF[rs] | GRF[rd] + imm |
SRC_O | 110010 | GRF[rs] + imm | GRF[rd] |
SRC_O, DST_O | 110011 | GRF[rs] + imm | GRF[rd] + imm |
The transfer size is specified in bytes via GRF[rt]. When both flags are set, the same immediate offset value is used for both source and destination addresses.
Examples
; Basic memory-to-memory copy (512 bytes)
G_LI r1, 0x1000 ; Source base address
G_LI r3, 0x2000 ; Destination base address
G_LI r2, 512 ; Transfer size (bytes)
MEM_CPY r3, r1, r2, 0 ; Copy MEM[0x1000..0x11FF] → MEM[0x2000..0x21FF]
; Copy with destination immediate offset
G_LI r1, 0x1000 ; Source base
G_LI r3, 0x2000 ; Destination base
G_LI r2, 256 ; Size
MEM_CPY r3, r1, r2, 1024, DST_O ; Copy MEM[0x1000..0x10FF] → MEM[0x2400..0x24FF]
; Copy with both immediate offsets (buffer management)
G_LI r1, 0x8000 ; Source buffer base
G_LI r3, 0x9000 ; Destination buffer base
G_LI r2, 128 ; Transfer 128 bytes
MEM_CPY r3, r1, r2, 1024, SRC_O, DST_O ; Copy MEM[0x8400..0x8480) → MEM[0x9400..0x9480)Last updated on