Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Compil3r.Reference.x86
Class x86ReferenceCompiler  view x86ReferenceCompiler download x86ReferenceCompiler.java

java.lang.Object
  extended byCompil3r.BytecodeAnalysis.BytecodeVisitor
      extended byCompil3r.Reference.x86.x86ReferenceCompiler
All Implemented Interfaces:
Clazz.jq_ClassFileConstants, Assembler.x86.x86Constants

public class x86ReferenceCompiler
extends Compil3r.BytecodeAnalysis.BytecodeVisitor
implements Assembler.x86.x86Constants, Clazz.jq_ClassFileConstants

Version:
$Id: x86ReferenceCompiler.java,v 1.28 2003/05/12 10:05:16 joewhaley Exp $

Nested Class Summary
static class x86ReferenceCompiler.Factory
           
 
Field Summary
static UTF.Utf8 address32
           
static UTF.Utf8 addressOf
           
static UTF.Utf8 align
           
static UTF.Utf8 alloca
           
static boolean ALWAYS_TRACE
           
private  Assembler.x86.x86Assembler asm
           
static UTF.Utf8 asObject
           
static UTF.Utf8 asReferenceType
           
static UTF.Utf8 atomicAdd
           
static UTF.Utf8 atomicAnd
           
static UTF.Utf8 atomicCas4
           
static UTF.Utf8 atomicSub
           
private  java.util.List code_relocs
           
private  java.util.List data_relocs
           
static int DEFAULT_ALIGNMENT
           
static UTF.Utf8 difference
           
static UTF.Utf8 getBasePointer
           
static UTF.Utf8 getNull
           
static UTF.Utf8 getStackPointer
           
static UTF.Utf8 isNull
           
static UTF.Utf8 logSize
           
static UTF.Utf8 max
           
static UTF.Utf8 min
           
private  int n_paramwords
           
static UTF.Utf8 offset
           
static UTF.Utf8 pageAlign
           
static UTF.Utf8 peek
           
static UTF.Utf8 peek1
           
static UTF.Utf8 peek2
           
static UTF.Utf8 peek4
           
static UTF.Utf8 peek8
           
static UTF.Utf8 poke
           
static UTF.Utf8 poke1
           
static UTF.Utf8 poke2
           
static UTF.Utf8 poke4
           
static UTF.Utf8 poke8
           
static UTF.Utf8 size
           
static UTF.Utf8 stringRep
           
static int THREAD_BLOCK_OFFSET
           
static byte THREAD_BLOCK_PREFIX
           
static UTF.Utf8 to32BitValue
           
static boolean TRACE_STUBS
           
 boolean TraceArguments
           
static java.util.Set TraceBytecode_ClassNames
           
static java.util.Set TraceBytecode_MethodNames
           
 boolean TraceBytecodes
           
static java.util.Set TraceMethod_ClassNames
           
static java.util.Set TraceMethod_MethodNames
           
 boolean TraceMethods
           
 
Fields inherited from class Compil3r.BytecodeAnalysis.BytecodeVisitor
bcs, BINOP_ADD, BINOP_AND, BINOP_DIV, BINOP_MUL, BINOP_OR, BINOP_REM, BINOP_SUB, BINOP_XOR, binopnames, clazz, CMP_AE, CMP_EQ, CMP_G, CMP_GE, CMP_GT, CMP_L, CMP_LE, CMP_LT, CMP_NE, CMP_UNCOND, cmpopnames, fcmpopnames, i_end, i_start, INVOKE_INTERFACE, INVOKE_SPECIAL, INVOKE_STATIC, INVOKE_VIRTUAL, invokeopnames, method, MONITOR_ENTER, MONITOR_EXIT, monitoropnames, out, SHIFT_LEFT, SHIFT_RIGHT, SHIFT_URIGHT, shiftopnames, TRACE, UNOP_NEG, unopnames
 
Fields inherited from interface Assembler.x86.x86Constants
AL, AX, BOUNDS_EX_NUM, CACHE_LINE_SIZE, CJUMP_NEAR, CJUMP_SHORT, COMPLEX, EAX, EBP, EBX, ECX, EDI, EDX, ESI, ESP, JUMP_NEAR, JUMP_SHORT, MOD_DISP32, MOD_DISP8, MOD_EA, MOD_REG, NP, PU, PV, RA, RM_SIB, SCALE_1, SCALE_2, SCALE_4, SCALE_8, SEIMM8, SHIFT_ONCE, UV
 
