compilertest.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 146 行
JAVA
146 行
/*
* $Id: CompilerTest.java,v 1.8 2004/02/19 20:22:48 epr Exp $
*/
package org.jnode.test;
import java.io.File;
import java.io.OutputStreamWriter;
import org.jnode.assembler.ObjectResolver;
import org.jnode.assembler.x86.TextX86Stream;
import org.jnode.vm.Address;
import org.jnode.vm.Vm;
import org.jnode.vm.VmSystemClassLoader;
import org.jnode.vm.classmgr.VmMethod;
import org.jnode.vm.classmgr.VmType;
import org.jnode.vm.compiler.NativeCodeCompiler;
import org.jnode.vm.x86.VmX86Architecture;
import org.jnode.vm.x86.X86CpuID;
/**
* @author epr
*/
public class CompilerTest {
public static void main(String[] args) throws Exception {
final String clsNames = (args.length > 0) ? args[ 0]
: "org.jnode.vm.classmgr.VmType,org.jnode.vm.x86.compiler.l1.X86BytecodeVisitor";
final int level = Integer.parseInt((args.length > 1) ? args[ 1] : "0");
final String processorId = (args.length > 2) ? args[ 2] : "p5";
final String dir = System.getProperty("classes.dir", ".");
final VmX86Architecture arch = new VmX86Architecture();
final VmSystemClassLoader cl = new VmSystemClassLoader(new File(dir)
.toURL(), arch);
VmType.initializeForBootImage(cl);
final Vm vm = new Vm("?", arch, null, cl.getStatics(), false);
vm.toString();
//final ObjectResolver resolver = new DummyResolver();
final NativeCodeCompiler[] cs = cl.getArchitecture().getCompilers();
final X86CpuID cpuId = X86CpuID.createID(processorId);
//NativeCodeCompiler c = cs[0];
NativeCodeCompiler c = cs[ level];
c.initialize(cl);
final long start = System.currentTimeMillis();
final String clsNamesArr[] = clsNames.split(",");
for (int k = 0; k < clsNamesArr.length; k++) {
final String clsName = clsNamesArr[ k];
final VmType type = cl.loadClass(clsName, true);
final int cnt = type.getNoDeclaredMethods();
for (int i = 0; i < cnt; i++) {
final VmMethod method = type.getDeclaredMethod(i);
if (method.getName().equals("foo")) {
//System.out.println("\n### Method " + method.getName() +
// "
// ###\n");
/*
* if (!method.isAbstract()) { BytecodeViewer viewer = new
* BytecodeViewer(new
* ControlFlowGraph(method.getBytecode()));
* BytecodeParser.parse(method.getBytecode(), viewer);
*/
System.out.println("\n### Compiling " + method.getName()
+ " ###\n");
TextX86Stream os = new TextX86Stream(
new OutputStreamWriter(System.out), cpuId);
//X86Stream os = new X86Stream(cpuId, 0x10000);
c.compileBootstrap(method, os, level);
//c.compileRuntime(method, resolver, level, os);
os.flush();
}
}
}
final long end = System.currentTimeMillis();
System.out.println("Compiled in " + (end - start) + "ms");
}
static class DummyResolver extends ObjectResolver {
/**
* @see org.jnode.assembler.ObjectResolver#add(org.jnode.vm.Address,
* int)
*/
public Address add(Address address, int offset) {
return address;
}
/**
* @see org.jnode.assembler.ObjectResolver#addressOf(java.lang.Object)
*/
public Address addressOf(Object object) {
return null;
}
/**
* @see org.jnode.assembler.ObjectResolver#addressOf32(java.lang.Object)
*/
public int addressOf32(Object object) {
return 0;
}
/**
* @see org.jnode.assembler.ObjectResolver#addressOf64(java.lang.Object)
*/
public long addressOf64(Object object) {
return 0L;
}
/**
* @see org.jnode.assembler.ObjectResolver#objectAt(org.jnode.vm.Address)
*/
public Object objectAt(Address ptr) {
return ptr;
}
/**
* @see org.jnode.assembler.ObjectResolver#objectAt32(int)
*/
public Object objectAt32(int ptr) {
return null;
}
/**
* @see org.jnode.assembler.ObjectResolver#objectAt64(long)
*/
public Object objectAt64(long ptr) {
return null;
}
/**
* Gets the address of the first element of the given array.
*
* @param array
* @return The address of the array data.
*/
public Address addressOfArrayData(Object array) {
return null;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?