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);
    }
  }
}