abstractx86compiler.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 95 行
JAVA
95 行
/*
* $Id: AbstractX86Compiler.java,v 1.8 2004/02/26 10:33:39 epr Exp $
*/
package org.jnode.vm.x86.compiler;
import org.jnode.assembler.Label;
import org.jnode.assembler.NativeStream;
import org.jnode.assembler.ObjectResolver;
import org.jnode.assembler.x86.AbstractX86Stream;
import org.jnode.assembler.x86.X86Stream;
import org.jnode.vm.Address;
import org.jnode.vm.Unsafe;
import org.jnode.vm.Vm;
import org.jnode.vm.classmgr.VmClassLoader;
import org.jnode.vm.classmgr.VmCompiledCode;
import org.jnode.vm.classmgr.VmMethod;
import org.jnode.vm.compiler.CompiledMethod;
import org.jnode.vm.compiler.NativeCodeCompiler;
import org.jnode.vm.x86.X86CpuID;
/**
* Abstract native code compiler for the Intel X86 architecture.
*
* @author Ewout Prangsma (epr@users.sourceforge.net)
*/
public abstract class AbstractX86Compiler extends NativeCodeCompiler implements X86CompilerConstants {
private X86CompilerContext context;
/**
* Initialize this compiler
*
* @param loader
*/
public final void initialize(VmClassLoader loader) {
if (context == null) {
context = new X86CompilerContext(loader, Vm.getVm().getHeapManager(), getMagic());
}
}
/**
* @see org.jnode.vm.compiler.NativeCodeCompiler#createNativeStream(org.jnode.assembler.ObjectResolver)
*/
public NativeStream createNativeStream(ObjectResolver resolver) {
final X86Stream os = new X86Stream((X86CpuID) Unsafe.getCurrentProcessor().getCPUID(), 0);
os.setResolver(resolver);
return os;
}
/**
* @see org.jnode.vm.compiler.NativeCodeCompiler#doCompileAbstract(org.jnode.vm.classmgr.VmMethod, org.jnode.assembler.NativeStream, int, boolean)
*/
protected final CompiledMethod doCompileAbstract(VmMethod method, NativeStream nos, int level, boolean isBootstrap) {
if (isBootstrap) {
//System.out.println("Abstraxct method " + method);
final CompiledMethod cm = new CompiledMethod(level);
final AbstractX86Stream os = (AbstractX86Stream) nos;
// Create the helper
final X86CompilerHelper helper = new X86CompilerHelper(os, context, isBootstrap);
// Start an "object"
final NativeStream.ObjectInfo objectInfo = os.startObject(context.getVmMethodCodeClass());
// Start the code creation
cm.setCodeStart(os.setObjectRef(new Label(method.getMangledName() + "$$abstract-start")));
// Call abstract method error method
helper.writeJumpTableJMP(X86JumpTable.VM_INVOKE_ABSTRACT_OFS);
// Close the "object"
objectInfo.markEnd();
// The end
cm.setCodeEnd(os.setObjectRef(new Label(method.getMangledName() + "$$abstract-end")));
return cm;
} else {
// Set the address of the abstract method code
final Address errorAddr = X86JumpTable.getJumpTableEntry(X86JumpTable.VM_INVOKE_ABSTRACT_OFS);
final VmCompiledCode code = new VmCompiledCode(this, null, errorAddr, null, 0, null, null, null);
method.addCompiledCode(code, level);
return null;
}
}
/**
* @return Returns the context.
*/
protected final X86CompilerContext getContext() {
return this.context;
}
/**
* @see org.jnode.vm.compiler.NativeCodeCompiler#dumpStatistics()
*/
public final void dumpStatistics() {
X86StackManager.dumpStatistics();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?