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

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

?? sparcjitcodegen.java

?? java 到c的轉換程序的原代碼.對喜歡C程序而不懂JAVA程序的人很有幫助
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
        /* Sanity checks: frame size must be double-word aligned, and         * must fit in a signed 13-bit immediate (for the version of         * SAVE we're using) */        if (0 != (frame_size % 8)) {            throw new InternalError ("frame size not multiple of 8");        }        if (4096 <= frame_size) {            throw new InternalError ("can't handle frame sizes exceeding 2^12-1");        }                /* Create a new AR of the right size. */        code.SAVE ("%sp", -frame_size, "%sp");        /* Stuff the name of this function in the standard location. */        i = (int)getStringAddress (m.cl.name + "." + m.fl.name);        code.SETHI (i, "%o0");        code.SetLo (i, "%o0");        code.ST ("%o0", "%fp", excOheadOffs [ARLV_methname]);//        code.PUSH (excOheadAddr (ARLV_methname));//        code.reserveCode (CodeBlock.brACALL, m.instrs[0], null, getFuncAddr (FID_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) {            /* Figure out how many arguments we need to save.  Add one             * for the object reference of instance methods. */            aw = Instr.argwords (m.fl.signature);            if (0 == (m.fl.access & ClassData.ACC_STATIC)) {                aw++;            }            for (i = 0; i < aw; i++) {                if (6 > i) {                    /* Already in %ii. */                    code.ST ("%i" + i, "%fp", LVOffs (i));                } else {                    /* In caller's activation record.  Copy from there into                     * local variables. */                    code.LD ("%fp", SPARC.ARGPUSH + (i-6) * 4, "%o7");                    code.ST ("%o7", "%fp", LVOffs (i));                }            }            /* Initialize the register we use for the evaluation stack pointer.             * Not useful for non-standard frames. */            code.ADD ("%fp", LVOffs (m.max_locals), "%l7");        }        return;    }    /** Generate code to initialize a class if necessary, leaving the class      * reference in %o0.      * @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.  Put it into %o0 so         * it's ready to be used as a parameter to the initializer. */        code.reserveCode (CodeBlock.brLOADNatCl, i, "%o0", 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.LD ("%o0", 0, "%o7");        code.CMP ("%o7", 0);        boffs = code.nextByteOffs ();        code.BE (0);        code.NOP ();        code.reserveCode (CodeBlock.brACALL, i, "noreg", getFuncAddr (FID_initclass));        code.NOP ();        code.PatchDisp22 (boffs, (code.nextByteOffs() - boffs) >>> 2);    }    /** Pop arguments off evaluation stack and put into outgoing SPARC registers.      * @param na number of argument words to pop      * @param abase start as if from the abase'th output argument      */    private void    setCallArgs (int na,                 int abase)    {        /* Don't do anything if there are no words to pop */        if (0 >= na) {            return;        }        /* Copy the values off the evaluation stack into the proper location */        for (int a = 1; a <= na; a++) {            int ai;            /* Get which argument this is in the actual call. */            ai = abase + (a - 1);            if (6 > ai) {                /* First six values go into ALU output registers 0 through 5 */                code.peekES (na-a, "%o"+ai);            } else {                /* Remainder go into the outoing parameter dump area in this                 * function's AR */                code.peekES (na-a, "%o7");                code.ST ("%o7", "%sp", 4*(ai-6) + SPARC.ARGPUSH);            }        }        /* Update the evaluation stack pointer to pop the arguments all         * at once. */        code.tossES (na);        return;    }    /** Pull elements off stack and prepare to use them as the first args to      * a function call.       * @param na number of elements to use as arguments      */    private void    setCallArgs (int na)    {        setCallArgs (na, 0);    }    /** If the source is past the destination, this is a backedge, and we      * insert a call to some routine that needs to be called regularly.      * E.g., a thread yield function on a non-preemptive thread system. */    private void    checkBackJump (Instr ci,    // Current instruction                   int src,     // Where we are now (label, addr, ??)                   int dst)     // Where we're jumping to (label, addr, ??)    {        if (src > dst) {            /* If this is a jump backwards, get the address of the function             * we call on back edges, and call it if it exists. */            long bjfn = getFuncAddr (FID_backjumpfn);            if (0 != bjfn) {                code.reserveCode (CodeBlock.brACALL, ci, null, bjfn);            }        }        return;    }    /** Pull object off stack and make sure it's not a null pointer.      * After this, the object reference is in treg.      * @param i how far back down stack to look, zero is top elt      * @param treg what register to put object reference into      * @param npeCode indicate what NullPointerException argument to throw      */    private void    checkObjectRef (int i,                    String treg,                    Instr ins)    {        /* Load the value from the execution stack */        code.peekES (i, treg);        /* Compare it to zero */        code.CMP (treg, 0);        /* If nonzero, jump over the next two instructions */        int boffs = code.nextByteOffs ();        code.BNE (0);        code.NOP ();            // fill delay slot        /* Call throwNullPointerException (0) */        code.MOV (0, "%o0");        code.reserveCode (CodeBlock.brACALL, ins, "noreg", getFuncAddr (FID_throwNPE));        code.NOP ();            // fill delay slot                // Here's where we continue        code.PatchDisp22 (boffs, (code.nextByteOffs() - boffs) >>> 2);        return;    }    /** Emit code for an if_cmp/ifcond instruction, including the jumps.      * @param i the instruction we're executing code for.      * @param m the method i belongs to, for looking up target addresses      */    private void    EmitIfCmp (Instr i,         // Instruction to codegen               Method m)        // Method info    {        int boffs;                /* Operands are either one or two words.  Pop what's necessary,         * and set the condition codes to represent the status of the         * condition variable. */        if (Opcode.IFZRO == i.opcode.kind) {            code.popES ("%l0");            code.CMP ("%l0", 0);        } else {            // Better be IFCMP            code.popES ("%l1");            code.popES ("%l0");            code.CMP ("%l0", "%l1");        }        /* Because we're jumping to a JVM offset, which may be in code         * we haven't built yet, we need to generate a brJUMP-style         * backpatch.  That's not supported for conditional jumps, so         * for test X, we do "if !X goto afterjump; jump T; afterjump..." */        boffs = code.nextByteOffs ();        switch (i.opcode.code) {            case Opcode.IF_ICMPEQ:            case Opcode.IF_ACMPEQ:            case Opcode.IFNULL:            case Opcode.IFEQ:                // Equality test: skip jump if not equal                code.BNE (0);                code.NOP ();                break;            case Opcode.IF_ICMPNE:            case Opcode.IF_ACMPNE:            case Opcode.IFNE:            case Opcode.IFNONNULL:                // Inquality test: skip jump if equal                code.BE (0);                code.NOP ();                break;            case Opcode.IF_ICMPLT:            case Opcode.IFLT:                code.BGE (0);                code.NOP ();                break;            case Opcode.IF_ICMPGT:            case Opcode.IFGT:                code.BLE (0);                code.NOP ();                break;            case Opcode.IF_ICMPLE:            case Opcode.IFLE:                code.BG (0);                code.NOP ();                break;            case Opcode.IF_ICMPGE:            case Opcode.IFGE:                code.BL (0);                code.NOP ();                break;        }//        System.out.println ("Jump to pc " + i.val + " is label " + m.instrs[m.pcmap [i.val]].label);        checkBackJump (i, i.pc, i.val);        code.reserveCode (CodeBlock.brJUMP, i, "noreg", m.instrs[m.pcmap [i.val]].label);        code.NOP ();    // fill delay slot        /* Continues here if OK */        code.PatchDisp22 (boffs, (code.nextByteOffs() - boffs) >>> 2);    }    /** Emit code for a unary operation      * @param i instruction for codegen      */    private void    EmitUnOp (Instr i)    {        String opdtype;         // Type of operands of instruction        boolean donestore;        opdtype = i.opcode.push;        /* Load the operand into its registers.  Boy it'd be cool if the         * operand input type was available, but all we have is the         * output type, and there be cast operations here. */        switch (i.opcode.code) {            case Opcode.INEG:            case Opcode.I2L:            case Opcode.I2F:            case Opcode.I2D:            case Opcode.INT2BYTE:            case Opcode.INT2CHAR:            case Opcode.INT2SHORT:                /* stack: op1 -> %l0 */                code.popES ("%l0");                break;            case Opcode.FNEG:            case Opcode.F2D:            case Opcode.F2I:            case Opcode.F2L:                /* stack: op1  -> %f2 */                code.FpopES ("%f2");                break;            case Opcode.LNEG:            case Opcode.L2I:            case Opcode.L2F:            case Opcode.L2D:                /* stack: op1.w1 op1.w2  -> %l2 */                code.LpopES ("%l2");                break;            case Opcode.DNEG:            case Opcode.D2F:            case Opcode.D2I:            case Opcode.D2L:                /* stack: op1.w1 op1.w2  -> %f2 */                code.DpopES ("%f2");                break;;            default:                throw new InternalError ("Bad opcode in binop." + i);        }        /* Emit the code to operate on the results */        donestore = false;        switch (i.opcode.code) {            /* int operands: %l0  -> %l0 */            case Opcode.INEG:                code.SUB ("%g0", "%l0", "%l0");                break;            case Opcode.I2L:                code.MOV ("%l0", "%l1");                code.SRA ("%l0", 31, "%l0");                break;            case Opcode.I2F:            case Opcode.I2D:                code.ST ("%l0", "%fp", - (overheadSize + SPARC.ALUFPUXFERSIZE));                code.LDF ("%fp", - (overheadSize + SPARC.ALUFPUXFERSIZE), "%f2");                if (Opcode.I2F == i.opcode.code) {                    code.FiTOs ("%f2", "%f0");                } else {                    code.FiTOd ("%f2", "%f0");                }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久久久| 国产偷国产偷亚洲高清人白洁| 性做久久久久久久免费看| 自拍偷拍国产精品| 国产精品久久久久久福利一牛影视| 国产亚洲一区二区三区四区| av在线这里只有精品| 亚洲精品写真福利| 亚洲超碰97人人做人人爱| 午夜亚洲国产au精品一区二区| 日韩国产在线观看| 激情小说亚洲一区| 成人午夜精品在线| 欧洲激情一区二区| 日韩三级高清在线| 久久久国际精品| 国产精品免费aⅴ片在线观看| 国产婷婷精品av在线| 亚洲男帅同性gay1069| 蜜臀国产一区二区三区在线播放 | 久久这里只有精品首页| 国产精品白丝av| 91同城在线观看| 欧美人xxxx| 日本一区二区免费在线| 亚洲裸体xxx| 久久国产欧美日韩精品| 美女在线视频一区| 国产精品1区2区| 91麻豆精品秘密| 91精品欧美综合在线观看最新| xnxx国产精品| 中文字幕一区二区三中文字幕| 日韩国产一二三区| 99久久综合色| 2020国产成人综合网| 亚洲狠狠爱一区二区三区| 国产一区二区三区最好精华液| 欧美三级资源在线| 国产精品欧美综合在线| 日韩高清一区在线| 色婷婷国产精品综合在线观看| 精品国产凹凸成av人导航| 午夜精品在线看| 国产成人一级电影| 欧美久久一二区| 国产精品久久久久久久久晋中 | 成人中文字幕电影| 91精品国产综合久久久久 | 91片在线免费观看| 福利电影一区二区三区| 男女激情视频一区| 在线免费观看不卡av| 亚洲v精品v日韩v欧美v专区| 欧美日韩国产大片| 久久国内精品视频| 欧美日韩在线一区二区| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲女子a中天字幕| 极品尤物av久久免费看| 在线综合+亚洲+欧美中文字幕| 自拍偷拍欧美激情| av激情成人网| 国产精品久久久久婷婷| 国产福利电影一区二区三区| 日韩欧美资源站| 久久男人中文字幕资源站| 亚洲国产综合视频在线观看| 日本特黄久久久高潮| 91麻豆精品国产无毒不卡在线观看| 一区二区三区在线免费| 色婷婷久久久综合中文字幕| 中文字幕一区三区| 99久久免费国产| 亚洲欧洲日产国产综合网| 国内精品视频一区二区三区八戒| 日韩欧美高清在线| 国产在线视频一区二区| xnxx国产精品| 成人18视频日本| 亚洲美女淫视频| 欧美亚洲综合色| 午夜久久久影院| 欧美成人r级一区二区三区| 麻豆久久久久久久| 欧美v日韩v国产v| 国产精品亚洲一区二区三区在线 | 91精品在线观看入口| 国产精品美女久久久久高潮| 青娱乐精品视频在线| 日韩精品一区二区在线观看| 国产自产高清不卡| 久久色在线观看| 成人激情文学综合网| 国产精品另类一区| 在线一区二区三区四区五区| 日欧美一区二区| 26uuu精品一区二区在线观看| 国产一区二区三区四区五区美女| 日韩欧美亚洲国产另类| 国产成人午夜精品5599| 亚洲精选免费视频| 欧美在线观看视频一区二区| 国产精品乱人伦| 欧美性猛交xxxx乱大交退制版| 欧美一区二区二区| 一区二区三区日韩在线观看| 精品免费国产二区三区| 一本一道久久a久久精品综合蜜臀| 午夜精品久久久久久久99水蜜桃 | 麻豆精品一二三| 久久久精品日韩欧美| 成人av网站在线| 美女诱惑一区二区| 中文字幕中文在线不卡住| 91精品国产品国语在线不卡| 日本欧美在线观看| 日韩一区二区三区四区| 色综合久久99| 免费观看在线综合| 亚洲一区二区三区自拍| 欧美va天堂va视频va在线| 91色九色蝌蚪| 国产精品一区二区三区网站| 香蕉成人伊视频在线观看| 国产欧美精品在线观看| 亚洲在线中文字幕| 日韩欧美成人午夜| 91精品国产色综合久久不卡蜜臀| 欧美一卡在线观看| 亚洲精品一区二区三区精华液 | 国产欧美一区二区精品性色超碰| 久久久综合九色合综国产精品| 欧美精品一区男女天堂| 国产女同互慰高潮91漫画| 亚洲国产精品成人综合色在线婷婷 | 中文字幕在线视频一区| 亚洲免费观看高清在线观看| 亚洲乱码国产乱码精品精的特点| 一区二区三区国产| 日韩成人午夜电影| 韩国理伦片一区二区三区在线播放| 国产精品中文字幕欧美| 91在线视频观看| 欧美挠脚心视频网站| 久久网站热最新地址| 中文字幕亚洲一区二区va在线| 亚洲一区二区三区激情| 久久www免费人成看片高清| 国产成人超碰人人澡人人澡| 色综合久久综合中文综合网| 欧美日本精品一区二区三区| 欧美草草影院在线视频| 国产精品网曝门| 午夜在线成人av| 国产精品1区2区| 欧美日本国产一区| 国产日韩精品久久久| 亚洲一区二区三区中文字幕| 激情综合五月天| 色婷婷久久久久swag精品| 欧美电视剧在线看免费| 亚洲欧洲无码一区二区三区| 美女一区二区在线观看| 99久久99精品久久久久久| 欧美成人精品二区三区99精品| 亚洲少妇中出一区| 精品一区二区免费| 91成人国产精品| 国产欧美一区二区精品性| 日本不卡的三区四区五区| 99久久er热在这里只有精品15 | 欧美一区二区三区在线看| 国产精品美女久久久久av爽李琼 | 国产又黄又大久久| 欧美伊人久久大香线蕉综合69| 精品久久久久久久久久久久久久久久久| 中文字幕综合网| 国产精品综合网| 欧美一区二区三区电影| 亚洲精品视频在线观看网站| 国产91精品免费| 精品欧美黑人一区二区三区| 亚洲一区日韩精品中文字幕| jlzzjlzz亚洲女人18| 26uuu亚洲| 久久国产精品免费| 8x8x8国产精品| 亚洲国产美女搞黄色| 色综合网站在线| 久久综合资源网| 日产国产欧美视频一区精品| 在线观看日韩电影| 亚洲欧美自拍偷拍| 国产99久久精品| 国产日韩高清在线| 国产精品主播直播| 久久精品男人的天堂| 激情六月婷婷综合| 久久亚洲免费视频|