1 package com.tapina.robe.runtime.instruction;
2
3 import com.tapina.robe.runtime.Instruction;
4 import com.tapina.robe.runtime.Condition;
5 import com.tapina.robe.runtime.Environment;
6 import com.tapina.robe.runtime.CPU;
7
8 import java.io.Writer;
9 import java.io.IOException;
10
11 /***
12 * Created by IntelliJ IDEA.
13 * User: gareth
14 * Date: Sep 2, 2003
15 * Time: 8:07:33 AM
16 */
17 public class MultiplyInstruction extends Instruction {
18 final int Rd;
19 final int Rs, Rm;
20 final boolean setConditionCodes;
21
22 public MultiplyInstruction(Condition condition, int destinationRegister, int factorRegister1,
23 int factorRegister2, boolean setConditionCodes) {
24 super(condition);
25 this.Rd = destinationRegister;
26 this.Rs = factorRegister1;
27 this.Rm = factorRegister2;
28 this.setConditionCodes = setConditionCodes;
29 }
30
31 protected final boolean execute(Environment environment) {
32 final CPU cpu = environment.getCpu();
33 final int[] R = cpu.R;
34
35 if (Rd != 15) {
36 calculate(R);
37
38 if (setConditionCodes) {
39 Operator.setZNFlags(R[Rd], cpu);
40 }
41 }
42 return false;
43 }
44
45 void calculate(final int[] R) {
46 R[Rd] = R[Rm] * R[Rs];
47 }
48
49 public void dumpJavaSourceUnconditional(Writer out) throws IOException {
50 if (Rd != 15) {
51 out.write("R[" + Rd + "] = R[" + Rm + "] * R[" + Rs + "];\n");
52 if (setConditionCodes) {
53 out.write("Operator.setZNFlags(R[" + Rd + "], cpu);\n");
54 }
55 }
56 }
57 }