Skip to content

Commit

Permalink
Fix avx-512 opmask size.
Browse files Browse the repository at this point in the history
It's 64 bits, not 128.

From Intel(R) 64 and IA-32 Architectures Software Developer’s Manual
June 2021

15.6.1 OPMASK Register to Predicate Vector Data Processing
  The opmask is a set of eight architectural registers of size
  MAX_KL (64-bit).
  • Loading branch information
hainest committed Nov 17, 2023
1 parent 00e56a1 commit 5127b10
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 8 deletions.
17 changes: 9 additions & 8 deletions common/h/registers/x86_regs.h
Expand Up @@ -64,6 +64,7 @@ namespace Dyninst { namespace x86 {
const signed int OCT = 0x00000700; // 128-bit SSE, FC16, XOP, AVX, and FMA3/4
const signed int YMMS = 0x00000800; // 256-bit SSE, AVX2, FMA3/4
const signed int ZMMS = 0x00000900; // 512-bit AVX-512/AVX10
const signed int KMSKS = 0x00000A00; // 64-bit mask from AVX-512/AVX10

/* Register Categories */
const signed int GPR = 0x00010000; // General-Purpose Registers
Expand Down Expand Up @@ -190,14 +191,14 @@ namespace Dyninst { namespace x86 {
DEF_REGISTER( fsbase, 0x1 | FULL | MISC | Arch_x86, "x86");
DEF_REGISTER( gsbase, 0x2 | FULL | MISC | Arch_x86, "x86");

DEF_REGISTER( k0, 0x00 | OCT | KMASK | Arch_x86, "x86");
DEF_REGISTER( k1, 0x01 | OCT | KMASK | Arch_x86, "x86");
DEF_REGISTER( k2, 0x02 | OCT | KMASK | Arch_x86, "x86");
DEF_REGISTER( k3, 0x03 | OCT | KMASK | Arch_x86, "x86");
DEF_REGISTER( k4, 0x04 | OCT | KMASK | Arch_x86, "x86");
DEF_REGISTER( k5, 0x05 | OCT | KMASK | Arch_x86, "x86");
DEF_REGISTER( k6, 0x06 | OCT | KMASK | Arch_x86, "x86");
DEF_REGISTER( k7, 0x07 | OCT | KMASK | Arch_x86, "x86");
DEF_REGISTER( k0, 0x00 | KMSKS | KMASK | Arch_x86, "x86");
DEF_REGISTER( k1, 0x01 | KMSKS | KMASK | Arch_x86, "x86");
DEF_REGISTER( k2, 0x02 | KMSKS | KMASK | Arch_x86, "x86");
DEF_REGISTER( k3, 0x03 | KMSKS | KMASK | Arch_x86, "x86");
DEF_REGISTER( k4, 0x04 | KMSKS | KMASK | Arch_x86, "x86");
DEF_REGISTER( k5, 0x05 | KMSKS | KMASK | Arch_x86, "x86");
DEF_REGISTER( k6, 0x06 | KMSKS | KMASK | Arch_x86, "x86");
DEF_REGISTER( k7, 0x07 | KMSKS | KMASK | Arch_x86, "x86");

DEF_REGISTER( xmm0, 0x00 | OCT | XMM | Arch_x86, "x86");
DEF_REGISTER( xmm1, 0x01 | OCT | XMM | Arch_x86, "x86");
Expand Down
2 changes: 2 additions & 0 deletions common/src/registers/MachRegister.C
Expand Up @@ -131,6 +131,7 @@ namespace Dyninst {
case x86::YMMS: return 32;
case x86::ZMMS: return 64;
case x86::MMS: return 8;
case x86::KMSKS: return 8;
default:
return 0;
}
Expand Down Expand Up @@ -976,6 +977,7 @@ namespace Dyninst {
case Arch_x86:
switch(subrange) {
case x86::OCT:
case x86::KMSKS:
case x86::FPDBL: p = x86_regpos_qword; break;
case x86::MMS: p = x86_regpos_qword; break;
case x86::H_REG: p = x86_regpos_high_byte; break;
Expand Down

0 comments on commit 5127b10

Please sign in to comment.