Files
MY_COMPILER/midend/llvm/instr/StoreInstr.java
2025-12-12 20:14:00 +08:00

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);
}
}