bytecodefragments.java

来自「JPC: x86 PC Hardware Emulator. 牛津大学开发的一个」· Java 代码 · 共 355 行 · 第 1/2 页

JAVA
355
字号
									   new Integer(JavaOpcode.INVOKEVIRTUAL), method("setSignFlag", Boolean.TYPE) };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_TFLAG] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.PUTFIELD), field("eflagsTrap") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_IFLAG] = new Object[] { new Integer(JavaOpcode.DUP),									   new Integer(JavaOpcode.ALOAD_1),									   new Integer(JavaOpcode.DUP_X2),									   new Integer(JavaOpcode.SWAP),									   new Integer(JavaOpcode.PUTFIELD), field("eflagsInterruptEnable"),									   new Integer(JavaOpcode.PUTFIELD), field("eflagsInterruptEnableSoon") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_DFLAG] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.PUTFIELD), field("eflagsDirection") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_OFLAG] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.INVOKEVIRTUAL), method("setOverflowFlag", Boolean.TYPE) };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_IOPL] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.PUTFIELD), field("eflagsIOPrivilegeLevel") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_NTFLAG] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.PUTFIELD), field("eflagsNestedTask") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_RFLAG] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.PUTFIELD), field("eflagsResume") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_VMFLAG] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.PUTFIELD), field("eflagsVirtual8086Mode") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_ACFLAG] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.PUTFIELD), field("eflagsAlignmentCheck") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_VIFLAG] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.PUTFIELD), field("eflagsVirtualInterrupt") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_VIPFLAG] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.PUTFIELD), field("eflagsVirtualInterruptPending") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_IDFLAG] = new Object[] { new Integer(JavaOpcode.ALOAD_1), 									   new Integer(JavaOpcode.SWAP), 									   new Integer(JavaOpcode.PUTFIELD), field("eflagsID") };        	        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_ES] = new Object[] { new Integer(JavaOpcode.ALOAD_1),									new Integer(JavaOpcode.SWAP),									new Integer(JavaOpcode.PUTFIELD), field("es") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_CS] = new Object[] { new Integer(JavaOpcode.ALOAD_1),									new Integer(JavaOpcode.SWAP),									new Integer(JavaOpcode.PUTFIELD), field("cs") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_SS] = new Object[] { new Integer(JavaOpcode.ALOAD_1),									new Integer(JavaOpcode.SWAP),									new Integer(JavaOpcode.PUTFIELD), field("ss") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_DS] = new Object[] { new Integer(JavaOpcode.ALOAD_1),									new Integer(JavaOpcode.SWAP),									new Integer(JavaOpcode.PUTFIELD), field("ds") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_FS] = new Object[] { new Integer(JavaOpcode.ALOAD_1),									new Integer(JavaOpcode.SWAP),									new Integer(JavaOpcode.PUTFIELD), field("fs") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_GS] = new Object[] { new Integer(JavaOpcode.ALOAD_1),									new Integer(JavaOpcode.SWAP),									new Integer(JavaOpcode.PUTFIELD), field("gs") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_IDTR] = new Object[] { new Integer(JavaOpcode.ALOAD_1),									  new Integer(JavaOpcode.SWAP),									  new Integer(JavaOpcode.PUTFIELD), field("idtr") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_GDTR] = new Object[] { new Integer(JavaOpcode.ALOAD_1),									  new Integer(JavaOpcode.SWAP),									  new Integer(JavaOpcode.PUTFIELD), field("gdtr") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_LDTR] = new Object[] { new Integer(JavaOpcode.ALOAD_1),									  new Integer(JavaOpcode.SWAP),									  new Integer(JavaOpcode.PUTFIELD), field("ldtr") };        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_TSS] = new Object[] { new Integer(JavaOpcode.ALOAD_1),									  new Integer(JavaOpcode.SWAP),									  new Integer(JavaOpcode.PUTFIELD), field("tss") };	        popCodeArray[FASTCompiler.PROCESSOR_ELEMENT_ADDR0] = new Object[] { new Integer(JavaOpcode.POP) };    }        protected BytecodeFragments() {}    public static Object[] pushCode(int element)    {        Object[] temp = pushCodeArray[element];        if (temp == null)             throw new IllegalStateException("Non existant CPU Element: "+element);        return temp;    }    public static Object[] popCode(int element)    {        Object[] temp = popCodeArray[element];        if (temp == null)             throw new IllegalStateException("Non existant CPU Element: "+element);        return temp;    }    public static Object field(String name)    {        try {            return new ConstantPoolSymbol(Processor.class.getDeclaredField(name));        } catch (NoSuchFieldException e) {            throw new IllegalStateException(e);        }    }    public static Object field(Class cls, String name)    {        try {            return new ConstantPoolSymbol(cls.getDeclaredField(name));        } catch (NoSuchFieldException e) {            throw new IllegalStateException(e);        }    }    public static Object method(String name)    {        return method(name, new Class[0]);    }    public static Object method(String name, Class arg)    {        return method(name, new Class[]{arg});    }    public static Object method(String name, Class arg0, Class arg1)    {        return method(name, new Class[]{arg0, arg1});    }    public static Object method(String name, Class[] args)    {        try {            return new ConstantPoolSymbol(Processor.class.getDeclaredMethod(name, args));        } catch (NoSuchMethodException e) {            throw new IllegalStateException(e);        }    }    public static Object method(Class cls, String name)    {        return method(cls, name, new Class[0]);    }    public static Object method(Class cls, String name, Class arg)    {        return method(cls, name, new Class[]{arg});    }    public static Object method(Class cls, String name, Class arg0, Class arg1)    {        return method(cls, name, new Class[]{arg0, arg1});    }    public static Object method(Class cls, String name, Class arg0, Class arg1, Class arg2)    {        return method(cls, name, new Class[]{arg0, arg1, arg2});    }    public static Object method(Class cls, String name, Class[] args)    {        try {            return new ConstantPoolSymbol(cls.getMethod(name, args));        } catch (NoSuchMethodException e) {            throw new IllegalStateException(e);        }    }    public static Object integer(int value)    {        return new ConstantPoolSymbol(new Integer(value));    }    public static Object longint(long value)    {	return new ConstantPoolSymbol(new Long(value));    }    }

⌨️ 快捷键说明

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