Fields inherited from interface Clazz.jq_ClassFileConstants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_Class, CONSTANT_Double, CONSTANT_FieldRef, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodRef, CONSTANT_Long, CONSTANT_MethodRef, CONSTANT_NameAndType, CONSTANT_ResolvedClass, CONSTANT_ResolvedIFieldRef, CONSTANT_ResolvedIMethodRef, CONSTANT_ResolvedSFieldRef, CONSTANT_ResolvedSMethodRef, CONSTANT_String, CONSTANT_Utf8, CONSUME_STACK, ILLEGAL_OPCODE, ILLEGAL_TYPE, jbc_AALOAD, jbc_AASTORE, jbc_ACONST_NULL, jbc_ALOAD, jbc_ALOAD_0, jbc_ALOAD_1, jbc_ALOAD_2, jbc_ALOAD_3, jbc_ANEWARRAY, jbc_ARETURN, jbc_ARRAYLENGTH, jbc_ASTORE, jbc_ASTORE_0, jbc_ASTORE_1, jbc_ASTORE_2, jbc_ASTORE_3, jbc_ATHROW, jbc_BALOAD, jbc_BASTORE, jbc_BIPUSH, jbc_BREAKPOINT, jbc_CALOAD, jbc_CASTORE, jbc_CHECKCAST, jbc_D2F, jbc_D2I, jbc_D2L, jbc_DADD, jbc_DALOAD, jbc_DASTORE, jbc_DCMPG, jbc_DCMPL, jbc_DCONST_0, jbc_DCONST_1, jbc_DDIV, jbc_DLOAD, jbc_DLOAD_0, jbc_DLOAD_1, jbc_DLOAD_2, jbc_DLOAD_3, jbc_DMUL, jbc_DNEG, jbc_DREM, jbc_DRETURN, jbc_DSTORE, jbc_DSTORE_0, jbc_DSTORE_1, jbc_DSTORE_2, jbc_DSTORE_3, jbc_DSUB, jbc_DUP, jbc_DUP_X1, jbc_DUP_X2, jbc_DUP2, jbc_DUP2_X1, jbc_DUP2_X2, jbc_F2D, jbc_F2I, jbc_F2L, jbc_FADD, jbc_FALOAD, jbc_FASTORE, jbc_FCMPG, jbc_FCMPL, jbc_FCONST_0, jbc_FCONST_1, jbc_FCONST_2, jbc_FDIV, jbc_FLOAD, jbc_FLOAD_0, jbc_FLOAD_1, jbc_FLOAD_2, jbc_FLOAD_3, jbc_FMUL, jbc_FNEG, jbc_FREM, jbc_FRETURN, jbc_FSTORE, jbc_FSTORE_0, jbc_FSTORE_1, jbc_FSTORE_2, jbc_FSTORE_3, jbc_FSUB, jbc_GETFIELD, jbc_GETSTATIC, jbc_GOTO, jbc_GOTO_W, jbc_I2B, jbc_I2C, jbc_I2D, jbc_I2F, jbc_I2L, jbc_I2S, jbc_IADD, jbc_IALOAD, jbc_IAND, jbc_IASTORE, jbc_ICONST_0, jbc_ICONST_1, jbc_ICONST_2, jbc_ICONST_3, jbc_ICONST_4, jbc_ICONST_5, jbc_ICONST_M1, jbc_IDIV, jbc_IF_ACMPEQ, jbc_IF_ACMPNE, jbc_IF_ICMPEQ, jbc_IF_ICMPGE, jbc_IF_ICMPGT, jbc_IF_ICMPLE, jbc_IF_ICMPLT, jbc_IF_ICMPNE, jbc_IFEQ, jbc_IFGE, jbc_IFGT, jbc_IFLE, jbc_IFLT, jbc_IFNE, jbc_IFNONNULL, jbc_IFNULL, jbc_IINC, jbc_ILOAD, jbc_ILOAD_0, jbc_ILOAD_1, jbc_ILOAD_2, jbc_ILOAD_3, jbc_IMUL, jbc_INEG, jbc_INSTANCEOF, jbc_INT2BYTE, jbc_INT2CHAR, jbc_INT2SHORT, jbc_INVOKEINTERFACE, jbc_INVOKENONVIRTUAL, jbc_INVOKESPECIAL, jbc_INVOKESTATIC, jbc_INVOKEVIRTUAL, jbc_IOR, jbc_IREM, jbc_IRETURN, jbc_ISHL, jbc_ISHR, jbc_ISTORE, jbc_ISTORE_0, jbc_ISTORE_1, jbc_ISTORE_2, jbc_ISTORE_3, jbc_ISUB, jbc_IUSHR, jbc_IXOR, jbc_JSR, jbc_JSR_W, jbc_L2D, jbc_L2F, jbc_L2I, jbc_LADD, jbc_LALOAD, jbc_LAND, jbc_LASTORE, jbc_LCMP, jbc_LCONST_0, jbc_LCONST_1, jbc_LDC, jbc_LDC_W, jbc_LDC2_W, jbc_LDIV, jbc_LLOAD, jbc_LLOAD_0, jbc_LLOAD_1, jbc_LLOAD_2, jbc_LLOAD_3, jbc_LMUL, jbc_LNEG, jbc_LOOKUPSWITCH, jbc_LOR, jbc_LREM, jbc_LRETURN, jbc_LSHL, jbc_LSHR, jbc_LSTORE, jbc_LSTORE_0, jbc_LSTORE_1, jbc_LSTORE_2, jbc_LSTORE_3, jbc_LSUB, jbc_LUSHR, jbc_LXOR, jbc_MONITORENTER, jbc_MONITOREXIT, jbc_MULTIANEWARRAY, jbc_NEW, jbc_NEWARRAY, jbc_NOP, jbc_POP, jbc_POP2, jbc_PUTFIELD, jbc_PUTSTATIC, jbc_RET, jbc_RETURN, jbc_SALOAD, jbc_SASTORE, jbc_SIPUSH, jbc_SWAP, jbc_TABLESWITCH, jbc_WIDE, NO_OF_OPERANDS, OPCODE_NAMES, PRODUCE_STACK, RESERVED, STATE_CLSINITERROR, STATE_CLSINITIALIZED, STATE_CLSINITIALIZING, STATE_CLSINITRUNNING, STATE_COMPILED, STATE_COMPILING, STATE_LOADED, STATE_LOADERROR, STATE_LOADING1, STATE_LOADING2, STATE_LOADING3, STATE_PREPARED, STATE_PREPARING, STATE_SFINITIALIZED, STATE_SFINITIALIZING, STATE_UNLOADED, STATE_VERIFIED, STATE_VERIFYING, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TC_ARRAY, TC_BOOLEAN, TC_BYTE, TC_CHAR, TC_CLASS, TC_CLASSEND, TC_DOUBLE, TC_FLOAT, TC_INT, TC_LONG, TC_PARAM, TC_PARAMEND, TC_SHORT, TC_VOID, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE
 
