copyTable method
void
copyTable()
Implementation
void copyTable() {
//Debugger.verbose('${pcHex(-1)} [copy_table]');
var operands = visitOperandsVar(3, false);
int t1Addr = operands[0].value!;
var t2Addr = operands[1].value;
var size = operands[2].value;
if (t2Addr == 0) {
//write size of 0's into t1
mem.storew(t1Addr, size! >> 1);
t1Addr += 2;
for (int i = 0; i < size; i++) {
mem.storeb(t1Addr++, 0);
}
} else {
var absSize = size!.abs();
var t1End = t1Addr+ mem.loadw(t1Addr);
if (t2Addr! >= t1Addr && t2Addr <= t1End) {
//overlap copy...
Debugger.todo(
'implement overlap copy: t1 end: 0x${(t1Addr + mem.loadw(t1Addr)).toRadixString(16)}, t2 start: 0x${t2Addr.toRadixString(16)}');
} else {
//copy
Debugger.debug('>>> Copying $absSize bytes.');
for (int i = 0; i < absSize; i++) {
var offset = 2 + i;
mem.storeb(t2Addr + offset, mem.loadb(t1Addr + offset));
}
mem.storew(t2Addr, absSize);
}
}
}