Annotation of cf/amd64-codegen.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * amd64-codegen.h: Macros for generating amd64 code
        !             3:  *
        !             4:  * Authors:
        !             5:  *   Paolo Molaro ([email protected])
        !             6:  *   Intel Corporation (ORP Project)
        !             7:  *   Sergey Chaban ([email protected])
        !             8:  *   Dietmar Maurer ([email protected])
        !             9:  *   Patrik Torstensson
        !            10:  *   Zalman Stern
        !            11:  * 
        !            12:  * Copyright (C)  2000 Intel Corporation.  All rights reserved.
        !            13:  * Copyright (C)  2001, 2002 Ximian, Inc.
        !            14:  */
        !            15: 
        !            16: #ifndef AMD64_H
        !            17: #define AMD64_H
        !            18: 
        !            19: typedef enum {
        !            20:        AMD64_RAX = 0,
        !            21:        AMD64_RCX = 1,
        !            22:        AMD64_RDX = 2,
        !            23:        AMD64_RBX = 3,
        !            24:        AMD64_RSP = 4,
        !            25:        AMD64_RBP = 5,
        !            26:        AMD64_RSI = 6,
        !            27:        AMD64_RDI = 7,
        !            28:        AMD64_R8 = 8,
        !            29:        AMD64_R9 = 9,
        !            30:        AMD64_R10 = 10,
        !            31:        AMD64_R11 = 11,
        !            32:        AMD64_R12 = 12,
        !            33:        AMD64_R13 = 13,
        !            34:        AMD64_R14 = 14,
        !            35:        AMD64_R15 = 15,
        !            36:        AMD64_RIP = 16,
        !            37:        AMD64_NREG
        !            38: } AMD64_Reg_No;
        !            39: 
        !            40: typedef enum {
        !            41:        AMD64_XMM0 = 0,
        !            42:        AMD64_XMM1 = 1,
        !            43:        AMD64_XMM2 = 2,
        !            44:        AMD64_XMM3 = 3,
        !            45:        AMD64_XMM4 = 4,
        !            46:        AMD64_XMM5 = 5,
        !            47:        AMD64_XMM6 = 6,
        !            48:        AMD64_XMM7 = 7,
        !            49:        AMD64_XMM8 = 8,
        !            50:        AMD64_XMM9 = 9,
        !            51:        AMD64_XMM10 = 10,
        !            52:        AMD64_XMM11 = 11,
        !            53:        AMD64_XMM12 = 12,
        !            54:        AMD64_XMM13 = 13,
        !            55:        AMD64_XMM14 = 14,
        !            56:        AMD64_XMM15 = 15,
        !            57:        AMD64_XMM_NREG = 16,
        !            58: } AMD64_XMM_Reg_No;
        !            59: 
        !            60: typedef enum
        !            61: {
        !            62:   AMD64_REX_B = 1, /* The register in r/m field, base register in SIB byte, or reg in opcode is 8-15 rather than 0-7 */
        !            63:   AMD64_REX_X = 2, /* The index register in SIB byte is 8-15 rather than 0-7 */
        !            64:   AMD64_REX_R = 4, /* The reg field of ModRM byte is 8-15 rather than 0-7 */
        !            65:   AMD64_REX_W = 8  /* Opeartion is 64-bits instead of 32 (default) or 16 (with 0x66 prefix) */
        !            66: } AMD64_REX_Bits;
        !            67: 
        !            68: #define AMD64_CALLEE_REGS ((1<<AMD64_RAX) | (1<<AMD64_RCX) | (1<<AMD64_RDX) | (1<<AMD64_RSI) | (1<<AMD64_RDI) | (1<<AMD64_R8) | (1<<AMD64_R9) | (1<<AMD64_R10))
        !            69: #define AMD64_IS_CALLEE_REG(reg)  (AMD64_CALLEE_REGS & (1 << (reg)))
        !            70: 
        !            71: #define AMD64_ARGUMENT_REGS ((1<<AMD64_RDI) | (1<<AMD64_RSI) | (1<<AMD64_RDX) | (1<<AMD64_RCX) | (1<<AMD64_R8) | (1<<AMD64_R9))
        !            72: #define AMD64_IS_ARGUMENT_REG(reg) (AMD64_ARGUMENT_REGS & (1 << (reg)))
        !            73: 
        !            74: #define AMD64_CALLEE_SAVED_REGS ((1<<AMD64_RBX) | (1<<AMD64_R12) | (1<<AMD64_R13) | (1<<AMD64_R14) | (1<<AMD64_R15) | (1<<AMD64_RBP))
        !            75: #define AMD64_IS_CALLEE_SAVED_REG(reg) (AMD64_CALLEE_SAVED_REGS & (1 << (reg)))
        !            76: 
        !            77: #define AMD64_REX(bits) ((unsigned char)(0x40 | (bits)))
        !            78: #define amd64_emit_rex(inst, width, reg_modrm, reg_index, reg_rm_base_opcode) do \
        !            79:        { \
        !            80:                unsigned char _amd64_rex_bits = \
        !            81:                        (((width) > 4) ? AMD64_REX_W : 0) | \
        !            82:                        (((reg_modrm) > 7) ? AMD64_REX_R : 0) | \
        !            83:                        (((reg_index) > 7) ? AMD64_REX_X : 0) | \
        !            84:                        (((reg_rm_base_opcode) > 7) ? AMD64_REX_B : 0); \
        !            85:                if ((_amd64_rex_bits != 0) || (((width) == 1))) *(inst)++ = AMD64_REX(_amd64_rex_bits); \
        !            86:        } while (0)
        !            87: 
        !            88: typedef union {
        !            89:        long val;
        !            90:        unsigned char b [8];
        !            91: } amd64_imm_buf;
        !            92: 
        !            93: #include "x86-codegen.h"
        !            94: 
        !            95: /* In 64 bit mode, all registers have a low byte subregister */
        !            96: #undef X86_IS_BYTE_REG
        !            97: #define X86_IS_BYTE_REG(reg) 1
        !            98: 
        !            99: #define amd64_modrm_mod(modrm) ((modrm) >> 6)
        !           100: #define amd64_modrm_reg(modrm) (((modrm) >> 3) & 0x7)
        !           101: #define amd64_modrm_rm(modrm) ((modrm) & 0x7)
        !           102: 
        !           103: #define amd64_rex_r(rex) ((((rex) >> 2) & 0x1) << 3)
        !           104: #define amd64_rex_x(rex) ((((rex) >> 1) & 0x1) << 3)
        !           105: #define amd64_rex_b(rex) ((((rex) >> 0) & 0x1) << 3)
        !           106: 
        !           107: #define amd64_is_imm32(val) ((glong)val >= -((glong)1<<31) && (glong)val <= (((glong)1<<31)-1))
        !           108: 
        !           109: #define x86_imm_emit64(inst,imm)     \
        !           110:        do {    \
        !           111:                        amd64_imm_buf imb; imb.val = (long) (imm);      \
        !           112:                        *(inst)++ = imb.b [0];  \
        !           113:                        *(inst)++ = imb.b [1];  \
        !           114:                        *(inst)++ = imb.b [2];  \
        !           115:                        *(inst)++ = imb.b [3];  \
        !           116:                        *(inst)++ = imb.b [4];  \
        !           117:                        *(inst)++ = imb.b [5];  \
        !           118:                        *(inst)++ = imb.b [6];  \
        !           119:                        *(inst)++ = imb.b [7];  \
        !           120:        } while (0)
        !           121: 
        !           122: #define amd64_membase_emit(inst,reg,basereg,disp) do { \
        !           123:        if ((basereg) == AMD64_RIP) { \
        !           124:         x86_address_byte ((inst), 0, (reg)&0x7, 5); \
        !           125:         x86_imm_emit32 ((inst), (disp)); \
        !           126:     } \
        !           127:        else \
        !           128:                x86_membase_emit ((inst),(reg)&0x7, (basereg)&0x7, (disp)); \
        !           129: } while (0)
        !           130: 
        !           131: #define amd64_alu_reg_imm_size(inst,opc,reg,imm,size)  \
        !           132:        do {    \
        !           133:                if ((reg) == X86_EAX) { \
        !           134:                        amd64_emit_rex(inst, size, 0, 0, 0); \
        !           135:                        *(inst)++ = (((unsigned char)(opc)) << 3) + 5;  \
        !           136:                        x86_imm_emit32 ((inst), (imm)); \
        !           137:                        break;  \
        !           138:                }       \
        !           139:                if (x86_is_imm8((imm))) {       \
        !           140:                        amd64_emit_rex(inst, size, 0, 0, (reg)); \
        !           141:                        *(inst)++ = (unsigned char)0x83;        \
        !           142:                        x86_reg_emit ((inst), (opc), (reg));    \
        !           143:                        x86_imm_emit8 ((inst), (imm));  \
        !           144:                } else {        \
        !           145:                        amd64_emit_rex(inst, size, 0, 0, (reg)); \
        !           146:                        *(inst)++ = (unsigned char)0x81;        \
        !           147:                        x86_reg_emit ((inst), (opc), (reg));    \
        !           148:                        x86_imm_emit32 ((inst), (imm)); \
        !           149:                }       \
        !           150:        } while (0)
        !           151: 
        !           152: #define amd64_alu_reg_imm(inst,opc,reg,imm) amd64_alu_reg_imm_size((inst),(opc),(reg),(imm),8)
        !           153: 
        !           154: #define amd64_alu_reg_reg_size(inst,opc,dreg,reg,size) \
        !           155:        do {    \
        !           156:                amd64_emit_rex(inst, size, (dreg), 0, (reg)); \
        !           157:                *(inst)++ = (((unsigned char)(opc)) << 3) + 3;  \
        !           158:                x86_reg_emit ((inst), (dreg), (reg));   \
        !           159:        } while (0)
        !           160: 
        !           161: #define amd64_alu_reg_reg(inst,opc,dreg,reg) amd64_alu_reg_reg_size ((inst),(opc),(dreg),(reg),8)
        !           162: 
        !           163: #define amd64_mov_regp_reg(inst,regp,reg,size) \
        !           164:        do {    \
        !           165:                if ((size) == 2) \
        !           166:                        *(inst)++ = (unsigned char)0x66; \
        !           167:                amd64_emit_rex(inst, (size), (reg), 0, (regp)); \
        !           168:                switch ((size)) {       \
        !           169:                case 1: *(inst)++ = (unsigned char)0x88; break; \
        !           170:                case 2: case 4: case 8: *(inst)++ = (unsigned char)0x89; break; \
        !           171:                default: assert (0);    \
        !           172:                }       \
        !           173:                x86_regp_emit ((inst), (reg), (regp));  \
        !           174:        } while (0)
        !           175: 
        !           176: #define amd64_mov_membase_reg(inst,basereg,disp,reg,size)      \
        !           177:        do {    \
        !           178:                if ((size) == 2) \
        !           179:                        *(inst)++ = (unsigned char)0x66; \
        !           180:                amd64_emit_rex(inst, (size), (reg), 0, (basereg)); \
        !           181:                switch ((size)) {       \
        !           182:                case 1: *(inst)++ = (unsigned char)0x88; break; \
        !           183:                case 2: case 4: case 8: *(inst)++ = (unsigned char)0x89; break; \
        !           184:                default: assert (0);    \
        !           185:                }       \
        !           186:                x86_membase_emit ((inst), ((reg)&0x7), ((basereg)&0x7), (disp));        \
        !           187:        } while (0)
        !           188: 
        !           189: 
        !           190: #define amd64_mov_reg_reg(inst,dreg,reg,size)  \
        !           191:        do {    \
        !           192:                if ((size) == 2) \
        !           193:                        *(inst)++ = (unsigned char)0x66; \
        !           194:                amd64_emit_rex(inst, (size), (dreg), 0, (reg)); \
        !           195:                switch ((size)) {       \
        !           196:                case 1: *(inst)++ = (unsigned char)0x8a; break; \
        !           197:                case 2: case 4: case 8: *(inst)++ = (unsigned char)0x8b; break; \
        !           198:                default: assert (0);    \
        !           199:                }       \
        !           200:                x86_reg_emit ((inst), (dreg), (reg));   \
        !           201:        } while (0)
        !           202: 
        !           203: #define amd64_mov_reg_mem(inst,reg,mem,size)   \
        !           204:        do {    \
        !           205:                if ((size) == 2) \
        !           206:                        *(inst)++ = (unsigned char)0x66; \
        !           207:                amd64_emit_rex(inst, (size), (reg), 0, 0); \
        !           208:                switch ((size)) {       \
        !           209:                case 1: *(inst)++ = (unsigned char)0x8a; break; \
        !           210:                case 2: case 4: case 8: *(inst)++ = (unsigned char)0x8b; break; \
        !           211:                default: assert (0);    \
        !           212:                }       \
        !           213:         x86_address_byte ((inst), 0, (reg), 4); \
        !           214:         x86_address_byte ((inst), 0, 4, 5); \
        !           215:         x86_imm_emit32 ((inst), (mem)); \
        !           216:        } while (0)
        !           217: 
        !           218: #define amd64_mov_reg_membase(inst,reg,basereg,disp,size)      \
        !           219:        do {    \
        !           220:                if ((size) == 2) \
        !           221:                        *(inst)++ = (unsigned char)0x66; \
        !           222:                amd64_emit_rex(inst, (size), (reg), 0, (basereg)); \
        !           223:                switch ((size)) {       \
        !           224:                case 1: *(inst)++ = (unsigned char)0x8a; break; \
        !           225:                case 2: case 4: case 8: *(inst)++ = (unsigned char)0x8b; break; \
        !           226:                default: assert (0);    \
        !           227:                }       \
        !           228:                amd64_membase_emit ((inst), (reg), (basereg), (disp));  \
        !           229:        } while (0)
        !           230: 
        !           231: #define amd64_movzx_reg_membase(inst,reg,basereg,disp,size)    \
        !           232:        do {    \
        !           233:                amd64_emit_rex(inst, (size), (reg), 0, (basereg)); \
        !           234:                switch ((size)) {       \
        !           235:                case 1: *(inst)++ = (unsigned char)0x0f; *(inst)++ = (unsigned char)0xb6; break;        \
        !           236:                case 2: *(inst)++ = (unsigned char)0x0f; *(inst)++ = (unsigned char)0xb7; break;        \
        !           237:                case 4: case 8: *(inst)++ = (unsigned char)0x8b; break; \
        !           238:                default: assert (0);    \
        !           239:                }       \
        !           240:                x86_membase_emit ((inst), ((reg)&0x7), ((basereg)&0x7), (disp));        \
        !           241:        } while (0)
        !           242: 
        !           243: #define amd64_movsxd_reg_membase(inst,reg,basereg,disp) \
        !           244:     do {     \
        !           245:        amd64_emit_rex(inst,8,(reg),0,(basereg)); \
        !           246:        *(inst)++ = (unsigned char)0x63; \
        !           247:        x86_membase_emit ((inst), ((reg)&0x7), ((basereg)&0x7), (disp)); \
        !           248:     } while (0)
        !           249: 
        !           250: #define amd64_movsxd_reg_reg(inst,dreg,reg) \
        !           251:     do {     \
        !           252:        amd64_emit_rex(inst,8,(dreg),0,(reg)); \
        !           253:        *(inst)++ = (unsigned char)0x63; \
        !           254:           x86_reg_emit ((inst), (dreg), (reg));        \
        !           255:     } while (0)
        !           256: 
        !           257: /* Pretty much the only instruction that supports a 64-bit immediate. Optimize for common case of
        !           258:  * 32-bit immediate. Pepper with casts to avoid warnings.
        !           259:  */
        !           260: #define amd64_mov_reg_imm_size(inst,reg,imm,size)      \
        !           261:        do {    \
        !           262:                amd64_emit_rex(inst, (size), 0, 0, (reg)); \
        !           263:                *(inst)++ = (unsigned char)0xb8 + ((reg) & 0x7);        \
        !           264:                if ((size) == 8) \
        !           265:                        x86_imm_emit64 ((inst), (long)(imm));   \
        !           266:                else \
        !           267:                        x86_imm_emit32 ((inst), (int)(long)(imm));      \
        !           268:        } while (0)
        !           269: 
        !           270: #define amd64_mov_reg_imm(inst,reg,imm)        \
        !           271:        do {    \
        !           272:                int _amd64_width_temp = ((long)(imm) == (long)(int)(long)(imm)); \
        !           273:         amd64_mov_reg_imm_size ((inst), (reg), (imm), (_amd64_width_temp ? 4 : 8)); \
        !           274:        } while (0)
        !           275: 
        !           276: #define amd64_set_reg_template(inst,reg) amd64_mov_reg_imm_size ((inst),(reg), 0, 8)
        !           277: 
        !           278: #define amd64_set_template(inst,reg) amd64_set_reg_template((inst),(reg))
        !           279: 
        !           280: #define amd64_mov_membase_imm(inst,basereg,disp,imm,size)      \
        !           281:        do {    \
        !           282:                if ((size) == 2) \
        !           283:                        *(inst)++ = (unsigned char)0x66; \
        !           284:                amd64_emit_rex(inst, (size) == 1 ? 0 : (size), 0, 0, (basereg)); \
        !           285:                if ((size) == 1) {      \
        !           286:                        *(inst)++ = (unsigned char)0xc6;        \
        !           287:                        x86_membase_emit ((inst), 0, (basereg) & 0x7, (disp));  \
        !           288:                        x86_imm_emit8 ((inst), (imm));  \
        !           289:                } else if ((size) == 2) {       \
        !           290:                        *(inst)++ = (unsigned char)0xc7;        \
        !           291:                        x86_membase_emit ((inst), 0, (basereg) & 0x7, (disp));  \
        !           292:                        x86_imm_emit16 ((inst), (imm)); \
        !           293:                } else {        \
        !           294:                        *(inst)++ = (unsigned char)0xc7;        \
        !           295:                        x86_membase_emit ((inst), 0, (basereg) & 0x7, (disp));  \
        !           296:                        x86_imm_emit32 ((inst), (imm)); \
        !           297:                }       \
        !           298:        } while (0)
        !           299: 
        !           300: #define amd64_lea_membase(inst,reg,basereg,disp)       \
        !           301:        do {    \
        !           302:                amd64_emit_rex(inst, 8, (reg), 0, (basereg)); \
        !           303:                *(inst)++ = (unsigned char)0x8d;        \
        !           304:                amd64_membase_emit ((inst), (reg), (basereg), (disp));  \
        !           305:        } while (0)
        !           306: 
        !           307: /* Instruction are implicitly 64-bits so don't generate REX for just the size. */
        !           308: #define amd64_push_reg(inst,reg)       \
        !           309:        do {    \
        !           310:                amd64_emit_rex(inst, 0, 0, 0, (reg)); \
        !           311:                *(inst)++ = (unsigned char)0x50 + ((reg) & 0x7);        \
        !           312:        } while (0)
        !           313: 
        !           314: /* Instruction is implicitly 64-bits so don't generate REX for just the size. */
        !           315: #define amd64_push_membase(inst,basereg,disp)  \
        !           316:        do {    \
        !           317:                amd64_emit_rex(inst, 0, 0, 0, (basereg)); \
        !           318:                *(inst)++ = (unsigned char)0xff;        \
        !           319:                x86_membase_emit ((inst), 6, (basereg) & 0x7, (disp));  \
        !           320:        } while (0)
        !           321: 
        !           322: #define amd64_pop_reg(inst,reg)        \
        !           323:        do {    \
        !           324:                amd64_emit_rex(inst, 0, 0, 0, (reg)); \
        !           325:                *(inst)++ = (unsigned char)0x58 + ((reg) & 0x7);        \
        !           326:        } while (0)
        !           327: 
        !           328: #define amd64_call_reg(inst,reg)       \
        !           329:        do {    \
        !           330:                amd64_emit_rex(inst, 8, 0, 0, (reg)); \
        !           331:                *(inst)++ = (unsigned char)0xff;        \
        !           332:                x86_reg_emit ((inst), 2, ((reg) & 0x7));        \
        !           333:        } while (0)
        !           334: 
        !           335: #define amd64_ret(inst) do { *(inst)++ = (unsigned char)0xc3; } while (0)
        !           336: #define amd64_leave(inst) do { *(inst)++ = (unsigned char)0xc9; } while (0)
        !           337: #define amd64_movsd_reg_regp(inst,reg,regp)    \
        !           338:        do {    \
        !           339:                *(inst)++ = (unsigned char)0xf2;        \
        !           340:                amd64_emit_rex(inst, 0, (reg), 0, (regp)); \
        !           341:                *(inst)++ = (unsigned char)0x0f;        \
        !           342:                *(inst)++ = (unsigned char)0x10;        \
        !           343:                x86_regp_emit ((inst), (reg) & 0x7, (regp) & 0x7);      \
        !           344:        } while (0)
        !           345: 
        !           346: #define amd64_movsd_regp_reg(inst,regp,reg)    \
        !           347:        do {    \
        !           348:                *(inst)++ = (unsigned char)0xf2;        \
        !           349:                amd64_emit_rex(inst, 0, (reg), 0, (regp)); \
        !           350:                *(inst)++ = (unsigned char)0x0f;        \
        !           351:                *(inst)++ = (unsigned char)0x11;        \
        !           352:                x86_regp_emit ((inst), (reg) & 0x7, (regp) & 0x7);      \
        !           353:        } while (0)
        !           354: 
        !           355: #define amd64_movss_reg_regp(inst,reg,regp)    \
        !           356:        do {    \
        !           357:                *(inst)++ = (unsigned char)0xf3;        \
        !           358:                amd64_emit_rex(inst, 0, (reg), 0, (regp)); \
        !           359:                *(inst)++ = (unsigned char)0x0f;        \
        !           360:                *(inst)++ = (unsigned char)0x10;        \
        !           361:                x86_regp_emit ((inst), (reg) & 0x7, (regp) & 0x7);      \
        !           362:        } while (0)
        !           363: 
        !           364: #define amd64_movss_regp_reg(inst,regp,reg)    \
        !           365:        do {    \
        !           366:                *(inst)++ = (unsigned char)0xf3;        \
        !           367:                amd64_emit_rex(inst, 0, (reg), 0, (regp)); \
        !           368:                *(inst)++ = (unsigned char)0x0f;        \
        !           369:                *(inst)++ = (unsigned char)0x11;        \
        !           370:                x86_regp_emit ((inst), (reg) & 0x7, (regp) & 0x7);      \
        !           371:        } while (0)
        !           372: 
        !           373: #define amd64_movsd_reg_membase(inst,reg,basereg,disp) \
        !           374:        do {    \
        !           375:                *(inst)++ = (unsigned char)0xf2;        \
        !           376:                amd64_emit_rex(inst, 0, (reg), 0, (basereg)); \
        !           377:                *(inst)++ = (unsigned char)0x0f;        \
        !           378:                *(inst)++ = (unsigned char)0x10;        \
        !           379:                x86_membase_emit ((inst), (reg) & 0x7, (basereg) & 0x7, (disp));        \
        !           380:        } while (0)
        !           381: 
        !           382: #define amd64_movss_reg_membase(inst,reg,basereg,disp) \
        !           383:        do {    \
        !           384:                *(inst)++ = (unsigned char)0xf3;        \
        !           385:                amd64_emit_rex(inst, 0, (reg), 0, (basereg)); \
        !           386:                *(inst)++ = (unsigned char)0x0f;        \
        !           387:                *(inst)++ = (unsigned char)0x10;        \
        !           388:                x86_membase_emit ((inst), (reg) & 0x7, (basereg) & 0x7, (disp));        \
        !           389:        } while (0)
        !           390: 
        !           391: #define amd64_movsd_membase_reg(inst,basereg,disp,reg) \
        !           392:        do {    \
        !           393:                *(inst)++ = (unsigned char)0xf2;        \
        !           394:                amd64_emit_rex(inst, 0, (reg), 0, (basereg)); \
        !           395:                *(inst)++ = (unsigned char)0x0f;        \
        !           396:                *(inst)++ = (unsigned char)0x11;        \
        !           397:                x86_membase_emit ((inst), (reg) & 0x7, (basereg) & 0x7, (disp));        \
        !           398:        } while (0)
        !           399: 
        !           400: #define amd64_movss_membase_reg(inst,basereg,disp,reg) \
        !           401:        do {    \
        !           402:                *(inst)++ = (unsigned char)0xf3;        \
        !           403:                amd64_emit_rex(inst, 0, (reg), 0, (basereg)); \
        !           404:                *(inst)++ = (unsigned char)0x0f;        \
        !           405:                *(inst)++ = (unsigned char)0x11;        \
        !           406:                x86_membase_emit ((inst), (reg) & 0x7, (basereg) & 0x7, (disp));        \
        !           407:        } while (0)
        !           408: 
        !           409: /* The original inc_reg opcode is used as the REX prefix */
        !           410: #define amd64_inc_reg_size(inst,reg,size) \
        !           411:     do { \
        !           412:            amd64_emit_rex ((inst),(size),0,0,(reg)); \
        !           413:         *(inst)++ = (unsigned char)0xff; \
        !           414:         x86_reg_emit ((inst),0,(reg) & 0x7); \
        !           415:     } while (0)
        !           416: 
        !           417: #define amd64_dec_reg_size(inst,reg,size) \
        !           418:     do { \
        !           419:            amd64_emit_rex ((inst),(size),0,0,(reg)); \
        !           420:         *(inst)++ = (unsigned char)0xff; \
        !           421:         x86_reg_emit ((inst),1,(reg) & 0x7); \
        !           422:     } while (0)
        !           423: 
        !           424: #define amd64_padding_size(inst,size) \
        !           425:     do { if (size == 1) x86_padding ((inst),(size)); else { amd64_emit_rex ((inst),8,0,0,0); x86_padding((inst),(size) - 1); } } while (0)
        !           426: 
        !           427: #define amd64_fld_membase_size(inst,basereg,disp,is_double,size) do { \
        !           428:        amd64_emit_rex ((inst),0,0,0,(basereg)); \
        !           429:     *(inst)++ = (is_double) ? (unsigned char)0xdd : (unsigned char)0xd9;       \
        !           430:        amd64_membase_emit ((inst), 0, (basereg), (disp));      \
        !           431: } while (0)
        !           432: 
        !           433: #define amd64_call_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); *(inst)++ = (unsigned char)0xff; amd64_membase_emit ((inst),2, (basereg),(disp)); } while (0)
        !           434:     
        !           435: /*
        !           436:  * SSE
        !           437:  */
        !           438: 
        !           439: #define emit_opcode3(inst,op1,op2,op3) do { \
        !           440:    *(inst)++ = (unsigned char)(op1); \
        !           441:    *(inst)++ = (unsigned char)(op2); \
        !           442:    *(inst)++ = (unsigned char)(op3); \
        !           443: } while (0)
        !           444: 
        !           445: #define emit_sse_reg_reg_size(inst,dreg,reg,op1,op2,op3,size) do { \
        !           446:     *(inst)++ = (unsigned char)(op1); \
        !           447:        amd64_emit_rex ((inst), size, (dreg), 0, (reg)); \
        !           448:     *(inst)++ = (unsigned char)(op2); \
        !           449:     *(inst)++ = (unsigned char)(op3); \
        !           450:     x86_reg_emit ((inst), (dreg), (reg)); \
        !           451: } while (0)
        !           452: 
        !           453: #define emit_sse_reg_reg(inst,dreg,reg,op1,op2,op3) emit_sse_reg_reg_size ((inst), (dreg), (reg), (op1), (op2), (op3), 0)
        !           454: 
        !           455: #define emit_sse_membase_reg(inst,basereg,disp,reg,op1,op2,op3) do { \
        !           456:     *(inst)++ = (unsigned char)(op1); \
        !           457:     amd64_emit_rex ((inst), 0, (reg), 0, (basereg)); \
        !           458:     *(inst)++ = (unsigned char)(op2); \
        !           459:     *(inst)++ = (unsigned char)(op3); \
        !           460:     amd64_membase_emit ((inst), (reg), (basereg), (disp)); \
        !           461: } while (0)
        !           462: 
        !           463: #define emit_sse_reg_membase(inst,dreg,basereg,disp,op1,op2,op3) do { \
        !           464:     *(inst)++ = (unsigned char)(op1); \
        !           465:     amd64_emit_rex ((inst), 0, (dreg), 0, (basereg) == AMD64_RIP ? 0 : (basereg)); \
        !           466:     *(inst)++ = (unsigned char)(op2); \
        !           467:     *(inst)++ = (unsigned char)(op3); \
        !           468:     amd64_membase_emit ((inst), (dreg), (basereg), (disp)); \
        !           469: } while (0)
        !           470: 
        !           471: #define amd64_sse_xorpd_reg_reg(inst,dreg,reg) emit_sse_reg_reg ((inst),(dreg),(reg), 0x66, 0x0f, 0x57)
        !           472: 
        !           473: #define amd64_sse_xorpd_reg_membase(inst,dreg,basereg,disp) emit_sse_reg_membase ((inst),(dreg),(basereg), (disp), 0x66, 0x0f, 0x57)
        !           474: 
        !           475: #define amd64_sse_movsd_reg_reg(inst,dreg,reg) emit_sse_reg_reg ((inst), (dreg), (reg), 0xf2, 0x0f, 0x10)
        !           476: 
        !           477: #define amd64_sse_movsd_reg_membase(inst,dreg,basereg,disp) emit_sse_reg_membase ((inst), (dreg), (basereg), (disp), 0xf2, 0x0f, 0x10)
        !           478: 
        !           479: #define amd64_sse_movsd_membase_reg(inst,basereg,disp,reg) emit_sse_membase_reg ((inst), (basereg), (disp), (reg), 0xf2, 0x0f, 0x11)
        !           480: 
        !           481: #define amd64_sse_movss_membase_reg(inst,basereg,disp,reg) emit_sse_membase_reg ((inst), (basereg), (disp), (reg), 0xf3, 0x0f, 0x11)
        !           482: 
        !           483: #define amd64_sse_movss_reg_membase(inst,dreg,basereg,disp) emit_sse_reg_membase ((inst), (dreg), (basereg), (disp), 0xf3, 0x0f, 0x10)
        !           484: 
        !           485: #define amd64_sse_comisd_reg_reg(inst,dreg,reg) emit_sse_reg_reg ((inst),(dreg),(reg),0x66,0x0f,0x2f)
        !           486: 
        !           487: #define amd64_sse_comisd_reg_membase(inst,dreg,basereg,disp) emit_sse_reg_membase ((inst), (dreg), (basereg), (disp), 0x66, 0x0f, 0x2f)
        !           488: 
        !           489: #define amd64_sse_cvtsd2si_reg_reg(inst,dreg,reg) emit_sse_reg_reg_size ((inst), (dreg), (reg), 0xf2, 0x0f, 0x2d, 8)
        !           490: 
        !           491: #define amd64_sse_cvttsd2si_reg_reg_size(inst,dreg,reg,size) emit_sse_reg_reg_size ((inst), (dreg), (reg), 0xf2, 0x0f, 0x2c, (size))
        !           492: 
        !           493: #define amd64_sse_cvttsd2si_reg_reg(inst,dreg,reg) amd64_sse_cvttsd2si_reg_reg_size ((inst), (dreg), (reg), 8)
        !           494: 
        !           495: #define amd64_sse_cvtsi2sd_reg_reg_size(inst,dreg,reg,size) emit_sse_reg_reg_size ((inst), (dreg), (reg), 0xf2, 0x0f, 0x2a, (size))
        !           496: 
        !           497: #define amd64_sse_cvtsi2sd_reg_reg(inst,dreg,reg) amd64_sse_cvtsi2sd_reg_reg_size ((inst), (dreg), (reg), 8)
        !           498: 
        !           499: #define amd64_sse_cvtsd2ss_reg_reg(inst,dreg,reg) emit_sse_reg_reg ((inst), (dreg), (reg), 0xf2, 0x0f, 0x5a)
        !           500: 
        !           501: #define amd64_sse_cvtss2sd_reg_reg(inst,dreg,reg) emit_sse_reg_reg ((inst), (dreg), (reg), 0xf3, 0x0f, 0x5a)
        !           502: 
        !           503: #define amd64_sse_addsd_reg_reg(inst,dreg,reg) emit_sse_reg_reg ((inst), (dreg), (reg), 0xf2, 0x0f, 0x58)
        !           504: 
        !           505: #define amd64_sse_subsd_reg_reg(inst,dreg,reg) emit_sse_reg_reg ((inst), (dreg), (reg), 0xf2, 0x0f, 0x5c)
        !           506: 
        !           507: #define amd64_sse_mulsd_reg_reg(inst,dreg,reg) emit_sse_reg_reg ((inst), (dreg), (reg), 0xf2, 0x0f, 0x59)
        !           508: 
        !           509: #define amd64_sse_divsd_reg_reg(inst,dreg,reg) emit_sse_reg_reg ((inst), (dreg), (reg), 0xf2, 0x0f, 0x5e)
        !           510: 
        !           511: /* Generated from x86-codegen.h */
        !           512: 
        !           513: #define amd64_breakpoint_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_breakpoint(inst); } while (0)
        !           514: #define amd64_cld_size(inst,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_cld(inst); } while (0)
        !           515: #define amd64_stosb_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_stosb(inst); } while (0)
        !           516: #define amd64_stosl_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_stosl(inst); } while (0)
        !           517: #define amd64_stosd_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_stosd(inst); } while (0)
        !           518: #define amd64_movsb_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_movsb(inst); } while (0)
        !           519: #define amd64_movsl_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_movsl(inst); } while (0)
        !           520: #define amd64_movsd_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_movsd(inst); } while (0)
        !           521: #define amd64_prefix_size(inst,p,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_prefix((inst), p); } while (0)
        !           522: #define amd64_rdtsc_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_rdtsc(inst); } while (0)
        !           523: #define amd64_cmpxchg_reg_reg_size(inst,dreg,reg,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_cmpxchg_reg_reg((inst),((dreg)&0x7),((reg)&0x7)); } while (0)
        !           524: #define amd64_cmpxchg_mem_reg_size(inst,mem,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_cmpxchg_mem_reg((inst),(mem),((reg)&0x7)); } while (0)
        !           525: #define amd64_cmpxchg_membase_reg_size(inst,basereg,disp,reg,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg)); x86_cmpxchg_membase_reg((inst),((basereg)&0x7),(disp),((reg)&0x7)); } while (0)
        !           526: #define amd64_xchg_reg_reg_size(inst,dreg,reg,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_xchg_reg_reg((inst),((dreg)&0x7),((reg)&0x7),(size) == 8 ? 4 : (size)); } while (0)
        !           527: #define amd64_xchg_mem_reg_size(inst,mem,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_xchg_mem_reg((inst),(mem),((reg)&0x7),(size) == 8 ? 4 : (size)); } while (0)
        !           528: #define amd64_xchg_membase_reg_size(inst,basereg,disp,reg,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg))); x86_xchg_membase_reg((inst),((basereg)&0x7),(disp),((reg)&0x7),(size) == 8 ? 4 : (size)); } while (0)
        !           529: #define amd64_inc_mem_size(inst,mem,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_inc_mem((inst),(mem)); } while (0)
        !           530: #define amd64_inc_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_inc_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           531: //#define amd64_inc_reg_size(inst,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_inc_reg((inst),((reg)&0x7)); } while (0)
        !           532: #define amd64_dec_mem_size(inst,mem,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_dec_mem((inst),(mem)); } while (0)
        !           533: #define amd64_dec_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_dec_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           534: //#define amd64_dec_reg_size(inst,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_dec_reg((inst),((reg)&0x7)); } while (0)
        !           535: #define amd64_not_mem_size(inst,mem,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_not_mem((inst),(mem)); } while (0)
        !           536: #define amd64_not_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_not_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           537: #define amd64_not_reg_size(inst,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_not_reg((inst),((reg)&0x7)); } while (0)
        !           538: #define amd64_neg_mem_size(inst,mem,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_neg_mem((inst),(mem)); } while (0)
        !           539: #define amd64_neg_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_neg_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           540: #define amd64_neg_reg_size(inst,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_neg_reg((inst),((reg)&0x7)); } while (0)
        !           541: #define amd64_nop_size(inst,size) do { x86_nop(inst); } while (0)
        !           542: //#define amd64_alu_reg_imm_size(inst,opc,reg,imm,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_alu_reg_imm((inst),(opc),((reg)&0x7),(imm)); } while (0)
        !           543: #define amd64_alu_mem_imm_size(inst,opc,mem,imm,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_alu_mem_imm((inst),(opc),(mem),(imm)); } while (0)
        !           544: #define amd64_alu_membase_imm_size(inst,opc,basereg,disp,imm,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_alu_membase_imm((inst),(opc),((basereg)&0x7),(disp),(imm)); } while (0)
        !           545: #define amd64_alu_mem_reg_size(inst,opc,mem,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_alu_mem_reg((inst),(opc),(mem),((reg)&0x7)); } while (0)
        !           546: #define amd64_alu_membase_reg_size(inst,opc,basereg,disp,reg,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg)); x86_alu_membase_reg((inst),(opc),((basereg)&0x7),(disp),((reg)&0x7)); } while (0)
        !           547: //#define amd64_alu_reg_reg_size(inst,opc,dreg,reg,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_alu_reg_reg((inst),(opc),((dreg)&0x7),((reg)&0x7)); } while (0)
        !           548: #define amd64_alu_reg8_reg8_size(inst,opc,dreg,reg,is_dreg_h,is_reg_h,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_alu_reg8_reg8((inst),(opc),((dreg)&0x7),((reg)&0x7),(is_dreg_h),(is_reg_h)); } while (0)
        !           549: #define amd64_alu_reg_mem_size(inst,opc,reg,mem,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_alu_reg_mem((inst),(opc),((reg)&0x7),(mem)); } while (0)
        !           550: #define amd64_alu_reg_membase_size(inst,opc,reg,basereg,disp,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg)); x86_alu_reg_membase((inst),(opc),((reg)&0x7),((basereg)&0x7),(disp)); } while (0)
        !           551: #define amd64_test_reg_imm_size(inst,reg,imm,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_test_reg_imm((inst),((reg)&0x7),(imm)); } while (0)
        !           552: #define amd64_test_mem_imm_size(inst,mem,imm,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_test_mem_imm((inst),(mem),(imm)); } while (0)
        !           553: #define amd64_test_membase_imm_size(inst,basereg,disp,imm,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_test_membase_imm((inst),((basereg)&0x7),(disp),(imm)); } while (0)
        !           554: #define amd64_test_reg_reg_size(inst,dreg,reg,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_test_reg_reg((inst),((dreg)&0x7),((reg)&0x7)); } while (0)
        !           555: #define amd64_test_mem_reg_size(inst,mem,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_test_mem_reg((inst),(mem),((reg)&0x7)); } while (0)
        !           556: #define amd64_test_membase_reg_size(inst,basereg,disp,reg,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg)); x86_test_membase_reg((inst),((basereg)&0x7),(disp),((reg)&0x7)); } while (0)
        !           557: #define amd64_shift_reg_imm_size(inst,opc,reg,imm,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_shift_reg_imm((inst),(opc),((reg)&0x7),(imm)); } while (0)
        !           558: #define amd64_shift_mem_imm_size(inst,opc,mem,imm,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_shift_mem_imm((inst),(opc),(mem),(imm)); } while (0)
        !           559: #define amd64_shift_membase_imm_size(inst,opc,basereg,disp,imm,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg)); x86_shift_membase_imm((inst),(opc),((basereg)&0x7),(disp),(imm)); } while (0)
        !           560: #define amd64_shift_reg_size(inst,opc,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_shift_reg((inst),(opc),((reg)&0x7)); } while (0)
        !           561: #define amd64_shift_mem_size(inst,opc,mem,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_shift_mem((inst),(opc),(mem)); } while (0)
        !           562: #define amd64_shift_membase_size(inst,opc,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_shift_membase((inst),(opc),((basereg)&0x7),(disp)); } while (0)
        !           563: #define amd64_shrd_reg_size(inst,dreg,reg,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_shrd_reg((inst),((dreg)&0x7),((reg)&0x7)); } while (0)
        !           564: #define amd64_shrd_reg_imm_size(inst,dreg,reg,shamt,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_shrd_reg_imm((inst),((dreg)&0x7),((reg)&0x7),(shamt)); } while (0)
        !           565: #define amd64_shld_reg_size(inst,dreg,reg,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_shld_reg((inst),((dreg)&0x7),((reg)&0x7)); } while (0)
        !           566: #define amd64_shld_reg_imm_size(inst,dreg,reg,shamt,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_shld_reg_imm((inst),((dreg)&0x7),((reg)&0x7),(shamt)); } while (0)
        !           567: #define amd64_mul_reg_size(inst,reg,is_signed,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_mul_reg((inst),((reg)&0x7),(is_signed)); } while (0)
        !           568: #define amd64_mul_mem_size(inst,mem,is_signed,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_mul_mem((inst),(mem),(is_signed)); } while (0)
        !           569: #define amd64_mul_membase_size(inst,basereg,disp,is_signed,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_mul_membase((inst),((basereg)&0x7),(disp),(is_signed)); } while (0)
        !           570: #define amd64_imul_reg_reg_size(inst,dreg,reg,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_imul_reg_reg((inst),((dreg)&0x7),((reg)&0x7)); } while (0)
        !           571: #define amd64_imul_reg_mem_size(inst,reg,mem,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_imul_reg_mem((inst),((reg)&0x7),(mem)); } while (0)
        !           572: #define amd64_imul_reg_membase_size(inst,reg,basereg,disp,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg)); x86_imul_reg_membase((inst),((reg)&0x7),((basereg)&0x7),(disp)); } while (0)
        !           573: #define amd64_imul_reg_reg_imm_size(inst,dreg,reg,imm,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_imul_reg_reg_imm((inst),((dreg)&0x7),((reg)&0x7),(imm)); } while (0)
        !           574: #define amd64_imul_reg_mem_imm_size(inst,reg,mem,imm,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_imul_reg_mem_imm((inst),((reg)&0x7),(mem),(imm)); } while (0)
        !           575: #define amd64_imul_reg_membase_imm_size(inst,reg,basereg,disp,imm,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg)); x86_imul_reg_membase_imm((inst),((reg)&0x7),((basereg)&0x7),(disp),(imm)); } while (0)
        !           576: #define amd64_div_reg_size(inst,reg,is_signed,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_div_reg((inst),((reg)&0x7),(is_signed)); } while (0)
        !           577: #define amd64_div_mem_size(inst,mem,is_signed,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_div_mem((inst),(mem),(is_signed)); } while (0)
        !           578: #define amd64_div_membase_size(inst,basereg,disp,is_signed,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_div_membase((inst),((basereg)&0x7),(disp),(is_signed)); } while (0)
        !           579: #define amd64_mov_mem_reg_size(inst,mem,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_mov_mem_reg((inst),(mem),((reg)&0x7),(size) == 8 ? 4 : (size)); } while (0)
        !           580: //#define amd64_mov_regp_reg_size(inst,regp,reg,size) do { amd64_emit_rex ((inst),(size),(regp),0,(reg)); x86_mov_regp_reg((inst),(regp),((reg)&0x7),(size) == 8 ? 4 : (size)); } while (0)
        !           581: //#define amd64_mov_membase_reg_size(inst,basereg,disp,reg,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg)); x86_mov_membase_reg((inst),((basereg)&0x7),(disp),((reg)&0x7),(size) == 8 ? 4 : (size)); } while (0)
        !           582: #define amd64_mov_memindex_reg_size(inst,basereg,disp,indexreg,shift,reg,size) do { amd64_emit_rex ((inst),(size),(reg),(indexreg),(basereg)); x86_mov_memindex_reg((inst),((basereg)&0x7),(disp),((indexreg)&0x7),(shift),((reg)&0x7),(size) == 8 ? 4 : (size)); } while (0)
        !           583: #define amd64_mov_reg_reg_size(inst,dreg,reg,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_mov_reg_reg((inst),((dreg)&0x7),((reg)&0x7),(size) == 8 ? 4 : (size)); } while (0)
        !           584: //#define amd64_mov_reg_mem_size(inst,reg,mem,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_mov_reg_mem((inst),((reg)&0x7),(mem),(size) == 8 ? 4 : (size)); } while (0)
        !           585: //#define amd64_mov_reg_membase_size(inst,reg,basereg,disp,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg)); x86_mov_reg_membase((inst),((reg)&0x7),((basereg)&0x7),(disp),(size) == 8 ? 4 : (size)); } while (0)
        !           586: #define amd64_mov_reg_memindex_size(inst,reg,basereg,disp,indexreg,shift,size) do { amd64_emit_rex ((inst),(size),(reg),(indexreg),(basereg)); x86_mov_reg_memindex((inst),((reg)&0x7),((basereg)&0x7),(disp),((indexreg)&0x7),(shift),(size) == 8 ? 4 : (size)); } while (0)
        !           587: #define amd64_clear_reg_size(inst,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_clear_reg((inst),((reg)&0x7)); } while (0)
        !           588: //#define amd64_mov_reg_imm_size(inst,reg,imm,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_mov_reg_imm((inst),((reg)&0x7),(imm)); } while (0)
        !           589: #define amd64_mov_mem_imm_size(inst,mem,imm,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_mov_mem_imm((inst),(mem),(imm),(size) == 8 ? 4 : (size)); } while (0)
        !           590: //#define amd64_mov_membase_imm_size(inst,basereg,disp,imm,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_mov_membase_imm((inst),((basereg)&0x7),(disp),(imm),(size) == 8 ? 4 : (size)); } while (0)
        !           591: #define amd64_mov_memindex_imm_size(inst,basereg,disp,indexreg,shift,imm,size) do { amd64_emit_rex ((inst),(size),0,(indexreg),(basereg)); x86_mov_memindex_imm((inst),((basereg)&0x7),(disp),((indexreg)&0x7),(shift),(imm),(size) == 8 ? 4 : (size)); } while (0)
        !           592: #define amd64_lea_mem_size(inst,reg,mem,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_lea_mem((inst),((reg)&0x7),(mem)); } while (0)
        !           593: //#define amd64_lea_membase_size(inst,reg,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_lea_membase((inst),((reg)&0x7),((basereg)&0x7),(disp)); } while (0)
        !           594: #define amd64_lea_memindex_size(inst,reg,basereg,disp,indexreg,shift,size) do { amd64_emit_rex ((inst),(size),(reg),(indexreg),(basereg)); x86_lea_memindex((inst),((reg)&0x7),((basereg)&0x7),(disp),((indexreg)&0x7),(shift)); } while (0)
        !           595: #define amd64_widen_reg_size(inst,dreg,reg,is_signed,is_half,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_widen_reg((inst),((dreg)&0x7),((reg)&0x7),(is_signed),(is_half)); } while (0)
        !           596: #define amd64_widen_mem_size(inst,dreg,mem,is_signed,is_half,size) do { amd64_emit_rex ((inst),(size),(dreg),0,0); x86_widen_mem((inst),((dreg)&0x7),(mem),(is_signed),(is_half)); } while (0)
        !           597: #define amd64_widen_membase_size(inst,dreg,basereg,disp,is_signed,is_half,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(basereg)); x86_widen_membase((inst),((dreg)&0x7),((basereg)&0x7),(disp),(is_signed),(is_half)); } while (0)
        !           598: #define amd64_widen_memindex_size(inst,dreg,basereg,disp,indexreg,shift,is_signed,is_half,size) do { amd64_emit_rex ((inst),(size),(dreg),(indexreg),(basereg)); x86_widen_memindex((inst),((dreg)&0x7),((basereg)&0x7),(disp),((indexreg)&0x7),(shift),(is_signed),(is_half)); } while (0)
        !           599: #define amd64_cdq_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_cdq(inst); } while (0)
        !           600: #define amd64_wait_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_wait(inst); } while (0)
        !           601: #define amd64_fp_op_mem_size(inst,opc,mem,is_double,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fp_op_mem((inst),(opc),(mem),(is_double)); } while (0)
        !           602: #define amd64_fp_op_membase_size(inst,opc,basereg,disp,is_double,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); x86_fp_op_membase((inst),(opc),((basereg)&0x7),(disp),(is_double)); } while (0)
        !           603: #define amd64_fp_op_size(inst,opc,index,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fp_op((inst),(opc),(index)); } while (0)
        !           604: #define amd64_fp_op_reg_size(inst,opc,index,pop_stack,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fp_op_reg((inst),(opc),(index),(pop_stack)); } while (0)
        !           605: #define amd64_fp_int_op_membase_size(inst,opc,basereg,disp,is_int,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); x86_fp_int_op_membase((inst),(opc),((basereg)&0x7),(disp),(is_int)); } while (0)
        !           606: #define amd64_fstp_size(inst,index,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fstp((inst),(index)); } while (0)
        !           607: #define amd64_fcompp_size(inst,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fcompp(inst); } while (0)
        !           608: #define amd64_fucompp_size(inst,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fucompp(inst); } while (0)
        !           609: #define amd64_fnstsw_size(inst,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fnstsw(inst); } while (0)
        !           610: #define amd64_fnstcw_size(inst,mem,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fnstcw((inst),(mem)); } while (0)
        !           611: #define amd64_fnstcw_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_fnstcw_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           612: #define amd64_fldcw_size(inst,mem,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fldcw((inst),(mem)); } while (0)
        !           613: #define amd64_fldcw_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); x86_fldcw_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           614: #define amd64_fchs_size(inst,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fchs(inst); } while (0)
        !           615: #define amd64_frem_size(inst,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_frem(inst); } while (0)
        !           616: #define amd64_fxch_size(inst,index,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fxch((inst),(index)); } while (0)
        !           617: #define amd64_fcomi_size(inst,index,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fcomi((inst),(index)); } while (0)
        !           618: #define amd64_fcomip_size(inst,index,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fcomip((inst),(index)); } while (0)
        !           619: #define amd64_fucomi_size(inst,index,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fucomi((inst),(index)); } while (0)
        !           620: #define amd64_fucomip_size(inst,index,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fucomip((inst),(index)); } while (0)
        !           621: #define amd64_fld_size(inst,mem,is_double,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fld((inst),(mem),(is_double)); } while (0)
        !           622: //#define amd64_fld_membase_size(inst,basereg,disp,is_double,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); x86_fld_membase((inst),((basereg)&0x7),(disp),(is_double)); } while (0)
        !           623: #define amd64_fld80_mem_size(inst,mem,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fld80_mem((inst),(mem)); } while (0)
        !           624: #define amd64_fld80_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_fld80_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           625: #define amd64_fild_size(inst,mem,is_long,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fild((inst),(mem),(is_long)); } while (0)
        !           626: #define amd64_fild_membase_size(inst,basereg,disp,is_long,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); x86_fild_membase((inst),((basereg)&0x7),(disp),(is_long)); } while (0)
        !           627: #define amd64_fld_reg_size(inst,index,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fld_reg((inst),(index)); } while (0)
        !           628: #define amd64_fldz_size(inst,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fldz(inst); } while (0)
        !           629: #define amd64_fld1_size(inst,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fld1(inst); } while (0)
        !           630: #define amd64_fldpi_size(inst,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fldpi(inst); } while (0)
        !           631: #define amd64_fst_size(inst,mem,is_double,pop_stack,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fst((inst),(mem),(is_double),(pop_stack)); } while (0)
        !           632: #define amd64_fst_membase_size(inst,basereg,disp,is_double,pop_stack,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); x86_fst_membase((inst),((basereg)&0x7),(disp),(is_double),(pop_stack)); } while (0)
        !           633: #define amd64_fst80_mem_size(inst,mem,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fst80_mem((inst),(mem)); } while (0)
        !           634: #define amd64_fst80_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); x86_fst80_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           635: #define amd64_fist_pop_size(inst,mem,is_long,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_fist_pop((inst),(mem),(is_long)); } while (0)
        !           636: #define amd64_fist_pop_membase_size(inst,basereg,disp,is_long,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); x86_fist_pop_membase((inst),((basereg)&0x7),(disp),(is_long)); } while (0)
        !           637: #define amd64_fstsw_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_fstsw(inst); } while (0)
        !           638: #define amd64_fist_membase_size(inst,basereg,disp,is_int,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); x86_fist_membase((inst),((basereg)&0x7),(disp),(is_int)); } while (0)
        !           639: //#define amd64_push_reg_size(inst,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_push_reg((inst),((reg)&0x7)); } while (0)
        !           640: #define amd64_push_regp_size(inst,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_push_regp((inst),((reg)&0x7)); } while (0)
        !           641: #define amd64_push_mem_size(inst,mem,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_push_mem((inst),(mem)); } while (0)
        !           642: //#define amd64_push_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_push_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           643: #define amd64_push_memindex_size(inst,basereg,disp,indexreg,shift,size) do { amd64_emit_rex ((inst),(size),0,(indexreg),(basereg)); x86_push_memindex((inst),((basereg)&0x7),(disp),((indexreg)&0x7),(shift)); } while (0)
        !           644: #define amd64_push_imm_size(inst,imm,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_push_imm((inst),(imm)); } while (0)
        !           645: //#define amd64_pop_reg_size(inst,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_pop_reg((inst),((reg)&0x7)); } while (0)
        !           646: #define amd64_pop_mem_size(inst,mem,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_pop_mem((inst),(mem)); } while (0)
        !           647: #define amd64_pop_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_pop_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           648: #define amd64_pushad_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_pushad(inst); } while (0)
        !           649: #define amd64_pushfd_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_pushfd(inst); } while (0)
        !           650: #define amd64_popad_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_popad(inst); } while (0)
        !           651: #define amd64_popfd_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_popfd(inst); } while (0)
        !           652: #define amd64_loop_size(inst,imm,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_loop((inst),(imm)); } while (0)
        !           653: #define amd64_loope_size(inst,imm,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_loope((inst),(imm)); } while (0)
        !           654: #define amd64_loopne_size(inst,imm,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_loopne((inst),(imm)); } while (0)
        !           655: #define amd64_jump32_size(inst,imm,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_jump32((inst),(imm)); } while (0)
        !           656: #define amd64_jump8_size(inst,imm,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_jump8((inst),(imm)); } while (0)
        !           657: #define amd64_jump_reg_size(inst,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_jump_reg((inst),((reg)&0x7)); } while (0)
        !           658: #define amd64_jump_mem_size(inst,mem,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_jump_mem((inst),(mem)); } while (0)
        !           659: #define amd64_jump_membase_size(inst,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_jump_membase((inst),((basereg)&0x7),(disp)); } while (0)
        !           660: #define amd64_jump_code_size(inst,target,size) do { x86_jump_code((inst),(target)); } while (0)
        !           661: #define amd64_jump_disp_size(inst,disp,size) do { amd64_emit_rex ((inst),0,0,0,0); x86_jump_disp((inst),(disp)); } while (0)
        !           662: #define amd64_branch8_size(inst,cond,imm,is_signed,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_branch8((inst),(cond),(imm),(is_signed)); } while (0)
        !           663: #define amd64_branch32_size(inst,cond,imm,is_signed,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_branch32((inst),(cond),(imm),(is_signed)); } while (0)
        !           664: #define amd64_branch_size(inst,cond,target,is_signed,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_branch((inst),(cond),(target),(is_signed)); } while (0)
        !           665: #define amd64_branch_disp_size(inst,cond,disp,is_signed,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_branch_disp((inst),(cond),(disp),(is_signed)); } while (0)
        !           666: #define amd64_set_reg_size(inst,cond,reg,is_signed,size) do { amd64_emit_rex((inst),1,0,0,(reg)); x86_set_reg((inst),(cond),((reg)&0x7),(is_signed)); } while (0)
        !           667: #define amd64_set_mem_size(inst,cond,mem,is_signed,size) do { x86_set_mem((inst),(cond),(mem),(is_signed)); } while (0)
        !           668: #define amd64_set_membase_size(inst,cond,basereg,disp,is_signed,size) do { amd64_emit_rex ((inst),0,0,0,(basereg)); x86_set_membase((inst),(cond),((basereg)&0x7),(disp),(is_signed)); } while (0)
        !           669: #define amd64_call_imm_size(inst,disp,size) do { x86_call_imm((inst),(disp)); } while (0)
        !           670: //#define amd64_call_reg_size(inst,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_call_reg((inst),((reg)&0x7)); } while (0)
        !           671: #define amd64_call_mem_size(inst,mem,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_call_mem((inst),(mem)); } while (0)
        !           672: #define amd64_call_code_size(inst,target,size) do { x86_call_code((inst),(target)); } while (0)
        !           673: //#define amd64_ret_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_ret(inst); } while (0)
        !           674: #define amd64_ret_imm_size(inst,imm,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_ret_imm((inst),(imm)); } while (0)
        !           675: #define amd64_cmov_reg_size(inst,cond,is_signed,dreg,reg,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_cmov_reg((inst),(cond),(is_signed),((dreg)&0x7),((reg)&0x7)); } while (0)
        !           676: #define amd64_cmov_mem_size(inst,cond,is_signed,reg,mem,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_cmov_mem((inst),(cond),(is_signed),((reg)&0x7),(mem)); } while (0)
        !           677: #define amd64_cmov_membase_size(inst,cond,is_signed,reg,basereg,disp,size) do { amd64_emit_rex ((inst),(size),0,0,(basereg)); x86_cmov_membase((inst),(cond),(is_signed),((reg)&0x7),((basereg)&0x7),(disp)); } while (0)
        !           678: #define amd64_enter_size(inst,framesize) do { amd64_emit_rex ((inst),(size),0,0,0); x86_enter((inst),(framesize)); } while (0)
        !           679: //#define amd64_leave_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_leave(inst); } while (0)
        !           680: #define amd64_sahf_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_sahf(inst); } while (0)
        !           681: #define amd64_fsin_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_fsin(inst); } while (0)
        !           682: #define amd64_fcos_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_fcos(inst); } while (0)
        !           683: #define amd64_fabs_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_fabs(inst); } while (0)
        !           684: #define amd64_ftst_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_ftst(inst); } while (0)
        !           685: #define amd64_fxam_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_fxam(inst); } while (0)
        !           686: #define amd64_fpatan_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_fpatan(inst); } while (0)
        !           687: #define amd64_fprem_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_fprem(inst); } while (0)
        !           688: #define amd64_fprem1_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_fprem1(inst); } while (0)
        !           689: #define amd64_frndint_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_frndint(inst); } while (0)
        !           690: #define amd64_fsqrt_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_fsqrt(inst); } while (0)
        !           691: #define amd64_fptan_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_fptan(inst); } while (0)
        !           692: //#define amd64_padding_size(inst,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_padding((inst),(size)); } while (0)
        !           693: #define amd64_prolog_size(inst,frame_size,reg_mask,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_prolog((inst),(frame_size),(reg_mask)); } while (0)
        !           694: #define amd64_epilog_size(inst,reg_mask,size) do { amd64_emit_rex ((inst),(size),0,0,0); x86_epilog((inst),(reg_mask)); } while (0)
        !           695: #define amd64_xadd_reg_reg_size(inst,dreg,reg,size) do { amd64_emit_rex ((inst),(size),(dreg),0,(reg)); x86_xadd_reg_reg ((inst), (dreg), (reg), (size)); } while (0)
        !           696: #define amd64_xadd_mem_reg_size(inst,mem,reg,size) do { amd64_emit_rex ((inst),(size),0,0,(reg)); x86_xadd_mem_reg((inst),(mem),((reg)&0x7), (size)); } while (0)
        !           697: #define amd64_xadd_membase_reg_size(inst,basereg,disp,reg,size) do { amd64_emit_rex ((inst),(size),(reg),0,(basereg)); x86_xadd_membase_reg((inst),((basereg)&0x7),(disp),((reg)&0x7),(size)); } while (0)
        !           698: 
        !           699: 
        !           700: 
        !           701: 
        !           702: #define amd64_breakpoint(inst) amd64_breakpoint_size(inst,8)
        !           703: #define amd64_cld(inst) amd64_cld_size(inst,8)
        !           704: #define amd64_stosb(inst) amd64_stosb_size(inst,8)
        !           705: #define amd64_stosl(inst) amd64_stosl_size(inst,8)
        !           706: #define amd64_stosd(inst) amd64_stosd_size(inst,8)
        !           707: #define amd64_movsb(inst) amd64_movsb_size(inst,8)
        !           708: #define amd64_movsl(inst) amd64_movsl_size(inst,8)
        !           709: #define amd64_movsd(inst) amd64_movsd_size(inst,8)
        !           710: #define amd64_prefix(inst,p) amd64_prefix_size(inst,p,8)
        !           711: #define amd64_rdtsc(inst) amd64_rdtsc_size(inst,8)
        !           712: #define amd64_cmpxchg_reg_reg(inst,dreg,reg) amd64_cmpxchg_reg_reg_size(inst,dreg,reg,8)
        !           713: #define amd64_cmpxchg_mem_reg(inst,mem,reg) amd64_cmpxchg_mem_reg_size(inst,mem,reg,8)
        !           714: #define amd64_cmpxchg_membase_reg(inst,basereg,disp,reg) amd64_cmpxchg_membase_reg_size(inst,basereg,disp,reg,8)
        !           715: #define amd64_xchg_reg_reg(inst,dreg,reg,size) amd64_xchg_reg_reg_size(inst,dreg,reg,size)
        !           716: #define amd64_xchg_mem_reg(inst,mem,reg,size) amd64_xchg_mem_reg_size(inst,mem,reg,size)
        !           717: #define amd64_xchg_membase_reg(inst,basereg,disp,reg,size) amd64_xchg_membase_reg_size(inst,basereg,disp,reg,size)
        !           718: #define amd64_xadd_reg_reg(inst,dreg,reg,size) amd64_xadd_reg_reg_size(inst,dreg,reg,size)
        !           719: #define amd64_xadd_mem_reg(inst,mem,reg,size) amd64_xadd_mem_reg_size(inst,mem,reg,size)
        !           720: #define amd64_xadd_membase_reg(inst,basereg,disp,reg,size) amd64_xadd_membase_reg_size(inst,basereg,disp,reg,size)
        !           721: #define amd64_inc_mem(inst,mem) amd64_inc_mem_size(inst,mem,8)
        !           722: #define amd64_inc_membase(inst,basereg,disp) amd64_inc_membase_size(inst,basereg,disp,8)
        !           723: #define amd64_inc_reg(inst,reg) amd64_inc_reg_size(inst,reg,8)
        !           724: #define amd64_dec_mem(inst,mem) amd64_dec_mem_size(inst,mem,8)
        !           725: #define amd64_dec_membase(inst,basereg,disp) amd64_dec_membase_size(inst,basereg,disp,8)
        !           726: #define amd64_dec_reg(inst,reg) amd64_dec_reg_size(inst,reg,8)
        !           727: #define amd64_not_mem(inst,mem) amd64_not_mem_size(inst,mem,8)
        !           728: #define amd64_not_membase(inst,basereg,disp) amd64_not_membase_size(inst,basereg,disp,8)
        !           729: #define amd64_not_reg(inst,reg) amd64_not_reg_size(inst,reg,8)
        !           730: #define amd64_neg_mem(inst,mem) amd64_neg_mem_size(inst,mem,8)
        !           731: #define amd64_neg_membase(inst,basereg,disp) amd64_neg_membase_size(inst,basereg,disp,8)
        !           732: #define amd64_neg_reg(inst,reg) amd64_neg_reg_size(inst,reg,8)
        !           733: #define amd64_nop(inst) amd64_nop_size(inst,8)
        !           734: //#define amd64_alu_reg_imm(inst,opc,reg,imm) amd64_alu_reg_imm_size(inst,opc,reg,imm,8)
        !           735: #define amd64_alu_mem_imm(inst,opc,mem,imm) amd64_alu_mem_imm_size(inst,opc,mem,imm,8)
        !           736: #define amd64_alu_membase_imm(inst,opc,basereg,disp,imm) amd64_alu_membase_imm_size(inst,opc,basereg,disp,imm,8)
        !           737: #define amd64_alu_mem_reg(inst,opc,mem,reg) amd64_alu_mem_reg_size(inst,opc,mem,reg,8)
        !           738: #define amd64_alu_membase_reg(inst,opc,basereg,disp,reg) amd64_alu_membase_reg_size(inst,opc,basereg,disp,reg,8)
        !           739: //#define amd64_alu_reg_reg(inst,opc,dreg,reg) amd64_alu_reg_reg_size(inst,opc,dreg,reg,8)
        !           740: #define amd64_alu_reg8_reg8(inst,opc,dreg,reg,is_dreg_h,is_reg_h) amd64_alu_reg8_reg8_size(inst,opc,dreg,reg,is_dreg_h,is_reg_h,8)
        !           741: #define amd64_alu_reg_mem(inst,opc,reg,mem) amd64_alu_reg_mem_size(inst,opc,reg,mem,8)
        !           742: #define amd64_alu_reg_membase(inst,opc,reg,basereg,disp) amd64_alu_reg_membase_size(inst,opc,reg,basereg,disp,8)
        !           743: #define amd64_test_reg_imm(inst,reg,imm) amd64_test_reg_imm_size(inst,reg,imm,8)
        !           744: #define amd64_test_mem_imm(inst,mem,imm) amd64_test_mem_imm_size(inst,mem,imm,8)
        !           745: #define amd64_test_membase_imm(inst,basereg,disp,imm) amd64_test_membase_imm_size(inst,basereg,disp,imm,8)
        !           746: #define amd64_test_reg_reg(inst,dreg,reg) amd64_test_reg_reg_size(inst,dreg,reg,8)
        !           747: #define amd64_test_mem_reg(inst,mem,reg) amd64_test_mem_reg_size(inst,mem,reg,8)
        !           748: #define amd64_test_membase_reg(inst,basereg,disp,reg) amd64_test_membase_reg_size(inst,basereg,disp,reg,8)
        !           749: #define amd64_shift_reg_imm(inst,opc,reg,imm) amd64_shift_reg_imm_size(inst,opc,reg,imm,8)
        !           750: #define amd64_shift_mem_imm(inst,opc,mem,imm) amd64_shift_mem_imm_size(inst,opc,mem,imm,8)
        !           751: #define amd64_shift_membase_imm(inst,opc,basereg,disp,imm) amd64_shift_membase_imm_size(inst,opc,basereg,disp,imm,8)
        !           752: #define amd64_shift_reg(inst,opc,reg) amd64_shift_reg_size(inst,opc,reg,8)
        !           753: #define amd64_shift_mem(inst,opc,mem) amd64_shift_mem_size(inst,opc,mem,8)
        !           754: #define amd64_shift_membase(inst,opc,basereg,disp) amd64_shift_membase_size(inst,opc,basereg,disp,8)
        !           755: #define amd64_shrd_reg(inst,dreg,reg) amd64_shrd_reg_size(inst,dreg,reg,8)
        !           756: #define amd64_shrd_reg_imm(inst,dreg,reg,shamt) amd64_shrd_reg_imm_size(inst,dreg,reg,shamt,8)
        !           757: #define amd64_shld_reg(inst,dreg,reg) amd64_shld_reg_size(inst,dreg,reg,8)
        !           758: #define amd64_shld_reg_imm(inst,dreg,reg,shamt) amd64_shld_reg_imm_size(inst,dreg,reg,shamt,8)
        !           759: #define amd64_mul_reg(inst,reg,is_signed) amd64_mul_reg_size(inst,reg,is_signed,8)
        !           760: #define amd64_mul_mem(inst,mem,is_signed) amd64_mul_mem_size(inst,mem,is_signed,8)
        !           761: #define amd64_mul_membase(inst,basereg,disp,is_signed) amd64_mul_membase_size(inst,basereg,disp,is_signed,8)
        !           762: #define amd64_imul_reg_reg(inst,dreg,reg) amd64_imul_reg_reg_size(inst,dreg,reg,8)
        !           763: #define amd64_imul_reg_mem(inst,reg,mem) amd64_imul_reg_mem_size(inst,reg,mem,8)
        !           764: #define amd64_imul_reg_membase(inst,reg,basereg,disp) amd64_imul_reg_membase_size(inst,reg,basereg,disp,8)
        !           765: #define amd64_imul_reg_reg_imm(inst,dreg,reg,imm) amd64_imul_reg_reg_imm_size(inst,dreg,reg,imm,8)
        !           766: #define amd64_imul_reg_mem_imm(inst,reg,mem,imm) amd64_imul_reg_mem_imm_size(inst,reg,mem,imm,8)
        !           767: #define amd64_imul_reg_membase_imm(inst,reg,basereg,disp,imm) amd64_imul_reg_membase_imm_size(inst,reg,basereg,disp,imm,8)
        !           768: #define amd64_div_reg(inst,reg,is_signed) amd64_div_reg_size(inst,reg,is_signed,8)
        !           769: #define amd64_div_mem(inst,mem,is_signed) amd64_div_mem_size(inst,mem,is_signed,8)
        !           770: #define amd64_div_membase(inst,basereg,disp,is_signed) amd64_div_membase_size(inst,basereg,disp,is_signed,8)
        !           771: #define amd64_mov_mem_reg(inst,mem,reg,size) amd64_mov_mem_reg_size(inst,mem,reg,size)
        !           772: //#define amd64_mov_regp_reg(inst,regp,reg,size) amd64_mov_regp_reg_size(inst,regp,reg,size)
        !           773: //#define amd64_mov_membase_reg(inst,basereg,disp,reg,size) amd64_mov_membase_reg_size(inst,basereg,disp,reg,size)
        !           774: #define amd64_mov_memindex_reg(inst,basereg,disp,indexreg,shift,reg,size) amd64_mov_memindex_reg_size(inst,basereg,disp,indexreg,shift,reg,size)
        !           775: //#define amd64_mov_reg_reg(inst,dreg,reg,size) amd64_mov_reg_reg_size(inst,dreg,reg,size)
        !           776: //#define amd64_mov_reg_mem(inst,reg,mem,size) amd64_mov_reg_mem_size(inst,reg,mem,size)
        !           777: //#define amd64_mov_reg_membase(inst,reg,basereg,disp,size) amd64_mov_reg_membase_size(inst,reg,basereg,disp,size)
        !           778: #define amd64_mov_reg_memindex(inst,reg,basereg,disp,indexreg,shift,size) amd64_mov_reg_memindex_size(inst,reg,basereg,disp,indexreg,shift,size)
        !           779: #define amd64_clear_reg(inst,reg) amd64_clear_reg_size(inst,reg,8)
        !           780: //#define amd64_mov_reg_imm(inst,reg,imm) amd64_mov_reg_imm_size(inst,reg,imm,8)
        !           781: #define amd64_mov_mem_imm(inst,mem,imm,size) amd64_mov_mem_imm_size(inst,mem,imm,size)
        !           782: //#define amd64_mov_membase_imm(inst,basereg,disp,imm,size) amd64_mov_membase_imm_size(inst,basereg,disp,imm,size)
        !           783: #define amd64_mov_memindex_imm(inst,basereg,disp,indexreg,shift,imm,size) amd64_mov_memindex_imm_size(inst,basereg,disp,indexreg,shift,imm,size)
        !           784: #define amd64_lea_mem(inst,reg,mem) amd64_lea_mem_size(inst,reg,mem,8)
        !           785: //#define amd64_lea_membase(inst,reg,basereg,disp) amd64_lea_membase_size(inst,reg,basereg,disp,8)
        !           786: #define amd64_lea_memindex(inst,reg,basereg,disp,indexreg,shift) amd64_lea_memindex_size(inst,reg,basereg,disp,indexreg,shift,8)
        !           787: #define amd64_widen_reg(inst,dreg,reg,is_signed,is_half) amd64_widen_reg_size(inst,dreg,reg,is_signed,is_half,8)
        !           788: #define amd64_widen_mem(inst,dreg,mem,is_signed,is_half) amd64_widen_mem_size(inst,dreg,mem,is_signed,is_half,8)
        !           789: #define amd64_widen_membase(inst,dreg,basereg,disp,is_signed,is_half) amd64_widen_membase_size(inst,dreg,basereg,disp,is_signed,is_half,8)
        !           790: #define amd64_widen_memindex(inst,dreg,basereg,disp,indexreg,shift,is_signed,is_half) amd64_widen_memindex_size(inst,dreg,basereg,disp,indexreg,shift,is_signed,is_half,8)
        !           791: #define amd64_cdq(inst) amd64_cdq_size(inst,8)
        !           792: #define amd64_wait(inst) amd64_wait_size(inst,8)
        !           793: #define amd64_fp_op_mem(inst,opc,mem,is_double) amd64_fp_op_mem_size(inst,opc,mem,is_double,8)
        !           794: #define amd64_fp_op_membase(inst,opc,basereg,disp,is_double) amd64_fp_op_membase_size(inst,opc,basereg,disp,is_double,8)
        !           795: #define amd64_fp_op(inst,opc,index) amd64_fp_op_size(inst,opc,index,8)
        !           796: #define amd64_fp_op_reg(inst,opc,index,pop_stack) amd64_fp_op_reg_size(inst,opc,index,pop_stack,8)
        !           797: #define amd64_fp_int_op_membase(inst,opc,basereg,disp,is_int) amd64_fp_int_op_membase_size(inst,opc,basereg,disp,is_int,8)
        !           798: #define amd64_fstp(inst,index) amd64_fstp_size(inst,index,8)
        !           799: #define amd64_fcompp(inst) amd64_fcompp_size(inst,8)
        !           800: #define amd64_fucompp(inst) amd64_fucompp_size(inst,8)
        !           801: #define amd64_fnstsw(inst) amd64_fnstsw_size(inst,8)
        !           802: #define amd64_fnstcw(inst,mem) amd64_fnstcw_size(inst,mem,8)
        !           803: #define amd64_fnstcw_membase(inst,basereg,disp) amd64_fnstcw_membase_size(inst,basereg,disp,8)
        !           804: #define amd64_fldcw(inst,mem) amd64_fldcw_size(inst,mem,8)
        !           805: #define amd64_fldcw_membase(inst,basereg,disp) amd64_fldcw_membase_size(inst,basereg,disp,8)
        !           806: #define amd64_fchs(inst) amd64_fchs_size(inst,8)
        !           807: #define amd64_frem(inst) amd64_frem_size(inst,8)
        !           808: #define amd64_fxch(inst,index) amd64_fxch_size(inst,index,8)
        !           809: #define amd64_fcomi(inst,index) amd64_fcomi_size(inst,index,8)
        !           810: #define amd64_fcomip(inst,index) amd64_fcomip_size(inst,index,8)
        !           811: #define amd64_fucomi(inst,index) amd64_fucomi_size(inst,index,8)
        !           812: #define amd64_fucomip(inst,index) amd64_fucomip_size(inst,index,8)
        !           813: #define amd64_fld(inst,mem,is_double) amd64_fld_size(inst,mem,is_double,8)
        !           814: #define amd64_fld_membase(inst,basereg,disp,is_double)  amd64_fld_membase_size(inst,basereg,disp,is_double,8) 
        !           815: #define amd64_fld80_mem(inst,mem) amd64_fld80_mem_size(inst,mem,8)
        !           816: #define amd64_fld80_membase(inst,basereg,disp) amd64_fld80_membase_size(inst,basereg,disp,8)
        !           817: #define amd64_fild(inst,mem,is_long) amd64_fild_size(inst,mem,is_long,8)
        !           818: #define amd64_fild_membase(inst,basereg,disp,is_long) amd64_fild_membase_size(inst,basereg,disp,is_long,8)
        !           819: #define amd64_fld_reg(inst,index) amd64_fld_reg_size(inst,index,8)
        !           820: #define amd64_fldz(inst) amd64_fldz_size(inst,8)
        !           821: #define amd64_fld1(inst) amd64_fld1_size(inst,8)
        !           822: #define amd64_fldpi(inst) amd64_fldpi_size(inst,8)
        !           823: #define amd64_fst(inst,mem,is_double,pop_stack) amd64_fst_size(inst,mem,is_double,pop_stack,8)
        !           824: #define amd64_fst_membase(inst,basereg,disp,is_double,pop_stack) amd64_fst_membase_size(inst,basereg,disp,is_double,pop_stack,8)
        !           825: #define amd64_fst80_mem(inst,mem) amd64_fst80_mem_size(inst,mem,8)
        !           826: #define amd64_fst80_membase(inst,basereg,disp) amd64_fst80_membase_size(inst,basereg,disp,8)
        !           827: #define amd64_fist_pop(inst,mem,is_long) amd64_fist_pop_size(inst,mem,is_long,8)
        !           828: #define amd64_fist_pop_membase(inst,basereg,disp,is_long) amd64_fist_pop_membase_size(inst,basereg,disp,is_long,8)
        !           829: #define amd64_fstsw(inst) amd64_fstsw_size(inst,8)
        !           830: #define amd64_fist_membase(inst,basereg,disp,is_int) amd64_fist_membase_size(inst,basereg,disp,is_int,8)
        !           831: //#define amd64_push_reg(inst,reg) amd64_push_reg_size(inst,reg,8)
        !           832: #define amd64_push_regp(inst,reg) amd64_push_regp_size(inst,reg,8)
        !           833: #define amd64_push_mem(inst,mem) amd64_push_mem_size(inst,mem,8)
        !           834: //#define amd64_push_membase(inst,basereg,disp) amd64_push_membase_size(inst,basereg,disp,8)
        !           835: #define amd64_push_memindex(inst,basereg,disp,indexreg,shift) amd64_push_memindex_size(inst,basereg,disp,indexreg,shift,8)
        !           836: #define amd64_push_imm(inst,imm) amd64_push_imm_size(inst,imm,8)
        !           837: //#define amd64_pop_reg(inst,reg) amd64_pop_reg_size(inst,reg,8)
        !           838: #define amd64_pop_mem(inst,mem) amd64_pop_mem_size(inst,mem,8)
        !           839: #define amd64_pop_membase(inst,basereg,disp) amd64_pop_membase_size(inst,basereg,disp,8)
        !           840: #define amd64_pushad(inst) amd64_pushad_size(inst,8)
        !           841: #define amd64_pushfd(inst) amd64_pushfd_size(inst,8)
        !           842: #define amd64_popad(inst) amd64_popad_size(inst,8)
        !           843: #define amd64_popfd(inst) amd64_popfd_size(inst,8)
        !           844: #define amd64_loop(inst,imm) amd64_loop_size(inst,imm,8)
        !           845: #define amd64_loope(inst,imm) amd64_loope_size(inst,imm,8)
        !           846: #define amd64_loopne(inst,imm) amd64_loopne_size(inst,imm,8)
        !           847: #define amd64_jump32(inst,imm) amd64_jump32_size(inst,imm,8)
        !           848: #define amd64_jump8(inst,imm) amd64_jump8_size(inst,imm,8)
        !           849: #define amd64_jump_reg(inst,reg) amd64_jump_reg_size(inst,reg,8)
        !           850: #define amd64_jump_mem(inst,mem) amd64_jump_mem_size(inst,mem,8)
        !           851: #define amd64_jump_membase(inst,basereg,disp) amd64_jump_membase_size(inst,basereg,disp,8)
        !           852: #define amd64_jump_code(inst,target) amd64_jump_code_size(inst,target,8)
        !           853: #define amd64_jump_disp(inst,disp) amd64_jump_disp_size(inst,disp,8)
        !           854: #define amd64_branch8(inst,cond,imm,is_signed) amd64_branch8_size(inst,cond,imm,is_signed,8)
        !           855: #define amd64_branch32(inst,cond,imm,is_signed) amd64_branch32_size(inst,cond,imm,is_signed,8)
        !           856: #define amd64_branch(inst,cond,target,is_signed) amd64_branch_size(inst,cond,target,is_signed,8)
        !           857: #define amd64_branch_disp(inst,cond,disp,is_signed) amd64_branch_disp_size(inst,cond,disp,is_signed,8)
        !           858: #define amd64_set_reg(inst,cond,reg,is_signed) amd64_set_reg_size(inst,cond,reg,is_signed,8)
        !           859: #define amd64_set_mem(inst,cond,mem,is_signed) amd64_set_mem_size(inst,cond,mem,is_signed,8)
        !           860: #define amd64_set_membase(inst,cond,basereg,disp,is_signed) amd64_set_membase_size(inst,cond,basereg,disp,is_signed,8)
        !           861: #define amd64_call_imm(inst,disp) amd64_call_imm_size(inst,disp,8)
        !           862: //#define amd64_call_reg(inst,reg) amd64_call_reg_size(inst,reg,8)
        !           863: #define amd64_call_mem(inst,mem) amd64_call_mem_size(inst,mem,8)
        !           864: #define amd64_call_membase(inst,basereg,disp) amd64_call_membase_size(inst,basereg,disp,8)
        !           865: #define amd64_call_code(inst,target) amd64_call_code_size(inst,target,8)
        !           866: //#define amd64_ret(inst) amd64_ret_size(inst,8)
        !           867: #define amd64_ret_imm(inst,imm) amd64_ret_imm_size(inst,imm,8)
        !           868: #define amd64_cmov_reg(inst,cond,is_signed,dreg,reg) amd64_cmov_reg_size(inst,cond,is_signed,dreg,reg,8)
        !           869: #define amd64_cmov_mem(inst,cond,is_signed,reg,mem) amd64_cmov_mem_size(inst,cond,is_signed,reg,mem,8)
        !           870: #define amd64_cmov_membase(inst,cond,is_signed,reg,basereg,disp) amd64_cmov_membase_size(inst,cond,is_signed,reg,basereg,disp,8)
        !           871: #define amd64_enter(inst,framesize) amd64_enter_size(inst,framesize)
        !           872: //#define amd64_leave(inst) amd64_leave_size(inst,8)
        !           873: #define amd64_sahf(inst) amd64_sahf_size(inst,8)
        !           874: #define amd64_fsin(inst) amd64_fsin_size(inst,8)
        !           875: #define amd64_fcos(inst) amd64_fcos_size(inst,8)
        !           876: #define amd64_fabs(inst) amd64_fabs_size(inst,8)
        !           877: #define amd64_ftst(inst) amd64_ftst_size(inst,8)
        !           878: #define amd64_fxam(inst) amd64_fxam_size(inst,8)
        !           879: #define amd64_fpatan(inst) amd64_fpatan_size(inst,8)
        !           880: #define amd64_fprem(inst) amd64_fprem_size(inst,8)
        !           881: #define amd64_fprem1(inst) amd64_fprem1_size(inst,8)
        !           882: #define amd64_frndint(inst) amd64_frndint_size(inst,8)
        !           883: #define amd64_fsqrt(inst) amd64_fsqrt_size(inst,8)
        !           884: #define amd64_fptan(inst) amd64_fptan_size(inst,8)
        !           885: #define amd64_padding(inst,size) amd64_padding_size(inst,size)
        !           886: #define amd64_prolog(inst,frame,reg_mask) amd64_prolog_size(inst,frame,reg_mask,8)
        !           887: #define amd64_epilog(inst,reg_mask) amd64_epilog_size(inst,reg_mask,8)
        !           888: 
        !           889: #endif // AMD64_H

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.