Constructor Summary
x86ReferenceCompiler(Clazz.jq_Method method)
           
 
Method Summary
private  void ALOAD4helper()
           
private  void ALOAD8helper()
           
private  void ASTORE2helper()
           
private  void ASTORE4helper()
           
private  void ASTORE8helper()
           
private  void branchHelper(byte op, int target)
           
 Clazz.jq_CompiledCode compile()
           
 void emitCallMemory(Clazz.jq_StaticField f)
           
static void emitCallMemory(Clazz.jq_StaticField f, Assembler.x86.x86Assembler asm, java.util.List data_relocs)
           
 void emitCallRelative(Clazz.jq_Method target)
           
static void emitCallRelative(Clazz.jq_Method target, Assembler.x86.x86Assembler asm, java.util.List code_relocs)
           
 void emitFLD64(Clazz.jq_StaticField f)
           
static void emitFLD64(Clazz.jq_StaticField f, Assembler.x86.x86Assembler asm, java.util.List data_relocs)
           
 void emitPopMemory(Clazz.jq_StaticField f)
           
static void emitPopMemory(Clazz.jq_StaticField f, Assembler.x86.x86Assembler asm, java.util.List data_relocs)
           
 void emitPopMemory8(Clazz.jq_StaticField f)
           
static void emitPopMemory8(Clazz.jq_StaticField f, Assembler.x86.x86Assembler asm, java.util.List data_relocs)
           
 void emitPushAddressOf(java.lang.Object o)
           
static void emitPushAddressOf(java.lang.Object o, Assembler.x86.x86Assembler asm, java.util.List data_relocs)
           
 void emitPushMemory(Clazz.jq_StaticField f)
           
static void emitPushMemory(Clazz.jq_StaticField f, Assembler.x86.x86Assembler asm, java.util.List data_relocs)
           
 void emitPushMemory8(Clazz.jq_StaticField f)
           
