package de.fuberlin.projectF.CodeGenerator.model; import java.util.ArrayList; public class VariableOld { public String type; public String name; ArrayList<RegisterAddress> regAddresses; ArrayList<MMXRegisterAddress> mmxAddresses; ArrayList<StackAddress> stackAddresses; int size; public VariableOld() { this("undefined", ""); } public VariableOld(String type, String name) { this.type = type; this.name = name; regAddresses = new ArrayList<RegisterAddress>(); mmxAddresses = new ArrayList<MMXRegisterAddress>(); stackAddresses = new ArrayList<StackAddress>(); if (this.type.equals("i32")) this.size = 4; else if(this.type.equals("double")) this.size = 8; } public VariableOld(String type, int size, String name) { this(type, name); this.size = size; this.name = name; } // Konstruktor für neue Variable mit impliziter Stackadresse public VariableOld(String type, int size, int stackAddress, String name) { this(type, name); this.size = size; this.name = name; stackAddresses.add(new StackAddress(stackAddress)); } // Konstruktor für neue Variable mit Registeradresse public VariableOld(String type, RegisterAddress reg, String name) { this(type, name); regAddresses.add(reg); } public VariableOld(String type, MMXRegisterAddress reg, String name) { this(type, name); mmxAddresses.add(reg); } public void addStackAddress(StackAddress stackAddress) { if(stackAddresses.isEmpty()) { System.out.println("is empty"); } else { System.out.println("already in: " + stackAddresses.get(0).getFullName()); } stackAddresses.add(stackAddress); } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public String getAddress() { if (!regAddresses.isEmpty()) return getRegAddress().getFullName(); else if (!mmxAddresses.isEmpty()) { return getRegAddress().getFullName(); } return stackAddresses.get(0).getFullName(); } public String getAddress(int offset) { if (!regAddresses.isEmpty()) return getRegAddress().getFullName(); else if (!mmxAddresses.isEmpty()) return getRegAddress().getFullName(); return stackAddresses.get(0).getFullName(offset); } public Address getRegAddress() { System.out.println("lffuzfuz" + this.type); if(this.type.equals("double*") || this.type.equals("double")) return mmxAddresses.get(0); return regAddresses.get(0); } public boolean onlyInReg() { return stackAddresses.size() == 0; } public boolean onStack() { return !stackAddresses.isEmpty(); } public boolean inReg(int i) { for (RegisterAddress r : regAddresses) if (r.regNumber == i) return true; return false; } public boolean inMMXReg(int i) { for (MMXRegisterAddress r : mmxAddresses) if (r.regNumber == i) return true; return false; } public boolean inMMXReg() { return !mmxAddresses.isEmpty(); } }