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 }