44 lines
1.3 KiB
Java
Executable File
44 lines
1.3 KiB
Java
Executable File
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);
|
|
}
|
|
}
|