fadec: Store broadcast size in segment
This is a preparation for AVX512-FP16, where the broadcast size is not just 32/64 bit depending solely on EVEX.W, but can also be 16 bit (with EVEX.W=0). The broadcast size therefore needs two bits, but the evex field only had one free bit left. Store broadcast size with the segment for now. (This is not a good fit and is likely to change at some point.)
This commit is contained in:
9
fadec.h
9
fadec.h
@@ -192,7 +192,7 @@ const char* fdi_name(FdInstrType ty);
|
||||
/** Gets the size of the instruction in bytes. **/
|
||||
#define FD_SIZE(instr) ((instr)->size)
|
||||
/** Gets the specified segment override, or FD_REG_NONE for default segment. **/
|
||||
#define FD_SEGMENT(instr) ((FdReg) (instr)->segment)
|
||||
#define FD_SEGMENT(instr) ((FdReg) (instr)->segment & 0x3f)
|
||||
/** Gets the address size attribute of the instruction in bytes. **/
|
||||
#define FD_ADDRSIZE(instr) (1 << (instr)->addrsz)
|
||||
/** Get the logarithmic address size; FD_ADDRSIZE == 1 << FD_ADDRSIZELG **/
|
||||
@@ -262,9 +262,12 @@ const char* fdi_name(FdInstrType ty);
|
||||
/** Gets the sign-extended displacement of a memory operand.
|
||||
* Only valid if FD_OP_TYPE == FD_OT_MEM/MEMBCST **/
|
||||
#define FD_OP_DISP(instr,idx) ((int64_t) (instr)->disp)
|
||||
/** Get whether the memory broadcast is 64-bit (otherwise: 32-bit).
|
||||
/** Get memory broadcast size in bytes.
|
||||
* Only valid if FD_OP_TYPE == FD_OT_MEMBCST **/
|
||||
#define FD_OP_BCST64(instr,idx) (!!((instr)->evex & 0x08))
|
||||
#define FD_OP_BCSTSZ(instr,idx) (1 << FD_OP_BCSTSZLG(instr,idx))
|
||||
/** Get logarithmic memory broadcast size (1 = 2-byte; 2=4-byte; 3=8-byte).
|
||||
* Only valid if FD_OP_TYPE == FD_OT_MEMBCST **/
|
||||
#define FD_OP_BCSTSZLG(instr,idx) ((instr)->segment >> 6)
|
||||
/** Gets the (sign-extended) encoded constant for an immediate operand.
|
||||
* Only valid if FD_OP_TYPE == FD_OT_IMM or FD_OP_TYPE == FD_OT_OFF **/
|
||||
#define FD_OP_IMM(instr,idx) ((instr)->imm)
|
||||
|
||||
Reference in New Issue
Block a user