From 99b94d47142d8394530faf3c9fea377c89d225fa Mon Sep 17 00:00:00 2001 From: Jin Kyu Song Date: Fri, 25 Oct 2013 19:29:53 -0700 Subject: [PATCH] AVX-512: Add {evex} instruction prefix For instructions that can be encoded either in VEX or EVEX, {evex} forces nasm to encode in EVEX. Signed-off-by: Jin Kyu Song --- assemble.c | 7 +++++++ nasm.h | 2 ++ parser.c | 2 ++ tokens.dat | 3 +++ 4 files changed, 14 insertions(+) diff --git a/assemble.c b/assemble.c index 89a7e008..11a7db62 100644 --- a/assemble.c +++ b/assemble.c @@ -632,6 +632,9 @@ int64_t assemble(int32_t segment, int64_t offset, int bits, iflags_t cp, case P_OSP: c = 0x66; break; + case P_EVEX: + /* EVEX */ + break; case P_none: break; default: @@ -786,6 +789,7 @@ int64_t insn_size(int32_t segment, int64_t offset, int bits, iflags_t cp, break; case P_A64: case P_O64: + case P_EVEX: case P_none: break; default: @@ -2186,6 +2190,9 @@ static enum match_result matches(const struct itemplate *itemp, nasm_regvals[instruction->oprs[i].basereg] >= 16 && !(itemp->flags & IF_AVX512)) { return MERR_ENCMISMATCH; + } else if (instruction->prefixes[PPS_EVEX] && + !(itemp->flags & IF_AVX512)) { + return MERR_ENCMISMATCH; } } diff --git a/nasm.h b/nasm.h index 5ca2aa58..34adc69b 100644 --- a/nasm.h +++ b/nasm.h @@ -553,6 +553,7 @@ enum prefixes { /* instruction prefixes */ P_XACQUIRE, P_XRELEASE, P_BND, + P_EVEX, PREFIX_ENUM_LIMIT }; @@ -635,6 +636,7 @@ enum prefix_pos { PPS_SEG, /* Segment override prefix */ PPS_OSIZE, /* Operand size prefix */ PPS_ASIZE, /* Address size prefix */ + PPS_EVEX, /* EVEX prefix */ MAXPREFIX /* Total number of prefix slots */ }; diff --git a/parser.c b/parser.c index 092135d1..42077029 100644 --- a/parser.c +++ b/parser.c @@ -101,6 +101,8 @@ static int prefix_slot(int prefix) case P_A64: case P_ASP: return PPS_ASIZE; + case P_EVEX: + return PPS_EVEX; default: nasm_error(ERR_PANIC, "Invalid value %d passed to prefix_slot()", prefix); return -1; diff --git a/tokens.dat b/tokens.dat index 211eb099..284cf30a 100644 --- a/tokens.dat +++ b/tokens.dat @@ -122,3 +122,6 @@ rz-sae % TOKEN_DECORATOR, 0, TFLAG_BRC, BRC_* sae z + +% TOKEN_PREFIX, 0, TFLAG_BRC, P_* +evex -- 2.11.4.GIT