1 package com.tapina.robe.runtime.instruction; 2 3 import com.tapina.robe.runtime.CPU; 4 5 import java.io.Writer; 6 import java.io.IOException; 7 8 /*** 9 * Created by IntelliJ IDEA. 10 * User: gareth 11 * Date: Sep 2, 2003 12 * Time: 4:55:29 PM 13 */ 14 public final class AutoPreIndexedAddressSource extends PreIndexedAddressSource { 15 public AutoPreIndexedAddressSource(int baseRegister, Operand offset) { 16 super(baseRegister, offset); 17 } 18 19 public final int getTransferAddress(CPU cpu) { 20 final int address = super.getTransferAddress(cpu); 21 if (baseRegister != 15) { 22 cpu.R[baseRegister] = address; 23 } else { 24 cpu.setPC(address); 25 } 26 return address; 27 } 28 29 public void dumpJavaSource(String varName, Writer out) throws IOException { 30 offset.dumpJavaSource("offset", out); 31 out.write("final int " + varName + " = "); 32 if (baseRegister == 15) { 33 out.write("cpu.getPC()"); 34 } else { 35 out.write("R[" + baseRegister + "]"); 36 } 37 out.write(" + offset;\n"); 38 if (baseRegister != 15) { 39 out.write("R[" + baseRegister + "] = " + varName + ";\n"); 40 } else { 41 out.write("cpu.setPC(" + varName + ");\n"); 42 } 43 } 44 }