codegenerator.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 298 行

JAVA
298
字号

/*
 * $Id: CodeGenerator.java,v 1.7 2004/02/16 18:55:52 epr Exp $
 */
package org.jnode.vm.compiler.ir;

import org.jnode.vm.compiler.ir.quad.ConditionalBranchQuad;
import org.jnode.vm.compiler.ir.quad.ConstantRefAssignQuad;
import org.jnode.vm.compiler.ir.quad.UnaryQuad;
import org.jnode.vm.compiler.ir.quad.UnconditionalBranchQuad;
import org.jnode.vm.compiler.ir.quad.VarReturnQuad;
import org.jnode.vm.compiler.ir.quad.VariableRefAssignQuad;
import org.jnode.vm.compiler.ir.quad.VoidReturnQuad;

/**
 * @author Madhu Siddalingaiah
 * 
 */
public abstract class CodeGenerator {
	private static CodeGenerator cgInstance;

	public static void setCodeGenerator(CodeGenerator cg) {
		cgInstance = cg;
	}

	public static CodeGenerator getInstance() {
		return cgInstance;
	}

	/**
	 * @return
	 */
	public abstract RegisterPool getRegisterPool();

	/**
	 * Returns true of this CPU supports 3 address operands
	 * 
	 * @return
	 */
	public abstract boolean supports3AddrOps();

	/**
	 * @param variables
	 */
	public abstract void setSpilledVariables(Variable[] variables);

	/**
	 * 
	 */
	public abstract void emitHeader();

	/**
	 * @param quad
	 */
	public abstract void generateCodeFor(ConditionalBranchQuad quad);

	/**
	 * @param quad
	 */
	public abstract void generateCodeFor(ConstantRefAssignQuad quad);

	/**
	 * @param quad
	 */
	public abstract void generateCodeFor(UnconditionalBranchQuad quad);

	/**
	 * @param quad
	 */
	public abstract void generateCodeFor(VariableRefAssignQuad quad);

	/**
	 * @param quad
	 */
	public abstract void generateCodeFor(VarReturnQuad quad);

	/**
	 * @param quad
	 */
	public abstract void generateCodeFor(VoidReturnQuad quad);

	/**
	 * @param quad
	 * @param lhsReg
	 * @param operation
	 * @param con
	 */
	public abstract void generateCodeFor(UnaryQuad quad, Object lhsReg,
		int operation, Constant con);

	/**
	 * @param quad
	 * @param lhsReg
	 * @param operation
	 * @param rhsReg
	 */
	public abstract void generateCodeFor(UnaryQuad quad, Object lhsReg,
		int operation, Object rhsReg);

	/**
	 * @param quad
	 * @param lhsReg
	 * @param operation
	 * @param rhsDisp
	 */
	public abstract void generateCodeFor(UnaryQuad quad, Object lhsReg,
		int operation, int rhsDisp);

	/**
	 * @param quad
	 * @param lhsDisp
	 * @param operation
	 * @param rhsReg
	 */
	public abstract void generateCodeFor(UnaryQuad quad, int lhsDisp,
		int operation, Object rhsReg);

	/**
	 * @param quad
	 * @param lhsDisp
	 * @param operation
	 * @param rhsDisp
	 */
	public abstract void generateCodeFor(UnaryQuad quad, int lhsDisp,
		int operation, int rhsDisp);

	/**
	 * @param quad
	 * @param lhsDisp
	 * @param operation
	 * @param con
	 */
	public abstract void generateCodeFor(UnaryQuad quad, int lhsDisp,
		int operation, Constant con);

	/**
	 * @param reg1
	 * @param c2
	 * @param operation
	 * @param c3
	 */
	public abstract void generateBinaryOP(Object reg1, Constant c2,
		int operation, Constant c3);

	/**
	 * @param reg1
	 * @param c2
	 * @param operation
	 * @param reg3
	 */
	public abstract void generateBinaryOP(Object reg1, Constant c2,
		int operation, Object reg3);

	/**
	 * @param reg1
	 * @param c2
	 * @param operation
	 * @param disp3
	 */
	public abstract void generateBinaryOP(Object reg1, Constant c2,
		int operation, int disp3);

	/**
	 * @param reg1
	 * @param reg2
	 * @param operation
	 * @param c3
	 */
	public abstract void generateBinaryOP(Object reg1, Object reg2,
		int operation, Constant c3);

	/**
	 * @param reg1
	 * @param reg2
	 * @param operation
	 * @param reg3
	 */
	public abstract void generateBinaryOP(Object reg1, Object reg2,
		int operation, Object reg3);

	/**
	 * @param reg1
	 * @param reg2
	 * @param operation
	 * @param disp3
	 */
	public abstract void generateBinaryOP(Object reg1, Object reg2,
		int operation, int disp3);

	/**
	 * @param reg1
	 * @param disp2
	 * @param operation
	 * @param c3
	 */
	public abstract void generateBinaryOP(Object reg1, int disp2,
		int operation, Constant c3);

	/**
	 * @param reg1
	 * @param disp2
	 * @param operation
	 * @param reg3
	 */
	public abstract void generateBinaryOP(Object reg1, int disp2,
		int operation, Object reg3);

	/**
	 * @param reg1
	 * @param disp2
	 * @param operation
	 * @param disp3
	 */
	public abstract void generateBinaryOP(Object reg1, int disp2,
		int operation, int disp3);

	/**
	 * @param disp1
	 * @param c2
	 * @param operation
	 * @param c3
	 */
	public abstract void generateBinaryOP(int disp1, Constant c2,
		int operation, Constant c3);

	/**
	 * @param disp1
	 * @param c2
	 * @param operation
	 * @param reg3
	 */
	public abstract void generateBinaryOP(int disp1, Constant c2,
		int operation, Object reg3);

	/**
	 * @param disp1
	 * @param c2
	 * @param operation
	 * @param disp3
	 */
	public abstract void generateBinaryOP(int disp1, Constant c2,
		int operation, int disp3);

	/**
	 * @param disp1
	 * @param reg2
	 * @param operation
	 * @param c3
	 */
	public abstract void generateBinaryOP(int disp1, Object reg2,
		int operation, Constant c3);

	/**
	 * @param disp1
	 * @param reg2
	 * @param operation
	 * @param reg3
	 */
	public abstract void generateBinaryOP(int disp1, Object reg2,
		int operation, Object reg3);

	/**
	 * @param disp1
	 * @param reg2
	 * @param operation
	 * @param disp3
	 */
	public abstract void generateBinaryOP(int disp1, Object reg2,
		int operation, int disp3);

	/**
	 * @param disp1
	 * @param disp2
	 * @param operation
	 * @param c3
	 */
	public abstract void generateBinaryOP(int disp1, int disp2,
		int operation, Constant c3);

	/**
	 * @param disp1
	 * @param disp2
	 * @param operation
	 * @param reg3
	 */
	public abstract void generateBinaryOP(int disp1, int disp2,
		int operation, Object reg3);

	/**
	 * @param disp1
	 * @param disp2
	 * @param operation
	 * @param disp3
	 */
	public abstract void generateBinaryOP(int disp1, int disp2,
		int operation, int disp3);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?