Skip to content

Commit be9a4d2

Browse files
authored
Update read/written registers for x87 comparison instructions (#2784)
* Update read/written registers for x87 comparison instructions This should have been part of #2680 * Fix stack segment register usage * Add missing tests There is now one test case for each operand input for each opcode (e.g., DE/2 and DE/3). * Add fxam * Remove unneeded addr_size checks
1 parent c66f877 commit be9a4d2

File tree

3 files changed

+639
-106
lines changed

3 files changed

+639
-106
lines changed

arch/X86/X86MappingInsn.inc

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4038,14 +4038,14 @@
40384038
{
40394039
X86_COM_FIPr, X86_INS_FCOMPI, 0,
40404040
#ifndef CAPSTONE_DIET
4041-
{ X86_REG_ST0, 0 }, { X86_REG_EFLAGS, 0 }, { X86_GRP_FPU, 0 }, 0, 0
4041+
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, X86_REG_EFLAGS, 0 }, { X86_GRP_FPU, 0 }, 0, 0
40424042
#endif
40434043
},
40444044

40454045
{
40464046
X86_COM_FIr, X86_INS_FCOMI, 0,
40474047
#ifndef CAPSTONE_DIET
4048-
{ X86_REG_ST0, 0 }, { X86_REG_EFLAGS, 0 }, { X86_GRP_FPU, 0 }, 0, 0
4048+
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, X86_REG_EFLAGS, 0 }, { X86_GRP_FPU, 0 }, 0, 0
40494049
#endif
40504050
},
40514051

