irgenerator.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 1,392 行 · 第 1/3 页
JAVA
1,392 行
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dcmpl()
*/
public void visit_dcmpl() {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dcmpg()
*/
public void visit_dcmpg() {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifeq(int)
*/
public void visit_ifeq(int address) {
int s1 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IFEQ, address));
stackOffset -= 1;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifne(int)
*/
public void visit_ifne(int address) {
int s1 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IFNE, address));
stackOffset -= 1;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iflt(int)
*/
public void visit_iflt(int address) {
int s1 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IFLT, address));
stackOffset -= 1;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifge(int)
*/
public void visit_ifge(int address) {
int s1 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IFGE, address));
stackOffset -= 1;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifgt(int)
*/
public void visit_ifgt(int address) {
int s1 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IFGT, address));
stackOffset -= 1;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifle(int)
*/
public void visit_ifle(int address) {
int s1 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IFLE, address));
stackOffset -= 1;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpeq(int)
*/
public void visit_if_icmpeq(int address) {
int s1 = stackOffset - 2;
int s2 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
variables[s2].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IF_ICMPEQ, s2, address));
stackOffset -= 2;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpne(int)
*/
public void visit_if_icmpne(int address) {
int s1 = stackOffset - 2;
int s2 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
variables[s2].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IF_ICMPNE, s2, address));
stackOffset -= 2;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmplt(int)
*/
public void visit_if_icmplt(int address) {
int s1 = stackOffset - 2;
int s2 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
variables[s2].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IF_ICMPLT, s2, address));
stackOffset -= 2;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpge(int)
*/
public void visit_if_icmpge(int address) {
int s1 = stackOffset - 2;
int s2 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
variables[s2].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IF_ICMPGE, s2, address));
stackOffset -= 2;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpgt(int)
*/
public void visit_if_icmpgt(int address) {
int s1 = stackOffset - 2;
int s2 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
variables[s2].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IF_ICMPGT, s2, address));
stackOffset -= 2;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmple(int)
*/
public void visit_if_icmple(int address) {
int s1 = stackOffset - 2;
int s2 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.INT);
variables[s2].setType(Operand.INT);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IF_ICMPLE, s2, address));
stackOffset -= 2;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_acmpeq(int)
*/
public void visit_if_acmpeq(int address) {
int s1 = stackOffset - 2;
int s2 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.REFERENCE);
variables[s2].setType(Operand.REFERENCE);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IF_ACMPEQ, s2, address));
stackOffset -= 2;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_acmpne(int)
*/
public void visit_if_acmpne(int address) {
int s1 = stackOffset - 2;
int s2 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.REFERENCE);
variables[s2].setType(Operand.REFERENCE);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IF_ACMPNE, s2, address));
stackOffset -= 2;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_goto(int)
*/
public void visit_goto(int address) {
quadList.add(new UnconditionalBranchQuad(this.address, currentBlock, address));
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_jsr(int)
*/
public void visit_jsr(int address) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ret(int)
*/
public void visit_ret(int index) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_tableswitch(int, int, int, int[])
*/
public void visit_tableswitch(int defValue, int lowValue, int highValue, int[] addresses) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lookupswitch(int, int[], int[])
*/
public void visit_lookupswitch(int defValue, int[] matchValues, int[] addresses) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ireturn()
*/
public void visit_ireturn() {
stackOffset -= 1;
variables[stackOffset].setType(Operand.INT);
quadList.add(new VarReturnQuad(address, currentBlock, stackOffset));
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lreturn()
*/
public void visit_lreturn() {
stackOffset -= 2;
variables[stackOffset].setType(Operand.LONG);
quadList.add(new VarReturnQuad(address, currentBlock, stackOffset));
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_freturn()
*/
public void visit_freturn() {
stackOffset -= 1;
variables[stackOffset].setType(Operand.FLOAT);
quadList.add(new VarReturnQuad(address, currentBlock, stackOffset));
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dreturn()
*/
public void visit_dreturn() {
stackOffset -= 2;
variables[stackOffset].setType(Operand.DOUBLE);
quadList.add(new VarReturnQuad(address, currentBlock, stackOffset));
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_areturn()
*/
public void visit_areturn() {
stackOffset -= 1;
variables[stackOffset].setType(Operand.REFERENCE);
quadList.add(new VarReturnQuad(address, currentBlock, stackOffset));
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_return()
*/
public void visit_return() {
quadList.add(new VoidReturnQuad(address, currentBlock));
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_getstatic(org.jnode.vm.classmgr.VmConstFieldRef)
*/
public void visit_getstatic(VmConstFieldRef fieldRef) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_putstatic(org.jnode.vm.classmgr.VmConstFieldRef)
*/
public void visit_putstatic(VmConstFieldRef fieldRef) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_getfield(org.jnode.vm.classmgr.VmConstFieldRef)
*/
public void visit_getfield(VmConstFieldRef fieldRef) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_putfield(org.jnode.vm.classmgr.VmConstFieldRef)
*/
public void visit_putfield(VmConstFieldRef fieldRef) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokevirtual(org.jnode.vm.classmgr.VmConstMethodRef)
*/
public void visit_invokevirtual(VmConstMethodRef methodRef) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokespecial(org.jnode.vm.classmgr.VmConstMethodRef)
*/
public void visit_invokespecial(VmConstMethodRef methodRef) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokestatic(org.jnode.vm.classmgr.VmConstMethodRef)
*/
public void visit_invokestatic(VmConstMethodRef methodRef) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokeinterface(org.jnode.vm.classmgr.VmConstIMethodRef, int)
*/
public void visit_invokeinterface(VmConstIMethodRef methodRef, int count) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_new(org.jnode.vm.classmgr.VmConstClass)
*/
public void visit_new(VmConstClass clazz) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_newarray(int)
*/
public void visit_newarray(int type) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_anewarray(org.jnode.vm.classmgr.VmConstClass)
*/
public void visit_anewarray(VmConstClass clazz) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_arraylength()
*/
public void visit_arraylength() {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_athrow()
*/
public void visit_athrow() {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_checkcast(org.jnode.vm.classmgr.VmConstClass)
*/
public void visit_checkcast(VmConstClass clazz) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_instanceof(org.jnode.vm.classmgr.VmConstClass)
*/
public void visit_instanceof(VmConstClass clazz) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_monitorenter()
*/
public void visit_monitorenter() {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_monitorexit()
*/
public void visit_monitorexit() {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_multianewarray(org.jnode.vm.classmgr.VmConstClass, int)
*/
public void visit_multianewarray(VmConstClass clazz, int dimensions) {
throw new IllegalArgumentException("byte code not yet supported");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifnull(int)
*/
public void visit_ifnull(int address) {
int s1 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.REFERENCE);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IFNULL, address));
stackOffset -= 1;
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifnonnull(int)
*/
public void visit_ifnonnull(int address) {
int s1 = stackOffset - 1;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(Operand.REFERENCE);
quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
s1, ConditionalBranchQuad.IFNONNULL, address));
stackOffset -= 1;
}
// TODO
public Quad doBinaryQuad(int op, int type) {
int sCount = 1;
if (type == Operand.DOUBLE || type == Operand.LONG) {
sCount = 2;
}
stackOffset -= sCount;
int s1 = stackOffset - sCount;
Variable[] variables = currentBlock.getVariables();
variables[s1].setType(type);
variables[stackOffset].setType(type);
BinaryQuad bop = new BinaryQuad(address, currentBlock, s1, s1, op, stackOffset);
return bop.foldConstants();
}
/**
* @return
*/
public Variable[] getVariables() {
return variables;
}
/**
* @return
*/
public int getNoArgs() {
return this.nArgs;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?