static void emitPushMemory8(Clazz.jq_StaticField f, Assembler.x86.x86Assembler asm, java.util.List data_relocs)
           
private  void gen_unsafe(Clazz.jq_Method f)
           
private  void genAddress(Clazz.jq_Method f)
           
static Clazz.jq_CompiledCode generate_compile_stub(Clazz.jq_Method method)
           
 java.util.List getCodeRelocs()
           
 java.util.List getDataRelocs()
           
 void GETFIELD1helper(Clazz.jq_InstanceField f)
           
 void GETFIELD4helper(Clazz.jq_InstanceField f)
           
 void GETFIELD8helper(Clazz.jq_InstanceField f)
           
private  int getLocalOffset(int local)
           
 void GETSTATIC4helper(Clazz.jq_StaticField f)
           
 void GETSTATIC8helper(Clazz.jq_StaticField f)
           
 void init(Clazz.jq_Method method)
           
private  void INVOKEDPATCHhelper(byte op, Clazz.jq_Method f)
           
private  void INVOKEhelper(byte op, Clazz.jq_Method f)
           
private  void INVOKENODPATCHhelper(byte op, Clazz.jq_Method f)
           
(package private) static int patch_cgetfield(Memory.CodeAddress retloc, Clazz.jq_InstanceField f)
           
(package private) static int patch_getfield1(Memory.CodeAddress retloc, Clazz.jq_InstanceField f)
           
(package private) static int patch_getfield4(Memory.CodeAddress retloc, Clazz.jq_InstanceField f)
           
(package private) static int patch_getfield8(Memory.CodeAddress retloc, Clazz.jq_InstanceField f)
           
(package private) static int patch_getstatic4(Memory.CodeAddress retloc, Clazz.jq_StaticField f)
           
(package private) static int patch_getstatic8(Memory.CodeAddress retloc, Clazz.jq_StaticField f)
           
(package private) static int patch_invokestatic(Memory.CodeAddress retloc, Clazz.jq_Method f)
           
(package private) static int patch_invokevirtual(Memory.CodeAddress retloc, Clazz.jq_InstanceMethod f)
           
(package private) static int patch_putfield1(Memory.CodeAddress retloc, Clazz.jq_InstanceField f)
           
(package private) static int patch_putfield2(Memory.CodeAddress retloc, Clazz.jq_InstanceField f)
           
(package private) static int patch_putfield4(Memory.CodeAddress retloc, Clazz.jq_InstanceField f)
           
(package private) static int patch_putfield8(Memory.CodeAddress retloc, Clazz.jq_InstanceField f)
           
(package private) static int patch_putstatic4(Memory.CodeAddress retloc, Clazz.jq_StaticField f)
           
(package private) static int patch_putstatic8(Memory.CodeAddress retloc, Clazz.jq_StaticField f)
           
(package private) static int patch_sgetfield(Memory.CodeAddress retloc, Clazz.jq_InstanceField f)
           
 void PUTFIELD1helper(Clazz.jq_InstanceField f)
           
 void PUTFIELD2helper(Clazz.jq_InstanceField f)
           
 void PUTFIELD4helper(Clazz.jq_InstanceField f)
           
 void PUTFIELD8helper(Clazz.jq_InstanceField f)
           
 void PUTSTATIC4helper(Clazz.jq_StaticField f)
           
 void PUTSTATIC8helper(Clazz.jq_StaticField f)
           
private  void RETURN4helper()
           
private  void RETURN8helper()
           
private  void SYNCHEXIThelper()
           
private  void toIntHelper()
           