@@ -5326,28 +5326,28 @@
53265326
{
53275327
X86_FCOM32m, X86_INS_FCOM, 0,
53285328
#ifndef CAPSTONE_DIET
5329-
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
5329+
{ X86_REG_ST0, X86_REG_SS, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
53305330
#endif
53315331
},
53325332

53335333
{
53345334
X86_FCOM64m, X86_INS_FCOM, 1,
53355335
#ifndef CAPSTONE_DIET
5336-
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
5336+
{ X86_REG_ST0, X86_REG_SS, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
53375337
#endif
53385338
},
53395339

53405340
{
53415341
X86_FCOMP32m, X86_INS_FCOMP, 0,
53425342
#ifndef CAPSTONE_DIET
5343-
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
5343+
{ X86_REG_ST0, X86_REG_SS, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
53445344
#endif
53455345
},
53465346

53475347
{
53485348
X86_FCOMP64m, X86_INS_FCOMP, 1,
53495349
#ifndef CAPSTONE_DIET
5350-
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
5350+
{ X86_REG_ST0, X86_REG_SS, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
53515351
#endif
53525352
},
53535353

@@ -5403,28 +5403,28 @@
54035403
{
54045404
X86_FICOM16m, X86_INS_FICOM, 0,
54055405
#ifndef CAPSTONE_DIET
5406-
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
5406+
{ X86_REG_ST0, X86_REG_DS, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
54075407
#endif
54085408
},
54095409

54105410
{
54115411
X86_FICOM32m, X86_INS_FICOM, 0,
54125412
#ifndef CAPSTONE_DIET
5413-
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
5413+
{ X86_REG_ST0, X86_REG_DS, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
54145414
#endif
54155415
},
54165416

54175417
{
54185418
X86_FICOMP16m, X86_INS_FICOMP, 0,
54195419
#ifndef CAPSTONE_DIET
5420-
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
5420+
{ X86_REG_ST0, X86_REG_DS, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
54215421
#endif
54225422
},
54235423

54245424
{
54255425
X86_FICOMP32m, X86_INS_FICOMP, 0,
54265426
#ifndef CAPSTONE_DIET
5427-
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
5427+
{ X86_REG_ST0, X86_REG_DS, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
54285428
#endif
54295429
},
54305430

@@ -5613,7 +5613,7 @@
56135613
{
56145614
X86_FXAM, X86_INS_FXAM, 0,
56155615
#ifndef CAPSTONE_DIET
5616-
{ 0 }, { 0 }, { X86_GRP_FPU, 0 }, 0, 0
5616+
{ X86_REG_ST0, 0 }, { X86_REG_ST0, X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
56175617
#endif
56185618
},
56195619

@@ -18892,28 +18892,28 @@
1889218892
{
1889318893
X86_TST_F, X86_INS_FTST, 0,
1889418894
#ifndef CAPSTONE_DIET
18895-
{ 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
18895+
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
1889618896
#endif
1889718897
},
1889818898

1889918899
{
1890018900
X86_TST_Fp32, X86_INS_FTST, 0,
1890118901
#ifndef CAPSTONE_DIET
18902-
{ 0 }, { 0 }, { 0 }, 0, 0
18902+
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
1890318903
#endif
1890418904
},
1890518905

1890618906
{
1890718907
X86_TST_Fp64, X86_INS_FTST, 1,
1890818908
#ifndef CAPSTONE_DIET
18909-
{ 0 }, { 0 }, { 0 }, 0, 0
18909+
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
1891018910
#endif
1891118911
},
1891218912

1891318913
{
1891418914
X86_TST_Fp80, X86_INS_FTST, 0,
1891518915
#ifndef CAPSTONE_DIET
18916-
{ 0 }, { 0 }, { 0 }, 0, 0
18916+
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, 0 }, { X86_GRP_FPU, 0 }, 0, 0
1891718917
#endif
1891818918
},
1891918919

@@ -19046,14 +19046,14 @@
1904619046
{
1904719047
X86_UCOM_FIPr, X86_INS_FUCOMPI, 0,
1904819048
#ifndef CAPSTONE_DIET
19049-
{ X86_REG_ST0, 0 }, { X86_REG_EFLAGS, 0 }, { X86_GRP_FPU, 0 }, 0, 0
19049+
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, X86_REG_EFLAGS, 0 }, { X86_GRP_FPU, 0 }, 0, 0
1905019050
#endif
1905119051
},
1905219052

1905319053
{
1905419054
X86_UCOM_FIr, X86_INS_FUCOMI, 0,
1905519055
#ifndef CAPSTONE_DIET
19056-
{ X86_REG_ST0, 0 }, { X86_REG_EFLAGS, 0 }, { X86_GRP_FPU, 0 }, 0, 0
19056+
{ X86_REG_ST0, 0 }, { X86_REG_FPSW, X86_REG_EFLAGS, 0 }, { X86_GRP_FPU, 0 }, 0, 0
1905719057
#endif
1905819058
},
1905919059

arch/X86/X86MappingInsnOp.inc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2884,12 +2884,12 @@
28842884
},
28852885

28862886
{ /* X86_COM_FIPr, X86_INS_FCOMPI: fcompi */
2887-
0,
2887+
X86_FPU_FLAGS_RESET_C1,
28882888
{ CS_AC_READ, 0 }
28892889
},
28902890

28912891
{ /* X86_COM_FIr, X86_INS_FCOMI: fcomi */
2892-
0,
2892+
X86_FPU_FLAGS_MODIFY_C1,
28932893
{ CS_AC_READ, 0 }
28942894
},
28952895

@@ -13499,17 +13499,17 @@
1349913499
},
1350013500

1350113501
{ /* X86_TST_Fp32, X86_INS_FTST: ftst */
13502-
0,
13502+
X86_FPU_FLAGS_RESET_C1 | X86_FPU_FLAGS_MODIFY_C0 | X86_FPU_FLAGS_MODIFY_C2 | X86_FPU_FLAGS_MODIFY_C3,
1350313503
{ 0 }
1350413504
},
1350513505

1350613506
{ /* X86_TST_Fp64, X86_INS_FTST: ftst */
13507-
0,
13507+
X86_FPU_FLAGS_RESET_C1 | X86_FPU_FLAGS_MODIFY_C0 | X86_FPU_FLAGS_MODIFY_C2 | X86_FPU_FLAGS_MODIFY_C3,
1350813508
{ 0 }
1350913509
},
1351013510

1351113511
{ /* X86_TST_Fp80, X86_INS_FTST: ftst */
13512-
0,
13512+
X86_FPU_FLAGS_RESET_C1 | X86_FPU_FLAGS_MODIFY_C0 | X86_FPU_FLAGS_MODIFY_C2 | X86_FPU_FLAGS_MODIFY_C3,
1351313513
{ 0 }
1351413514
},
1351513515

@@ -13604,12 +13604,12 @@
1360413604
},
1360513605

1360613606
{ /* X86_UCOM_FIPr, X86_INS_FUCOMPI: fucompi */
13607-
0,
13607+
X86_FPU_FLAGS_MODIFY_C1,
1360813608
{ CS_AC_READ, 0 }
1360913609
},
1361013610

1361113611
{ /* X86_UCOM_FIr, X86_INS_FUCOMI: fucomi */
13612-
0,
13612+
X86_FPU_FLAGS_MODIFY_C1,
1361313613
{ CS_AC_READ, 0 }
1361413614
},
1361513615

0 commit comments

Comments
 (0)