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

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

?? intel86jitcodegen.java

?? java 到c的轉換程序的原代碼.對喜歡C程序而不懂JAVA程序的人很有幫助
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
                break;            case Opcode.F2D:                /* NOP */                break;                            /* Double operands: %f2 -> %f0 */            case Opcode.DNEG:                code.FCHS ();                break;                /* D2I: see F2I */            case Opcode.D2F:                /* NOP */                break;                /* D2L: see F2L */                            default:                throw new InternalError ("Unop code " + i.opcode + " not supported in JIT");        }        /* Store the result back on the execution stack, unless we did it         * already (e.g., for float-to-int conversions) */        if (! donestore) {            if (opdtype.equals ("i")) {                /* stack: %l0 -> val */                code.pushES (R_eax);            } else if (opdtype.equals ("f")) {                /* stack: %f0 -> val */                code.FpushES ();            } else if (opdtype.equals ("xl")) {                /* stack: %l0 -> val.w1 val.w2 */                code.LpushES (R_edx, R_eax);            } else if (opdtype.equals ("xd")) {                /* stack: %f0 -> val.w1 val.w2 */                code.DpushES ();            } else {                throw new InternalError ("Bad type in unop.");            }        }        return;    }    /** Emit code for a binary operation      * @param i instruction for codegen      */    private void    EmitBinOp (Instr i)    {        String opdtype;         // Type of operands of instruction        opdtype = i.opcode.push;        /* Load the operands into their registers.  Fortunately, no         * binary operators are cast operators, so the output and input         * types are the same.  Um, except for long shifts. */        if (opdtype.equals ("i")) {            /* stack: op1 op2  -> %eax %ecx */            code.popES (R_ecx);            code.popES (R_eax);        } else if (opdtype.equals ("f")) {            /* stack: op1 op2  -> ST(0) ST(1) */            code.FpopES ();            code.FpopES ();        } else if (opdtype.equals ("xl")) {            if ((Opcode.LSHL == i.opcode.code) ||                (Opcode.LSHR == i.opcode.code) ||                (Opcode.LUSHR == i.opcode.code)) {                /* stack: op1.w1 op1.w2 op2 -> %o0 %o2 */                /* We're going to call a function to do these, so pop                 * right into the outgoing args. */                code.popES (R_ecx);                code.LpopES (R_edx, R_eax);            } else {                /* stack: op1.w1 op1.w2 op2.w1 op2.w2  -> %l2 %l4 */                code.LpopES (R_ebx, R_ecx);                code.LpopES (R_edx, R_eax);            }        } else if (opdtype.equals ("xd")) {            /* stack: op1.w1 op1.w2 op2.w1 op2.w2  -> ST(0) ST(1) */            code.DpopES ();            code.DpopES ();        } else {            throw new InternalError ("Bad type in binop.");        }        /* Emit the code to operate on the results */        switch (i.opcode.code) {            /* int operands: %eax op %ecx -> %eax */            case Opcode.IADD:                code.ADD (R_ecx, R_eax);                break;            case Opcode.ISUB:                code.NEG (R_ecx);                code.ADD (R_ecx, R_eax);                break;            case Opcode.IMUL:                code.IMUL (R_ecx);                break;            case Opcode.IREM:                code.CWD ();                /* DIV and REM generate the wrong answer for MIN_VALUE/-1,                 * which is unrepresentable.  In fact, on Linux, this                 * throws an FPE.  We'd have to special-case that. */                code.IDIV (R_ecx);                code.MOV (R_edx, R_eax);                break;            case Opcode.IDIV:                code.CWD ();                code.IDIV (R_ecx);                break;            case Opcode.IAND:                code.AND (R_ecx, R_eax);                break;            case Opcode.IOR:                code.OR (R_ecx, R_eax);                break;            case Opcode.IXOR:                code.XOR (R_ecx, R_eax);                break;            case Opcode.ISHL:                code.SHL (R_cl, R_eax);                break;            case Opcode.ISHR:                code.SAR (R_cl, R_eax);                break;            case Opcode.IUSHR:                code.SHR (R_cl, R_eax);                break;                            /* long operands: %edx:%eax op %ebx:%ecx -> %edx:%eax */            case Opcode.LADD:                code.ADD (R_ecx, R_eax);                code.ADC (R_ebx, R_edx);                break;            case Opcode.LSUB:                code.SUB (R_ecx, R_eax);                code.SBB (R_ebx, R_edx);                break;            case Opcode.LMUL:            case Opcode.LREM:            case Opcode.LDIV:                /* Everybody else does this with a function call; let's                 * do it that way too. */                code.PUSH (R_ebx);                 code.PUSH (R_ecx);                 code.PUSH (R_edx);                 code.PUSH (R_eax);                 code.reserveCode (CodeBlock.brACALL, i, null,                                  getFuncAddr ((Opcode.LREM == i.opcode.code) ? FID_longrem :                                               (Opcode.LDIV == i.opcode.code) ? FID_longdiv :                                               FID_longmul));                code.ADD (IMM_16, R_esp);                break;            case Opcode.LAND:                code.AND (R_ecx, R_eax);                code.AND (R_ebx, R_edx);                break;            case Opcode.LOR:                code.OR (R_ecx, R_eax);                code.OR (R_ebx, R_edx);                break;            case Opcode.LXOR:                code.XOR (R_ecx, R_eax);                code.XOR (R_ebx, R_edx);                break;            case Opcode.LSHL:            case Opcode.LSHR:            case Opcode.LUSHR:                /* Already have op1 and op2 into %o0, %o1, %o2, so put in                 * the operator type, and call the function. */                code.PUSH (new Immediate (i.opcode.code));                code.PUSH (R_ecx);                code.PUSH (R_edx);                code.PUSH (R_eax);                code.reserveCode (CodeBlock.brACALL, i, null, FA_longshift);                code.ADD (IMM_16, R_esp);                break;                /* Float operands: %f2 op %f3 -> %f0 */            case Opcode.DADD:            case Opcode.FADD:                code.FADDP (R_ST1);                break;            case Opcode.DSUB:            case Opcode.FSUB:                code.FSUBRP (R_ST1);                break;            case Opcode.DMUL:            case Opcode.FMUL:                code.FMULP (R_ST1);                break;            case Opcode.DDIV:            case Opcode.FDIV:                /*!! UNFINISHED -- check for divbyzero !!*/                code.FDIVRP (R_ST1);                break;            case Opcode.DREM:            case Opcode.FREM:                /*!! UNFINISHED -- is this correct? !!*/                /* Convert from single to double precision, and call                 * the remdr function in toba */                code.SUB (IMM_16, R_esp);                code.FSTP (new MemoryRef (R_esp).setRefSize (8));                code.FSTP (new MemoryRef (IMM_8, R_esp).setRefSize (8));                code.reserveCode (CodeBlock.brACALL, i, null, FA_remdr);                code.ADD (IMM_16, R_esp);                break;            /* Double operands: same as single prec */            default:                throw new InternalError ("Binop code " + i.opcode + " not supported in JIT");        }        /* Store the result back on the execution stack */        if (opdtype.equals ("i")) {            /* stack: %l0 -> val */            code.pushES (R_eax);        } else if (opdtype.equals ("f")) {            /* stack: %f0 -> val */            code.FpushES ();        } else if (opdtype.equals ("xl")) {            /* stack: %l0 -> val.w1 val.w2 */            code.LpushES (R_edx, R_eax);        } else if (opdtype.equals ("xd")) {            /* stack: %f0 -> val.w1 val.w2 */            code.DpushES ();        } else {            throw new InternalError ("Bad type in binop.");        }        return;    }    /** Assuming we just got back from a call to the given method, push      * the return value onto the evaluation stack.      * @param mr MethodRef of called method (FieldRef if interface method)      */    private void    EmitRetvalStore (FieldRef mr)    {        String s = mr.signature;        switch (s.charAt (s.indexOf (')') + 1)) {            case Field.FT_byte:            case Field.FT_char:            case Field.FT_int:            case Field.FT_object:            case Field.FT_short:            case Field.FT_boolean:            case Field.FT_array:                code.pushES (R_eax);                break;            case Field.FT_float:                code.FpushES ();                break;            case Field.FT_long:                code.LpushES (R_edx, R_eax);                break;            case Field.FT_double:                code.DpushES ();                break;            case Field.FT_void:                break;            default:                throw new InternalError ("WTF in " + s + " from " + mr);        }        return;    }    /** Load the pointer to the C class for type into register      * @param i instruction inducing the load      * @param cr ClassRef to type we're looking for; not necessarily resolved      * @param getArray If nonzero, want the array-of-type instead of base type      * @param reg Register pointer should go into      */    private void    loadClassPointer (Instr i,  // Instruction inducing load                      ClassRef cr, // Reference to class                      int getArray, // Get array, or base type?                      Register reg) // Name of target register    {        int cp;                 // Integer representation of pointer        int arank;                /* We have here the name of a primitive or reference type.         * We need to get the pointer to the struct class that defines         * it. */        arank = 0;        while (Field.FT_array == cr.name.charAt(arank)) {            arank++;        }        cp = 0;        switch (cr.name.charAt (arank)) {            case Field.FT_byte:                cp = (int) getNPprimclass (Opcode.T_BYTE, getArray);                break;            case Field.FT_char:                cp = (int) getNPprimclass (Opcode.T_CHAR, getArray);                break;            case Field.FT_double:                cp = (int) getNPprimclass (Opcode.T_DOUBLE, getArray);                break;            case Field.FT_float:                cp = (int) getNPprimclass (Opcode.T_FLOAT, getArray);                break;            case Field.FT_int:                cp = (int) getNPprimclass (Opcode.T_INT, getArray);                break;            case Field.FT_long:                cp = (int) getNPprimclass (Opcode.T_LONG, getArray);                break;            case Field.FT_short:                cp = (int) getNPprimclass (Opcode.T_SHORT, getArray);                break;            case Field.FT_boolean:                cp = (int) getNPprimclass (Opcode.T_BOOLEAN, getArray);                break;            default:                /* Something not a primitive class.  We should just be able                 * to load the native class.  We'd better not want an                 * array version of it, though. */                if (0 != getArray) {                    throw new InternalError ("Don't support loadClassPointer of array non-primitives");                }                code.reserveCode (CodeBlock.brLOADNatCl, i, reg, cr);                cp = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区 在线观看视频| 丝袜美腿亚洲色图| 久久精品夜色噜噜亚洲a∨| 91精品国产入口在线| 欧美精品在线视频| 在线成人免费观看| 91精品欧美综合在线观看最新| 欧美吞精做爰啪啪高潮| 欧美日韩一级片网站| 欧美日韩www| 欧美一级黄色片| 日韩精品一区国产麻豆| 日韩欧美国产三级| 国产亚洲美州欧州综合国| 中文字幕欧美三区| 亚洲伦在线观看| 亚洲一级二级在线| 丝袜美腿高跟呻吟高潮一区| 久久精品国产精品亚洲精品| 国产精品一区三区| 91毛片在线观看| 欧美久久免费观看| 2021国产精品久久精品| 国产精品免费aⅴ片在线观看| 亚洲人吸女人奶水| 亚洲成年人网站在线观看| 日韩电影在线免费看| 极品少妇xxxx精品少妇| 不卡av免费在线观看| 欧美最猛性xxxxx直播| 日韩一级大片在线观看| 亚洲国产精品黑人久久久| 亚洲天堂精品视频| 午夜精品免费在线观看| 狠狠色丁香九九婷婷综合五月| 高清成人免费视频| 欧美无人高清视频在线观看| 欧美视频在线一区二区三区| 日韩免费电影一区| 国产精品免费人成网站| 一区二区三区欧美| 精品一区二区三区在线播放| gogogo免费视频观看亚洲一| 这里只有精品视频在线观看| 国产亚洲1区2区3区| 亚洲小说春色综合另类电影| 精品在线观看视频| 色视频欧美一区二区三区| 欧美丰满嫩嫩电影| 国产精品久久久久久久久动漫| 亚洲国产精品久久不卡毛片| 国产一区不卡视频| 在线观看91视频| 国产欧美一区二区精品仙草咪| 性做久久久久久久免费看| 成人免费观看视频| 日韩一级大片在线观看| 一区二区三区久久| 成人午夜看片网址| 日韩免费看网站| 亚洲高清免费视频| 99精品一区二区三区| 精品国产三级a在线观看| 亚洲国产成人91porn| 成人黄页毛片网站| 久久免费美女视频| 免费成人深夜小野草| 91看片淫黄大片一级| 国产视频一区在线观看| 美女在线一区二区| 欧美日韩在线一区二区| 国产精品你懂的| 国产精品一区专区| 91精品国产一区二区三区香蕉| 1区2区3区精品视频| 国产麻豆成人传媒免费观看| 91超碰这里只有精品国产| 亚洲精品视频一区二区| 国产老肥熟一区二区三区| 欧美一二三四区在线| 性做久久久久久| 欧美影院一区二区三区| 国产精品久久久久久久久快鸭| 国产在线视频一区二区三区| 日韩视频一区二区在线观看| 亚洲国产综合在线| 欧美午夜不卡在线观看免费| 亚洲男同性恋视频| 91在线码无精品| 国产精品成人免费在线| 成人动漫一区二区在线| 中文字幕乱码亚洲精品一区| 国产九色sp调教91| 久久网站热最新地址| 麻豆国产一区二区| 欧美一区午夜精品| 同产精品九九九| 欧美视频一区在线观看| 亚洲国产一区视频| 欧美日韩精品系列| 午夜精品成人在线| 91精品国产综合久久香蕉麻豆| 亚洲国产精品欧美一二99| 欧美日韩和欧美的一区二区| 亚洲成a人片在线观看中文| 在线观看日韩av先锋影音电影院| 日韩理论电影院| 欧美性色黄大片手机版| 亚洲精品va在线观看| 欧美专区日韩专区| 亚洲高清视频中文字幕| 91精品国产全国免费观看| 日本少妇一区二区| 精品国产一区二区三区不卡 | 国产一区二区三区久久悠悠色av| 欧美精品一区二区三区蜜桃| 国产一区91精品张津瑜| 久久久激情视频| 成人黄页毛片网站| 亚洲黄色性网站| 欧美日韩一区二区三区视频 | 91黄色免费版| 亚洲成av人片在线| 日韩一区二区视频| 国产精品资源在线看| 国产精品久久久久久久久果冻传媒| 宅男噜噜噜66一区二区66| 免费在线成人网| 2022国产精品视频| 99久久国产免费看| 午夜视频一区二区| xfplay精品久久| 成人av综合一区| 亚洲国产一区二区a毛片| 欧美sm极限捆绑bd| av电影在线不卡| 日韩精品福利网| 国产日产欧美精品一区二区三区| 91日韩在线专区| 蜜臀久久99精品久久久久久9| 久久久精品一品道一区| 91色视频在线| 免费观看一级特黄欧美大片| 国产清纯在线一区二区www| 99久久国产综合精品麻豆| 日韩国产精品久久久久久亚洲| 久久蜜桃香蕉精品一区二区三区| 91女神在线视频| 日本在线观看不卡视频| 中文字幕中文在线不卡住| 91精品国产91久久久久久一区二区| 国产精品中文有码| 亚洲国产毛片aaaaa无费看| 久久午夜国产精品| 欧美视频一区二区在线观看| 国产精品亚洲午夜一区二区三区 | 在线成人午夜影院| 风间由美一区二区av101| 亚洲国产中文字幕| 中国av一区二区三区| 91精品国产综合久久久久| 99这里只有精品| 美女任你摸久久| 亚洲国产精品一区二区久久恐怖片 | 91精品在线观看入口| 99视频超级精品| 国产一区二区三区不卡在线观看| 一区二区成人在线| 中文幕一区二区三区久久蜜桃| 欧美一级片在线看| 91福利国产成人精品照片| 国产精品一区二区在线看| 日韩不卡手机在线v区| 一区二区三区毛片| 国产精品国产三级国产| 久久这里只有精品6| 欧美男男青年gay1069videost| eeuss鲁片一区二区三区在线看| 国内精品久久久久影院色| 日日骚欧美日韩| 一区二区三区日韩欧美精品 | 蜜臀av国产精品久久久久| 亚洲黄色尤物视频| 国产精品久久久久aaaa樱花 | 中文av字幕一区| 精品国产凹凸成av人导航| 欧美丝袜自拍制服另类| 99精品热视频| av高清久久久| 成人国产电影网| 国产精品99久久久| 国产真实乱对白精彩久久| 免费观看一级欧美片| 天天操天天色综合| 午夜精品福利一区二区蜜股av| 一区二区欧美国产| 亚洲乱码日产精品bd| 亚洲三级久久久| 亚洲欧美一区二区三区孕妇| 亚洲青青青在线视频|