package midend.llvm.instr; import midend.llvm.value.IrValue; import backend.mips.MipsBuilder; import backend.mips.Register; import midend.llvm.type.IrInterType; import backend.mips.instr.MipsLs; import backend.mips.instr.type.MipsLsType; public class StoreInstr extends IrInstr { public StoreInstr(IrValue value, IrValue pointer) { super(IrInterType.VOID, "store", IrInstrType.STORE); addUse(value); addUse(pointer); } public IrValue getValue() { return getUse(0); } public IrValue getPointer() { return getUse(1); } public String toString() { return getName() + " " + getValue().getType() + " " + getValue().getName() + ", " + getPointer().getType() + " " + getPointer().getName(); } public void toMips() { Register valueReg = MipsBuilder.getRegister(getValue()); if (valueReg == null) { valueReg = Register.K0; } loadValueToReg(getValue(), valueReg); Register pointerReg = MipsBuilder.getRegister(getPointer()); if (pointerReg == null) { pointerReg = Register.K1; } loadValueToReg(getPointer(), pointerReg); new MipsLs(MipsLsType.SW, valueReg, pointerReg, 0); } }