private  void toLongHelper()
           
 java.lang.String toString()
          Convert this Object to a human-readable String.
 void visitAALOAD()
           
 void visitAASTORE()
           
 void visitACONST(java.lang.Object s)
           
 void visitAGETFIELD(Clazz.jq_InstanceField f)
           
 void visitAGETSTATIC(Clazz.jq_StaticField f)
           
 void visitAINVOKE(byte op, Clazz.jq_Method f)
           
 void visitALOAD(int i)
           
 void visitAPUTFIELD(Clazz.jq_InstanceField f)
           
 void visitAPUTSTATIC(Clazz.jq_StaticField f)
           
 void visitARETURN()
           
 void visitARRAYLENGTH()
           
 void visitASTORE(int i)
           
 void visitATHROW()
           
 void visitBALOAD()
           
 void visitBASTORE()
           
 void visitBGETFIELD(Clazz.jq_InstanceField f)
           
 void visitBGETSTATIC(Clazz.jq_StaticField f)
           
 void visitBPUTFIELD(Clazz.jq_InstanceField f)
           
 void visitBPUTSTATIC(Clazz.jq_StaticField f)
           
 void visitBytecode()
           
 void visitCALOAD()
           
 void visitCASTORE()
           
 void visitCGETFIELD(Clazz.jq_InstanceField f)
           
 void visitCGETSTATIC(Clazz.jq_StaticField f)
           
 void visitCHECKCAST(Clazz.jq_Type f)
           
 void visitCPUTFIELD(Clazz.jq_InstanceField f)
           
 void visitCPUTSTATIC(Clazz.jq_StaticField f)
           
 void visitD2F()
           
 void visitD2I()
           
 void visitD2L()
           
 void visitDALOAD()
           
 void visitDASTORE()
           
 void visitDBINOP(byte op)
           
 void visitDCMP2(byte op)
           
 void visitDCONST(double c)
           
 void visitDGETFIELD(Clazz.jq_InstanceField f)
           
 void visitDGETSTATIC(Clazz.jq_StaticField f)
           
 void visitDINVOKE(byte op, Clazz.jq_Method f)
           
 void visitDLOAD(int i)
           
 void visitDPUTFIELD(Clazz.jq_InstanceField f)
           
 void visitDPUTSTATIC(Clazz.jq_StaticField f)
           
 void visitDRETURN()
           
 void visitDSTORE(int i)
           
 void visitDUNOP(byte op)
           
 void visitDUP_x1()
           
 void visitDUP_x2()
           
 void visitDUP()
           
 void visitDUP2_x1()
           
 void visitDUP2_x2()
           
 void visitDUP2()
           
 void visitF2D()
           
 void visitF2I()
           
 void visitF2L()
           
 void visitFALOAD()
           
 void visitFASTORE()
           
 void visitFBINOP(byte op)
           
 void visitFCMP2(byte op)
           
 void visitFCONST(float c)
           
 void visitFGETFIELD(Clazz.jq_InstanceField f)
           
 void visitFGETSTATIC(Clazz.jq_StaticField f)
           
 void visitFINVOKE(byte op, Clazz.jq_Method f)
           
 void visitFLOAD(int i)
           
 void visitFPUTFIELD(Clazz.jq_InstanceField f)
           
 void visitFPUTSTATIC(Clazz.jq_StaticField f)
           
 void visitFRETURN()
           
 void visitFSTORE(int i)
           
 void visitFUNOP(byte op)
           
 void visitGOTO(int target)
           
 void visitI2B()
           
 void visitI2C()
           
 void visitI2D()
           
 void visitI2F()
           
 void visitI2L()
           
 void visitI2S()
           
 void visitIALOAD()
           
 void visitIASTORE()
           
 void visitIBINOP(byte op)
           
 void visitICONST(int c)
           
 void visitIF(byte op, int target)
           
 void visitIFCMP(byte op, int target)
           
 void visitIFREF(byte op, int target)
           
 void visitIFREFCMP(byte op, int target)
           
 void visitIGETFIELD(Clazz.jq_InstanceField f)
           
 void visitIGETSTATIC(Clazz.jq_StaticField f)
           
 void visitIINC(int i, int v)
           
 void visitIINVOKE(byte op, Clazz.jq_Method f)
           
 void visitILOAD(int i)
           
 void visitINSTANCEOF(Clazz.jq_Type f)
           
 void visitIPUTFIELD(Clazz.jq_InstanceField f)
           
 void visitIPUTSTATIC(Clazz.jq_StaticField f)
           
 void visitIRETURN()
           
 void visitISHIFT(byte op)
           
 void visitISTORE(int i)
           
 void visitIUNOP(byte op)
           
 void visitJSR(int target)
           
 void visitL2D()
           
 void visitL2F()
           
 void visitL2I()
           
 void visitLALOAD()
           
 void visitLASTORE()
           
 void visitLBINOP(byte op)
           
 void visitLCMP2()
           
 void visitLCONST(long c)
           
 void visitLGETFIELD(Clazz.jq_InstanceField f)
           
 void visitLGETSTATIC(Clazz.jq_StaticField f)
           
 void visitLINVOKE(byte op, Clazz.jq_Method f)
           
 void visitLLOAD(int i)
           
 void visitLOOKUPSWITCH(int default_target, int[] values, int[] targets)
           
 void visitLPUTFIELD(Clazz.jq_InstanceField f)