The x86-dependent (32- and 64-bit) part of the Console Debug Agent of NLKD. Signed-Off-By: Jan Beulich Index: 2.6.14-nlkd/debug/nlkd/cda/x86_1.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ 2.6.14-nlkd/debug/nlkd/cda/x86_1.c 2005-09-01 08:37:23.000000000 +0200 @@ -0,0 +1,535 @@ +/***************************************************************************** + * + * File Name: x86_1.c + * Created by: Jan Beulich + * Date created: 08Mar2001 + * + * %version: 7 % + * %derived_by: jbeulich % + * %date_modified: Thu Sep 01 00:37:12 2005 % + * + *****************************************************************************/ +/***************************************************************************** + * * + * Copyright (c) 2001-2005 Novell, Inc. All Rights Reserved. * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of version 2 of the GNU General Public License * + * as published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, contact Novell, Inc. * + * * + * To contact Novell about this file by physical or electronic mail, * + * you may find current contact information at www.novell.com. * + * * + *****************************************************************************/ +/***************************************************************************** + * + * File Description: + * + *****************************************************************************/ + +NAME_TABLE(80_, "add", "or", "adc", "sbb", "and", "sub", "xor", "cmp"); +#define names_81_ names_80_ +#define names_82_ names_80_ +#define names_83_ names_80_ +NAME_TABLE(8F_, "pop", NULL, NULL, NULL, NULL, NULL, NULL, NULL); +NAME_TABLE(C0_, "rol", "ror", "rcl", "rcr", "shl", "shr", "sal", "sar"); +#define names_C1_ names_C0_ +NAME_TABLE(C6_, "mov", NULL, NULL, NULL, NULL, NULL, NULL, NULL); +#define names_C7_ names_C6_ +#define names_D0_ names_C0_ +#define names_D1_ names_C0_ +#define names_D2_ names_C0_ +#define names_D3_ names_C0_ +NAME_TABLE(D8m, "fadd", "fmul", "fcom", "fcomp", "fsub", "fsubr", "fdiv", "fdivr"); +NAME_TABLE(D9r2, "fnop", NULL, NULL, NULL, NULL, NULL, NULL, NULL); +NAME_TABLE(D9r4, "fchs", "fabs", NULL, NULL, "ftst", "fxam", NULL, NULL); +NAME_TABLE(D9r5, "fld1", "fldl2t", "fldl2e", "fldpi", "fldlg2", "fldln2", "fldz", NULL); +NAME_TABLE(D9r6, "f2xm1", "fyl2x", "fptan", "fpatan", "fxtract", "fprem1", "fdecstp", "fincstp"); +NAME_TABLE(D9r7, "fprem", "fyl2xp1", "fsqrt", "fsincos", "frndint", "fscale", "fsin", "fcos"); +NAME_TABLE(DAm, "fiadd", "fimul", "ficom", "ficomp", "fisub", "fisubr", "fidiv", "fidivr"); +NAME_TABLE(DAr5, NULL, "fucompp", NULL, NULL, NULL, NULL, NULL, NULL); +NAME_TABLE(DBr4, "fneni", "fndisi", "fnclex", "fninit", "fsetpm", "frstpm", NULL, NULL); +#define names_DCm names_D8m +NAME_TABLE(DCr, "fadd", "fmul", NULL, NULL, "fsubr", "fsub", "fdivr", "fdiv"); +NAME_TABLE(DEr3, NULL, "fcompp", NULL, NULL, NULL, NULL, NULL, NULL); +#define names_DEm names_DAm +NAME_TABLE(DFr4, "fnstsw", NULL, NULL, NULL, NULL, NULL, NULL, NULL); +NAME_TABLE(FE_, "inc", "dec", NULL, NULL, NULL, NULL, NULL, NULL); + +static const OpcodeInfo branch_00[8] = { + LEAF_NORMAL(00, "add", rm_r, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(01, "add", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(02, "add", r_rm, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(03, "add", r_rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(04, "add", accum, byte, imm, byte, sflags, none, none, none), + LEAF_NORMAL(05, "add", accum, offset, imm, offset32, sflags, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(06, "push", reg, ptr, none, none, SP, none, none, none), + LEAF_NORMAL(07, "pop", reg, ptr, none, word, tos, none, none, none)}, +#else + LEAF_NORMAL(06, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(07, NULL, none, none, none, none, none, none, none, none)}, +#endif +branch_08[8] = { + LEAF_NORMAL(08, "or", rm_r, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(09, "or", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(0A, "or", r_rm, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(0B, "or", r_rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(0C, "or", accum, byte, imm, byte, sflags, none, none, none), + LEAF_NORMAL(0D, "or", accum, offset, imm, offset32, sflags, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(0E, "push", reg, ptr, none, none, SP, none, none, none), +#else + LEAF_NORMAL(0E, NULL, none, none, none, none, none, none, none, none), +#endif + LEAF_NORMAL(0F, NULL, none, none, none, none, none, none, none, none)}, +branch_10[8] = { + LEAF_NORMAL(10, "adc", rm_r, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(11, "adc", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(12, "adc", r_rm, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(13, "adc", r_rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(14, "adc", accum, byte, imm, byte, sflags, none, none, none), + LEAF_NORMAL(15, "adc", accum, offset, imm, offset32, sflags, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(16, "push", reg, ptr, none, none, SP, none, none, none), + LEAF_NORMAL(17, "pop", reg, ptr, none, word, tos, none, none, none)}, +#else + LEAF_NORMAL(16, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(17, NULL, none, none, none, none, none, none, none, none)}, +#endif +branch_18[8] = { + LEAF_NORMAL(18, "sbb", rm_r, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(19, "sbb", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(1A, "sbb", r_rm, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(1B, "sbb", r_rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(1C, "sbb", accum, byte, imm, byte, sflags, none, none, none), + LEAF_NORMAL(1D, "sbb", accum, offset, imm, offset32, sflags, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(1E, "push", reg, ptr, none, none, SP, none, none, none), + LEAF_NORMAL(1F, "pop", reg, ptr, none, word, tos, none, none, none)}, +#else + LEAF_NORMAL(1E, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(1F, NULL, none, none, none, none, none, none, none, none)}, +#endif +branch_20[8] = { + LEAF_NORMAL(20, "and", rm_r, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(21, "and", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(22, "and", r_rm, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(23, "and", r_rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(24, "and", accum, byte, imm, byte, sflags, none, none, none), + LEAF_NORMAL(25, "and", accum, offset, imm, offset32, sflags, none, none, none), + LEAF_NORMAL(26, NULL, none, none, none, none, none, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(27, "daa", none, none, none, none, AX, sflags, none, none)}, +#else + LEAF_NORMAL(27, NULL, none, none, none, none, none, none, none, none)}, +#endif +branch_28[8] = { + LEAF_NORMAL(28, "sub", rm_r, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(29, "sub", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(2A, "sub", r_rm, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(2B, "sub", r_rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(2C, "sub", accum, byte, imm, byte, sflags, none, none, none), + LEAF_NORMAL(2D, "sub", accum, offset, imm, offset32, sflags, none, none, none), + LEAF_NORMAL(2E, NULL, none, none, none, none, none, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(2F, "das", none, none, none, none, AX, sflags, none, none)}, +#else + LEAF_NORMAL(2F, NULL, none, none, none, none, none, none, none, none)}, +#endif +branch_30[8] = { + LEAF_NORMAL(30, "xor", rm_r, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(31, "xor", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(32, "xor", r_rm, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(33, "xor", r_rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(34, "xor", accum, byte, imm, byte, sflags, none, none, none), + LEAF_NORMAL(35, "xor", accum, offset, imm, offset32, sflags, none, none, none), + LEAF_NORMAL(36, NULL, none, none, none, none, none, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(37, "aaa", none, none, none, none, AX, sflags, none, none)}, +#else + LEAF_NORMAL(37, NULL, none, none, none, none, none, none, none, none)}, +#endif +branch_38[8] = { + LEAF_NORMAL(38, "cmp", rm_r, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(39, "cmp", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(3A, "cmp", r_rm, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(3B, "cmp", r_rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(3C, "cmp", accum, byte, imm, byte, sflags, none, none, none), + LEAF_NORMAL(3D, "cmp", accum, offset, imm, offset32, sflags, none, none, none), + LEAF_NORMAL(3E, NULL, none, none, none, none, none, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(3F, "aas", none, none, none, none, AX, sflags, none, none)}, +#else + LEAF_NORMAL(3F, NULL, none, none, none, none, none, none, none, none)}, +#endif +branch_60[8] = { +#ifndef X86_64 + LEAF_NORMAL(60, "pusha", none, none, none, none, GRs, none, none, opsz), + LEAF_NORMAL(61, "popa", none, none, none, none, GRs, none, none, opsz), + LEAF_NORMAL(62, "bound", r, offset, mm, 2offsets, none, none, none, none), + LEAF_NORMAL(63, "arpl", rm_r, offset, none, none, none, none, none, none), +#else + LEAF_NORMAL(60, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(61, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(62, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(63, "movsx", r, offset, rm, dword, none, none, none, none), +#endif + LEAF_NORMAL(64, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(65, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(66, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(67, NULL, none, none, none, none, none, none, none, none)}, +branch_68[8] = { + LEAF_NORMAL(68, "push", imm, offset64, none, none, SP, none, none, none), + LEAF_NORMAL(69, "imul", r_rm, offset, imm, offset32, sflags, none, none, imul), + LEAF_NORMAL(6A, "push", simm, offset, none, none, SP, none, none, none), + LEAF_NORMAL(6B, "imul", r_rm, offset, simm, offset, sflags, none, none, imul), + LEAF_NORMAL(6C, "ins", str_d, byte, cl_dx, word, none, none, none, string), + LEAF_NORMAL(6D, "ins", str_d, offset32, cl_dx, word, none, none, none, string), + LEAF_NORMAL(6E, "outs", cl_dx, word, str_s, byte, none, none, none, string), + LEAF_NORMAL(6F, "outs", cl_dx, word, str_s, offset32, none, none, none, string)}, +branch_80[8] = { + NAME_NORMAL(80_, rm, byte, imm, byte, sflags, none, none), + NAME_NORMAL(81_, rm, offset, imm, offset32, sflags, none, none), + LEAF_NORMAL(82, NULL, none, none, none, none, none, none, none, none), + NAME_NORMAL(83_, rm, offset, simm, offset, sflags, none, none), + LEAF_NORMAL(84, "test", rm_r, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(85, "test", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(86, "xchg", rm_r, byte, none, none, none, none, none, none), + LEAF_NORMAL(87, "xchg", rm_r, offset, none, none, none, none, none, none)}, +regmem_8C[2] = { + LEAF_NORMAL(8Cm, "mov", mm, word, r, ptr, none, none, nowidth, none), + LEAF_NORMAL(8Cr, "mov", rr, offset, r, ptr, none, none, none, none)}, +regmem_8E[2] = { + LEAF_NORMAL(8Em, "mov", r, ptr, mm, word, none, none, nowidth, none), + LEAF_NORMAL(8Er, "mov", r, ptr, rr, offset, none, none, none, none)}, +branch_88[8] = { + LEAF_NORMAL(88, "mov", rm_r, byte, none, none, none, none, none, none), + LEAF_NORMAL(89, "mov", rm_r, offset, none, none, none, none, none, none), + LEAF_NORMAL(8A, "mov", r_rm, byte, none, none, none, none, none, none), + LEAF_NORMAL(8B, "mov", r_rm, offset, none, none, none, none, none, none), + REGMEM_ENTRY(8C, normal), + LEAF_NORMAL(8D, "lea", r, offset, mm, none, none, none, none, none), + REGMEM_ENTRY(8E, normal), + NAME_NORMAL(8F_, rm, offset64, none, offset64, tos, none, none)}, +branch_90[8] = { + LEAF_NORMAL(90, "nop", none, none, none, none, none, none, none, none), + LEAF_NORMAL(91, "xchg", accum, offset, reg, offset, none, none, none, none), + LEAF_NORMAL(92, "xchg", accum, offset, reg, offset, none, none, none, none), + LEAF_NORMAL(93, "xchg", accum, offset, reg, offset, none, none, none, none), + LEAF_NORMAL(94, "xchg", accum, offset, reg, offset, none, none, none, none), + LEAF_NORMAL(95, "xchg", accum, offset, reg, offset, none, none, none, none), + LEAF_NORMAL(96, "xchg", accum, offset, reg, offset, none, none, none, none), + LEAF_NORMAL(97, "xchg", accum, offset, reg, offset, none, none, none, none)}, +branch_98[8] = { +#ifndef X86_64 + LEAF_NORMAL(98, "cbw", none, none, none, none, AX, none, none, none), + LEAF_NORMAL(99, "cwd", none, none, none, none, DX_AX, none, none, none), + LEAF_NORMAL(9A, "call", imm, ptr, none, none, SP, CS, none, none), +#else + LEAF_NORMAL(98, "cwde", none, none, none, none, AX, none, none, none), + LEAF_NORMAL(99, "cdq", none, none, none, none, DX_AX, none, none, none), + LEAF_NORMAL(9A, NULL, none, none, none, none, none, none, none, none), +#endif + LEAF_NORMAL(9B, "wait", none, none, none, none, none, none, none, none), + LEAF_NORMAL(9C, "pushf", none, none, none, none, SP, flags, none, opsz), + LEAF_NORMAL(9D, "popf", none, none, none, offset64, tos, flags, none, opsz), + LEAF_NORMAL(9E, "sahf", none, none, none, none, AX, sflags, none, none), + LEAF_NORMAL(9F, "lahf", none, none, none, none, sflags, AX, none, none)}, +branch_A0[8] = { + LEAF_NORMAL(A0, "mov", accum, byte, mem, byte, none, none, none, none), + LEAF_NORMAL(A1, "mov", accum, offset, mem, offset, none, none, none, none), + LEAF_NORMAL(A2, "mov", mem, byte, accum, byte, none, none, none, none), + LEAF_NORMAL(A3, "mov", mem, offset, accum, offset, none, none, none, none), + LEAF_NORMAL(A4, "movs", str_d, byte, str_s, byte, none, none, none, string), + LEAF_NORMAL(A5, "movs", str_d, offset, str_s, offset, none, none, none, string), + LEAF_NORMAL(A6, "cmps", str_s, byte, str_d, byte, sflags, none, none, string), + LEAF_NORMAL(A7, "cmps", str_s, offset, str_d, offset, sflags, none, none, string)}, +branch_A8[8] = { + LEAF_NORMAL(A8, "test", accum, byte, imm, byte, sflags, none, none, none), + LEAF_NORMAL(A9, "test", accum, offset, imm, offset32, sflags, none, none, none), + LEAF_NORMAL(AA, "stos", str_d, byte, none, none, none, none, none, string), + LEAF_NORMAL(AB, "stos", str_d, offset, none, none, none, none, none, string), + LEAF_NORMAL(AC, "lods", str_s, byte, none, none, none, none, none, string), + LEAF_NORMAL(AD, "lods", str_s, offset, none, none, none, none, none, string), + LEAF_NORMAL(AE, "scas", str_d, byte, none, none, sflags, none, none, string), + LEAF_NORMAL(AF, "scas", str_d, offset, none, none, sflags, none, none, string)}, +branch_C0[8] = { + NAME_NORMAL(C0_, rm, byte, imm, byte, sflags, none, none), + NAME_NORMAL(C1_, rm, offset, imm, byte, sflags, none, none), + LEAF_NORMAL(C2, "ret", imm, word, none, offset64, tos, none, none, none), + LEAF_NORMAL(C3, "ret", none, none, none, offset64, tos, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(C4, "les", r, offset, mm, ptr, ES, none, nowidth, none), + LEAF_NORMAL(C5, "lds", r, offset, mm, ptr, DS, none, nowidth, none), +#else + LEAF_NORMAL(C4, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(C5, NULL, none, none, none, none, none, none, none, none), +#endif + NAME_NORMAL(C6_, rm, byte, imm, byte, none, none, none), + NAME_NORMAL(C7_, rm, offset, imm, offset32, none, none, none)}, +branch_C8[8] = { + LEAF_NORMAL(C8, "enter", imm, word, imm, byte, BP, SP, none, opsz), + LEAF_NORMAL(C9, "leave", none, none, none, none, SP, BP, none, opsz), + LEAF_NORMAL(CA, "retf", imm, word, none, ptr, tos, CS, none, none), + LEAF_NORMAL(CB, "retf", none, none, none, ptr, tos, CS, none, none), + LEAF_NORMAL(CC, "int3", none, none, none, none, SP, int, none, none), + LEAF_NORMAL(CD, "int", imm, byte, none, none, SP, int, none, none), +#ifndef X86_64 + LEAF_NORMAL(CE, "into", none, none, none, none, SP, int, none, none), +#else + LEAF_NORMAL(CE, NULL, none, none, none, none, none, none, none, none), +#endif + LEAF_NORMAL(CF, "iret", none, none, none, ptr, tos, int, none, opsz)}, +branch_D0[8] = { + NAME_NORMAL(D0_, rm, byte, imm, none, sflags, none, none), + NAME_NORMAL(D1_, rm, offset, imm, none, sflags, none, none), + NAME_NORMAL(D2_, rm, byte, cl_dx, byte, sflags, none, none), + NAME_NORMAL(D3_, rm, offset, cl_dx, byte, sflags, none, none), +#ifndef X86_64 + LEAF_NORMAL(D4, "aam", imm, byte, none, none, AX, sflags, none, none), + LEAF_NORMAL(D5, "aad", imm, byte, none, none, AX, sflags, none, none), + LEAF_NORMAL(D6, "salc", none, none, none, none, AX, sflags, none, none), +#else + LEAF_NORMAL(D4, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(D5, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(D6, NULL, none, none, none, none, none, none, none, none), +#endif + LEAF_NORMAL(D7, "xlat", str_s, byte, none, none, AX, none, none, string)}, +branch_D9m[8] = { + LEAF_NORMAL(D9m0, "fld", mm, real4, none, none, ST0, none, none, none), + LEAF_NORMAL(D9m1, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(D9m2, "fst", mm, real4, none, none, ST0, none, none, none), + LEAF_NORMAL(D9m3, "fstp", mm, real4, none, none, ST0, none, none, none), + LEAF_NORMAL(D9m4, "fldenv", mm, none, none, none, none, none, none, none), + LEAF_NORMAL(D9m5, "fldcw", mm, word, none, none, fcw, none, nowidth, none), + LEAF_NORMAL(D9m6, "fnstenv", mm, none, none, none, none, none, none, wait), + LEAF_NORMAL(D9m7, "fnstcw", mm, word, none, none, fcw, none, nowidth, wait)}, +branch_DBm[8] = { + LEAF_NORMAL(DBm0, "fild", mm, dword, none, none, ST0, none, none, none), + LEAF_NORMAL(DBm1, "fisttp", mm, dword, none, none, ST0, none, none, none), + LEAF_NORMAL(DBm2, "fist", mm, dword, none, none, ST0, none, none, none), + LEAF_NORMAL(DBm3, "fistp", mm, dword, none, none, ST0, none, none, none), + LEAF_NORMAL(DBm4, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(DBm5, "fld", mm, real10, none, none, ST0, none, none, none), + LEAF_NORMAL(DBm6, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(DBm7, "fstp", mm, real10, none, none, ST0, none, none, none)}, +branch_DDm[8] = { + LEAF_NORMAL(DDm0, "fld", mm, real8, none, none, ST0, none, none, none), + LEAF_NORMAL(DDm1, "fisttp", mm, qword, none, none, ST0, none, none, none), + LEAF_NORMAL(DDm2, "fst", mm, real8, none, none, ST0, none, none, none), + LEAF_NORMAL(DDm3, "fstp", mm, real8, none, none, ST0, none, none, none), + LEAF_NORMAL(DDm4, "frstor", mm, none, none, none, none, none, none, none), + LEAF_NORMAL(DDm5, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(DDm6, "fnsave", mm, none, none, none, none, none, none, wait), + LEAF_NORMAL(DDm7, "fnstsw", mm, word, none, none, fsw, none, nowidth, wait)}, +branch_DFm[8] = { + LEAF_NORMAL(DFm0, "fild", mm, word, none, none, ST0, none, none, none), + LEAF_NORMAL(DFm1, "fisttp", mm, word, none, none, ST0, none, none, none), + LEAF_NORMAL(DFm2, "fist", mm, word, none, none, ST0, none, none, none), + LEAF_NORMAL(DFm3, "fistp", mm, word, none, none, ST0, none, none, none), + LEAF_NORMAL(DFm4, "fbld", mm, bcd, none, none, ST0, none, none, none), + LEAF_NORMAL(DFm5, "fild", mm, qword, none, none, ST0, none, none, none), + LEAF_NORMAL(DFm6, "fbstp", mm, bcd, none, none, ST0, none, none, none), + LEAF_NORMAL(DFm7, "fistp", mm, qword, none, none, ST0, none, none, none)}, +branch_D8_m[8] = { + NAME_NORMAL(D8m, mm, real4, none, none, ST0, none, none), + BRANCH_ENTRY(D9m), + NAME_NORMAL(DAm, mm, dword, none, none, ST0, none, none), + BRANCH_ENTRY(DBm), + NAME_NORMAL(DCm, mm, real8, none, none, ST0, none, none), + BRANCH_ENTRY(DDm), + NAME_NORMAL(DEm, mm, word, none, none, ST0, none, none), + BRANCH_ENTRY(DFm)}, +branch_D8r[8] = { + LEAF_NORMAL(D8r0, "fadd", accum, real10, rr, real10, fsw, none, none, none), + LEAF_NORMAL(D8r1, "fmul", accum, real10, rr, real10, fsw, none, none, none), + LEAF_NORMAL(D8r2, "fcom", rr, real10, none, none, ST0, none, none, st1), + LEAF_NORMAL(D8r3, "fcomp", rr, real10, none, none, ST0, none, none, st1), + LEAF_NORMAL(D8r4, "fsub", accum, real10, rr, real10, fsw, none, none, none), + LEAF_NORMAL(D8r5, "fsubr", accum, real10, rr, real10, fsw, none, none, none), + LEAF_NORMAL(D8r6, "fdiv", accum, real10, rr, real10, fsw, none, none, none), + LEAF_NORMAL(D8r7, "fdivr", accum, real10, rr, real10, fsw, none, none, none)}, +branch_D9r[8] = { + LEAF_NORMAL(D9r0, "fld", rr, real10, none, none, ST0, none, none, none), + LEAF_NORMAL(D9r1, "fxch", rr, real10, none, none, ST0, none, none, st1), + NAME_NORMAL(D9r2, none, none, none, none, fsw, none, none), + LEAF_NORMAL(D9r3, NULL, none, none, none, none, none, none, none, none), + NAME_NORMAL(D9r4, none, none, none, none, ST0, none, none), + NAME_NORMAL(D9r5, none, none, none, none, ST0, none, none), + NAME_NORMAL(D9r6, none, none, none, none, ST0, none, none), + NAME_NORMAL(D9r7, none, none, none, none, ST0, none, none)}, +branch_DAr[8] = { + LEAF_COND(DAr0, "fcmov", accum, real10, rr, real10, sflags, ST0, fpu, none), + LEAF_COND(DAr1, "fcmov", accum, real10, rr, real10, sflags, ST0, fpu, none), + LEAF_COND(DAr2, "fcmov", accum, real10, rr, real10, sflags, ST0, fpu, none), + LEAF_COND(DAr3, "fcmov", accum, real10, rr, real10, sflags, ST0, fpu, none), + LEAF_NORMAL(DAr4, NULL, none, none, none, none, none, none, none, none), + NAME_NORMAL(DAr5, none, none, none, none, ST0_ST1, none, none), + LEAF_NORMAL(DAr6, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(DAr7, NULL, none, none, none, none, none, none, none, none)}, +branch_DBr[8] = { + LEAF_COND(DBr0, "fcmov", accum, real10, rr, real10, sflags, ST0, fpu, none), + LEAF_COND(DBr1, "fcmov", accum, real10, rr, real10, sflags, ST0, fpu, none), + LEAF_COND(DBr2, "fcmov", accum, real10, rr, real10, sflags, ST0, fpu, none), + LEAF_COND(DBr3, "fcmov", accum, real10, rr, real10, sflags, ST0, fpu, none), + NAME_NORMAL(DBr4, none, none, none, none, none, none, wait), + LEAF_NORMAL(DBr5, "fucomi", accum, real10, rr, real10, sflags, none, none, none), + LEAF_NORMAL(DBr6, "fcomi", accum, real10, rr, real10, sflags, none, none, none), + LEAF_NORMAL(DBr7, NULL, none, none, none, none, none, none, none, none)}, +branch_DDr[8] = { + LEAF_NORMAL(DDr0, "ffree", rr, real10, none, none, none, none, none, none), + LEAF_NORMAL(DDr1, "fxch4", rr, real10, none, none, ST0, none, none, st1), + LEAF_NORMAL(DDr2, "fst", rr, real10, none, none, ST0, none, none, none), + LEAF_NORMAL(DDr3, "fstp", rr, real10, none, none, ST0, none, none, none), + LEAF_NORMAL(DDr4, "fucom", rr, real10, none, none, ST0, none, none, st1), + LEAF_NORMAL(DDr5, "fucomp", rr, real10, none, none, ST0, none, none, st1), + LEAF_NORMAL(DDr6, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(DDr7, NULL, none, none, none, none, none, none, none, none)}, +branch_DEr[8] = { + LEAF_NORMAL(DEr0, "faddp", rr, real10, none, none, ST0, none, none, st1), + LEAF_NORMAL(DEr1, "fmulp", rr, real10, none, none, ST0, none, none, st1), + LEAF_NORMAL(DEr2, NULL, none, none, none, none, none, none, none, none), + NAME_NORMAL(DEr3, none, none, none, none, ST0_ST1, none, none), + LEAF_NORMAL(DEr4, "fsubrp", rr, real10, none, none, ST0, none, none, st1), + LEAF_NORMAL(DEr5, "fsubp", rr, real10, none, none, ST0, none, none, st1), + LEAF_NORMAL(DEr6, "fdivrp", rr, real10, none, none, ST0, none, none, st1), + LEAF_NORMAL(DEr7, "fdivp", rr, real10, none, none, ST0, none, none, st1)}, +branch_DFr[8] = { + LEAF_NORMAL(DFr0, "ffreep", rr, real10, none, none, ST0, none, none, none), + LEAF_NORMAL(DFr1, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(DFr2, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(DFr3, NULL, none, none, none, none, none, none, none, none), + NAME_NORMAL(DFr4, accum, word, none, none, fsw, none, wait), + LEAF_NORMAL(DFr5, "fucomip", accum, real10, rr, real10, sflags, none, none, none), + LEAF_NORMAL(DFr6, "fcomip", accum, real10, rr, real10, sflags, none, none, none), + LEAF_NORMAL(DFr7, NULL, none, none, none, none, none, none, none, none)}, +branch_D8_r[8] = { + BRANCH_ENTRY(D8r), + BRANCH_ENTRY(D9r), + BRANCH_ENTRY(DAr), + BRANCH_ENTRY(DBr), + NAME_NORMAL(DCr, rr, real10, accum, real10, fsw, none, none), + BRANCH_ENTRY(DDr), + BRANCH_ENTRY(DEr), + BRANCH_ENTRY(DFr)}, +regmem_D8[2] = { + BRANCH_ENTRY(D8_m), + BRANCH_ENTRY(D8_r)}, +branch_E0[8] = { + LEAF_COND(E0, "loop", disp, byte, none, none, CX, sflags, loop, adsz), + LEAF_COND(E1, "loop", disp, byte, none, none, CX, sflags, loop, adsz), + LEAF_COND(E2, "loop", disp, byte, none, none, CX, none, loop, adsz), +#ifndef X86_64 + LEAF_COND(E3, "jcxz", disp, byte, none, none, CX, none, loop, none), +#else + LEAF_COND(E3, "jrcxz", disp, byte, none, none, CX, none, loop, none), +#endif + LEAF_NORMAL(E4, "in", accum, byte, imm, byte, none, none, none, none), + LEAF_NORMAL(E5, "in", accum, offset32, imm, byte, none, none, none, none), + LEAF_NORMAL(E6, "out", imm, byte, accum, byte, none, none, none, none), + LEAF_NORMAL(E7, "out", imm, byte, accum, offset32, none, none, none, none)}, +branch_E8[8] = { + LEAF_NORMAL(E8, "call", disp, offset, none, none, SP, none, none, none), + LEAF_NORMAL(E9, "jmp", disp, offset, none, none, none, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(EA, "jmp", imm, ptr, none, none, CS, none, none, none), +#else + LEAF_NORMAL(9A, NULL, none, none, none, none, none, none, none, none), +#endif + LEAF_NORMAL(EB, "jmp", disp, byte, none, none, none, none, none, none), + LEAF_NORMAL(EC, "in", accum, byte, cl_dx, word, none, none, none, none), + LEAF_NORMAL(ED, "in", accum, offset32, cl_dx, word, none, none, none, none), + LEAF_NORMAL(EE, "out", cl_dx, word, accum, byte, none, none, none, none), + LEAF_NORMAL(EF, "out", cl_dx, word, accum, offset32, none, none, none, none)}, +branch_F6_[8] = { + LEAF_NORMAL(F6_0, "test", rm, byte, imm, byte, sflags, none, none, none), + LEAF_NORMAL(F6_1, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(F6_2, "not", rm, byte, none, none, none, none, none, none), + LEAF_NORMAL(F6_3, "neg", rm, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(F6_4, "mul", rm, byte, none, none, DX_AX, sflags, none, none), + LEAF_NORMAL(F6_5, "imul", rm, byte, none, none, DX_AX, sflags, none, none), + LEAF_NORMAL(F6_6, "div", rm, byte, none, none, DX_AX, sflags, none, none), + LEAF_NORMAL(F6_7, "idiv", rm, byte, none, none, DX_AX, sflags, none, none)}, +branch_F7_[8] = { + LEAF_NORMAL(F7_0, "test", rm, offset, imm, offset32, sflags, none, none, none), + LEAF_NORMAL(F7_1, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(F7_2, "not", rm, offset, none, none, none, none, none, none), + LEAF_NORMAL(F7_3, "neg", rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(F7_4, "mul", rm, offset, none, none, DX_AX, sflags, none, none), + LEAF_NORMAL(F7_5, "imul", rm, offset, none, none, DX_AX, sflags, none, none), + LEAF_NORMAL(F7_6, "div", rm, offset, none, none, DX_AX, sflags, none, none), + LEAF_NORMAL(F7_7, "idiv", rm, offset, none, none, DX_AX, sflags, none, none)}, +branch_F0[8] = { + LEAF_NORMAL(F0, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(F1, "icebp", none, none, none, none, sflags, none, none, none), + LEAF_NORMAL(F2, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(F3, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(F4, "hlt", none, none, none, none, none, none, none, none), + LEAF_NORMAL(F5, "cmc", none, none, none, none, sflags, none, none, none), + BRANCH_ENTRY(F6_), + BRANCH_ENTRY(F7_)}, +branch_FF_[8] = { + LEAF_NORMAL(FF_0, "inc", rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(FF_1, "dec", rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(FF_2, "call", rm, offset64, none, none, SP, none, none, none), + LEAF_NORMAL(FF_3, "call", mm, ptr32, none, none, SP, CS, none, none), + LEAF_NORMAL(FF_4, "jmp", rm, offset64, none, none, none, none, none, none), + LEAF_NORMAL(FF_5, "jmp", mm, ptr32, none, none, CS, none, none, none), + LEAF_NORMAL(FF_6, "push", rm, offset64, none, none, SP, none, none, none), + LEAF_NORMAL(FF_7, NULL, none, none, none, none, none, none, none, none)}, +branch_F8[8] = { + LEAF_NORMAL(F8, "clc", none, none, none, none, sflags, none, none, none), + LEAF_NORMAL(F9, "stc", none, none, none, none, sflags, none, none, none), + LEAF_NORMAL(FA, "cli", none, none, none, none, flags, none, none, none), + LEAF_NORMAL(FB, "sti", none, none, none, none, flags, none, none, none), + LEAF_NORMAL(FC, "cld", none, none, none, none, flags, none, none, none), + LEAF_NORMAL(FD, "std", none, none, none, none, flags, none, none, none), + NAME_NORMAL(FE_, rm, byte, none, none, sflags, none, none), + BRANCH_ENTRY(FF_)}, +oneByteTable[256 >> 3] = { + BRANCH_ENTRY(00), + BRANCH_ENTRY(08), + BRANCH_ENTRY(10), + BRANCH_ENTRY(18), + BRANCH_ENTRY(20), + BRANCH_ENTRY(28), + BRANCH_ENTRY(30), + BRANCH_ENTRY(38), +#ifndef X86_64 + LEAF_NORMAL(40, "inc", reg, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(48, "dec", reg, offset, none, none, sflags, none, none, none), +#else + LEAF_NORMAL(40, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(48, NULL, none, none, none, none, none, none, none, none), +#endif + LEAF_NORMAL(50, "push", reg, offset64, none, none, SP, none, none, none), + LEAF_NORMAL(58, "pop", reg, offset64, none, offset, tos, none, none, none), + BRANCH_ENTRY(60), + BRANCH_ENTRY(68), + LEAF_COND(70, "j", disp, byte, none, none, sflags, none, normal, none), + LEAF_COND(78, "j", disp, byte, none, none, sflags, none, normal, none), + BRANCH_ENTRY(80), + BRANCH_ENTRY(88), + BRANCH_ENTRY(90), + BRANCH_ENTRY(98), + BRANCH_ENTRY(A0), + BRANCH_ENTRY(A8), + LEAF_NORMAL(B0, "mov", reg, byte, imm, byte, none, none, none, none), + LEAF_NORMAL(B8, "mov", reg, offset, imm, offset, none, none, none, none), + BRANCH_ENTRY(C0), + BRANCH_ENTRY(C8), + BRANCH_ENTRY(D0), + REGMEM_ENTRY(D8, normal), + BRANCH_ENTRY(E0), + BRANCH_ENTRY(E8), + BRANCH_ENTRY(F0), + BRANCH_ENTRY(F8)}; Index: 2.6.14-nlkd/debug/nlkd/cda/x86_2.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ 2.6.14-nlkd/debug/nlkd/cda/x86_2.c 2005-09-01 08:37:51.000000000 +0200 @@ -0,0 +1,453 @@ +/***************************************************************************** + * + * File Name: x86_2.c + * Created by: Jan Beulich + * Date created: 08Mar2001 + * + * %version: 8 % + * %derived_by: jbeulich % + * %date_modified: Thu Sep 01 00:37:38 2005 % + * + *****************************************************************************/ +/***************************************************************************** + * * + * Copyright (c) 2001-2005 Novell, Inc. All Rights Reserved. * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of version 2 of the GNU General Public License * + * as published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, contact Novell, Inc. * + * * + * To contact Novell about this file by physical or electronic mail, * + * you may find current contact information at www.novell.com. * + * * + *****************************************************************************/ +/***************************************************************************** + * + * File Description: + * + *****************************************************************************/ + +#ifndef X86_64 +NAME_TABLE(0F00r, "sldt", "str", "lldt", "ltr", "verr", "verw", "jmpe", NULL); +#else +NAME_TABLE(0F00r, "sldt", "str", "lldt", "ltr", "verr", "verw", NULL, NULL); +#endif +NAME_TABLE(0F71_, NULL, NULL, "psrl", NULL, "psra", NULL, "psll", NULL); +#define names_0F72_ names_0F71_ +NAME_TABLE(0F73_, NULL, NULL, "psrl", "psrl", NULL, NULL, "psll", "psll"); +NAME_TABLE(0F90, "set", NULL, NULL, NULL, NULL, NULL, NULL, NULL); +#define names_0F91 names_0F90 +#define names_0F92 names_0F90 +#define names_0F93 names_0F90 +#define names_0F94 names_0F90 +#define names_0F95 names_0F90 +#define names_0F96 names_0F90 +#define names_0F97 names_0F90 +#define names_0F98 names_0F90 +#define names_0F99 names_0F90 +#define names_0F9A names_0F90 +#define names_0F9B names_0F90 +#define names_0F9C names_0F90 +#define names_0F9D names_0F90 +#define names_0F9E names_0F90 +#define names_0F9F names_0F90 +NAME_TABLE(0FBA_, NULL, NULL, NULL, NULL, "bt", "bts", "btr", "btc"); + +static const OpcodeInfo +branch_0F00m[8] = { + LEAF_NORMAL(0F00m0, "sldt", mm, word, none, none, none, none, nowidth, none), + LEAF_NORMAL(0F00m1, "str", mm, word, none, none, none, none, nowidth, none), + LEAF_NORMAL(0F00m2, "lldt", mm, word, none, none, none, none, nowidth, none), + LEAF_NORMAL(0F00m3, "ltr", mm, word, none, none, none, none, nowidth, none), + LEAF_NORMAL(0F00m4, "verr", mm, word, none, none, none, none, nowidth, none), + LEAF_NORMAL(0F00m5, "verw", mm, word, none, none, none, none, nowidth, none), +#ifndef X86_64 + LEAF_NORMAL(0F00m6, "jmpe", mm, offset, none, none, none, none, none, none), +#else + LEAF_NORMAL(0F00m6, NULL, none, none, none, none, none, none, none, none), +#endif + LEAF_NORMAL(0F00m7, NULL, none, none, none, none, none, none, none, none)}, +regmem_0F00[2] = { + BRANCH_ENTRY(0F00m), + NAME_NORMAL(0F00r, rr, offset, none, none, none, none, none)}, +branch_0F01_1r[8] = { + LEAF_NORMAL(0F01_1r0, "monitor", none, none, none, none, DS_AX, DX_CX, none, none), + LEAF_NORMAL(0F01_1r1, "mwait", none, none, none, none, CX, AX, none, none), + LEAF_NORMAL(0F01_1r2, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_1r3, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_1r4, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_1r5, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_1r6, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_1r7, NULL, none, none, none, none, none, none, none, none)}, +regmem_0F01_1[2] = { + LEAF_NORMAL(0F01_1m, "sidt", mm, pword, none, none, none, none, none, opsz), + BRANCH_ENTRY(0F01_1r)}, +branch_0F01_3r[8] = { + LEAF_NORMAL(0F01_3r0, "vmrun", none, none, none, none, AX, none, none, none), + LEAF_NORMAL(0F01_3r1, "vmmcall", none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_3r2, "vmload", none, none, none, none, AX, none, none, none), + LEAF_NORMAL(0F01_3r3, "vmsave", none, none, none, none, AX, none, none, none), + LEAF_NORMAL(0F01_3r4, "stgi", none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_3r5, "clgi", none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_3r6, "skinit", none, none, none, none, AX, none, none, none), + LEAF_NORMAL(0F01_3r7, "invlpga", none, none, none, none, AX, CX, none, none)}, +regmem_0F01_3[2] = { + LEAF_NORMAL(0F01_3m, "lidt", mm, pword, none, none, none, none, none, opsz), + BRANCH_ENTRY(0F01_3r)}, +regmem_0F01_4[2] = { + LEAF_NORMAL(0F01_4m, "smsw", mm, word, none, none, none, none, nowidth, none), + LEAF_NORMAL(0F01_4r, "smsw", rr, offset, none, none, none, none, none, none)}, +branch_0F01_7r[8] = { +#ifndef X86_64 + LEAF_NORMAL(0F01_7r0, NULL, none, none, none, none, none, none, none, none), +#else + LEAF_NORMAL(0F01_7r0, "swapgs", none, none, none, none, GS, none, none, none), +#endif + LEAF_NORMAL(0F01_7r1, "rdtscp", none, none, none, none, DX_AX, CX, none, none), + LEAF_NORMAL(0F01_7r2, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_7r3, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_7r4, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_7r5, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_7r6, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_7r7, NULL, none, none, none, none, none, none, none, none)}, +regmem_0F01_7[2] = { + LEAF_NORMAL(0F01_7m, "invlpg", mm, none, none, none, none, none, none, none), + BRANCH_ENTRY(0F01_7r)}, +branch_0F01_[8] = { + LEAF_NORMAL(0F01_0, "sgdt", mm, pword, none, none, none, none, none, opsz), + REGMEM_ENTRY(0F01_1, normal), + LEAF_NORMAL(0F01_2, "lgdt", mm, pword, none, none, none, none, none, opsz), + REGMEM_ENTRY(0F01_3, normal), + REGMEM_ENTRY(0F01_4, normal), + LEAF_NORMAL(0F01_5, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F01_6, "lmsw", rm, word, none, none, none, none, nowidth, none), + REGMEM_ENTRY(0F01_7, normal)}, +branch_0F00[8] = { + REGMEM_ENTRY(0F00, normal), + BRANCH_ENTRY(0F01_), + LEAF_NORMAL(0F02, "lar", r_rm, offset32, none, none, none, none, none, none), + LEAF_NORMAL(0F03, "lsl", r_rm, offset32, none, none, none, none, none, none), + LEAF_NORMAL(0F04, NULL, none, none, none, none, none, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(0F05, "syscall", none, none, none, none, CX, int, none, none), +#else + LEAF_NORMAL(0F05, "syscall", none, none, none, none, CX_R11, int, none, none), +#endif + LEAF_NORMAL(0F06, "clts", none, none, none, none, none, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(0F07, "sysret", none, none, none, none, CX, int, none, none)}, +#else + LEAF_NORMAL(0F07, "sysret", none, none, none, none, CX_R11, int, none, none)}, +#endif +branch_0F08[8] = { + LEAF_NORMAL(0F08, "invd", none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F09, "wbinvd", none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F0A, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F0B, "ud2", none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F0C, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F0D, "prefetch", mm, none, none, none, none, none, access, none), // 3DNow! + LEAF_MMX(0F0E, "femms", none, none, none, none, none, none, none), // 3DNow! + LEAF_MMX(0F0F, NULL, r_rm, mmx, none, none, none, 3dnow, none)}, // 3DNow! +regmem_0F12[8] = { + LEAF_XMM(0F12mPS, "movl", r, xmm, mm, xmm, none, half, none), + LEAF_XMM(0F12rPS, "movhl", r, xmm, rr, xmm, none, packed, none), + LEAF_XMM(0F12mSS, "movsldup", r, xmm, rm, xmm, none, none, none), + LEAF_XMM(0F12rSS, "movsldup", r, xmm, rm, xmm, none, none, none), + LEAF_XMM(0F12mPD, "movl", r, xmm, mm, xmm, none, half, none), + LEAF_XMM(0F12rPD, NULL, none, none, none, none, none, none, none), + LEAF_XMM(0F12mSD, "movddup", r, xmm, rm, xmm, none, none, none), + LEAF_XMM(0F12rSD, "movddup", r, xmm, rm, xmm, none, none, none)}, +regmem_0F16[8] = { + LEAF_XMM(0F16mPS, "movh", r, xmm, mm, xmm, none, half, none), + LEAF_XMM(0F16rPS, "movlh", r, xmm, rr, xmm, none, packed, none), + LEAF_XMM(0F16mSS, "movshdup", r, xmm, rm, xmm, none, none, none), + LEAF_XMM(0F16rSS, "movshdup", r, xmm, rm, xmm, none, none, none), + LEAF_XMM(0F16mPD, "movh", r, xmm, mm, xmm, none, half, none), + LEAF_XMM(0F16rPD, NULL, none, none, none, none, none, none, none), + LEAF_XMM(0F16mSD, NULL, none, none, none, none, none, none, none), + LEAF_XMM(0F16rSD, NULL, none, none, none, none, none, none, none)}, +branch_0F10[8] = { + LEAF_XMM(0F10, "mov", r_rm, xmm, none, none, none, mode, none), // note: ps form is movups + LEAF_XMM(0F11, "mov", rm_r, xmm, none, none, none, mode, none), // note: ps form is movups + REGMEM_ENTRY(0F12, xmm), + LEAF_XMM(0F13, "movl", mm, xmm, r, xmm, none, half, none), + LEAF_XMM(0F14, "unpckl", r_rm, xmm, none, none, none, packed, none), + LEAF_XMM(0F15, "unpckh", r_rm, xmm, none, none, none, packed, none), + REGMEM_ENTRY(0F16, xmm), + LEAF_XMM(0F17, "movh", mm, xmm, r, xmm, none, half, none)}, +branch_0F18[8] = { + LEAF_NORMAL(0F18, "prefetch", mm, none, none, none, none, none, loc, none), + LEAF_NORMAL(0F19, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F1A, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F1B, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F1C, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F1D, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F1E, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F1F, NULL, none, none, none, none, none, none, none, none)}, +branch_0F20[8] = { + LEAF_NORMAL(0F20, "mov", rr, reg, cdt, reg, none, none, none, none), + LEAF_NORMAL(0F21, "mov", rr, reg, cdt, reg, none, none, none, none), + LEAF_NORMAL(0F22, "mov", cdt, reg, rr, reg, none, none, none, none), + LEAF_NORMAL(0F23, "mov", cdt, reg, rr, reg, none, none, none, none), + LEAF_NORMAL(0F24, "mov", rr, reg, cdt, reg, none, none, none, none), + LEAF_NORMAL(0F25, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F26, "mov", cdt, reg, rr, reg, none, none, none, none), + LEAF_NORMAL(0F27, NULL, none, none, none, none, none, none, none, none)}, +branch_0F28[8] = { + LEAF_XMM(0F28, "mova", r_rm, xmm, none, none, none, packed, none), + LEAF_XMM(0F29, "mova", rm_r, xmm, none, none, none, packed, none), + LEAF_XMM(0F2A, "cvt", r, xmm, rm, mmx, mxcsr, convert, none), + LEAF_XMM(0F2B, "movnt", mm, xmm, r, xmm, none, packed, none), + LEAF_XMM(0F2C, "cvt", r, mmx, rm, xmm, mxcsr, convert, none), + LEAF_XMM(0F2D, "cvt", r, mmx, rm, xmm, mxcsr, convert, none), + LEAF_XMM(0F2E, "ucomi", r_rm, xmm, none, none, sflags, scalar, none), + LEAF_XMM(0F2F, "comi", r_rm, xmm, none, none, sflags, scalar, none)}, +branch_0F30[8] = { + LEAF_NORMAL(0F30, "wrmsr", none, none, none, none, CX, DX_AX, none, none), + LEAF_NORMAL(0F31, "rdtsc", none, none, none, none, DX_AX, none, none, none), + LEAF_NORMAL(0F32, "rdmsr", none, none, none, none, CX, DX_AX, none, none), + LEAF_NORMAL(0F33, "rdpmc", none, none, none, none, DX_AX, none, none, none), +#ifndef X86_64 + LEAF_NORMAL(0F34, "sysenter", none, none, none, none, int, none, none, none), +#else + LEAF_NORMAL(0F34, NULL, none, none, none, none, none, none, none, none), +#endif + LEAF_NORMAL(0F35, "sysexit", none, none, none, none, DX_CX, int, none, none), + LEAF_NORMAL(0F36, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0F37, NULL, none, none, none, none, none, none, none, none)}, +branch_0F50[8] = { + LEAF_XMM(0F50, "movmsk", r, dword, rr, xmm, none, packed, none), + LEAF_XMM(0F51, "sqrt", r_rm, xmm, none, none, mxcsr, mode, none), + LEAF_XMM(0F52, "rsqrt", r_rm, xmm, none, none, mxcsr, single, none), + LEAF_XMM(0F53, "rcp", r_rm, xmm, none, none, mxcsr, single, none), + LEAF_XMM(0F54, "and", r_rm, xmm, none, none, none, packed, none), + LEAF_XMM(0F55, "andn", r_rm, xmm, none, none, none, packed, none), + LEAF_XMM(0F56, "or", r_rm, xmm, none, none, none, packed, none), + LEAF_XMM(0F57, "xor", r_rm, xmm, none, none, none, packed, none)}, +branch_0F58[8] = { + LEAF_XMM(0F58, "add", r_rm, xmm, none, none, mxcsr, mode, none), + LEAF_XMM(0F59, "mul", r_rm, xmm, none, none, mxcsr, mode, none), + LEAF_XMM(0F5A, "cvt", r, xmm, rm, xmm, mxcsr, convert, none), + LEAF_XMM(0F5B, "cvt", r, xmm, rm, xmm, mxcsr, convert, none), + LEAF_XMM(0F5C, "sub", r_rm, xmm, none, none, mxcsr, mode, none), + LEAF_XMM(0F5D, "min", r_rm, xmm, none, none, mxcsr, mode, none), + LEAF_XMM(0F5E, "div", r_rm, xmm, none, none, mxcsr, mode, none), + LEAF_XMM(0F5F, "max", r_rm, xmm, none, none, mxcsr, mode, none)}, +branch_0F60[8] = { + LEAF_MMX(0F60, "punpckl", r_rm, mmx_xmm, none, none, none, expand, none), + LEAF_MMX(0F61, "punpckl", r_rm, mmx_xmm, none, none, none, expand, none), + LEAF_MMX(0F62, "punpckl", r_rm, mmx_xmm, none, none, none, expand, none), + LEAF_MMX(0F63, "pack", r_rm, mmx_xmm, none, none, none, shrink, none), + LEAF_MMX(0F64, "pcmpgt", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0F65, "pcmpgt", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0F66, "pcmpgt", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0F67, "pack", r_rm, mmx_xmm, none, none, none, shrink, none)}, +branch_0F68[8] = { + LEAF_MMX(0F68, "punpckh", r_rm, mmx_xmm, none, none, none, expand, none), + LEAF_MMX(0F69, "punpckh", r_rm, mmx_xmm, none, none, none, expand, none), + LEAF_MMX(0F6A, "punpckh", r_rm, mmx_xmm, none, none, none, expand, none), + LEAF_MMX(0F6B, "pack", r_rm, mmx_xmm, none, none, none, shrink, none), + LEAF_MMX(0F6C, "punpckl", r_rm, mmx_xmm, none, none, none, expand, none), + LEAF_MMX(0F6D, "punpckh", r_rm, mmx_xmm, none, none, none, expand, none), + LEAF_MMX(0F6E, "mov", r, mmx_xmm, rm, dword, none, normal, none), + LEAF_MMX(0F6F, "mov", r_rm, mmx_xmm, none, none, none, normal, none)}, +branch_0F70[8] = { + LEAF_MMX(0F70, "pshuf", r_rm, mmx_xmm, imm, byte, none, word, none), + NAME_MMX(0F71_, rr, mmx_xmm, imm, byte, normal, none), + NAME_MMX(0F72_, rr, mmx_xmm, imm, byte, normal, none), + NAME_MMX(0F73_, rr, mmx_xmm, imm, byte, normal, none), + LEAF_MMX(0F74, "pcmpeq", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0F75, "pcmpeq", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0F76, "pcmpeq", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0F77, "emms", none, none, none, none, none, none, none)}, +branch_0F78[8] = { + LEAF_MMX(0F78, NULL, none, none, none, none, none, none, none), + LEAF_MMX(0F79, NULL, none, none, none, none, none, none, none), + LEAF_MMX(0F7A, NULL, none, none, none, none, none, none, none), + LEAF_MMX(0F7B, NULL, none, none, none, none, none, none, none), + LEAF_XMM(0F7C, "hadd", r_rm, xmm, none, none, mxcsr, sse3, none), + LEAF_XMM(0F7D, "hsub", r_rm, xmm, none, none, mxcsr, sse3, none), + LEAF_MMX(0F7E, "mov", rm, dword, r, mmx_xmm, none, normal, none), + LEAF_MMX(0F7F, "mov", rm_r, mmx_xmm, none, none, none, normal, none)}, +branch_0F90[8] = { + NAME_COND(0F90, rm, byte, none, none, normal, none), + NAME_COND(0F91, rm, byte, none, none, normal, none), + NAME_COND(0F92, rm, byte, none, none, normal, none), + NAME_COND(0F93, rm, byte, none, none, normal, none), + NAME_COND(0F94, rm, byte, none, none, normal, none), + NAME_COND(0F95, rm, byte, none, none, normal, none), + NAME_COND(0F96, rm, byte, none, none, normal, none), + NAME_COND(0F97, rm, byte, none, none, normal, none)}, +#define branch_0F98 branch_0F90 +branch_0FA0[8] = { + LEAF_NORMAL(0FA0, "push", reg, ptr, none, none, SP, none, none, none), + LEAF_NORMAL(0FA1, "pop", reg, ptr, none, word, tos, none, none, none), + LEAF_NORMAL(0FA2, "cpuid", none, none, none, none, DX_AX, CX_BX, none, none), + LEAF_NORMAL(0FA3, "bt", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(0FA4, "shld", rm_r, offset, imm, byte, sflags, none, none, none), + LEAF_NORMAL(0FA5, "shld", rm_r, offset, cl_dx, byte, sflags, none, none, none), + LEAF_NORMAL(0FA6, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0FA7, NULL, none, none, none, none, none, none, none, none)}, +regmem_0FAE_5[2] = { + LEAF_NORMAL(0FAE_5m, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0FAE_5r, "lfence", none, none, none, none, none, none, none, none)}, +regmem_0FAE_6[2] = { + LEAF_NORMAL(0FAE_6m, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0FAE_6r, "mfence", none, none, none, none, none, none, none, none)}, +regmem_0FAE_7[2] = { + LEAF_NORMAL(0FAE_7m, "clflush", mm, none, none, none, none, none, none, none), + LEAF_NORMAL(0FAE_7r, "sfence", none, none, none, none, none, none, none, none)}, +branch_0FAE_[8] = { + LEAF_NORMAL(0FAE_0, "fxsave", mm, none, none, none, none, none, none, none), + LEAF_NORMAL(0FAE_1, "fxrstor", mm, none, none, none, none, none, none, none), + LEAF_NORMAL(0FAE_2, "ldmxcsr", mm, dword, none, none, mxcsr, none, nowidth, none), + LEAF_NORMAL(0FAE_3, "stmxcsr", mm, dword, none, none, mxcsr, none, nowidth, none), + LEAF_NORMAL(0FAE_4, NULL, none, none, none, none, none, none, none, none), + REGMEM_ENTRY(0FAE_5, normal), + REGMEM_ENTRY(0FAE_6, normal), + REGMEM_ENTRY(0FAE_7, normal)}, +branch_0FA8[8] = { + LEAF_NORMAL(0FA8, "push", reg, ptr, none, none, SP, none, none, none), + LEAF_NORMAL(0FA9, "pop", reg, ptr, none, word, tos, none, none, none), + LEAF_NORMAL(0FAA, "rsm", none, none, none, none, none, none, none, none), + LEAF_NORMAL(0FAB, "bts", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(0FAC, "shrd", rm_r, offset, imm, byte, sflags, none, none, none), + LEAF_NORMAL(0FAD, "shrd", rm_r, offset, cl_dx, byte, sflags, none, none, none), + BRANCH_ENTRY(0FAE_), + LEAF_NORMAL(0FAF, "imul", r_rm, offset, none, none, sflags, none, none, none)}, +branch_0FB0[8] = { + LEAF_NORMAL(0FB0, "cmpxchg", mm, byte, r, byte, AX, none, nowidth, none), + LEAF_NORMAL(0FB1, "cmpxchg", mm, offset, r, offset, AX, none, nowidth, none), + LEAF_NORMAL(0FB2, "lss", r, offset, mm, ptr32, SS, none, nowidth, none), + LEAF_NORMAL(0FB3, "btr", rm_r, offset, none, none, none, none, none, none), + LEAF_NORMAL(0FB4, "lfs", r, offset, mm, ptr32, FS, none, nowidth, none), + LEAF_NORMAL(0FB5, "lgs", r, offset, mm, ptr32, GS, none, nowidth, none), + LEAF_NORMAL(0FB6, "movzx", r, offset, rm, byte, none, none, none, none), + LEAF_NORMAL(0FB7, "movzx", r, offset, rm, word, none, none, none, none)}, +branch_0FB8[8] = { +#ifndef X86_64 + LEAF_NORMAL(0FB8, "jmpe", imm, offset, none, none, none, none, none, none), +#else + LEAF_NORMAL(0FB8, NULL, none, none, none, none, none, none, none, none), +#endif + LEAF_NORMAL(0FB9, "ud2", none, none, none, none, none, none, none, none), + NAME_NORMAL(0FBA_, rm, offset, imm, byte, sflags, none, none), + LEAF_NORMAL(0FBB, "btc", rm_r, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(0FBC, "bsf", r_rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(0FBD, "bsr", r_rm, offset, none, none, sflags, none, none, none), + LEAF_NORMAL(0FBE, "movsx", r, offset, rm, byte, none, none, none, none), + LEAF_NORMAL(0FBF, "movsx", r, offset, rm, word, none, none, none, none)}, +branch_0FC7_[8] = { + LEAF_NORMAL(0FC7_0, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0FC7_1, "cmpxchg", mm, qword, none, none, DX_AX, CX_BX, nowidth, none), + LEAF_NORMAL(0FC7_2, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0FC7_3, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0FC7_4, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0FC7_5, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0FC7_6, NULL, none, none, none, none, none, none, none, none), + LEAF_NORMAL(0FC7_7, NULL, none, none, none, none, none, none, none, none)}, +branch_0FC0[8] = { + LEAF_NORMAL(0FC0, "xadd", rm_r, byte, none, none, sflags, none, none, none), + LEAF_NORMAL(0FC1, "xadd", rm_r, offset, none, none, sflags, none, none, none), + LEAF_XMM(0FC2, "cmp", r_rm, xmm, imm, byte, mxcsr, mode, none), + LEAF_NORMAL(0FC3, "movnti", mm, dword, r, dword, none, none, nowidth, none), + LEAF_MMX(0FC4, "pinsr", mmxie, word, imm, byte, none, word, none), + LEAF_MMX(0FC5, "pextr", mmxie, mmx_xmm, imm, byte, none, word, none), + LEAF_XMM(0FC6, "shuf", r_rm, xmm, imm, byte, mxcsr, packed, none), + BRANCH_ENTRY(0FC7_)}, +branch_0FD0[8] = { + LEAF_XMM(0FD0, "addsub", r_rm, xmm, none, none, mxcsr, sse3, none), + LEAF_MMX(0FD1, "psrl", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FD2, "psrl", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FD3, "psrl", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FD4, "padd", r_rm, mmx_xmm, none, none, none, quad, none), + LEAF_MMX(0FD5, "pmull", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_XMM(0FD6, "mov", r, xmm, rm, xmm, none, convert, none), + LEAF_MMX(0FD7, "pmovmsk", r, dword, rr, mmx_xmm, none, byte, none)}, +branch_0FD8[8] = { + LEAF_MMX(0FD8, "psub", r_rm, mmx_xmm, none, none, none, saturate, none), + LEAF_MMX(0FD9, "psub", r_rm, mmx_xmm, none, none, none, saturate, none), + LEAF_MMX(0FDA, "pmin", r_rm, mmx_xmm, none, none, none, us_bw, none), + LEAF_MMX(0FDB, "pand", r_rm, mmx_xmm, none, none, none, none, none), + LEAF_MMX(0FDC, "padd", r_rm, mmx_xmm, none, none, none, saturate, none), + LEAF_MMX(0FDD, "padd", r_rm, mmx_xmm, none, none, none, saturate, none), + LEAF_MMX(0FDE, "pmax", r_rm, mmx_xmm, none, none, none, us_bw, none), + LEAF_MMX(0FDF, "pandn", r_rm, mmx_xmm, none, none, none, none, none)}, +branch_0FE0[8] = { + LEAF_MMX(0FE0, "pavg", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FE1, "psra", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FE2, "psra", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FE3, "pavg", r_rm, mmx_xmm, none, none, none, word, none), + LEAF_MMX(0FE4, "pmulhu", r_rm, mmx_xmm, none, none, none, word, none), + LEAF_MMX(0FE5, "pmulh", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_XMM(0FE6, "cvt", r, xmm, rm, xmm, mxcsr, convert, none), + LEAF_MMX(0FE7, "movnt", mm, mmx_xmm, r, mmx_xmm, none, normal, none)}, +branch_0FE8[8] = { + LEAF_MMX(0FE8, "psub", r_rm, mmx_xmm, none, none, none, saturate, none), + LEAF_MMX(0FE9, "psub", r_rm, mmx_xmm, none, none, none, saturate, none), + LEAF_MMX(0FEA, "pmin", r_rm, mmx_xmm, none, none, none, us_bw, none), + LEAF_MMX(0FEB, "por", r_rm, mmx_xmm, none, none, none, none, none), + LEAF_MMX(0FEC, "padd", r_rm, mmx_xmm, none, none, none, saturate, none), + LEAF_MMX(0FED, "padd", r_rm, mmx_xmm, none, none, none, saturate, none), + LEAF_MMX(0FEE, "pmax", r_rm, mmx_xmm, none, none, none, us_bw, none), + LEAF_MMX(0FEF, "pxor", r_rm, mmx_xmm, none, none, none, none, none)}, +branch_0FF0[8] = { + LEAF_XMM(0FF0, "lddqu", r, xmm, mm, xmm, none, none, none), + LEAF_MMX(0FF1, "psll", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FF2, "psll", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FF3, "psll", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FF4, "pmuludq", r_rm, mmx_xmm, none, none, none, none, none), + LEAF_MMX(0FF5, "pmadd", r_rm, mmx_xmm, none, none, none, expand, none), + LEAF_MMX(0FF6, "psad", r_rm, mmx_xmm, none, none, none, bw, none), + LEAF_MMX(0FF7, "maskmov", r, mmx_xmm, rr, mmx_xmm, DS_DI, normal, none)}, +branch_0FF8[8] = { + LEAF_MMX(0FF8, "psub", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FF9, "psub", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FFA, "psub", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FFB, "psub", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FFC, "padd", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FFD, "padd", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FFE, "padd", r_rm, mmx_xmm, none, none, none, normal, none), + LEAF_MMX(0FFF, NULL, none, none, none, none, none, none, none)}, +twoByteTable[256 >> 3] = { + BRANCH_ENTRY(0F00), + BRANCH_ENTRY(0F08), + BRANCH_ENTRY(0F10), + BRANCH_ENTRY(0F18), + BRANCH_ENTRY(0F20), + BRANCH_ENTRY(0F28), + BRANCH_ENTRY(0F30), + LEAF_NORMAL(0F38, NULL, none, none, none, none, none, none, none, none), + LEAF_COND(0F40, "cmov", r_rm, offset, none, none, sflags, none, normal, none), + LEAF_COND(0F48, "cmov", r_rm, offset, none, none, sflags, none, normal, none), + BRANCH_ENTRY(0F50), + BRANCH_ENTRY(0F58), + BRANCH_ENTRY(0F60), + BRANCH_ENTRY(0F68), + BRANCH_ENTRY(0F70), + BRANCH_ENTRY(0F78), + LEAF_COND(0F80, "j", disp, offset, none, none, sflags, none, normal, none), + LEAF_COND(0F88, "j", disp, offset, none, none, sflags, none, normal, none), + BRANCH_ENTRY(0F90), + BRANCH_ENTRY(0F98), + BRANCH_ENTRY(0FA0), + BRANCH_ENTRY(0FA8), + BRANCH_ENTRY(0FB0), + BRANCH_ENTRY(0FB8), + BRANCH_ENTRY(0FC0), + LEAF_NORMAL(0FC8, "bswap", reg, offset, none, none, none, none, none, none), + BRANCH_ENTRY(0FD0), + BRANCH_ENTRY(0FD8), + BRANCH_ENTRY(0FE0), + BRANCH_ENTRY(0FE8), + BRANCH_ENTRY(0FF0), + BRANCH_ENTRY(0FF8) +}; Index: 2.6.14-nlkd/debug/nlkd/cda/x86_3.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ 2.6.14-nlkd/debug/nlkd/cda/x86_3.c 2005-06-27 11:40:57.000000000 +0200 @@ -0,0 +1,159 @@ +/***************************************************************************** + * + * File Name: x86_3.c + * Created by: Jan Beulich + * Date created: 08Mar2001 + * + * %version: 3 % + * %derived_by: jbeulich % + * %date_modified: Mon Jun 27 03:40:43 2005 % + * + *****************************************************************************/ +/***************************************************************************** + * * + * Copyright (c) 2001-2005 Novell, Inc. All Rights Reserved. * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of version 2 of the GNU General Public License * + * as published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, contact Novell, Inc. * + * * + * To contact Novell about this file by physical or electronic mail, * + * you may find current contact information at www.novell.com. * + * * + *****************************************************************************/ +/***************************************************************************** + * + * File Description: + * + *****************************************************************************/ + +#define LEAF_3DNOW(oc, m) LEAF_MMX(oc, m, r_rm, mmx, none, none, none, 3dnow, none) +static const OpcodeInfo k3d0x[16] = { + LEAF_3DNOW(k3d00, NULL), + LEAF_3DNOW(k3d01, NULL), + LEAF_3DNOW(k3d02, NULL), + LEAF_3DNOW(k3d03, NULL), + LEAF_3DNOW(k3d04, NULL), + LEAF_3DNOW(k3d05, NULL), + LEAF_3DNOW(k3d06, NULL), + LEAF_3DNOW(k3d07, NULL), + LEAF_3DNOW(k3d08, NULL), + LEAF_3DNOW(k3d09, NULL), + LEAF_3DNOW(k3d0A, NULL), + LEAF_3DNOW(k3d0B, NULL), + LEAF_3DNOW(k3d0C, "pi2fw"), + LEAF_3DNOW(k3d0D, "pi2fd"), + LEAF_3DNOW(k3d0E, NULL), + LEAF_3DNOW(k3d0F, NULL)}, +k3d1x[16] = { + LEAF_3DNOW(k3d10, NULL), + LEAF_3DNOW(k3d11, NULL), + LEAF_3DNOW(k3d12, NULL), + LEAF_3DNOW(k3d13, NULL), + LEAF_3DNOW(k3d14, NULL), + LEAF_3DNOW(k3d15, NULL), + LEAF_3DNOW(k3d16, NULL), + LEAF_3DNOW(k3d17, NULL), + LEAF_3DNOW(k3d18, NULL), + LEAF_3DNOW(k3d19, NULL), + LEAF_3DNOW(k3d1A, NULL), + LEAF_3DNOW(k3d1B, NULL), + LEAF_3DNOW(k3d1C, "pf2iw"), + LEAF_3DNOW(k3d1D, "pf2id"), + LEAF_3DNOW(k3d1E, NULL), + LEAF_3DNOW(k3d1F, NULL)}, +k3d8x[16] = { + LEAF_3DNOW(k3d80, NULL), + LEAF_3DNOW(k3d81, NULL), + LEAF_3DNOW(k3d82, NULL), + LEAF_3DNOW(k3d83, NULL), + LEAF_3DNOW(k3d84, NULL), + LEAF_3DNOW(k3d85, NULL), + LEAF_3DNOW(k3d86, NULL), + LEAF_3DNOW(k3d87, NULL), + LEAF_3DNOW(k3d88, NULL), + LEAF_3DNOW(k3d89, NULL), + LEAF_3DNOW(k3d8A, "pfnacc"), + LEAF_3DNOW(k3d8B, NULL), + LEAF_3DNOW(k3d8C, NULL), + LEAF_3DNOW(k3d8D, NULL), + LEAF_3DNOW(k3d8E, "pfpnacc"), + LEAF_3DNOW(k3d8F, NULL)}, +k3d9x[16] = { + LEAF_3DNOW(k3d90, "pfcmpge"), + LEAF_3DNOW(k3d91, NULL), + LEAF_3DNOW(k3d92, NULL), + LEAF_3DNOW(k3d93, NULL), + LEAF_3DNOW(k3d94, "pfmin"), + LEAF_3DNOW(k3d95, NULL), + LEAF_3DNOW(k3d96, "pfrcp"), + LEAF_3DNOW(k3d97, "pfrsqrt"), + LEAF_3DNOW(k3d98, NULL), + LEAF_3DNOW(k3d99, NULL), + LEAF_3DNOW(k3d9A, "pfsub"), + LEAF_3DNOW(k3d9B, NULL), + LEAF_3DNOW(k3d9C, NULL), + LEAF_3DNOW(k3d9D, NULL), + LEAF_3DNOW(k3d9E, "pfadd"), + LEAF_3DNOW(k3d9F, NULL)}, +k3dAx[16] = { + LEAF_3DNOW(k3dA0, "pfcmpgt"), + LEAF_3DNOW(k3dA1, NULL), + LEAF_3DNOW(k3dA2, NULL), + LEAF_3DNOW(k3dA3, NULL), + LEAF_3DNOW(k3dA4, "pfmax"), + LEAF_3DNOW(k3dA5, NULL), + LEAF_3DNOW(k3dA6, "pfrcpit1"), + LEAF_3DNOW(k3dA7, "pfrsqit1"), + LEAF_3DNOW(k3dA8, NULL), + LEAF_3DNOW(k3dA9, NULL), + LEAF_3DNOW(k3dAA, "pfsubr"), + LEAF_3DNOW(k3dAB, NULL), + LEAF_3DNOW(k3dAC, NULL), + LEAF_3DNOW(k3dAD, NULL), + LEAF_3DNOW(k3dAE, "pfacc"), + LEAF_3DNOW(k3dAF, NULL)}, +k3dBx[16] = { + LEAF_3DNOW(k3dB0, "pfcmpeq"), + LEAF_3DNOW(k3dB1, NULL), + LEAF_3DNOW(k3dB2, NULL), + LEAF_3DNOW(k3dB3, NULL), + LEAF_3DNOW(k3dB4, "pfmul"), + LEAF_3DNOW(k3dB5, NULL), + LEAF_3DNOW(k3dB6, "pfrcpit2"), + LEAF_MMX(k3dB7, "pmulhr", r_rm, mmx, none, none, none, word, none), + LEAF_3DNOW(k3dB8, NULL), + LEAF_3DNOW(k3dB9, NULL), + LEAF_3DNOW(k3dBA, NULL), + LEAF_3DNOW(k3dBB, "pswapd"), + LEAF_3DNOW(k3dBC, NULL), + LEAF_3DNOW(k3dBD, NULL), + LEAF_3DNOW(k3dBE, NULL), + LEAF_MMX(k3dBF, "pavgus", r_rm, mmx, none, none, none, byte, none)}, +#undef LEAF_3DNOW +*const k3dTable[16] = { + k3d0x, + k3d1x, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + k3d8x, + k3d9x, + k3dAx, + k3dBx, + NULL, + NULL, + NULL, + NULL +}; Index: 2.6.14-nlkd/debug/nlkd/cda/x86_op.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ 2.6.14-nlkd/debug/nlkd/cda/x86_op.c 2005-06-27 11:41:25.000000000 +0200 @@ -0,0 +1,136 @@ +/***************************************************************************** + * + * File Name: x86_op.c + * Created by: Jan Beulich + * Date created: 08Mar2001 + * + * %version: 5 % + * %derived_by: jbeulich % + * %date_modified: Mon Jun 27 03:41:13 2005 % + * + *****************************************************************************/ +/***************************************************************************** + * * + * Copyright (c) 2001-2005 Novell, Inc. All Rights Reserved * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of version 2 of the GNU General Public License * + * as published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, contact Novell, Inc. * + * * + * To contact Novell about this file by physical or electronic mail, * + * you may find current contact information at www.novell.com. * + * * + *****************************************************************************/ +/***************************************************************************** + * + * File Description: + * + *****************************************************************************/ + +#if defined(OPERAND) + +OPERAND_NEW(_, imm), +OPERAND(simm), +OPERAND(accum), +OPERAND(cl_dx), +OPERAND(mem), +OPERAND(reg), +OPERAND(str_s), +OPERAND(str_d), +OPERAND(r), +OPERAND(rm), +OPERAND(rr), +OPERAND(mm), +OPERAND(cdt), +OPERAND_END(_) +// below those that can only occur in position 1 +OPERAND_NEW(1_, disp), +OPERAND(r_rm), +OPERAND(rm_r), +OPERAND(mmxie), +OPERAND_END(1_) + +#elif defined(HIDDEN_OPERAND) + +# ifndef X86_64 +HIDDEN_OPERAND(tos, general, reg_esp, none), +HIDDEN_OPERAND(AX, general, reg_eax, none), +HIDDEN_OPERAND(CX, general, reg_ecx, none), +HIDDEN_OPERAND(SP, general, reg_esp, none), +HIDDEN_OPERAND(BP, general, reg_ebp, none), +HIDDEN_OPERAND(DX_AX, general, reg_eax, DX), +HIDDEN_OPERAND(DX_CX, general, reg_ecx, DX), +HIDDEN_OPERAND(CX_BX, general, reg_ebx, CX), +HIDDEN_OPERAND(GRs, general, reg_esp, GRs1), +# undef CS /* colliding with include/asm/ptrace.h */ +HIDDEN_OPERAND(CS, selector, sreg_cs, none), +# undef DS +HIDDEN_OPERAND(DS, selector, sreg_ds, none), +# undef ES +HIDDEN_OPERAND(ES, selector, sreg_es, none), +# undef FS +HIDDEN_OPERAND(FS, selector, sreg_fs, none), +# undef GS +HIDDEN_OPERAND(GS, selector, sreg_gs, none), +# undef SS +HIDDEN_OPERAND(SS, selector, sreg_ss, none), +HIDDEN_OPERAND(flags, eflags, 0, none), +HIDDEN_OPERAND(sflags, flags, 0, none), +HIDDEN_OPERAND(ST0, floating, st0, none), +HIDDEN_OPERAND(ST0_ST1, floating, st1, ST0), +HIDDEN_OPERAND(fsw, fsw, 0, none), +HIDDEN_OPERAND(fcw, fcw, 0, none), +HIDDEN_OPERAND(mxcsr, mxcsr, 0, none), +HIDDEN_OPERAND(DS_AX, general, reg_eax, DS), +HIDDEN_OPERAND(DS_DI, general, reg_edi, DS), +HIDDEN_OPERAND(int, selector, sreg_cs, flags), +HIDDEN_EXTRA(CNT, none, 0, none), +// below those that can only be referenced from above, but not from x86_?.c +HIDDEN_EXTRA(DX, general, reg_edx, none), +HIDDEN_EXTRA(GRs1, general, reg_eax, GRs2), +HIDDEN_EXTRA(GRs2, general, reg_ecx, GRs3), +HIDDEN_EXTRA(GRs3, general, reg_edx, GRs4), +HIDDEN_EXTRA(GRs4, general, reg_ebx, GRs5), +HIDDEN_EXTRA(GRs5, general, reg_ebp, GRs6), +HIDDEN_EXTRA(GRs6, general, reg_esi, GRs7), +HIDDEN_EXTRA(GRs7, general, reg_edi, none) +# else +HIDDEN_OPERAND(tos, general, reg_rsp, none), +HIDDEN_OPERAND(AX, general, reg_rax, none), +HIDDEN_OPERAND(CX, general, reg_rcx, none), +HIDDEN_OPERAND(SP, general, reg_rsp, none), +HIDDEN_OPERAND(BP, general, reg_rbp, none), +HIDDEN_OPERAND(DI, general, reg_rdi, none), +HIDDEN_OPERAND(DX_AX, general, reg_rax, DX), +HIDDEN_OPERAND(DX_CX, general, reg_rcx, DX), +HIDDEN_OPERAND(CX_BX, general, reg_rbx, CX), +HIDDEN_OPERAND(CX_R11, general, reg_rcx, R11), +HIDDEN_OPERAND(CS, selector, sreg_cs, none), +HIDDEN_OPERAND(FS, selector, sreg_fs, none), +HIDDEN_OPERAND(GS, selector, sreg_gs, none), +HIDDEN_OPERAND(SS, selector, sreg_ss, none), +HIDDEN_OPERAND(flags, rflags, 0, none), +HIDDEN_OPERAND(sflags, flags, 0, none), +HIDDEN_OPERAND(ST0, floating, st0, none), +HIDDEN_OPERAND(ST0_ST1, floating, st1, ST0), +HIDDEN_OPERAND(fsw, fsw, 0, none), +HIDDEN_OPERAND(fcw, fcw, 0, none), +HIDDEN_OPERAND(mxcsr, mxcsr, 0, none), +# define hidop_DS_AX hidop_AX +# define hidop_DS_DI hidop_DI +HIDDEN_OPERAND(int, selector, sreg_cs, flags), +HIDDEN_EXTRA(CNT, none, 0, none), +// below those that can only be referenced from above, but not from x86_?.c +HIDDEN_EXTRA(DX, general, reg_rdx, none), +HIDDEN_EXTRA(R11, general, reg_r11, none) +# endif + +#endif