mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-02-17 17:19:35 +08:00
AVX-512: Fix rounding mode value in EVEX prefix with SAE
If SAE is set, VL(vector length) is implied to be 512. EVEX.L'L (=EVEX.RC) is set to 00b by default. Signed-off-by: Jin Kyu Song <jin.kyu.song@intel.com> Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
This commit is contained in:
parent
088827bc6c
commit
c47ef9490b
15
assemble.c
15
assemble.c
@ -1167,15 +1167,18 @@ static int64_t calcsize(int32_t segment, int64_t offset, int bits,
|
||||
op_er_sae = (ins->evex_brerop >= 0 ?
|
||||
&ins->oprs[ins->evex_brerop] : NULL);
|
||||
|
||||
if (op_er_sae && (op_er_sae->decoflags & ER)) {
|
||||
/* set EVEX.RC (rounding control) and b */
|
||||
ins->evex_p[2] |= (((ins->evex_rm - BRC_RN) << 5) & EVEX_P2LL) |
|
||||
EVEX_P2B;
|
||||
if (op_er_sae && (op_er_sae->decoflags & (ER | SAE))) {
|
||||
/* set EVEX.b */
|
||||
ins->evex_p[2] |= EVEX_P2B;
|
||||
if (op_er_sae->decoflags & ER) {
|
||||
/* set EVEX.RC (rounding control) */
|
||||
ins->evex_p[2] |= ((ins->evex_rm - BRC_RN) << 5)
|
||||
& EVEX_P2RC;
|
||||
}
|
||||
} else {
|
||||
/* set EVEX.L'L (vector length) */
|
||||
ins->evex_p[2] |= ((ins->vex_wlp << (5 - 2)) & EVEX_P2LL);
|
||||
if ((op_er_sae && (op_er_sae->decoflags & SAE)) ||
|
||||
(opy->decoflags & BRDCAST_MASK)) {
|
||||
if (opy->decoflags & BRDCAST_MASK) {
|
||||
/* set EVEX.b */
|
||||
ins->evex_p[2] |= EVEX_P2B;
|
||||
}
|
||||
|
3
nasm.h
3
nasm.h
@ -514,7 +514,8 @@ static inline uint8_t get_cond_opcode(enum ccode c)
|
||||
#define EVEX_P2AAA 0x07 /* EVEX P[18:16] : Embedded opmask */
|
||||
#define EVEX_P2VP 0x08 /* EVEX P[19] : High-16 NDS reg */
|
||||
#define EVEX_P2B 0x10 /* EVEX P[20] : Broadcast / RC / SAE */
|
||||
#define EVEX_P2LL 0x60 /* EVEX P[22:21] : Vector length / RC */
|
||||
#define EVEX_P2LL 0x60 /* EVEX P[22:21] : Vector length */
|
||||
#define EVEX_P2RC EVEX_P2LL /* EVEX P[22:21] : Rounding control */
|
||||
#define EVEX_P2Z 0x80 /* EVEX P[23] : Zeroing/Merging */
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user