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

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

?? intel86jitcodegen.java

?? java 到c的轉換程序的原代碼.對喜歡C程序而不懂JAVA程序的人很有幫助
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
    private static final int ARLV_oldbuf = 1; // void *    private static final int ARLV_newbuf = 0; // jmp_buf    /* Probably the first few are one word, but maybe not.  jmp_buf is a     * pretty good sized structure.  The first array of ints is     * initialized to the sizes of these objects; the second to their     * offsets within an activation record. */    private static int excOheadSize [];    private static int excOheadOffs [];    private static int excOheadTotal;    /** Return the number of bytes required to hold each of the local      * overhead variables.  The order of storage must match the index      * ordering of ARLV_foo above.      * @returns array of ints with variable sizes.      * Toba hash code: __Ds3WL      */    private static native int[]    getOverheadSize ();    /* Overhead initialization */    static {        int offs;        int i;                /* Get the size of the local variables, then compute their offsets,         * with necessary alignments. */        excOheadSize = getOverheadSize ();        excOheadOffs = new int [excOheadSize.length];        offs = 0;        for (i = 0; i < excOheadSize.length; i++) {            if (4 < excOheadSize [i]) {                // 8-byte align large elements                offs = (7 + offs) & ~0x07;            } else {                // 4-byte align normal elements                offs = (3 + offs) & ~0x03;            }            excOheadOffs [i] = offs;            offs += excOheadSize [i];        }        // 8-byte align whatever follows        excOheadTotal = (7 + offs) & ~0x07;        /* Go through and update the offsets so we can get to values         * at %ebp[- (overheadOffs + excOheadOffs[ARLV])]. */        for (i = 0; i < excOheadOffs.length; i++) {            excOheadOffs [i] = (excOheadTotal - excOheadOffs [i]);//            System.out.println ("OH " + i + " is at " + excOheadOffs [i] + " of " + excOheadTotal);        }    }    /* This is the offset from %ebp to where the overhead data starts.     * Covers: %esi, %edi, %ebx */    private int overheadOffs = 3 * 4;    /* This is the overhead size for this code's AR: either 0 or     * excOheadTotal */    private int overheadSize;    /** Convert from local variable number to a MemoryRef operand representing      * a load from the AR.      * @param lvi The local variable offset; starts from zero      * @returns reference to stack location of local variable */    private MemoryRef    LVOffs (int lvi)    {        return new MemoryRef (new Immediate (- (overheadOffs + overheadSize + 4 * (1 + lvi))), R_ebp);    }    private MemoryRef    excOheadAddr (int arlv)    {//        System.out.println (arlv + " is " + (overheadOffs + excOheadOffs [arlv]) + " below %ebp");        return new MemoryRef (new Immediate (- (overheadOffs + excOheadOffs [arlv])), R_ebp);    }    /** Allocate activation record, preserve callee-saved registers, and      * copy parameters onto Java stack.      * @param m method for which we're generating code      * @param ndata number of words to reserve for local data; -1 for normal method      */    private void    Prologue (Method m,         // What we're generating code for              int ndata)        // Number of data words for special AR    {        int i;                  // General purpose index        int maxcaw;             // Maximum callee argument words        int aw;                 // Callee argument words//        System.out.println ("Method argstack in: " + m.astack + " rstack " + m.rstack);        /* Start by saving the old base pointer, and setting the new         * one. */        code.PUSH (R_ebp);        code.MOV (R_esp, R_ebp);                /* Build up the frame size as we add things to the stack */        frame_size = 0;        /* Save the basic offset for the overhead information */        overheadOffs = frame_size;                /* What kind of AR are we generating? */        if (0 <= ndata) {            /* If we were told a non-zero amount of local data to store, just do             * that.  We're probably generating the AR for a synchronization             * wrapper.  NB: The caller is responsible for setting overheadSize,             * _before_ this function is called. */            frame_size += overheadSize;            frame_size += 4 * ndata;        } else {            /* We're computing what's needed for the method under consideration.             * Now, if there's an exception handler, we need to add local storage             * for some support data. */            overheadSize = 0;            if ((null != m.handlers) && (0 < m.handlers.length)) {                overheadSize = excOheadTotal;            }            frame_size += overheadSize;            /* Now add space for local Java variables */            frame_size += 4 * m.max_locals;            /* Here's where the Java evaluation stack starts.  Inform             * the low-level code generator, so it can maintain the ES             * pointer when it pushes and pops. */            code.setEStackBase (frame_size);            /* Add space for the Java evaluation stack */            frame_size += 4 * m.max_stack;        }        /* Sanity checks: frame size must be word-aligned */        if (0 != (frame_size % 4)) {            throw new InternalError ("frame size not multiple of 4");        }                /* Set the stack pointer to be below what we've reserved. */        code.SUB (new Immediate (frame_size), R_esp);        /* Presume we're going to modify all the callee-saved registers, so         * save them now. */        code.PUSH (R_esi);        code.PUSH (R_edi);        code.PUSH (R_ebx);        /* Stuff the name of this function in the standard location.         * NB: We can only do this if there are exception handlers, because         * otherwise we didn't allocate space for local variables on         * the AR. */        if ((null != m.handlers) && (0 < m.handlers.length)) {            code.MOV (new Immediate ((int)getStringAddress (m.cl.name + "." + m.fl.name)), excOheadAddr (ARLV_methname));//        code.PUSH (excOheadAddr (ARLV_methname));//        code.reserveCode (CodeBlock.brACALL, m.instrs[0], null, FA_puts);//        code.ADD (new Immediate (2), R_esp);        }        /* If we're creating a standard frame for executing Java code, then         * store the arguments into the local variable arena.  If not,         * whoever's creating us should take responsibility for preserving         * arguments. */        if (0 > ndata) {            int an;             // Number of arguments moved            int naw;            // Number of argument words moved            char c;             // Char denoting argument type            /* The problem here is that the JVM local variables are in the             * wrong order relative to how the parameters are passed on             * the Intel stack.  We need to reverse them; but we can't             * reverse the words in 64-bit entities.  So we walk through             * doing copies from the caller args into the JVM locals             * based on the type of the parameters.  Fortunately, all             * parameters of 1 or 2 bytes are passed as full 4-byte words. */            /* Keep track of the number of words transferred so far. */            naw = 0;            /* If this is an instance method, the first whosit is the             * object reference. */            if (0 == (m.fl.access & ClassData.ACC_STATIC)) {                code.MOV (new MemoryRef (IMM_8, R_ebp), R_eax);                code.MOV (R_eax, LVOffs(0));                ++naw;            }            naw = 0;            while (naw < m.astack.length()) {                if ('x' == m.astack.charAt (naw)) {                    /* Copy over a double word, stored LSW MSW, and                     * preserve its order. */                    code.MOV (new MemoryRef (new Immediate (8+4*naw), R_ebp), R_esi); // LSW                    code.MOV (new MemoryRef (new Immediate (12+4*naw), R_ebp), R_edi); // MSW                    code.MOV (R_esi, LVOffs (naw+1)); // LSW                    code.MOV (R_edi, LVOffs (naw)); // MSW                    naw += 2;                } else {                    /* Copy over a single word */                    code.MOV (new MemoryRef (new Immediate (8+4*naw), R_ebp), R_eax);                    code.MOV (R_eax, LVOffs (naw));                    naw++;                }            }        }        /* Call the yield function if there is one */        if (null != m.instrs) {            emitBackJumpCall (m.instrs[0]);        }        return;    }    /* Given an array structure at %ebx, and an index at %eax, make     * sure the index is legitimate, and compute the address of the     * desired element.  The element address is returned in %ebx. */    private void    emitEltOffsetCode (int esz,                       Instr ins)    {        int sf;        /* Make sure the array reference isn't null. */                code.OR (R_ebx, R_ebx);        code.Jccn (Intel86.CND_nz, IMM_0);        int boffs = code.nextByteOffs ();        /* Call throwNullPointerException (0) */        code.PUSH (IMM_0);        code.reserveCode (CodeBlock.brACALL, ins, null, FA_throwNPE);        /* No need to pop args; we never return here. */        code.UNIMP (0);        // sure about that?        /* Here's where we end up if we were nz */        code.PatchNearJump (boffs, code.nextByteOffs() - boffs);                /* Make sure the index is in range. */        code.OR (R_eax, R_eax);        code.Jccn (Intel86.CND_l, IMM_0);        boffs = code.nextByteOffs ();        /* ecx = ebx->length */        code.MOV (new MemoryRef (IO_barray_length, R_ebx), R_ecx);        /* eax < ecx? */        code.CMP (R_ecx, R_eax);        code.Jccn (Intel86.CND_l, IMM_0);        code.PatchNearJump (boffs, code.nextByteOffs() - boffs);        boffs = code.nextByteOffs ();        code.PUSH (R_eax);        code.PUSH (R_ebx);        code.reserveCode (CodeBlock.brACALL, ins, null, FA_throwAIOBE);        code.UNIMP (0);        // sure about that?        /* Here's where we end up if we were in range */        code.PatchNearJump (boffs, code.nextByteOffs() - boffs);        code.LEA (new MemoryRef (IO_barray_data, R_ebx, esz, R_eax, 4), R_ebx);        return;    }    /** Generate code to initialize a class if necessary, leaving the class      * reference in %ebx.      * @param i the instruction that induced the initialization requirement      * @param or the reference to the object (FieldRef or ClassRef) that may need to be initialized      */    private void    emitClassInit (Instr i,                   Object or)    {        int boffs;                /* Load the address of the native struct class object that is the         * basis of the object referred to by fr. */        code.reserveCode (CodeBlock.brLOADNatCl, i, R_ebx, or);        /* The first word of the class object is the flag indicating         * whether it needs to be initialized.  If that's zero, the class         * has been initialized, and we skip over the call to the         * initializer.*/        code.CMP (IMM_0, MR_ebx);        code.Jccn (Intel86.CND_z, IMM_0);        boffs = code.nextByteOffs ();        code.PUSH (R_ebx);        code.reserveCode (CodeBlock.brACALL, i, null, FA_initclass);        code.ADD (IMM_4, R_esp);        code.PatchNearJump (boffs, code.nextByteOffs() - boffs);    }    /** Push na arguments off the evaluation stack onto the code stack for      * calling a C function.   ES args are popped last to first, so first      * arg is at top of C stack.  MUST NOT TRASH %eax.      * @param nwords number of words used as parameters      * @returns int number of bytes pushed onto stack */    private int    setCallArgs (int nwords)    {        int an;        for (an = 0; an < nwords; an++) {            code.PUSH (new MemoryRef (new Immediate (code.peekEStackOffs (an)), R_ebp));        }        code.tossES (nwords);        return 4*nwords;    }    /** Get arguments off evaluation stack and put them where they're      * needed for the function call.      * @param sig Signature of caller's parameters      * @returns int number of bytes pushed onto stack */    private int    setCallArgs (String sig)    {        int naw;                // Number of words in arguments        int an;                 // Argument word counter        an = 0;        naw = sig.length () - 1;        while (0 <= naw) {            if ((0 < naw) && ('x' == sig.charAt (naw-1))) {                /* Copy over a double word, stored LSW MSW, and                 * preserve its order. */                code.PUSH (new MemoryRef (new Immediate (code.peekEStackOffs (an+1)), R_ebp)); // msw                code.PUSH (new MemoryRef (new Immediate (code.peekEStackOffs (an)), R_ebp)); // lsw                naw -= 2;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美狂野另类xxxxoooo| 丁香六月久久综合狠狠色| 欧美日韩不卡视频| 天天亚洲美女在线视频| 欧美一区二区三区电影| 精品一区二区三区欧美| 久久久国产午夜精品| 北条麻妃一区二区三区| 亚洲黄色小视频| 欧美精品视频www在线观看| 毛片不卡一区二区| 久久精品水蜜桃av综合天堂| 成人免费va视频| 亚洲成人www| 欧美电影免费观看高清完整版在线 | 麻豆视频观看网址久久| 久久久一区二区| fc2成人免费人成在线观看播放| 亚洲人成伊人成综合网小说| 欧美喷水一区二区| 久久精品国产久精国产| 国产精品日产欧美久久久久| 在线观看www91| 国产一区激情在线| 亚洲精品中文在线影院| 欧美mv日韩mv国产网站| 99久久婷婷国产综合精品| 亚洲成人精品在线观看| 久久在线免费观看| 99精品视频一区二区三区| 精品在线免费观看| 亚洲三级久久久| 日韩久久精品一区| 色一情一乱一乱一91av| 美美哒免费高清在线观看视频一区二区| 国产一区二区三区四区在线观看| 国产精品久线观看视频| 欧美一级黄色大片| 91在线视频在线| 国内欧美视频一区二区| 亚洲综合色区另类av| 亚洲国产高清在线| 欧美成人r级一区二区三区| 91国产视频在线观看| 国产精品一区二区三区乱码| 亚洲一区中文在线| 国产精品免费免费| 欧美xxxxxxxx| 欧美日韩一级二级| 成人精品免费网站| 极品少妇xxxx精品少妇偷拍| 亚洲综合一区二区三区| 国产精品卡一卡二| 国产亚洲va综合人人澡精品| 欧美一区二区视频在线观看 | 亚洲成人av福利| 国产精品国产精品国产专区不片| 欧美一级一区二区| 欧美天天综合网| 91丨porny丨在线| av午夜精品一区二区三区| 国产精品自在欧美一区| 青草国产精品久久久久久| 亚洲成a人v欧美综合天堂下载| 国产精品麻豆一区二区| 欧美激情在线免费观看| 久久精品综合网| 26uuu久久综合| 精品久久一区二区三区| 91精品国产综合久久精品麻豆 | 欧美日韩三级在线| 色综合久久综合网| 色哟哟一区二区在线观看| 99久久夜色精品国产网站| 成年人国产精品| 成人午夜av在线| 成人国产一区二区三区精品| 国产乱理伦片在线观看夜一区| 国产一区二区视频在线播放| 国产在线视频精品一区| 国产乱妇无码大片在线观看| 国产一区二区免费看| 国产高清在线观看免费不卡| 国产精品羞羞答答xxdd| 成人综合在线网站| 99re热视频精品| 色婷婷综合五月| 欧美精品色一区二区三区| 在线不卡免费av| 精品国产91久久久久久久妲己| 日韩久久久久久| 国产欧美视频在线观看| 最新国产精品久久精品| 一区二区三区在线免费| 亚洲午夜在线电影| www.在线欧美| 波多野结衣中文字幕一区二区三区| 成人h版在线观看| 色综合久久久网| 91麻豆精品国产91久久久使用方法| 欧美一级一区二区| 国产精品久久久久四虎| 一区二区三区精品| 日韩国产成人精品| 成人一区二区三区视频在线观看 | 青青草国产精品亚洲专区无| 黑人巨大精品欧美黑白配亚洲| 成人自拍视频在线观看| 欧美色中文字幕| 精品美女被调教视频大全网站| 中文字幕第一区第二区| 亚洲国产视频直播| 极品销魂美女一区二区三区| 一本久道久久综合中文字幕| 欧美一区二区三区的| 中文字幕乱码亚洲精品一区| 亚洲一本大道在线| 国产老肥熟一区二区三区| 日本电影亚洲天堂一区| 久久看人人爽人人| 亚洲国产wwwccc36天堂| 丁香亚洲综合激情啪啪综合| 欧美日韩精品一区二区三区| 国产精品沙发午睡系列990531| 午夜精品福利视频网站| 成人免费视频播放| 日韩午夜在线观看| 一区二区三区日韩欧美精品| 国产精品自拍在线| 91麻豆精品国产91久久久更新时间| 日本一二三四高清不卡| 奇米精品一区二区三区在线观看一| 成人高清免费观看| 欧美精品一区二区在线观看| 亚洲国产一区二区视频| 国产成人aaaa| 欧美xxxxx裸体时装秀| 亚洲成人综合在线| 91原创在线视频| 国产丝袜欧美中文另类| 午夜电影网一区| 在线观看亚洲精品视频| 中文字幕 久热精品 视频在线 | 成人污污视频在线观看| 日韩免费高清av| 天堂蜜桃一区二区三区| 99久久国产综合色|国产精品| 精品99999| 美女高潮久久久| 欧美久久免费观看| 亚洲国产一区二区在线播放| 色婷婷精品大在线视频| 亚洲欧美日韩在线| 97久久精品人人爽人人爽蜜臀| 国产情人综合久久777777| 色综合视频一区二区三区高清| 精品福利一二区| 精品一区二区三区的国产在线播放 | 欧美影院精品一区| 亚洲色图欧美在线| 99精品久久久久久| 自拍视频在线观看一区二区| 成人va在线观看| 国产精品免费看片| 99视频在线观看一区三区| 中文字幕av免费专区久久| 成人av电影在线播放| 国产欧美视频一区二区三区| 成人午夜视频网站| 国产女主播视频一区二区| 国产99久久久国产精品| 中文字幕第一区| 色噜噜狠狠色综合欧洲selulu| 亚洲欧美一区二区三区极速播放| av电影天堂一区二区在线| 亚洲欧美综合色| 在线视频国产一区| 天天综合天天综合色| 777亚洲妇女| 国模少妇一区二区三区| 久久影院视频免费| 成人av在线一区二区| 亚洲天堂中文字幕| 欧美日韩精品一二三区| 麻豆高清免费国产一区| 国产亚洲视频系列| 大陆成人av片| 亚洲黄色在线视频| 日韩三区在线观看| 国产乱码精品一区二区三区忘忧草| 国产精品视频免费看| 91国模大尺度私拍在线视频| 日本少妇一区二区| 国产亚洲欧美色| 色香色香欲天天天影视综合网| 五月天激情综合| 欧美—级在线免费片| 欧美性色黄大片手机版| 国产一区二区三区电影在线观看 | 欧美性感一区二区三区|