mips without optimize
This commit is contained in:
59
midend/llvm/instr/LoadInstr.java
Normal file → Executable file
59
midend/llvm/instr/LoadInstr.java
Normal file → Executable file
@@ -1,20 +1,39 @@
|
||||
package midend.llvm.instr;
|
||||
|
||||
import midend.llvm.type.IrPointerType;
|
||||
import midend.llvm.value.IrValue;
|
||||
|
||||
public class LoadInstr extends IrInstr {
|
||||
public LoadInstr(IrValue pointer, String name) {
|
||||
super(((IrPointerType) pointer.getType()).getPointeeType(), name, IrInstrType.LOAD);
|
||||
addUse(pointer);
|
||||
}
|
||||
|
||||
public IrValue getPointer() {
|
||||
return getUse(0);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return getName() + " = load " + getType() + ", "
|
||||
+ getPointer().getType() + " " + getPointer().getName();
|
||||
}
|
||||
}
|
||||
package midend.llvm.instr;
|
||||
|
||||
import backend.mips.MipsBuilder;
|
||||
import backend.mips.Register;
|
||||
import backend.mips.instr.MipsLs;
|
||||
import backend.mips.instr.type.MipsLsType;
|
||||
import midend.llvm.type.IrPointerType;
|
||||
import midend.llvm.value.IrValue;
|
||||
|
||||
public class LoadInstr extends IrInstr {
|
||||
public LoadInstr(IrValue pointer, String name) {
|
||||
super(((IrPointerType) pointer.getType()).getPointeeType(), name, IrInstrType.LOAD);
|
||||
addUse(pointer);
|
||||
}
|
||||
|
||||
public IrValue getPointer() {
|
||||
return getUse(0);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return getName() + " = load " + getType() + ", "
|
||||
+ getPointer().getType() + " " + getPointer().getName();
|
||||
}
|
||||
|
||||
public void toMips() {
|
||||
IrValue pointer = getPointer();
|
||||
Register reg = MipsBuilder.getRegister(pointer);
|
||||
if (reg == null) { // 未分配寄存器情况
|
||||
reg = Register.K0;
|
||||
}
|
||||
loadValueToReg(pointer, reg);
|
||||
Register resultReg = MipsBuilder.getRegister(this);
|
||||
if (resultReg == null) {
|
||||
resultReg = Register.K1;
|
||||
}
|
||||
new MipsLs(MipsLsType.LW, resultReg, reg, 0);
|
||||
saveResult(this, resultReg);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user