Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
7c9cd449
Commit
7c9cd449
authored
Feb 03, 2010
by
Eric Pouech
Committed by
Alexandre Julliard
Feb 04, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winedbg: Added some more instructions disassembly.
parent
4b8b0783
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
80 additions
and
3 deletions
+80
-3
db_disasm64.c
programs/winedbg/db_disasm64.c
+80
-3
No files found.
programs/winedbg/db_disasm64.c
View file @
7c9cd449
...
...
@@ -155,6 +155,11 @@ static void db_printsym(db_addr_t addr, unsigned unused)
#define Ril 36
/* long register in instruction */
#define Iba 37
/* byte immediate, don't print if 0xa */
#define EL 38
/* address, explicitly long size */
/* Wine extensions */
#define MX 39
/* special register (MMX reg %mm0-7) */
#define EMX 40
/* special register (MMX reg %mm0-7) */
#define XMM 41
/* special register (floating point reg %xmm0-7) */
#define EXMM 42
/* special register (floating point reg %xmm0-7) */
struct
inst
{
const
char
*
i_name
;
/* name */
...
...
@@ -322,6 +327,66 @@ static const struct inst db_inst_0f4x[] = {
/*4f*/
{
"cmovnle"
,
TRUE
,
NONE
,
op2
(
E
,
R
),
0
},
};
static
const
struct
inst
db_inst_0f5x
[]
=
{
/*50*/
{
"movmskps"
,
TRUE
,
NONE
,
op2
(
E
,
XMM
),
0
},
/*51*/
{
"sqrtps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*52*/
{
"rsqrtps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*53*/
{
"rcpps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*54*/
{
"andps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*55*/
{
"andnps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*56*/
{
"orps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*57*/
{
"xorps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*58*/
{
"addps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*59*/
{
"mulps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*5a*/
{
"(bad)"
,
FALSE
,
NONE
,
0
,
0
},
/*5b*/
{
"(bad)"
,
FALSE
,
NONE
,
0
,
0
},
/*5c*/
{
"subps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*5d*/
{
"minps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*5e*/
{
"divps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
/*5f*/
{
"maxps"
,
TRUE
,
NONE
,
op2
(
XMM
,
EXMM
),
0
},
};
static
const
struct
inst
db_inst_0f6x
[]
=
{
/*60*/
{
"punpcklbw"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*61*/
{
"punpcklwd"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*62*/
{
"punpckldq"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*63*/
{
"packsswb"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*64*/
{
"pcmpgtb"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*65*/
{
"pcmpgtw"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*66*/
{
"pcmpgtd"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*67*/
{
"packuswb"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*68*/
{
"punpckhbw"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*69*/
{
"punpckhwd"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*6a*/
{
"punpckhdq"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*6b*/
{
"packssdw"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*6c*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/*6d*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/*6e*/
{
"movd"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*6f*/
{
"movq"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
};
static
const
struct
inst
db_inst_0f7x
[]
=
{
/*70*/
{
"pshufw"
,
TRUE
,
NONE
,
op2
(
MX
,
EMX
),
0
},
/*71*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/* FIXME: grp 12 */
/*72*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/* FIXME: grp 13 */
/*73*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/* FIXME: grp 14 */
/*74*/
{
"pcmpeqb"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*75*/
{
"pcmpeqw"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*76*/
{
"pcmpeqd"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*77*/
{
"emms"
,
FALSE
,
NONE
,
0
,
0
},
/*78*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/*79*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/*7a*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/*7b*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/*7c*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/*7d*/
{
"(bad)"
,
TRUE
,
NONE
,
0
,
0
},
/*7e*/
{
"movd"
,
TRUE
,
NONE
,
op2
(
E
,
MX
),
0
},
/*7f*/
{
"movq"
,
TRUE
,
NONE
,
op2
(
EMX
,
MX
),
0
},
};
static
const
struct
inst
db_inst_0f8x
[]
=
{
/*80*/
{
"jo"
,
FALSE
,
NONE
,
op1
(
Dl
),
0
},
/*81*/
{
"jno"
,
FALSE
,
NONE
,
op1
(
Dl
),
0
},
...
...
@@ -427,9 +492,9 @@ static const struct inst * const db_inst_0f[] = {
db_inst_0f2x
,
db_inst_0f3x
,
db_inst_0f4x
,
0
,
0
,
0
,
db_inst_0f5x
,
db_inst_0f6x
,
db_inst_0f7x
,
db_inst_0f8x
,
db_inst_0f9x
,
db_inst_0fax
,
...
...
@@ -1558,6 +1623,18 @@ db_disasm(db_addr_t loc, boolean_t altfmt)
get_value_inc
(
imm2
,
loc
,
2
,
FALSE
);
/* segment */
db_printf
(
"$%#x,%#x"
,
imm2
,
imm
);
break
;
case
MX
:
db_printf
(
"%%mm%d"
,
f_reg
(
rex
,
regmodrm
));
break
;
case
EMX
:
db_printf
(
"%%mm%d"
,
f_rm
(
rex
,
regmodrm
));
break
;
case
XMM
:
db_printf
(
"%%xmm%d"
,
f_reg
(
rex
,
regmodrm
));
break
;
case
EXMM
:
db_printf
(
"%%xmm%d"
,
f_rm
(
rex
,
regmodrm
));
break
;
}
}
return
(
loc
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment