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

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

?? sparcjitcodegen.java

?? java 到c的轉換程序的原代碼.對喜歡C程序而不懂JAVA程序的人很有幫助
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
    }    /** 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 ("%o0");                break;            case Field.FT_float:                code.FpushES ("%f0");                break;            case Field.FT_long:                code.LpushES ("%o0");                break;            case Field.FT_double:                code.DpushES ("%f0");                break;            case Field.FT_void:                break;        }        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?                      String 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;                break;        }        /* If haven't already gotten the class address into reg,         * put it there */        if (0 != cp) {            code.SETHI (cp, reg);            code.SetLo (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      * @param tychar Encoded type of object at address      */    private void    pushFromMemory (String areg,                    char tychar)    {        /* 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.LDUB (areg, 0, "%o7");                break;            case Field.FT_byte:                code.LDSB (areg, 0, "%o7");                break;            case Field.FT_char:                code.LDUH (areg, 0, "%o7");                break;            case Field.FT_short:                code.LDSH (areg, 0, "%o7");                break;            case Field.FT_float:            case Field.FT_int:            case Field.FT_object:                code.LD (areg, 0, "%o7");                break;            case Field.FT_double:            case Field.FT_long:                code.LD (areg, 0, "%o7"); // high word                code.pushES ("%o7");                code.LD (areg, 4, "%o7"); // low word                break;        }        code.pushES ("%o7");        return;    }    /** Take a value of a particular type off the stack and store it into      * memory.      * @param areg Register containing memory address of value      * @param tychar Encoded type of object to be stored at address      */    private void    popIntoMemory (String areg,                   char tychar)    {        /* 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 ("%o7");        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.STB ("%o7", areg, 0);                break;            case Field.FT_char:            case Field.FT_short:                code.STH ("%o7", areg, 0);                break;            case Field.FT_float:            case Field.FT_int:            case Field.FT_object:                code.ST ("%o7", areg, 0);                break;            case Field.FT_double:            case Field.FT_long:                code.ST ("%o7", areg, 4); // low word                code.popES ("%o7");                code.ST ("%o7", areg, 0); // high word                break;        }        return;    }        private void    EmitCkInstance (Instr i,                    ClassRef cr)    {        /* 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 (1, "%o0");            return;        }        /* Get a pointer to the C class of the object into %o1. */        code.LD ("%o0", 0, "%o1");                if (Field.FT_array != cr.name.charAt(0)) {            /* Non array objects: if going to an interface, %o1 must implement             * it; if going to a class, %o1 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, "%o2", cr);            code.LD ("%o2", getFieldOffset (OID_class_flags), "%o7");            code.ANDcc ("%o7", ClassRT.IS_INTERFACE, "%o7");            int bo_isiface = code.nextByteOffs ();            code.BNE (0);            code.NOP ();        // fill delay slot            /* Is not an interface: we're OK iff o2 is a super class of o1. */            code.LD ("%o1", getFieldOffset (OID_class_nsupers), "%o3");            code.LD ("%o2", getFieldOffset (OID_class_nsupers), "%o4");            code.SUBcc ("%o3", "%o4", "%o3");            int bo_fail1 = code.nextByteOffs ();            code.BL (0);            code.NOP ();        // fill delay slot            /* OK, o1->nsupers >= o2->nsupers.  See if the superclass up             * that high is right.             * o1->supers[o1->nsupers-o2->nsupers] == o2 */            code.LD ("%o1", getFieldOffset (OID_class_supers), "%o4");            code.SLL ("%o3", 2, "%o3"); // mul by 4 to handle pointer elements            code.LD ("%o4", "%o3", "%o3");            code.CMP ("%o3", "%o2");            /* If not equal, jump to the failure point */            int bo_fail2 = code.nextByteOffs ();            code.BNE (0);            code.NOP ();        // fill delay slot            /* Are equal: cast is OK. */            code.MOV (1, "%o0");            int bo_exit1 = code.nextByteOffs ();            code.BA (0);            code.NOP ();        // fill delay slot            /* OK, here on out it's an interface.  Just call instanceof. */            code.PatchDisp22 (bo_isiface, (code.nextByteOffs() - bo_isiface) >>> 2);            /* We already have %o0 as the object ref, %o2 as the target             * class pointer.  Rearrange to meet the parameter requirements             * of instanceof(Object,Class,ArrayDim). */            code.MOV ("%o2", "%o1");            code.MOV ("%g0", "%o2");            code.reserveCode (CodeBlock.brACALL, i, "noreg", getFuncAddr (FID_instanceof));            code.NOP ();        // fill delay slot            int bo_exit2 = code.nextByteOffs ();            code.BA (0);            code.NOP ();        // fill delay slot                        /* Fail: backpatch all fails, and clear the return value */            code.PatchDisp22 (bo_fail1, (code.nextByteOffs() - bo_fail1) >>> 2);            code.PatchDisp22 (bo_fail2, (code.nextByteOffs() - bo_fail2) >>> 2);            code.MOV ("%g0", "%o0");            /* Exit: backpatch all exits */            code.PatchDisp22 (bo_exit1, (code.nextByteOffs() - bo_exit1) >>> 2);            code.PatchDisp22 (bo_exit2, (code.nextByteOffs() - bo_exit2) >>> 2);                        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, "%o2");            /* Presume this will work, to simplify control flow */            code.MOV (1, "%o0");            /* See if classes match */            code.CMP ("%o1", "%o2");            int bo_exit = code.nextByteOffs ();            code.BE (0);            code.NOP ();            /* Nope, set to fail. */            code.MOV ("%g0", "%o0");            /* Here's where we go out. */            code.PatchDisp22 (bo_exit, (code.nextByteOffs() - bo_exit) >>> 2);                    }        /* 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 %o0.  Put class pointer into         * %o2, presuming this loadClassPointer function will go down to         * the base object.  Put array rank into %o2.  Call instanceof. */        loadClassPointer (i, cr, 0, "%o1");        code.MOV (n, "%o2");        code.reserveCode (CodeBlock.brACALL, i, "noreg", getFuncAddr (FID_instanceof));        code.NOP ();        // fill delay slot    }    /** 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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
极品少妇xxxx精品少妇| 欧美精品一区二区不卡| 欧美电影免费观看高清完整版在线观看| 欧美丰满高潮xxxx喷水动漫| 亚洲精品在线三区| 亚洲免费视频中文字幕| 日本不卡视频在线观看| www.成人网.com| 欧美猛男超大videosgay| 国产网站一区二区三区| 亚洲一区二区美女| 国产美女视频91| 在线观看视频欧美| 久久综合中文字幕| 亚洲一区二区综合| 国产a久久麻豆| 欧美精品一二三| 国产精品不卡一区二区三区| 日韩av成人高清| av网站免费线看精品| 欧美成人一区二区三区| 亚洲精品欧美二区三区中文字幕| 极品少妇xxxx精品少妇偷拍| 91国模大尺度私拍在线视频| 久久久久综合网| 丝袜亚洲另类丝袜在线| 99久久99久久免费精品蜜臀| 日韩欧美123| 亚洲蜜桃精久久久久久久| 国产一区在线不卡| 欧美精品日日鲁夜夜添| 国产精品国产a| 精品在线观看免费| 欧美性xxxxxx少妇| 99国产精品久久| av影院午夜一区| 精品蜜桃在线看| 亚洲成av人片一区二区梦乃| 菠萝蜜视频在线观看一区| 欧美日本韩国一区二区三区视频| 国产精品蜜臀在线观看| 国产一区二区三区香蕉| 欧美一级二级在线观看| 亚洲一卡二卡三卡四卡| 久久综合色婷婷| 性久久久久久久久| 成人精品一区二区三区四区| 欧美成人一区二区| 日韩vs国产vs欧美| 欧美视频完全免费看| 亚洲免费av在线| 成人午夜免费视频| 精品国产91洋老外米糕| 麻豆国产精品官网| 欧美精品久久天天躁| 亚洲成人激情自拍| 欧美亚洲国产怡红院影院| 亚洲激情欧美激情| 91麻豆自制传媒国产之光| 18成人在线观看| voyeur盗摄精品| 国产精品另类一区| 成人v精品蜜桃久久一区| 国产亚洲精品中文字幕| 国产精品77777竹菊影视小说| 精品久久国产97色综合| 精品亚洲成a人| 日韩精品专区在线影院重磅| 久久国产夜色精品鲁鲁99| 欧美裸体bbwbbwbbw| 三级不卡在线观看| 欧美一区二区精美| 麻豆精品视频在线| 精品入口麻豆88视频| 精品综合久久久久久8888| www久久精品| 风间由美中文字幕在线看视频国产欧美| 国产午夜精品久久| 成人av小说网| 亚洲另类一区二区| 欧美无砖专区一中文字| 天堂久久久久va久久久久| 91精品午夜视频| 狠狠色综合日日| 中文无字幕一区二区三区| 99久久免费视频.com| 一区二区三区精品在线观看| 欧美挠脚心视频网站| 免费成人在线影院| 国产日韩精品一区| 91香蕉视频在线| 亚洲第一狼人社区| 精品久久久网站| 国产99久久久国产精品潘金 | 欧美中文字幕久久| 亚洲妇熟xx妇色黄| 日韩欧美黄色影院| 成人av在线一区二区三区| 亚洲码国产岛国毛片在线| 欧美日韩成人在线一区| 久久99热这里只有精品| 国产精品女人毛片| 欧洲精品一区二区三区在线观看| 石原莉奈在线亚洲三区| 欧美精品一区二区蜜臀亚洲| 97精品久久久午夜一区二区三区| 亚洲成人tv网| 久久久青草青青国产亚洲免观| 91香蕉视频mp4| 视频在线在亚洲| 国产日韩欧美电影| 欧美色男人天堂| 国产一区二区三区蝌蚪| 夜夜爽夜夜爽精品视频| 26uuu色噜噜精品一区二区| 色综合久久综合网97色综合| 久久国产尿小便嘘嘘尿| 久久色视频免费观看| 色婷婷综合久久久久中文一区二区 | 免费黄网站欧美| 欧美国产精品一区| 欧美日韩国产乱码电影| 国产精一区二区三区| 亚洲高清视频的网址| 国产欧美日本一区二区三区| 欧美日韩国产高清一区二区三区 | 久久免费看少妇高潮| 在线看日韩精品电影| 国产精品一区二区在线看| 亚洲精品伦理在线| 久久久久久久综合| 欧美精品亚洲一区二区在线播放| 国产成人亚洲精品狼色在线| 亚洲国产精品一区二区www在线| 久久久青草青青国产亚洲免观| 欧美亚洲自拍偷拍| 成人动漫在线一区| 久久97超碰国产精品超碰| 亚洲人一二三区| 国产亚洲综合av| 欧美一区二区三区电影| 一本久久综合亚洲鲁鲁五月天| 国产久卡久卡久卡久卡视频精品| 午夜精品久久久久| 亚洲色图清纯唯美| 久久久久久久久久久久久久久99 | 国模娜娜一区二区三区| 亚洲不卡在线观看| 亚洲男女毛片无遮挡| 国产欧美一区二区三区沐欲| 51午夜精品国产| 欧洲一区在线观看| 99久久精品费精品国产一区二区| 亚洲福利一区二区| 亚洲综合在线五月| 国产精品家庭影院| 国产三级一区二区| 日韩欧美在线观看一区二区三区| 欧洲一区在线观看| 91丨九色丨蝌蚪丨老版| 成人午夜免费电影| 国产精品77777| 国产精品一区二区三区网站| 久久99久久99精品免视看婷婷| 日本在线不卡一区| 天天影视涩香欲综合网 | 日韩欧美高清在线| 7777精品久久久大香线蕉| 欧美色网站导航| 欧美午夜宅男影院| 欧美亚洲动漫制服丝袜| 一本大道久久a久久综合| 99久久免费精品高清特色大片| 成人永久aaa| 国产成人精品亚洲日本在线桃色 | 欧美国产一区二区| 久久久欧美精品sm网站| 久久奇米777| 久久久精品日韩欧美| 久久精品视频一区二区| 久久久.com| 国产精品系列在线| 中文字幕日韩精品一区| 亚洲精品高清在线| 亚洲国产日韩综合久久精品| 亚洲成a人v欧美综合天堂下载| 亚洲bt欧美bt精品777| 亚洲成av人片一区二区梦乃| 日韩精品电影一区亚洲| 久久国产成人午夜av影院| 国产精品乡下勾搭老头1| 国产91综合网| 91网站在线播放| 欧美午夜片在线看| 337p亚洲精品色噜噜| 欧美一区永久视频免费观看| 欧美成人精品高清在线播放| 久久免费国产精品| 亚洲欧洲av在线| 亚洲国产另类av|