mips without optimize
This commit is contained in:
4
midend/llvm/constant/IrConstant.java
Normal file → Executable file
4
midend/llvm/constant/IrConstant.java
Normal file → Executable file
@@ -11,4 +11,8 @@ public class IrConstant extends IrValue {
|
||||
public String toString() {
|
||||
return "";
|
||||
}
|
||||
|
||||
public void toMips(String label) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
17
midend/llvm/constant/IrConstantArray.java
Normal file → Executable file
17
midend/llvm/constant/IrConstantArray.java
Normal file → Executable file
@@ -2,6 +2,8 @@ package midend.llvm.constant;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import backend.mips.instr.data.MipsSpace;
|
||||
import backend.mips.instr.data.MipsWord;
|
||||
import midend.llvm.type.IrInterType;
|
||||
import midend.llvm.type.IrArrayType;
|
||||
|
||||
@@ -44,4 +46,19 @@ public class IrConstantArray extends IrConstant {
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public void toMips(String label) {
|
||||
ArrayList<Integer> values = new ArrayList<>();
|
||||
if (elements.size() == 0) {
|
||||
new MipsSpace(size * 4, label);
|
||||
} else {
|
||||
for (IrConstant element : elements) {
|
||||
values.add(((IrConstantInt) element).getValue());
|
||||
}
|
||||
for (int i = 0; i < size - elements.size(); i++) {
|
||||
values.add(0);
|
||||
}
|
||||
new MipsWord(label, values);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
5
midend/llvm/constant/IrConstantInt.java
Normal file → Executable file
5
midend/llvm/constant/IrConstantInt.java
Normal file → Executable file
@@ -1,5 +1,6 @@
|
||||
package midend.llvm.constant;
|
||||
|
||||
import backend.mips.instr.data.MipsWord;
|
||||
import midend.llvm.type.IrInterType;
|
||||
|
||||
public class IrConstantInt extends IrConstant {
|
||||
@@ -17,4 +18,8 @@ public class IrConstantInt extends IrConstant {
|
||||
public String toString() {
|
||||
return "i32 " + value;
|
||||
}
|
||||
|
||||
public void toMips(String label) {
|
||||
new MipsWord(label, value);
|
||||
}
|
||||
}
|
||||
|
||||
111
midend/llvm/constant/IrConstantStr.java
Normal file → Executable file
111
midend/llvm/constant/IrConstantStr.java
Normal file → Executable file
@@ -1,53 +1,58 @@
|
||||
package midend.llvm.constant;
|
||||
|
||||
import midend.llvm.type.IrArrayType;
|
||||
import midend.llvm.type.IrPointerType;
|
||||
import midend.llvm.type.IrInterType;
|
||||
|
||||
public class IrConstantStr extends IrConstant {
|
||||
private String value;
|
||||
|
||||
public IrConstantStr(String value, String name) {
|
||||
super(new IrPointerType(
|
||||
new IrArrayType(IrInterType.INT8, getLen(value) + 1)), name);
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static int getLen(String value) {
|
||||
int len = 0;
|
||||
for (int i = 0; i < value.length(); i++) {
|
||||
if (value.charAt(i) == '\\') {
|
||||
i++;
|
||||
} else if (value.charAt(i) == '"') {
|
||||
continue;
|
||||
}
|
||||
len++;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
public static String getRealStr(String str) {
|
||||
boolean start = str.charAt(0) == '"';
|
||||
boolean end = str.charAt(str.length() - 1) == '"';
|
||||
if (start && end) {
|
||||
return str.substring(1, str.length() - 1);
|
||||
} else if (start) {
|
||||
return str.substring(1);
|
||||
} else if (end) {
|
||||
return str.substring(0, str.length() - 1);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(getName() + " = constant " + ((IrPointerType) getType()).getPointeeType());
|
||||
sb.append(" c\"" + getRealStr(value).replace("\\n", "\\0A"));
|
||||
sb.append("\\00\"");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
package midend.llvm.constant;
|
||||
|
||||
import backend.mips.instr.data.MipsAsciiz;
|
||||
import midend.llvm.type.IrArrayType;
|
||||
import midend.llvm.type.IrPointerType;
|
||||
import midend.llvm.type.IrInterType;
|
||||
|
||||
public class IrConstantStr extends IrConstant {
|
||||
private String value;
|
||||
|
||||
public IrConstantStr(String value, String name) {
|
||||
super(new IrPointerType(
|
||||
new IrArrayType(IrInterType.INT8, getLen(value) + 1)), name);
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static int getLen(String value) {
|
||||
int len = 0;
|
||||
for (int i = 0; i < value.length(); i++) {
|
||||
if (value.charAt(i) == '\\') {
|
||||
i++;
|
||||
} else if (value.charAt(i) == '"') {
|
||||
continue;
|
||||
}
|
||||
len++;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
public static String getRealStr(String str) {
|
||||
boolean start = str.charAt(0) == '"';
|
||||
boolean end = str.charAt(str.length() - 1) == '"';
|
||||
if (start && end) {
|
||||
return str.substring(1, str.length() - 1);
|
||||
} else if (start) {
|
||||
return str.substring(1);
|
||||
} else if (end) {
|
||||
return str.substring(0, str.length() - 1);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(getName() + " = constant " + ((IrPointerType) getType()).getPointeeType());
|
||||
sb.append(" c\"" + getRealStr(value).replace("\\n", "\\0A"));
|
||||
sb.append("\\00\"");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public void toMips(String label) {
|
||||
new MipsAsciiz(label, getRealStr(value));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user