亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? intel86jitcodegen.java

?? java 到c的轉換程序的原代碼.對喜歡C程序而不懂JAVA程序的人很有幫助
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
                break;        }        /* If haven't already gotten the class address into reg,         * put it there */        if (0 != cp) {            code.MOV (new Immediate (cp), reg);        }        return;    }    /** Take a value of a particular type out of memory and push it onto      * the evaluation stack.      * @param areg Register containing memory address of value; _not_ %eax      * @param tychar Encoded type of object at address      */    private void    pushFromMemory (Register areg,                    char tychar)    {        if (areg.equals (R_eax)) {            throw new InternalError ("can't use %eax as address reg in popIntoMemory");        }/* code.freeReg (R_eax); */        /* Load the whosit at areg onto the evaluation stack.  If the value         * is less than one int, extend to an int, with or without sign, as         * appropriate. */        switch (tychar) {            default:                throw new InternalError ("invalid pushFromMemory type " + tychar);            case Field.FT_void:                throw new InternalError ("invalid pushFromMemory void data.");            case Field.FT_boolean:                code.XOR (R_eax, R_eax);                code.MOV (new MemoryRef (areg).setRefSize (1), R_al);                code.pushES (R_eax);                break;            case Field.FT_byte:                code.XOR (R_eax, R_eax);                code.MOV (new MemoryRef (areg).setRefSize (1), R_al);                code.PrefixOPSIZE ();                code.CBW ();                code.CBW ();                code.pushES (R_eax);                break;            case Field.FT_char:                code.XOR (R_eax, R_eax);                code.PrefixOPSIZE ();                code.MOV (new MemoryRef (areg), R_eax);                code.pushES (R_eax);                break;            case Field.FT_short:                code.XOR (R_eax, R_eax);                code.PrefixOPSIZE ();                code.MOV (new MemoryRef (areg).setRefSize (2), R_eax);                code.CBW ();                code.pushES (R_eax);                break;            case Field.FT_float:            case Field.FT_int:            case Field.FT_object:            case Field.FT_array:                code.MOV (new MemoryRef (areg), R_eax);                code.pushES (R_eax);                break;            case Field.FT_double:            case Field.FT_long:                code.MOV (new MemoryRef (IMM_4, areg), R_eax);                code.pushES (R_eax); // msw                code.MOV (new MemoryRef (areg), R_eax);                code.pushES (R_eax); // lsw                break;        }        return;    }    /** Take a value of a particular type off the stack and store it into      * memory.      * @param areg Register containing memory address of value; _not_ %eax      * @param tychar Encoded type of object to be stored at address      */    private void    popIntoMemory (Register areg,                   char tychar)    {        if (areg.equals (R_eax)) {            throw new InternalError ("can't use %eax as address reg in popIntoMemory");        }        /* Load the whosit at areg onto the evaluation stack.  If the value         * is less than one int, extend to an int, with or without sign, as         * appropriate. */        code.popES (R_eax);        switch (tychar) {            default:                throw new InternalError ("invalid popIntoMemory type " + tychar);            case Field.FT_void:                throw new InternalError ("invalid popIntoMemory void data.");            case Field.FT_boolean:            case Field.FT_byte:                code.MOV (R_al, new MemoryRef (areg).setRefSize (1));                break;            case Field.FT_char:            case Field.FT_short:                code.PrefixOPSIZE ();                code.MOV (R_eax, new MemoryRef (areg));                break;            case Field.FT_float:            case Field.FT_int:            case Field.FT_object:            case Field.FT_array:                code.MOV (R_eax, new MemoryRef (areg));                break;            case Field.FT_double:            case Field.FT_long:                code.MOV (R_eax, new MemoryRef (areg)); // lsw                code.popES (R_eax);                code.MOV (R_eax, new MemoryRef (IMM_4, areg)); // msw                break;        }        return;    }        /* %ebx has been initialized to an object reference.  Return one or zero     * in %eax depending on whether the object can be cast to the provided     * class. */    private void    EmitCkInstance (Instr i,                    ClassRef cr)    {        int iv;        /* code.freeReg (R_eax); */        /* If the target type is Object, the cast always succeeds, whether         * the object is of non-array or array class. */        if (cr.name.equals ("java.lang.Object")) {            code.MOV (IMM_1, R_eax);            return;        }/* code.freeReg (); // all of them */        /* Get a pointer to the C class of the object into %o1. */        code.MOV (MR_ebx, R_esi);                if (Field.FT_array != cr.name.charAt(0)) {            /* Non array objects: if going to an interface, %esi must implement             * it; if going to a class, %esi must be a subclass of it.  We don't             * know yet whether this is a class or an interface, so have to             * make the decision at runtime. */            code.reserveCode (CodeBlock.brLOADNatCl, i, R_edi, cr);            code.MOV (new MemoryRef (IO_class_flags, R_edi), R_eax);            code.TEST (new Immediate (ClassRT.IS_INTERFACE), R_eax);            code.Jccn (Intel86.CND_nz, IMM_0);            int bo_isiface = code.nextByteOffs ();            /* Is not an interface: we're OK iff o2 is a super class of %esi. */            code.MOV (new MemoryRef (IO_class_nsupers, R_esi), R_ecx);            code.MOV (new MemoryRef (IO_class_nsupers, R_edi), R_edx);            code.SUB (R_edx, R_ecx);            code.Jccn (Intel86.CND_l, IMM_0);            int bo_fail1 = code.nextByteOffs ();            /* OK, %esi->nsupers >= o2->nsupers.  See if the superclass up             * that high is right.             * %esi->supers[%esi->nsupers-%edi->nsupers] == o2 */            code.MOV (new MemoryRef (IO_class_supers, R_esi), R_esi);            code.MOV (new MemoryRef (null, R_esi, 4, R_ecx, 4), R_ecx);            code.CMP (R_ecx, R_edi);            /* If not equal, jump to the failure point */            code.Jccn (Intel86.CND_ne, IMM_0);            int bo_fail2 = code.nextByteOffs ();            /* Are equal: cast is OK. */            code.MOV (IMM_1, R_eax);            code.JMPn (IMM_0);            int bo_exit1 = code.nextByteOffs ();            /* OK, here on out it's an interface.  Just call instanceof. */            code.PatchNearJump (bo_isiface, (code.nextByteOffs() - bo_isiface));            /* We already have %ebx as the object ref, %edi as the target             * class pointer.  Rearrange to meet the parameter requirements             * of instanceof(Object,Class,ArrayDim). */            code.PUSH (IMM_0);            code.PUSH (R_edi);            code.PUSH (R_ebx);            code.reserveCode (CodeBlock.brACALL, i, null, FA_instanceof);            code.ADD (new Immediate (3*4), R_esp);            /* Jump to exit */            code.JMPn (IMM_0);            int bo_exit2 = code.nextByteOffs ();                        /* Fail: backpatch all fails, and clear the return value */            code.PatchNearJump (bo_fail1, (code.nextByteOffs() - bo_fail1));            code.PatchNearJump (bo_fail2, (code.nextByteOffs() - bo_fail2));            code.XOR (R_eax, R_eax);            /* Exit: backpatch all exits */            code.PatchNearJump (bo_exit1, (code.nextByteOffs() - bo_exit1));            code.PatchNearJump (bo_exit2, (code.nextByteOffs() - bo_exit2));                        return;        }        if ((Field.FT_array != cr.name.charAt(1)) &&            (Field.FT_object != cr.name.charAt(1))) {            /* Array of primitive object: class has to be array of that             * primitive object.  Load the pointer to the appropriate class,             * hiding inside the acl_Foo object. */            loadClassPointer (i, cr, 1, R_edi);            /* Presume this will work, to simplify control flow */            code.MOV (IMM_1, R_eax);            /* See if classes match */            code.CMP (R_esi, R_edi);            code.Jccn (Intel86.CND_e, IMM_0);            int bo_exit = code.nextByteOffs ();            /* Nope, set to fail. */            code.XOR (R_eax, R_eax);            /* Here's where we go out. */            code.PatchNearJump (bo_exit, (code.nextByteOffs() - bo_exit));                    }        /* General array of object.  Count up the array depth,         * and call instanceof checking against the base class of the         * target class. */        int n = 0;        while (Field.FT_array == cr.name.charAt(n)) {            ++n;        }        if (Field.FT_object == cr.name.charAt(n)) {            /* Problem: loadClassPointer can't get the base class, because             * classes haven't been resolved yet.  So just call as 0, and have             * instanceof do the walk down the array chain. */            /* !!TOFIX!! We really need to be able to get ClassRefs that             * will be resolved, when we only have a string name. */            n = 0;        }        /* Already have object reference in %ebx.  Put class pointer into         * %edi, presuming this loadClassPointer function will go down to         * the base object.  Put array rank into %edi.  Call instanceof. */        code.PUSH (new Immediate (n));        loadClassPointer (i, cr, 0, R_eax);        code.PUSH (R_eax);        code.PUSH (R_ebx);        code.reserveCode (CodeBlock.brACALL, i, null, FA_instanceof);        code.ADD (new Immediate (3*4), R_esp);    }    /** Add the code for a JVM instruction to the code cache      * @param i the instruction to generate code for      * @param m the method that i appears in      */    private void    EmitCode (Method m,         // Method we're in              int idx)          // Index of instruction to work with    {        Instr i;                // Instruction we're working with        Opcode opc;             // Opcode for instruction        int lvi;                // Local variable index        MethodRef mr;           // MethodRef for operand        VariableRef vr;         // VariableRef for operand        FieldRef fr;            // FieldRef for operand        Constant cn;            // Constant for operand        Class c;                // Class for m        Field f;                // Field for m in c        int aw;                 // Number of argwords        int ab;                 // Number of arg bytes        long adr;               // Generic address value        String opdtype;         // Type of operand        int iv;                 // Intermediate int value        long lv;                // Intermediate long value        ClassRef cr;            // Class reference value        char tychar;            // Type character, from Field.FT_*        int boffs;              // Branch offset, for local backpatching        int boffs2;             // Another branch offset, for local backpatching        int boffs3;             // Another branch offset, for local backpatching        BackpatchInfo bpi;      // Backpatch info structure created        i = m.instrs [idx];//        System.out.println (i.toString());        /* Mark where code related to this instruction starts. */        if (idx >= code.instrToByteOffs.length) {            throw new InternalError ("EmitCode: idx " + idx + " but iTBO length " + code.instrToByteOffs.length +                                        " with instr len " + m.instrs.length);        }        code.instrToByteOffs [idx] = code.nextByteOffs ();        /* Tell the low-level generator where the evaluation stack         * is at right now.  For the most part, this will be either the same         * as the previous instruction, or zero at the top of a basic block,         * but in the presence of trinary operators it can be non-empty at         * the start of a basic block.  We have to assume that the evaluation         * stack is in a check-pointed state then. *///        int oesd = code.getEStackDepth ();//        int nesd = i.before.length ();//        if ((oesd != nesd) && (0 != nesd) && (Opcode.POP != i.opcode.code)) {//            System.out.println ("In " + m.cl.name + "." + m.fl.name + " from:\n" + m.instrs[idx-1] + "\nset estack from " + code.getEStackDepth () + " to " + i.before.length () + " before:\n" + i);//        }        code.setEStackTop (i.before.length());        /* If we're doing exception handling, we need to update the pc         * variable so we can tell where the exception was raised. */        if (0 < m.handlers.length) {            code.MOV (new Immediate (i.pc), excOheadAddr (ARLV_pc));        }        /* If instrumentation is enabled, increment the counter for this         * instruction. */        if (null != instrcounts) {            code.INC (new MemoryRef (new Immediate ((int) (icaddr + 4 * i.opcode.code)), null));        }        /* We can often deal with a bunch of instructions at once, so         * we switch on the opcode kind, rather than the exact opcode. */        opc = i.opcode;        switch (opc.kind) {        

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级在线观看| 国产精品萝li| 成人黄色综合网站| 国产在线一区二区综合免费视频| 一级做a爱片久久| 亚洲国产一区二区三区| 一区二区三区小说| 亚洲国产色一区| 亚洲一区二区在线播放相泽| 亚洲老妇xxxxxx| 亚洲国产综合人成综合网站| 亚洲无线码一区二区三区| 亚洲国产精品一区二区久久| 婷婷综合在线观看| 精品无码三级在线观看视频| 国产精品亚洲专一区二区三区| 国产成人aaaa| 色综合色综合色综合色综合色综合 | 在线精品视频免费播放| 在线区一区二视频| 日韩欧美www| 久久久久久久久久电影| 亚洲色图视频网| 亚洲6080在线| 国产乱子轮精品视频| 成人黄色网址在线观看| 在线观看网站黄不卡| 91精品欧美综合在线观看最新| 精品成人一区二区| 中文字幕一区二区三区不卡 | 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产精品视频麻豆| 亚洲在线视频免费观看| 青青草原综合久久大伊人精品优势| 韩国一区二区三区| 欧洲日韩一区二区三区| 久久久久国产精品免费免费搜索| 亚洲一区二区精品久久av| 国产乱理伦片在线观看夜一区| 色婷婷久久99综合精品jk白丝| 91精品国产综合久久精品图片| 国产精品久久久久婷婷二区次| 奇米888四色在线精品| 91麻豆精品一区二区三区| 日韩欧美久久久| 亚洲一区在线观看免费 | 色噜噜夜夜夜综合网| 91精品免费观看| 亚洲精品视频一区| 国内精品久久久久影院薰衣草 | 99久久精品国产导航| 91精品国产免费| 亚洲精品乱码久久久久久黑人| 久久疯狂做爰流白浆xx| 欧美视频日韩视频在线观看| 欧美国产精品v| 国产综合一区二区| 日韩欧美中文字幕一区| 午夜精品久久久久| 色综合天天视频在线观看| 国产女同互慰高潮91漫画| 麻豆久久久久久久| 欧美日韩电影在线播放| 亚洲欧美日本韩国| 成人av网址在线观看| 久久久久久影视| 精品一区二区日韩| 在线91免费看| 日韩高清一区二区| 欧美三级日韩三级国产三级| 亚洲老妇xxxxxx| 欧美性一级生活| 亚洲大片免费看| 欧美日产在线观看| 日韩av网站免费在线| 91精品国产欧美一区二区成人| 亚洲.国产.中文慕字在线| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 中文字幕成人av| 国产成人高清视频| 中文字幕国产精品一区二区| 国产91在线观看丝袜| 中文幕一区二区三区久久蜜桃| 国产精品888| 国产精品久久久久永久免费观看| jlzzjlzz亚洲日本少妇| 亚洲色图丝袜美腿| 欧美午夜不卡在线观看免费| 日韩电影免费一区| 欧美成人a视频| 国产成人精品三级| 1000部国产精品成人观看| 色婷婷久久久综合中文字幕 | 国产网站一区二区| av电影在线观看不卡| 亚洲欧美韩国综合色| 欧美日韩久久久久久| 麻豆久久一区二区| 国产精品丝袜久久久久久app| 色素色在线综合| 精东粉嫩av免费一区二区三区| 国产三级精品在线| 欧美亚洲国产bt| 国产一区免费电影| 亚洲免费资源在线播放| 欧美一区二区福利在线| 成人国产一区二区三区精品| 一片黄亚洲嫩模| 国产午夜精品一区二区三区视频 | 欧美一个色资源| 国产成人午夜精品影院观看视频| 亚洲欧美激情插| 亚洲精品在线电影| 在线免费视频一区二区| 紧缚奴在线一区二区三区| 综合激情网...| 26uuu亚洲综合色| 欧美日韩国产高清一区二区 | 亚洲国产精品久久久男人的天堂| 日韩精品一区二区三区swag| 91社区在线播放| 国产主播一区二区| 夜夜精品视频一区二区| 国产日产精品一区| 7777精品伊人久久久大香线蕉最新版| 成人午夜视频网站| 久久国产生活片100| 亚洲一区在线免费观看| 国产精品天干天干在线综合| 日韩精品一区国产麻豆| 在线观看亚洲成人| 99久久99久久精品国产片果冻| 另类小说视频一区二区| 图片区小说区区亚洲影院| 亚洲视频在线观看一区| 国产日本欧美一区二区| 精品国产91久久久久久久妲己 | 日韩电影在线看| 亚洲一卡二卡三卡四卡五卡| 国产精品久久久久9999吃药| 国产网站一区二区| 2019国产精品| 精品国产sm最大网站免费看| 日韩限制级电影在线观看| 91精品免费在线| 欧美一级黄色片| 欧美一区二区视频在线观看2020| 欧美自拍偷拍一区| 欧美性色aⅴ视频一区日韩精品| 99vv1com这只有精品| 91在线观看高清| 91蜜桃免费观看视频| av高清久久久| 在线观看三级视频欧美| 欧美性色综合网| 51精品国自产在线| 日韩一区二区三区四区| 欧美va亚洲va香蕉在线| 精品国产乱码久久| 国产欧美精品一区aⅴ影院| 久久久99久久| 国产精品久久久久一区二区三区| 综合色天天鬼久久鬼色| 日韩一区在线播放| 综合久久给合久久狠狠狠97色| 一区二区三区.www| 亚洲第一搞黄网站| 麻豆精品在线视频| 成人免费毛片片v| 一本色道久久综合精品竹菊| 欧美精品自拍偷拍| 精品国产一区二区三区av性色| 久久蜜臀中文字幕| 中文字幕一区二区在线观看| 一区二区三区免费| 免费观看日韩av| 国产成人aaaa| 欧美性生活影院| 久久精品一级爱片| 中文字幕在线一区免费| 亚洲国产成人av网| 国产精品资源在线| 色综合久久天天| 欧美大片一区二区| 中文字幕亚洲综合久久菠萝蜜| 日韩精品五月天| voyeur盗摄精品| 日韩精品在线一区二区| 国产精品国产自产拍高清av| 日韩精品一二区| 一本久久a久久免费精品不卡| 日韩一区二区在线观看视频播放| 国产亚洲成aⅴ人片在线观看| 亚洲一区二区四区蜜桃| 国产福利一区二区| 欧美久久久久免费| 亚洲欧美日韩国产中文在线| 激情文学综合插| 欧美人体做爰大胆视频| 国产精品国产a级|