diff options
author | H. Peter Anvin (Intel) <hpa@zytor.com> | 2020-06-14 23:02:53 -0700 |
---|---|---|
committer | H. Peter Anvin (Intel) <hpa@zytor.com> | 2020-06-14 23:02:53 -0700 |
commit | 2383281768c60a6de108a0603f41189963197815 (patch) | |
tree | 5748c8bef06eb6d024201f0d8de36f475d7c7713 | |
parent | dfa39a189becb17312b602d650e83f89d79e21bd (diff) | |
parent | 7acbaf523c1f78ec96c8805ffb92052b3b2b040f (diff) | |
download | nasm-2383281768c60a6de108a0603f41189963197815.tar.gz |
Merge tag 'nasm-2.15rc8'
NASM 2.15rc8
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | asm/nasm.c | 116 | ||||
-rw-r--r-- | asm/preproc.c | 783 | ||||
-rw-r--r-- | asm/srcfile.c | 10 | ||||
-rw-r--r-- | asm/srcfile.h | 16 | ||||
-rw-r--r-- | doc/changes.src | 79 | ||||
-rw-r--r-- | doc/nasmdoc.src | 292 | ||||
-rw-r--r-- | nasmlib/hashtbl.c | 5 | ||||
l--------- | test/emptyarg.asm | 1 | ||||
-rw-r--r-- | test/ifdef.asm | 7 | ||||
-rw-r--r-- | travis/test/avx512f.bin.t | bin | 0 -> 56620 bytes | |||
-rw-r--r-- | travis/test/avx512f.json | 3 | ||||
-rw-r--r-- | travis/test/avx512f.stderr | 572 | ||||
-rw-r--r-- | travis/test/utf-error.stderr | 3 | ||||
-rw-r--r-- | travis/test/weirdpaste.i.t | 7 | ||||
-rw-r--r-- | version | 2 | ||||
-rw-r--r-- | x86/insns.dat | 610 |
17 files changed, 1525 insertions, 982 deletions
@@ -59,6 +59,7 @@ TAGS /doc/*.dip /doc/*.hpj /doc/*.pdf +/doc/*.pdf.xz /doc/*.ps /doc/*.rtf /doc/*.texi @@ -55,6 +55,7 @@ #include "outform.h" #include "listing.h" #include "iflag.h" +#include "quote.h" #include "ver.h" /* @@ -292,15 +293,6 @@ static void increment_offset(int64_t delta) set_curr_offs(location.offset); } -static void nasm_fputs(const char *line, FILE * outfile) -{ - if (outfile) { - fputs(line, outfile); - putc('\n', outfile); - } else - puts(line); -} - /* * Define system-defined macros that are not part of * macros/standard.mac. @@ -449,6 +441,46 @@ static int64_t make_posix_time(const struct tm *tm) return t; } +/* + * Quote a filename string if and only if it is necessary. + * It is considered necessary if any one of these is true: + * 1. The filename contains control characters; + * 2. The filename starts or ends with a space or quote mark; + * 3. The filename contains more than one space in a row; + * 4. The filename is empty. + * + * The filename is returned in a newly allocated buffer. + */ +static char *nasm_quote_filename(const char *fn) +{ + const unsigned char *p = + (const unsigned char *)fn; + + if (!p || !*p) + return nasm_strdup("\"\""); + + if (*p <= ' ' || nasm_isquote(*p)) { + goto quote; + } else { + unsigned char cutoff = ' '; + + while (*p) { + if (*p < cutoff) + goto quote; + cutoff = ' ' + (*p == ' '); + p++; + } + if (p[-1] <= ' ' || nasm_isquote(p[-1])) + goto quote; + } + + /* Quoting not necessary */ + return nasm_strdup(fn); + +quote: + return nasm_quote(fn, NULL); +} + static void timestamp(void) { struct compile_time * const oct = &official_compile_time; @@ -595,15 +627,20 @@ int main(int argc, char **argv) } else if (operating_mode & OP_PREPROCESS) { char *line; const char *file_name = NULL; - int32_t prior_linnum = 0; - int lineinc = 0; + char *quoted_file_name = nasm_quote_filename(file_name); + int32_t linnum = 0; + int32_t lineinc = 0; + FILE *out; if (outname) { ofile = nasm_open_write(outname, NF_TEXT); if (!ofile) nasm_fatal("unable to open output file `%s'", outname); - } else + out = ofile; + } else { ofile = NULL; + out = stdout; + } location.known = false; @@ -614,22 +651,47 @@ int main(int argc, char **argv) /* * We generate %line directives if needed for later programs */ - int32_t linnum = prior_linnum += lineinc; - int altline = src_get(&linnum, &file_name); - if (altline) { - if (altline == 1 && lineinc == 1) - nasm_fputs("", ofile); - else { - lineinc = (altline != -1 || lineinc != 1); - fprintf(ofile ? ofile : stdout, - "%%line %"PRId32"+%d %s\n", linnum, lineinc, - file_name); + struct src_location where = src_where(); + if (file_name != where.filename) { + file_name = where.filename; + linnum = -1; /* Force a new %line statement */ + lineinc = file_name ? 1 : 0; + nasm_free(quoted_file_name); + quoted_file_name = nasm_quote_filename(file_name); + } else if (lineinc) { + if (linnum + lineinc == where.lineno) { + /* Add one blank line to account for increment */ + fputc('\n', out); + linnum += lineinc; + } else if (linnum - lineinc == where.lineno) { + /* + * Standing still, probably a macro. Set increment + * to zero. + */ + lineinc = 0; } - prior_linnum = linnum; + } else { + /* lineinc == 0 */ + if (linnum + 1 == where.lineno) + lineinc = 1; } - nasm_fputs(line, ofile); - nasm_free(line); + + /* Skip blank lines if we will need a %line anyway */ + if (linnum == -1 && !line[0]) + continue; + + if (linnum != where.lineno) { + fprintf(out, "%%line %"PRId32"%+"PRId32" %s\n", + where.lineno, lineinc, quoted_file_name); + } + linnum = where.lineno + lineinc; + + fputs(line, out); + fputc('\n', out); } + + nasm_free(quoted_file_name); + preproc->cleanup_pass(); reset_warnings(); if (ofile) @@ -2061,6 +2123,10 @@ static void nasm_issue_error(struct nasm_errtext *et) const char *file = currentfile ? currentfile : no_file_name; const char *here = ""; + if (severity & ERR_HERE) { + here = currentfile ? " here" : " in an unknown location"; + } + if (warn_list && true_type < ERR_NONFATAL && !(pass_first() && (severity & ERR_PASS1))) { /* diff --git a/asm/preproc.c b/asm/preproc.c index 7d001fa7..0a6e2451 100644 --- a/asm/preproc.c +++ b/asm/preproc.c @@ -76,6 +76,16 @@ #include "tables.h" #include "listing.h" +/* + * Preprocessor execution options that can be controlled by %pragma or + * other directives. This structure is initialized to zero on each + * pass; this *must* reflect the default initial state. + */ +static struct pp_opts { + bool noaliases; + bool sane_empty_expansion; +} ppopt; + typedef struct SMacro SMacro; typedef struct MMacro MMacro; typedef struct MMacroInvocation MMacroInvocation; @@ -269,15 +279,12 @@ struct MMacro { struct mstk dstk; /* Macro definitions stack */ Token **params; /* actual parameters */ Token *iline; /* invocation line */ + struct src_location where; /* location of definition */ unsigned int nparam, rotate; char *iname; /* name invoked as */ int *paramlen; uint64_t unique; - int lineno; /* Current line number on expansion */ uint64_t condcnt; /* number of if blocks... */ - - const char *fname; /* File where defined */ - int32_t xline; /* First line in macro */ }; @@ -360,12 +367,13 @@ static Token *set_text(struct Token *t, const char *text, size_t len) if (t->len > INLINE_TEXT) nasm_free(t->text.p.ptr); - nasm_zero(t->text.a); + nasm_zero(t->text); - t->len = tok_check_len(len); + t->len = len = tok_check_len(len); textp = (len > INLINE_TEXT) ? (t->text.p.ptr = nasm_malloc(len+1)) : t->text.a; - memcpy(textp, text, len+1); + memcpy(textp, text, len); + textp[len] = '\0'; return t; } @@ -375,18 +383,21 @@ static Token *set_text(struct Token *t, const char *text, size_t len) */ static Token *set_text_free(struct Token *t, char *text, unsigned int len) { + char *textp; + if (t->len > INLINE_TEXT) nasm_free(t->text.p.ptr); - nasm_zero(t->text.a); + nasm_zero(t->text); - t->len = tok_check_len(len); + t->len = len = tok_check_len(len); if (len > INLINE_TEXT) { - t->text.p.ptr = text; + textp = t->text.p.ptr = text; } else { - memcpy(t->text.a, text, len+1); + textp = memcpy(t->text.a, text, len); nasm_free(text); } + textp[len] = '\0'; return t; } @@ -429,6 +440,7 @@ struct Line { Line *next; MMacro *finishes; Token *first; + struct src_location where; /* Where defined */ }; /* @@ -440,9 +452,9 @@ struct Include { FILE *fp; Cond *conds; Line *expansion; - const char *fname; struct mstk mstk; - int lineno, lineinc; + struct src_location where; /* Filename and current line number */ + int32_t lineinc; /* Increment given by %line */ bool nolist; }; @@ -567,7 +579,6 @@ static int LocalOffset = 0; static Context *cstk; static Include *istk; static const struct strlist *ipath_list; -static bool do_aliases; static struct strlist *deplist; @@ -1079,21 +1090,53 @@ static void free_smacro(SMacro *s) } /* - * Free all currently defined macros, and free the hash tables + * Free all currently defined macros, and free the hash tables if empty */ -static void free_smacro_table(struct hash_table *smt) +enum clear_what { + CLEAR_NONE = 0, + CLEAR_DEFINE = 1, /* Clear smacros */ + CLEAR_DEFALIAS = 2, /* Clear smacro aliases */ + CLEAR_ALLDEFINE = CLEAR_DEFINE|CLEAR_DEFALIAS, + CLEAR_MMACRO = 4, + CLEAR_ALL = CLEAR_ALLDEFINE|CLEAR_MMACRO +}; + +static void clear_smacro_table(struct hash_table *smt, enum clear_what what) { struct hash_iterator it; const struct hash_node *np; + bool empty = true; + /* + * Walk the hash table and clear out anything we don't want + */ hash_for_each(smt, it, np) { SMacro *tmp; SMacro *s = np->data; - nasm_free((void *)np->key); - list_for_each_safe(s, tmp, s) - free_smacro(s); + SMacro **head = (SMacro **)&np->data; + + list_for_each_safe(s, tmp, s) { + if (what & ((enum clear_what)s->alias + 1)) { + *head = s->next; + free_smacro(s); + } else { + empty = false; + } + } } - hash_free(smt); + + /* + * Free the hash table and keys if and only if it is now empty. + * Note: we cannot free keys even for an empty list above, as that + * mucks up the hash algorithm. + */ + if (empty) + hash_free_all(smt, true); +} + +static void free_smacro_table(struct hash_table *smt) +{ + clear_smacro_table(smt, CLEAR_ALLDEFINE); } static void free_mmacro_table(struct hash_table *mmt) @@ -1256,7 +1299,6 @@ static char *line_from_file(FILE *f) unsigned int nr_cont = 0; bool cont = false; char *buffer, *p; - int32_t lineno; size = delta; p = buffer = nasm_malloc(size); @@ -1316,9 +1358,8 @@ static char *line_from_file(FILE *f) *p++ = c; } while (c); - lineno = src_get_linnum() + istk->lineinc + - (nr_cont * istk->lineinc); - src_set_linnum(lineno); + istk->where.lineno += (nr_cont + 1) * istk->lineinc; + src_set_linnum(istk->where.lineno); return buffer; } @@ -1340,7 +1381,7 @@ static char *read_line(void) return NULL; if (!istk->nolist) - lfmt->line(LIST_READ, src_get_linnum(), line); + lfmt->line(LIST_READ, istk->where.lineno, line); return line; } @@ -2352,7 +2393,7 @@ restart: (nparam <= 0 || m->nparam == 0 || nparam == m->nparam || (m->greedy && nparam >= m->nparam-1))) { if (m->alias && !find_alias) { - if (do_aliases) { + if (!ppopt.noaliases) { name = tok_text(m->expansion); goto restart; } else { @@ -2394,61 +2435,75 @@ static int read_param_count(const char *str) * * Note that we need space in the params array for parameter 0 being * a possible captured label as well as the final NULL. + * + * Returns a pointer to the pointer to a terminal comma if present; + * used to drop an empty terminal argument for legacy reasons. */ -static void count_mmac_params(Token * t, int *nparamp, Token ***paramsp) +static Token **count_mmac_params(Token *tline, int *nparamp, Token ***paramsp) { int paramsize; int nparam = 0; + Token *t; + Token **comma = NULL, **maybe_comma = NULL; Token **params; paramsize = PARAM_DELTA; - params = nasm_malloc(paramsize * sizeof(*params)); - params[0] = NULL; + nasm_newn(params, paramsize); - while (true) { - t = skip_white(t); - if (!t && !nparam) - break; /* No arguments */ - - /* 2 slots for captured label and NULL */ - if (nparam+2 >= paramsize) { - paramsize += PARAM_DELTA; - params = nasm_realloc(params, sizeof(*params) * paramsize); - } - params[++nparam] = t; - if (tok_is(t, '{')) { - int brace = 1; - while (brace && (t = t->next)) { - brace += tok_is(t, '{'); - brace -= tok_is(t, '}'); + t = skip_white(tline); + if (t) { + while (true) { + /* Need two slots for captured label and NULL */ + if (unlikely(nparam+2 >= paramsize)) { + paramsize += PARAM_DELTA; + params = nasm_realloc(params, sizeof(*params) * paramsize); } + params[++nparam] = t; + if (tok_is(t, '{')) { + int brace = 1; - if (t) { - /* - * Now we've found the closing brace, look further - * for the comma. - */ - t = skip_white(t->next); - if (tok_isnt(t, ',')) - nasm_nonfatal("braces do not enclose all of macro parameter"); - } else { - nasm_nonfatal("expecting closing brace in macro parameter"); + comma = NULL; /* Non-empty parameter */ + + while (brace && (t = t->next)) { + brace += tok_is(t, '{'); + brace -= tok_is(t, '}'); + } + + if (t) { + /* + * Now we've found the closing brace, look further + * for the comma. + */ + t = skip_white(t->next); + if (tok_isnt(t, ',')) + nasm_nonfatal("braces do not enclose all of macro parameter"); + } else { + nasm_nonfatal("expecting closing brace in macro parameter"); + } } - } - /* Advance to the next comma */ - while (tok_isnt(t, ',')) - t = t->next; + /* Advance to the next comma */ + maybe_comma = &t->next; + while (tok_isnt(t, ',')) { + if (!tok_white(t)) + comma = NULL; /* Non-empty parameter */ + maybe_comma = &t->next; + t = t->next; + } - if (!t) - break; /* End of line */ + if (!t) + break; /* End of string, no comma */ - t = t->next; /* Eat the comma, start over */ + comma = maybe_comma; /* Point to comma pointer */ + t = skip_white(t->next); /* Eat the comma and whitespace */ + } } params[nparam+1] = NULL; *paramsp = params; *nparamp = nparam; + + return comma; } /* @@ -2509,7 +2564,7 @@ static enum cond_state if_condition(Token * tline, enum preproc_token ct) mname = tok_text(tline); ctx = get_ctx(mname, &mname); - if (smacro_defined(ctx, mname, 0, &smac, true, alias) && smac + if (smacro_defined(ctx, mname, -1, &smac, true, alias) && smac && smac->alias == alias) { j = true; break; @@ -3017,7 +3072,7 @@ static SMacro *define_smacro(const char *mname, bool casesense, * some others didn't. What is the right thing to do here? */ goto fail; - } else if (!smac->alias || !do_aliases || defining_alias) { + } else if (!smac->alias || ppopt.noaliases || defining_alias) { /* * We're redefining, so we have to take over an * existing SMacro structure. This means freeing @@ -3086,7 +3141,7 @@ static void undef_smacro(const char *mname, bool undefalias) while ((s = *sp) != NULL) { if (!mstrcmp(s->name, mname, s->casesense)) { if (s->alias && !undefalias) { - if (do_aliases) { + if (!ppopt.noaliases) { if (s->in_progress) { nasm_nonfatal("macro alias loop"); } else { @@ -3165,10 +3220,19 @@ static bool parse_mmacro_spec(Token *tline, MMacro *def, const char *directive) /* * Handle default parameters. */ + def->ndefs = 0; if (tline && tline->next) { + Token **comma; def->dlist = tline->next; tline->next = NULL; - count_mmac_params(def->dlist, &def->ndefs, &def->defaults); + comma = count_mmac_params(def->dlist, &def->ndefs, &def->defaults); + if (!ppopt.sane_empty_expansion && comma) { + *comma = NULL; + def->ndefs--; + nasm_warn(WARN_MACRO_PARAMS_LEGACY, + "dropping trailing empty default parameter in defintion of multi-line macro `%s'", + def->name); + } } else { def->dlist = NULL; def->defaults = NULL; @@ -3208,13 +3272,23 @@ static int parse_size(const char *str) { */ static void do_pragma_preproc(Token *tline) { + const char *txt; + /* Skip to the real stuff */ tline = tline->next; tline = skip_white(tline); - if (!tline) + + if (!tok_type(tline, TOK_ID)) return; - (void)tline; /* Nothing else to do at present */ + txt = tok_text(tline); + if (!nasm_stricmp(txt, "sane_empty_expansion")) { + tline = skip_white(tline->next); + ppopt.sane_empty_expansion = + pp_get_boolean_option(tline, ppopt.sane_empty_expansion); + } else { + /* Unknown pragma, ignore for now */ + } } static bool is_macro_id(const Token *t) @@ -3300,6 +3374,26 @@ static void mark_smac_params(Token *tline, const SMacro *tmpl, } /** + * %clear selected macro sets either globally or in contexts + */ +static void do_clear(enum clear_what what, bool context) +{ + if (context) { + if (what & CLEAR_ALLDEFINE) { + Context *ctx; + list_for_each(ctx, cstk) + clear_smacro_table(&ctx->localmac, what); + } + /* Nothing else can be context-local */ + } else { + if (what & CLEAR_ALLDEFINE) + clear_smacro_table(&smacros, what); + if (what & CLEAR_MMACRO) + free_mmacro_table(&mmacros); + } +} + +/** * find and process preprocessor directive in passed line * Find out if a line contains a preprocessor directive, and deal * with it if so. @@ -3359,6 +3453,56 @@ static int do_directive(Token *tline, Token **output) } /* + * %line directives are always processed immediately and + * unconditionally, as they are intended to reflect position + * in externally preprocessed sources. + */ + if (op == PP_LINE) { + /* + * Syntax is `%line nnn[+mmm] [filename]' + */ + if (pp_noline || istk->mstk.mstk) + goto done; + + tline = tline->next; + tline = skip_white(tline); + if (!tok_type(tline, TOK_NUMBER)) { + nasm_nonfatal("`%s' expects line number", dname); + goto done; + } + k = readnum(tok_text(tline), &err); + m = 1; + tline = tline->next; + if (tok_is(tline, '+') || tok_is(tline, '-')) { + bool minus = tok_is(tline, '-'); + tline = tline->next; + if (!tok_type(tline, TOK_NUMBER)) { + nasm_nonfatal("`%s' expects line increment", dname); + goto done; + } + m = readnum(tok_text(tline), &err); + if (minus) + m = -m; + tline = tline->next; + } + tline = skip_white(tline); + if (tline) { + if (tline->type == TOK_STRING) { + src_set_fname(unquote_token(tline)); + } else { + char *fname = detoken(tline, false); + src_set_fname(fname); + nasm_free(fname); + } + } + src_set_linnum(k); + + istk->where = src_where(); + istk->lineinc = m; + goto done; + } + + /* * If we're in a non-emitting branch of a condition construct, * or walking to the end of an already terminated %rep block, * we should ignore all directives except for condition @@ -3373,7 +3517,7 @@ static int do_directive(Token *tline, Token **output) /* * If we're defining a macro or reading a %rep block, we should * ignore all directives except for %macro/%imacro (which nest), - * %endm/%endmacro, and (only if we're in a %rep block) %endrep. + * %endm/%endmacro, %line and (only if we're in a %rep block) %endrep. * If we're in a %rep block, another %rep nests, so should be let through. */ if (defining && op != PP_MACRO && op != PP_RMACRO && @@ -3616,11 +3760,56 @@ static int do_directive(Token *tline, Token **output) break; case PP_CLEAR: - if (tline->next) + { + bool context = false; + + t = tline->next = expand_smacro(tline->next); + t = skip_white(t); + if (!t) { + /* Emulate legacy behavior */ + do_clear(CLEAR_DEFINE|CLEAR_MMACRO, false); + } else { + while ((t = skip_white(t)) && t->type == TOK_ID) { + const char *txt = tok_text(t); + if (!nasm_stricmp(txt, "all")) { + do_clear(CLEAR_ALL, context); + } else if (!nasm_stricmp(txt, "define") || + !nasm_stricmp(txt, "def") || + !nasm_stricmp(txt, "smacro")) { + do_clear(CLEAR_DEFINE, context); + } else if (!nasm_stricmp(txt, "defalias") || + !nasm_stricmp(txt, "alias") || + !nasm_stricmp(txt, "salias")) { + do_clear(CLEAR_DEFALIAS, context); + } else if (!nasm_stricmp(txt, "alldef") || + !nasm_stricmp(txt, "alldefine")) { + do_clear(CLEAR_ALLDEFINE, context); + } else if (!nasm_stricmp(txt, "macro") || + !nasm_stricmp(txt, "mmacro")) { + do_clear(CLEAR_MMACRO, context); + } else if (!nasm_stricmp(txt, "context") || + !nasm_stricmp(txt, "ctx")) { + context = true; + } else if (!nasm_stricmp(txt, "global")) { + context = false; + } else if (!nasm_stricmp(txt, "nothing") || + !nasm_stricmp(txt, "none") || + !nasm_stricmp(txt, "ignore") || + !nasm_stricmp(txt, "-") || + !nasm_stricmp(txt, "--")) { + /* Do nothing */ + } else { + nasm_nonfatal("invalid option to %s: %s", dname, txt); + t = NULL; + } + } + } + + t = skip_white(t); + if (t) nasm_warn(WARN_OTHER, "trailing garbage after `%s' ignored", dname); - free_macros(); - init_macros(); break; + } case PP_DEPEND: t = tline->next = expand_smacro(tline->next); @@ -3660,8 +3849,8 @@ static int do_directive(Token *tline, Token **output) /* -MG given but file not found, or repeated %require */ nasm_free(inc); } else { - inc->fname = src_set_fname(found_path ? found_path : p); - inc->lineno = src_set_linnum(0); + src_set(0, found_path ? found_path : p); + inc->where = src_where(); inc->lineinc = 1; inc->nolist = istk->nolist; istk = inc; @@ -3689,8 +3878,7 @@ static int do_directive(Token *tline, Token **output) stdmacpos = pkg->macros; nasm_new(inc); inc->next = istk; - inc->fname = src_set_fname(NULL); - inc->lineno = src_set_linnum(0); + src_set(0, NULL); inc->nolist = !list_option('b') || istk->nolist; istk = inc; lfmt->uplevel(LIST_INCLUDE, 0); @@ -3885,7 +4073,7 @@ issue_error: } defining = def; - src_get(&defining->xline, &defining->fname); + defining->where = istk->where; mmac = (MMacro *) hash_findix(&mmacros, defining->name); while (mmac) { @@ -4067,7 +4255,7 @@ issue_error: defining->mstk = istk->mstk; defining->dstk.mstk = tmp_defining; defining->dstk.mmac = tmp_defining ? tmp_defining->dstk.mmac : NULL; - src_get(&defining->xline, &defining->fname); + defining->where = istk->where; break; } @@ -4092,6 +4280,7 @@ issue_error: l->next = istk->expansion; l->finishes = defining; l->first = NULL; + l->where = src_where(); istk->expansion = l; istk->mstk.mstk = defining; @@ -4472,42 +4661,11 @@ issue_error: case PP_ALIASES: tline = tline->next; tline = expand_smacro(tline); - do_aliases = pp_get_boolean_option(tline, do_aliases); + ppopt.noaliases = !pp_get_boolean_option(tline, !ppopt.noaliases); break; case PP_LINE: - /* - * Syntax is `%line nnn[+mmm] [filename]' - */ - if (unlikely(pp_noline)) - goto done; - - tline = tline->next; - tline = skip_white(tline); - if (!tok_type(tline, TOK_NUMBER)) { - nasm_nonfatal("`%s' expects line number", dname); - goto done; - } - k = readnum(tok_text(tline), &err); - m = 1; - tline = tline->next; - if (tok_is(tline, '+')) { - tline = tline->next; - if (!tok_type(tline, TOK_NUMBER)) { - nasm_nonfatal("`%s' expects line increment", dname); - goto done; - } - m = readnum(tok_text(tline), &err); - tline = tline->next; - } - tline = skip_white(tline); - src_set_linnum(k); - istk->lineinc = m; - if (tline) { - char *fname = detoken(tline, false); - src_set_fname(fname); - nasm_free(fname); - } + nasm_panic("`%s' directive not preprocessed early", dname); break; } @@ -5085,7 +5243,7 @@ static SMacro *expand_one_smacro(Token ***tpp) * checking for parameters if necessary. */ list_for_each(m, head) { - if (unlikely(m->alias && !do_aliases)) + if (unlikely(m->alias && ppopt.noaliases)) continue; if (!mstrcmp(m->name, mname, m->casesense)) break; @@ -5558,10 +5716,11 @@ static Token *expand_smacro_noreset(Token *org_tline) * passes. */ errhold = nasm_error_hold_push(); + while (*tail) /* main token loop */ expanded |= !!expand_one_smacro(&tail); - if (!expanded) + if (!expanded) break; /* Done! */ /* @@ -5574,8 +5733,8 @@ static Token *expand_smacro_noreset(Token *org_tline) if (!paste_tokens(&tline, tmatch, ARRAY_SIZE(tmatch), true)) break; /* Done again! */ - expanded = false; nasm_error_hold_pop(errhold, false); + expanded = false; } nasm_error_hold_pop(errhold, true); @@ -5652,6 +5811,92 @@ static Token *expand_id(Token * tline) } /* + * This is called from find_mmacro_in_list() after finding a suitable macro. + */ +static MMacro *use_mmacro(MMacro *m, int *nparamp, Token ***paramsp) +{ + int nparam = *nparamp; + Token **params = *paramsp; + + /* + * This one is right. Just check if cycle removal + * prohibits us using it before we actually celebrate... + */ + if (m->in_progress > m->max_depth) { + if (m->max_depth > 0) { + nasm_warn(WARN_OTHER, "reached maximum recursion depth of %i", + m->max_depth); + } + nasm_free(params); + *nparamp = 0; + *paramsp = NULL; + return NULL; + } + + /* + * It's right, and we can use it. Add its default + * parameters to the end of our list if necessary. + */ + if (m->defaults && nparam < m->nparam_min + m->ndefs) { + int newnparam = m->nparam_min + m->ndefs; + params = nasm_realloc(params, sizeof(*params) * (newnparam+2)); + memcpy(¶ms[nparam+1], &m->defaults[nparam+1-m->nparam_min], + (newnparam - nparam) * sizeof(*params)); + nparam = newnparam; + } + /* + * If we've gone over the maximum parameter count (and + * we're in Plus mode), ignore parameters beyond + * nparam_max. + */ + if (m->plus && nparam > m->nparam_max) + nparam = m->nparam_max; + + /* + * If nparam was adjusted above, make sure the list is still + * NULL-terminated. + */ + params[nparam+1] = NULL; + + /* Done! */ + *paramsp = params; + *nparamp = nparam; + return m; +} + +/* + * Search a macro list and try to find a match. If matching, call + * use_mmacro() to set up the macro call. m points to the list of + * search, which is_mmacro() sets to the first *possible* match. + */ +static MMacro * +find_mmacro_in_list(MMacro *m, const char *finding, + int *nparamp, Token ***paramsp) +{ + int nparam = *nparamp; + + while (m) { + if (m->nparam_min <= nparam + && (m->plus || nparam <= m->nparam_max)) { + /* + * This one matches, use it. + */ + return use_mmacro(m, nparamp, paramsp); + } + + /* + * Otherwise search for the next one with a name match. + */ + list_for_each(m, m->next) { + if (!mstrcmp(m->name, finding, m->casesense)) + break; + } + } + + return NULL; +} + +/* * Determine whether the given line constitutes a multi-line macro * call, and return the MMacro structure called if so. Doesn't have * to check for an initial label - that's taken care of in @@ -5659,12 +5904,16 @@ static Token *expand_id(Token * tline) * to be called with tline->type == TOK_ID, so the putative macro * name is easy to find. */ -static MMacro *is_mmacro(Token * tline, int *nparamp, Token ***params_array) +static MMacro *is_mmacro(Token * tline, int *nparamp, Token ***paramsp) { - MMacro *head, *m; - Token **params; - int nparam; + MMacro *head, *m, *found; + Token **params, **comma; + int raw_nparam, nparam; const char *finding = tok_text(tline); + bool empty_args = !tline->next; + + *nparamp = 0; + *paramsp = NULL; head = (MMacro *) hash_findix(&mmacros, finding); @@ -5690,64 +5939,128 @@ static MMacro *is_mmacro(Token * tline, int *nparamp, Token ***params_array) * OK, we have a potential macro. Count and demarcate the * parameters. */ - count_mmac_params(tline->next, &nparam, ¶ms); + comma = count_mmac_params(tline->next, nparamp, paramsp); + raw_nparam = *nparamp; /* - * So we know how many parameters we've got. Find the MMacro - * structure that handles this number. + * Search for an exact match. This cannot come *before* the m + * found in the list search before, so we can start there. + * + * If found is NULL and *paramsp has been cleared, then we + * encountered an error for which we have already issued a + * diagnostic, so we should not proceed. */ - while (m) { - if (m->nparam_min <= nparam - && (m->plus || nparam <= m->nparam_max)) { - /* - * This one is right. Just check if cycle removal - * prohibits us using it before we actually celebrate... - */ - if (m->in_progress > m->max_depth) { - if (m->max_depth > 0) { - nasm_warn(WARN_OTHER, "reached maximum recursion depth of %i", - m->max_depth); - } - nasm_free(params); - return NULL; - } - /* - * It's right, and we can use it. Add its default - * parameters to the end of our list if necessary. - */ - if (m->defaults && nparam < m->nparam_min + m->ndefs) { - int newnparam = m->nparam_min + m->ndefs; - params = nasm_realloc(params, sizeof(*params) * (newnparam+2)); - memcpy(¶ms[nparam+1], &m->defaults[nparam+1-m->nparam_min], - (newnparam - nparam) * sizeof(*params)); - nparam = newnparam; + found = find_mmacro_in_list(m, finding, nparamp, paramsp); + if (!*paramsp) + return NULL; + + nparam = *nparamp; + params = *paramsp; + + /* + * Special weirdness: in NASM < 2.15, an expansion of + * *only* whitespace, as can happen during macro expansion under + * certain circumstances, is counted as zero arguments for the + * purpose of %0, but one argument for the purpose of macro + * matching! In particular, this affects: + * + * foobar %1 + * + * ... with %1 being empty; this would call the one-argument + * version of "foobar" with an empty argument, equivalent to + * + * foobar {%1} + * + * ... except that %0 would be set to 0 inside foobar, even if + * foobar is declared with "%macro foobar 1" or equivalent! + * + * The proper way to do that is to define "%macro foobar 0-1". + * + * To be compatible without doing something too stupid, try to + * match a zero-argument macro first, but if that fails, try + * for a one-argument macro with the above behavior. + * + * Furthermore, NASM < 2.15 will match stripping a tailing empty + * argument, but in that case %0 *does* reflect that this argument + * have been stripped; this is handled in count_mmac_params(). + * + * To disable these insane legacy behaviors, use: + * + * %pragma preproc sane_empty_expansion yes + * + *!macro-params-legacy [on] improperly calling multi-line macro for legacy support + *! warns about \i{multi-line macros} being invoked + *! with the wrong number of parameters, but for bug-compatibility + *! with NASM versions older than 2.15, NASM tried to fix up the + *! parameters to match the legacy behavior and call the macro anyway. + *! This can happen in certain cases where there are empty arguments + *! without braces, sometimes as a result of macro expansion. + *!- + *! The legacy behavior is quite strange and highly context-dependent, + *! and can be disabled with: + *!- + *! \c %pragma preproc sane_empty_expansion true + *!- + *! It is highly recommended to use this option in new code. + */ + if (!ppopt.sane_empty_expansion) { + if (!found) { + if (raw_nparam == 0 && !empty_args) { + /* + * A single all-whitespace parameter as the only thing? + * Look for a one-argument macro, but don't adjust + * *nparamp. + */ + int bogus_nparam = 1; + params[2] = NULL; + found = find_mmacro_in_list(m, finding, &bogus_nparam, paramsp); + } else if (raw_nparam > 1 && comma) { + Token *comma_tail = *comma; + + /* + * Drop the terminal argument and try again. + * If we fail, we need to restore the comma to + * preserve tlist. + */ + *comma = NULL; + *nparamp = raw_nparam - 1; + found = find_mmacro_in_list(m, finding, nparamp, paramsp); + if (found) + free_tlist(comma_tail); + else + *comma = comma_tail; } - /* - * If we've gone over the maximum parameter count (and - * we're in Plus mode), ignore parameters beyond - * nparam_max. - */ - if (m->plus && nparam > m->nparam_max) - nparam = m->nparam_max; - /* - * If nparam was adjusted above, make sure the list is still - * NULL-terminated. - */ - params[nparam+1] = NULL; + if (!*paramsp) + return NULL; + } else if (comma) { + free_tlist(*comma); + *comma = NULL; + if (raw_nparam > found->nparam_min && + raw_nparam <= found->nparam_min + found->ndefs) { + /* Replace empty argument with default parameter */ + params[raw_nparam] = + found->defaults[raw_nparam - found->nparam_min]; + } else if (raw_nparam > found->nparam_max && found->plus) { + /* Just drop the comma, don't adjust argument count */ + } else { + /* Drop argument. This may cause nparam < nparam_min. */ + params[raw_nparam] = NULL; + *nparamp = nparam = raw_nparam - 1; + } + } - /* Done! */ - *params_array = params; - *nparamp = nparam; - return m; + if (found) { + if (raw_nparam < found->nparam_min || + (raw_nparam > found->nparam_max && !found->plus)) { + nasm_warn(WARN_MACRO_PARAMS_LEGACY, + "improperly calling multi-line macro `%s' with %d parameters", + found->name, raw_nparam); + } else if (comma) { + nasm_warn(WARN_MACRO_PARAMS_LEGACY, + "dropping trailing empty parameter in call to multi-line macro `%s'", found->name); + } } - /* - * This one wasn't right: look for the next one with the - * same name. - */ - list_for_each(m, m->next) - if (!mstrcmp(m->name, tok_text(tline), m->casesense)) - break; } /* @@ -5759,10 +6072,13 @@ static MMacro *is_mmacro(Token * tline, int *nparamp, Token ***params_array) *! with the wrong number of parameters. See \k{mlmacover} for an *! example of why you might want to disable this warning. */ + if (found) + return found; + nasm_warn(WARN_MACRO_PARAMS_MULTI, "multi-line macro `%s' exists, but not taking %d parameter%s", - tok_text(tline), nparam, (nparam == 1) ? "" : "s"); - nasm_free(params); + finding, nparam, (nparam == 1) ? "" : "s"); + nasm_free(*paramsp); return NULL; } @@ -5924,13 +6240,10 @@ static int expand_mmacro(Token * tline) /* * Fix up the parameters: this involves stripping leading and - * trailing whitespace, then stripping braces if they are - * present. + * trailing whitespace and stripping braces if they are present. */ nasm_newn(paramlen, nparam+1); - nasm_assert(params[nparam+1] == NULL); - for (i = 1; (t = params[i]); i++) { bool braced = false; int brace = 0; @@ -6000,6 +6313,7 @@ static int expand_mmacro(Token * tline) nasm_new(ll); ll->next = istk->expansion; ll->finishes = m; + ll->where = istk->where; istk->expansion = ll; /* @@ -6019,7 +6333,6 @@ static int expand_mmacro(Token * tline) m->rotate = 0; m->paramlen = paramlen; m->unique = unique++; - m->lineno = 0; m->condcnt = 0; m->mstk = istk->mstk; @@ -6030,6 +6343,7 @@ static int expand_mmacro(Token * tline) ll->next = istk->expansion; istk->expansion = ll; ll->first = dup_tlist(l->first, NULL); + ll->where = l->where; } /* @@ -6054,6 +6368,7 @@ static int expand_mmacro(Token * tline) ll->next = istk->expansion; istk->expansion = ll; ll->first = startline; + ll->where = istk->where; if (!dont_prepend) { while (label->next) label = label->next; @@ -6185,7 +6500,9 @@ pp_reset(const char *file, enum preproc_mode mode, struct strlist *dep_list) unique = 0; deplist = dep_list; pp_mode = mode; - do_aliases = true; + + /* Reset options to default */ + nasm_zero(ppopt); if (!use_loaded) use_loaded = nasm_malloc(use_package_count * sizeof(bool)); @@ -6194,10 +6511,13 @@ pp_reset(const char *file, enum preproc_mode mode, struct strlist *dep_list) /* First set up the top level input file */ nasm_new(istk); istk->fp = nasm_open_read(file, NF_TEXT); + if (!istk->fp) { + nasm_fatalf(ERR_NOFILE, "unable to open input file `%s'%s%s", + file, errno ? " " : "", errno ? strerror(errno) : ""); + } src_set(0, file); + istk->where = src_where(); istk->lineinc = 1; - if (!istk->fp) - nasm_fatalf(ERR_NOFILE, "unable to open input file `%s'", file); strlist_add(deplist, file); @@ -6207,7 +6527,8 @@ pp_reset(const char *file, enum preproc_mode mode, struct strlist *dep_list) */ nasm_new(inc); inc->next = istk; - inc->fname = src_set_fname(NULL); + src_set(0, NULL); + inc->where = src_where(); inc->nolist = !list_option('b'); istk = inc; lfmt->uplevel(LIST_INCLUDE, 0); @@ -6298,20 +6619,12 @@ static Token *pp_tokline(void) */ fm->in_progress--; list_for_each(l, fm->expansion) { - Token *t, *tt, **tail; Line *ll; - istk->mstk.mstk->lineno = 0; nasm_new(ll); - ll->next = istk->expansion; - tail = &ll->first; - - list_for_each(t, l->first) { - if (t->len) { - tt = *tail = dup_Token(NULL, t); - tail = &tt->next; - } - } + ll->next = istk->expansion; + ll->first = dup_tlist(l->first, NULL); + ll->where = l->where; istk->expansion = ll; } break; @@ -6380,6 +6693,7 @@ static Token *pp_tokline(void) free_mmacro(m); #endif } + istk->where = l->where; istk->expansion = l->next; nasm_free(l); lfmt->downlevel(LIST_MACRO); @@ -6391,27 +6705,17 @@ static Token *pp_tokline(void) if (istk->expansion) { /* from a macro expansion */ Line *l = istk->expansion; - int32_t lineno; - if (istk->mstk.mstk) { - istk->mstk.mstk->lineno++; - if (istk->mstk.mstk->fname) - lineno = istk->mstk.mstk->lineno + - istk->mstk.mstk->xline; - else - lineno = 0; /* Defined at init time or builtin */ - } else { - lineno = src_get_linnum(); - } - - tline = l->first; istk->expansion = l->next; + istk->where = l->where; + tline = l->first; nasm_free(l); - line = detoken(tline, false); - if (!istk->nolist) - lfmt->line(LIST_MACRO, lineno, line); - nasm_free(line); + if (!istk->nolist) { + line = detoken(tline, false); + lfmt->line(LIST_MACRO, istk->where.lineno, line); + nasm_free(line); + } } else if ((line = read_line())) { line = prepreproc(line); tline = tokenize(line); @@ -6421,17 +6725,23 @@ static Token *pp_tokline(void) * The current file has ended; work down the istk */ Include *i = istk; + Include *is; + if (i->fp) fclose(i->fp); if (i->conds) { - /* nasm_error can't be conditionally suppressed */ + /* nasm_fatal can't be conditionally suppressed */ nasm_fatal("expected `%%endif' before end of file"); } - /* only set line and file name if there's a next node */ - if (i->next) - src_set(i->lineno, i->fname); + + list_for_each(is, i->next) { + if (is->fp) { + lfmt->downlevel(LIST_INCLUDE); + src_update(is->where); + break; + } + } istk = i->next; - lfmt->downlevel(LIST_INCLUDE); nasm_free(i); return &tok_pop; } @@ -6447,8 +6757,9 @@ static Token *pp_tokline(void) * condition, in which case we don't want to meddle with * anything. */ - if (!defining && !(istk->conds && !emitting(istk->conds->state)) - && !(istk->mstk.mstk && !istk->mstk.mstk->in_progress)) { + if (!defining && + !(istk->conds && !emitting(istk->conds->state)) && + !(istk->mstk.mmac && !istk->mstk.mmac->in_progress)) { tline = expand_mmac_params(tline); } @@ -6465,11 +6776,13 @@ static Token *pp_tokline(void) * shove the tokenized line on to the macro definition. */ MMacro *mmac = defining->dstk.mmac; + Line *l; - Line *l = nasm_malloc(sizeof(Line)); + nasm_new(l); l->next = defining->expansion; l->first = tline; l->finishes = NULL; + l->where = istk->where; defining->expansion = l; /* @@ -6713,16 +7026,30 @@ static Token *make_tok_char(Token *next, char op) return t; } -static void pp_list_one_macro(MMacro *m, errflags severity) +/* + * Descend the istk looking for macro definitions; we have to + * recurse because we want to show the messages in top-down order. + */ +static void pp_list_macro_istk(Include *inc, errflags severity) { - if (!m) - return; - - /* We need to print the mstk.mmac list in reverse order */ - pp_list_one_macro(m->mstk.mmac, severity); + MMacro *m; + Include *inext; + + /* Find the next higher level true macro invocation if any */ + inext = inc->next; + if (inext && inext->mstk.mmac) { + while (inext) { + if (inext->mstk.mstk->name) { + pp_list_macro_istk(inext, severity); + break; + } + inext = inext->next; + } + } - if (m->name && !m->nolist) { - src_set(m->xline + m->lineno, m->fname); + m = inc->mstk.mstk; + if (m && m->name && !m->nolist) { + src_update(inc->where); nasm_error(severity, "... from macro `%s' defined", m->name); } } @@ -6731,12 +7058,12 @@ static void pp_error_list_macros(errflags severity) { struct src_location saved; + if (!istk) + return; + severity |= ERR_PP_LISTMACRO | ERR_NO_SEVERITY | ERR_HERE; saved = src_where(); - - if (istk) - pp_list_one_macro(istk->mstk.mmac, severity); - + pp_list_macro_istk(istk, severity); src_update(saved); } diff --git a/asm/srcfile.c b/asm/srcfile.c index 0f35c5af..a27fffac 100644 --- a/asm/srcfile.c +++ b/asm/srcfile.c @@ -85,13 +85,3 @@ void src_set(int32_t line, const char *fname) src_set_fname(fname); src_set_linnum(line); } - -struct src_location src_update(struct src_location whence) -{ - struct src_location oldhere = _src_here; - - src_set_fname(whence.filename); - src_set_linnum(whence.lineno); - - return oldhere; -} diff --git a/asm/srcfile.h b/asm/srcfile.h index 3af6595e..759ceabf 100644 --- a/asm/srcfile.h +++ b/asm/srcfile.h @@ -62,6 +62,7 @@ static inline int32_t src_get_linnum(void) { return _src_here.lineno; } + /* Can be used when there is no need for the old information */ void src_set(int32_t line, const char *filename); @@ -91,12 +92,23 @@ static inline int32_t src_get(int32_t *xline, const char **xname) } /* - * Returns and sets/returns the current information as a structure. + * Returns the current information as a structure. */ static inline struct src_location src_where(void) { return _src_here; } -struct src_location src_update(struct src_location); + +/* + * Sets the current information. The filename member of the structure + * *must* have been previously returned by src_get(), src_where(), or + * src_get_fname() and therefore be present in the hash. + */ +static inline struct src_location src_update(struct src_location whence) +{ + struct src_location old = _src_here; + _src_here = whence; + return old; +} #endif /* ASM_SRCFILE_H */ diff --git a/doc/changes.src b/doc/changes.src index 84abcfd5..85f3a9e2 100644 --- a/doc/changes.src +++ b/doc/changes.src @@ -9,77 +9,92 @@ since 2007. \S{cl-2.15} Version 2.15 +\b Warn for strange legacy behavior regarding empty arguments in +multi-line macro expansion, but try to match legacy behavior in most +cases. Legacy behavior can be disabled with the directive \c{%pragma +preproc sane_empty_expansion}, see \k{mlmacro} and +\k{pragma-preproc}. + +\b A much more sensible limit to expression evaluation depth. The +previously defined limit would rarely trigger before NASM died with a +stack overrun error on most systems. See \k{opt-limit}. + \b The state of warnings can now be saved and restored via the \c{[WARNING PUSH]} and \c{[WARNING POP]} directives. See \k{asmdir-warning}. -\b The "sectalign on|off" switch does not affect an explicit directive. See -\k{sectalign} +\b The \c{sectalign on|off} switch does not affect an explicit directive. See +\k{sectalign}. -\b Added build option to enable building with profiling (--enable-profiling). +\b Added \c{configure} option to enable building with profiling +(\c{--enable-profiling}). -\b Added support of long pathnames, up to 32767 of UTF-16 characters, on -Windows. +\b Attempt to support of long path names, up to 32767 of UTF-16 +characters, on Windows. -\b Fixed 'mismatch in operand sizes' error in MOVDDUP instruction. +\b Fixed 'mismatch in operand sizes' error in the \c{MOVDDUP}, +\c{CMPXCHG8B} and \c{CMPXCHG16B} instructions. \b Improved error messages in the string transformation routine. -\b Removed obsolete '-gnu-elf-extensions' option and a warning about 8- and 16-bit relocation -generation. See \k{elf16} +\b Removed obsolete \c{gnu-elf-extensions} warning about 8- and 16-bit +relocation generation. See \k{elf16} -\b Added group aliases for all prefixed warnings. See \k{opt-w} +\b Added group aliases for all prefixed warnings. See \k{opt-w}. \b Allowed building with MSVC versions older than 1700. -\b Fixed to recognize a comma as a single-line macros argument -separator. - -\b Added implicitly sized versions of the K instructions, which allows the K -instructions to be specified without a size suffix as long as the operands are -sized. +\b Added implicitly sized versions of the \c{K...} instructions, which +allows the \c{K...} instructions to be specified without a size suffix as +long as the operands are sized. -\b Added -L option for additional listing information. See \k{opt-L} +\b Added \c{-L} option for additional listing information. See \k{opt-L}. -\b Made an empty string usable as an unused argument in macros. See -\k{define}. - -\b Added warnings for obsolete instructions for a specified CPU. +\b Added some warnings for obsolete instructions for a specified CPU. \b Deprecated \c{-hf} and \c{-y} options. Use \c{-h} instead. \b Made DWARF as the default debug format for ELF. -\b Added a %pragma to set or clear listing options (%pragma list options +bempf). +\b Added \c{%pragma list} \e{options...} to set or clear listing options +(see \c{opt-L}). + +\b Allowed immediate syntax for \c{LEA} instruction (ignore operand +size completely). -\b Allowed immediate syntax for LEA instruction (ignore operand size completely). +\b Added limited functionality MASM compatibility package. See +\k{pkg_masm}. -\b Added limited functionality MASM compatibility package. See \k{pkg_masm}. +\b Add single-line macros aliases using \c{%defalias} or +\c{%idefalias}. These behave like a kind of "symbolic links" for +single-line macros. See \k{defalias} and \c{clear}. -\b Added support of macros aliases using %defalias, %idefalias. See \k{defalias}. +\b Added support for stringify, nostrip, evaluating, and greedy +single-line macro arguments. See \k{define}. -\b Added support for stringify, nostrip, greedy single-line macro arguments. See \k{define}. +\b Unused single-line macro arguments no longer need to have a +specified name. See \k{define}. \b Added conditional comma operator \c{%,}. See \k{cond-comma}. -\b Changed private namespace from __foo__ to __?foo?__, so a user namespace starting from underscore -is now clean from symbols. +\b Changed private namespace from \c{__foo__} to \c{__?foo?__}, so a user +namespace starting from underscore is now clean from symbols. For +backwards compatibility, the previous names are defined as aliases; see +\k{defalias}, \k{clear} and \k{stdmac}. \b Added support of ELF weak symbols and external references. See \k{elfglob}. \b Changed the behavior of the EXTERN keyword and introduced REQUIRED keyword. See \k{required}. -\b Added %ifusable and %ifusing directives. See \k{macropkg}. +\b Added \c{%ifusable} and \c{%ifusing} directives. See \k{macropkg}. \b Made various performance improvements and stability fixes in macro preprocessor engine. \b Improved NASM error handling and cleaned up error messages. -\b Bugzilla bugfixes: 3392472, 3392554, 3392560, 3392564, 3392570, 3392576, 3392585, -3392590, 3392597, 3392599, 3392601, 3392602, 3392603, 3392607, 3392612, 3392614, 3392623, -3392626, 3392630, 3392640, 3392649, 3392659, 3392660, 3392661. +\b Many, many bug fixes. \S{cl-2.14.03} Version 2.14.03 @@ -161,7 +176,7 @@ renaming. See \k{opt-pfix}. from the command line. See \k{mangling}. \b Supported generic \c{%pragma} namespaces, \c{output} and \c{debug}. See -\k{gen-namespace}. +\k{pragma}. \b Added the \c{--pragma} command line option to inject a \c{%pragma} directive. See \k{opt-pragma}. diff --git a/doc/nasmdoc.src b/doc/nasmdoc.src index 6c7b851a..4378a0a2 100644 --- a/doc/nasmdoc.src +++ b/doc/nasmdoc.src @@ -1,6 +1,6 @@ \# -------------------------------------------------------------------------- \# -\# Copyright 1996-2019 The NASM Authors - All Rights Reserved +\# Copyright 1996-2020 The NASM Authors - All Rights Reserved \# See the file AUTHORS included with the NASM distribution for \# the specific copyright holders. \# @@ -461,29 +461,34 @@ with \c{[list +]}, (the default, obviously). There is no "user form" (without the brackets). This can be used to list only sections of interest, avoiding excessively long listings. -\S{opt-L} The \i\c{-L} Option: Additional Listing Info +\S{opt-L} The \i\c{-L} Option: Additional or Modified Listing Info Use this option to specify listing output details. Supported options are: -\c{-Le} emit each line after processing through the preprocessor +\c{-Lb} show builtin macro packages (standard and \c{%use}) -\c{-Ls} show all single-line macro definitions +\c{-Ld} show byte and repeat counts in decimal, not hex + +\c{-Le} show the preprocessed input + +\c{-Lf} ignore \c{.nolist} and force listing output \c{-Lm} show multi-line macro calls with expanded parameters -\c{-Lp} output a list file in every pass +\c{-Lp} output a list file in every pass, in case of errors -\c{-Ld} show byte and repeat counts in decimal, not hex +\c{-Ls} show all single-line macro definitions -\c{-Lb} show builtin macro packages +\c{-Lw} flush the output after every line (very slow!) -\c{-Lf} ignore .nolist and force output +\c{-L+} enable \e{all} listing options -\c{-Lw} flush the output after every line +These options can be enabled or disabled at runtime using the +\c{%pragma list options} directive: -\c{-L+} enable all listing options +\c %pragma list options [+|-]flags... \S{opt-M} The \i\c{-M} Option: Generate \i{Makefile Dependencies} @@ -919,13 +924,19 @@ effectively unlimited. passes. Default is 1000. \b\c{--limit-macro-levels}: Define maximum depth of macro expansion -(in preprocess). Default is 1000000. +(in preprocess). Default is 10000 + +\b\c{--limit-macro-tokens}: Maximum number of tokens processed during +single-line macro expansion. Default is 10000000. + +\b\c{--limit-mmacros}: Maximum number of multi-line macros processed +before returning to the top-level input. Default is 100000. \b\c{--limit-rep}: Maximum number of allowed preprocessor loop, defined under \c{%rep}. Default is 1000000. \b\c{--limit-eval}: This number sets the boundary condition of allowed -expression length. Default is 1000000. +expression length. Default is 8192 on most systems. \b\c{--limit-lines}: Total number of source lines as allowed to be processed. Default is 2000000000. @@ -2071,20 +2082,38 @@ Then everywhere the macro \c{foo} is invoked, it will be expanded according to the most recent definition. This is particularly useful when defining single-line macros with \c{%assign} (see \k{assign}). -It is possible to define an empty string in the arguments list to specify -that the argument is unused explicitly. The construction like: +The following additional features were added in NASM 2.15: + +It is possible to define an empty string instead of an argument name +if the argument is never used. For example: + +\c %define ereg(foo,) e %+ foo +\c mov eax,ereg(dx,cx) + +A single pair of parentheses is a subcase of a single, unused argument: \c %define myreg() eax \c mov edx,myreg() -is also perfectly valid, and it means that macro \c{myreg} has zero arguments - -behavior similar to preprocessor in C. +This is similar to the behavior of the C preprocessor. -As of version 2.15, NASM supports special types of macros arguments: -If an argument declared with an \c{&}, a macro parameter would be quoted as a -string. -If declared with a \c{+}, it is a greedy or variadic parameter. -If declared with an \c{!}, NASM will not try to strip whitespace and braces (useful with \c{&}). +\b If declared with an \c{=}, NASM will evaluate the argument as an +expression after expansion. + +\b If an argument declared with an \c{&}, a macro parameter will be +turned into a quoted string after expansion. + +\b If declared with a \c{+}, it is a greedy or variadic parameter; it +includes any subsequent commas and parameters. + +\b If declared with an \c{!}, NASM will not strip whitespace and +braces (useful in conjunction with \c{&}). + +For example: + +\c %define xyzzy(=expr,&val) expr, str +\c %define plugh(x) xyzzy(x,x) +\c db plugh(3+5), `\0` ; Expands to: db 8, "3+5", `\0` You can \i{pre-define} single-line macros using the `-d' option on the NASM command line: see \k{opt-d}. @@ -2135,6 +2164,9 @@ Now, each time that \c{isFalse} is called, it expands to 1, as that is what the embedded macro \c{isTrue} expanded to at the time that \c{isFalse} was defined. +\c{%xdefine} and \c{%ixdefine} supports argument expansion exactly the +same way that \c{%define} and \c{%idefine} does. + \S{indmacro} \i{Macro Indirection}: \I\c{%[}\c{%[...]} @@ -2317,19 +2349,24 @@ is equivalent to \c{%defalias}, and its case-insensitive counterpart \c{%idefalias}, define an alias to a macro, i.e. equivalent of a symbolic link. -When used with various macro defining and undefining directives, it affects the -aliased macro. This functionality is intended for being able to rename macros while -retaining the legacy names. +When used with various macro defining and undefining directives, it +affects the aliased macro. This functionality is intended for being +able to rename macros while retaining the legacy names. When an alias is defined, but the aliased macro is then undefined, the aliases can legitimately point to nonexistent macros. -The single alias can be undefined using \c{%undefalias} directive. +The alias can be undefined using the \c{%undefalias} directive. \e{All} +aliases can be undefined using the \c{%clear defalias} directive. This +includes backwards compatibility aliases defined by NASM itself. -To disable all the single-line macro aliases, use \c{%aliases off} directive. +To disable aliases without undefining them, use the \c{%aliases off} +directive. To check whether an alias is defined, use \c{%ifdefalias}. +This + \S{cond-comma} \i{Conditional Comma Operator}: \i\c{%,} @@ -2433,7 +2470,7 @@ this. \c %endmacro This defines a C-like function prologue as a macro: so you would -invoke the macro with a call such as +invoke the macro with a call such as: \c myfunc: prologue 12 @@ -2456,7 +2493,7 @@ unless you define them using the alternative directive \c{%imacro}. If you need to pass a comma as \e{part} of a parameter to a multi-line macro, you can do that by enclosing the entire parameter in \I{braces, around macro parameters}braces. So you could code -things like +things like: \c %macro silly 2 \c @@ -2468,6 +2505,15 @@ things like \c silly 'ab', string_ab ; string_ab: db 'ab' \c silly {13,10}, crlf ; crlf: db 13,10 +The behavior with regards to empty arguments at the end of multi-line +macros before NASM 2.15 was often very strange. For backwards +compatibility, NASM attempts to recognize cases where the legacy +behavior would give unexpected results, and issues a warning, but +largely tries to match the legacy behavior. This can be disabled with +the \c{%pragma} (see \k{pragma-preproc}): + +\c %pragma preproc sane_empty_expansion + \S{mlmacover} Overloading Multi-Line Macros\I{overloading, multi-line macros} @@ -3337,7 +3383,7 @@ longer true. Thus, the following lines are equivalent: Standard macro packages are protected from multiple inclusion. When a standard macro package is used, a testable single-line macro of the -form \c{__USE_}\e{package}\c{__} is also defined, see \k{use_def}. +form \c{__?USE_}\e{package}\c{?__} is also defined, see \k{use_def}. \H{ctxstack} The \i{Context Stack} @@ -3756,6 +3802,66 @@ the user. For example: \c %endif +\H{pragma} \i\c{%pragma}: Setting Options + +The \c{%pragma} directive controls a number of options in +NASM. Pragmas are intended to remain backwards compatible, and +therefore an unknown \c{%pragma} directive is not an error. + +The various pragmas are documented with the options they affect. + +The general structure of a NASM pragma is: + +\c{%pragma} \e{namespace} \e{directive} [\e{arguments...}] + +Currently defined namespaces are: + +\b \c{ignore}: this \c{%pragma} is unconditionally ignored. + +\b \c{preproc}: preprocessor, see \k{pragma-preproc}. + +\b \c{limit}: resource limits, see \k{opt-limit}. + +\b \c{asm}: the parser and assembler proper. Currently no such pragmas +are defined. + +\b \c{list}: listing options, see \k{opt-L}. + +\b \c{file}: general file handling options. Currently no such pragmas +are defined. + +\b \c{input}: input file handling options. Currently no such pragmas +are defined. + +\b \c{output}: output format options. + +\b \c{debug}: debug format options. + +In addition, the name of any output or debug format, and sometimes +groups thereof, also constitue \c{%pragma} namespaces. The namespaces +\c{output} and \c{debug} simply refer to \e{any} output or debug +format, respectively. + +For example, to prepend an underscore to global symbols regardless of +the output format (see \k{mangling}): + +\c %pragma output gprefix _ + +... whereas to prepend an underscore to global symbols only when the +output is either \c{win32} or \c{win64}: + +\c %pragma win gprefix _ + + +\S{pragma-preproc} Preprocessor Pragmas + +The only preprocessor \c{%pragma} defined in NASM 2.15 is: + +\b \c{%pragma preproc sane_empty_expansion}: disables legacy +compatibility handling of braceless empty arguments to multi-line +macros. See \k{mlmacro} and \k{opt-w}. + + \H{otherpreproc} \i{Other Preprocessor Directives} \S{line} \i\c{%line} Directive @@ -3779,7 +3885,8 @@ file which this line corresponds to. \c{mmm} is an optional parameter which specifies a line increment value; each line of the input file read in is considered to correspond to \c{mmm} lines of the original source file. Finally, \c{filename} is an optional parameter which -specifies the file name of the original source file. +specifies the file name of the original source file. It may be a +quoted string. After reading a \c{%line} preprocessor directive, NASM will report all file name and line numbers relative to the values specified @@ -3789,7 +3896,10 @@ If the command line option \i\c{--no-line} is given, all \c{%line} directives are ignored. This may be useful for debugging preprocessed code. See \k{opt-no-line}. +Starting in NASM 2.15, \c{%line} directives are processed before any +other processing takes place. +\# This isn't a directive, it should be moved elsewhere... \S{getenv} \i\c{%!}\e{variable}: Read an Environment Variable. The \c{%!}\e{variable} directive makes it possible to read the value of an @@ -3812,21 +3922,59 @@ variable, for example: \c %defstr C_colon %!'C:' -\H{stdmac} \i{Standard Macros} +\S{clear} \i\c\{%clear}: Clear All Macro Definitions + +The directive \c{%clear} clears all definitions of a certain type, +\e{including the ones defined by NASM itself.} This can be useful when +preprocessing non-NASM code, or to drop backwards compatibility +aliases. + +The syntax is: + +\c %clear [global|context] type... + +... where \c{context} indicates that this applies to context-local +macros only; the default is \c{global}. + +\c{type} can be one or more of: + +\b \c{define} single-line macros + +\b \c{defalias} single-line macro aliases (useful to remove backwards +compatibility aliases) + +\b \c{alldefine} same as \c{define defalias} -NASM defines a set of standard macros, which are already defined -when it starts to process any source file. If you really need a -program to be assembled with no pre-defined macros, you can use the -\i\c{%clear} directive to empty the preprocessor of everything but -context-local preprocessor variables and single-line macros. +\b \c{macro} multi-line macros + +\b \c{all} same as \c{alldefine macro} (default) + +In NASM 2.14 and earlier, only the single syntax \c{%clear} was +supported, which is equivalent to \c{%clear global all}. + + + + +\C{stdmac} \i{Standard Macros} + +NASM defines a set of standard macros, which are already defined when +it starts to process any source file. If you really need a program to +be assembled with no pre-defined macros, you can use the \i\c{%clear} +directive to empty the preprocessor of everything but context-local +preprocessor variables and single-line macros, see \k{clear}. Most \i{user-level assembler directives} (see \k{directive}) are implemented as macros which invoke primitive directives; these are described in \k{directive}. The rest of the standard macro set is described here. +For compability with NASM versions before NASM 2.15, most standard +macros of the form \c{__?foo?__} have aliases of form \c{__foo__} (see +\k{defalias}). These can be removed with the directive \c{%clear +defalias}. -\S{stdmacver} \i{NASM Version} Macros + +\H{stdmacver} \i{NASM Version} Macros The single-line macros \i\c{__?NASM_MAJOR?__}, \i\c{__?NASM_MINOR?__}, \i\c{__?NASM_SUBMINOR?__} and \i\c{__?_NASM_PATCHLEVEL?__} expand to the @@ -3872,7 +4020,7 @@ would expand to \c db "0.98.32" -\S{fileline} \i\c{__?FILE?__} and \i\c{__?LINE?__}: File Name and Line Number +\H{fileline} \i\c{__?FILE?__} and \i\c{__?LINE?__}: File Name and Line Number Like the C preprocessor, NASM allows the user to find out the file name and line number containing the current instruction. The macro @@ -3887,8 +4035,8 @@ definition (either single-line or multi-line) will return the line number of the macro \e{call}, rather than \e{definition}. So to determine where in a piece of code a crash is occurring, for example, one could write a routine \c{stillhere}, which is passed a -line number in \c{EAX} and outputs something like `line 155: still -here'. You could then write a macro +line number in \c{EAX} and outputs something like \c{line 155: still +here}. You could then write a macro: \c %macro notdeadyet 0 \c @@ -3903,7 +4051,7 @@ and then pepper your code with calls to \c{notdeadyet} until you find the crash point. -\S{bitsm} \i\c{__?BITS?__}: Current BITS Mode +\H{bitsm} \i\c{__?BITS?__}: Current Code Generation Mode The \c{__?BITS?__} standard macro is updated every time that the BITS mode is set using the \c{BITS XX} or \c{[BITS XX]} directive, where XX is a valid mode @@ -3911,7 +4059,7 @@ number of 16, 32 or 64. \c{__?BITS?__} receives the specified mode number and makes it globally available. This can be very useful for those who utilize mode-dependent macros. -\S{ofmtm} \i\c{__?OUTPUT_FORMAT?__}: Current Output Format +\H{ofmtm} \i\c{__?OUTPUT_FORMAT?__}: Current Output Format The \c{__?OUTPUT_FORMAT?__} standard macro holds the current output format name, as given by the \c{-f} option or NASM's default. Type @@ -3923,7 +4071,7 @@ format name, as given by the \c{-f} option or NASM's default. Type \c %define NEWLINE 10 \c %endif -\S{dfmtm} \i\c{__?DEBUG_FORMAT?__}: Current Debug Format +\H{dfmtm} \i\c{__?DEBUG_FORMAT?__}: Current Debug Format If debugging information generation is enabled, The \c{__?DEBUG_FORMAT?__} standard macro holds the current debug format @@ -3933,7 +4081,7 @@ default. Type \c{nasm -f} \e{output} \c{y} for a list. \c{__?DEBUG_FORMAT?__} is not defined if debugging is not enabled, or if the debug format specified is \c{null}. -\S{datetime} Assembly Date and Time Macros +\H{datetime} Assembly Date and Time Macros NASM provides a variety of macros that represent the timestamp of the assembly session. @@ -3981,7 +4129,7 @@ clock: \c __?POSIX_TIME?__ 1262293242 -\S{use_def} \I\c{__USE_*__}\c{__USE_}\e{package}\c{__}: Package +\H{use_def} \I\c{__?USE_*?__}\c{__?USE_}\e{package}\c{?__}: Package Include Test When a standard macro package (see \k{macropkg}) is included with the @@ -3993,7 +4141,7 @@ For example, if the \c{altreg} package is included (see \k{pkg_altreg}), then the macro \c{__?USE_ALTREG?__} is defined. -\S{pass_macro} \i\c{__?PASS?__}: Assembly Pass +\H{pass_macro} \i\c{__?PASS?__}: Assembly Pass The macro \c{__?PASS?__} is defined to be \c{1} on preparatory passes, and \c{2} on the final pass. In preprocess-only mode, it is set to @@ -4005,6 +4153,8 @@ to generate very strange errors by misusing it, and the semantics may change in future versions of NASM.} +\H{strucs} \i{Structure Data Types} + \S{struc} \i\c{STRUC} and \i\c{ENDSTRUC}: \i{Declaring Structure} Data Types The core of NASM contains no intrinsic means of defining data @@ -4125,8 +4275,9 @@ line: \c db 'hello, world' \c db 13,10,0 +\H{alignment} \i{Alignment} Control -\S{align} \i\c{ALIGN} and \i\c{ALIGNB}: Data Alignment +\S{align} \i\c{ALIGN} and \i\c{ALIGNB}: Code and Data Alignment The \c{ALIGN} and \c{ALIGNB} macros provides a convenient way to align code or data on a word, longword, paragraph or other boundary. @@ -4739,27 +4890,36 @@ private extensions mentioned in \k{global}. \H{mangling} \i\c{(G|L)PREFIX}, \i\c{(G|L)POSTFIX}: Mangling Symbols \c{PREFIX}, \c{GPREFIX}, \c{LPREFIX}, \c{POSTFIX}, \c{GPOSTFIX}, and -\c{LPOSTFIX} directives can prepend or append the given argument to -a certain type of symbols. The directive should be as a preprocess -statement. Each usage is: +\c{LPOSTFIX} directives can prepend or append a string to a certain +type of symbols, normally to fit specific ABI conventions \b\c{PREFIX}|\c{GPREFIX}: Prepend the argument to all \c{EXTERN} -\c{COMMON}, \c{STATIC}, and \c{GLOBAL} symbols +\c{COMMON}, \c{STATIC}, and \c{GLOBAL} symbols. \b\c{LPREFIX}: Prepend the argument to all other symbols -such as Local Labels, and backend defined symbols +such as local labels and backend defined symbols. \b\c{POSTFIX}|\c{GPOSTFIX}: Append the argument to all \c{EXTERN} -\c{COMMON}, \c{STATIC}, and \c{GLOBAL} symbols +\c{COMMON}, \c{STATIC}, and \c{GLOBAL} symbols. \b\c{LPOSTFIX}: Append the argument to all other symbols -such as Local Labels, and backend defined symbols +such as local labels and backend defined symbols. -This is a macro implemented as a \c{%pragma}: +These a macros implemented as pragmas, and using \c{%pragma} syntax +can be restricted to specific backends (see \k{pragma}): -\c %pragma macho lprefix L_ +\c %pragma macho lprefix L_ -Commandline option is also possible. See also \k{opt-pfix}. +Command line options are also available. See also \k{opt-pfix}. + +One example which supports many ABIs: + +\c ; The most common conventions +\c %pragma output gprefix _ +\c %pragma output lprefix L_ +\c ; ELF uses a different convention +\c %pragma elf gprefix ; empty +\c %pragma elf lprefix .L Some toolchains is aware of a particular prefix for its own optimization options, such as code elimination. For instance, Mach-O backend has a @@ -4774,22 +4934,6 @@ Note that local symbols declared with \c{STATIC} (\k{static}) are excluded from the symbol mangling and also not marked as global. -\H{gen-namespace} \i\c{OUTPUT}, \i\c{DEBUG}: Generic Namespaces - -\c{OUTPUT} and \c{DEBUG} are generic \c{%pragma} namespaces that are -supposed to redirect to the current output and debug formats. -For example, when mangling local symbols via the generic namespace: - -\c %pragma output gprefix _ - -This is useful when the directive is needed to be output format -agnostic. - -The example is also euquivalent to this, when the output format is ELF: - -\c %pragma elf gprefix _ - - \H{CPU} \i\c{CPU}: Defining CPU Dependencies The \i\c{CPU} directive restricts assembly to those instructions which @@ -7766,7 +7910,7 @@ You would then copy \c{library.so.1.2} into the library directory, and create \c{library.so.1} as a symbolic link to it. -\C{mixsize} Mixing 16 and 32 Bit Code +\C{mixsize} Mixing 16- and 32-bit Code This chapter tries to cover some of the issues, largely related to unusual forms of addressing and jump instructions, encountered when diff --git a/nasmlib/hashtbl.c b/nasmlib/hashtbl.c index 3f4a957c..9a4c0b55 100644 --- a/nasmlib/hashtbl.c +++ b/nasmlib/hashtbl.c @@ -277,8 +277,9 @@ void hash_free_all(struct hash_table *head, bool free_keys) const struct hash_node *np; hash_for_each(head, it, np) { - nasm_free(np->data); - if (free_keys) + if (np->data) + nasm_free(np->data); + if (free_keys && np->key) nasm_free((void *)np->key); } diff --git a/test/emptyarg.asm b/test/emptyarg.asm new file mode 120000 index 00000000..0627dfae --- /dev/null +++ b/test/emptyarg.asm @@ -0,0 +1 @@ +../../nasm-2.14.xx/test/emptyarg.asm
\ No newline at end of file diff --git a/test/ifdef.asm b/test/ifdef.asm new file mode 100644 index 00000000..606cbd27 --- /dev/null +++ b/test/ifdef.asm @@ -0,0 +1,7 @@ +%define FOO(x) x +%ifndef FOO + %define FOO(x) _ %+ x +%endif + +FOO(this): + jmp this diff --git a/travis/test/avx512f.bin.t b/travis/test/avx512f.bin.t Binary files differnew file mode 100644 index 00000000..d021e674 --- /dev/null +++ b/travis/test/avx512f.bin.t diff --git a/travis/test/avx512f.json b/travis/test/avx512f.json index 4537b4a3..0ad5c159 100644 --- a/travis/test/avx512f.json +++ b/travis/test/avx512f.json @@ -6,8 +6,7 @@ "source": "avx512f.asm", "option": "-O0 -DSRC", "target": [ - { "stderr": "avx512f.stderr" } + { "output": "avx512f.bin" } ], - "error": "expected" } ] diff --git a/travis/test/avx512f.stderr b/travis/test/avx512f.stderr deleted file mode 100644 index 8e52fbcc..00000000 --- a/travis/test/avx512f.stderr +++ /dev/null @@ -1,572 +0,0 @@ -./travis/test/avx512f.asm:4398: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4399: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4400: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4401: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4402: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4403: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4404: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4405: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4406: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4407: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4408: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4409: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4410: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4411: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4412: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4413: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4414: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4415: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4416: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4417: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4418: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4419: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4420: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4421: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4422: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4423: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4424: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4425: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4426: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4427: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4428: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4429: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4430: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4431: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4432: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4433: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4434: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4435: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4436: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4437: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4438: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4439: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4440: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4441: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4442: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4443: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4444: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4445: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4446: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4447: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4448: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4449: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4450: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4451: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4452: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4453: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4454: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4455: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4456: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4457: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4458: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4459: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4460: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4461: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4462: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4529: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4530: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4531: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4532: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4533: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4534: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4535: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4536: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4537: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4538: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4539: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4540: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4541: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4542: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4543: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4544: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4545: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4546: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4547: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4548: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4549: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4550: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4551: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4552: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4553: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4554: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4555: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4556: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4557: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4558: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4559: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4560: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4561: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4562: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4563: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4564: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4565: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4566: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4567: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4568: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4569: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4570: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4571: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4572: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4573: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4574: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4575: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4576: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4577: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4578: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4579: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4580: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4581: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4582: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4583: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4584: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4585: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4586: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4587: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4588: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4589: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4590: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4591: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4592: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4593: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4608: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4609: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4610: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4611: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4612: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4613: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4614: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4615: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4616: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4617: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4618: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4619: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4620: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4621: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4622: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4623: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4624: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4625: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4626: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4627: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4628: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4629: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4630: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4631: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4632: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4633: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4634: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4635: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4636: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4637: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4638: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4639: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4640: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4641: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4642: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4643: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4644: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4645: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4646: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4647: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4648: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4649: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4650: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4651: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4652: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4653: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4654: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4655: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4656: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4657: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4658: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4659: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4660: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4661: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4662: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4663: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4664: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4665: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4666: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4667: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4668: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4669: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4670: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4671: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4672: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4673: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4674: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4675: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4676: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4677: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4678: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4679: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4680: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4681: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4682: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4683: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4684: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4685: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4700: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4701: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4702: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4703: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4704: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4705: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4706: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4707: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4708: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4709: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4710: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4711: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4712: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4713: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4714: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4715: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4716: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4717: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4718: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4719: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4720: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4721: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4722: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4723: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4724: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4725: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4726: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4727: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4728: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4729: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4730: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4731: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4732: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4733: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4734: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4735: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4736: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4737: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4738: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4739: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4740: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4741: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4742: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4743: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4744: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4745: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4746: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4747: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4748: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4749: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4750: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4751: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4752: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4753: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4754: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4755: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4756: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4757: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4758: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4759: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4760: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4761: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4762: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4763: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4764: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4765: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4766: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4767: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4768: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4769: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4770: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4771: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4772: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4773: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4774: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4775: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4776: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here -./travis/test/avx512f.asm:4777: error: parser: instruction expected -./travis/test/avx512f.asm:16: ... from macro `testcase' defined here
\ No newline at end of file diff --git a/travis/test/utf-error.stderr b/travis/test/utf-error.stderr index c4b74a20..5d2786da 100644 --- a/travis/test/utf-error.stderr +++ b/travis/test/utf-error.stderr @@ -1,18 +1,15 @@ ./travis/test/utf.asm:63: error: __?utf16?__ must be followed by a string constant ./travis/test/utf.asm:64: error: __?utf16?__ must be followed by a string constant ./travis/test/utf.asm:65: error: unterminated __?utf16?__ function -./travis/test/utf.asm:65: error: comma expected after operand 2 ./travis/test/utf.asm:66: error: unterminated __?utf16?__ function ./travis/test/utf.asm:67: error: invalid input string to __?utf16?__ ./travis/test/utf.asm:69: error: __?utf16le?__ must be followed by a string constant ./travis/test/utf.asm:70: error: __?utf16le?__ must be followed by a string constant ./travis/test/utf.asm:71: error: unterminated __?utf16le?__ function -./travis/test/utf.asm:71: error: comma expected after operand 2 ./travis/test/utf.asm:72: error: unterminated __?utf16le?__ function ./travis/test/utf.asm:73: error: invalid input string to __?utf16le?__ ./travis/test/utf.asm:75: error: __?utf16be?__ must be followed by a string constant ./travis/test/utf.asm:76: error: __?utf16be?__ must be followed by a string constant ./travis/test/utf.asm:77: error: unterminated __?utf16be?__ function -./travis/test/utf.asm:77: error: comma expected after operand 2 ./travis/test/utf.asm:78: error: unterminated __?utf16be?__ function ./travis/test/utf.asm:79: error: invalid input string to __?utf16be?__ diff --git a/travis/test/weirdpaste.i.t b/travis/test/weirdpaste.i.t index ac7ddf08..1725bdf5 100644 --- a/travis/test/weirdpaste.i.t +++ b/travis/test/weirdpaste.i.t @@ -1,9 +1,4 @@ -%line 3+1 ./travis/test/weirdpaste.asm - - - -%line 10+1 ./travis/test/weirdpaste.asm - +%line 11+1 ./travis/test/weirdpaste.asm dw 25 %line 18+1 ./travis/test/weirdpaste.asm @@ -1 +1 @@ -2.15rc5 +2.15rc8 diff --git a/x86/insns.dat b/x86/insns.dat index cec96788..61e9c007 100644 --- a/x86/insns.dat +++ b/x86/insns.dat @@ -1,6 +1,6 @@ ;; -------------------------------------------------------------------------- ;; -;; Copyright 1996-2019 The NASM Authors - All Rights Reserved +;; Copyright 1996-2020 The NASM Authors - All Rights Reserved ;; See the file AUTHORS included with the NASM distribution for ;; the specific copyright holders. ;; @@ -3796,6 +3796,374 @@ VBROADCASTSS zmmreg|mask|z,mem32 [rm:t1s: evex.512.66.0f38.w0 VBROADCASTSS xmmreg|mask|z,xmmreg [rm: evex.128.66.0f38.w0 18 /r ] AVX512VL,AVX512,FUTURE VBROADCASTSS ymmreg|mask|z,xmmreg [rm: evex.256.66.0f38.w0 18 /r ] AVX512VL,AVX512,FUTURE VBROADCASTSS zmmreg|mask|z,xmmreg [rm: evex.512.66.0f38.w0 18 /r ] AVX512,FUTURE +VCMPEQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 00 ] AVX512VL,AVX512,FUTURE +VCMPEQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 00 ] AVX512VL,AVX512,FUTURE +VCMPEQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 00 ] AVX512,FUTURE +VCMPEQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 00 ] AVX512VL,AVX512,FUTURE +VCMPEQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 00 ] AVX512VL,AVX512,FUTURE +VCMPEQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 00 ] AVX512,FUTURE +VCMPEQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 00 ] AVX512,FUTURE +VCMPEQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 00 ] AVX512,FUTURE +VCMPEQ_OQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 00 ] AVX512VL,AVX512,FUTURE +VCMPEQ_OQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 00 ] AVX512VL,AVX512,FUTURE +VCMPEQ_OQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 00 ] AVX512,FUTURE +VCMPEQ_OQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 00 ] AVX512VL,AVX512,FUTURE +VCMPEQ_OQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 00 ] AVX512VL,AVX512,FUTURE +VCMPEQ_OQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 00 ] AVX512,FUTURE +VCMPEQ_OQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 00 ] AVX512,FUTURE +VCMPEQ_OQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 00 ] AVX512,FUTURE +VCMPLTPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 01 ] AVX512VL,AVX512,FUTURE +VCMPLTPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 01 ] AVX512VL,AVX512,FUTURE +VCMPLTPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 01 ] AVX512,FUTURE +VCMPLTPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 01 ] AVX512VL,AVX512,FUTURE +VCMPLTPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 01 ] AVX512VL,AVX512,FUTURE +VCMPLTPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 01 ] AVX512,FUTURE +VCMPLTSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 01 ] AVX512,FUTURE +VCMPLTSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 01 ] AVX512,FUTURE +VCMPLT_OSPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 01 ] AVX512VL,AVX512,FUTURE +VCMPLT_OSPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 01 ] AVX512VL,AVX512,FUTURE +VCMPLT_OSPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 01 ] AVX512,FUTURE +VCMPLT_OSPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 01 ] AVX512VL,AVX512,FUTURE +VCMPLT_OSPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 01 ] AVX512VL,AVX512,FUTURE +VCMPLT_OSPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 01 ] AVX512,FUTURE +VCMPLT_OSSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 01 ] AVX512,FUTURE +VCMPLT_OSSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 01 ] AVX512,FUTURE +VCMPLEPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 02 ] AVX512VL,AVX512,FUTURE +VCMPLEPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 02 ] AVX512VL,AVX512,FUTURE +VCMPLEPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 02 ] AVX512,FUTURE +VCMPLEPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 02 ] AVX512VL,AVX512,FUTURE +VCMPLEPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 02 ] AVX512VL,AVX512,FUTURE +VCMPLEPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 02 ] AVX512,FUTURE +VCMPLESD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 02 ] AVX512,FUTURE +VCMPLESS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 02 ] AVX512,FUTURE +VCMPLE_OSPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 02 ] AVX512VL,AVX512,FUTURE +VCMPLE_OSPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 02 ] AVX512VL,AVX512,FUTURE +VCMPLE_OSPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 02 ] AVX512,FUTURE +VCMPLE_OSPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 02 ] AVX512VL,AVX512,FUTURE +VCMPLE_OSPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 02 ] AVX512VL,AVX512,FUTURE +VCMPLE_OSPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 02 ] AVX512,FUTURE +VCMPLE_OSSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 02 ] AVX512,FUTURE +VCMPLE_OSSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 02 ] AVX512,FUTURE +VCMPUNORDPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 03 ] AVX512VL,AVX512,FUTURE +VCMPUNORDPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 03 ] AVX512VL,AVX512,FUTURE +VCMPUNORDPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 03 ] AVX512,FUTURE +VCMPUNORDPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 03 ] AVX512VL,AVX512,FUTURE +VCMPUNORDPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 03 ] AVX512VL,AVX512,FUTURE +VCMPUNORDPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 03 ] AVX512,FUTURE +VCMPUNORDSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 03 ] AVX512,FUTURE +VCMPUNORDSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 03 ] AVX512,FUTURE +VCMPUNORD_QPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 03 ] AVX512VL,AVX512,FUTURE +VCMPUNORD_QPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 03 ] AVX512VL,AVX512,FUTURE +VCMPUNORD_QPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 03 ] AVX512,FUTURE +VCMPUNORD_QPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 03 ] AVX512VL,AVX512,FUTURE +VCMPUNORD_QPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 03 ] AVX512VL,AVX512,FUTURE +VCMPUNORD_QPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 03 ] AVX512,FUTURE +VCMPUNORD_QSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 03 ] AVX512,FUTURE +VCMPUNORD_QSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 03 ] AVX512,FUTURE +VCMPNEQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 04 ] AVX512VL,AVX512,FUTURE +VCMPNEQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 04 ] AVX512VL,AVX512,FUTURE +VCMPNEQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 04 ] AVX512,FUTURE +VCMPNEQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 04 ] AVX512VL,AVX512,FUTURE +VCMPNEQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 04 ] AVX512VL,AVX512,FUTURE +VCMPNEQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 04 ] AVX512,FUTURE +VCMPNEQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 04 ] AVX512,FUTURE +VCMPNEQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 04 ] AVX512,FUTURE +VCMPNEQ_UQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 04 ] AVX512VL,AVX512,FUTURE +VCMPNEQ_UQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 04 ] AVX512VL,AVX512,FUTURE +VCMPNEQ_UQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 04 ] AVX512,FUTURE +VCMPNEQ_UQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 04 ] AVX512VL,AVX512,FUTURE +VCMPNEQ_UQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 04 ] AVX512VL,AVX512,FUTURE +VCMPNEQ_UQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 04 ] AVX512,FUTURE +VCMPNEQ_UQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 04 ] AVX512,FUTURE +VCMPNEQ_UQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 04 ] AVX512,FUTURE +VCMPNLTPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 05 ] AVX512VL,AVX512,FUTURE +VCMPNLTPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 05 ] AVX512VL,AVX512,FUTURE +VCMPNLTPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 05 ] AVX512,FUTURE +VCMPNLTPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 05 ] AVX512VL,AVX512,FUTURE +VCMPNLTPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 05 ] AVX512VL,AVX512,FUTURE +VCMPNLTPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 05 ] AVX512,FUTURE +VCMPNLTSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 05 ] AVX512,FUTURE +VCMPNLTSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 05 ] AVX512,FUTURE +VCMPNLT_USPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 05 ] AVX512VL,AVX512,FUTURE +VCMPNLT_USPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 05 ] AVX512VL,AVX512,FUTURE +VCMPNLT_USPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 05 ] AVX512,FUTURE +VCMPNLT_USPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 05 ] AVX512VL,AVX512,FUTURE +VCMPNLT_USPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 05 ] AVX512VL,AVX512,FUTURE +VCMPNLT_USPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 05 ] AVX512,FUTURE +VCMPNLT_USSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 05 ] AVX512,FUTURE +VCMPNLT_USSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 05 ] AVX512,FUTURE +VCMPNLEPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 06 ] AVX512VL,AVX512,FUTURE +VCMPNLEPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 06 ] AVX512VL,AVX512,FUTURE +VCMPNLEPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 06 ] AVX512,FUTURE +VCMPNLEPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 06 ] AVX512VL,AVX512,FUTURE +VCMPNLEPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 06 ] AVX512VL,AVX512,FUTURE +VCMPNLEPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 06 ] AVX512,FUTURE +VCMPNLESD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 06 ] AVX512,FUTURE +VCMPNLESS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 06 ] AVX512,FUTURE +VCMPNLE_USPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 06 ] AVX512VL,AVX512,FUTURE +VCMPNLE_USPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 06 ] AVX512VL,AVX512,FUTURE +VCMPNLE_USPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 06 ] AVX512,FUTURE +VCMPNLE_USPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 06 ] AVX512VL,AVX512,FUTURE +VCMPNLE_USPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 06 ] AVX512VL,AVX512,FUTURE +VCMPNLE_USPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 06 ] AVX512,FUTURE +VCMPNLE_USSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 06 ] AVX512,FUTURE +VCMPNLE_USSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 06 ] AVX512,FUTURE +VCMPORDPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 07 ] AVX512VL,AVX512,FUTURE +VCMPORDPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 07 ] AVX512VL,AVX512,FUTURE +VCMPORDPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 07 ] AVX512,FUTURE +VCMPORDPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 07 ] AVX512VL,AVX512,FUTURE +VCMPORDPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 07 ] AVX512VL,AVX512,FUTURE +VCMPORDPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 07 ] AVX512,FUTURE +VCMPORDSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 07 ] AVX512,FUTURE +VCMPORDSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 07 ] AVX512,FUTURE +VCMPORD_QPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 07 ] AVX512VL,AVX512,FUTURE +VCMPORD_QPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 07 ] AVX512VL,AVX512,FUTURE +VCMPORD_QPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 07 ] AVX512,FUTURE +VCMPORD_QPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 07 ] AVX512VL,AVX512,FUTURE +VCMPORD_QPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 07 ] AVX512VL,AVX512,FUTURE +VCMPORD_QPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 07 ] AVX512,FUTURE +VCMPORD_QSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 07 ] AVX512,FUTURE +VCMPORD_QSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 07 ] AVX512,FUTURE +VCMPEQ_UQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 08 ] AVX512VL,AVX512,FUTURE +VCMPEQ_UQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 08 ] AVX512VL,AVX512,FUTURE +VCMPEQ_UQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 08 ] AVX512,FUTURE +VCMPEQ_UQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 08 ] AVX512VL,AVX512,FUTURE +VCMPEQ_UQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 08 ] AVX512VL,AVX512,FUTURE +VCMPEQ_UQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 08 ] AVX512,FUTURE +VCMPEQ_UQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 08 ] AVX512,FUTURE +VCMPEQ_UQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 08 ] AVX512,FUTURE +VCMPNGEPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 09 ] AVX512VL,AVX512,FUTURE +VCMPNGEPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 09 ] AVX512VL,AVX512,FUTURE +VCMPNGEPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 09 ] AVX512,FUTURE +VCMPNGEPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 09 ] AVX512VL,AVX512,FUTURE +VCMPNGEPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 09 ] AVX512VL,AVX512,FUTURE +VCMPNGEPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 09 ] AVX512,FUTURE +VCMPNGESD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 09 ] AVX512,FUTURE +VCMPNGESS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 09 ] AVX512,FUTURE +VCMPNGE_USPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 09 ] AVX512VL,AVX512,FUTURE +VCMPNGE_USPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 09 ] AVX512VL,AVX512,FUTURE +VCMPNGE_USPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 09 ] AVX512,FUTURE +VCMPNGE_USPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 09 ] AVX512VL,AVX512,FUTURE +VCMPNGE_USPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 09 ] AVX512VL,AVX512,FUTURE +VCMPNGE_USPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 09 ] AVX512,FUTURE +VCMPNGE_USSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 09 ] AVX512,FUTURE +VCMPNGE_USSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 09 ] AVX512,FUTURE +VCMPNGTPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0a ] AVX512VL,AVX512,FUTURE +VCMPNGTPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0a ] AVX512VL,AVX512,FUTURE +VCMPNGTPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0a ] AVX512,FUTURE +VCMPNGTPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0a ] AVX512VL,AVX512,FUTURE +VCMPNGTPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0a ] AVX512VL,AVX512,FUTURE +VCMPNGTPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0a ] AVX512,FUTURE +VCMPNGTSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0a ] AVX512,FUTURE +VCMPNGTSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0a ] AVX512,FUTURE +VCMPNGT_USPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0a ] AVX512VL,AVX512,FUTURE +VCMPNGT_USPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0a ] AVX512VL,AVX512,FUTURE +VCMPNGT_USPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0a ] AVX512,FUTURE +VCMPNGT_USPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0a ] AVX512VL,AVX512,FUTURE +VCMPNGT_USPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0a ] AVX512VL,AVX512,FUTURE +VCMPNGT_USPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0a ] AVX512,FUTURE +VCMPNGT_USSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0a ] AVX512,FUTURE +VCMPNGT_USSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0a ] AVX512,FUTURE +VCMPFALSEPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0b ] AVX512VL,AVX512,FUTURE +VCMPFALSEPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0b ] AVX512VL,AVX512,FUTURE +VCMPFALSEPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0b ] AVX512,FUTURE +VCMPFALSEPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0b ] AVX512VL,AVX512,FUTURE +VCMPFALSEPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0b ] AVX512VL,AVX512,FUTURE +VCMPFALSEPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0b ] AVX512,FUTURE +VCMPFALSESD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0b ] AVX512,FUTURE +VCMPFALSESS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0b ] AVX512,FUTURE +VCMPFALSE_OQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0b ] AVX512VL,AVX512,FUTURE +VCMPFALSE_OQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0b ] AVX512VL,AVX512,FUTURE +VCMPFALSE_OQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0b ] AVX512,FUTURE +VCMPFALSE_OQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0b ] AVX512VL,AVX512,FUTURE +VCMPFALSE_OQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0b ] AVX512VL,AVX512,FUTURE +VCMPFALSE_OQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0b ] AVX512,FUTURE +VCMPFALSE_OQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0b ] AVX512,FUTURE +VCMPFALSE_OQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0b ] AVX512,FUTURE +VCMPNEQ_OQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0c ] AVX512VL,AVX512,FUTURE +VCMPNEQ_OQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0c ] AVX512VL,AVX512,FUTURE +VCMPNEQ_OQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0c ] AVX512,FUTURE +VCMPNEQ_OQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0c ] AVX512VL,AVX512,FUTURE +VCMPNEQ_OQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0c ] AVX512VL,AVX512,FUTURE +VCMPNEQ_OQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0c ] AVX512,FUTURE +VCMPNEQ_OQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0c ] AVX512,FUTURE +VCMPNEQ_OQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0c ] AVX512,FUTURE +VCMPGEPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0d ] AVX512VL,AVX512,FUTURE +VCMPGEPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0d ] AVX512VL,AVX512,FUTURE +VCMPGEPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0d ] AVX512,FUTURE +VCMPGEPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0d ] AVX512VL,AVX512,FUTURE +VCMPGEPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0d ] AVX512VL,AVX512,FUTURE +VCMPGEPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0d ] AVX512,FUTURE +VCMPGESD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0d ] AVX512,FUTURE +VCMPGESS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0d ] AVX512,FUTURE +VCMPGE_OSPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0d ] AVX512VL,AVX512,FUTURE +VCMPGE_OSPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0d ] AVX512VL,AVX512,FUTURE +VCMPGE_OSPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0d ] AVX512,FUTURE +VCMPGE_OSPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0d ] AVX512VL,AVX512,FUTURE +VCMPGE_OSPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0d ] AVX512VL,AVX512,FUTURE +VCMPGE_OSPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0d ] AVX512,FUTURE +VCMPGE_OSSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0d ] AVX512,FUTURE +VCMPGE_OSSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0d ] AVX512,FUTURE +VCMPGTPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0e ] AVX512VL,AVX512,FUTURE +VCMPGTPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0e ] AVX512VL,AVX512,FUTURE +VCMPGTPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0e ] AVX512,FUTURE +VCMPGTPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0e ] AVX512VL,AVX512,FUTURE +VCMPGTPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0e ] AVX512VL,AVX512,FUTURE +VCMPGTPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0e ] AVX512,FUTURE +VCMPGTSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0e ] AVX512,FUTURE +VCMPGTSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0e ] AVX512,FUTURE +VCMPGT_OSPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0e ] AVX512VL,AVX512,FUTURE +VCMPGT_OSPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0e ] AVX512VL,AVX512,FUTURE +VCMPGT_OSPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0e ] AVX512,FUTURE +VCMPGT_OSPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0e ] AVX512VL,AVX512,FUTURE +VCMPGT_OSPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0e ] AVX512VL,AVX512,FUTURE +VCMPGT_OSPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0e ] AVX512,FUTURE +VCMPGT_OSSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0e ] AVX512,FUTURE +VCMPGT_OSSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0e ] AVX512,FUTURE +VCMPTRUEPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0f ] AVX512VL,AVX512,FUTURE +VCMPTRUEPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0f ] AVX512VL,AVX512,FUTURE +VCMPTRUEPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0f ] AVX512,FUTURE +VCMPTRUEPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0f ] AVX512VL,AVX512,FUTURE +VCMPTRUEPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0f ] AVX512VL,AVX512,FUTURE +VCMPTRUEPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0f ] AVX512,FUTURE +VCMPTRUESD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0f ] AVX512,FUTURE +VCMPTRUESS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0f ] AVX512,FUTURE +VCMPTRUE_UQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 0f ] AVX512VL,AVX512,FUTURE +VCMPTRUE_UQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 0f ] AVX512VL,AVX512,FUTURE +VCMPTRUE_UQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 0f ] AVX512,FUTURE +VCMPTRUE_UQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 0f ] AVX512VL,AVX512,FUTURE +VCMPTRUE_UQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 0f ] AVX512VL,AVX512,FUTURE +VCMPTRUE_UQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 0f ] AVX512,FUTURE +VCMPTRUE_UQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 0f ] AVX512,FUTURE +VCMPTRUE_UQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 0f ] AVX512,FUTURE +VCMPEQ_OSPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 10 ] AVX512VL,AVX512,FUTURE +VCMPEQ_OSPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 10 ] AVX512VL,AVX512,FUTURE +VCMPEQ_OSPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 10 ] AVX512,FUTURE +VCMPEQ_OSPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 10 ] AVX512VL,AVX512,FUTURE +VCMPEQ_OSPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 10 ] AVX512VL,AVX512,FUTURE +VCMPEQ_OSPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 10 ] AVX512,FUTURE +VCMPEQ_OSSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 10 ] AVX512,FUTURE +VCMPEQ_OSSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 10 ] AVX512,FUTURE +VCMPLT_OQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 11 ] AVX512VL,AVX512,FUTURE +VCMPLT_OQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 11 ] AVX512VL,AVX512,FUTURE +VCMPLT_OQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 11 ] AVX512,FUTURE +VCMPLT_OQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 11 ] AVX512VL,AVX512,FUTURE +VCMPLT_OQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 11 ] AVX512VL,AVX512,FUTURE +VCMPLT_OQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 11 ] AVX512,FUTURE +VCMPLT_OQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 11 ] AVX512,FUTURE +VCMPLT_OQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 11 ] AVX512,FUTURE +VCMPLE_OQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 12 ] AVX512VL,AVX512,FUTURE +VCMPLE_OQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 12 ] AVX512VL,AVX512,FUTURE +VCMPLE_OQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 12 ] AVX512,FUTURE +VCMPLE_OQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 12 ] AVX512VL,AVX512,FUTURE +VCMPLE_OQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 12 ] AVX512VL,AVX512,FUTURE +VCMPLE_OQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 12 ] AVX512,FUTURE +VCMPLE_OQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 12 ] AVX512,FUTURE +VCMPLE_OQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 12 ] AVX512,FUTURE +VCMPUNORD_SPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 13 ] AVX512VL,AVX512,FUTURE +VCMPUNORD_SPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 13 ] AVX512VL,AVX512,FUTURE +VCMPUNORD_SPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 13 ] AVX512,FUTURE +VCMPUNORD_SPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 13 ] AVX512VL,AVX512,FUTURE +VCMPUNORD_SPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 13 ] AVX512VL,AVX512,FUTURE +VCMPUNORD_SPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 13 ] AVX512,FUTURE +VCMPUNORD_SSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 13 ] AVX512,FUTURE +VCMPUNORD_SSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 13 ] AVX512,FUTURE +VCMPNEQ_USPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 14 ] AVX512VL,AVX512,FUTURE +VCMPNEQ_USPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 14 ] AVX512VL,AVX512,FUTURE +VCMPNEQ_USPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 14 ] AVX512,FUTURE +VCMPNEQ_USPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 14 ] AVX512VL,AVX512,FUTURE +VCMPNEQ_USPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 14 ] AVX512VL,AVX512,FUTURE +VCMPNEQ_USPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 14 ] AVX512,FUTURE +VCMPNEQ_USSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 14 ] AVX512,FUTURE +VCMPNEQ_USSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 14 ] AVX512,FUTURE +VCMPNLT_UQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 15 ] AVX512VL,AVX512,FUTURE +VCMPNLT_UQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 15 ] AVX512VL,AVX512,FUTURE +VCMPNLT_UQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 15 ] AVX512,FUTURE +VCMPNLT_UQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 15 ] AVX512VL,AVX512,FUTURE +VCMPNLT_UQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 15 ] AVX512VL,AVX512,FUTURE +VCMPNLT_UQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 15 ] AVX512,FUTURE +VCMPNLT_UQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 15 ] AVX512,FUTURE +VCMPNLT_UQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 15 ] AVX512,FUTURE +VCMPNLE_UQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 16 ] AVX512VL,AVX512,FUTURE +VCMPNLE_UQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 16 ] AVX512VL,AVX512,FUTURE +VCMPNLE_UQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 16 ] AVX512,FUTURE +VCMPNLE_UQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 16 ] AVX512VL,AVX512,FUTURE +VCMPNLE_UQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 16 ] AVX512VL,AVX512,FUTURE +VCMPNLE_UQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 16 ] AVX512,FUTURE +VCMPNLE_UQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 16 ] AVX512,FUTURE +VCMPNLE_UQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 16 ] AVX512,FUTURE +VCMPORD_SPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 17 ] AVX512VL,AVX512,FUTURE +VCMPORD_SPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 17 ] AVX512VL,AVX512,FUTURE +VCMPORD_SPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 17 ] AVX512,FUTURE +VCMPORD_SPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 17 ] AVX512VL,AVX512,FUTURE +VCMPORD_SPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 17 ] AVX512VL,AVX512,FUTURE +VCMPORD_SPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 17 ] AVX512,FUTURE +VCMPORD_SSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 17 ] AVX512,FUTURE +VCMPORD_SSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 17 ] AVX512,FUTURE +VCMPEQ_USPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 18 ] AVX512VL,AVX512,FUTURE +VCMPEQ_USPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 18 ] AVX512VL,AVX512,FUTURE +VCMPEQ_USPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 18 ] AVX512,FUTURE +VCMPEQ_USPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 18 ] AVX512VL,AVX512,FUTURE +VCMPEQ_USPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 18 ] AVX512VL,AVX512,FUTURE +VCMPEQ_USPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 18 ] AVX512,FUTURE +VCMPEQ_USSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 18 ] AVX512,FUTURE +VCMPEQ_USSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 18 ] AVX512,FUTURE +VCMPNGE_UQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 19 ] AVX512VL,AVX512,FUTURE +VCMPNGE_UQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 19 ] AVX512VL,AVX512,FUTURE +VCMPNGE_UQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 19 ] AVX512,FUTURE +VCMPNGE_UQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 19 ] AVX512VL,AVX512,FUTURE +VCMPNGE_UQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 19 ] AVX512VL,AVX512,FUTURE +VCMPNGE_UQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 19 ] AVX512,FUTURE +VCMPNGE_UQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 19 ] AVX512,FUTURE +VCMPNGE_UQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 19 ] AVX512,FUTURE +VCMPNGT_UQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 1a ] AVX512VL,AVX512,FUTURE +VCMPNGT_UQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 1a ] AVX512VL,AVX512,FUTURE +VCMPNGT_UQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 1a ] AVX512,FUTURE +VCMPNGT_UQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 1a ] AVX512VL,AVX512,FUTURE +VCMPNGT_UQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 1a ] AVX512VL,AVX512,FUTURE +VCMPNGT_UQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 1a ] AVX512,FUTURE +VCMPNGT_UQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 1a ] AVX512,FUTURE +VCMPNGT_UQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 1a ] AVX512,FUTURE +VCMPFALSE_OSPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 1b ] AVX512VL,AVX512,FUTURE +VCMPFALSE_OSPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 1b ] AVX512VL,AVX512,FUTURE +VCMPFALSE_OSPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 1b ] AVX512,FUTURE +VCMPFALSE_OSPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 1b ] AVX512VL,AVX512,FUTURE +VCMPFALSE_OSPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 1b ] AVX512VL,AVX512,FUTURE +VCMPFALSE_OSPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 1b ] AVX512,FUTURE +VCMPFALSE_OSSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 1b ] AVX512,FUTURE +VCMPFALSE_OSSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 1b ] AVX512,FUTURE +VCMPNEQ_OSPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 1c ] AVX512VL,AVX512,FUTURE +VCMPNEQ_OSPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 1c ] AVX512VL,AVX512,FUTURE +VCMPNEQ_OSPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 1c ] AVX512,FUTURE +VCMPNEQ_OSPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 1c ] AVX512VL,AVX512,FUTURE +VCMPNEQ_OSPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 1c ] AVX512VL,AVX512,FUTURE +VCMPNEQ_OSPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 1c ] AVX512,FUTURE +VCMPNEQ_OSSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 1c ] AVX512,FUTURE +VCMPNEQ_OSSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 1c ] AVX512,FUTURE +VCMPGE_OQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 1d ] AVX512VL,AVX512,FUTURE +VCMPGE_OQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 1d ] AVX512VL,AVX512,FUTURE +VCMPGE_OQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 1d ] AVX512,FUTURE +VCMPGE_OQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 1d ] AVX512VL,AVX512,FUTURE +VCMPGE_OQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 1d ] AVX512VL,AVX512,FUTURE +VCMPGE_OQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 1d ] AVX512,FUTURE +VCMPGE_OQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 1d ] AVX512,FUTURE +VCMPGE_OQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 1d ] AVX512,FUTURE +VCMPGT_OQPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 1e ] AVX512VL,AVX512,FUTURE +VCMPGT_OQPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 1e ] AVX512VL,AVX512,FUTURE +VCMPGT_OQPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 1e ] AVX512,FUTURE +VCMPGT_OQPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 1e ] AVX512VL,AVX512,FUTURE +VCMPGT_OQPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 1e ] AVX512VL,AVX512,FUTURE +VCMPGT_OQPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 1e ] AVX512,FUTURE +VCMPGT_OQSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 1e ] AVX512,FUTURE +VCMPGT_OQSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 1e ] AVX512,FUTURE +VCMPTRUE_USPD kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r 1f ] AVX512VL,AVX512,FUTURE +VCMPTRUE_USPD kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r 1f ] AVX512VL,AVX512,FUTURE +VCMPTRUE_USPD kreg|mask,zmmreg,zmmrm512|b64|sae [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r 1f ] AVX512,FUTURE +VCMPTRUE_USPS kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.0f.w0 c2 /r 1f ] AVX512VL,AVX512,FUTURE +VCMPTRUE_USPS kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.0f.w0 c2 /r 1f ] AVX512VL,AVX512,FUTURE +VCMPTRUE_USPS kreg|mask,zmmreg,zmmrm512|b32|sae [rvmi:fv: evex.nds.512.0f.w0 c2 /r 1f ] AVX512,FUTURE +VCMPTRUE_USSD kreg|mask,xmmreg,xmmrm64|sae [rvmi:t1s: evex.nds.128.f2.0f.w1 c2 /r 1f ] AVX512,FUTURE +VCMPTRUE_USSS kreg|mask,xmmreg,xmmrm32|sae [rvmi:t1s: evex.nds.128.f3.0f.w0 c2 /r 1f ] AVX512,FUTURE VCMPPD kreg|mask,xmmreg,xmmrm128|b64,imm8 [rvmi:fv: evex.nds.128.66.0f.w1 c2 /r ib ] AVX512VL,AVX512,FUTURE VCMPPD kreg|mask,ymmreg,ymmrm256|b64,imm8 [rvmi:fv: evex.nds.256.66.0f.w1 c2 /r ib ] AVX512VL,AVX512,FUTURE VCMPPD kreg|mask,zmmreg,zmmrm512|b64|sae,imm8 [rvmi:fv: evex.nds.512.66.0f.w1 c2 /r ib ] AVX512,FUTURE @@ -4459,36 +4827,228 @@ VPBROADCASTW ymmreg|mask|z,reg64 [rm: evex.256.66.0f38.w0 7b VPBROADCASTW zmmreg|mask|z,reg16 [rm: evex.512.66.0f38.w0 7b /r ] AVX512BW,FUTURE VPBROADCASTW zmmreg|mask|z,reg32 [rm: evex.512.66.0f38.w0 7b /r ] AVX512BW,FUTURE VPBROADCASTW zmmreg|mask|z,reg64 [rm: evex.512.66.0f38.w0 7b /r ] AVX512BW,FUTURE +VPCMPEQB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3f /r 00 ] AVX512VL,AVX512BW,FUTURE +VPCMPEQB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3f /r 00 ] AVX512VL,AVX512BW,FUTURE +VPCMPEQB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3f /r 00 ] AVX512BW,FUTURE +VPCMPEQD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1f /r 00 ] AVX512VL,AVX512,FUTURE +VPCMPEQD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1f /r 00 ] AVX512VL,AVX512,FUTURE +VPCMPEQD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1f /r 00 ] AVX512,FUTURE +VPCMPEQQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1f /r 00 ] AVX512VL,AVX512,FUTURE +VPCMPEQQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1f /r 00 ] AVX512VL,AVX512,FUTURE +VPCMPEQQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1f /r 00 ] AVX512,FUTURE +VPCMPEQUB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3e /r 00 ] AVX512VL,AVX512BW,FUTURE +VPCMPEQUB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3e /r 00 ] AVX512VL,AVX512BW,FUTURE +VPCMPEQUB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3e /r 00 ] AVX512BW,FUTURE +VPCMPEQUD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1e /r 00 ] AVX512VL,AVX512,FUTURE +VPCMPEQUD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1e /r 00 ] AVX512VL,AVX512,FUTURE +VPCMPEQUD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1e /r 00 ] AVX512,FUTURE +VPCMPEQUQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1e /r 00 ] AVX512VL,AVX512,FUTURE +VPCMPEQUQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1e /r 00 ] AVX512VL,AVX512,FUTURE +VPCMPEQUQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1e /r 00 ] AVX512,FUTURE +VPCMPEQUW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3e /r 00 ] AVX512VL,AVX512BW,FUTURE +VPCMPEQUW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3e /r 00 ] AVX512VL,AVX512BW,FUTURE +VPCMPEQUW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3e /r 00 ] AVX512BW,FUTURE +VPCMPEQW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3f /r 00 ] AVX512VL,AVX512BW,FUTURE +VPCMPEQW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3f /r 00 ] AVX512VL,AVX512BW,FUTURE +VPCMPEQW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3f /r 00 ] AVX512BW,FUTURE +VPCMPGEB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3f /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPGEB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3f /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPGEB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3f /r 05 ] AVX512BW,FUTURE +VPCMPGED kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1f /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPGED kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1f /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPGED kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1f /r 05 ] AVX512,FUTURE +VPCMPGEQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1f /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPGEQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1f /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPGEQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1f /r 05 ] AVX512,FUTURE +VPCMPGEUB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3e /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPGEUB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3e /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPGEUB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3e /r 05 ] AVX512BW,FUTURE +VPCMPGEUD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1e /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPGEUD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1e /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPGEUD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1e /r 05 ] AVX512,FUTURE +VPCMPGEUQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1e /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPGEUQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1e /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPGEUQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1e /r 05 ] AVX512,FUTURE +VPCMPGEUW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3e /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPGEUW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3e /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPGEUW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3e /r 05 ] AVX512BW,FUTURE +VPCMPGEW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3f /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPGEW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3f /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPGEW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3f /r 05 ] AVX512BW,FUTURE +VPCMPGTB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3f /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPGTB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3f /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPGTB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3f /r 06 ] AVX512BW,FUTURE +VPCMPGTD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1f /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPGTD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1f /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPGTD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1f /r 06 ] AVX512,FUTURE +VPCMPGTQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1f /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPGTQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1f /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPGTQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1f /r 06 ] AVX512,FUTURE +VPCMPGTUB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3e /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPGTUB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3e /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPGTUB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3e /r 06 ] AVX512BW,FUTURE +VPCMPGTUD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1e /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPGTUD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1e /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPGTUD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1e /r 06 ] AVX512,FUTURE +VPCMPGTUQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1e /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPGTUQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1e /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPGTUQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1e /r 06 ] AVX512,FUTURE +VPCMPGTUW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3e /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPGTUW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3e /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPGTUW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3e /r 06 ] AVX512BW,FUTURE +VPCMPGTW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3f /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPGTW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3f /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPGTW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3f /r 06 ] AVX512BW,FUTURE +VPCMPLEB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3f /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPLEB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3f /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPLEB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3f /r 02 ] AVX512BW,FUTURE +VPCMPLED kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1f /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPLED kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1f /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPLED kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1f /r 02 ] AVX512,FUTURE +VPCMPLEQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1f /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPLEQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1f /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPLEQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1f /r 02 ] AVX512,FUTURE +VPCMPLEUB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3e /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPLEUB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3e /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPLEUB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3e /r 02 ] AVX512BW,FUTURE +VPCMPLEUD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1e /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPLEUD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1e /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPLEUD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1e /r 02 ] AVX512,FUTURE +VPCMPLEUQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1e /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPLEUQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1e /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPLEUQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1e /r 02 ] AVX512,FUTURE +VPCMPLEUW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3e /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPLEUW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3e /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPLEUW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3e /r 02 ] AVX512BW,FUTURE +VPCMPLEW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3f /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPLEW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3f /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPLEW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3f /r 02 ] AVX512BW,FUTURE +VPCMPLTB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3f /r 01 ] AVX512VL,AVX512BW,FUTURE +VPCMPLTB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3f /r 01 ] AVX512VL,AVX512BW,FUTURE +VPCMPLTB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3f /r 01 ] AVX512BW,FUTURE +VPCMPLTD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1f /r 01 ] AVX512VL,AVX512,FUTURE +VPCMPLTD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1f /r 01 ] AVX512VL,AVX512,FUTURE +VPCMPLTD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1f /r 01 ] AVX512,FUTURE +VPCMPLTQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1f /r 01 ] AVX512VL,AVX512,FUTURE +VPCMPLTQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1f /r 01 ] AVX512VL,AVX512,FUTURE +VPCMPLTQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1f /r 01 ] AVX512,FUTURE +VPCMPLTUB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3e /r 01 ] AVX512VL,AVX512BW,FUTURE +VPCMPLTUB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3e /r 01 ] AVX512VL,AVX512BW,FUTURE +VPCMPLTUB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3e /r 01 ] AVX512BW,FUTURE +VPCMPLTUD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1e /r 01 ] AVX512VL,AVX512,FUTURE +VPCMPLTUD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1e /r 01 ] AVX512VL,AVX512,FUTURE +VPCMPLTUD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1e /r 01 ] AVX512,FUTURE +VPCMPLTUQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1e /r 01 ] AVX512VL,AVX512,FUTURE +VPCMPLTUQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1e /r 01 ] AVX512VL,AVX512,FUTURE +VPCMPLTUQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1e /r 01 ] AVX512,FUTURE +VPCMPLTUW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3e /r 01 ] AVX512VL,AVX512BW,FUTURE +VPCMPLTUW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3e /r 01 ] AVX512VL,AVX512BW,FUTURE +VPCMPLTUW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3e /r 01 ] AVX512BW,FUTURE +VPCMPLTW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3f /r 01 ] AVX512VL,AVX512BW,FUTURE +VPCMPLTW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3f /r 01 ] AVX512VL,AVX512BW,FUTURE +VPCMPLTW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3f /r 01 ] AVX512BW,FUTURE +VPCMPNEQB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3f /r 04 ] AVX512VL,AVX512BW,FUTURE +VPCMPNEQB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3f /r 04 ] AVX512VL,AVX512BW,FUTURE +VPCMPNEQB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3f /r 04 ] AVX512BW,FUTURE +VPCMPNEQD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1f /r 04 ] AVX512VL,AVX512,FUTURE +VPCMPNEQD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1f /r 04 ] AVX512VL,AVX512,FUTURE +VPCMPNEQD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1f /r 04 ] AVX512,FUTURE +VPCMPNEQQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1f /r 04 ] AVX512VL,AVX512,FUTURE +VPCMPNEQQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1f /r 04 ] AVX512VL,AVX512,FUTURE +VPCMPNEQQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1f /r 04 ] AVX512,FUTURE +VPCMPNEQUB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3e /r 04 ] AVX512VL,AVX512BW,FUTURE +VPCMPNEQUB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3e /r 04 ] AVX512VL,AVX512BW,FUTURE +VPCMPNEQUB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3e /r 04 ] AVX512BW,FUTURE +VPCMPNEQUD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1e /r 04 ] AVX512VL,AVX512,FUTURE +VPCMPNEQUD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1e /r 04 ] AVX512VL,AVX512,FUTURE +VPCMPNEQUD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1e /r 04 ] AVX512,FUTURE +VPCMPNEQUQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1e /r 04 ] AVX512VL,AVX512,FUTURE +VPCMPNEQUQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1e /r 04 ] AVX512VL,AVX512,FUTURE +VPCMPNEQUQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1e /r 04 ] AVX512,FUTURE +VPCMPNEQUW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3e /r 04 ] AVX512VL,AVX512BW,FUTURE +VPCMPNEQUW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3e /r 04 ] AVX512VL,AVX512BW,FUTURE +VPCMPNEQUW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3e /r 04 ] AVX512BW,FUTURE +VPCMPNEQW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3f /r 04 ] AVX512VL,AVX512BW,FUTURE +VPCMPNEQW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3f /r 04 ] AVX512VL,AVX512BW,FUTURE +VPCMPNEQW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3f /r 04 ] AVX512BW,FUTURE +VPCMPNGTB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3f /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPNGTB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3f /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPNGTB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3f /r 02 ] AVX512BW,FUTURE +VPCMPNGTD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1f /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPNGTD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1f /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPNGTD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1f /r 02 ] AVX512,FUTURE +VPCMPNGTQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1f /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPNGTQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1f /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPNGTQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1f /r 02 ] AVX512,FUTURE +VPCMPNGTUB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3e /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPNGTUB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3e /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPNGTUB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3e /r 02 ] AVX512BW,FUTURE +VPCMPNGTUD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1e /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPNGTUD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1e /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPNGTUD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1e /r 02 ] AVX512,FUTURE +VPCMPNGTUQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1e /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPNGTUQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1e /r 02 ] AVX512VL,AVX512,FUTURE +VPCMPNGTUQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1e /r 02 ] AVX512,FUTURE +VPCMPNGTUW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3e /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPNGTUW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3e /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPNGTUW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3e /r 02 ] AVX512BW,FUTURE +VPCMPNGTW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3f /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPNGTW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3f /r 02 ] AVX512VL,AVX512BW,FUTURE +VPCMPNGTW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3f /r 02 ] AVX512BW,FUTURE +VPCMPNLEB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3f /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLEB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3f /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLEB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3f /r 06 ] AVX512BW,FUTURE +VPCMPNLED kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1f /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPNLED kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1f /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPNLED kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1f /r 06 ] AVX512,FUTURE +VPCMPNLEQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1f /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPNLEQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1f /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPNLEQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1f /r 06 ] AVX512,FUTURE +VPCMPNLEUB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3e /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLEUB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3e /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLEUB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3e /r 06 ] AVX512BW,FUTURE +VPCMPNLEUD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1e /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPNLEUD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1e /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPNLEUD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1e /r 06 ] AVX512,FUTURE +VPCMPNLEUQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1e /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPNLEUQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1e /r 06 ] AVX512VL,AVX512,FUTURE +VPCMPNLEUQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1e /r 06 ] AVX512,FUTURE +VPCMPNLEUW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3e /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLEUW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3e /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLEUW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3e /r 06 ] AVX512BW,FUTURE +VPCMPNLEW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3f /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLEW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3f /r 06 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLEW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3f /r 06 ] AVX512BW,FUTURE +VPCMPNLTB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3f /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLTB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3f /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLTB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3f /r 05 ] AVX512BW,FUTURE +VPCMPNLTD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1f /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPNLTD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1f /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPNLTD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1f /r 05 ] AVX512,FUTURE +VPCMPNLTQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1f /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPNLTQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1f /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPNLTQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1f /r 05 ] AVX512,FUTURE +VPCMPNLTUB kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3e /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLTUB kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3e /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLTUB kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3e /r 05 ] AVX512BW,FUTURE +VPCMPNLTUD kreg|mask,xmmreg,xmmrm128|b32 [rvmi:fv: evex.nds.128.66.0f3a.w0 1e /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPNLTUD kreg|mask,ymmreg,ymmrm256|b32 [rvmi:fv: evex.nds.256.66.0f3a.w0 1e /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPNLTUD kreg|mask,zmmreg,zmmrm512|b32 [rvmi:fv: evex.nds.512.66.0f3a.w0 1e /r 05 ] AVX512,FUTURE +VPCMPNLTUQ kreg|mask,xmmreg,xmmrm128|b64 [rvmi:fv: evex.nds.128.66.0f3a.w1 1e /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPNLTUQ kreg|mask,ymmreg,ymmrm256|b64 [rvmi:fv: evex.nds.256.66.0f3a.w1 1e /r 05 ] AVX512VL,AVX512,FUTURE +VPCMPNLTUQ kreg|mask,zmmreg,zmmrm512|b64 [rvmi:fv: evex.nds.512.66.0f3a.w1 1e /r 05 ] AVX512,FUTURE +VPCMPNLTUW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3e /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLTUW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3e /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLTUW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3e /r 05 ] AVX512BW,FUTURE +VPCMPNLTW kreg|mask,xmmreg,xmmrm128 [rvmi:fvm: evex.nds.128.66.0f3a.w1 3f /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLTW kreg|mask,ymmreg,ymmrm256 [rvmi:fvm: evex.nds.256.66.0f3a.w1 3f /r 05 ] AVX512VL,AVX512BW,FUTURE +VPCMPNLTW kreg|mask,zmmreg,zmmrm512 [rvmi:fvm: evex.nds.512.66.0f3a.w1 3f /r 05 ] AVX512BW,FUTURE VPCMPB kreg|mask,xmmreg,xmmrm128,imm8 [rvmi:fvm: evex.nds.128.66.0f3a.w0 3f /r ib ] AVX512VL,AVX512BW,FUTURE VPCMPB kreg|mask,ymmreg,ymmrm256,imm8 [rvmi:fvm: evex.nds.256.66.0f3a.w0 3f /r ib ] AVX512VL,AVX512BW,FUTURE VPCMPB kreg|mask,zmmreg,zmmrm512,imm8 [rvmi:fvm: evex.nds.512.66.0f3a.w0 3f /r ib ] AVX512BW,FUTURE VPCMPD kreg|mask,xmmreg,xmmrm128|b32,imm8 [rvmi:fv: evex.nds.128.66.0f3a.w0 1f /r ib ] AVX512VL,AVX512,FUTURE VPCMPD kreg|mask,ymmreg,ymmrm256|b32,imm8 [rvmi:fv: evex.nds.256.66.0f3a.w0 1f /r ib ] AVX512VL,AVX512,FUTURE VPCMPD kreg|mask,zmmreg,zmmrm512|b32,imm8 [rvmi:fv: evex.nds.512.66.0f3a.w0 1f /r ib ] AVX512,FUTURE -VPCMPEQB kreg|mask,xmmreg,xmmrm128 [rvm:fvm: evex.nds.128.66.0f.wig 74 /r ] AVX512VL,AVX512BW,FUTURE -VPCMPEQB kreg|mask,ymmreg,ymmrm256 [rvm:fvm: evex.nds.256.66.0f.wig 74 /r ] AVX512VL,AVX512BW,FUTURE -VPCMPEQB kreg|mask,zmmreg,zmmrm512 [rvm:fvm: evex.nds.512.66.0f.wig 74 /r ] AVX512BW,FUTURE -VPCMPEQD kreg|mask,xmmreg,xmmrm128|b32 [rvm:fv: evex.nds.128.66.0f.w0 76 /r ] AVX512VL,AVX512,FUTURE -VPCMPEQD kreg|mask,ymmreg,ymmrm256|b32 [rvm:fv: evex.nds.256.66.0f.w0 76 /r ] AVX512VL,AVX512,FUTURE -VPCMPEQD kreg|mask,zmmreg,zmmrm512|b32 [rvm:fv: evex.nds.512.66.0f.w0 76 /r ] AVX512,FUTURE -VPCMPEQQ kreg|mask,xmmreg,xmmrm128|b64 [rvm:fv: evex.nds.128.66.0f38.w1 29 /r ] AVX512VL,AVX512,FUTURE -VPCMPEQQ kreg|mask,ymmreg,ymmrm256|b64 [rvm:fv: evex.nds.256.66.0f38.w1 29 /r ] AVX512VL,AVX512,FUTURE -VPCMPEQQ kreg|mask,zmmreg,zmmrm512|b64 [rvm:fv: evex.nds.512.66.0f38.w1 29 /r ] AVX512,FUTURE -VPCMPEQW kreg|mask,xmmreg,xmmrm128 [rvm:fvm: evex.nds.128.66.0f.wig 75 /r ] AVX512VL,AVX512BW,FUTURE -VPCMPEQW kreg|mask,ymmreg,ymmrm256 [rvm:fvm: evex.nds.256.66.0f.wig 75 /r ] AVX512VL,AVX512BW,FUTURE -VPCMPEQW kreg|mask,zmmreg,zmmrm512 [rvm:fvm: evex.nds.512.66.0f.wig 75 /r ] AVX512BW,FUTURE -VPCMPGTB kreg|mask,xmmreg,xmmrm128 [rvm:fvm: evex.nds.128.66.0f.wig 64 /r ] AVX512VL,AVX512BW,FUTURE -VPCMPGTB kreg|mask,ymmreg,ymmrm256 [rvm:fvm: evex.nds.256.66.0f.wig 64 /r ] AVX512VL,AVX512BW,FUTURE -VPCMPGTB kreg|mask,zmmreg,zmmrm512 [rvm:fvm: evex.nds.512.66.0f.wig 64 /r ] AVX512BW,FUTURE -VPCMPGTD kreg|mask,xmmreg,xmmrm128|b32 [rvm:fv: evex.nds.128.66.0f.w0 66 /r ] AVX512VL,AVX512,FUTURE -VPCMPGTD kreg|mask,ymmreg,ymmrm256|b32 [rvm:fv: evex.nds.256.66.0f.w0 66 /r ] AVX512VL,AVX512,FUTURE -VPCMPGTD kreg|mask,zmmreg,zmmrm512|b32 [rvm:fv: evex.nds.512.66.0f.w0 66 /r ] AVX512,FUTURE -VPCMPGTQ kreg|mask,xmmreg,xmmrm128|b64 [rvm:fv: evex.nds.128.66.0f38.w1 37 /r ] AVX512VL,AVX512,FUTURE -VPCMPGTQ kreg|mask,ymmreg,ymmrm256|b64 [rvm:fv: evex.nds.256.66.0f38.w1 37 /r ] AVX512VL,AVX512,FUTURE -VPCMPGTQ kreg|mask,zmmreg,zmmrm512|b64 [rvm:fv: evex.nds.512.66.0f38.w1 37 /r ] AVX512,FUTURE -VPCMPGTW kreg|mask,xmmreg,xmmrm128 [rvm:fvm: evex.nds.128.66.0f.wig 65 /r ] AVX512VL,AVX512BW,FUTURE -VPCMPGTW kreg|mask,ymmreg,ymmrm256 [rvm:fvm: evex.nds.256.66.0f.wig 65 /r ] AVX512VL,AVX512BW,FUTURE -VPCMPGTW kreg|mask,zmmreg,zmmrm512 [rvm:fvm: evex.nds.512.66.0f.wig 65 /r ] AVX512BW,FUTURE VPCMPQ kreg|mask,xmmreg,xmmrm128|b64,imm8 [rvmi:fv: evex.nds.128.66.0f3a.w1 1f /r ib ] AVX512VL,AVX512,FUTURE VPCMPQ kreg|mask,ymmreg,ymmrm256|b64,imm8 [rvmi:fv: evex.nds.256.66.0f3a.w1 1f /r ib ] AVX512VL,AVX512,FUTURE VPCMPQ kreg|mask,zmmreg,zmmrm512|b64,imm8 [rvmi:fv: evex.nds.512.66.0f3a.w1 1f /r ib ] AVX512,FUTURE |