⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outco68.c

📁 CC386 is a general-purpose 32-bit C compiler. It is not an optimizing compiler but given that the co
💻 C
📖 第 1 页 / 共 5 页
字号:
                    val = 0x108 + (ins->oper2->preg << 9);
                    if (ins->length == 4)
                        val |= 0x40;
                    val |= ins->oper1->preg;
                    PUTWORD(p, val);
                    PUTWORD(p, ins->oper1->offset->v.i);
                }
            }
            break;
        case op_moveq:
            PUTWORD(p, 0x7000 + (ins->oper2->preg << 9) + (ins->oper1->offset
                ->v.i &255));
            break;
        case op_muls:
            putmuldiv(0, 0xc1c0, 0x4c00, 0x0800, ins, p);
            break;
        case op_mulu:
            putmuldiv(0, 0xc0c0, 0x4c00, 0x0000, ins, p);
            break;
        case op_nbcd:

            PUTWORD(p, 0x4800);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_neg:
            PUTWORD(p, 0x4400 + (ins->length / 2 << 6));
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_negx:
            PUTWORD(p, 0x4000 + (ins->length / 2 << 6));
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_nop:
            PUTWORD(p, 0x4e71);
            break;

        case op_not:
            PUTWORD(p, 0x4600 + (ins->length / 2 << 6));
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_or:
            putmath(0x8000, ins, p);
            break;
        case op_ori:
            if (ins->oper2->mode == am_sr)
            {
                PUTWORD(p, 0x7c)PUTWORD(p, ins->oper1->offset->v.i);
            }
            else if (ins->oper2->mode == am_ccr)
            {
                PUTWORD(p, 0x03c)PUTWORD(p, ins->oper1->offset->v.i &255);
            }
            else
                putmathimm(0, ins, p);
            break;
        case op_pack:
            putpack(0x8140, ins, p);
            break;
        case op_pea:
            PUTWORD(p, 0x4840);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_rol:
            putshift(0xe118, ins, p);
            break;
        case op_ror:
            putshift(0xe018, ins, p);
            break;
        case op_roxl:
            putshift(0xe110, ins, p);
            break;
        case op_roxr:
            putshift(0xe010, ins, p);
            break;
        case op_rtd:
            PUTWORD(p, 0x4e74);
            PUTWORD(p, ins->oper1->offset->v.i);
            break;
        case op_rtr:
            PUTWORD(p, 0x4e77);
            break;
        case op_rts:
            PUTWORD(p, 0x4e75);
            break;
        case op_sbcd:
            putdecimal(0x8100, ins, p);
            break;
        case op_st:
            PUTWORD(p, 0x50c0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_seq:
            PUTWORD(p, 0x57c0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_spl:
            PUTWORD(p, 0x5ac0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_smi:
            PUTWORD(p, 0x5bc0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_scc:
            PUTWORD(p, 0x54c0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_scs:
            PUTWORD(p, 0x55c0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_sne:
            PUTWORD(p, 0x56c0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_slt:
            PUTWORD(p, 0x5dc0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_sle:
            PUTWORD(p, 0x5fc0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_sgt:
            PUTWORD(p, 0x5ec0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_sge:
            PUTWORD(p, 0x5cc0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_shi:
            PUTWORD(p, 0x52c0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_shs:
            PUTWORD(p, 0x54c0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_slo:
            PUTWORD(p, 0x55c0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_sls:
            PUTWORD(p, 0x53c0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_svc:
            PUTWORD(p, 0x58c0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_svs:
            PUTWORD(p, 0x59c0);
            putam(ins->length, ins, ins->oper1, p);
            break;

        case op_sub:
            putmath(0x9000, ins, p);
            break;
        case op_suba:
            PUTWORD(p, 0x90C0 + (ins->oper2->preg << 9) + ((ins->length == 4 ?
                1 : 0) << 8));
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_subi:
            putmathimm(0x400, ins, p);
            break;

        case op_subq:
            PUTWORD(p, 0x5100 + ((ins->length / 2) << 6) + (((ins->oper1
                ->offset->v.i) &7) << 9));
            putam(ins->length, ins, ins->oper2, p);
            break;
        case op_subx:
            putaddx(0x9100, ins, p);
            break;
        case op_swap:
            PUTWORD(p, 0x4840 + ins->oper1->preg);
            break;
        case op_tas:
            PUTWORD(p, 0x4ac0);
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_trap:
            PUTWORD(p, 0x4e40 + (ins->oper1->offset->v.i &7));
            break;
        case op_trapv:
            PUTWORD(p, 0x4e76);
            break;
        case op_trapt:
            puttrapcc(ins, 0x50f8, p);
            break;
        case op_trapeq:
            puttrapcc(ins, 0x57f8, p);
            break;
        case op_trappl:
            puttrapcc(ins, 0x5af8, p);
            break;
        case op_trapmi:
            puttrapcc(ins, 0x5bf8, p);
            break;
        case op_trapcc:
            puttrapcc(ins, 0x54f8, p);
            break;
        case op_trapcs:
            puttrapcc(ins, 0x55f8, p);
            break;
        case op_trapne:
            puttrapcc(ins, 0x56f8, p);
            break;
        case op_traplt:
            puttrapcc(ins, 0x5df8, p);
            break;
        case op_traple:
            puttrapcc(ins, 0x5ff8, p);
            break;
        case op_trapgt:
            puttrapcc(ins, 0x5ef8, p);
            break;
        case op_trapge:
            puttrapcc(ins, 0x5cf8, p);
            break;
        case op_traphi:
            puttrapcc(ins, 0x52f8, p);
            break;
        case op_traphs:
            puttrapcc(ins, 0x54f8, p);
            break;
        case op_traplo:
            puttrapcc(ins, 0x55f8, p);
            break;
        case op_trapls:
            puttrapcc(ins, 0x53f8, p);
            break;
        case op_trapvc:
            puttrapcc(ins, 0x58f8, p);
            break;
        case op_trapvs:
            puttrapcc(ins, 0x59f8, p);
            break;

        case op_tst:
            PUTWORD(p, 0x4A00 + (ins->length / 2 << 6));
            putam(ins->length, ins, ins->oper1, p);
            break;

        case op_unlk:
            PUTWORD(p, 0x4E58 + ins->oper1->preg);
            break;
        case op_unpk:
            putpack(0x8180, ins, p);
            break;

        case op_fmove:
            if (ins->oper1->mode == am_fpsr)
            {
                PUTWORD(p, 0xf000 + (fpcop << 9));
                PUTWORD(p, 0xa000 + (2 << 10));
                putam(ins->length, ins, ins->oper2, p);
            }
            else if (ins->oper1->mode == am_fpcr)
            {
                PUTWORD(p, 0xf000 + (fpcop << 9));
                PUTWORD(p, 0xa000 + (4 << 10));
                putam(ins->length, ins, ins->oper2, p);
            }
            else if (ins->oper2->mode == am_fpsr)
            {
                PUTWORD(p, 0xf000 + (fpcop << 9));
                PUTWORD(p, 0x8000 + (2 << 10));
                putam(ins->length, ins, ins->oper1, p);
            }
            else if (ins->oper2->mode == am_fpcr)
            {
                PUTWORD(p, 0xf000 + (fpcop << 9));
                PUTWORD(p, 0x8000 + (4 << 10));
                putam(ins->length, ins, ins->oper1, p);
            }
            else if (ins->oper2->mode == am_freg)
            {
                putfloat(0, ins->length, ins, ins->oper1, ins->oper2, p);
            }
            else
            {
                int val = 0x6000 + (ins->oper1->preg << 7);
                val |= fsize(ins->length);
                PUTWORD(p, 0xe200 + (fpcop << 10));
                PUTWORD(p, val);
                putam(ins->length, ins, ins->oper2, p);
            }
            break;

        case op_fmovem:
            {
                int val = 0xc000;
                PUTWORD(p, 0xf000 + (fpcop << 9));
                if (ins->oper1->mode == am_fmask)
                {
                    val |= 0x3000;
                    val |= revmskf((short)ins->oper1->offset);
                    PUTWORD(p, val);
                    putam(ins->length, ins, ins->oper2, p);
                }
                else
                {
                    val |= revmskf((short)ins->oper2->offset) | 0x1000;
                    PUTWORD(p, val);
                    putam(ins->length, ins, ins->oper1, p);
                }
            }
            break;
        case op_fmovecr:
            PUTWORD(p, 0xf000 + (fpcop << 9));
            PUTWORD(p, 0x5c00 + (ins->oper2->preg << 7) + (ins->oper1->offset
                ->v.i &0x7f));
            break;
        case op_fnop:
            PUTWORD(p, 0xf080 + (fpcop << 9));
            PUTWORD(p, 0);
            break;
        case op_fadd:
            putfloat(0x22, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fsub:
            putfloat(0x28, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fmul:
            putfloat(0x23, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fdiv:
            putfloat(0x20, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fmod:
            putfloat(0x21, ins->length, ins, ins->oper1, ins->oper2, p);
            break;

        case op_fcmp:
            putfloat(0x38, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_ftst:
            putfloat(0x3a, ins->length, ins, 0, ins->oper1, p);
            break;
        case op_fneg:
            putfloat(0x1a, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fabs:
            putfloat(0x18, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_facos:
            putfloat(0x1c, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fasin:
            putfloat(0xc, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fatan:
            putfloat(0xa, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fatanh:
            putfloat(0xb, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fcos:
            putfloat(0x1d, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fcosh:
            putfloat(0x19, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fetox:
            putfloat(0x10, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fetoxm1:
            putfloat(0x8, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fgetexp:
            putfloat(0x1e, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fgetman:
            putfloat(0x1f, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fint:
            putfloat(0x1, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fintrz:
            putfloat(0x3, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_flog10:
            putfloat(0x15, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_flog2:
            putfloat(0x16, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_flogn:
            putfloat(0x14, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_flognp1:
            putfloat(0x6, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_frem:
            putfloat(0x25, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fscale:
            putfloat(0x26, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fsgldiv:
            putfloat(0x24, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fsglmul:
            putfloat(0x27, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fsin:
            putfloat(0xe, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fsincos:
            putfsincos(ins, p);
            break;

        case op_fsinh:
            putfloat(0x2, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fsqrt:
            putfloat(0x4, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_ftan:
            putfloat(0xf, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_ftanh:
            putfloat(0x9, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_ftentox:
            putfloat(0x12, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_ftwotox:
            putfloat(0x11, ins->length, ins, ins->oper1, ins->oper2, p);
            break;
        case op_fsave:
            PUTWORD(p, 0xf100 + (fpcop << 9));
            putam(ins->length, ins, ins->oper1, p);
            break;
        case op_frestore:
            PUTWORD(p, 0xf140 + (fpcop << 9));
            putam(ins->length, ins, ins->oper1, p);
            break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -