commit baab183439ff4e0c6b77d62156d447e61fc1dcfb Author: Arnold D. Robbins Date: Wed Sep 14 21:08:59 2022 +0300 Fix a bug with Node_elem_new. diff --git a/ChangeLog b/ChangeLog index 5fb25483..cd9d9fcd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2022-09-14 Arnold D. Robbins + + * interpret.h (r_interpret): For the `push' opcodes, upref + the Node_elem_new. See test case elemnew1. Thanks to + Emanuel Attila Czirai for the report, + and to Jan Alexander Steffens (heftig)" + for the fix. + 2022-09-04 Arnold D. Robbins * 5.2.0: Release tar ball made. diff --git a/interpret.h b/interpret.h index 57d060e6..268655b2 100644 --- a/interpret.h +++ b/interpret.h @@ -238,6 +238,7 @@ uninitialized_scalar: _("reference to uninitialized argument `%s'") : _("reference to uninitialized variable `%s'"), save_symbol->vname); + UPREF(m); PUSH(m); break; diff --git a/test/ChangeLog b/test/ChangeLog index a73637bf..ea08edee 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2022-09-14 Arnold D. Robbins + + * Makefile.am (EXTRA_DIST): New test: elemnew1. + * elemnew1.awk, elemnew1.ok: New files. + 2022-09-04 Arnold D. Robbins * 5.2.0: Release tar ball made. diff --git a/test/Makefile.am b/test/Makefile.am index ab06974c..8a5c3c49 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -282,6 +282,8 @@ EXTRA_DIST = \ dumpvars.ok \ dynlj.awk \ dynlj.ok \ + elemnew1.awk \ + elemnew1.ok \ escapebrace.awk \ escapebrace.in \ escapebrace.ok \ @@ -1480,7 +1482,7 @@ GAWK_EXT_TESTS = \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \ - dfacheck1 dumpvars errno exit fieldwdth forcenum fpat1 fpat2 \ + dfacheck1 dumpvars elemnew1 errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \ diff --git a/test/Makefile.in b/test/Makefile.in index 834feb09..a4fb1cc1 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -550,6 +550,8 @@ EXTRA_DIST = \ dumpvars.ok \ dynlj.awk \ dynlj.ok \ + elemnew1.awk \ + elemnew1.ok \ escapebrace.awk \ escapebrace.in \ escapebrace.ok \ @@ -1748,7 +1750,7 @@ GAWK_EXT_TESTS = \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \ - dfacheck1 dumpvars errno exit fieldwdth forcenum fpat1 fpat2 \ + dfacheck1 dumpvars elemnew1 errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \ @@ -4476,6 +4478,11 @@ dfacheck1: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew1: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index 3a667af8..90828e7f 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1432,6 +1432,11 @@ dfacheck1: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew1: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/elemnew1.awk b/test/elemnew1.awk new file mode 100644 index 00000000..58dc9fcd --- /dev/null +++ b/test/elemnew1.awk @@ -0,0 +1,9 @@ +function add_flags(old) { + if (old) + return 0 + if (!old) + return 1 +} +BEGIN { + a[0]=add_flags(a[0]) +} diff --git a/test/elemnew1.ok b/test/elemnew1.ok new file mode 100644 index 00000000..e69de29b commit 2848045aed5ccfd7b582808288f7fcc18d319952 Author: Arnold D. Robbins Date: Wed Sep 14 22:33:39 2022 +0300 Additional fix for Node_elem_new. diff --git a/ChangeLog b/ChangeLog index cd9d9fcd..5c27caff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2022-09-14 Arnold D. Robbins + + * interpret.h (r_interpret): For the `push' opcodes, don't upref + the Node_elem_new. Instead, convert the very original value to + Node_var and use elem_new_to_scalar for the local variable. + See test case elemnew3.awk. Thanks to Pascal Terjan + for the report and test case. + 2022-09-14 Arnold D. Robbins * interpret.h (r_interpret): For the `push' opcodes, upref diff --git a/interpret.h b/interpret.h index 268655b2..26010ada 100644 --- a/interpret.h +++ b/interpret.h @@ -213,7 +213,7 @@ top: case Node_var_new: uninitialized_scalar: if (op != Op_push_arg_untyped) { - /* convert untyped to scalar */ + /* convert very original untyped to scalar */ m->type = Node_var; m->var_value = dupnode(Nnull_string); } @@ -222,6 +222,7 @@ uninitialized_scalar: _("reference to uninitialized argument `%s'") : _("reference to uninitialized variable `%s'"), save_symbol->vname); + // set up local param by value if (op != Op_push_arg_untyped) m = dupnode(Nnull_string); UPREF(m); @@ -230,15 +231,20 @@ uninitialized_scalar: case Node_elem_new: if (op != Op_push_arg_untyped) { - /* convert untyped to scalar */ - m = elem_new_to_scalar(m); + /* convert very original untyped to scalar */ + m->type = Node_var; + m->var_value = dupnode(Nnull_string); } if (do_lint) lintwarn(isparam ? _("reference to uninitialized argument `%s'") : _("reference to uninitialized variable `%s'"), save_symbol->vname); - UPREF(m); + // set up local param by value + if (op != Op_push_arg_untyped) { + m = elem_new_to_scalar(m); + } + PUSH(m); break; diff --git a/pc/ChangeLog b/pc/ChangeLog index a78ccfcb..67ee4d2d 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2022-09-14 Arnold D. Robbins + + * Makefile.tst: Regenerated. + 2022-09-04 Arnold D. Robbins * 5.2.0: Release tar ball made. diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 269ec8a0..9e40cd2a 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -190,7 +190,8 @@ GAWK_EXT_TESTS = \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \ - dfacheck1 dumpvars errno exit fieldwdth forcenum fpat1 fpat2 \ + dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \ + errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \ @@ -2735,6 +2736,21 @@ dfacheck1: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew1: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +elemnew2: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +elemnew3: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/ChangeLog b/test/ChangeLog index ea08edee..434cbd9c 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,7 +1,8 @@ 2022-09-14 Arnold D. Robbins - * Makefile.am (EXTRA_DIST): New test: elemnew1. - * elemnew1.awk, elemnew1.ok: New files. + * Makefile.am (EXTRA_DIST): New tests: elemnew1, elemnew2, elemnew3. + * elemnew1.awk, elemnew1.ok, elemnew2.awk, elemnew2.ok, + elemnew3.awk, elemnew3.ok: New files. 2022-09-04 Arnold D. Robbins diff --git a/test/Makefile.am b/test/Makefile.am index 8a5c3c49..8b0a24e8 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -284,6 +284,10 @@ EXTRA_DIST = \ dynlj.ok \ elemnew1.awk \ elemnew1.ok \ + elemnew2.awk \ + elemnew2.ok \ + elemnew3.awk \ + elemnew3.ok \ escapebrace.awk \ escapebrace.in \ escapebrace.ok \ @@ -1482,7 +1486,8 @@ GAWK_EXT_TESTS = \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \ - dfacheck1 dumpvars elemnew1 errno exit fieldwdth forcenum fpat1 fpat2 \ + dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \ + errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \ diff --git a/test/Makefile.in b/test/Makefile.in index a4fb1cc1..9240a42e 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -552,6 +552,10 @@ EXTRA_DIST = \ dynlj.ok \ elemnew1.awk \ elemnew1.ok \ + elemnew2.awk \ + elemnew2.ok \ + elemnew3.awk \ + elemnew3.ok \ escapebrace.awk \ escapebrace.in \ escapebrace.ok \ @@ -1750,7 +1754,8 @@ GAWK_EXT_TESTS = \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \ - dfacheck1 dumpvars elemnew1 errno exit fieldwdth forcenum fpat1 fpat2 \ + dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \ + errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \ @@ -4483,6 +4488,16 @@ elemnew1: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew2: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +elemnew3: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index 90828e7f..f7e749c0 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1437,6 +1437,16 @@ elemnew1: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew2: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +elemnew3: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/elemnew2.awk b/test/elemnew2.awk new file mode 100644 index 00000000..08e72391 --- /dev/null +++ b/test/elemnew2.awk @@ -0,0 +1,6 @@ +function set_val(old) { + old[1] = 42 +} +BEGIN { + a[0] = set_val(a[0]) +} diff --git a/test/elemnew2.ok b/test/elemnew2.ok new file mode 100644 index 00000000..d6f2d78a --- /dev/null +++ b/test/elemnew2.ok @@ -0,0 +1,2 @@ +gawk: elemnew2.awk:5: fatal: attempt to use array `a["0"]' in a scalar context +EXIT CODE: 2 diff --git a/test/elemnew3.awk b/test/elemnew3.awk new file mode 100644 index 00000000..39ac9a8c --- /dev/null +++ b/test/elemnew3.awk @@ -0,0 +1,8 @@ +function foo(x) +{ + if (x == int(x)) + return (int(x) != 0) +} +BEGIN { + foo(P["bar"]) +} diff --git a/test/elemnew3.ok b/test/elemnew3.ok new file mode 100644 index 00000000..e69de29b commit ae0de313fc51ab3862811a8152a92f68ece3bfb0 Author: Arnold D. Robbins Date: Fri Sep 16 12:25:52 2022 +0300 Fix a bug with eval in the debugger. diff --git a/ChangeLog b/ChangeLog index 5c27caff..35941d0a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2022-09-16 Arnold D. Robbins + + * debug.c (do_eval): If a fatal error occurs, don't attempt to + recover, just restart. Thanks to Pascal Maugis + for the report. + 2022-09-14 Arnold D. Robbins * interpret.h (r_interpret): For the `push' opcodes, don't upref diff --git a/debug.c b/debug.c index efc5a9a1..b85939f3 100644 --- a/debug.c +++ b/debug.c @@ -5582,8 +5582,22 @@ execute_code(volatile INSTRUCTION *code) if (setjmp(fatal_tag) == 0) { (void) interpret((INSTRUCTION *) code); r = POP_SCALAR(); - } else /* fatal error */ - (void) unwind_stack(save_stack_size); + } else { /* fatal error */ + /* + * 9/2022: + * Initially, the code did this: + * + * (void) unwind_stack(save_stack_size); + * + * to attempt to recover and keep going. But a fatal error + * can corrupt memory. Instead of trying to recover, just + * start over. + */ + // Let the user know, but DON'T use the fatal() function! + fprintf(stderr, _("fatal error during eval, need to restart.\n")); + // Go back to debugger + restart(false); // does not return + } POP_BINDING(fatal_tag_stack, fatal_tag, fatal_tag_valid); do_flags = save_flags; diff --git a/pc/ChangeLog b/pc/ChangeLog index 67ee4d2d..863102fe 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2022-09-16 Arnold D. Robbins + + * Makefile.tst: Regenerated. + 2022-09-14 Arnold D. Robbins * Makefile.tst: Regenerated. diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 9e40cd2a..8992ae1b 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -189,7 +189,8 @@ GAWK_EXT_TESTS = \ arraysort2 arraytype asortbool backw badargs beginfile1 beginfile2 \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ - dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \ + dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ + devfd devfd1 devfd2 \ dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \ errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ @@ -244,7 +245,7 @@ SHLIB_TESTS = \ # List of the tests which should be run with --debug option: -NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3 +NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3 dbugeval4 # List of the tests which should be run with --lint option: NEED_LINT = \ @@ -2716,6 +2717,11 @@ dbugeval3: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +dbugeval4: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + dbugtypedre1: @echo $@ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/ChangeLog b/test/ChangeLog index 434cbd9c..6ec48cfd 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2022-09-16 Arnold D. Robbins + + * Makefile.am (EXTRA_DIST): New test: dbugeval4. + (NEED_DEBUG): Add dbugeval4. + * dbugeval4.awk, dbugeval4.in, dbugeval4.ok: New files. + 2022-09-14 Arnold D. Robbins * Makefile.am (EXTRA_DIST): New tests: elemnew1, elemnew2, elemnew3. diff --git a/test/Makefile.am b/test/Makefile.am index 8b0a24e8..e0a1a5d3 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -234,6 +234,9 @@ EXTRA_DIST = \ dbugeval3.awk \ dbugeval3.in \ dbugeval3.ok \ + dbugeval4.awk \ + dbugeval4.in \ + dbugeval4.ok \ dbugtypedre1.awk \ dbugtypedre1.in \ dbugtypedre1.ok \ @@ -1485,7 +1488,8 @@ GAWK_EXT_TESTS = \ arraysort2 arraytype asortbool backw badargs beginfile1 beginfile2 \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ - dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \ + dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ + devfd devfd1 devfd2 \ dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \ errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ @@ -1543,7 +1547,7 @@ SHLIB_TESTS = \ testext time # List of the tests which should be run with --debug option: -NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3 +NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3 dbugeval4 # List of the tests which should be run with --lint option: NEED_LINT = \ diff --git a/test/Makefile.in b/test/Makefile.in index 9240a42e..f4e865d9 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -502,6 +502,9 @@ EXTRA_DIST = \ dbugeval3.awk \ dbugeval3.in \ dbugeval3.ok \ + dbugeval4.awk \ + dbugeval4.in \ + dbugeval4.ok \ dbugtypedre1.awk \ dbugtypedre1.in \ dbugtypedre1.ok \ @@ -1753,7 +1756,8 @@ GAWK_EXT_TESTS = \ arraysort2 arraytype asortbool backw badargs beginfile1 beginfile2 \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ - dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \ + dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ + devfd devfd1 devfd2 \ dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \ errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ @@ -1808,7 +1812,7 @@ SHLIB_TESTS = \ # List of the tests which should be run with --debug option: -NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3 +NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3 dbugeval4 # List of the tests which should be run with --lint option: NEED_LINT = \ @@ -4463,6 +4467,11 @@ dbugeval3: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +dbugeval4: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + dbugtypedre1: @echo $@ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index f7e749c0..d30c468e 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1412,6 +1412,11 @@ dbugeval3: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +dbugeval4: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + dbugtypedre1: @echo $@ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/dbugeval4.awk b/test/dbugeval4.awk new file mode 100644 index 00000000..e69de29b diff --git a/test/dbugeval4.in b/test/dbugeval4.in new file mode 100644 index 00000000..cf7b513f --- /dev/null +++ b/test/dbugeval4.in @@ -0,0 +1,2 @@ +eval "a()" +eval "print 1" diff --git a/test/dbugeval4.ok b/test/dbugeval4.ok new file mode 100644 index 00000000..a40d0891 --- /dev/null +++ b/test/dbugeval4.ok @@ -0,0 +1,5 @@ +gawk: cmd. line:1: fatal: function `a' not defined +fatal error during eval, need to restart. +Restarting ... +1 +EXIT CODE: 2 commit b75abf5b597630e562e91c9431c025d250045311 Author: Arnold D. Robbins Date: Sat Sep 17 21:53:51 2022 +0300 Bug fix for rwarray.c and doc and test updates. diff --git a/doc/ChangeLog b/doc/ChangeLog index ffe739de..0ccc653d 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2022-09-17 Arnold D. Robbins + + * gawktexi.in (Extension Sample Read write array): Clarify how readall + works. Thanks to J Naman, for the prod. + 2022-09-04 Arnold D. Robbins * 5.2.0: Release tar ball made. diff --git a/doc/gawk.texi b/doc/gawk.texi index 61e740fc..809b8fd7 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -40177,7 +40177,8 @@ It returns one on success, or zero upon failure This function takes a string argument, which is the name of the file from which to read the contents of various global variables. For each variable in the file, the data is loaded unless the variable -already exists. If the variable already exists, the data for that variable +has already been assigned a value or used as an array. +In that case, the data for that variable in the file is ignored. It returns one on success, or zero upon failure. @end table diff --git a/doc/gawktexi.in b/doc/gawktexi.in index a9274424..97445ace 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -39020,7 +39020,8 @@ It returns one on success, or zero upon failure This function takes a string argument, which is the name of the file from which to read the contents of various global variables. For each variable in the file, the data is loaded unless the variable -already exists. If the variable already exists, the data for that variable +has already been assigned a value or used as an array. +In that case, the data for that variable in the file is ignored. It returns one on success, or zero upon failure. @end table diff --git a/extension/ChangeLog b/extension/ChangeLog index 2fb0edff..db568436 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,8 @@ +2022-09-17 Arnold D. Robbins + + * rwarray.c (do_poke): Handle namespaced variables (foo::bar). + Thanks to J Naman, for the report. + 2022-09-04 Arnold D. Robbins * 5.2.0: Release tar ball made. diff --git a/extension/rwarray.c b/extension/rwarray.c index 3e09102e..1a3a7d10 100644 --- a/extension/rwarray.c +++ b/extension/rwarray.c @@ -454,15 +454,34 @@ do_poke(awk_element_t *e) if (e->index.val_type != AWK_STRING) return awk_false; - /* So this is a bit tricky. If the program refers to the variable, + /* + * So this is a bit tricky. If the program refers to the variable, * then it will already exist in an undefined state after parsing. * If the program never refers to it, then the lookup fails. * We still need to create it in case the program accesses it via - * indirection through the SYMTAB table. */ - if (sym_lookup(e->index.str_value.str, AWK_UNDEFINED, &t) && (t.val_type != AWK_UNDEFINED)) + * indirection through the SYMTAB table. + */ + // it's even trickier, we need to handle foo::bar as well + char *p = strstr(e->index.str_value.str, "::"); + char *ns, *ident; + if (p != NULL) { + ns = e->index.str_value.str; + ident = p + 2; + *p = '\0'; + } else { + ns = ""; + ident = e->index.str_value.str; + } + + if (sym_lookup_ns(ns, ident, AWK_UNDEFINED, & t) + && (t.val_type != AWK_UNDEFINED)) return awk_false; - if (! sym_update(e->index.str_value.str, & e->value)) { - warning(ext_id, _("readall: unable to set %s"), e->index.str_value.str); + + if (! sym_update_ns(ns, ident, & e->value)) { + if (ns[0]) + warning(ext_id, _("readall: unable to set %s::%s"), ns, ident); + else + warning(ext_id, _("readall: unable to set %s"), ident); return awk_false; } return awk_true; diff --git a/test/ChangeLog b/test/ChangeLog index 6ec48cfd..b7e506a3 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2022-09-17 Arnold D. Robbins + + * readall.ok, readall1.awk, readall2.awk: Update for code changes. + 2022-09-16 Arnold D. Robbins * Makefile.am (EXTRA_DIST): New test: dbugeval4. diff --git a/test/readall.ok b/test/readall.ok index b343af59..8aa6899f 100644 --- a/test/readall.ok +++ b/test/readall.ok @@ -1,6 +1,7 @@ 1 1 5.9 3 -2.327 +42 zebra[archie] = banana zebra[0] = apple zebra[3][foo] = bar diff --git a/test/readall1.awk b/test/readall1.awk index 2888d157..4f90c73d 100644 --- a/test/readall1.awk +++ b/test/readall1.awk @@ -2,6 +2,7 @@ BEGIN { x = 5.9 y = 3 z = -2.327 + guide::answer = 42 zebra[0] = "apple" zebra["archie"] = "banana" zebra[3]["foo"] = "bar" diff --git a/test/readall2.awk b/test/readall2.awk index 8b79849a..af45751d 100644 --- a/test/readall2.awk +++ b/test/readall2.awk @@ -10,6 +10,7 @@ function printarray(n, x, i) { BEGIN { print readall(ifile) print x, y, z + print guide::answer #print zebra[0], zebra[3]["foo"], zebra[3]["bar"] printarray("zebra", zebra) } commit 8a026763c28ed67f8e195750caf1fe476794282b Author: Arnold D. Robbins Date: Sat Sep 17 21:58:12 2022 +0300 Small doc update for \B. diff --git a/doc/ChangeLog b/doc/ChangeLog index 0ccc653d..4862ae7d 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -2,6 +2,9 @@ * gawktexi.in (Extension Sample Read write array): Clarify how readall works. Thanks to J Naman, for the prod. + (GNU Regexp Operators): Add some phraseology borrowed from GNU grep + man page to further explain \B. Thanks to Neil R. Ormos + for the suggestion. 2022-09-04 Arnold D. Robbins diff --git a/doc/gawk.texi b/doc/gawk.texi index 809b8fd7..758cc2db 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -6693,6 +6693,8 @@ Matches the empty string that occurs between two word-constituent characters. For example, @code{/\Brat\B/} matches @samp{crate}, but it does not match @samp{dirty rat}. @samp{\B} is essentially the opposite of @samp{\y}. +Another way to think of this is that @samp{\B} matches the empty string +provided it's not at the edge of a word. @end table @cindex buffers @subentry operators for diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 97445ace..3faefbee 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -6377,6 +6377,8 @@ Matches the empty string that occurs between two word-constituent characters. For example, @code{/\Brat\B/} matches @samp{crate}, but it does not match @samp{dirty rat}. @samp{\B} is essentially the opposite of @samp{\y}. +Another way to think of this is that @samp{\B} matches the empty string +provided it's not at the edge of a word. @end table @cindex buffers @subentry operators for commit a3799ae3f5dd6648040d499224cc6dea61b355dd Author: Arnold D. Robbins Date: Mon Sep 19 18:51:28 2022 +0300 Fix negative NaN issue on RiscV. diff --git a/ChangeLog b/ChangeLog index 35941d0a..d751baf1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2022-09-19 Arnold D. Robbins + + * eval.c (fix_nan_sign): New function. See bug list citation + in the code. + * interpret.h (r_interpret): Use it for plus and minus cases. + 2022-09-16 Arnold D. Robbins * debug.c (do_eval): If a fatal error occurs, don't attempt to diff --git a/eval.c b/eval.c index 1069570b..3bfff0ca 100644 --- a/eval.c +++ b/eval.c @@ -39,6 +39,8 @@ static int num_exec_hook = 0; static Func_pre_exec pre_execute[MAX_EXEC_HOOKS]; static Func_post_exec post_execute = NULL; +static double fix_nan_sign(double left, double right, double result); + extern void frame_popped(); int OFSlen; @@ -1901,3 +1903,20 @@ elem_new_to_scalar(NODE *n) return n; } + +/* fix_nan_sign --- fix NaN sign on RiscV */ + +// See the thread starting at +// https://lists.gnu.org/archive/html/bug-gawk/2022-09/msg00005.html +// for why we need this function. + +static double +fix_nan_sign(double left, double right, double result) +{ + if (isnan(left) && signbit(left)) + return copysign(result, -1.0); + else if (isnan(right) && signbit(right)) + return copysign(result, -1.0); + else + return result; +} diff --git a/interpret.h b/interpret.h index 26010ada..955d918f 100644 --- a/interpret.h +++ b/interpret.h @@ -583,6 +583,7 @@ uninitialized_scalar: plus: t1 = TOP_NUMBER(); r = make_number(t1->numbr + x2); + r->numbr = fix_nan_sign(t1->numbr, x2, r->numbr); DEREF(t1); REPLACE(r); break; @@ -597,6 +598,7 @@ plus: minus: t1 = TOP_NUMBER(); r = make_number(t1->numbr - x2); + r->numbr = fix_nan_sign(t1->numbr, x2, r->numbr); DEREF(t1); REPLACE(r); break; commit 388ca0a4b44f03aa28bc9ce870f50306389f707b Author: Arnold D. Robbins Date: Mon Sep 19 18:53:31 2022 +0300 Completely update the ChangeLog. diff --git a/ChangeLog b/ChangeLog index d751baf1..da8d51d2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,10 @@ 2022-09-19 Arnold D. Robbins - * eval.c (fix_nan_sign): New function. See bug list citation - in the code. + Fix negative NaN issues on RiscV. See bug list citation + in the code. Thanks to Andreas Schwab + for the report. + + * eval.c (fix_nan_sign): New function. * interpret.h (r_interpret): Use it for plus and minus cases. 2022-09-16 Arnold D. Robbins commit 39f53d2df260d90afe0251360f57cf00d2f7007f Author: Arnold D. Robbins Date: Mon Sep 19 22:17:23 2022 +0300 Fix typos in ChangeLog. diff --git a/ChangeLog b/ChangeLog index da8d51d2..cfcc74f1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -84,7 +84,7 @@ 2022-08-10 Arnold D. Robbins * symbol.c (init_the_tables): New function. - (init_symbol_table): Reword to make functions persistent also + (init_symbol_table): Rework to make functions persistent also by saving in the root pointer a struct pointing to both the global table and the function table, and restoring this on subsequent runs. The code ended up being nicely cleaner. @@ -520,7 +520,7 @@ 2022-02-22 Arnold D. Robbins - Fix resource links found by Coverity. Thanks to + Fix resource leaks found by Coverity. Thanks to Jakub Martisko for the report. * ext.c (make_builtin): Free install_name before returning. @@ -531,7 +531,7 @@ * io.c (wait_any): When saving a saved exit status returned by _cwait or waitpid or wait in struct redirect's status field, we - should actually save the valued returned by sanitize_exit_status + should actually save the value returned by sanitize_exit_status instead of the raw status. This fixes a bug whereby a saved status for a previously exited process was being returned by gawk_pclose without first being sanitized. Thanks to Jakub Martisko commit 878435e60f9afb4857f3af45e6fce910ebbcaf6c Author: Arnold D. Robbins Date: Wed Sep 21 22:07:39 2022 +0300 Add pma support for systems without MAP_NORESERVE. diff --git a/configure b/configure index 980e7c55..cf805142 100755 --- a/configure +++ b/configure @@ -12725,13 +12725,19 @@ fi LDFLAGS="${LDFLAGS} -Xlinker -no_pie" export LDFLAGS ;; - *cygwin* | *CYGWIN* | *solaris2.11* ) - true # nothing do, Cygwin and Solaris exes are not PIE + *cygwin* | *CYGWIN* | *solaris2.11* | freebsd13.* | openbsd7.* ) + true # nothing do, exes on these systems are not PIE ;; # Other OS's go here... *) # For now, play it safe use_persistent_malloc=no + + # Allow override for testing on new systems + if test "$REALLY_USE_PERSIST_MALLOC" != "" + then + use_persistent_malloc=yes + fi ;; esac else diff --git a/doc/ChangeLog b/doc/ChangeLog index 4862ae7d..2c988426 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2022-09-21 Arnold D. Robbins + + * gawktexi.in (Persistent Memory): Document that FreeBSD 13 and + OpenBSD 7 are supported. + 2022-09-17 Arnold D. Robbins * gawktexi.in (Extension Sample Read write array): Clarify how readall diff --git a/doc/gawk.texi b/doc/gawk.texi index 758cc2db..5cbe3883 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -31067,7 +31067,8 @@ $ @kbd{gawk --version} If you see the @samp{PMA} with a version indicator, then it's supported. As of this writing, persistent memory has only been tested on GNU/Linux, -Cygwin, Solaris 2.11, and Mac OS systems. On others, your mileage may +Cygwin, Solaris 2.11, Mac OS, FreeBSD 13.1 and OpenBSD 7.1. +On others, your mileage may vary, and/or you may need to investigate how to make it work for you. To use persistent memory, follow these steps: diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 3faefbee..9e85e1bb 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -29949,7 +29949,8 @@ $ @kbd{gawk --version} If you see the @samp{PMA} with a version indicator, then it's supported. As of this writing, persistent memory has only been tested on GNU/Linux, -Cygwin, Solaris 2.11, and Mac OS systems. On others, your mileage may +Cygwin, Solaris 2.11, Mac OS, FreeBSD 13.1 and OpenBSD 7.1. +On others, your mileage may vary, and/or you may need to investigate how to make it work for you. To use persistent memory, follow these steps: diff --git a/m4/ChangeLog b/m4/ChangeLog index bf60520f..705d8375 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,7 @@ +2022-09-21 Arnold D. Robbins + + * pma.m4: Allow FreeBSD 13 and OpenBSD 7. + 2022-09-04 Arnold D. Robbins * 5.2.0: Release tar ball made. diff --git a/m4/pma.m4 b/m4/pma.m4 index 96620ca5..0a8afef9 100644 --- a/m4/pma.m4 +++ b/m4/pma.m4 @@ -27,13 +27,19 @@ then LDFLAGS="${LDFLAGS} -Xlinker -no_pie" export LDFLAGS ;; - *cygwin* | *CYGWIN* | *solaris2.11* ) - true # nothing do, Cygwin and Solaris exes are not PIE + *cygwin* | *CYGWIN* | *solaris2.11* | freebsd13.* | openbsd7.* ) + true # nothing do, exes on these systems are not PIE ;; # Other OS's go here... *) # For now, play it safe use_persistent_malloc=no + + # Allow override for testing on new systems + if test "$REALLY_USE_PERSIST_MALLOC" != "" + then + use_persistent_malloc=yes + fi ;; esac else diff --git a/support/ChangeLog b/support/ChangeLog index c7f65181..c1e3b234 100644 --- a/support/ChangeLog +++ b/support/ChangeLog @@ -1,3 +1,9 @@ +2022-09-21 Arnold D. Robbins + + * pma.c: Add define for MAP_NORESERVE to zero if it's not defined. + Modify the version string. + * pma.h: Modify the version string. + 2022-09-04 Arnold D. Robbins * 5.2.0: Release tar ball made. diff --git a/support/pma.c b/support/pma.c index c89dd6b7..e9f3b092 100644 --- a/support/pma.c +++ b/support/pma.c @@ -43,8 +43,12 @@ #include "pma.h" +#ifndef MAP_NORESERVE +#define MAP_NORESERVE 0 +#endif /* MAP_NORESERVE */ + // Software version; not the same as backing file format version. -const char pma_version[] = "2022.08Aug.03.1659520468 (Avon 7)"; +const char pma_version[] = "2022.08Aug.03.1659520468 (Avon 7-g1)"; #define S(s) #s #define S2(s) S(s) diff --git a/support/pma.h b/support/pma.h index c8afdf9c..29263ae6 100644 --- a/support/pma.h +++ b/support/pma.h @@ -23,7 +23,7 @@ #define PMA_H_INCLUDED // version strings of interface and implementation should match -#define PMA_H_VERSION "2022.08Aug.03.1659520468 (Avon 7)" +#define PMA_H_VERSION "2022.08Aug.03.1659520468 (Avon 7-g1)" extern const char pma_version[]; /* May contain line number in pma.c where something went wrong if one commit d260aff3e386f74fdefd1b9e8348cd8ac0dcbc61 Author: Arnold D. Robbins Date: Thu Sep 22 09:19:54 2022 +0300 Update gawkbug.in. diff --git a/ChangeLog b/ChangeLog index cfcc74f1..9ba05bb2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2022-09-22 Arnold D. Robbins + + * gawkbug.in: Add attestation about not modifying the sources + before building. + 2022-09-19 Arnold D. Robbins Fix negative NaN issues on RiscV. See bug list citation diff --git a/gawkbug.in b/gawkbug.in index 59e6a8e4..6f6fd759 100644 --- a/gawkbug.in +++ b/gawkbug.in @@ -194,10 +194,15 @@ Machine Type: $MACHTYPE Gawk Version: $VERSION -Attestation: +Attestation 1: I have read https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. Yes / No [ Choose one. If "No", then why haven't you? ] +Attestation 2: + I have not modified the sources before building gawk. + True / False + [ Choose one. If "False", then please explain what you did and why. ] + Description: [Detailed description of the problem, suggestion, or complaint.] commit 3d7178e78e523574649578593192bab2e0d08a2a Author: Arnold D. Robbins Date: Fri Sep 23 11:22:40 2022 +0300 Yet another fix and test for Node_elem_new. diff --git a/ChangeLog b/ChangeLog index 9ba05bb2..bfa22e2b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2022-09-23 Arnold D. Robbins + + * interpret.h (r_interpret): For the `push' opcodes with + Node_elem_new, put dupnode(Nnull_string) on the stack as + the local value. Thanks to Jeff Chua + for the report. + 2022-09-22 Arnold D. Robbins * gawkbug.in: Add attestation about not modifying the sources diff --git a/interpret.h b/interpret.h index 955d918f..fde02d2d 100644 --- a/interpret.h +++ b/interpret.h @@ -242,7 +242,7 @@ uninitialized_scalar: save_symbol->vname); // set up local param by value if (op != Op_push_arg_untyped) { - m = elem_new_to_scalar(m); + m = dupnode(Nnull_string); } PUSH(m); diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 8992ae1b..e37f1841 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -191,7 +191,7 @@ GAWK_EXT_TESTS = \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ devfd devfd1 devfd2 \ - dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \ + dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 elemnew4 \ errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ @@ -2757,6 +2757,11 @@ elemnew3: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew4: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/ChangeLog b/test/ChangeLog index b7e506a3..0e17406b 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2022-09-23 Arnold D. Robbins + + * Makefile.am (EXTRA_DIST): New test: elemnew4. + * elemnew4.awk, elemnew4.in, elemnew4.ok: New files. + 2022-09-17 Arnold D. Robbins * readall.ok, readall1.awk, readall2.awk: Update for code changes. diff --git a/test/Makefile.am b/test/Makefile.am index e0a1a5d3..dd55aa21 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -291,6 +291,9 @@ EXTRA_DIST = \ elemnew2.ok \ elemnew3.awk \ elemnew3.ok \ + elemnew4.awk \ + elemnew4.in \ + elemnew4.ok \ escapebrace.awk \ escapebrace.in \ escapebrace.ok \ @@ -1490,7 +1493,7 @@ GAWK_EXT_TESTS = \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ devfd devfd1 devfd2 \ - dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \ + dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 elemnew4 \ errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ diff --git a/test/Makefile.in b/test/Makefile.in index f4e865d9..8a0b2f56 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -559,6 +559,9 @@ EXTRA_DIST = \ elemnew2.ok \ elemnew3.awk \ elemnew3.ok \ + elemnew4.awk \ + elemnew4.in \ + elemnew4.ok \ escapebrace.awk \ escapebrace.in \ escapebrace.ok \ @@ -1758,7 +1761,7 @@ GAWK_EXT_TESTS = \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ devfd devfd1 devfd2 \ - dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \ + dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 elemnew4 \ errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ @@ -4507,6 +4510,11 @@ elemnew3: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew4: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index d30c468e..31eb89f1 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1452,6 +1452,11 @@ elemnew3: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew4: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/elemnew4.awk b/test/elemnew4.awk new file mode 100644 index 00000000..af38469a --- /dev/null +++ b/test/elemnew4.awk @@ -0,0 +1,441 @@ +#!/bin/awk -f +# SPDX-License-Identifier: GPL-2.0 +# gen-insn-attr-x86.awk: Instruction attribute table generator +# Written by Masami Hiramatsu +# +# Usage: awk -f gen-insn-attr-x86.awk x86-opcode-map.txt > inat-tables.c + +# Awk implementation sanity check +function check_awk_implement() { + if (sprintf("%x", 0) != "0") + return "Your awk has a printf-format problem." + return "" +} + +# Clear working vars +function clear_vars() { + delete table + delete lptable2 + delete lptable1 + delete lptable3 + eid = -1 # escape id + gid = -1 # group id + aid = -1 # AVX id + tname = "" +} + +BEGIN { + # Implementation error checking + awkchecked = check_awk_implement() + if (awkchecked != "") { + print "Error: " awkchecked > "/dev/stderr" + print "Please try to use gawk." > "/dev/stderr" + exit 1 + } + + # Setup generating tables + print "/* x86 opcode map generated from x86-opcode-map.txt */" + print "/* Do not change this code. */\n" + ggid = 1 + geid = 1 + gaid = 0 + delete etable + delete gtable + delete atable + + opnd_expr = "^[A-Za-z/]" + ext_expr = "^\\(" + sep_expr = "^\\|$" + group_expr = "^Grp[0-9A-Za-z]+" + + imm_expr = "^[IJAOL][a-z]" + imm_flag["Ib"] = "INAT_MAKE_IMM(INAT_IMM_BYTE)" + imm_flag["Jb"] = "INAT_MAKE_IMM(INAT_IMM_BYTE)" + imm_flag["Iw"] = "INAT_MAKE_IMM(INAT_IMM_WORD)" + imm_flag["Id"] = "INAT_MAKE_IMM(INAT_IMM_DWORD)" + imm_flag["Iq"] = "INAT_MAKE_IMM(INAT_IMM_QWORD)" + imm_flag["Ap"] = "INAT_MAKE_IMM(INAT_IMM_PTR)" + imm_flag["Iz"] = "INAT_MAKE_IMM(INAT_IMM_VWORD32)" + imm_flag["Jz"] = "INAT_MAKE_IMM(INAT_IMM_VWORD32)" + imm_flag["Iv"] = "INAT_MAKE_IMM(INAT_IMM_VWORD)" + imm_flag["Ob"] = "INAT_MOFFSET" + imm_flag["Ov"] = "INAT_MOFFSET" + imm_flag["Lx"] = "INAT_MAKE_IMM(INAT_IMM_BYTE)" + + modrm_expr = "^([CDEGMNPQRSUVW/][a-z]+|NTA|T[012])" + force64_expr = "\\([df]64\\)" + rex_expr = "^REX(\\.[XRWB]+)*" + fpu_expr = "^ESC" # TODO + + lprefix1_expr = "\\((66|!F3)\\)" + lprefix2_expr = "\\(F3\\)" + lprefix3_expr = "\\((F2|!F3|66&F2)\\)" + lprefix_expr = "\\((66|F2|F3)\\)" + max_lprefix = 4 + + # All opcodes starting with lower-case 'v', 'k' or with (v1) superscript + # accepts VEX prefix + vexok_opcode_expr = "^[vk].*" + vexok_expr = "\\(v1\\)" + # All opcodes with (v) superscript supports *only* VEX prefix + vexonly_expr = "\\(v\\)" + # All opcodes with (ev) superscript supports *only* EVEX prefix + evexonly_expr = "\\(ev\\)" + + prefix_expr = "\\(Prefix\\)" + prefix_num["Operand-Size"] = "INAT_PFX_OPNDSZ" + prefix_num["REPNE"] = "INAT_PFX_REPNE" + prefix_num["REP/REPE"] = "INAT_PFX_REPE" + prefix_num["XACQUIRE"] = "INAT_PFX_REPNE" + prefix_num["XRELEASE"] = "INAT_PFX_REPE" + prefix_num["LOCK"] = "INAT_PFX_LOCK" + prefix_num["SEG=CS"] = "INAT_PFX_CS" + prefix_num["SEG=DS"] = "INAT_PFX_DS" + prefix_num["SEG=ES"] = "INAT_PFX_ES" + prefix_num["SEG=FS"] = "INAT_PFX_FS" + prefix_num["SEG=GS"] = "INAT_PFX_GS" + prefix_num["SEG=SS"] = "INAT_PFX_SS" + prefix_num["Address-Size"] = "INAT_PFX_ADDRSZ" + prefix_num["VEX+1byte"] = "INAT_PFX_VEX2" + prefix_num["VEX+2byte"] = "INAT_PFX_VEX3" + prefix_num["EVEX"] = "INAT_PFX_EVEX" + + clear_vars() +} + +function semantic_error(msg) { + print "Semantic error at " NR ": " msg > "/dev/stderr" + exit 1 +} + +function debug(msg) { + print "DEBUG: " msg +} + +function array_size(arr, i,c) { + c = 0 + for (i in arr) + c++ + return c +} + +/^Table:/ { + print "/* " $0 " */" + if (tname != "") + semantic_error("Hit Table: before EndTable:."); +} + +/^Referrer:/ { + if (NF != 1) { + # escape opcode table + ref = "" + for (i = 2; i <= NF; i++) + ref = ref $i + eid = escape[ref] + tname = sprintf("inat_escape_table_%d", eid) + } +} + +/^AVXcode:/ { + if (NF != 1) { + # AVX/escape opcode table + aid = $2 + if (gaid <= aid) + gaid = aid + 1 + if (tname == "") # AVX only opcode table + tname = sprintf("inat_avx_table_%d", $2) + } + if (aid == -1 && eid == -1) # primary opcode table + tname = "inat_primary_table" +} + +/^GrpTable:/ { + print "/* " $0 " */" + if (!($2 in group)) + semantic_error("No group: " $2 ) + gid = group[$2] + tname = "inat_group_table_" gid +} + +function print_table(tbl,name,fmt,n) +{ + print "const insn_attr_t " name " = {" + for (i = 0; i < n; i++) { + id = sprintf(fmt, i) + if (tbl[id]) + print " [" id "] = " tbl[id] "," + } + print "};" +} + +/^EndTable/ { + if (gid != -1) { + # print group tables + if (array_size(table) != 0) { + print_table(table, tname "[INAT_GROUP_TABLE_SIZE]", + "0x%x", 8) + gtable[gid,0] = tname + } + if (array_size(lptable1) != 0) { + print_table(lptable1, tname "_1[INAT_GROUP_TABLE_SIZE]", + "0x%x", 8) + gtable[gid,1] = tname "_1" + } + if (array_size(lptable2) != 0) { + print_table(lptable2, tname "_2[INAT_GROUP_TABLE_SIZE]", + "0x%x", 8) + gtable[gid,2] = tname "_2" + } + if (array_size(lptable3) != 0) { + print_table(lptable3, tname "_3[INAT_GROUP_TABLE_SIZE]", + "0x%x", 8) + gtable[gid,3] = tname "_3" + } + } else { + # print primary/escaped tables + if (array_size(table) != 0) { + print_table(table, tname "[INAT_OPCODE_TABLE_SIZE]", + "0x%02x", 256) + etable[eid,0] = tname + if (aid >= 0) + atable[aid,0] = tname + } + if (array_size(lptable1) != 0) { + print_table(lptable1,tname "_1[INAT_OPCODE_TABLE_SIZE]", + "0x%02x", 256) + etable[eid,1] = tname "_1" + if (aid >= 0) + atable[aid,1] = tname "_1" + } + if (array_size(lptable2) != 0) { + print_table(lptable2,tname "_2[INAT_OPCODE_TABLE_SIZE]", + "0x%02x", 256) + etable[eid,2] = tname "_2" + if (aid >= 0) + atable[aid,2] = tname "_2" + } + if (array_size(lptable3) != 0) { + print_table(lptable3,tname "_3[INAT_OPCODE_TABLE_SIZE]", + "0x%02x", 256) + etable[eid,3] = tname "_3" + if (aid >= 0) + atable[aid,3] = tname "_3" + } + } + print "" + clear_vars() +} + +function add_flags(old,new) { + if (old && new) + return old " | " new + else if (old) + return old + else + return new +} + +# convert operands to flags. +function convert_operands(count,opnd, i,j,imm,mod) +{ + imm = null + mod = null + for (j = 1; j <= count; j++) { + i = opnd[j] + if (match(i, imm_expr) == 1) { + if (!imm_flag[i]) + semantic_error("Unknown imm opnd: " i) + if (imm) { + if (i != "Ib") + semantic_error("Second IMM error") + imm = add_flags(imm, "INAT_SCNDIMM") + } else + imm = imm_flag[i] + } else if (match(i, modrm_expr)) + mod = "INAT_MODRM" + } + return add_flags(imm, mod) +} + +/^[0-9a-f]+:/ { + if (NR == 1) + next + # get index + idx = "0x" substr($1, 1, index($1,":") - 1) + if (idx in table) + semantic_error("Redefine " idx " in " tname) + + # check if escaped opcode + if ("escape" == $2) { + if ($3 != "#") + semantic_error("No escaped name") + ref = "" + for (i = 4; i <= NF; i++) + ref = ref $i + if (ref in escape) + semantic_error("Redefine escape (" ref ")") + escape[ref] = geid + geid++ + table[idx] = "INAT_MAKE_ESCAPE(" escape[ref] ")" + next + } + + variant = null + # converts + i = 2 + while (i <= NF) { + opcode = $(i++) + delete opnds + ext = null + flags = null + opnd = null + # parse one opcode + if (match($i, opnd_expr)) { + opnd = $i + count = split($(i++), opnds, ",") + flags = convert_operands(count, opnds) + } + if (match($i, ext_expr)) + ext = $(i++) + if (match($i, sep_expr)) + i++ + else if (i < NF) + semantic_error($i " is not a separator") + + # check if group opcode + if (match(opcode, group_expr)) { + if (!(opcode in group)) { + group[opcode] = ggid + ggid++ + } + flags = add_flags(flags, "INAT_MAKE_GROUP(" group[opcode] ")") + } + # check force(or default) 64bit + if (match(ext, force64_expr)) + flags = add_flags(flags, "INAT_FORCE64") + + # check REX prefix + if (match(opcode, rex_expr)) + flags = add_flags(flags, "INAT_MAKE_PREFIX(INAT_PFX_REX)") + + # check coprocessor escape : TODO + if (match(opcode, fpu_expr)) + flags = add_flags(flags, "INAT_MODRM") + + # check VEX codes + if (match(ext, evexonly_expr)) + flags = add_flags(flags, "INAT_VEXOK | INAT_EVEXONLY") + else if (match(ext, vexonly_expr)) + flags = add_flags(flags, "INAT_VEXOK | INAT_VEXONLY") + else if (match(ext, vexok_expr) || match(opcode, vexok_opcode_expr)) + flags = add_flags(flags, "INAT_VEXOK") + + # check prefixes + if (match(ext, prefix_expr)) { + if (!prefix_num[opcode]) + semantic_error("Unknown prefix: " opcode) + flags = add_flags(flags, "INAT_MAKE_PREFIX(" prefix_num[opcode] ")") + } + if (length(flags) == 0) + continue + # check if last prefix + if (match(ext, lprefix1_expr)) { + lptable1[idx] = add_flags(lptable1[idx],flags) + variant = "INAT_VARIANT" + } + if (match(ext, lprefix2_expr)) { + lptable2[idx] = add_flags(lptable2[idx],flags) + variant = "INAT_VARIANT" + } + if (match(ext, lprefix3_expr)) { + lptable3[idx] = add_flags(lptable3[idx],flags) + variant = "INAT_VARIANT" + } + if (!match(ext, lprefix_expr)){ + table[idx] = add_flags(table[idx],flags) + } + } + if (variant) + table[idx] = add_flags(table[idx],variant) +} + +END { + if (awkchecked != "") + exit 1 + + print "#ifndef __BOOT_COMPRESSED\n" + + # print escape opcode map's array + print "/* Escape opcode map array */" + print "const insn_attr_t * const inat_escape_tables[INAT_ESC_MAX + 1]" \ + "[INAT_LSTPFX_MAX + 1] = {" + for (i = 0; i < geid; i++) + for (j = 0; j < max_lprefix; j++) + if (etable[i,j]) + print " ["i"]["j"] = "etable[i,j]"," + print "};\n" + # print group opcode map's array + print "/* Group opcode map array */" + print "const insn_attr_t * const inat_group_tables[INAT_GRP_MAX + 1]"\ + "[INAT_LSTPFX_MAX + 1] = {" + for (i = 0; i < ggid; i++) + for (j = 0; j < max_lprefix; j++) + if (gtable[i,j]) + print " ["i"]["j"] = "gtable[i,j]"," + print "};\n" + # print AVX opcode map's array + print "/* AVX opcode map array */" + print "const insn_attr_t * const inat_avx_tables[X86_VEX_M_MAX + 1]"\ + "[INAT_LSTPFX_MAX + 1] = {" + for (i = 0; i < gaid; i++) + for (j = 0; j < max_lprefix; j++) + if (atable[i,j]) + print " ["i"]["j"] = "atable[i,j]"," + print "};\n" + + print "#else /* !__BOOT_COMPRESSED */\n" + + print "/* Escape opcode map array */" + print "static const insn_attr_t *inat_escape_tables[INAT_ESC_MAX + 1]" \ + "[INAT_LSTPFX_MAX + 1];" + print "" + + print "/* Group opcode map array */" + print "static const insn_attr_t *inat_group_tables[INAT_GRP_MAX + 1]"\ + "[INAT_LSTPFX_MAX + 1];" + print "" + + print "/* AVX opcode map array */" + print "static const insn_attr_t *inat_avx_tables[X86_VEX_M_MAX + 1]"\ + "[INAT_LSTPFX_MAX + 1];" + print "" + + print "static void inat_init_tables(void)" + print "{" + + # print escape opcode map's array + print "\t/* Print Escape opcode map array */" + for (i = 0; i < geid; i++) + for (j = 0; j < max_lprefix; j++) + if (etable[i,j]) + print "\tinat_escape_tables["i"]["j"] = "etable[i,j]";" + print "" + + # print group opcode map's array + print "\t/* Print Group opcode map array */" + for (i = 0; i < ggid; i++) + for (j = 0; j < max_lprefix; j++) + if (gtable[i,j]) + print "\tinat_group_tables["i"]["j"] = "gtable[i,j]";" + print "" + # print AVX opcode map's array + print "\t/* Print AVX opcode map array */" + for (i = 0; i < gaid; i++) + for (j = 0; j < max_lprefix; j++) + if (atable[i,j]) + print "\tinat_avx_tables["i"]["j"] = "atable[i,j]";" + + print "}" + print "#endif" +} + diff --git a/test/elemnew4.in b/test/elemnew4.in new file mode 100644 index 00000000..d12d1358 --- /dev/null +++ b/test/elemnew4.in @@ -0,0 +1,1188 @@ +# x86 Opcode Maps +# +# This is (mostly) based on following documentations. +# - Intel(R) 64 and IA-32 Architectures Software Developer's Manual Vol.2C +# (#326018-047US, June 2013) +# +# +# Table: table-name +# Referrer: escaped-name +# AVXcode: avx-code +# opcode: mnemonic|GrpXXX [operand1[,operand2...]] [(extra1)[,(extra2)...] [| 2nd-mnemonic ...] +# (or) +# opcode: escape # escaped-name +# EndTable +# +# mnemonics that begin with lowercase 'v' accept a VEX or EVEX prefix +# mnemonics that begin with lowercase 'k' accept a VEX prefix +# +# +# GrpTable: GrpXXX +# reg: mnemonic [operand1[,operand2...]] [(extra1)[,(extra2)...] [| 2nd-mnemonic ...] +# EndTable +# +# AVX Superscripts +# (ev): this opcode requires EVEX prefix. +# (evo): this opcode is changed by EVEX prefix (EVEX opcode) +# (v): this opcode requires VEX prefix. +# (v1): this opcode only supports 128bit VEX. +# +# Last Prefix Superscripts +# - (66): the last prefix is 0x66 +# - (F3): the last prefix is 0xF3 +# - (F2): the last prefix is 0xF2 +# - (!F3) : the last prefix is not 0xF3 (including non-last prefix case) +# - (66&F2): Both 0x66 and 0xF2 prefixes are specified. + +Table: one byte opcode +Referrer: +AVXcode: +# 0x00 - 0x0f +00: ADD Eb,Gb +01: ADD Ev,Gv +02: ADD Gb,Eb +03: ADD Gv,Ev +04: ADD AL,Ib +05: ADD rAX,Iz +06: PUSH ES (i64) +07: POP ES (i64) +08: OR Eb,Gb +09: OR Ev,Gv +0a: OR Gb,Eb +0b: OR Gv,Ev +0c: OR AL,Ib +0d: OR rAX,Iz +0e: PUSH CS (i64) +0f: escape # 2-byte escape +# 0x10 - 0x1f +10: ADC Eb,Gb +11: ADC Ev,Gv +12: ADC Gb,Eb +13: ADC Gv,Ev +14: ADC AL,Ib +15: ADC rAX,Iz +16: PUSH SS (i64) +17: POP SS (i64) +18: SBB Eb,Gb +19: SBB Ev,Gv +1a: SBB Gb,Eb +1b: SBB Gv,Ev +1c: SBB AL,Ib +1d: SBB rAX,Iz +1e: PUSH DS (i64) +1f: POP DS (i64) +# 0x20 - 0x2f +20: AND Eb,Gb +21: AND Ev,Gv +22: AND Gb,Eb +23: AND Gv,Ev +24: AND AL,Ib +25: AND rAx,Iz +26: SEG=ES (Prefix) +27: DAA (i64) +28: SUB Eb,Gb +29: SUB Ev,Gv +2a: SUB Gb,Eb +2b: SUB Gv,Ev +2c: SUB AL,Ib +2d: SUB rAX,Iz +2e: SEG=CS (Prefix) +2f: DAS (i64) +# 0x30 - 0x3f +30: XOR Eb,Gb +31: XOR Ev,Gv +32: XOR Gb,Eb +33: XOR Gv,Ev +34: XOR AL,Ib +35: XOR rAX,Iz +36: SEG=SS (Prefix) +37: AAA (i64) +38: CMP Eb,Gb +39: CMP Ev,Gv +3a: CMP Gb,Eb +3b: CMP Gv,Ev +3c: CMP AL,Ib +3d: CMP rAX,Iz +3e: SEG=DS (Prefix) +3f: AAS (i64) +# 0x40 - 0x4f +40: INC eAX (i64) | REX (o64) +41: INC eCX (i64) | REX.B (o64) +42: INC eDX (i64) | REX.X (o64) +43: INC eBX (i64) | REX.XB (o64) +44: INC eSP (i64) | REX.R (o64) +45: INC eBP (i64) | REX.RB (o64) +46: INC eSI (i64) | REX.RX (o64) +47: INC eDI (i64) | REX.RXB (o64) +48: DEC eAX (i64) | REX.W (o64) +49: DEC eCX (i64) | REX.WB (o64) +4a: DEC eDX (i64) | REX.WX (o64) +4b: DEC eBX (i64) | REX.WXB (o64) +4c: DEC eSP (i64) | REX.WR (o64) +4d: DEC eBP (i64) | REX.WRB (o64) +4e: DEC eSI (i64) | REX.WRX (o64) +4f: DEC eDI (i64) | REX.WRXB (o64) +# 0x50 - 0x5f +50: PUSH rAX/r8 (d64) +51: PUSH rCX/r9 (d64) +52: PUSH rDX/r10 (d64) +53: PUSH rBX/r11 (d64) +54: PUSH rSP/r12 (d64) +55: PUSH rBP/r13 (d64) +56: PUSH rSI/r14 (d64) +57: PUSH rDI/r15 (d64) +58: POP rAX/r8 (d64) +59: POP rCX/r9 (d64) +5a: POP rDX/r10 (d64) +5b: POP rBX/r11 (d64) +5c: POP rSP/r12 (d64) +5d: POP rBP/r13 (d64) +5e: POP rSI/r14 (d64) +5f: POP rDI/r15 (d64) +# 0x60 - 0x6f +60: PUSHA/PUSHAD (i64) +61: POPA/POPAD (i64) +62: BOUND Gv,Ma (i64) | EVEX (Prefix) +63: ARPL Ew,Gw (i64) | MOVSXD Gv,Ev (o64) +64: SEG=FS (Prefix) +65: SEG=GS (Prefix) +66: Operand-Size (Prefix) +67: Address-Size (Prefix) +68: PUSH Iz (d64) +69: IMUL Gv,Ev,Iz +6a: PUSH Ib (d64) +6b: IMUL Gv,Ev,Ib +6c: INS/INSB Yb,DX +6d: INS/INSW/INSD Yz,DX +6e: OUTS/OUTSB DX,Xb +6f: OUTS/OUTSW/OUTSD DX,Xz +# 0x70 - 0x7f +70: JO Jb +71: JNO Jb +72: JB/JNAE/JC Jb +73: JNB/JAE/JNC Jb +74: JZ/JE Jb +75: JNZ/JNE Jb +76: JBE/JNA Jb +77: JNBE/JA Jb +78: JS Jb +79: JNS Jb +7a: JP/JPE Jb +7b: JNP/JPO Jb +7c: JL/JNGE Jb +7d: JNL/JGE Jb +7e: JLE/JNG Jb +7f: JNLE/JG Jb +# 0x80 - 0x8f +80: Grp1 Eb,Ib (1A) +81: Grp1 Ev,Iz (1A) +82: Grp1 Eb,Ib (1A),(i64) +83: Grp1 Ev,Ib (1A) +84: TEST Eb,Gb +85: TEST Ev,Gv +86: XCHG Eb,Gb +87: XCHG Ev,Gv +88: MOV Eb,Gb +89: MOV Ev,Gv +8a: MOV Gb,Eb +8b: MOV Gv,Ev +8c: MOV Ev,Sw +8d: LEA Gv,M +8e: MOV Sw,Ew +8f: Grp1A (1A) | POP Ev (d64) +# 0x90 - 0x9f +90: NOP | PAUSE (F3) | XCHG r8,rAX +91: XCHG rCX/r9,rAX +92: XCHG rDX/r10,rAX +93: XCHG rBX/r11,rAX +94: XCHG rSP/r12,rAX +95: XCHG rBP/r13,rAX +96: XCHG rSI/r14,rAX +97: XCHG rDI/r15,rAX +98: CBW/CWDE/CDQE +99: CWD/CDQ/CQO +9a: CALLF Ap (i64) +9b: FWAIT/WAIT +9c: PUSHF/D/Q Fv (d64) +9d: POPF/D/Q Fv (d64) +9e: SAHF +9f: LAHF +# 0xa0 - 0xaf +a0: MOV AL,Ob +a1: MOV rAX,Ov +a2: MOV Ob,AL +a3: MOV Ov,rAX +a4: MOVS/B Yb,Xb +a5: MOVS/W/D/Q Yv,Xv +a6: CMPS/B Xb,Yb +a7: CMPS/W/D Xv,Yv +a8: TEST AL,Ib +a9: TEST rAX,Iz +aa: STOS/B Yb,AL +ab: STOS/W/D/Q Yv,rAX +ac: LODS/B AL,Xb +ad: LODS/W/D/Q rAX,Xv +ae: SCAS/B AL,Yb +# Note: The May 2011 Intel manual shows Xv for the second parameter of the +# next instruction but Yv is correct +af: SCAS/W/D/Q rAX,Yv +# 0xb0 - 0xbf +b0: MOV AL/R8L,Ib +b1: MOV CL/R9L,Ib +b2: MOV DL/R10L,Ib +b3: MOV BL/R11L,Ib +b4: MOV AH/R12L,Ib +b5: MOV CH/R13L,Ib +b6: MOV DH/R14L,Ib +b7: MOV BH/R15L,Ib +b8: MOV rAX/r8,Iv +b9: MOV rCX/r9,Iv +ba: MOV rDX/r10,Iv +bb: MOV rBX/r11,Iv +bc: MOV rSP/r12,Iv +bd: MOV rBP/r13,Iv +be: MOV rSI/r14,Iv +bf: MOV rDI/r15,Iv +# 0xc0 - 0xcf +c0: Grp2 Eb,Ib (1A) +c1: Grp2 Ev,Ib (1A) +c2: RETN Iw (f64) +c3: RETN +c4: LES Gz,Mp (i64) | VEX+2byte (Prefix) +c5: LDS Gz,Mp (i64) | VEX+1byte (Prefix) +c6: Grp11A Eb,Ib (1A) +c7: Grp11B Ev,Iz (1A) +c8: ENTER Iw,Ib +c9: LEAVE (d64) +ca: RETF Iw +cb: RETF +cc: INT3 +cd: INT Ib +ce: INTO (i64) +cf: IRET/D/Q +# 0xd0 - 0xdf +d0: Grp2 Eb,1 (1A) +d1: Grp2 Ev,1 (1A) +d2: Grp2 Eb,CL (1A) +d3: Grp2 Ev,CL (1A) +d4: AAM Ib (i64) +d5: AAD Ib (i64) +d6: +d7: XLAT/XLATB +d8: ESC +d9: ESC +da: ESC +db: ESC +dc: ESC +dd: ESC +de: ESC +df: ESC +# 0xe0 - 0xef +# Note: "forced64" is Intel CPU behavior: they ignore 0x66 prefix +# in 64-bit mode. AMD CPUs accept 0x66 prefix, it causes RIP truncation +# to 16 bits. In 32-bit mode, 0x66 is accepted by both Intel and AMD. +e0: LOOPNE/LOOPNZ Jb (f64) +e1: LOOPE/LOOPZ Jb (f64) +e2: LOOP Jb (f64) +e3: JrCXZ Jb (f64) +e4: IN AL,Ib +e5: IN eAX,Ib +e6: OUT Ib,AL +e7: OUT Ib,eAX +# With 0x66 prefix in 64-bit mode, for AMD CPUs immediate offset +# in "near" jumps and calls is 16-bit. For CALL, +# push of return address is 16-bit wide, RSP is decremented by 2 +# but is not truncated to 16 bits, unlike RIP. +e8: CALL Jz (f64) +e9: JMP-near Jz (f64) +ea: JMP-far Ap (i64) +eb: JMP-short Jb (f64) +ec: IN AL,DX +ed: IN eAX,DX +ee: OUT DX,AL +ef: OUT DX,eAX +# 0xf0 - 0xff +f0: LOCK (Prefix) +f1: +f2: REPNE (Prefix) | XACQUIRE (Prefix) +f3: REP/REPE (Prefix) | XRELEASE (Prefix) +f4: HLT +f5: CMC +f6: Grp3_1 Eb (1A) +f7: Grp3_2 Ev (1A) +f8: CLC +f9: STC +fa: CLI +fb: STI +fc: CLD +fd: STD +fe: Grp4 (1A) +ff: Grp5 (1A) +EndTable + +Table: 2-byte opcode (0x0f) +Referrer: 2-byte escape +AVXcode: 1 +# 0x0f 0x00-0x0f +00: Grp6 (1A) +01: Grp7 (1A) +02: LAR Gv,Ew +03: LSL Gv,Ew +04: +05: SYSCALL (o64) +06: CLTS +07: SYSRET (o64) +08: INVD +09: WBINVD | WBNOINVD (F3) +0a: +0b: UD2 (1B) +0c: +# AMD's prefetch group. Intel supports prefetchw(/1) only. +0d: GrpP +0e: FEMMS +# 3DNow! uses the last imm byte as opcode extension. +0f: 3DNow! Pq,Qq,Ib +# 0x0f 0x10-0x1f +# NOTE: According to Intel SDM opcode map, vmovups and vmovupd has no operands +# but it actually has operands. And also, vmovss and vmovsd only accept 128bit. +# MOVSS/MOVSD has too many forms(3) on SDM. This map just shows a typical form. +# Many AVX instructions lack v1 superscript, according to Intel AVX-Prgramming +# Reference A.1 +10: vmovups Vps,Wps | vmovupd Vpd,Wpd (66) | vmovss Vx,Hx,Wss (F3),(v1) | vmovsd Vx,Hx,Wsd (F2),(v1) +11: vmovups Wps,Vps | vmovupd Wpd,Vpd (66) | vmovss Wss,Hx,Vss (F3),(v1) | vmovsd Wsd,Hx,Vsd (F2),(v1) +12: vmovlps Vq,Hq,Mq (v1) | vmovhlps Vq,Hq,Uq (v1) | vmovlpd Vq,Hq,Mq (66),(v1) | vmovsldup Vx,Wx (F3) | vmovddup Vx,Wx (F2) +13: vmovlps Mq,Vq (v1) | vmovlpd Mq,Vq (66),(v1) +14: vunpcklps Vx,Hx,Wx | vunpcklpd Vx,Hx,Wx (66) +15: vunpckhps Vx,Hx,Wx | vunpckhpd Vx,Hx,Wx (66) +16: vmovhps Vdq,Hq,Mq (v1) | vmovlhps Vdq,Hq,Uq (v1) | vmovhpd Vdq,Hq,Mq (66),(v1) | vmovshdup Vx,Wx (F3) +17: vmovhps Mq,Vq (v1) | vmovhpd Mq,Vq (66),(v1) +18: Grp16 (1A) +19: +# Intel SDM opcode map does not list MPX instructions. For now using Gv for +# bnd registers and Ev for everything else is OK because the instruction +# decoder does not use the information except as an indication that there is +# a ModR/M byte. +1a: BNDCL Gv,Ev (F3) | BNDCU Gv,Ev (F2) | BNDMOV Gv,Ev (66) | BNDLDX Gv,Ev +1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv +1c: Grp20 (1A),(1C) +1d: +1e: Grp21 (1A) +1f: NOP Ev +# 0x0f 0x20-0x2f +20: MOV Rd,Cd +21: MOV Rd,Dd +22: MOV Cd,Rd +23: MOV Dd,Rd +24: +25: +26: +27: +28: vmovaps Vps,Wps | vmovapd Vpd,Wpd (66) +29: vmovaps Wps,Vps | vmovapd Wpd,Vpd (66) +2a: cvtpi2ps Vps,Qpi | cvtpi2pd Vpd,Qpi (66) | vcvtsi2ss Vss,Hss,Ey (F3),(v1) | vcvtsi2sd Vsd,Hsd,Ey (F2),(v1) +2b: vmovntps Mps,Vps | vmovntpd Mpd,Vpd (66) +2c: cvttps2pi Ppi,Wps | cvttpd2pi Ppi,Wpd (66) | vcvttss2si Gy,Wss (F3),(v1) | vcvttsd2si Gy,Wsd (F2),(v1) +2d: cvtps2pi Ppi,Wps | cvtpd2pi Qpi,Wpd (66) | vcvtss2si Gy,Wss (F3),(v1) | vcvtsd2si Gy,Wsd (F2),(v1) +2e: vucomiss Vss,Wss (v1) | vucomisd Vsd,Wsd (66),(v1) +2f: vcomiss Vss,Wss (v1) | vcomisd Vsd,Wsd (66),(v1) +# 0x0f 0x30-0x3f +30: WRMSR +31: RDTSC +32: RDMSR +33: RDPMC +34: SYSENTER +35: SYSEXIT +36: +37: GETSEC +38: escape # 3-byte escape 1 +39: +3a: escape # 3-byte escape 2 +3b: +3c: +3d: +3e: +3f: +# 0x0f 0x40-0x4f +40: CMOVO Gv,Ev +41: CMOVNO Gv,Ev | kandw/q Vk,Hk,Uk | kandb/d Vk,Hk,Uk (66) +42: CMOVB/C/NAE Gv,Ev | kandnw/q Vk,Hk,Uk | kandnb/d Vk,Hk,Uk (66) +43: CMOVAE/NB/NC Gv,Ev +44: CMOVE/Z Gv,Ev | knotw/q Vk,Uk | knotb/d Vk,Uk (66) +45: CMOVNE/NZ Gv,Ev | korw/q Vk,Hk,Uk | korb/d Vk,Hk,Uk (66) +46: CMOVBE/NA Gv,Ev | kxnorw/q Vk,Hk,Uk | kxnorb/d Vk,Hk,Uk (66) +47: CMOVA/NBE Gv,Ev | kxorw/q Vk,Hk,Uk | kxorb/d Vk,Hk,Uk (66) +48: CMOVS Gv,Ev +49: CMOVNS Gv,Ev +4a: CMOVP/PE Gv,Ev | kaddw/q Vk,Hk,Uk | kaddb/d Vk,Hk,Uk (66) +4b: CMOVNP/PO Gv,Ev | kunpckbw Vk,Hk,Uk (66) | kunpckwd/dq Vk,Hk,Uk +4c: CMOVL/NGE Gv,Ev +4d: CMOVNL/GE Gv,Ev +4e: CMOVLE/NG Gv,Ev +4f: CMOVNLE/G Gv,Ev +# 0x0f 0x50-0x5f +50: vmovmskps Gy,Ups | vmovmskpd Gy,Upd (66) +51: vsqrtps Vps,Wps | vsqrtpd Vpd,Wpd (66) | vsqrtss Vss,Hss,Wss (F3),(v1) | vsqrtsd Vsd,Hsd,Wsd (F2),(v1) +52: vrsqrtps Vps,Wps | vrsqrtss Vss,Hss,Wss (F3),(v1) +53: vrcpps Vps,Wps | vrcpss Vss,Hss,Wss (F3),(v1) +54: vandps Vps,Hps,Wps | vandpd Vpd,Hpd,Wpd (66) +55: vandnps Vps,Hps,Wps | vandnpd Vpd,Hpd,Wpd (66) +56: vorps Vps,Hps,Wps | vorpd Vpd,Hpd,Wpd (66) +57: vxorps Vps,Hps,Wps | vxorpd Vpd,Hpd,Wpd (66) +58: vaddps Vps,Hps,Wps | vaddpd Vpd,Hpd,Wpd (66) | vaddss Vss,Hss,Wss (F3),(v1) | vaddsd Vsd,Hsd,Wsd (F2),(v1) +59: vmulps Vps,Hps,Wps | vmulpd Vpd,Hpd,Wpd (66) | vmulss Vss,Hss,Wss (F3),(v1) | vmulsd Vsd,Hsd,Wsd (F2),(v1) +5a: vcvtps2pd Vpd,Wps | vcvtpd2ps Vps,Wpd (66) | vcvtss2sd Vsd,Hx,Wss (F3),(v1) | vcvtsd2ss Vss,Hx,Wsd (F2),(v1) +5b: vcvtdq2ps Vps,Wdq | vcvtqq2ps Vps,Wqq (evo) | vcvtps2dq Vdq,Wps (66) | vcvttps2dq Vdq,Wps (F3) +5c: vsubps Vps,Hps,Wps | vsubpd Vpd,Hpd,Wpd (66) | vsubss Vss,Hss,Wss (F3),(v1) | vsubsd Vsd,Hsd,Wsd (F2),(v1) +5d: vminps Vps,Hps,Wps | vminpd Vpd,Hpd,Wpd (66) | vminss Vss,Hss,Wss (F3),(v1) | vminsd Vsd,Hsd,Wsd (F2),(v1) +5e: vdivps Vps,Hps,Wps | vdivpd Vpd,Hpd,Wpd (66) | vdivss Vss,Hss,Wss (F3),(v1) | vdivsd Vsd,Hsd,Wsd (F2),(v1) +5f: vmaxps Vps,Hps,Wps | vmaxpd Vpd,Hpd,Wpd (66) | vmaxss Vss,Hss,Wss (F3),(v1) | vmaxsd Vsd,Hsd,Wsd (F2),(v1) +# 0x0f 0x60-0x6f +60: punpcklbw Pq,Qd | vpunpcklbw Vx,Hx,Wx (66),(v1) +61: punpcklwd Pq,Qd | vpunpcklwd Vx,Hx,Wx (66),(v1) +62: punpckldq Pq,Qd | vpunpckldq Vx,Hx,Wx (66),(v1) +63: packsswb Pq,Qq | vpacksswb Vx,Hx,Wx (66),(v1) +64: pcmpgtb Pq,Qq | vpcmpgtb Vx,Hx,Wx (66),(v1) +65: pcmpgtw Pq,Qq | vpcmpgtw Vx,Hx,Wx (66),(v1) +66: pcmpgtd Pq,Qq | vpcmpgtd Vx,Hx,Wx (66),(v1) +67: packuswb Pq,Qq | vpackuswb Vx,Hx,Wx (66),(v1) +68: punpckhbw Pq,Qd | vpunpckhbw Vx,Hx,Wx (66),(v1) +69: punpckhwd Pq,Qd | vpunpckhwd Vx,Hx,Wx (66),(v1) +6a: punpckhdq Pq,Qd | vpunpckhdq Vx,Hx,Wx (66),(v1) +6b: packssdw Pq,Qd | vpackssdw Vx,Hx,Wx (66),(v1) +6c: vpunpcklqdq Vx,Hx,Wx (66),(v1) +6d: vpunpckhqdq Vx,Hx,Wx (66),(v1) +6e: movd/q Pd,Ey | vmovd/q Vy,Ey (66),(v1) +6f: movq Pq,Qq | vmovdqa Vx,Wx (66) | vmovdqa32/64 Vx,Wx (66),(evo) | vmovdqu Vx,Wx (F3) | vmovdqu32/64 Vx,Wx (F3),(evo) | vmovdqu8/16 Vx,Wx (F2),(ev) +# 0x0f 0x70-0x7f +70: pshufw Pq,Qq,Ib | vpshufd Vx,Wx,Ib (66),(v1) | vpshufhw Vx,Wx,Ib (F3),(v1) | vpshuflw Vx,Wx,Ib (F2),(v1) +71: Grp12 (1A) +72: Grp13 (1A) +73: Grp14 (1A) +74: pcmpeqb Pq,Qq | vpcmpeqb Vx,Hx,Wx (66),(v1) +75: pcmpeqw Pq,Qq | vpcmpeqw Vx,Hx,Wx (66),(v1) +76: pcmpeqd Pq,Qq | vpcmpeqd Vx,Hx,Wx (66),(v1) +# Note: Remove (v), because vzeroall and vzeroupper becomes emms without VEX. +77: emms | vzeroupper | vzeroall +78: VMREAD Ey,Gy | vcvttps2udq/pd2udq Vx,Wpd (evo) | vcvttsd2usi Gv,Wx (F2),(ev) | vcvttss2usi Gv,Wx (F3),(ev) | vcvttps2uqq/pd2uqq Vx,Wx (66),(ev) +79: VMWRITE Gy,Ey | vcvtps2udq/pd2udq Vx,Wpd (evo) | vcvtsd2usi Gv,Wx (F2),(ev) | vcvtss2usi Gv,Wx (F3),(ev) | vcvtps2uqq/pd2uqq Vx,Wx (66),(ev) +7a: vcvtudq2pd/uqq2pd Vpd,Wx (F3),(ev) | vcvtudq2ps/uqq2ps Vpd,Wx (F2),(ev) | vcvttps2qq/pd2qq Vx,Wx (66),(ev) +7b: vcvtusi2sd Vpd,Hpd,Ev (F2),(ev) | vcvtusi2ss Vps,Hps,Ev (F3),(ev) | vcvtps2qq/pd2qq Vx,Wx (66),(ev) +7c: vhaddpd Vpd,Hpd,Wpd (66) | vhaddps Vps,Hps,Wps (F2) +7d: vhsubpd Vpd,Hpd,Wpd (66) | vhsubps Vps,Hps,Wps (F2) +7e: movd/q Ey,Pd | vmovd/q Ey,Vy (66),(v1) | vmovq Vq,Wq (F3),(v1) +7f: movq Qq,Pq | vmovdqa Wx,Vx (66) | vmovdqa32/64 Wx,Vx (66),(evo) | vmovdqu Wx,Vx (F3) | vmovdqu32/64 Wx,Vx (F3),(evo) | vmovdqu8/16 Wx,Vx (F2),(ev) +# 0x0f 0x80-0x8f +# Note: "forced64" is Intel CPU behavior (see comment about CALL insn). +80: JO Jz (f64) +81: JNO Jz (f64) +82: JB/JC/JNAE Jz (f64) +83: JAE/JNB/JNC Jz (f64) +84: JE/JZ Jz (f64) +85: JNE/JNZ Jz (f64) +86: JBE/JNA Jz (f64) +87: JA/JNBE Jz (f64) +88: JS Jz (f64) +89: JNS Jz (f64) +8a: JP/JPE Jz (f64) +8b: JNP/JPO Jz (f64) +8c: JL/JNGE Jz (f64) +8d: JNL/JGE Jz (f64) +8e: JLE/JNG Jz (f64) +8f: JNLE/JG Jz (f64) +# 0x0f 0x90-0x9f +90: SETO Eb | kmovw/q Vk,Wk | kmovb/d Vk,Wk (66) +91: SETNO Eb | kmovw/q Mv,Vk | kmovb/d Mv,Vk (66) +92: SETB/C/NAE Eb | kmovw Vk,Rv | kmovb Vk,Rv (66) | kmovq/d Vk,Rv (F2) +93: SETAE/NB/NC Eb | kmovw Gv,Uk | kmovb Gv,Uk (66) | kmovq/d Gv,Uk (F2) +94: SETE/Z Eb +95: SETNE/NZ Eb +96: SETBE/NA Eb +97: SETA/NBE Eb +98: SETS Eb | kortestw/q Vk,Uk | kortestb/d Vk,Uk (66) +99: SETNS Eb | ktestw/q Vk,Uk | ktestb/d Vk,Uk (66) +9a: SETP/PE Eb +9b: SETNP/PO Eb +9c: SETL/NGE Eb +9d: SETNL/GE Eb +9e: SETLE/NG Eb +9f: SETNLE/G Eb +# 0x0f 0xa0-0xaf +a0: PUSH FS (d64) +a1: POP FS (d64) +a2: CPUID +a3: BT Ev,Gv +a4: SHLD Ev,Gv,Ib +a5: SHLD Ev,Gv,CL +a6: GrpPDLK +a7: GrpRNG +a8: PUSH GS (d64) +a9: POP GS (d64) +aa: RSM +ab: BTS Ev,Gv +ac: SHRD Ev,Gv,Ib +ad: SHRD Ev,Gv,CL +ae: Grp15 (1A),(1C) +af: IMUL Gv,Ev +# 0x0f 0xb0-0xbf +b0: CMPXCHG Eb,Gb +b1: CMPXCHG Ev,Gv +b2: LSS Gv,Mp +b3: BTR Ev,Gv +b4: LFS Gv,Mp +b5: LGS Gv,Mp +b6: MOVZX Gv,Eb +b7: MOVZX Gv,Ew +b8: JMPE (!F3) | POPCNT Gv,Ev (F3) +b9: Grp10 (1A) +ba: Grp8 Ev,Ib (1A) +bb: BTC Ev,Gv +bc: BSF Gv,Ev (!F3) | TZCNT Gv,Ev (F3) +bd: BSR Gv,Ev (!F3) | LZCNT Gv,Ev (F3) +be: MOVSX Gv,Eb +bf: MOVSX Gv,Ew +# 0x0f 0xc0-0xcf +c0: XADD Eb,Gb +c1: XADD Ev,Gv +c2: vcmpps Vps,Hps,Wps,Ib | vcmppd Vpd,Hpd,Wpd,Ib (66) | vcmpss Vss,Hss,Wss,Ib (F3),(v1) | vcmpsd Vsd,Hsd,Wsd,Ib (F2),(v1) +c3: movnti My,Gy +c4: pinsrw Pq,Ry/Mw,Ib | vpinsrw Vdq,Hdq,Ry/Mw,Ib (66),(v1) +c5: pextrw Gd,Nq,Ib | vpextrw Gd,Udq,Ib (66),(v1) +c6: vshufps Vps,Hps,Wps,Ib | vshufpd Vpd,Hpd,Wpd,Ib (66) +c7: Grp9 (1A) +c8: BSWAP RAX/EAX/R8/R8D +c9: BSWAP RCX/ECX/R9/R9D +ca: BSWAP RDX/EDX/R10/R10D +cb: BSWAP RBX/EBX/R11/R11D +cc: BSWAP RSP/ESP/R12/R12D +cd: BSWAP RBP/EBP/R13/R13D +ce: BSWAP RSI/ESI/R14/R14D +cf: BSWAP RDI/EDI/R15/R15D +# 0x0f 0xd0-0xdf +d0: vaddsubpd Vpd,Hpd,Wpd (66) | vaddsubps Vps,Hps,Wps (F2) +d1: psrlw Pq,Qq | vpsrlw Vx,Hx,Wx (66),(v1) +d2: psrld Pq,Qq | vpsrld Vx,Hx,Wx (66),(v1) +d3: psrlq Pq,Qq | vpsrlq Vx,Hx,Wx (66),(v1) +d4: paddq Pq,Qq | vpaddq Vx,Hx,Wx (66),(v1) +d5: pmullw Pq,Qq | vpmullw Vx,Hx,Wx (66),(v1) +d6: vmovq Wq,Vq (66),(v1) | movq2dq Vdq,Nq (F3) | movdq2q Pq,Uq (F2) +d7: pmovmskb Gd,Nq | vpmovmskb Gd,Ux (66),(v1) +d8: psubusb Pq,Qq | vpsubusb Vx,Hx,Wx (66),(v1) +d9: psubusw Pq,Qq | vpsubusw Vx,Hx,Wx (66),(v1) +da: pminub Pq,Qq | vpminub Vx,Hx,Wx (66),(v1) +db: pand Pq,Qq | vpand Vx,Hx,Wx (66),(v1) | vpandd/q Vx,Hx,Wx (66),(evo) +dc: paddusb Pq,Qq | vpaddusb Vx,Hx,Wx (66),(v1) +dd: paddusw Pq,Qq | vpaddusw Vx,Hx,Wx (66),(v1) +de: pmaxub Pq,Qq | vpmaxub Vx,Hx,Wx (66),(v1) +df: pandn Pq,Qq | vpandn Vx,Hx,Wx (66),(v1) | vpandnd/q Vx,Hx,Wx (66),(evo) +# 0x0f 0xe0-0xef +e0: pavgb Pq,Qq | vpavgb Vx,Hx,Wx (66),(v1) +e1: psraw Pq,Qq | vpsraw Vx,Hx,Wx (66),(v1) +e2: psrad Pq,Qq | vpsrad Vx,Hx,Wx (66),(v1) +e3: pavgw Pq,Qq | vpavgw Vx,Hx,Wx (66),(v1) +e4: pmulhuw Pq,Qq | vpmulhuw Vx,Hx,Wx (66),(v1) +e5: pmulhw Pq,Qq | vpmulhw Vx,Hx,Wx (66),(v1) +e6: vcvttpd2dq Vx,Wpd (66) | vcvtdq2pd Vx,Wdq (F3) | vcvtdq2pd/qq2pd Vx,Wdq (F3),(evo) | vcvtpd2dq Vx,Wpd (F2) +e7: movntq Mq,Pq | vmovntdq Mx,Vx (66) +e8: psubsb Pq,Qq | vpsubsb Vx,Hx,Wx (66),(v1) +e9: psubsw Pq,Qq | vpsubsw Vx,Hx,Wx (66),(v1) +ea: pminsw Pq,Qq | vpminsw Vx,Hx,Wx (66),(v1) +eb: por Pq,Qq | vpor Vx,Hx,Wx (66),(v1) | vpord/q Vx,Hx,Wx (66),(evo) +ec: paddsb Pq,Qq | vpaddsb Vx,Hx,Wx (66),(v1) +ed: paddsw Pq,Qq | vpaddsw Vx,Hx,Wx (66),(v1) +ee: pmaxsw Pq,Qq | vpmaxsw Vx,Hx,Wx (66),(v1) +ef: pxor Pq,Qq | vpxor Vx,Hx,Wx (66),(v1) | vpxord/q Vx,Hx,Wx (66),(evo) +# 0x0f 0xf0-0xff +f0: vlddqu Vx,Mx (F2) +f1: psllw Pq,Qq | vpsllw Vx,Hx,Wx (66),(v1) +f2: pslld Pq,Qq | vpslld Vx,Hx,Wx (66),(v1) +f3: psllq Pq,Qq | vpsllq Vx,Hx,Wx (66),(v1) +f4: pmuludq Pq,Qq | vpmuludq Vx,Hx,Wx (66),(v1) +f5: pmaddwd Pq,Qq | vpmaddwd Vx,Hx,Wx (66),(v1) +f6: psadbw Pq,Qq | vpsadbw Vx,Hx,Wx (66),(v1) +f7: maskmovq Pq,Nq | vmaskmovdqu Vx,Ux (66),(v1) +f8: psubb Pq,Qq | vpsubb Vx,Hx,Wx (66),(v1) +f9: psubw Pq,Qq | vpsubw Vx,Hx,Wx (66),(v1) +fa: psubd Pq,Qq | vpsubd Vx,Hx,Wx (66),(v1) +fb: psubq Pq,Qq | vpsubq Vx,Hx,Wx (66),(v1) +fc: paddb Pq,Qq | vpaddb Vx,Hx,Wx (66),(v1) +fd: paddw Pq,Qq | vpaddw Vx,Hx,Wx (66),(v1) +fe: paddd Pq,Qq | vpaddd Vx,Hx,Wx (66),(v1) +ff: UD0 +EndTable + +Table: 3-byte opcode 1 (0x0f 0x38) +Referrer: 3-byte escape 1 +AVXcode: 2 +# 0x0f 0x38 0x00-0x0f +00: pshufb Pq,Qq | vpshufb Vx,Hx,Wx (66),(v1) +01: phaddw Pq,Qq | vphaddw Vx,Hx,Wx (66),(v1) +02: phaddd Pq,Qq | vphaddd Vx,Hx,Wx (66),(v1) +03: phaddsw Pq,Qq | vphaddsw Vx,Hx,Wx (66),(v1) +04: pmaddubsw Pq,Qq | vpmaddubsw Vx,Hx,Wx (66),(v1) +05: phsubw Pq,Qq | vphsubw Vx,Hx,Wx (66),(v1) +06: phsubd Pq,Qq | vphsubd Vx,Hx,Wx (66),(v1) +07: phsubsw Pq,Qq | vphsubsw Vx,Hx,Wx (66),(v1) +08: psignb Pq,Qq | vpsignb Vx,Hx,Wx (66),(v1) +09: psignw Pq,Qq | vpsignw Vx,Hx,Wx (66),(v1) +0a: psignd Pq,Qq | vpsignd Vx,Hx,Wx (66),(v1) +0b: pmulhrsw Pq,Qq | vpmulhrsw Vx,Hx,Wx (66),(v1) +0c: vpermilps Vx,Hx,Wx (66),(v) +0d: vpermilpd Vx,Hx,Wx (66),(v) +0e: vtestps Vx,Wx (66),(v) +0f: vtestpd Vx,Wx (66),(v) +# 0x0f 0x38 0x10-0x1f +10: pblendvb Vdq,Wdq (66) | vpsrlvw Vx,Hx,Wx (66),(evo) | vpmovuswb Wx,Vx (F3),(ev) +11: vpmovusdb Wx,Vd (F3),(ev) | vpsravw Vx,Hx,Wx (66),(ev) +12: vpmovusqb Wx,Vq (F3),(ev) | vpsllvw Vx,Hx,Wx (66),(ev) +13: vcvtph2ps Vx,Wx (66),(v) | vpmovusdw Wx,Vd (F3),(ev) +14: blendvps Vdq,Wdq (66) | vpmovusqw Wx,Vq (F3),(ev) | vprorvd/q Vx,Hx,Wx (66),(evo) +15: blendvpd Vdq,Wdq (66) | vpmovusqd Wx,Vq (F3),(ev) | vprolvd/q Vx,Hx,Wx (66),(evo) +16: vpermps Vqq,Hqq,Wqq (66),(v) | vpermps/d Vqq,Hqq,Wqq (66),(evo) +17: vptest Vx,Wx (66) +18: vbroadcastss Vx,Wd (66),(v) +19: vbroadcastsd Vqq,Wq (66),(v) | vbroadcastf32x2 Vqq,Wq (66),(evo) +1a: vbroadcastf128 Vqq,Mdq (66),(v) | vbroadcastf32x4/64x2 Vqq,Wq (66),(evo) +1b: vbroadcastf32x8/64x4 Vqq,Mdq (66),(ev) +1c: pabsb Pq,Qq | vpabsb Vx,Wx (66),(v1) +1d: pabsw Pq,Qq | vpabsw Vx,Wx (66),(v1) +1e: pabsd Pq,Qq | vpabsd Vx,Wx (66),(v1) +1f: vpabsq Vx,Wx (66),(ev) +# 0x0f 0x38 0x20-0x2f +20: vpmovsxbw Vx,Ux/Mq (66),(v1) | vpmovswb Wx,Vx (F3),(ev) +21: vpmovsxbd Vx,Ux/Md (66),(v1) | vpmovsdb Wx,Vd (F3),(ev) +22: vpmovsxbq Vx,Ux/Mw (66),(v1) | vpmovsqb Wx,Vq (F3),(ev) +23: vpmovsxwd Vx,Ux/Mq (66),(v1) | vpmovsdw Wx,Vd (F3),(ev) +24: vpmovsxwq Vx,Ux/Md (66),(v1) | vpmovsqw Wx,Vq (F3),(ev) +25: vpmovsxdq Vx,Ux/Mq (66),(v1) | vpmovsqd Wx,Vq (F3),(ev) +26: vptestmb/w Vk,Hx,Wx (66),(ev) | vptestnmb/w Vk,Hx,Wx (F3),(ev) +27: vptestmd/q Vk,Hx,Wx (66),(ev) | vptestnmd/q Vk,Hx,Wx (F3),(ev) +28: vpmuldq Vx,Hx,Wx (66),(v1) | vpmovm2b/w Vx,Uk (F3),(ev) +29: vpcmpeqq Vx,Hx,Wx (66),(v1) | vpmovb2m/w2m Vk,Ux (F3),(ev) +2a: vmovntdqa Vx,Mx (66),(v1) | vpbroadcastmb2q Vx,Uk (F3),(ev) +2b: vpackusdw Vx,Hx,Wx (66),(v1) +2c: vmaskmovps Vx,Hx,Mx (66),(v) | vscalefps/d Vx,Hx,Wx (66),(evo) +2d: vmaskmovpd Vx,Hx,Mx (66),(v) | vscalefss/d Vx,Hx,Wx (66),(evo) +2e: vmaskmovps Mx,Hx,Vx (66),(v) +2f: vmaskmovpd Mx,Hx,Vx (66),(v) +# 0x0f 0x38 0x30-0x3f +30: vpmovzxbw Vx,Ux/Mq (66),(v1) | vpmovwb Wx,Vx (F3),(ev) +31: vpmovzxbd Vx,Ux/Md (66),(v1) | vpmovdb Wx,Vd (F3),(ev) +32: vpmovzxbq Vx,Ux/Mw (66),(v1) | vpmovqb Wx,Vq (F3),(ev) +33: vpmovzxwd Vx,Ux/Mq (66),(v1) | vpmovdw Wx,Vd (F3),(ev) +34: vpmovzxwq Vx,Ux/Md (66),(v1) | vpmovqw Wx,Vq (F3),(ev) +35: vpmovzxdq Vx,Ux/Mq (66),(v1) | vpmovqd Wx,Vq (F3),(ev) +36: vpermd Vqq,Hqq,Wqq (66),(v) | vpermd/q Vqq,Hqq,Wqq (66),(evo) +37: vpcmpgtq Vx,Hx,Wx (66),(v1) +38: vpminsb Vx,Hx,Wx (66),(v1) | vpmovm2d/q Vx,Uk (F3),(ev) +39: vpminsd Vx,Hx,Wx (66),(v1) | vpminsd/q Vx,Hx,Wx (66),(evo) | vpmovd2m/q2m Vk,Ux (F3),(ev) +3a: vpminuw Vx,Hx,Wx (66),(v1) | vpbroadcastmw2d Vx,Uk (F3),(ev) +3b: vpminud Vx,Hx,Wx (66),(v1) | vpminud/q Vx,Hx,Wx (66),(evo) +3c: vpmaxsb Vx,Hx,Wx (66),(v1) +3d: vpmaxsd Vx,Hx,Wx (66),(v1) | vpmaxsd/q Vx,Hx,Wx (66),(evo) +3e: vpmaxuw Vx,Hx,Wx (66),(v1) +3f: vpmaxud Vx,Hx,Wx (66),(v1) | vpmaxud/q Vx,Hx,Wx (66),(evo) +# 0x0f 0x38 0x40-0x8f +40: vpmulld Vx,Hx,Wx (66),(v1) | vpmulld/q Vx,Hx,Wx (66),(evo) +41: vphminposuw Vdq,Wdq (66),(v1) +42: vgetexpps/d Vx,Wx (66),(ev) +43: vgetexpss/d Vx,Hx,Wx (66),(ev) +44: vplzcntd/q Vx,Wx (66),(ev) +45: vpsrlvd/q Vx,Hx,Wx (66),(v) +46: vpsravd Vx,Hx,Wx (66),(v) | vpsravd/q Vx,Hx,Wx (66),(evo) +47: vpsllvd/q Vx,Hx,Wx (66),(v) +# Skip 0x48 +49: TILERELEASE (v1),(000),(11B) | LDTILECFG Mtc (v1)(000) | STTILECFG Mtc (66),(v1),(000) | TILEZERO Vt (F2),(v1),(11B) +# Skip 0x4a +4b: TILELOADD Vt,Wsm (F2),(v1) | TILELOADDT1 Vt,Wsm (66),(v1) | TILESTORED Wsm,Vt (F3),(v) +4c: vrcp14ps/d Vpd,Wpd (66),(ev) +4d: vrcp14ss/d Vsd,Hpd,Wsd (66),(ev) +4e: vrsqrt14ps/d Vpd,Wpd (66),(ev) +4f: vrsqrt14ss/d Vsd,Hsd,Wsd (66),(ev) +50: vpdpbusd Vx,Hx,Wx (66),(ev) +51: vpdpbusds Vx,Hx,Wx (66),(ev) +52: vdpbf16ps Vx,Hx,Wx (F3),(ev) | vpdpwssd Vx,Hx,Wx (66),(ev) | vp4dpwssd Vdqq,Hdqq,Wdq (F2),(ev) +53: vpdpwssds Vx,Hx,Wx (66),(ev) | vp4dpwssds Vdqq,Hdqq,Wdq (F2),(ev) +54: vpopcntb/w Vx,Wx (66),(ev) +55: vpopcntd/q Vx,Wx (66),(ev) +58: vpbroadcastd Vx,Wx (66),(v) +59: vpbroadcastq Vx,Wx (66),(v) | vbroadcasti32x2 Vx,Wx (66),(evo) +5a: vbroadcasti128 Vqq,Mdq (66),(v) | vbroadcasti32x4/64x2 Vx,Wx (66),(evo) +5b: vbroadcasti32x8/64x4 Vqq,Mdq (66),(ev) +5c: TDPBF16PS Vt,Wt,Ht (F3),(v1) +# Skip 0x5d +5e: TDPBSSD Vt,Wt,Ht (F2),(v1) | TDPBSUD Vt,Wt,Ht (F3),(v1) | TDPBUSD Vt,Wt,Ht (66),(v1) | TDPBUUD Vt,Wt,Ht (v1) +# Skip 0x5f-0x61 +62: vpexpandb/w Vx,Wx (66),(ev) +63: vpcompressb/w Wx,Vx (66),(ev) +64: vpblendmd/q Vx,Hx,Wx (66),(ev) +65: vblendmps/d Vx,Hx,Wx (66),(ev) +66: vpblendmb/w Vx,Hx,Wx (66),(ev) +68: vp2intersectd/q Kx,Hx,Wx (F2),(ev) +# Skip 0x69-0x6f +70: vpshldvw Vx,Hx,Wx (66),(ev) +71: vpshldvd/q Vx,Hx,Wx (66),(ev) +72: vcvtne2ps2bf16 Vx,Hx,Wx (F2),(ev) | vcvtneps2bf16 Vx,Wx (F3),(ev) | vpshrdvw Vx,Hx,Wx (66),(ev) +73: vpshrdvd/q Vx,Hx,Wx (66),(ev) +75: vpermi2b/w Vx,Hx,Wx (66),(ev) +76: vpermi2d/q Vx,Hx,Wx (66),(ev) +77: vpermi2ps/d Vx,Hx,Wx (66),(ev) +78: vpbroadcastb Vx,Wx (66),(v) +79: vpbroadcastw Vx,Wx (66),(v) +7a: vpbroadcastb Vx,Rv (66),(ev) +7b: vpbroadcastw Vx,Rv (66),(ev) +7c: vpbroadcastd/q Vx,Rv (66),(ev) +7d: vpermt2b/w Vx,Hx,Wx (66),(ev) +7e: vpermt2d/q Vx,Hx,Wx (66),(ev) +7f: vpermt2ps/d Vx,Hx,Wx (66),(ev) +80: INVEPT Gy,Mdq (66) +81: INVVPID Gy,Mdq (66) +82: INVPCID Gy,Mdq (66) +83: vpmultishiftqb Vx,Hx,Wx (66),(ev) +88: vexpandps/d Vpd,Wpd (66),(ev) +89: vpexpandd/q Vx,Wx (66),(ev) +8a: vcompressps/d Wx,Vx (66),(ev) +8b: vpcompressd/q Wx,Vx (66),(ev) +8c: vpmaskmovd/q Vx,Hx,Mx (66),(v) +8d: vpermb/w Vx,Hx,Wx (66),(ev) +8e: vpmaskmovd/q Mx,Vx,Hx (66),(v) +8f: vpshufbitqmb Kx,Hx,Wx (66),(ev) +# 0x0f 0x38 0x90-0xbf (FMA) +90: vgatherdd/q Vx,Hx,Wx (66),(v) | vpgatherdd/q Vx,Wx (66),(evo) +91: vgatherqd/q Vx,Hx,Wx (66),(v) | vpgatherqd/q Vx,Wx (66),(evo) +92: vgatherdps/d Vx,Hx,Wx (66),(v) +93: vgatherqps/d Vx,Hx,Wx (66),(v) +94: +95: +96: vfmaddsub132ps/d Vx,Hx,Wx (66),(v) +97: vfmsubadd132ps/d Vx,Hx,Wx (66),(v) +98: vfmadd132ps/d Vx,Hx,Wx (66),(v) +99: vfmadd132ss/d Vx,Hx,Wx (66),(v),(v1) +9a: vfmsub132ps/d Vx,Hx,Wx (66),(v) | v4fmaddps Vdqq,Hdqq,Wdq (F2),(ev) +9b: vfmsub132ss/d Vx,Hx,Wx (66),(v),(v1) | v4fmaddss Vdq,Hdq,Wdq (F2),(ev) +9c: vfnmadd132ps/d Vx,Hx,Wx (66),(v) +9d: vfnmadd132ss/d Vx,Hx,Wx (66),(v),(v1) +9e: vfnmsub132ps/d Vx,Hx,Wx (66),(v) +9f: vfnmsub132ss/d Vx,Hx,Wx (66),(v),(v1) +a0: vpscatterdd/q Wx,Vx (66),(ev) +a1: vpscatterqd/q Wx,Vx (66),(ev) +a2: vscatterdps/d Wx,Vx (66),(ev) +a3: vscatterqps/d Wx,Vx (66),(ev) +a6: vfmaddsub213ps/d Vx,Hx,Wx (66),(v) +a7: vfmsubadd213ps/d Vx,Hx,Wx (66),(v) +a8: vfmadd213ps/d Vx,Hx,Wx (66),(v) +a9: vfmadd213ss/d Vx,Hx,Wx (66),(v),(v1) +aa: vfmsub213ps/d Vx,Hx,Wx (66),(v) | v4fnmaddps Vdqq,Hdqq,Wdq (F2),(ev) +ab: vfmsub213ss/d Vx,Hx,Wx (66),(v),(v1) | v4fnmaddss Vdq,Hdq,Wdq (F2),(ev) +ac: vfnmadd213ps/d Vx,Hx,Wx (66),(v) +ad: vfnmadd213ss/d Vx,Hx,Wx (66),(v),(v1) +ae: vfnmsub213ps/d Vx,Hx,Wx (66),(v) +af: vfnmsub213ss/d Vx,Hx,Wx (66),(v),(v1) +b4: vpmadd52luq Vx,Hx,Wx (66),(ev) +b5: vpmadd52huq Vx,Hx,Wx (66),(ev) +b6: vfmaddsub231ps/d Vx,Hx,Wx (66),(v) +b7: vfmsubadd231ps/d Vx,Hx,Wx (66),(v) +b8: vfmadd231ps/d Vx,Hx,Wx (66),(v) +b9: vfmadd231ss/d Vx,Hx,Wx (66),(v),(v1) +ba: vfmsub231ps/d Vx,Hx,Wx (66),(v) +bb: vfmsub231ss/d Vx,Hx,Wx (66),(v),(v1) +bc: vfnmadd231ps/d Vx,Hx,Wx (66),(v) +bd: vfnmadd231ss/d Vx,Hx,Wx (66),(v),(v1) +be: vfnmsub231ps/d Vx,Hx,Wx (66),(v) +bf: vfnmsub231ss/d Vx,Hx,Wx (66),(v),(v1) +# 0x0f 0x38 0xc0-0xff +c4: vpconflictd/q Vx,Wx (66),(ev) +c6: Grp18 (1A) +c7: Grp19 (1A) +c8: sha1nexte Vdq,Wdq | vexp2ps/d Vx,Wx (66),(ev) +c9: sha1msg1 Vdq,Wdq +ca: sha1msg2 Vdq,Wdq | vrcp28ps/d Vx,Wx (66),(ev) +cb: sha256rnds2 Vdq,Wdq | vrcp28ss/d Vx,Hx,Wx (66),(ev) +cc: sha256msg1 Vdq,Wdq | vrsqrt28ps/d Vx,Wx (66),(ev) +cd: sha256msg2 Vdq,Wdq | vrsqrt28ss/d Vx,Hx,Wx (66),(ev) +cf: vgf2p8mulb Vx,Wx (66) +db: VAESIMC Vdq,Wdq (66),(v1) +dc: vaesenc Vx,Hx,Wx (66) +dd: vaesenclast Vx,Hx,Wx (66) +de: vaesdec Vx,Hx,Wx (66) +df: vaesdeclast Vx,Hx,Wx (66) +f0: MOVBE Gy,My | MOVBE Gw,Mw (66) | CRC32 Gd,Eb (F2) | CRC32 Gd,Eb (66&F2) +f1: MOVBE My,Gy | MOVBE Mw,Gw (66) | CRC32 Gd,Ey (F2) | CRC32 Gd,Ew (66&F2) +f2: ANDN Gy,By,Ey (v) +f3: Grp17 (1A) +f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v) | WRUSSD/Q My,Gy (66) +f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v) | WRSSD/Q My,Gy +f7: BEXTR Gy,Ey,By (v) | SHLX Gy,Ey,By (66),(v) | SARX Gy,Ey,By (F3),(v) | SHRX Gy,Ey,By (F2),(v) +f8: MOVDIR64B Gv,Mdqq (66) | ENQCMD Gv,Mdqq (F2) | ENQCMDS Gv,Mdqq (F3) +f9: MOVDIRI My,Gy +EndTable + +Table: 3-byte opcode 2 (0x0f 0x3a) +Referrer: 3-byte escape 2 +AVXcode: 3 +# 0x0f 0x3a 0x00-0xff +00: vpermq Vqq,Wqq,Ib (66),(v) +01: vpermpd Vqq,Wqq,Ib (66),(v) +02: vpblendd Vx,Hx,Wx,Ib (66),(v) +03: valignd/q Vx,Hx,Wx,Ib (66),(ev) +04: vpermilps Vx,Wx,Ib (66),(v) +05: vpermilpd Vx,Wx,Ib (66),(v) +06: vperm2f128 Vqq,Hqq,Wqq,Ib (66),(v) +07: +08: vroundps Vx,Wx,Ib (66) | vrndscaleps Vx,Wx,Ib (66),(evo) | vrndscaleph Vx,Wx,Ib (evo) +09: vroundpd Vx,Wx,Ib (66) | vrndscalepd Vx,Wx,Ib (66),(evo) +0a: vroundss Vss,Wss,Ib (66),(v1) | vrndscaless Vx,Hx,Wx,Ib (66),(evo) | vrndscalesh Vx,Hx,Wx,Ib (evo) +0b: vroundsd Vsd,Wsd,Ib (66),(v1) | vrndscalesd Vx,Hx,Wx,Ib (66),(evo) +0c: vblendps Vx,Hx,Wx,Ib (66) +0d: vblendpd Vx,Hx,Wx,Ib (66) +0e: vpblendw Vx,Hx,Wx,Ib (66),(v1) +0f: palignr Pq,Qq,Ib | vpalignr Vx,Hx,Wx,Ib (66),(v1) +14: vpextrb Rd/Mb,Vdq,Ib (66),(v1) +15: vpextrw Rd/Mw,Vdq,Ib (66),(v1) +16: vpextrd/q Ey,Vdq,Ib (66),(v1) +17: vextractps Ed,Vdq,Ib (66),(v1) +18: vinsertf128 Vqq,Hqq,Wqq,Ib (66),(v) | vinsertf32x4/64x2 Vqq,Hqq,Wqq,Ib (66),(evo) +19: vextractf128 Wdq,Vqq,Ib (66),(v) | vextractf32x4/64x2 Wdq,Vqq,Ib (66),(evo) +1a: vinsertf32x8/64x4 Vqq,Hqq,Wqq,Ib (66),(ev) +1b: vextractf32x8/64x4 Wdq,Vqq,Ib (66),(ev) +1d: vcvtps2ph Wx,Vx,Ib (66),(v) +1e: vpcmpud/q Vk,Hd,Wd,Ib (66),(ev) +1f: vpcmpd/q Vk,Hd,Wd,Ib (66),(ev) +20: vpinsrb Vdq,Hdq,Ry/Mb,Ib (66),(v1) +21: vinsertps Vdq,Hdq,Udq/Md,Ib (66),(v1) +22: vpinsrd/q Vdq,Hdq,Ey,Ib (66),(v1) +23: vshuff32x4/64x2 Vx,Hx,Wx,Ib (66),(ev) +25: vpternlogd/q Vx,Hx,Wx,Ib (66),(ev) +26: vgetmantps/d Vx,Wx,Ib (66),(ev) | vgetmantph Vx,Wx,Ib (ev) +27: vgetmantss/d Vx,Hx,Wx,Ib (66),(ev) | vgetmantsh Vx,Hx,Wx,Ib (ev) +30: kshiftrb/w Vk,Uk,Ib (66),(v) +31: kshiftrd/q Vk,Uk,Ib (66),(v) +32: kshiftlb/w Vk,Uk,Ib (66),(v) +33: kshiftld/q Vk,Uk,Ib (66),(v) +38: vinserti128 Vqq,Hqq,Wqq,Ib (66),(v) | vinserti32x4/64x2 Vqq,Hqq,Wqq,Ib (66),(evo) +39: vextracti128 Wdq,Vqq,Ib (66),(v) | vextracti32x4/64x2 Wdq,Vqq,Ib (66),(evo) +3a: vinserti32x8/64x4 Vqq,Hqq,Wqq,Ib (66),(ev) +3b: vextracti32x8/64x4 Wdq,Vqq,Ib (66),(ev) +3e: vpcmpub/w Vk,Hk,Wx,Ib (66),(ev) +3f: vpcmpb/w Vk,Hk,Wx,Ib (66),(ev) +40: vdpps Vx,Hx,Wx,Ib (66) +41: vdppd Vdq,Hdq,Wdq,Ib (66),(v1) +42: vmpsadbw Vx,Hx,Wx,Ib (66),(v1) | vdbpsadbw Vx,Hx,Wx,Ib (66),(evo) +43: vshufi32x4/64x2 Vx,Hx,Wx,Ib (66),(ev) +44: vpclmulqdq Vx,Hx,Wx,Ib (66) +46: vperm2i128 Vqq,Hqq,Wqq,Ib (66),(v) +4a: vblendvps Vx,Hx,Wx,Lx (66),(v) +4b: vblendvpd Vx,Hx,Wx,Lx (66),(v) +4c: vpblendvb Vx,Hx,Wx,Lx (66),(v1) +50: vrangeps/d Vx,Hx,Wx,Ib (66),(ev) +51: vrangess/d Vx,Hx,Wx,Ib (66),(ev) +54: vfixupimmps/d Vx,Hx,Wx,Ib (66),(ev) +55: vfixupimmss/d Vx,Hx,Wx,Ib (66),(ev) +56: vreduceps/d Vx,Wx,Ib (66),(ev) | vreduceph Vx,Wx,Ib (ev) +57: vreducess/d Vx,Hx,Wx,Ib (66),(ev) | vreducesh Vx,Hx,Wx,Ib (ev) +60: vpcmpestrm Vdq,Wdq,Ib (66),(v1) +61: vpcmpestri Vdq,Wdq,Ib (66),(v1) +62: vpcmpistrm Vdq,Wdq,Ib (66),(v1) +63: vpcmpistri Vdq,Wdq,Ib (66),(v1) +66: vfpclassps/d Vk,Wx,Ib (66),(ev) | vfpclassph Vx,Wx,Ib (ev) +67: vfpclassss/d Vk,Wx,Ib (66),(ev) | vfpclasssh Vx,Wx,Ib (ev) +70: vpshldw Vx,Hx,Wx,Ib (66),(ev) +71: vpshldd/q Vx,Hx,Wx,Ib (66),(ev) +72: vpshrdw Vx,Hx,Wx,Ib (66),(ev) +73: vpshrdd/q Vx,Hx,Wx,Ib (66),(ev) +c2: vcmpph Vx,Hx,Wx,Ib (ev) | vcmpsh Vx,Hx,Wx,Ib (F3),(ev) +cc: sha1rnds4 Vdq,Wdq,Ib +ce: vgf2p8affineqb Vx,Wx,Ib (66) +cf: vgf2p8affineinvqb Vx,Wx,Ib (66) +df: VAESKEYGEN Vdq,Wdq,Ib (66),(v1) +f0: RORX Gy,Ey,Ib (F2),(v) | HRESET Gv,Ib (F3),(000),(11B) +EndTable + +Table: EVEX map 5 +Referrer: +AVXcode: 5 +10: vmovsh Vx,Hx,Wx (F3),(ev) | vmovsh Vx,Wx (F3),(ev) +11: vmovsh Wx,Hx,Vx (F3),(ev) | vmovsh Wx,Vx (F3),(ev) +1d: vcvtps2phx Vx,Wx (66),(ev) | vcvtss2sh Vx,Hx,Wx (ev) +2a: vcvtsi2sh Vx,Hx,Wx (F3),(ev) +2c: vcvttsh2si Vx,Wx (F3),(ev) +2d: vcvtsh2si Vx,Wx (F3),(ev) +2e: vucomish Vx,Wx (ev) +2f: vcomish Vx,Wx (ev) +51: vsqrtph Vx,Wx (ev) | vsqrtsh Vx,Hx,Wx (F3),(ev) +58: vaddph Vx,Hx,Wx (ev) | vaddsh Vx,Hx,Wx (F3),(ev) +59: vmulph Vx,Hx,Wx (ev) | vmulsh Vx,Hx,Wx (F3),(ev) +5a: vcvtpd2ph Vx,Wx (66),(ev) | vcvtph2pd Vx,Wx (ev) | vcvtsd2sh Vx,Hx,Wx (F2),(ev) | vcvtsh2sd Vx,Hx,Wx (F3),(ev) +5b: vcvtdq2ph Vx,Wx (ev) | vcvtph2dq Vx,Wx (66),(ev) | vcvtqq2ph Vx,Wx (ev) | vcvttph2dq Vx,Wx (F3),(ev) +5c: vsubph Vx,Hx,Wx (ev) | vsubsh Vx,Hx,Wx (F3),(ev) +5d: vminph Vx,Hx,Wx (ev) | vminsh Vx,Hx,Wx (F3),(ev) +5e: vdivph Vx,Hx,Wx (ev) | vdivsh Vx,Hx,Wx (F3),(ev) +5f: vmaxph Vx,Hx,Wx (ev) | vmaxsh Vx,Hx,Wx (F3),(ev) +6e: vmovw Vx,Wx (66),(ev) +78: vcvttph2udq Vx,Wx (ev) | vcvttph2uqq Vx,Wx (66),(ev) | vcvttsh2usi Vx,Wx (F3),(ev) +79: vcvtph2udq Vx,Wx (ev) | vcvtph2uqq Vx,Wx (66),(ev) | vcvtsh2usi Vx,Wx (F3),(ev) +7a: vcvttph2qq Vx,Wx (66),(ev) | vcvtudq2ph Vx,Wx (F2),(ev) | vcvtuqq2ph Vx,Wx (F2),(ev) +7b: vcvtph2qq Vx,Wx (66),(ev) | vcvtusi2sh Vx,Hx,Wx (F3),(ev) +7c: vcvttph2uw Vx,Wx (ev) | vcvttph2w Vx,Wx (66),(ev) +7d: vcvtph2uw Vx,Wx (ev) | vcvtph2w Vx,Wx (66),(ev) | vcvtuw2ph Vx,Wx (F2),(ev) | vcvtw2ph Vx,Wx (F3),(ev) +7e: vmovw Wx,Vx (66),(ev) +EndTable + +Table: EVEX map 6 +Referrer: +AVXcode: 6 +13: vcvtph2psx Vx,Wx (66),(ev) | vcvtsh2ss Vx,Hx,Wx (ev) +2c: vscalefph Vx,Hx,Wx (66),(ev) +2d: vscalefsh Vx,Hx,Wx (66),(ev) +42: vgetexpph Vx,Wx (66),(ev) +43: vgetexpsh Vx,Hx,Wx (66),(ev) +4c: vrcpph Vx,Wx (66),(ev) +4d: vrcpsh Vx,Hx,Wx (66),(ev) +4e: vrsqrtph Vx,Wx (66),(ev) +4f: vrsqrtsh Vx,Hx,Wx (66),(ev) +56: vfcmaddcph Vx,Hx,Wx (F2),(ev) | vfmaddcph Vx,Hx,Wx (F3),(ev) +57: vfcmaddcsh Vx,Hx,Wx (F2),(ev) | vfmaddcsh Vx,Hx,Wx (F3),(ev) +96: vfmaddsub132ph Vx,Hx,Wx (66),(ev) +97: vfmsubadd132ph Vx,Hx,Wx (66),(ev) +98: vfmadd132ph Vx,Hx,Wx (66),(ev) +99: vfmadd132sh Vx,Hx,Wx (66),(ev) +9a: vfmsub132ph Vx,Hx,Wx (66),(ev) +9b: vfmsub132sh Vx,Hx,Wx (66),(ev) +9c: vfnmadd132ph Vx,Hx,Wx (66),(ev) +9d: vfnmadd132sh Vx,Hx,Wx (66),(ev) +9e: vfnmsub132ph Vx,Hx,Wx (66),(ev) +9f: vfnmsub132sh Vx,Hx,Wx (66),(ev) +a6: vfmaddsub213ph Vx,Hx,Wx (66),(ev) +a7: vfmsubadd213ph Vx,Hx,Wx (66),(ev) +a8: vfmadd213ph Vx,Hx,Wx (66),(ev) +a9: vfmadd213sh Vx,Hx,Wx (66),(ev) +aa: vfmsub213ph Vx,Hx,Wx (66),(ev) +ab: vfmsub213sh Vx,Hx,Wx (66),(ev) +ac: vfnmadd213ph Vx,Hx,Wx (66),(ev) +ad: vfnmadd213sh Vx,Hx,Wx (66),(ev) +ae: vfnmsub213ph Vx,Hx,Wx (66),(ev) +af: vfnmsub213sh Vx,Hx,Wx (66),(ev) +b6: vfmaddsub231ph Vx,Hx,Wx (66),(ev) +b7: vfmsubadd231ph Vx,Hx,Wx (66),(ev) +b8: vfmadd231ph Vx,Hx,Wx (66),(ev) +b9: vfmadd231sh Vx,Hx,Wx (66),(ev) +ba: vfmsub231ph Vx,Hx,Wx (66),(ev) +bb: vfmsub231sh Vx,Hx,Wx (66),(ev) +bc: vfnmadd231ph Vx,Hx,Wx (66),(ev) +bd: vfnmadd231sh Vx,Hx,Wx (66),(ev) +be: vfnmsub231ph Vx,Hx,Wx (66),(ev) +bf: vfnmsub231sh Vx,Hx,Wx (66),(ev) +d6: vfcmulcph Vx,Hx,Wx (F2),(ev) | vfmulcph Vx,Hx,Wx (F3),(ev) +d7: vfcmulcsh Vx,Hx,Wx (F2),(ev) | vfmulcsh Vx,Hx,Wx (F3),(ev) +EndTable + +GrpTable: Grp1 +0: ADD +1: OR +2: ADC +3: SBB +4: AND +5: SUB +6: XOR +7: CMP +EndTable + +GrpTable: Grp1A +0: POP +EndTable + +GrpTable: Grp2 +0: ROL +1: ROR +2: RCL +3: RCR +4: SHL/SAL +5: SHR +6: +7: SAR +EndTable + +GrpTable: Grp3_1 +0: TEST Eb,Ib +1: TEST Eb,Ib +2: NOT Eb +3: NEG Eb +4: MUL AL,Eb +5: IMUL AL,Eb +6: DIV AL,Eb +7: IDIV AL,Eb +EndTable + +GrpTable: Grp3_2 +0: TEST Ev,Iz +1: TEST Ev,Iz +2: NOT Ev +3: NEG Ev +4: MUL rAX,Ev +5: IMUL rAX,Ev +6: DIV rAX,Ev +7: IDIV rAX,Ev +EndTable + +GrpTable: Grp4 +0: INC Eb +1: DEC Eb +EndTable + +GrpTable: Grp5 +0: INC Ev +1: DEC Ev +# Note: "forced64" is Intel CPU behavior (see comment about CALL insn). +2: CALLN Ev (f64) +3: CALLF Ep +4: JMPN Ev (f64) +5: JMPF Mp +6: PUSH Ev (d64) +7: +EndTable + +GrpTable: Grp6 +0: SLDT Rv/Mw +1: STR Rv/Mw +2: LLDT Ew +3: LTR Ew +4: VERR Ew +5: VERW Ew +EndTable + +GrpTable: Grp7 +0: SGDT Ms | VMCALL (001),(11B) | VMLAUNCH (010),(11B) | VMRESUME (011),(11B) | VMXOFF (100),(11B) | PCONFIG (101),(11B) | ENCLV (000),(11B) +1: SIDT Ms | MONITOR (000),(11B) | MWAIT (001),(11B) | CLAC (010),(11B) | STAC (011),(11B) | ENCLS (111),(11B) +2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) | ENCLU (111),(11B) +3: LIDT Ms +4: SMSW Mw/Rv +5: rdpkru (110),(11B) | wrpkru (111),(11B) | SAVEPREVSSP (F3),(010),(11B) | RSTORSSP Mq (F3) | SETSSBSY (F3),(000),(11B) | CLUI (F3),(110),(11B) | SERIALIZE (000),(11B) | STUI (F3),(111),(11B) | TESTUI (F3)(101)(11B) | UIRET (F3),(100),(11B) | XRESLDTRK (F2),(000),(11B) | XSUSLDTRK (F2),(001),(11B) +6: LMSW Ew +7: INVLPG Mb | SWAPGS (o64),(000),(11B) | RDTSCP (001),(11B) +EndTable + +GrpTable: Grp8 +4: BT +5: BTS +6: BTR +7: BTC +EndTable + +GrpTable: Grp9 +1: CMPXCHG8B/16B Mq/Mdq +3: xrstors +4: xsavec +5: xsaves +6: VMPTRLD Mq | VMCLEAR Mq (66) | VMXON Mq (F3) | RDRAND Rv (11B) | SENDUIPI Gq (F3) +7: VMPTRST Mq | VMPTRST Mq (F3) | RDSEED Rv (11B) +EndTable + +GrpTable: Grp10 +# all are UD1 +0: UD1 +1: UD1 +2: UD1 +3: UD1 +4: UD1 +5: UD1 +6: UD1 +7: UD1 +EndTable + +# Grp11A and Grp11B are expressed as Grp11 in Intel SDM +GrpTable: Grp11A +0: MOV Eb,Ib +7: XABORT Ib (000),(11B) +EndTable + +GrpTable: Grp11B +0: MOV Eb,Iz +7: XBEGIN Jz (000),(11B) +EndTable + +GrpTable: Grp12 +2: psrlw Nq,Ib (11B) | vpsrlw Hx,Ux,Ib (66),(11B),(v1) +4: psraw Nq,Ib (11B) | vpsraw Hx,Ux,Ib (66),(11B),(v1) +6: psllw Nq,Ib (11B) | vpsllw Hx,Ux,Ib (66),(11B),(v1) +EndTable + +GrpTable: Grp13 +0: vprord/q Hx,Wx,Ib (66),(ev) +1: vprold/q Hx,Wx,Ib (66),(ev) +2: psrld Nq,Ib (11B) | vpsrld Hx,Ux,Ib (66),(11B),(v1) +4: psrad Nq,Ib (11B) | vpsrad Hx,Ux,Ib (66),(11B),(v1) | vpsrad/q Hx,Ux,Ib (66),(evo) +6: pslld Nq,Ib (11B) | vpslld Hx,Ux,Ib (66),(11B),(v1) +EndTable + +GrpTable: Grp14 +2: psrlq Nq,Ib (11B) | vpsrlq Hx,Ux,Ib (66),(11B),(v1) +3: vpsrldq Hx,Ux,Ib (66),(11B),(v1) +6: psllq Nq,Ib (11B) | vpsllq Hx,Ux,Ib (66),(11B),(v1) +7: vpslldq Hx,Ux,Ib (66),(11B),(v1) +EndTable + +GrpTable: Grp15 +0: fxsave | RDFSBASE Ry (F3),(11B) +1: fxstor | RDGSBASE Ry (F3),(11B) +2: vldmxcsr Md (v1) | WRFSBASE Ry (F3),(11B) +3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B) +4: XSAVE | ptwrite Ey (F3),(11B) +5: XRSTOR | lfence (11B) | INCSSPD/Q Ry (F3),(11B) +6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B) | CLRSSBSY Mq (F3) +7: clflush | clflushopt (66) | sfence (11B) +EndTable + +GrpTable: Grp16 +0: prefetch NTA +1: prefetch T0 +2: prefetch T1 +3: prefetch T2 +EndTable + +GrpTable: Grp17 +1: BLSR By,Ey (v) +2: BLSMSK By,Ey (v) +3: BLSI By,Ey (v) +EndTable + +GrpTable: Grp18 +1: vgatherpf0dps/d Wx (66),(ev) +2: vgatherpf1dps/d Wx (66),(ev) +5: vscatterpf0dps/d Wx (66),(ev) +6: vscatterpf1dps/d Wx (66),(ev) +EndTable + +GrpTable: Grp19 +1: vgatherpf0qps/d Wx (66),(ev) +2: vgatherpf1qps/d Wx (66),(ev) +5: vscatterpf0qps/d Wx (66),(ev) +6: vscatterpf1qps/d Wx (66),(ev) +EndTable + +GrpTable: Grp20 +0: cldemote Mb +EndTable + +GrpTable: Grp21 +1: RDSSPD/Q Ry (F3),(11B) +7: ENDBR64 (F3),(010),(11B) | ENDBR32 (F3),(011),(11B) +EndTable + +# AMD's Prefetch Group +GrpTable: GrpP +0: PREFETCH +1: PREFETCHW +EndTable + +GrpTable: GrpPDLK +0: MONTMUL +1: XSHA1 +2: XSHA2 +EndTable + +GrpTable: GrpRNG +0: xstore-rng +1: xcrypt-ecb +2: xcrypt-cbc +4: xcrypt-cfb +5: xcrypt-ofb +EndTable diff --git a/test/elemnew4.ok b/test/elemnew4.ok new file mode 100644 index 00000000..5376e246 --- /dev/null +++ b/test/elemnew4.ok @@ -0,0 +1,1767 @@ +/* x86 opcode map generated from x86-opcode-map.txt */ +/* Do not change this code. */ + +/* Table: one byte opcode */ +const insn_attr_t inat_primary_table[INAT_OPCODE_TABLE_SIZE] = { + [0x00] = INAT_MODRM, + [0x01] = INAT_MODRM, + [0x02] = INAT_MODRM, + [0x03] = INAT_MODRM, + [0x04] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x05] = INAT_MAKE_IMM(INAT_IMM_VWORD32), + [0x08] = INAT_MODRM, + [0x09] = INAT_MODRM, + [0x0a] = INAT_MODRM, + [0x0b] = INAT_MODRM, + [0x0c] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x0d] = INAT_MAKE_IMM(INAT_IMM_VWORD32), + [0x0f] = INAT_MAKE_ESCAPE(1), + [0x10] = INAT_MODRM, + [0x11] = INAT_MODRM, + [0x12] = INAT_MODRM, + [0x13] = INAT_MODRM, + [0x14] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x15] = INAT_MAKE_IMM(INAT_IMM_VWORD32), + [0x18] = INAT_MODRM, + [0x19] = INAT_MODRM, + [0x1a] = INAT_MODRM, + [0x1b] = INAT_MODRM, + [0x1c] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x1d] = INAT_MAKE_IMM(INAT_IMM_VWORD32), + [0x20] = INAT_MODRM, + [0x21] = INAT_MODRM, + [0x22] = INAT_MODRM, + [0x23] = INAT_MODRM, + [0x24] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x25] = INAT_MAKE_IMM(INAT_IMM_VWORD32), + [0x26] = INAT_MAKE_PREFIX(INAT_PFX_ES), + [0x28] = INAT_MODRM, + [0x29] = INAT_MODRM, + [0x2a] = INAT_MODRM, + [0x2b] = INAT_MODRM, + [0x2c] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x2d] = INAT_MAKE_IMM(INAT_IMM_VWORD32), + [0x2e] = INAT_MAKE_PREFIX(INAT_PFX_CS), + [0x30] = INAT_MODRM, + [0x31] = INAT_MODRM, + [0x32] = INAT_MODRM, + [0x33] = INAT_MODRM, + [0x34] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x35] = INAT_MAKE_IMM(INAT_IMM_VWORD32), + [0x36] = INAT_MAKE_PREFIX(INAT_PFX_SS), + [0x38] = INAT_MODRM, + [0x39] = INAT_MODRM, + [0x3a] = INAT_MODRM, + [0x3b] = INAT_MODRM, + [0x3c] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x3d] = INAT_MAKE_IMM(INAT_IMM_VWORD32), + [0x3e] = INAT_MAKE_PREFIX(INAT_PFX_DS), + [0x40] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x41] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x42] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x43] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x44] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x45] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x46] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x47] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x48] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x49] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x4a] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x4b] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x4c] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x4d] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x4e] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x4f] = INAT_MAKE_PREFIX(INAT_PFX_REX), + [0x50] = INAT_FORCE64, + [0x51] = INAT_FORCE64, + [0x52] = INAT_FORCE64, + [0x53] = INAT_FORCE64, + [0x54] = INAT_FORCE64, + [0x55] = INAT_FORCE64, + [0x56] = INAT_FORCE64, + [0x57] = INAT_FORCE64, + [0x58] = INAT_FORCE64, + [0x59] = INAT_FORCE64, + [0x5a] = INAT_FORCE64, + [0x5b] = INAT_FORCE64, + [0x5c] = INAT_FORCE64, + [0x5d] = INAT_FORCE64, + [0x5e] = INAT_FORCE64, + [0x5f] = INAT_FORCE64, + [0x62] = INAT_MODRM | INAT_MAKE_PREFIX(INAT_PFX_EVEX), + [0x63] = INAT_MODRM | INAT_MODRM, + [0x64] = INAT_MAKE_PREFIX(INAT_PFX_FS), + [0x65] = INAT_MAKE_PREFIX(INAT_PFX_GS), + [0x66] = INAT_MAKE_PREFIX(INAT_PFX_OPNDSZ), + [0x67] = INAT_MAKE_PREFIX(INAT_PFX_ADDRSZ), + [0x68] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x69] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_MODRM, + [0x6a] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_FORCE64, + [0x6b] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM, + [0x70] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x71] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x72] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x73] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x74] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x75] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x76] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x77] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x78] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x79] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x7a] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x7b] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x7c] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x7d] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x7e] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x7f] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0x80] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_MAKE_GROUP(1), + [0x81] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_MODRM | INAT_MAKE_GROUP(1), + [0x82] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_MAKE_GROUP(1), + [0x83] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_MAKE_GROUP(1), + [0x84] = INAT_MODRM, + [0x85] = INAT_MODRM, + [0x86] = INAT_MODRM, + [0x87] = INAT_MODRM, + [0x88] = INAT_MODRM, + [0x89] = INAT_MODRM, + [0x8a] = INAT_MODRM, + [0x8b] = INAT_MODRM, + [0x8c] = INAT_MODRM, + [0x8d] = INAT_MODRM, + [0x8e] = INAT_MODRM, + [0x8f] = INAT_MAKE_GROUP(2) | INAT_MODRM | INAT_FORCE64, + [0x9a] = INAT_MAKE_IMM(INAT_IMM_PTR), + [0x9c] = INAT_FORCE64, + [0x9d] = INAT_FORCE64, + [0xa0] = INAT_MOFFSET, + [0xa1] = INAT_MOFFSET, + [0xa2] = INAT_MOFFSET, + [0xa3] = INAT_MOFFSET, + [0xa8] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xa9] = INAT_MAKE_IMM(INAT_IMM_VWORD32), + [0xb0] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xb1] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xb2] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xb3] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xb4] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xb5] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xb6] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xb7] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xb8] = INAT_MAKE_IMM(INAT_IMM_VWORD), + [0xb9] = INAT_MAKE_IMM(INAT_IMM_VWORD), + [0xba] = INAT_MAKE_IMM(INAT_IMM_VWORD), + [0xbb] = INAT_MAKE_IMM(INAT_IMM_VWORD), + [0xbc] = INAT_MAKE_IMM(INAT_IMM_VWORD), + [0xbd] = INAT_MAKE_IMM(INAT_IMM_VWORD), + [0xbe] = INAT_MAKE_IMM(INAT_IMM_VWORD), + [0xbf] = INAT_MAKE_IMM(INAT_IMM_VWORD), + [0xc0] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_MAKE_GROUP(3), + [0xc1] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_MAKE_GROUP(3), + [0xc2] = INAT_MAKE_IMM(INAT_IMM_WORD) | INAT_FORCE64, + [0xc4] = INAT_MODRM | INAT_MAKE_PREFIX(INAT_PFX_VEX3), + [0xc5] = INAT_MODRM | INAT_MAKE_PREFIX(INAT_PFX_VEX2), + [0xc6] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_MAKE_GROUP(4), + [0xc7] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_MODRM | INAT_MAKE_GROUP(5), + [0xc8] = INAT_MAKE_IMM(INAT_IMM_WORD) | INAT_SCNDIMM, + [0xc9] = INAT_FORCE64, + [0xca] = INAT_MAKE_IMM(INAT_IMM_WORD), + [0xcd] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xd0] = INAT_MODRM | INAT_MAKE_GROUP(3), + [0xd1] = INAT_MODRM | INAT_MAKE_GROUP(3), + [0xd2] = INAT_MODRM | INAT_MAKE_GROUP(3), + [0xd3] = INAT_MODRM | INAT_MAKE_GROUP(3), + [0xd4] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xd5] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xd8] = INAT_MODRM, + [0xd9] = INAT_MODRM, + [0xda] = INAT_MODRM, + [0xdb] = INAT_MODRM, + [0xdc] = INAT_MODRM, + [0xdd] = INAT_MODRM, + [0xde] = INAT_MODRM, + [0xdf] = INAT_MODRM, + [0xe0] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_FORCE64, + [0xe1] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_FORCE64, + [0xe2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_FORCE64, + [0xe3] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_FORCE64, + [0xe4] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xe5] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xe6] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xe7] = INAT_MAKE_IMM(INAT_IMM_BYTE), + [0xe8] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0xe9] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0xea] = INAT_MAKE_IMM(INAT_IMM_PTR), + [0xeb] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_FORCE64, + [0xf0] = INAT_MAKE_PREFIX(INAT_PFX_LOCK), + [0xf2] = INAT_MAKE_PREFIX(INAT_PFX_REPNE) | INAT_MAKE_PREFIX(INAT_PFX_REPNE), + [0xf3] = INAT_MAKE_PREFIX(INAT_PFX_REPE) | INAT_MAKE_PREFIX(INAT_PFX_REPE), + [0xf6] = INAT_MODRM | INAT_MAKE_GROUP(6), + [0xf7] = INAT_MODRM | INAT_MAKE_GROUP(7), + [0xfe] = INAT_MAKE_GROUP(8), + [0xff] = INAT_MAKE_GROUP(9), +}; + +/* Table: 2-byte opcode (0x0f) */ +const insn_attr_t inat_escape_table_1[INAT_OPCODE_TABLE_SIZE] = { + [0x00] = INAT_MAKE_GROUP(10), + [0x01] = INAT_MAKE_GROUP(11), + [0x02] = INAT_MODRM, + [0x03] = INAT_MODRM, + [0x0d] = INAT_MAKE_GROUP(12), + [0x0f] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM, + [0x10] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x11] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x12] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x13] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x14] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x15] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x16] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x17] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x18] = INAT_MAKE_GROUP(13), + [0x1a] = INAT_MODRM | INAT_VARIANT, + [0x1b] = INAT_MODRM | INAT_VARIANT, + [0x1c] = INAT_MAKE_GROUP(14), + [0x1e] = INAT_MAKE_GROUP(15), + [0x1f] = INAT_MODRM, + [0x20] = INAT_MODRM, + [0x21] = INAT_MODRM, + [0x22] = INAT_MODRM, + [0x23] = INAT_MODRM, + [0x28] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x29] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x2a] = INAT_MODRM | INAT_VARIANT, + [0x2b] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x2c] = INAT_MODRM | INAT_VARIANT, + [0x2d] = INAT_MODRM | INAT_VARIANT, + [0x2e] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x2f] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x38] = INAT_MAKE_ESCAPE(2), + [0x3a] = INAT_MAKE_ESCAPE(3), + [0x40] = INAT_MODRM, + [0x41] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x42] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x43] = INAT_MODRM, + [0x44] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x45] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x46] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x47] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x48] = INAT_MODRM, + [0x49] = INAT_MODRM, + [0x4a] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x4b] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x4c] = INAT_MODRM, + [0x4d] = INAT_MODRM, + [0x4e] = INAT_MODRM, + [0x4f] = INAT_MODRM, + [0x50] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x51] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x52] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x53] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x54] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x55] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x56] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x57] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x58] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x59] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x5a] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x5b] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x5c] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x5d] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x5e] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x5f] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x60] = INAT_MODRM | INAT_VARIANT, + [0x61] = INAT_MODRM | INAT_VARIANT, + [0x62] = INAT_MODRM | INAT_VARIANT, + [0x63] = INAT_MODRM | INAT_VARIANT, + [0x64] = INAT_MODRM | INAT_VARIANT, + [0x65] = INAT_MODRM | INAT_VARIANT, + [0x66] = INAT_MODRM | INAT_VARIANT, + [0x67] = INAT_MODRM | INAT_VARIANT, + [0x68] = INAT_MODRM | INAT_VARIANT, + [0x69] = INAT_MODRM | INAT_VARIANT, + [0x6a] = INAT_MODRM | INAT_VARIANT, + [0x6b] = INAT_MODRM | INAT_VARIANT, + [0x6c] = INAT_VARIANT, + [0x6d] = INAT_VARIANT, + [0x6e] = INAT_MODRM | INAT_VARIANT, + [0x6f] = INAT_MODRM | INAT_VARIANT, + [0x70] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, + [0x71] = INAT_MAKE_GROUP(16), + [0x72] = INAT_MAKE_GROUP(17), + [0x73] = INAT_MAKE_GROUP(18), + [0x74] = INAT_MODRM | INAT_VARIANT, + [0x75] = INAT_MODRM | INAT_VARIANT, + [0x76] = INAT_MODRM | INAT_VARIANT, + [0x77] = INAT_VEXOK | INAT_VEXOK, + [0x78] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x79] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x7a] = INAT_VARIANT, + [0x7b] = INAT_VARIANT, + [0x7c] = INAT_VARIANT, + [0x7d] = INAT_VARIANT, + [0x7e] = INAT_MODRM | INAT_VARIANT, + [0x7f] = INAT_MODRM | INAT_VARIANT, + [0x80] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x81] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x82] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x83] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x84] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x85] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x86] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x87] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x88] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x89] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x8a] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x8b] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x8c] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x8d] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x8e] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x8f] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_FORCE64, + [0x90] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x91] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x92] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x93] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x94] = INAT_MODRM, + [0x95] = INAT_MODRM, + [0x96] = INAT_MODRM, + [0x97] = INAT_MODRM, + [0x98] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x99] = INAT_MODRM | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x9a] = INAT_MODRM, + [0x9b] = INAT_MODRM, + [0x9c] = INAT_MODRM, + [0x9d] = INAT_MODRM, + [0x9e] = INAT_MODRM, + [0x9f] = INAT_MODRM, + [0xa0] = INAT_FORCE64, + [0xa1] = INAT_FORCE64, + [0xa3] = INAT_MODRM, + [0xa4] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM, + [0xa5] = INAT_MODRM, + [0xa6] = INAT_MAKE_GROUP(19), + [0xa7] = INAT_MAKE_GROUP(20), + [0xa8] = INAT_FORCE64, + [0xa9] = INAT_FORCE64, + [0xab] = INAT_MODRM, + [0xac] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM, + [0xad] = INAT_MODRM, + [0xae] = INAT_MAKE_GROUP(21), + [0xaf] = INAT_MODRM, + [0xb0] = INAT_MODRM, + [0xb1] = INAT_MODRM, + [0xb2] = INAT_MODRM, + [0xb3] = INAT_MODRM, + [0xb4] = INAT_MODRM, + [0xb5] = INAT_MODRM, + [0xb6] = INAT_MODRM, + [0xb7] = INAT_MODRM, + [0xb8] = INAT_VARIANT, + [0xb9] = INAT_MAKE_GROUP(22), + [0xba] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_MAKE_GROUP(23), + [0xbb] = INAT_MODRM, + [0xbc] = INAT_MODRM | INAT_VARIANT, + [0xbd] = INAT_MODRM | INAT_VARIANT, + [0xbe] = INAT_MODRM, + [0xbf] = INAT_MODRM, + [0xc0] = INAT_MODRM, + [0xc1] = INAT_MODRM, + [0xc2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0xc3] = INAT_MODRM, + [0xc4] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, + [0xc5] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, + [0xc6] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0xc7] = INAT_MAKE_GROUP(24), + [0xd0] = INAT_VARIANT, + [0xd1] = INAT_MODRM | INAT_VARIANT, + [0xd2] = INAT_MODRM | INAT_VARIANT, + [0xd3] = INAT_MODRM | INAT_VARIANT, + [0xd4] = INAT_MODRM | INAT_VARIANT, + [0xd5] = INAT_MODRM | INAT_VARIANT, + [0xd6] = INAT_VARIANT, + [0xd7] = INAT_MODRM | INAT_VARIANT, + [0xd8] = INAT_MODRM | INAT_VARIANT, + [0xd9] = INAT_MODRM | INAT_VARIANT, + [0xda] = INAT_MODRM | INAT_VARIANT, + [0xdb] = INAT_MODRM | INAT_VARIANT, + [0xdc] = INAT_MODRM | INAT_VARIANT, + [0xdd] = INAT_MODRM | INAT_VARIANT, + [0xde] = INAT_MODRM | INAT_VARIANT, + [0xdf] = INAT_MODRM | INAT_VARIANT, + [0xe0] = INAT_MODRM | INAT_VARIANT, + [0xe1] = INAT_MODRM | INAT_VARIANT, + [0xe2] = INAT_MODRM | INAT_VARIANT, + [0xe3] = INAT_MODRM | INAT_VARIANT, + [0xe4] = INAT_MODRM | INAT_VARIANT, + [0xe5] = INAT_MODRM | INAT_VARIANT, + [0xe6] = INAT_VARIANT, + [0xe7] = INAT_MODRM | INAT_VARIANT, + [0xe8] = INAT_MODRM | INAT_VARIANT, + [0xe9] = INAT_MODRM | INAT_VARIANT, + [0xea] = INAT_MODRM | INAT_VARIANT, + [0xeb] = INAT_MODRM | INAT_VARIANT, + [0xec] = INAT_MODRM | INAT_VARIANT, + [0xed] = INAT_MODRM | INAT_VARIANT, + [0xee] = INAT_MODRM | INAT_VARIANT, + [0xef] = INAT_MODRM | INAT_VARIANT, + [0xf0] = INAT_VARIANT, + [0xf1] = INAT_MODRM | INAT_VARIANT, + [0xf2] = INAT_MODRM | INAT_VARIANT, + [0xf3] = INAT_MODRM | INAT_VARIANT, + [0xf4] = INAT_MODRM | INAT_VARIANT, + [0xf5] = INAT_MODRM | INAT_VARIANT, + [0xf6] = INAT_MODRM | INAT_VARIANT, + [0xf7] = INAT_MODRM | INAT_VARIANT, + [0xf8] = INAT_MODRM | INAT_VARIANT, + [0xf9] = INAT_MODRM | INAT_VARIANT, + [0xfa] = INAT_MODRM | INAT_VARIANT, + [0xfb] = INAT_MODRM | INAT_VARIANT, + [0xfc] = INAT_MODRM | INAT_VARIANT, + [0xfd] = INAT_MODRM | INAT_VARIANT, + [0xfe] = INAT_MODRM | INAT_VARIANT, +}; +const insn_attr_t inat_escape_table_1_1[INAT_OPCODE_TABLE_SIZE] = { + [0x10] = INAT_MODRM | INAT_VEXOK, + [0x11] = INAT_MODRM | INAT_VEXOK, + [0x12] = INAT_MODRM | INAT_VEXOK, + [0x13] = INAT_MODRM | INAT_VEXOK, + [0x14] = INAT_MODRM | INAT_VEXOK, + [0x15] = INAT_MODRM | INAT_VEXOK, + [0x16] = INAT_MODRM | INAT_VEXOK, + [0x17] = INAT_MODRM | INAT_VEXOK, + [0x1a] = INAT_MODRM, + [0x1b] = INAT_MODRM, + [0x28] = INAT_MODRM | INAT_VEXOK, + [0x29] = INAT_MODRM | INAT_VEXOK, + [0x2a] = INAT_MODRM, + [0x2b] = INAT_MODRM | INAT_VEXOK, + [0x2c] = INAT_MODRM, + [0x2d] = INAT_MODRM, + [0x2e] = INAT_MODRM | INAT_VEXOK, + [0x2f] = INAT_MODRM | INAT_VEXOK, + [0x41] = INAT_MODRM | INAT_VEXOK, + [0x42] = INAT_MODRM | INAT_VEXOK, + [0x44] = INAT_MODRM | INAT_VEXOK, + [0x45] = INAT_MODRM | INAT_VEXOK, + [0x46] = INAT_MODRM | INAT_VEXOK, + [0x47] = INAT_MODRM | INAT_VEXOK, + [0x4a] = INAT_MODRM | INAT_VEXOK, + [0x4b] = INAT_MODRM | INAT_VEXOK, + [0x50] = INAT_MODRM | INAT_VEXOK, + [0x51] = INAT_MODRM | INAT_VEXOK, + [0x54] = INAT_MODRM | INAT_VEXOK, + [0x55] = INAT_MODRM | INAT_VEXOK, + [0x56] = INAT_MODRM | INAT_VEXOK, + [0x57] = INAT_MODRM | INAT_VEXOK, + [0x58] = INAT_MODRM | INAT_VEXOK, + [0x59] = INAT_MODRM | INAT_VEXOK, + [0x5a] = INAT_MODRM | INAT_VEXOK, + [0x5b] = INAT_MODRM | INAT_VEXOK, + [0x5c] = INAT_MODRM | INAT_VEXOK, + [0x5d] = INAT_MODRM | INAT_VEXOK, + [0x5e] = INAT_MODRM | INAT_VEXOK, + [0x5f] = INAT_MODRM | INAT_VEXOK, + [0x60] = INAT_MODRM | INAT_VEXOK, + [0x61] = INAT_MODRM | INAT_VEXOK, + [0x62] = INAT_MODRM | INAT_VEXOK, + [0x63] = INAT_MODRM | INAT_VEXOK, + [0x64] = INAT_MODRM | INAT_VEXOK, + [0x65] = INAT_MODRM | INAT_VEXOK, + [0x66] = INAT_MODRM | INAT_VEXOK, + [0x67] = INAT_MODRM | INAT_VEXOK, + [0x68] = INAT_MODRM | INAT_VEXOK, + [0x69] = INAT_MODRM | INAT_VEXOK, + [0x6a] = INAT_MODRM | INAT_VEXOK, + [0x6b] = INAT_MODRM | INAT_VEXOK, + [0x6c] = INAT_MODRM | INAT_VEXOK, + [0x6d] = INAT_MODRM | INAT_VEXOK, + [0x6e] = INAT_MODRM | INAT_VEXOK, + [0x6f] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0x70] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x74] = INAT_MODRM | INAT_VEXOK, + [0x75] = INAT_MODRM | INAT_VEXOK, + [0x76] = INAT_MODRM | INAT_VEXOK, + [0x78] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x79] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7c] = INAT_MODRM | INAT_VEXOK, + [0x7d] = INAT_MODRM | INAT_VEXOK, + [0x7e] = INAT_MODRM | INAT_VEXOK, + [0x7f] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0x90] = INAT_MODRM | INAT_VEXOK, + [0x91] = INAT_MODRM | INAT_VEXOK, + [0x92] = INAT_MODRM | INAT_VEXOK, + [0x93] = INAT_MODRM | INAT_VEXOK, + [0x98] = INAT_MODRM | INAT_VEXOK, + [0x99] = INAT_MODRM | INAT_VEXOK, + [0xbc] = INAT_MODRM, + [0xbd] = INAT_MODRM, + [0xc2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0xc4] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0xc5] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0xc6] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0xd0] = INAT_MODRM | INAT_VEXOK, + [0xd1] = INAT_MODRM | INAT_VEXOK, + [0xd2] = INAT_MODRM | INAT_VEXOK, + [0xd3] = INAT_MODRM | INAT_VEXOK, + [0xd4] = INAT_MODRM | INAT_VEXOK, + [0xd5] = INAT_MODRM | INAT_VEXOK, + [0xd6] = INAT_MODRM | INAT_VEXOK, + [0xd7] = INAT_MODRM | INAT_VEXOK, + [0xd8] = INAT_MODRM | INAT_VEXOK, + [0xd9] = INAT_MODRM | INAT_VEXOK, + [0xda] = INAT_MODRM | INAT_VEXOK, + [0xdb] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0xdc] = INAT_MODRM | INAT_VEXOK, + [0xdd] = INAT_MODRM | INAT_VEXOK, + [0xde] = INAT_MODRM | INAT_VEXOK, + [0xdf] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0xe0] = INAT_MODRM | INAT_VEXOK, + [0xe1] = INAT_MODRM | INAT_VEXOK, + [0xe2] = INAT_MODRM | INAT_VEXOK, + [0xe3] = INAT_MODRM | INAT_VEXOK, + [0xe4] = INAT_MODRM | INAT_VEXOK, + [0xe5] = INAT_MODRM | INAT_VEXOK, + [0xe6] = INAT_MODRM | INAT_VEXOK, + [0xe7] = INAT_MODRM | INAT_VEXOK, + [0xe8] = INAT_MODRM | INAT_VEXOK, + [0xe9] = INAT_MODRM | INAT_VEXOK, + [0xea] = INAT_MODRM | INAT_VEXOK, + [0xeb] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0xec] = INAT_MODRM | INAT_VEXOK, + [0xed] = INAT_MODRM | INAT_VEXOK, + [0xee] = INAT_MODRM | INAT_VEXOK, + [0xef] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0xf1] = INAT_MODRM | INAT_VEXOK, + [0xf2] = INAT_MODRM | INAT_VEXOK, + [0xf3] = INAT_MODRM | INAT_VEXOK, + [0xf4] = INAT_MODRM | INAT_VEXOK, + [0xf5] = INAT_MODRM | INAT_VEXOK, + [0xf6] = INAT_MODRM | INAT_VEXOK, + [0xf7] = INAT_MODRM | INAT_VEXOK, + [0xf8] = INAT_MODRM | INAT_VEXOK, + [0xf9] = INAT_MODRM | INAT_VEXOK, + [0xfa] = INAT_MODRM | INAT_VEXOK, + [0xfb] = INAT_MODRM | INAT_VEXOK, + [0xfc] = INAT_MODRM | INAT_VEXOK, + [0xfd] = INAT_MODRM | INAT_VEXOK, + [0xfe] = INAT_MODRM | INAT_VEXOK, +}; +const insn_attr_t inat_escape_table_1_2[INAT_OPCODE_TABLE_SIZE] = { + [0x10] = INAT_MODRM | INAT_VEXOK, + [0x11] = INAT_MODRM | INAT_VEXOK, + [0x12] = INAT_MODRM | INAT_VEXOK, + [0x16] = INAT_MODRM | INAT_VEXOK, + [0x1a] = INAT_MODRM, + [0x1b] = INAT_MODRM, + [0x2a] = INAT_MODRM | INAT_VEXOK, + [0x2c] = INAT_MODRM | INAT_VEXOK, + [0x2d] = INAT_MODRM | INAT_VEXOK, + [0x51] = INAT_MODRM | INAT_VEXOK, + [0x52] = INAT_MODRM | INAT_VEXOK, + [0x53] = INAT_MODRM | INAT_VEXOK, + [0x58] = INAT_MODRM | INAT_VEXOK, + [0x59] = INAT_MODRM | INAT_VEXOK, + [0x5a] = INAT_MODRM | INAT_VEXOK, + [0x5b] = INAT_MODRM | INAT_VEXOK, + [0x5c] = INAT_MODRM | INAT_VEXOK, + [0x5d] = INAT_MODRM | INAT_VEXOK, + [0x5e] = INAT_MODRM | INAT_VEXOK, + [0x5f] = INAT_MODRM | INAT_VEXOK, + [0x6f] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0x70] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x78] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x79] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7e] = INAT_MODRM | INAT_VEXOK, + [0x7f] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0xb8] = INAT_MODRM, + [0xbc] = INAT_MODRM, + [0xbd] = INAT_MODRM, + [0xc2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0xd6] = INAT_MODRM, + [0xe6] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, +}; +const insn_attr_t inat_escape_table_1_3[INAT_OPCODE_TABLE_SIZE] = { + [0x10] = INAT_MODRM | INAT_VEXOK, + [0x11] = INAT_MODRM | INAT_VEXOK, + [0x12] = INAT_MODRM | INAT_VEXOK, + [0x1a] = INAT_MODRM, + [0x1b] = INAT_MODRM, + [0x2a] = INAT_MODRM | INAT_VEXOK, + [0x2c] = INAT_MODRM | INAT_VEXOK, + [0x2d] = INAT_MODRM | INAT_VEXOK, + [0x51] = INAT_MODRM | INAT_VEXOK, + [0x58] = INAT_MODRM | INAT_VEXOK, + [0x59] = INAT_MODRM | INAT_VEXOK, + [0x5a] = INAT_MODRM | INAT_VEXOK, + [0x5c] = INAT_MODRM | INAT_VEXOK, + [0x5d] = INAT_MODRM | INAT_VEXOK, + [0x5e] = INAT_MODRM | INAT_VEXOK, + [0x5f] = INAT_MODRM | INAT_VEXOK, + [0x6f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x70] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x78] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x79] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7c] = INAT_MODRM | INAT_VEXOK, + [0x7d] = INAT_MODRM | INAT_VEXOK, + [0x7f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x92] = INAT_MODRM | INAT_VEXOK, + [0x93] = INAT_MODRM | INAT_VEXOK, + [0xbc] = INAT_MODRM, + [0xbd] = INAT_MODRM, + [0xc2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0xd0] = INAT_MODRM | INAT_VEXOK, + [0xd6] = INAT_MODRM, + [0xe6] = INAT_MODRM | INAT_VEXOK, + [0xf0] = INAT_MODRM | INAT_VEXOK, +}; + +/* Table: 3-byte opcode 1 (0x0f 0x38) */ +const insn_attr_t inat_escape_table_2[INAT_OPCODE_TABLE_SIZE] = { + [0x00] = INAT_MODRM | INAT_VARIANT, + [0x01] = INAT_MODRM | INAT_VARIANT, + [0x02] = INAT_MODRM | INAT_VARIANT, + [0x03] = INAT_MODRM | INAT_VARIANT, + [0x04] = INAT_MODRM | INAT_VARIANT, + [0x05] = INAT_MODRM | INAT_VARIANT, + [0x06] = INAT_MODRM | INAT_VARIANT, + [0x07] = INAT_MODRM | INAT_VARIANT, + [0x08] = INAT_MODRM | INAT_VARIANT, + [0x09] = INAT_MODRM | INAT_VARIANT, + [0x0a] = INAT_MODRM | INAT_VARIANT, + [0x0b] = INAT_MODRM | INAT_VARIANT, + [0x0c] = INAT_VARIANT, + [0x0d] = INAT_VARIANT, + [0x0e] = INAT_VARIANT, + [0x0f] = INAT_VARIANT, + [0x10] = INAT_VARIANT, + [0x11] = INAT_VARIANT, + [0x12] = INAT_VARIANT, + [0x13] = INAT_VARIANT, + [0x14] = INAT_VARIANT, + [0x15] = INAT_VARIANT, + [0x16] = INAT_VARIANT, + [0x17] = INAT_VARIANT, + [0x18] = INAT_VARIANT, + [0x19] = INAT_VARIANT, + [0x1a] = INAT_VARIANT, + [0x1b] = INAT_VARIANT, + [0x1c] = INAT_MODRM | INAT_VARIANT, + [0x1d] = INAT_MODRM | INAT_VARIANT, + [0x1e] = INAT_MODRM | INAT_VARIANT, + [0x1f] = INAT_VARIANT, + [0x20] = INAT_VARIANT, + [0x21] = INAT_VARIANT, + [0x22] = INAT_VARIANT, + [0x23] = INAT_VARIANT, + [0x24] = INAT_VARIANT, + [0x25] = INAT_VARIANT, + [0x26] = INAT_VARIANT, + [0x27] = INAT_VARIANT, + [0x28] = INAT_VARIANT, + [0x29] = INAT_VARIANT, + [0x2a] = INAT_VARIANT, + [0x2b] = INAT_VARIANT, + [0x2c] = INAT_VARIANT, + [0x2d] = INAT_VARIANT, + [0x2e] = INAT_VARIANT, + [0x2f] = INAT_VARIANT, + [0x30] = INAT_VARIANT, + [0x31] = INAT_VARIANT, + [0x32] = INAT_VARIANT, + [0x33] = INAT_VARIANT, + [0x34] = INAT_VARIANT, + [0x35] = INAT_VARIANT, + [0x36] = INAT_VARIANT, + [0x37] = INAT_VARIANT, + [0x38] = INAT_VARIANT, + [0x39] = INAT_VARIANT, + [0x3a] = INAT_VARIANT, + [0x3b] = INAT_VARIANT, + [0x3c] = INAT_VARIANT, + [0x3d] = INAT_VARIANT, + [0x3e] = INAT_VARIANT, + [0x3f] = INAT_VARIANT, + [0x40] = INAT_VARIANT, + [0x41] = INAT_VARIANT, + [0x42] = INAT_VARIANT, + [0x43] = INAT_VARIANT, + [0x44] = INAT_VARIANT, + [0x45] = INAT_VARIANT, + [0x46] = INAT_VARIANT, + [0x47] = INAT_VARIANT, + [0x49] = INAT_VEXOK | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x4b] = INAT_VARIANT, + [0x4c] = INAT_VARIANT, + [0x4d] = INAT_VARIANT, + [0x4e] = INAT_VARIANT, + [0x4f] = INAT_VARIANT, + [0x50] = INAT_VARIANT, + [0x51] = INAT_VARIANT, + [0x52] = INAT_VARIANT, + [0x53] = INAT_VARIANT, + [0x54] = INAT_VARIANT, + [0x55] = INAT_VARIANT, + [0x58] = INAT_VARIANT, + [0x59] = INAT_VARIANT, + [0x5a] = INAT_VARIANT, + [0x5b] = INAT_VARIANT, + [0x5c] = INAT_VARIANT, + [0x5e] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x62] = INAT_VARIANT, + [0x63] = INAT_VARIANT, + [0x64] = INAT_VARIANT, + [0x65] = INAT_VARIANT, + [0x66] = INAT_VARIANT, + [0x68] = INAT_VARIANT, + [0x70] = INAT_VARIANT, + [0x71] = INAT_VARIANT, + [0x72] = INAT_VARIANT, + [0x73] = INAT_VARIANT, + [0x75] = INAT_VARIANT, + [0x76] = INAT_VARIANT, + [0x77] = INAT_VARIANT, + [0x78] = INAT_VARIANT, + [0x79] = INAT_VARIANT, + [0x7a] = INAT_VARIANT, + [0x7b] = INAT_VARIANT, + [0x7c] = INAT_VARIANT, + [0x7d] = INAT_VARIANT, + [0x7e] = INAT_VARIANT, + [0x7f] = INAT_VARIANT, + [0x80] = INAT_VARIANT, + [0x81] = INAT_VARIANT, + [0x82] = INAT_VARIANT, + [0x83] = INAT_VARIANT, + [0x88] = INAT_VARIANT, + [0x89] = INAT_VARIANT, + [0x8a] = INAT_VARIANT, + [0x8b] = INAT_VARIANT, + [0x8c] = INAT_VARIANT, + [0x8d] = INAT_VARIANT, + [0x8e] = INAT_VARIANT, + [0x8f] = INAT_VARIANT, + [0x90] = INAT_VARIANT, + [0x91] = INAT_VARIANT, + [0x92] = INAT_VARIANT, + [0x93] = INAT_VARIANT, + [0x96] = INAT_VARIANT, + [0x97] = INAT_VARIANT, + [0x98] = INAT_VARIANT, + [0x99] = INAT_VARIANT, + [0x9a] = INAT_VARIANT, + [0x9b] = INAT_VARIANT, + [0x9c] = INAT_VARIANT, + [0x9d] = INAT_VARIANT, + [0x9e] = INAT_VARIANT, + [0x9f] = INAT_VARIANT, + [0xa0] = INAT_VARIANT, + [0xa1] = INAT_VARIANT, + [0xa2] = INAT_VARIANT, + [0xa3] = INAT_VARIANT, + [0xa6] = INAT_VARIANT, + [0xa7] = INAT_VARIANT, + [0xa8] = INAT_VARIANT, + [0xa9] = INAT_VARIANT, + [0xaa] = INAT_VARIANT, + [0xab] = INAT_VARIANT, + [0xac] = INAT_VARIANT, + [0xad] = INAT_VARIANT, + [0xae] = INAT_VARIANT, + [0xaf] = INAT_VARIANT, + [0xb4] = INAT_VARIANT, + [0xb5] = INAT_VARIANT, + [0xb6] = INAT_VARIANT, + [0xb7] = INAT_VARIANT, + [0xb8] = INAT_VARIANT, + [0xb9] = INAT_VARIANT, + [0xba] = INAT_VARIANT, + [0xbb] = INAT_VARIANT, + [0xbc] = INAT_VARIANT, + [0xbd] = INAT_VARIANT, + [0xbe] = INAT_VARIANT, + [0xbf] = INAT_VARIANT, + [0xc4] = INAT_VARIANT, + [0xc6] = INAT_MAKE_GROUP(25), + [0xc7] = INAT_MAKE_GROUP(26), + [0xc8] = INAT_MODRM | INAT_VARIANT, + [0xc9] = INAT_MODRM, + [0xca] = INAT_MODRM | INAT_VARIANT, + [0xcb] = INAT_MODRM | INAT_VARIANT, + [0xcc] = INAT_MODRM | INAT_VARIANT, + [0xcd] = INAT_MODRM | INAT_VARIANT, + [0xcf] = INAT_VARIANT, + [0xdb] = INAT_VARIANT, + [0xdc] = INAT_VARIANT, + [0xdd] = INAT_VARIANT, + [0xde] = INAT_VARIANT, + [0xdf] = INAT_VARIANT, + [0xf0] = INAT_MODRM | INAT_MODRM | INAT_VARIANT, + [0xf1] = INAT_MODRM | INAT_MODRM | INAT_VARIANT, + [0xf2] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xf3] = INAT_MAKE_GROUP(27), + [0xf5] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_VARIANT, + [0xf6] = INAT_MODRM | INAT_VARIANT, + [0xf7] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_VARIANT, + [0xf8] = INAT_VARIANT, + [0xf9] = INAT_MODRM, +}; +const insn_attr_t inat_escape_table_2_1[INAT_OPCODE_TABLE_SIZE] = { + [0x00] = INAT_MODRM | INAT_VEXOK, + [0x01] = INAT_MODRM | INAT_VEXOK, + [0x02] = INAT_MODRM | INAT_VEXOK, + [0x03] = INAT_MODRM | INAT_VEXOK, + [0x04] = INAT_MODRM | INAT_VEXOK, + [0x05] = INAT_MODRM | INAT_VEXOK, + [0x06] = INAT_MODRM | INAT_VEXOK, + [0x07] = INAT_MODRM | INAT_VEXOK, + [0x08] = INAT_MODRM | INAT_VEXOK, + [0x09] = INAT_MODRM | INAT_VEXOK, + [0x0a] = INAT_MODRM | INAT_VEXOK, + [0x0b] = INAT_MODRM | INAT_VEXOK, + [0x0c] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x0d] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x0e] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x0f] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x10] = INAT_MODRM | INAT_MODRM | INAT_VEXOK, + [0x11] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x12] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x13] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x14] = INAT_MODRM | INAT_MODRM | INAT_VEXOK, + [0x15] = INAT_MODRM | INAT_MODRM | INAT_VEXOK, + [0x16] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x17] = INAT_MODRM | INAT_VEXOK, + [0x18] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x19] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x1a] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x1b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x1c] = INAT_MODRM | INAT_VEXOK, + [0x1d] = INAT_MODRM | INAT_VEXOK, + [0x1e] = INAT_MODRM | INAT_VEXOK, + [0x1f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x20] = INAT_MODRM | INAT_VEXOK, + [0x21] = INAT_MODRM | INAT_VEXOK, + [0x22] = INAT_MODRM | INAT_VEXOK, + [0x23] = INAT_MODRM | INAT_VEXOK, + [0x24] = INAT_MODRM | INAT_VEXOK, + [0x25] = INAT_MODRM | INAT_VEXOK, + [0x26] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x27] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x28] = INAT_MODRM | INAT_VEXOK, + [0x29] = INAT_MODRM | INAT_VEXOK, + [0x2a] = INAT_MODRM | INAT_VEXOK, + [0x2b] = INAT_MODRM | INAT_VEXOK, + [0x2c] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x2d] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x2e] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x2f] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x30] = INAT_MODRM | INAT_VEXOK, + [0x31] = INAT_MODRM | INAT_VEXOK, + [0x32] = INAT_MODRM | INAT_VEXOK, + [0x33] = INAT_MODRM | INAT_VEXOK, + [0x34] = INAT_MODRM | INAT_VEXOK, + [0x35] = INAT_MODRM | INAT_VEXOK, + [0x36] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x37] = INAT_MODRM | INAT_VEXOK, + [0x38] = INAT_MODRM | INAT_VEXOK, + [0x39] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0x3a] = INAT_MODRM | INAT_VEXOK, + [0x3b] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0x3c] = INAT_MODRM | INAT_VEXOK, + [0x3d] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0x3e] = INAT_MODRM | INAT_VEXOK, + [0x3f] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0x40] = INAT_MODRM | INAT_VEXOK | INAT_MODRM | INAT_VEXOK, + [0x41] = INAT_MODRM | INAT_VEXOK, + [0x42] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x43] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x44] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x45] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x46] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x47] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x49] = INAT_MODRM | INAT_VEXOK, + [0x4b] = INAT_MODRM | INAT_VEXOK, + [0x4c] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x4d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x4e] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x4f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x50] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x51] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x52] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x53] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x54] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x55] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x58] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x59] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x5a] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x5b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5e] = INAT_MODRM | INAT_VEXOK, + [0x62] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x63] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x64] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x65] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x66] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x70] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x71] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x72] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x73] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x75] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x76] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x77] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x78] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x79] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x7a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7c] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7e] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x80] = INAT_MODRM, + [0x81] = INAT_MODRM, + [0x82] = INAT_MODRM, + [0x83] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x88] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x89] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x8a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x8b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x8c] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x8d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x8e] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x8f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x90] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x91] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MODRM | INAT_VEXOK, + [0x92] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x93] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x96] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x97] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x98] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x99] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x9a] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x9b] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x9c] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x9d] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x9e] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x9f] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xa0] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xa1] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xa2] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xa3] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xa6] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xa7] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xa8] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xa9] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xaa] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xab] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xac] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xad] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xae] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xaf] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xb4] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xb5] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xb6] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xb7] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xb8] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xb9] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xba] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xbb] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xbc] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xbd] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xbe] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xbf] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xc4] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xc8] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xca] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xcb] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xcc] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xcd] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xcf] = INAT_MODRM | INAT_VEXOK, + [0xdb] = INAT_MODRM | INAT_VEXOK, + [0xdc] = INAT_MODRM | INAT_VEXOK, + [0xdd] = INAT_MODRM | INAT_VEXOK, + [0xde] = INAT_MODRM | INAT_VEXOK, + [0xdf] = INAT_MODRM | INAT_VEXOK, + [0xf0] = INAT_MODRM, + [0xf1] = INAT_MODRM, + [0xf5] = INAT_MODRM, + [0xf6] = INAT_MODRM, + [0xf7] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xf8] = INAT_MODRM, +}; +const insn_attr_t inat_escape_table_2_2[INAT_OPCODE_TABLE_SIZE] = { + [0x10] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x11] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x12] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x13] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x14] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x15] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x20] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x21] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x22] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x23] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x24] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x25] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x26] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x27] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x28] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x29] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x2a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x30] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x31] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x32] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x33] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x34] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x35] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x38] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x39] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x3a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x4b] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x52] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5c] = INAT_MODRM | INAT_VEXOK, + [0x5e] = INAT_MODRM | INAT_VEXOK, + [0x72] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xf5] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xf6] = INAT_MODRM, + [0xf7] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xf8] = INAT_MODRM, +}; +const insn_attr_t inat_escape_table_2_3[INAT_OPCODE_TABLE_SIZE] = { + [0x49] = INAT_MODRM | INAT_VEXOK, + [0x4b] = INAT_MODRM | INAT_VEXOK, + [0x52] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x53] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5e] = INAT_MODRM | INAT_VEXOK, + [0x68] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x72] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x9a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x9b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xaa] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xab] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xf0] = INAT_MODRM | INAT_MODRM, + [0xf1] = INAT_MODRM | INAT_MODRM, + [0xf5] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xf6] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xf7] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0xf8] = INAT_MODRM, +}; + +/* Table: 3-byte opcode 2 (0x0f 0x3a) */ +const insn_attr_t inat_escape_table_3[INAT_OPCODE_TABLE_SIZE] = { + [0x00] = INAT_VARIANT, + [0x01] = INAT_VARIANT, + [0x02] = INAT_VARIANT, + [0x03] = INAT_VARIANT, + [0x04] = INAT_VARIANT, + [0x05] = INAT_VARIANT, + [0x06] = INAT_VARIANT, + [0x08] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x09] = INAT_VARIANT, + [0x0a] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x0b] = INAT_VARIANT, + [0x0c] = INAT_VARIANT, + [0x0d] = INAT_VARIANT, + [0x0e] = INAT_VARIANT, + [0x0f] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, + [0x14] = INAT_VARIANT, + [0x15] = INAT_VARIANT, + [0x16] = INAT_VARIANT, + [0x17] = INAT_VARIANT, + [0x18] = INAT_VARIANT, + [0x19] = INAT_VARIANT, + [0x1a] = INAT_VARIANT, + [0x1b] = INAT_VARIANT, + [0x1d] = INAT_VARIANT, + [0x1e] = INAT_VARIANT, + [0x1f] = INAT_VARIANT, + [0x20] = INAT_VARIANT, + [0x21] = INAT_VARIANT, + [0x22] = INAT_VARIANT, + [0x23] = INAT_VARIANT, + [0x25] = INAT_VARIANT, + [0x26] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x27] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x30] = INAT_VARIANT, + [0x31] = INAT_VARIANT, + [0x32] = INAT_VARIANT, + [0x33] = INAT_VARIANT, + [0x38] = INAT_VARIANT, + [0x39] = INAT_VARIANT, + [0x3a] = INAT_VARIANT, + [0x3b] = INAT_VARIANT, + [0x3e] = INAT_VARIANT, + [0x3f] = INAT_VARIANT, + [0x40] = INAT_VARIANT, + [0x41] = INAT_VARIANT, + [0x42] = INAT_VARIANT, + [0x43] = INAT_VARIANT, + [0x44] = INAT_VARIANT, + [0x46] = INAT_VARIANT, + [0x4a] = INAT_VARIANT, + [0x4b] = INAT_VARIANT, + [0x4c] = INAT_VARIANT, + [0x50] = INAT_VARIANT, + [0x51] = INAT_VARIANT, + [0x54] = INAT_VARIANT, + [0x55] = INAT_VARIANT, + [0x56] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x57] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x60] = INAT_VARIANT, + [0x61] = INAT_VARIANT, + [0x62] = INAT_VARIANT, + [0x63] = INAT_VARIANT, + [0x66] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x67] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x70] = INAT_VARIANT, + [0x71] = INAT_VARIANT, + [0x72] = INAT_VARIANT, + [0x73] = INAT_VARIANT, + [0xc2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0xcc] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM, + [0xce] = INAT_VARIANT, + [0xcf] = INAT_VARIANT, + [0xdf] = INAT_VARIANT, + [0xf0] = INAT_VARIANT, +}; +const insn_attr_t inat_escape_table_3_1[INAT_OPCODE_TABLE_SIZE] = { + [0x00] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x01] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x02] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x03] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x04] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x05] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x06] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x08] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x09] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x0a] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x0b] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x0c] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x0d] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x0e] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x0f] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x14] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x15] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x16] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x17] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x18] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x19] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x1a] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x1b] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x1d] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x1e] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x1f] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x20] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x21] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x22] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x23] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x25] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x26] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x27] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x30] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x31] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x32] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x33] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x38] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x39] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY | INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x3a] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x3b] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x3e] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x3f] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x40] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x41] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x42] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x43] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x44] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x46] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x4a] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x4b] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x4c] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x50] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x51] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x54] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x55] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x56] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x57] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x60] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x61] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x62] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x63] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x66] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x67] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x70] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x71] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x72] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x73] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xce] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0xcf] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0xdf] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, +}; +const insn_attr_t inat_escape_table_3_2[INAT_OPCODE_TABLE_SIZE] = { + [0xc2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xf0] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM, +}; +const insn_attr_t inat_escape_table_3_3[INAT_OPCODE_TABLE_SIZE] = { + [0xf0] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, +}; + +/* Table: EVEX map 5 */ +const insn_attr_t inat_avx_table_5[INAT_OPCODE_TABLE_SIZE] = { + [0x10] = INAT_VARIANT, + [0x11] = INAT_VARIANT, + [0x1d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x2a] = INAT_VARIANT, + [0x2c] = INAT_VARIANT, + [0x2d] = INAT_VARIANT, + [0x2e] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x2f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x51] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x58] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x59] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x5a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x5b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x5c] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x5d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x5e] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x5f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x6e] = INAT_VARIANT, + [0x78] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x79] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x7a] = INAT_VARIANT, + [0x7b] = INAT_VARIANT, + [0x7c] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x7d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x7e] = INAT_VARIANT, +}; +const insn_attr_t inat_avx_table_5_1[INAT_OPCODE_TABLE_SIZE] = { + [0x1d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x6e] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x78] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x79] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7c] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7e] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, +}; +const insn_attr_t inat_avx_table_5_2[INAT_OPCODE_TABLE_SIZE] = { + [0x10] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x11] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x2a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x2c] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x2d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x51] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x58] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x59] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5c] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5e] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x78] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x79] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, +}; +const insn_attr_t inat_avx_table_5_3[INAT_OPCODE_TABLE_SIZE] = { + [0x5a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x7d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, +}; + +/* Table: EVEX map 6 */ +const insn_attr_t inat_avx_table_6[INAT_OPCODE_TABLE_SIZE] = { + [0x13] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY | INAT_VARIANT, + [0x2c] = INAT_VARIANT, + [0x2d] = INAT_VARIANT, + [0x42] = INAT_VARIANT, + [0x43] = INAT_VARIANT, + [0x4c] = INAT_VARIANT, + [0x4d] = INAT_VARIANT, + [0x4e] = INAT_VARIANT, + [0x4f] = INAT_VARIANT, + [0x56] = INAT_VARIANT, + [0x57] = INAT_VARIANT, + [0x96] = INAT_VARIANT, + [0x97] = INAT_VARIANT, + [0x98] = INAT_VARIANT, + [0x99] = INAT_VARIANT, + [0x9a] = INAT_VARIANT, + [0x9b] = INAT_VARIANT, + [0x9c] = INAT_VARIANT, + [0x9d] = INAT_VARIANT, + [0x9e] = INAT_VARIANT, + [0x9f] = INAT_VARIANT, + [0xa6] = INAT_VARIANT, + [0xa7] = INAT_VARIANT, + [0xa8] = INAT_VARIANT, + [0xa9] = INAT_VARIANT, + [0xaa] = INAT_VARIANT, + [0xab] = INAT_VARIANT, + [0xac] = INAT_VARIANT, + [0xad] = INAT_VARIANT, + [0xae] = INAT_VARIANT, + [0xaf] = INAT_VARIANT, + [0xb6] = INAT_VARIANT, + [0xb7] = INAT_VARIANT, + [0xb8] = INAT_VARIANT, + [0xb9] = INAT_VARIANT, + [0xba] = INAT_VARIANT, + [0xbb] = INAT_VARIANT, + [0xbc] = INAT_VARIANT, + [0xbd] = INAT_VARIANT, + [0xbe] = INAT_VARIANT, + [0xbf] = INAT_VARIANT, + [0xd6] = INAT_VARIANT, + [0xd7] = INAT_VARIANT, +}; +const insn_attr_t inat_avx_table_6_1[INAT_OPCODE_TABLE_SIZE] = { + [0x13] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x2c] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x2d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x42] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x43] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x4c] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x4d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x4e] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x4f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x96] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x97] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x98] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x99] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x9a] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x9b] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x9c] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x9d] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x9e] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x9f] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xa6] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xa7] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xa8] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xa9] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xaa] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xab] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xac] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xad] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xae] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xaf] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xb6] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xb7] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xb8] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xb9] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xba] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xbb] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xbc] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xbd] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xbe] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xbf] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, +}; +const insn_attr_t inat_avx_table_6_2[INAT_OPCODE_TABLE_SIZE] = { + [0x56] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x57] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xd6] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xd7] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, +}; +const insn_attr_t inat_avx_table_6_3[INAT_OPCODE_TABLE_SIZE] = { + [0x56] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x57] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xd6] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0xd7] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, +}; + +/* GrpTable: Grp1 */ + +/* GrpTable: Grp1A */ + +/* GrpTable: Grp2 */ + +/* GrpTable: Grp3_1 */ +const insn_attr_t inat_group_table_6[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM, + [0x1] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM, + [0x2] = INAT_MODRM, + [0x3] = INAT_MODRM, + [0x4] = INAT_MODRM, + [0x5] = INAT_MODRM, + [0x6] = INAT_MODRM, + [0x7] = INAT_MODRM, +}; + +/* GrpTable: Grp3_2 */ +const insn_attr_t inat_group_table_7[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_MODRM, + [0x1] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_MODRM, + [0x2] = INAT_MODRM, + [0x3] = INAT_MODRM, + [0x4] = INAT_MODRM, + [0x5] = INAT_MODRM, + [0x6] = INAT_MODRM, + [0x7] = INAT_MODRM, +}; + +/* GrpTable: Grp4 */ +const insn_attr_t inat_group_table_8[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MODRM, + [0x1] = INAT_MODRM, +}; + +/* GrpTable: Grp5 */ +const insn_attr_t inat_group_table_9[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MODRM, + [0x1] = INAT_MODRM, + [0x2] = INAT_MODRM | INAT_FORCE64, + [0x3] = INAT_MODRM, + [0x4] = INAT_MODRM | INAT_FORCE64, + [0x5] = INAT_MODRM, + [0x6] = INAT_MODRM | INAT_FORCE64, +}; + +/* GrpTable: Grp6 */ +const insn_attr_t inat_group_table_10[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MODRM, + [0x1] = INAT_MODRM, + [0x2] = INAT_MODRM, + [0x3] = INAT_MODRM, + [0x4] = INAT_MODRM, + [0x5] = INAT_MODRM, +}; + +/* GrpTable: Grp7 */ +const insn_attr_t inat_group_table_11[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MODRM, + [0x1] = INAT_MODRM, + [0x2] = INAT_MODRM, + [0x3] = INAT_MODRM, + [0x4] = INAT_MODRM, + [0x5] = INAT_VARIANT, + [0x6] = INAT_MODRM, + [0x7] = INAT_MODRM, +}; +const insn_attr_t inat_group_table_11_2[INAT_GROUP_TABLE_SIZE] = { + [0x5] = INAT_MODRM, +}; + +/* GrpTable: Grp8 */ + +/* GrpTable: Grp9 */ +const insn_attr_t inat_group_table_24[INAT_GROUP_TABLE_SIZE] = { + [0x1] = INAT_MODRM, + [0x6] = INAT_MODRM | INAT_MODRM | INAT_VARIANT, + [0x7] = INAT_MODRM | INAT_MODRM | INAT_VARIANT, +}; +const insn_attr_t inat_group_table_24_1[INAT_GROUP_TABLE_SIZE] = { + [0x6] = INAT_MODRM, +}; +const insn_attr_t inat_group_table_24_2[INAT_GROUP_TABLE_SIZE] = { + [0x6] = INAT_MODRM | INAT_MODRM, + [0x7] = INAT_MODRM, +}; + +/* GrpTable: Grp10 */ + +/* GrpTable: Grp11A */ +const insn_attr_t inat_group_table_4[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM, + [0x7] = INAT_MAKE_IMM(INAT_IMM_BYTE), +}; + +/* GrpTable: Grp11B */ +const insn_attr_t inat_group_table_5[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MAKE_IMM(INAT_IMM_VWORD32) | INAT_MODRM, + [0x7] = INAT_MAKE_IMM(INAT_IMM_VWORD32), +}; + +/* GrpTable: Grp12 */ +const insn_attr_t inat_group_table_16[INAT_GROUP_TABLE_SIZE] = { + [0x2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, + [0x4] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, + [0x6] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, +}; +const insn_attr_t inat_group_table_16_1[INAT_GROUP_TABLE_SIZE] = { + [0x2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x4] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x6] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, +}; + +/* GrpTable: Grp13 */ +const insn_attr_t inat_group_table_17[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_VARIANT, + [0x1] = INAT_VARIANT, + [0x2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, + [0x4] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, + [0x6] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, +}; +const insn_attr_t inat_group_table_17_1[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x1] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x4] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK | INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x6] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, +}; + +/* GrpTable: Grp14 */ +const insn_attr_t inat_group_table_18[INAT_GROUP_TABLE_SIZE] = { + [0x2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, + [0x3] = INAT_VARIANT, + [0x6] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VARIANT, + [0x7] = INAT_VARIANT, +}; +const insn_attr_t inat_group_table_18_1[INAT_GROUP_TABLE_SIZE] = { + [0x2] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x3] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x6] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, + [0x7] = INAT_MAKE_IMM(INAT_IMM_BYTE) | INAT_MODRM | INAT_VEXOK, +}; + +/* GrpTable: Grp15 */ +const insn_attr_t inat_group_table_21[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_VARIANT, + [0x1] = INAT_VARIANT, + [0x2] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x3] = INAT_MODRM | INAT_VEXOK | INAT_VARIANT, + [0x4] = INAT_VARIANT, + [0x5] = INAT_VARIANT, + [0x6] = INAT_VARIANT, +}; +const insn_attr_t inat_group_table_21_1[INAT_GROUP_TABLE_SIZE] = { + [0x6] = INAT_MODRM, +}; +const insn_attr_t inat_group_table_21_2[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MODRM, + [0x1] = INAT_MODRM, + [0x2] = INAT_MODRM, + [0x3] = INAT_MODRM, + [0x4] = INAT_MODRM, + [0x5] = INAT_MODRM, + [0x6] = INAT_MODRM | INAT_MODRM, +}; +const insn_attr_t inat_group_table_21_3[INAT_GROUP_TABLE_SIZE] = { + [0x6] = INAT_MODRM, +}; + +/* GrpTable: Grp16 */ +const insn_attr_t inat_group_table_13[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MODRM, + [0x1] = INAT_MODRM, + [0x2] = INAT_MODRM, + [0x3] = INAT_MODRM, +}; + +/* GrpTable: Grp17 */ +const insn_attr_t inat_group_table_27[INAT_GROUP_TABLE_SIZE] = { + [0x1] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x2] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, + [0x3] = INAT_MODRM | INAT_VEXOK | INAT_VEXONLY, +}; + +/* GrpTable: Grp18 */ +const insn_attr_t inat_group_table_25[INAT_GROUP_TABLE_SIZE] = { + [0x1] = INAT_VARIANT, + [0x2] = INAT_VARIANT, + [0x5] = INAT_VARIANT, + [0x6] = INAT_VARIANT, +}; +const insn_attr_t inat_group_table_25_1[INAT_GROUP_TABLE_SIZE] = { + [0x1] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x2] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x6] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, +}; + +/* GrpTable: Grp19 */ +const insn_attr_t inat_group_table_26[INAT_GROUP_TABLE_SIZE] = { + [0x1] = INAT_VARIANT, + [0x2] = INAT_VARIANT, + [0x5] = INAT_VARIANT, + [0x6] = INAT_VARIANT, +}; +const insn_attr_t inat_group_table_26_1[INAT_GROUP_TABLE_SIZE] = { + [0x1] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x2] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x5] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, + [0x6] = INAT_MODRM | INAT_VEXOK | INAT_EVEXONLY, +}; + +/* GrpTable: Grp20 */ +const insn_attr_t inat_group_table_14[INAT_GROUP_TABLE_SIZE] = { + [0x0] = INAT_MODRM, +}; + +/* GrpTable: Grp21 */ +const insn_attr_t inat_group_table_15[INAT_GROUP_TABLE_SIZE] = { + [0x1] = INAT_VARIANT, +}; +const insn_attr_t inat_group_table_15_2[INAT_GROUP_TABLE_SIZE] = { + [0x1] = INAT_MODRM, +}; + +/* GrpTable: GrpP */ + +/* GrpTable: GrpPDLK */ + +/* GrpTable: GrpRNG */ + +#ifndef __BOOT_COMPRESSED + +/* Escape opcode map array */ +const insn_attr_t * const inat_escape_tables[INAT_ESC_MAX + 1][INAT_LSTPFX_MAX + 1] = { + [1][0] = inat_escape_table_1, + [1][1] = inat_escape_table_1_1, + [1][2] = inat_escape_table_1_2, + [1][3] = inat_escape_table_1_3, + [2][0] = inat_escape_table_2, + [2][1] = inat_escape_table_2_1, + [2][2] = inat_escape_table_2_2, + [2][3] = inat_escape_table_2_3, + [3][0] = inat_escape_table_3, + [3][1] = inat_escape_table_3_1, + [3][2] = inat_escape_table_3_2, + [3][3] = inat_escape_table_3_3, +}; + +/* Group opcode map array */ +const insn_attr_t * const inat_group_tables[INAT_GRP_MAX + 1][INAT_LSTPFX_MAX + 1] = { + [4][0] = inat_group_table_4, + [5][0] = inat_group_table_5, + [6][0] = inat_group_table_6, + [7][0] = inat_group_table_7, + [8][0] = inat_group_table_8, + [9][0] = inat_group_table_9, + [10][0] = inat_group_table_10, + [11][0] = inat_group_table_11, + [11][2] = inat_group_table_11_2, + [13][0] = inat_group_table_13, + [14][0] = inat_group_table_14, + [15][0] = inat_group_table_15, + [15][2] = inat_group_table_15_2, + [16][0] = inat_group_table_16, + [16][1] = inat_group_table_16_1, + [17][0] = inat_group_table_17, + [17][1] = inat_group_table_17_1, + [18][0] = inat_group_table_18, + [18][1] = inat_group_table_18_1, + [21][0] = inat_group_table_21, + [21][1] = inat_group_table_21_1, + [21][2] = inat_group_table_21_2, + [21][3] = inat_group_table_21_3, + [24][0] = inat_group_table_24, + [24][1] = inat_group_table_24_1, + [24][2] = inat_group_table_24_2, + [25][0] = inat_group_table_25, + [25][1] = inat_group_table_25_1, + [26][0] = inat_group_table_26, + [26][1] = inat_group_table_26_1, + [27][0] = inat_group_table_27, +}; + +/* AVX opcode map array */ +const insn_attr_t * const inat_avx_tables[X86_VEX_M_MAX + 1][INAT_LSTPFX_MAX + 1] = { + [1][0] = inat_escape_table_1, + [1][1] = inat_escape_table_1_1, + [1][2] = inat_escape_table_1_2, + [1][3] = inat_escape_table_1_3, + [2][0] = inat_escape_table_2, + [2][1] = inat_escape_table_2_1, + [2][2] = inat_escape_table_2_2, + [2][3] = inat_escape_table_2_3, + [3][0] = inat_escape_table_3, + [3][1] = inat_escape_table_3_1, + [3][2] = inat_escape_table_3_2, + [3][3] = inat_escape_table_3_3, + [5][0] = inat_avx_table_5, + [5][1] = inat_avx_table_5_1, + [5][2] = inat_avx_table_5_2, + [5][3] = inat_avx_table_5_3, + [6][0] = inat_avx_table_6, + [6][1] = inat_avx_table_6_1, + [6][2] = inat_avx_table_6_2, + [6][3] = inat_avx_table_6_3, +}; + +#else /* !__BOOT_COMPRESSED */ + +/* Escape opcode map array */ +static const insn_attr_t *inat_escape_tables[INAT_ESC_MAX + 1][INAT_LSTPFX_MAX + 1]; + +/* Group opcode map array */ +static const insn_attr_t *inat_group_tables[INAT_GRP_MAX + 1][INAT_LSTPFX_MAX + 1]; + +/* AVX opcode map array */ +static const insn_attr_t *inat_avx_tables[X86_VEX_M_MAX + 1][INAT_LSTPFX_MAX + 1]; + +static void inat_init_tables(void) +{ + /* Print Escape opcode map array */ + inat_escape_tables[1][0] = inat_escape_table_1; + inat_escape_tables[1][1] = inat_escape_table_1_1; + inat_escape_tables[1][2] = inat_escape_table_1_2; + inat_escape_tables[1][3] = inat_escape_table_1_3; + inat_escape_tables[2][0] = inat_escape_table_2; + inat_escape_tables[2][1] = inat_escape_table_2_1; + inat_escape_tables[2][2] = inat_escape_table_2_2; + inat_escape_tables[2][3] = inat_escape_table_2_3; + inat_escape_tables[3][0] = inat_escape_table_3; + inat_escape_tables[3][1] = inat_escape_table_3_1; + inat_escape_tables[3][2] = inat_escape_table_3_2; + inat_escape_tables[3][3] = inat_escape_table_3_3; + + /* Print Group opcode map array */ + inat_group_tables[4][0] = inat_group_table_4; + inat_group_tables[5][0] = inat_group_table_5; + inat_group_tables[6][0] = inat_group_table_6; + inat_group_tables[7][0] = inat_group_table_7; + inat_group_tables[8][0] = inat_group_table_8; + inat_group_tables[9][0] = inat_group_table_9; + inat_group_tables[10][0] = inat_group_table_10; + inat_group_tables[11][0] = inat_group_table_11; + inat_group_tables[11][2] = inat_group_table_11_2; + inat_group_tables[13][0] = inat_group_table_13; + inat_group_tables[14][0] = inat_group_table_14; + inat_group_tables[15][0] = inat_group_table_15; + inat_group_tables[15][2] = inat_group_table_15_2; + inat_group_tables[16][0] = inat_group_table_16; + inat_group_tables[16][1] = inat_group_table_16_1; + inat_group_tables[17][0] = inat_group_table_17; + inat_group_tables[17][1] = inat_group_table_17_1; + inat_group_tables[18][0] = inat_group_table_18; + inat_group_tables[18][1] = inat_group_table_18_1; + inat_group_tables[21][0] = inat_group_table_21; + inat_group_tables[21][1] = inat_group_table_21_1; + inat_group_tables[21][2] = inat_group_table_21_2; + inat_group_tables[21][3] = inat_group_table_21_3; + inat_group_tables[24][0] = inat_group_table_24; + inat_group_tables[24][1] = inat_group_table_24_1; + inat_group_tables[24][2] = inat_group_table_24_2; + inat_group_tables[25][0] = inat_group_table_25; + inat_group_tables[25][1] = inat_group_table_25_1; + inat_group_tables[26][0] = inat_group_table_26; + inat_group_tables[26][1] = inat_group_table_26_1; + inat_group_tables[27][0] = inat_group_table_27; + + /* Print AVX opcode map array */ + inat_avx_tables[1][0] = inat_escape_table_1; + inat_avx_tables[1][1] = inat_escape_table_1_1; + inat_avx_tables[1][2] = inat_escape_table_1_2; + inat_avx_tables[1][3] = inat_escape_table_1_3; + inat_avx_tables[2][0] = inat_escape_table_2; + inat_avx_tables[2][1] = inat_escape_table_2_1; + inat_avx_tables[2][2] = inat_escape_table_2_2; + inat_avx_tables[2][3] = inat_escape_table_2_3; + inat_avx_tables[3][0] = inat_escape_table_3; + inat_avx_tables[3][1] = inat_escape_table_3_1; + inat_avx_tables[3][2] = inat_escape_table_3_2; + inat_avx_tables[3][3] = inat_escape_table_3_3; + inat_avx_tables[5][0] = inat_avx_table_5; + inat_avx_tables[5][1] = inat_avx_table_5_1; + inat_avx_tables[5][2] = inat_avx_table_5_2; + inat_avx_tables[5][3] = inat_avx_table_5_3; + inat_avx_tables[6][0] = inat_avx_table_6; + inat_avx_tables[6][1] = inat_avx_table_6_1; + inat_avx_tables[6][2] = inat_avx_table_6_2; + inat_avx_tables[6][3] = inat_avx_table_6_3; +} +#endif commit 165b1e4922e2fe2f54f94c9befeb27bc91141842 Author: Arnold D. Robbins Date: Fri Sep 23 11:35:25 2022 +0300 Update pc/ChangeLog. diff --git a/pc/ChangeLog b/pc/ChangeLog index 863102fe..1d193744 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2022-09-23 Arnold D. Robbins + + * Makefile.tst: Regenerated. + 2022-09-16 Arnold D. Robbins * Makefile.tst: Regenerated. commit cf32acc8edd9b5be054f3787b0045f67f3f807c5 Author: Arnold D. Robbins Date: Sun Sep 25 10:54:02 2022 +0300 Rename test/elemnew files to be test/mdim files. diff --git a/pc/ChangeLog b/pc/ChangeLog index 1d193744..18edd9ee 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2022-09-25 Arnold D. Robbins + + * Makefile.tst: Regenerated. + 2022-09-23 Arnold D. Robbins * Makefile.tst: Regenerated. diff --git a/pc/Makefile.tst b/pc/Makefile.tst index e37f1841..17b03c00 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -190,8 +190,7 @@ GAWK_EXT_TESTS = \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ - devfd devfd1 devfd2 \ - dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 elemnew4 \ + devfd devfd1 devfd2 dfacheck1 dumpvars \ errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ @@ -202,8 +201,9 @@ GAWK_EXT_TESTS = \ indirectbuiltin indirectcall indirectcall2 \ indirectcall3 intarray iolint isarrayunset lint \ lintexp lintindex lintint lintlength lintold lintplus lintset \ - lintwarn manyfiles match1 match2 match3 mbstr1 mbstr2 mdim1 mdim2 \ - mdim3 mdim4 mixed1 mktime modifiers muldimposix nastyparm negtime \ + lintwarn manyfiles match1 match2 match3 mbstr1 mbstr2 \ + mdim1 mdim2 mdim3 mdim4 mdim5 mdim6 mdim7 mdim8 \ + mixed1 mktime modifiers muldimposix nastyparm negtime \ next nondec nondec2 nonfatal1 nonfatal2 nonfatal3 nsawk1a nsawk1b \ nsawk1c nsawk2a nsawk2b nsbad nsbad2 nsbad3 nsbad_cmd nsforloop \ nsfuncrecurse nsidentifier nsindirect1 nsindirect2 nsprof1 nsprof2 \ @@ -2742,26 +2742,6 @@ dfacheck1: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ -elemnew1: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - -elemnew2: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - -elemnew3: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - -elemnew4: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @@ -3107,6 +3087,26 @@ mdim4: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +mdim5: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +mdim6: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +mdim7: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +mdim8: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + mktime: @echo $@ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/ChangeLog b/test/ChangeLog index 0e17406b..89a884b2 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,11 @@ +2022-09-25 Arnold D. Robbins + + * Makefile.am: Rename elemnew tests to mdim: + * mdim5.*: Renamed from elemnew1.*. + * mdim6.*: Renamed from elemnew2.*. + * mdim7.*: Renamed from elemnew3.*. + * mdim8.*: Renamed from elemnew4.*. + 2022-09-23 Arnold D. Robbins * Makefile.am (EXTRA_DIST): New test: elemnew4. diff --git a/test/Makefile.am b/test/Makefile.am index dd55aa21..bece95b6 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -285,15 +285,6 @@ EXTRA_DIST = \ dumpvars.ok \ dynlj.awk \ dynlj.ok \ - elemnew1.awk \ - elemnew1.ok \ - elemnew2.awk \ - elemnew2.ok \ - elemnew3.awk \ - elemnew3.ok \ - elemnew4.awk \ - elemnew4.in \ - elemnew4.ok \ escapebrace.awk \ escapebrace.in \ escapebrace.ok \ @@ -702,6 +693,15 @@ EXTRA_DIST = \ mdim4.awk \ mdim4.in \ mdim4.ok \ + mdim5.awk \ + mdim5.ok \ + mdim6.awk \ + mdim6.ok \ + mdim7.awk \ + mdim7.ok \ + mdim8.awk \ + mdim8.in \ + mdim8.ok \ modifiers.sh \ modifiers.ok \ muldimposix.awk \ @@ -1492,8 +1492,7 @@ GAWK_EXT_TESTS = \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ - devfd devfd1 devfd2 \ - dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 elemnew4 \ + devfd devfd1 devfd2 dfacheck1 dumpvars \ errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ @@ -1504,8 +1503,9 @@ GAWK_EXT_TESTS = \ indirectbuiltin indirectcall indirectcall2 \ indirectcall3 intarray iolint isarrayunset lint \ lintexp lintindex lintint lintlength lintold lintplus lintset \ - lintwarn manyfiles match1 match2 match3 mbstr1 mbstr2 mdim1 mdim2 \ - mdim3 mdim4 mixed1 mktime modifiers muldimposix nastyparm negtime \ + lintwarn manyfiles match1 match2 match3 mbstr1 mbstr2 \ + mdim1 mdim2 mdim3 mdim4 mdim5 mdim6 mdim7 mdim8 \ + mixed1 mktime modifiers muldimposix nastyparm negtime \ next nondec nondec2 nonfatal1 nonfatal2 nonfatal3 nsawk1a nsawk1b \ nsawk1c nsawk2a nsawk2b nsbad nsbad2 nsbad3 nsbad_cmd nsforloop \ nsfuncrecurse nsidentifier nsindirect1 nsindirect2 nsprof1 nsprof2 \ diff --git a/test/Makefile.in b/test/Makefile.in index 8a0b2f56..f6a18605 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -553,15 +553,6 @@ EXTRA_DIST = \ dumpvars.ok \ dynlj.awk \ dynlj.ok \ - elemnew1.awk \ - elemnew1.ok \ - elemnew2.awk \ - elemnew2.ok \ - elemnew3.awk \ - elemnew3.ok \ - elemnew4.awk \ - elemnew4.in \ - elemnew4.ok \ escapebrace.awk \ escapebrace.in \ escapebrace.ok \ @@ -970,6 +961,15 @@ EXTRA_DIST = \ mdim4.awk \ mdim4.in \ mdim4.ok \ + mdim5.awk \ + mdim5.ok \ + mdim6.awk \ + mdim6.ok \ + mdim7.awk \ + mdim7.ok \ + mdim8.awk \ + mdim8.in \ + mdim8.ok \ modifiers.sh \ modifiers.ok \ muldimposix.awk \ @@ -1760,8 +1760,7 @@ GAWK_EXT_TESTS = \ binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ - devfd devfd1 devfd2 \ - dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 elemnew4 \ + devfd devfd1 devfd2 dfacheck1 dumpvars \ errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ @@ -1772,8 +1771,9 @@ GAWK_EXT_TESTS = \ indirectbuiltin indirectcall indirectcall2 \ indirectcall3 intarray iolint isarrayunset lint \ lintexp lintindex lintint lintlength lintold lintplus lintset \ - lintwarn manyfiles match1 match2 match3 mbstr1 mbstr2 mdim1 mdim2 \ - mdim3 mdim4 mixed1 mktime modifiers muldimposix nastyparm negtime \ + lintwarn manyfiles match1 match2 match3 mbstr1 mbstr2 \ + mdim1 mdim2 mdim3 mdim4 mdim5 mdim6 mdim7 mdim8 \ + mixed1 mktime modifiers muldimposix nastyparm negtime \ next nondec nondec2 nonfatal1 nonfatal2 nonfatal3 nsawk1a nsawk1b \ nsawk1c nsawk2a nsawk2b nsbad nsbad2 nsbad3 nsbad_cmd nsforloop \ nsfuncrecurse nsidentifier nsindirect1 nsindirect2 nsprof1 nsprof2 \ @@ -4495,26 +4495,6 @@ dfacheck1: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ -elemnew1: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - -elemnew2: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - -elemnew3: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - -elemnew4: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @@ -4858,6 +4838,26 @@ mdim4: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +mdim5: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +mdim6: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +mdim7: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +mdim8: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + mktime: @echo $@ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index 31eb89f1..43672fa7 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1437,26 +1437,6 @@ dfacheck1: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ -elemnew1: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - -elemnew2: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - -elemnew3: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - -elemnew4: - @echo $@ - @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ - @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @@ -1800,6 +1780,26 @@ mdim4: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +mdim5: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +mdim6: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +mdim7: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +mdim8: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + mktime: @echo $@ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/elemnew2.ok b/test/elemnew2.ok deleted file mode 100644 index d6f2d78a..00000000 --- a/test/elemnew2.ok +++ /dev/null @@ -1,2 +0,0 @@ -gawk: elemnew2.awk:5: fatal: attempt to use array `a["0"]' in a scalar context -EXIT CODE: 2 diff --git a/test/elemnew1.awk b/test/mdim5.awk similarity index 100% rename from test/elemnew1.awk rename to test/mdim5.awk diff --git a/test/elemnew1.ok b/test/mdim5.ok similarity index 100% rename from test/elemnew1.ok rename to test/mdim5.ok diff --git a/test/elemnew2.awk b/test/mdim6.awk similarity index 100% rename from test/elemnew2.awk rename to test/mdim6.awk diff --git a/test/mdim6.ok b/test/mdim6.ok new file mode 100644 index 00000000..fc9990f0 --- /dev/null +++ b/test/mdim6.ok @@ -0,0 +1,2 @@ +gawk: mdim6.awk:5: fatal: attempt to use array `a["0"]' in a scalar context +EXIT CODE: 2 diff --git a/test/elemnew3.awk b/test/mdim7.awk similarity index 100% rename from test/elemnew3.awk rename to test/mdim7.awk diff --git a/test/elemnew3.ok b/test/mdim7.ok similarity index 100% rename from test/elemnew3.ok rename to test/mdim7.ok diff --git a/test/elemnew4.awk b/test/mdim8.awk similarity index 100% rename from test/elemnew4.awk rename to test/mdim8.awk diff --git a/test/elemnew4.in b/test/mdim8.in similarity index 100% rename from test/elemnew4.in rename to test/mdim8.in diff --git a/test/elemnew4.ok b/test/mdim8.ok similarity index 100% rename from test/elemnew4.ok rename to test/mdim8.ok commit bf9dcd1bcd9854076ebc862aee872f3100286ff6 Author: Arnold D. Robbins Date: Sun Sep 25 11:08:58 2022 +0300 Documentation update. diff --git a/doc/ChangeLog b/doc/ChangeLog index 2c988426..dfbd541e 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2022-09-25 Arnold D. Robbins + + * gawktexi.in (Persistent Memory): Document REALLY_USE_PERSIST_MALLOC + environment variable for testing unsupported systems. + 2022-09-21 Arnold D. Robbins * gawktexi.in (Persistent Memory): Document that FreeBSD 13 and diff --git a/doc/gawk.texi b/doc/gawk.texi index 5cbe3883..0789b54b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -31066,10 +31066,15 @@ $ @kbd{gawk --version} @noindent If you see the @samp{PMA} with a version indicator, then it's supported. +@cindex @env{REALLY_USE_PERSIST_MALLOC} environment variable +@cindex environment variables @subentry @env{REALLY_USE_PERSIST_MALLOC} As of this writing, persistent memory has only been tested on GNU/Linux, Cygwin, Solaris 2.11, Mac OS, FreeBSD 13.1 and OpenBSD 7.1. -On others, your mileage may -vary, and/or you may need to investigate how to make it work for you. +On all others, persistent memory is disabled by default. You can force +it to be enabled by exporting the shell variable +@env{REALLY_USE_PERSIST_MALLOC} with a nonempty value before +running @command{configure} (@pxref{Quick Installation}). +If you do so and all the tests pass, please let the maintainer know. To use persistent memory, follow these steps: diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 9e85e1bb..854b6e0c 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -29948,10 +29948,15 @@ $ @kbd{gawk --version} @noindent If you see the @samp{PMA} with a version indicator, then it's supported. +@cindex @env{REALLY_USE_PERSIST_MALLOC} environment variable +@cindex environment variables @subentry @env{REALLY_USE_PERSIST_MALLOC} As of this writing, persistent memory has only been tested on GNU/Linux, Cygwin, Solaris 2.11, Mac OS, FreeBSD 13.1 and OpenBSD 7.1. -On others, your mileage may -vary, and/or you may need to investigate how to make it work for you. +On all others, persistent memory is disabled by default. You can force +it to be enabled by exporting the shell variable +@env{REALLY_USE_PERSIST_MALLOC} with a nonempty value before +running @command{configure} (@pxref{Quick Installation}). +If you do so and all the tests pass, please let the maintainer know. To use persistent memory, follow these steps: commit 4b08eee7c10e17a13bb9600bfcfdd41a3a9c0160 Author: Arnold D. Robbins Date: Sun Sep 25 11:20:01 2022 +0300 Update Serbian translation (sr.po). diff --git a/po/ChangeLog b/po/ChangeLog index 7149ae14..c3b18d38 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,7 @@ +2022-09-25 Arnold D. Robbins + + * sr.po: Updated. + 2022-09-04 Arnold D. Robbins * 5.2.0: Release tar ball made. diff --git a/po/sr.po b/po/sr.po index fad607a4..6dd7623f 100644 --- a/po/sr.po +++ b/po/sr.po @@ -1,21 +1,20 @@ # Serbian translation of gawk. # Copyright © 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the gawk package. -# Мирослав Николић , 2020–2021. +# Мирослав Николић , 2020–2022. msgid "" msgstr "" -"Project-Id-Version: gawk 5.1.1e\n" +"Project-Id-Version: gawk 5.1.65\n" "Report-Msgid-Bugs-To: bug-gawk@gnu.org\n" -"POT-Creation-Date: 2022-09-04 18:51+0300\n" -"PO-Revision-Date: 2021-12-11 20:26+0200\n" +"POT-Creation-Date: 2022-08-17 17:51+0300\n" +"PO-Revision-Date: 2022-09-19 18:39+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: array.c:249 @@ -80,12 +79,8 @@ msgid "%s: first argument cannot be FUNCTAB without a second argument" msgstr "%s: први аргумент не може бити „FUNCTAB“ без другог аргумента" #: array.c:851 -msgid "" -"asort/asorti: using the same array as source and destination without a third " -"argument is silly." -msgstr "" -"asort/asorti: коришћење истог низа као извор и одредиште без трећег " -"аргумента је глупо." +msgid "asort/asorti: using the same array as source and destination without a third argument is silly." +msgstr "asort/asorti: коришћење истог низа као извор и одредиште без трећег аргумента је глупо." #: array.c:856 #, c-format @@ -143,11 +138,11 @@ msgstr "удвостручене вредности слова у телу пр msgid "duplicate `default' detected in switch body" msgstr "удвостручено „default“ је откривено у телу прекидача" -#: awkgram.y:1052 awkgram.y:4482 +#: awkgram.y:1052 awkgram.y:4480 msgid "`break' is not allowed outside a loop or switch" msgstr "„break“ није допуштено ван петље или прекидача" -#: awkgram.y:1062 awkgram.y:4474 +#: awkgram.y:1062 awkgram.y:4472 msgid "`continue' is not allowed outside a loop" msgstr "„continue“ није допуштено ван петље" @@ -167,8 +162,7 @@ msgstr "„return“ је коришћено ван контекста функ #: awkgram.y:1185 msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'" -msgstr "" -"обично „print“ у правилу „BEGIN“ или „END“ треба вероватно бити „print \"\"“" +msgstr "обично „print“ у правилу „BEGIN“ или „END“ треба вероватно бити „print \"\"“" #: awkgram.y:1255 awkgram.y:1304 msgid "`delete' is not allowed with SYMTAB" @@ -230,8 +224,7 @@ msgstr "индиректни позиви функције су проширењ #: awkgram.y:2032 #, c-format msgid "cannot use special variable `%s' for indirect function call" -msgstr "" -"не могу да користим нарочиту променљиву „%s“ за индиректни позив функције" +msgstr "не могу да користим нарочиту променљиву „%s“ за индиректни позив функције" #: awkgram.y:2065 #, c-format @@ -255,268 +248,261 @@ msgid "unexpected newline or end of string" msgstr "неочекивани нови ред или крај ниске" #: awkgram.y:2596 -msgid "" -"source files / command-line arguments must contain complete functions or " -"rules" -msgstr "" -"изворне датотеке / аргументи линије наредби морају садржати потпуне функције " -"или правила" +msgid "source files / command-line arguments must contain complete functions or rules" +msgstr "изворне датотеке / аргументи линије наредби морају садржати потпуне функције или правила" -#: awkgram.y:2880 awkgram.y:2958 awkgram.y:3196 debug.c:545 debug.c:561 +#: awkgram.y:2878 awkgram.y:2956 awkgram.y:3194 debug.c:545 debug.c:561 #: debug.c:2845 debug.c:5215 #, c-format msgid "cannot open source file `%s' for reading: %s" msgstr "не могу да отворим изворну датотеку „%s“ ради читања: %s" -#: awkgram.y:2881 awkgram.y:3018 +#: awkgram.y:2879 awkgram.y:3016 #, c-format msgid "cannot open shared library `%s' for reading: %s" msgstr "не могу да отворим дељену библиотеку „%s“ ради читања: %s" -#: awkgram.y:2883 awkgram.y:2959 awkgram.y:3019 builtin.c:136 debug.c:5366 +#: awkgram.y:2881 awkgram.y:2957 awkgram.y:3017 builtin.c:136 debug.c:5366 msgid "reason unknown" msgstr "разлог није познат" -#: awkgram.y:2892 awkgram.y:2916 +#: awkgram.y:2890 awkgram.y:2914 #, c-format msgid "cannot include `%s' and use it as a program file" msgstr "не могу да обухватим „%s“ и да је користим као датотеку програма" -#: awkgram.y:2905 +#: awkgram.y:2903 #, c-format msgid "already included source file `%s'" msgstr "већ је обухваћена изворна датотека „%s“" -#: awkgram.y:2906 +#: awkgram.y:2904 #, c-format msgid "already loaded shared library `%s'" msgstr "већ је учитана дељена библиотека „%s“" -#: awkgram.y:2943 +#: awkgram.y:2941 msgid "@include is a gawk extension" msgstr "„@include“ је проширење „gawk“-а" -#: awkgram.y:2949 +#: awkgram.y:2947 msgid "empty filename after @include" msgstr "празан назив датотеке након „@include“" -#: awkgram.y:2998 +#: awkgram.y:2996 msgid "@load is a gawk extension" msgstr "„@load“ је проширење „gawk“-а" -#: awkgram.y:3005 +#: awkgram.y:3003 msgid "empty filename after @load" msgstr "празан назив датотеке након „@load“" -#: awkgram.y:3148 +#: awkgram.y:3146 msgid "empty program text on command line" msgstr "празан текст програма на линији наредби" -#: awkgram.y:3264 debug.c:470 debug.c:628 +#: awkgram.y:3262 debug.c:470 debug.c:628 #, c-format msgid "cannot read source file `%s': %s" msgstr "не могу да прочитам изворну датотеку „%s“: %s" -#: awkgram.y:3275 +#: awkgram.y:3273 #, c-format msgid "source file `%s' is empty" msgstr "изворна датотека „%s“ је празна" -#: awkgram.y:3335 +#: awkgram.y:3333 #, c-format msgid "error: invalid character '\\%03o' in source code" msgstr "грешка: неисправан знак „\\%03o“ у изворном коду" -#: awkgram.y:3562 +#: awkgram.y:3560 msgid "source file does not end in newline" msgstr "изворна датотека се не завршава у новом реду" -#: awkgram.y:3672 +#: awkgram.y:3670 msgid "unterminated regexp ends with `\\' at end of file" msgstr "неокончани регуларни израз се завршава \\ на крају датотеке" -#: awkgram.y:3699 +#: awkgram.y:3697 #, c-format msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk" -msgstr "" -"%s: %d: „tawk“ измењивач регуларног израза „/.../%c“ не ради у „gawk“-у" +msgstr "%s: %d: „tawk“ измењивач регуларног израза „/.../%c“ не ради у „gawk“-у" -#: awkgram.y:3703 +#: awkgram.y:3701 #, c-format msgid "tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "„tawk“ измењивач регуларног израза „/.../%c“ не ради у „gawk“-у" -#: awkgram.y:3716 +#: awkgram.y:3714 msgid "unterminated regexp" msgstr "неокончани регуларни израз" -#: awkgram.y:3720 +#: awkgram.y:3718 msgid "unterminated regexp at end of file" msgstr "неокончани регуларни израз на крају датотеке" -#: awkgram.y:3809 +#: awkgram.y:3807 msgid "use of `\\ #...' line continuation is not portable" msgstr "употреба настављања реда „\\ #...“ није преносива" -#: awkgram.y:3831 +#: awkgram.y:3829 msgid "backslash not last character on line" msgstr "контра оса црта није последњи знак у реду" -#: awkgram.y:3878 awkgram.y:3880 +#: awkgram.y:3876 awkgram.y:3878 msgid "multidimensional arrays are a gawk extension" msgstr "вишедимензионални низови су проширења „gawk“-а" -#: awkgram.y:3905 awkgram.y:3916 +#: awkgram.y:3903 awkgram.y:3914 #, c-format msgid "POSIX does not allow operator `%s'" msgstr "„POSIX“ не допушта оператора „%s“" -#: awkgram.y:3907 awkgram.y:3918 awkgram.y:3953 awkgram.y:3961 +#: awkgram.y:3905 awkgram.y:3916 awkgram.y:3951 awkgram.y:3959 #, c-format msgid "operator `%s' is not supported in old awk" msgstr "оператор „%s“ није подржан у старом „awk“-у" -#: awkgram.y:4058 awkgram.y:4080 command.y:1188 +#: awkgram.y:4056 awkgram.y:4078 command.y:1188 msgid "unterminated string" msgstr "неокончана ниска" -#: awkgram.y:4068 main.c:1251 +#: awkgram.y:4066 main.c:1251 msgid "POSIX does not allow physical newlines in string values" msgstr "„POSIX“ не допушта физичке нове редове у вредностима ниске" -#: awkgram.y:4070 node.c:460 +#: awkgram.y:4068 node.c:460 msgid "backslash string continuation is not portable" msgstr "настављање ниске контра косом цртом није преносиво" -#: awkgram.y:4311 +#: awkgram.y:4309 #, c-format msgid "invalid char '%c' in expression" msgstr "неисправни знак „%c“ у изразу" -#: awkgram.y:4406 +#: awkgram.y:4404 #, c-format msgid "`%s' is a gawk extension" msgstr "„%s“ је проширење „gawk“-а" -#: awkgram.y:4411 +#: awkgram.y:4409 #, c-format msgid "POSIX does not allow `%s'" msgstr "„POSIX“ не допушта „%s“" -#: awkgram.y:4419 +#: awkgram.y:4417 #, c-format msgid "`%s' is not supported in old awk" msgstr "„%s“ није подржано у старом „awk“-у" -#: awkgram.y:4519 +#: awkgram.y:4517 msgid "`goto' considered harmful!" msgstr "„goto“ се сматра опасним!" -#: awkgram.y:4588 +#: awkgram.y:4586 #, c-format msgid "%d is invalid as number of arguments for %s" msgstr "%d није исправно као број аргумената за „%s“" -#: awkgram.y:4623 +#: awkgram.y:4621 #, c-format msgid "%s: string literal as last argument of substitute has no effect" msgstr "%s: дословност ниске као последњи аргумент заменика нема дејства" -#: awkgram.y:4628 +#: awkgram.y:4626 #, c-format msgid "%s third parameter is not a changeable object" msgstr "„%s“ трећи параметар није променљиви објекат" -#: awkgram.y:4732 awkgram.y:4735 +#: awkgram.y:4730 awkgram.y:4733 msgid "match: third argument is a gawk extension" msgstr "упореди: трећи аргумент је проширење „gawk“-а" -#: awkgram.y:4789 awkgram.y:4792 +#: awkgram.y:4787 awkgram.y:4790 msgid "close: second argument is a gawk extension" msgstr "затвори: други аргумент је проширење „gawk“-а" -#: awkgram.y:4804 +#: awkgram.y:4802 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" msgstr "коришћење „dcgettext(_\"...\") је нетачно: уклоните водећу подвлаку" -#: awkgram.y:4819 +#: awkgram.y:4817 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "коришћење „dcngettext(_\"...\") је нетачно: уклоните водећу подвлаку" -#: awkgram.y:4838 +#: awkgram.y:4836 msgid "index: regexp constant as second argument is not allowed" msgstr "индекс: константа регуларног израза као други аргумент није допуштена" -#: awkgram.y:4891 +#: awkgram.y:4889 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "функција „%s“: параметар %s“ засенчује општу променљиву" -#: awkgram.y:4940 debug.c:4199 debug.c:4242 debug.c:5364 profile.c:110 +#: awkgram.y:4938 debug.c:4199 debug.c:4242 debug.c:5364 profile.c:110 #, c-format msgid "could not open `%s' for writing: %s" msgstr "не могу да отворим „%s“ за упис: %s" -#: awkgram.y:4941 +#: awkgram.y:4939 msgid "sending variable list to standard error" msgstr "шаљем списак променљиве на стандардну грешку" -#: awkgram.y:4949 +#: awkgram.y:4947 #, c-format msgid "%s: close failed: %s" msgstr "%s: затварање није успело: %s" -#: awkgram.y:4974 +#: awkgram.y:4972 msgid "shadow_funcs() called twice!" msgstr "„shadow_funcs()“ је позвана два пута!" -#: awkgram.y:4982 +#: awkgram.y:4980 msgid "there were shadowed variables" msgstr "било је засенчених променљивих" -#: awkgram.y:5059 +#: awkgram.y:5057 #, c-format msgid "function name `%s' previously defined" msgstr "назив функције „%s“ је претходно дефинисан" -#: awkgram.y:5110 +#: awkgram.y:5108 #, c-format msgid "function `%s': cannot use function name as parameter name" msgstr "функција „%s“: не могу да користим назив функције као назив параметра" -#: awkgram.y:5113 +#: awkgram.y:5111 #, c-format msgid "function `%s': cannot use special variable `%s' as a function parameter" -msgstr "" -"функција „%s“: не могу да користим нарочиту променљиву „%s“ као параметар " -"функције" +msgstr "функција „%s“: не могу да користим нарочиту променљиву „%s“ као параметар функције" -#: awkgram.y:5117 +#: awkgram.y:5115 #, c-format msgid "function `%s': parameter `%s' cannot contain a namespace" msgstr "функција „%s“: параметар „%s“ не може садржати називни простор" -#: awkgram.y:5124 +#: awkgram.y:5122 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "функција „%s“: параметар #%d, „%s“, удвостручени параметар #%d" -#: awkgram.y:5213 +#: awkgram.y:5211 #, c-format msgid "function `%s' called but never defined" msgstr "функција „%s“ је позвана али није никада дефинисана" -#: awkgram.y:5217 +#: awkgram.y:5215 #, c-format msgid "function `%s' defined but never called directly" msgstr "функција „%s“ је дефинисана али никада није позвана директно" -#: awkgram.y:5249 +#: awkgram.y:5247 #, c-format msgid "regexp constant for parameter #%d yields boolean value" msgstr "константа регуларног израза за параметар #%d даје логичку вредност" -#: awkgram.y:5264 +#: awkgram.y:5262 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -525,84 +511,71 @@ msgstr "" "функција „%s“ је позвана са простором између назива и (,\n" "или је коришћена као променљива или низ" -#: awkgram.y:5487 awkgram.y:5540 mpfr.c:1589 mpfr.c:1624 +#: awkgram.y:5485 awkgram.y:5538 mpfr.c:1589 mpfr.c:1624 msgid "division by zero attempted" msgstr "покушано је дељње нулом" -#: awkgram.y:5496 awkgram.y:5549 mpfr.c:1634 +#: awkgram.y:5494 awkgram.y:5547 mpfr.c:1634 #, c-format msgid "division by zero attempted in `%%'" msgstr "покушано је дељње нулом у „%%“" -#: awkgram.y:5853 -msgid "" -"cannot assign a value to the result of a field post-increment expression" +#: awkgram.y:5851 +msgid "cannot assign a value to the result of a field post-increment expression" msgstr "не могу да доделим вредност резултату пост-повећавајућем изразу поља" -#: awkgram.y:5856 +#: awkgram.y:5854 #, c-format msgid "invalid target of assignment (opcode %s)" msgstr "неисправна мета додељивања (опкод %s)" -#: awkgram.y:6240 +#: awkgram.y:6238 msgid "statement has no effect" msgstr "изјава нема дејства" -#: awkgram.y:6755 +#: awkgram.y:6753 #, c-format msgid "identifier %s: qualified names not allowed in traditional / POSIX mode" -msgstr "" -"одредник „%s“: квалификовани називи нису допуштени у традиционалном „/ " -"POSIX“ режиму" +msgstr "одредник „%s“: квалификовани називи нису допуштени у традиционалном „/ POSIX“ режиму" -#: awkgram.y:6760 +#: awkgram.y:6758 #, c-format msgid "identifier %s: namespace separator is two colons, not one" msgstr "одредник „%s“: раздвојник називног простора су две двотачке, не једна" -#: awkgram.y:6766 +#: awkgram.y:6764 #, c-format msgid "qualified identifier `%s' is badly formed" msgstr "квалификовани одредник „%s“ је лоше обликован" -#: awkgram.y:6773 +#: awkgram.y:6771 #, c-format -msgid "" -"identifier `%s': namespace separator can only appear once in a qualified name" -msgstr "" -"одре „%s“: раздвојник називног простора може се појавити само једном у " -"квалификованом називу" +msgid "identifier `%s': namespace separator can only appear once in a qualified name" +msgstr "одре „%s“: раздвојник називног простора може се појавити само једном у квалификованом називу" -#: awkgram.y:6822 awkgram.y:6873 +#: awkgram.y:6820 awkgram.y:6871 #, c-format msgid "using reserved identifier `%s' as a namespace is not allowed" -msgstr "" -"коришћење резервисаног одредника „%s“ као називни простор није допуштено" +msgstr "коришћење резервисаног одредника „%s“ као називни простор није допуштено" -#: awkgram.y:6829 awkgram.y:6839 +#: awkgram.y:6827 awkgram.y:6837 #, c-format -msgid "" -"using reserved identifier `%s' as second component of a qualified name is " -"not allowed" -msgstr "" -"коришћење резервисаног одредника „%s“ као другог састојка квалификованог " -"назива није допуштено" +msgid "using reserved identifier `%s' as second component of a qualified name is not allowed" +msgstr "коришћење резервисаног одредника „%s“ као другог састојка квалификованог назива није допуштено" -#: awkgram.y:6857 +#: awkgram.y:6855 msgid "@namespace is a gawk extension" msgstr "„@namespace“ је проширење „gawk“-а" -#: awkgram.y:6864 +#: awkgram.y:6862 #, c-format msgid "namespace name `%s' must meet identifier naming rules" -msgstr "" -"назив називног простора „%s“ мора задовољити правила именовања одредника" +msgstr "назив називног простора „%s“ мора задовољити правила именовања одредника" #: builtin.c:98 builtin.c:105 -#, fuzzy, c-format -#| msgid "%s: called with less than two arguments" +#, c-format msgid "%s: called with %d arguments" -msgstr "%s: позвана са мање од два аргумента" +msgstr "%s: позвано са %d аргумента" #: builtin.c:130 #, c-format @@ -637,15 +610,12 @@ msgstr "%s: примих аргумент не-ниске" #: builtin.c:298 #, c-format msgid "fflush: cannot flush: pipe `%.*s' opened for reading, not writing" -msgstr "" -"fflush: не могу да исперем: спојка „%.*s“ је отворена за читање, не за писање" +msgstr "fflush: не могу да исперем: спојка „%.*s“ је отворена за читање, не за писање" #: builtin.c:301 #, c-format msgid "fflush: cannot flush: file `%.*s' opened for reading, not writing" -msgstr "" -"fflush: не могу да исперем: датотека „%.*s“ је отворена за читање, не за " -"писање" +msgstr "fflush: не могу да исперем: датотека „%.*s“ је отворена за читање, не за писање" #: builtin.c:312 #, c-format @@ -655,8 +625,7 @@ msgstr "fflush: не могу да исперем датотеку „%.*s“: % #: builtin.c:317 #, c-format msgid "fflush: cannot flush: two-way pipe `%.*s' has closed write end" -msgstr "" -"fflush: не могу да исперем: двосмерна спојка „%.*s“ је затворила крај писања" +msgstr "fflush: не могу да исперем: двосмерна спојка „%.*s“ је затворила крај писања" #: builtin.c:323 #, c-format @@ -716,10 +685,8 @@ msgstr "кобно: индекс аргумента са „$“ мора бит #: builtin.c:1003 #, c-format -msgid "" -"fatal: argument index %ld greater than total number of supplied arguments" -msgstr "" -"кобно: индекс аргумента %ld је већи од укупног броја достављених аргумената" +msgid "fatal: argument index %ld greater than total number of supplied arguments" +msgstr "кобно: индекс аргумента %ld је већи од укупног броја достављених аргумената" #: builtin.c:1007 msgid "fatal: `$' not permitted after period in format" @@ -767,9 +734,7 @@ msgstr "„%%%c“ формат је „POSIX“ стандард али ниј #: builtin.c:1688 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" -msgstr "" -"занемарујем непознат знак одредника формата „%c“: ниједан аргумент није " -"претворен" +msgstr "занемарујем непознат знак одредника формата „%c“: ниједан аргумент није претворен" #: builtin.c:1693 msgid "fatal: not enough arguments to satisfy format string" @@ -788,10 +753,9 @@ msgid "too many arguments supplied for format string" msgstr "превише аргумената је достављено за ниску формата" #: builtin.c:1752 -#, fuzzy, c-format -#| msgid "%s: received non-string first argument" +#, c-format msgid "%s: received non-string format string argument" -msgstr "%s: примих први аргумент не-ниске" +msgstr "%s: примих формат не-ниске аргумента ниске" #: builtin.c:1767 msgid "sprintf: no arguments" @@ -806,10 +770,9 @@ msgid "printf: attempt to write to closed write end of two-way pipe" msgstr "printf: покушах да пишем на затворени крај писања двосмерне спојке" #: builtin.c:1884 builtin.c:4096 -#, fuzzy, c-format -#| msgid "%s: received non-numeric first argument" +#, c-format msgid "%s: received non-numeric third argument" -msgstr "%s: примих први аргумент који није број" +msgstr "%s: примих трећи аргумент који није број" #: builtin.c:1891 builtin.c:2081 builtin.c:2587 builtin.c:3586 builtin.c:3627 #: builtin.c:4227 @@ -858,16 +821,12 @@ msgstr "substr: индекс почетка %g је прешао крај нис #: builtin.c:1985 #, c-format -msgid "" -"substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "" -"substr: дужина %g на индексу почетка %g превазилази дужину првог аргумента " -"(%lu)" +msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "substr: дужина %g на индексу почетка %g превазилази дужину првог аргумента (%lu)" #: builtin.c:2060 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" -msgstr "" -"strftime: вредност формата у „PROCINFO[\"strftime\"]“ има бројевну врсту" +msgstr "strftime: вредност формата у „PROCINFO[\"strftime\"]“ има бројевну врсту" #: builtin.c:2091 msgid "strftime: second argument less than 0 or too big for time_t" @@ -923,22 +882,17 @@ msgid "%s: can be called indirectly only with two arguments" msgstr "%s: може бити позвано индиректно само са два аргумента" #: builtin.c:3409 -#, fuzzy -#| msgid "indirect call to %s requires at least two arguments" msgid "indirect call to gensub requires three or four arguments" -msgstr "индиректни позив ка „%s“ захтева барем два аргумента" +msgstr "индиректан позив за „gensub“ захтева три или четири аргумента" #: builtin.c:3471 -#, fuzzy -#| msgid "indirect call to %s requires at least two arguments" msgid "indirect call to match requires two or three arguments" -msgstr "индиректни позив ка „%s“ захтева барем два аргумента" +msgstr "индиректан позив за поклапање захтева два или три аргумента" #: builtin.c:3515 -#, fuzzy, c-format -#| msgid "indirect call to %s requires at least two arguments" +#, c-format msgid "indirect call to %s requires two to four arguments" -msgstr "индиректни позив ка „%s“ захтева барем два аргумента" +msgstr "индиректан позив ка „%s“ захтева од два до четири аргумента" #: builtin.c:3592 #, c-format @@ -1001,22 +955,19 @@ msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: „%s“ није исправна локална категорија" #: builtin.c:3989 builtin.c:4007 -#, fuzzy, c-format -#| msgid "%s: received non-string first argument" +#, c-format msgid "%s: received non-string third argument" -msgstr "%s: примих први аргумент не-ниске" +msgstr "%s: примих трећи аргумент не-ниске" #: builtin.c:4062 builtin.c:4083 -#, fuzzy, c-format -#| msgid "%s: received non-string first argument" +#, c-format msgid "%s: received non-string fifth argument" -msgstr "%s: примих први аргумент не-ниске" +msgstr "%s: примих пети аргумент не-ниске" #: builtin.c:4072 builtin.c:4089 -#, fuzzy, c-format -#| msgid "%s: received non-string first argument" +#, c-format msgid "%s: received non-string fourth argument" -msgstr "%s: примих први аргумент не-ниске" +msgstr "%s: примих четврти аргумент не-ниске" #: builtin.c:4217 mpfr.c:1337 msgid "intdiv: third argument is not an array" @@ -1032,11 +983,8 @@ msgstr "typeof: други аргумент није низ" #: builtin.c:4352 #, c-format -msgid "" -"typeof detected invalid flags combination `%s'; please file a bug report" -msgstr "" -"„typeof“ открива неисправну комбинацију заставица „%s“; будите љубазни " -"попуните извештај о грешци" +msgid "typeof detected invalid flags combination `%s'; please file a bug report" +msgstr "„typeof“ открива неисправну комбинацију заставица „%s“; будите љубазни попуните извештај о грешци" #: builtin.c:4394 #, c-format @@ -1051,8 +999,7 @@ msgstr "typeof: непозната врста аргумента „%s“" #: cint_array.c:1268 cint_array.c:1296 #, c-format msgid "cannot add a new file (%.*s) to ARGV in sandbox mode" -msgstr "" -"не могу да додам нову датотеку (%.*s) „ARGV“-у у режиму изолованог окружења" +msgstr "не могу да додам нову датотеку (%.*s) „ARGV“-у у режиму изолованог окружења" #: command.y:228 #, c-format @@ -1081,9 +1028,7 @@ msgstr "save: „%s“: наредба није дозвољена" #: command.y:342 msgid "cannot use command `commands' for breakpoint/watchpoint commands" -msgstr "" -"не могу користити наредбу „commands“ за наредбе тачке прекида/тачке " -"посматрања" +msgstr "не могу користити наредбу „commands“ за наредбе тачке прекида/тачке посматрања" #: command.y:344 msgid "no breakpoint/watchpoint has been set yet" @@ -1157,36 +1102,24 @@ msgid "non-zero integer value" msgstr "не-нулта вредност целог броја" #: command.y:820 -msgid "" -"backtrace [N] - print trace of all or N innermost (outermost if N < 0) frames" -msgstr "" -"backtrace [N] – исписује траг свих или N најунутрашњијих (најспољашњијих ако " -"је N < 0) оквира" +msgid "backtrace [N] - print trace of all or N innermost (outermost if N < 0) frames" +msgstr "backtrace [N] – исписује траг свих или N најунутрашњијих (најспољашњијих ако је N < 0) оквира" #: command.y:822 -msgid "" -"break [[filename:]N|function] - set breakpoint at the specified location" -msgstr "" -"break [[датотека:]N|функција] – поставља тачку прекида на наведено место" +msgid "break [[filename:]N|function] - set breakpoint at the specified location" +msgstr "break [[датотека:]N|функција] – поставља тачку прекида на наведено место" #: command.y:824 msgid "clear [[filename:]N|function] - delete breakpoints previously set" -msgstr "" -"clear [[датотека:]N|функција] – брише претходно постављене тачке прекида" +msgstr "clear [[датотека:]N|функција] – брише претходно постављене тачке прекида" #: command.y:826 -msgid "" -"commands [num] - starts a list of commands to be executed at a " -"breakpoint(watchpoint) hit" -msgstr "" -"commands [број] – започиње списак наредби које ће бити извршене при поготку " -"тачке прекида (тачке посматрања)" +msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit" +msgstr "commands [број] – започиње списак наредби које ће бити извршене при поготку тачке прекида (тачке посматрања)" #: command.y:828 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition" -msgstr "" -"condition num [израз] – поставља или брише услов тачке прекида или тачке " -"посматрања" +msgstr "condition num [израз] – поставља или брише услов тачке прекида или тачке посматрања" #: command.y:830 msgid "continue [COUNT] - continue program being debugged" @@ -1202,8 +1135,7 @@ msgstr "disable [тачке прекида] [опсег] – онемогућу #: command.y:836 msgid "display [var] - print value of variable each time the program stops" -msgstr "" -"display [пром] – исписује вредност променљиве при сваком заустављању програма" +msgstr "display [пром] – исписује вредност променљиве при сваком заустављању програма" #: command.y:838 msgid "down [N] - move N frames down the stack" @@ -1215,9 +1147,7 @@ msgstr "dump [датотека] – избацује инструкције у #: command.y:842 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints" -msgstr "" -"enable [једном|брише] [тачке прекида] [опсег] – омогућује неведене тачке " -"прекида" +msgstr "enable [једном|брише] [тачке прекида] [опсег] – омогућује неведене тачке прекида" #: command.y:844 msgid "end - end a list of commands or awk statements" @@ -1245,16 +1175,11 @@ msgstr "help [наредба] – исписује списак наредби #: command.y:856 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT" -msgstr "" -"ignore N БРОЈ – поставља укупност занемаривања броја тачке прекида N на БРОЈ" +msgstr "ignore N БРОЈ – поставља укупност занемаривања броја тачке прекида N на БРОЈ" #: command.y:858 -msgid "" -"info topic - source|sources|variables|functions|break|frame|args|locals|" -"display|watch" -msgstr "" -"info topic – извор|извори|променљиве|функције|прекид|оквир|аргументи|места|" -"приказ|посматрај" +msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch" +msgstr "info topic – извор|извори|променљиве|функције|прекид|оквир|аргументи|места|приказ|посматрај" #: command.y:860 msgid "list [-|+|[filename:]lineno|function|range] - list specified line(s)" @@ -1262,15 +1187,11 @@ msgstr "list [-|+|[датотека:]бр.реда|функција|опсег] #: command.y:862 msgid "next [COUNT] - step program, proceeding through subroutine calls" -msgstr "" -"next [УКУПНО] – прави корак програма, настављајући кроз позиве подрутине" +msgstr "next [УКУПНО] – прави корак програма, настављајући кроз позиве подрутине" #: command.y:864 -msgid "" -"nexti [COUNT] - step one instruction, but proceed through subroutine calls" -msgstr "" -"nexti [УКУПНО] – прави корак једне инструкције, али наставља кроз позиве " -"подрутине" +msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls" +msgstr "nexti [УКУПНО] – прави корак једне инструкције, али наставља кроз позиве подрутине" #: command.y:866 msgid "option [name[=value]] - set or display debugger option(s)" @@ -1290,8 +1211,7 @@ msgstr "quit – напушта прочишћавача" #: command.y:874 msgid "return [value] - make selected stack frame return to its caller" -msgstr "" -"return [вредност] – чини да се изабрани оквир спремника врати свом позивару" +msgstr "return [вредност] – чини да се изабрани оквир спремника врати свом позивару" #: command.y:876 msgid "run - start or restart executing program" @@ -1307,9 +1227,7 @@ msgstr "set var = вредност – додељује вредност про #: command.y:884 msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint" -msgstr "" -"silent – обуставља обичну поруку када је заустављен на тачки прекида/тачки " -"посматрања" +msgstr "silent – обуставља обичну поруку када је заустављен на тачки прекида/тачки посматрања" #: command.y:886 msgid "source file - execute commands from file" @@ -1317,9 +1235,7 @@ msgstr "source датотека – извршава наредбе из дат #: command.y:888 msgid "step [COUNT] - step program until it reaches a different source line" -msgstr "" -"step [УКУПНО] – прави корак програма све док не достигне другачији изворни " -"ред" +msgstr "step [УКУПНО] – прави корак програма све док не достигне другачији изворни ред" #: command.y:890 msgid "stepi [COUNT] - step one instruction exactly" @@ -1338,12 +1254,8 @@ msgid "undisplay [N] - remove variable(s) from automatic display list" msgstr "undisplay [N] – уклања променљиве са самосталног списак приказа" #: command.y:898 -msgid "" -"until [[filename:]N|function] - execute until program reaches a different " -"line or line N within current frame" -msgstr "" -"until [[датотека:]N|функција] – извршава све док програм не достигне " -"другачији ред или ред N унутар текућег оквира" +msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame" +msgstr "until [[датотека:]N|функција] – извршава све док програм не достигне другачији ред или ред N унутар текућег оквира" #: command.y:900 msgid "unwatch [N] - remove variable(s) from watch list" @@ -1358,12 +1270,8 @@ msgid "watch var - set a watchpoint for a variable" msgstr "watch пром – поставља тачку посматрања за променљиву" #: command.y:906 -msgid "" -"where [N] - (same as backtrace) print trace of all or N innermost (outermost " -"if N < 0) frames" -msgstr "" -"where [N] – (isto kao „backtrace“) исписује траг свих или N најунутрашњијих " -"(најспољашњијих ако је N < 0) оквира" +msgid "where [N] - (same as backtrace) print trace of all or N innermost (outermost if N < 0) frames" +msgstr "where [N] – (isto kao „backtrace“) исписује траг свих или N најунутрашњијих (најспољашњијих ако је N < 0) оквира" #: command.y:1017 debug.c:423 gawkapi.c:260 msg.c:142 #, c-format @@ -1421,8 +1329,7 @@ msgstr "поставља или приказује упит прочишћава #: debug.c:265 msgid "(un)set or show saving of command history (value=on|off)" -msgstr "" -"(поништава)поставља или приказује чување историјата наредбе (value=укљ|искљ)" +msgstr "(поништава)поставља или приказује чување историјата наредбе (value=укљ|искљ)" #: debug.c:267 msgid "(un)set or show saving of options (value=on|off)" @@ -1683,9 +1590,7 @@ msgstr "неисправан број оквира" #: debug.c:2231 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "" -"Напомена: тачка прекида %d (омогућена, занемарујем следећа %ld поготка), " -"такође постављено на „%s:%d“" +msgstr "Напомена: тачка прекида %d (омогућена, занемарујем следећа %ld поготка), такође постављено на „%s:%d“" #: debug.c:2238 #, c-format @@ -1695,9 +1600,7 @@ msgstr "Напомена: тачка прекида %d (омогућена), т #: debug.c:2245 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "" -"Напомена: тачка прекида %d (онемогућена, занемарујем следећа %ld поготка), " -"такође постављено на „%s:%d“" +msgstr "Напомена: тачка прекида %d (онемогућена, занемарујем следећа %ld поготка), такође постављено на „%s:%d“" #: debug.c:2252 #, c-format @@ -1789,7 +1692,7 @@ msgstr "Могу да прочистим само програме достав #: debug.c:2836 #, c-format msgid "Restarting ...\n" -msgstr "" +msgstr "Поново покрећем ...\n" #: debug.c:2941 #, c-format @@ -2075,15 +1978,12 @@ msgstr "make_builtin: недостаје назив функције" #: ext.c:100 ext.c:111 #, c-format msgid "make_builtin: cannot use gawk built-in `%s' as function name" -msgstr "" -"make_builtin: не могу користити „gawk“ уграђеност „%s“ као назив функције" +msgstr "make_builtin: не могу користити „gawk“ уграђеност „%s“ као назив функције" #: ext.c:109 #, c-format msgid "make_builtin: cannot use gawk built-in `%s' as namespace name" -msgstr "" -"make_builtin: не могу користити „gawk“ уграђеност „%s“ као назив називног " -"простора" +msgstr "make_builtin: не могу користити „gawk“ уграђеност „%s“ као назив називног простора" #: ext.c:126 #, c-format @@ -2238,15 +2138,12 @@ msgstr "inplace::begin: очекује 2 аргумента али је позв #: extension/inplace.c:137 msgid "inplace::begin: cannot retrieve 1st argument as a string filename" -msgstr "" -"inplace::begin: не могу да довучем 1. аргумент као назив датотеке ниске" +msgstr "inplace::begin: не могу да довучем 1. аргумент као назив датотеке ниске" #: extension/inplace.c:145 #, c-format msgid "inplace::begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "" -"inplace::begin: онемогућујем уређивање на месту за неисправан НАЗИВ_ДАТОТЕКЕ " -"„%s“" +msgstr "inplace::begin: онемогућујем уређивање на месту за неисправан НАЗИВ_ДАТОТЕКЕ „%s“" #: extension/inplace.c:152 #, c-format @@ -2343,20 +2240,17 @@ msgid "revoutput: could not initialize REVOUT variable" msgstr "revoutput: не могу да започнем променљиву „REVOUT“" #: extension/rwarray.c:146 extension/rwarray.c:551 -#, fuzzy, c-format -#| msgid "stat: first argument is not a string" +#, c-format msgid "%s: first argument is not a string" -msgstr "stat: први аргумент није ниска" +msgstr "%s: први аргумент није ниска" #: extension/rwarray.c:190 -#, fuzzy -#| msgid "do_writea: second argument is not an array" msgid "writea: second argument is not an array" -msgstr "do_writea: други аргумент није низ" +msgstr "writea: други аргумент није низ" #: extension/rwarray.c:207 msgid "writeall: unable to find SYMTAB array" -msgstr "" +msgstr "writeall: не могу да нађем „SYMTAB“ низ" #: extension/rwarray.c:227 msgid "write_array: could not flatten array" @@ -2372,39 +2266,31 @@ msgid "array value has unknown type %d" msgstr "вредност низа има непознату врсту %d" #: extension/rwarray.c:399 -msgid "" -"rwarray extension: received GMP/MPFR value but compiled without GMP/MPFR " -"support." -msgstr "" +msgid "rwarray extension: received GMP/MPFR value but compiled without GMP/MPFR support." +msgstr "„rwarray“ проширење: примих „GMP/MPFR“ вредност али преведену без „GMP/MPFR“ подршке." #: extension/rwarray.c:438 -#, fuzzy, c-format -#| msgid "array value has unknown type %d" +#, c-format msgid "cannot free number with unknown type %d" -msgstr "вредност низа има непознату врсту %d" +msgstr "не могу да ослободим број са непознатом врстом %d" #: extension/rwarray.c:443 -#, fuzzy, c-format -#| msgid "array value has unknown type %d" +#, c-format msgid "cannot free value with unhandled type %d" -msgstr "вредност низа има непознату врсту %d" +msgstr "не могу да ослободим вредност са непознатом врстом %d" #: extension/rwarray.c:465 #, c-format msgid "readall: unable to set %s" -msgstr "" +msgstr "readall: не могу да поставим „%s“" #: extension/rwarray.c:528 -#, fuzzy -#| msgid "do_reada: clear_array failed" msgid "reada: clear_array failed" -msgstr "do_reada: „clear_array“ није успело" +msgstr "reada: „clear_array“ није успело" #: extension/rwarray.c:614 -#, fuzzy -#| msgid "do_reada: second argument is not an array" msgid "reada: second argument is not an array" -msgstr "do_reada: други аргумент није низ" +msgstr "reada: други аргумент није низ" #: extension/rwarray.c:651 msgid "read_array: set_array_element failed" @@ -2416,16 +2302,12 @@ msgid "treating recovered value with unknown type code %d as a string" msgstr "сматрам опорављену вредност са непознатим кодом врсте %d као ниску" #: extension/rwarray.c:830 -msgid "" -"rwarray extension: GMP/MPFR value in file but compiled without GMP/MPFR " -"support." -msgstr "" +msgid "rwarray extension: GMP/MPFR value in file but compiled without GMP/MPFR support." +msgstr "„rwarray“ проширење: „GMP/MPFR“ вредност у датотеци али преведена без „GMP/MPFR“ подршке." #: extension/time.c:107 -msgid "" -"The time extension is obsolete. Use the timex extension from gawkextlib " -"instead." -msgstr "" +msgid "The time extension is obsolete. Use the timex extension from gawkextlib instead." +msgstr "Временско проширење је застарело. С тога користите „timex“ проширење из „gawkextlib“." #: extension/time.c:153 msgid "gettimeofday: not supported on this platform" @@ -2510,13 +2392,11 @@ msgstr "patsplit: не могу користити исти низ за друг #: field.c:1118 msgid "patsplit: cannot use a subarray of second arg for fourth arg" -msgstr "" -"patsplit: не могу користити подниз другог аргумента за четврти аргумент" +msgstr "patsplit: не могу користити подниз другог аргумента за четврти аргумент" #: field.c:1121 msgid "patsplit: cannot use a subarray of fourth arg for second arg" -msgstr "" -"patsplit: не могу користити подниз четвртог аргумента за други аргумент" +msgstr "patsplit: не могу користити подниз четвртог аргумента за други аргумент" #: field.c:1171 msgid "`FIELDWIDTHS' is a gawk extension" @@ -2566,12 +2446,8 @@ msgstr "add_ext_func: примих НИШТАВНИ параметар прос #: gawkapi.c:524 #, c-format -msgid "" -"node_to_awk_value: detected invalid numeric flags combination `%s'; please " -"file a bug report" -msgstr "" -"node_to_awk_value: откривена је неисправна комбинација бројевних заставица " -"„%s“; будите љубазни попуните извештај о грешци" +msgid "node_to_awk_value: detected invalid numeric flags combination `%s'; please file a bug report" +msgstr "node_to_awk_value: откривена је неисправна комбинација бројевних заставица „%s“; будите љубазни попуните извештај о грешци" #: gawkapi.c:562 msgid "node_to_awk_value: received null node" @@ -2583,12 +2459,8 @@ msgstr "node_to_awk_value: примих ништавну вредност" #: gawkapi.c:633 gawkapi.c:670 gawkapi.c:700 gawkapi.c:737 #, c-format -msgid "" -"node_to_awk_value detected invalid flags combination `%s'; please file a bug " -"report" -msgstr "" -"„node_to_awk_value“ је открила неисправну комбинацију заставица „%s“; будите " -"љубазни попуните извештај о грешци" +msgid "node_to_awk_value detected invalid flags combination `%s'; please file a bug report" +msgstr "„node_to_awk_value“ је открила неисправну комбинацију заставица „%s“; будите љубазни попуните извештај о грешци" #: gawkapi.c:1118 msgid "remove_element: received null array" @@ -2707,10 +2579,8 @@ msgstr "израз за „%s“ преусмерење има ништавну #: io.c:836 #, c-format -msgid "" -"filename `%.*s' for `%s' redirection may be result of logical expression" -msgstr "" -"назив датотеке „%.*s“ за „%s“ преусмерење може бити резултат логичког израза" +msgid "filename `%.*s' for `%s' redirection may be result of logical expression" +msgstr "назив датотеке „%.*s“ за „%s“ преусмерење може бити резултат логичког израза" #: io.c:933 io.c:958 #, c-format @@ -2729,11 +2599,8 @@ msgstr "не могу да отворим спојку „%s“ за улаз: % #: io.c:987 #, c-format -msgid "" -"get_file socket creation not supported on this platform for `%s' with fd %d" -msgstr "" -"стварање прикључнице „get_file“ није подржано на овој платформи за „%s“ са " -"описником датотеке %d" +msgid "get_file socket creation not supported on this platform for `%s' with fd %d" +msgstr "стварање прикључнице „get_file“ није подржано на овој платформи за „%s“ са описником датотеке %d" #: io.c:998 #, c-format @@ -2751,11 +2618,8 @@ msgid "cannot redirect to `%s': %s" msgstr "не могу да преусмерим ка „%s“: %s" #: io.c:1190 -msgid "" -"reached system limit for open files: starting to multiplex file descriptors" -msgstr "" -"достигнуто је ограничење система за отворене датотеке: почињем са " -"мултиплексирањем описника датотека" +msgid "reached system limit for open files: starting to multiplex file descriptors" +msgstr "достигнуто је ограничење система за отворене датотеке: почињем са мултиплексирањем описника датотека" #: io.c:1206 #, c-format @@ -2782,8 +2646,7 @@ msgstr "затварање преусмерења које никада није #: io.c:1365 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" -msgstr "" -"close: преусмерење „%s“ није отворено са |&, други аргумент је занемарен" +msgstr "close: преусмерење „%s“ није отворено са |&, други аргумент је занемарен" #: io.c:1382 #, c-format @@ -2897,9 +2760,7 @@ msgstr "затварање стандардног излаза у породу #: io.c:2059 io.c:2111 #, c-format msgid "moving slave pty to stdout in child failed (dup: %s)" -msgstr "" -"премештање подређеног „pty“ на стандардни излаз у породу није успело (dup: " -"%s)" +msgstr "премештање подређеног „pty“ на стандардни излаз у породу није успело (dup: %s)" #: io.c:2061 io.c:2113 io.c:2454 #, c-format @@ -2909,8 +2770,7 @@ msgstr "затварање стандардног улаза у породу н #: io.c:2064 io.c:2116 #, c-format msgid "moving slave pty to stdin in child failed (dup: %s)" -msgstr "" -"премештање подређеног „pty“ на стандардни улаз у породу није успело (dup: %s)" +msgstr "премештање подређеног „pty“ на стандардни улаз у породу није успело (dup: %s)" #: io.c:2066 io.c:2118 io.c:2140 #, c-format @@ -2969,9 +2829,7 @@ msgstr "register_input_parser: примих НИШТАВНИ показивач" #: io.c:3186 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" -msgstr "" -"обрађивач улаза „%s“ се сукобљава са претходно инсталираним обрађивачем " -"улаза „%s“" +msgstr "обрађивач улаза „%s“ се сукобљава са претходно инсталираним обрађивачем улаза „%s“" #: io.c:3193 #, c-format @@ -2984,11 +2842,8 @@ msgstr "register_output_wrapper: примих НИШТАВНИ показива #: io.c:3241 #, c-format -msgid "" -"output wrapper `%s' conflicts with previously installed output wrapper `%s'" -msgstr "" -"умотавач излаза „%s“ се сукобљава са претходно инсталираним употавачем " -"излаза „%s“" +msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" +msgstr "умотавач излаза „%s“ се сукобљава са претходно инсталираним употавачем излаза „%s“" #: io.c:3248 #, c-format @@ -3001,12 +2856,8 @@ msgstr "register_output_processor: примих НИШТАВНИ показив #: io.c:3298 #, c-format -msgid "" -"two-way processor `%s' conflicts with previously installed two-way processor " -"`%s'" -msgstr "" -"двосмерни процесор „%s“ се сукобљава претходно инсталираним двосмерним " -"процесором „%s“" +msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" +msgstr "двосмерни процесор „%s“ се сукобљава претходно инсталираним двосмерним процесором „%s“" #: io.c:3307 #, c-format @@ -3032,21 +2883,16 @@ msgstr "„IPv6“ комуникација није подржана" #: main.c:240 #, c-format -msgid "" -"%s: fatal: persistent memory allocator failed to initialize: return value " -"%d, pma.c line: %d.\n" -msgstr "" +msgid "%s: fatal: persistent memory allocator failed to initialize: return value %d, pma.c line: %d.\n" +msgstr "%s: кобно: додељивач трајне меморије није успео да се покрене: резултна вредност %d, „pma.c“ ред: %d.\n" #: main.c:248 -#, fuzzy -#| msgid "api_get_mpfr: MPFR not supported" msgid "persistent memory is not supported" -msgstr "api_get_mpfr: „MPFR“ није подржано" +msgstr "трајна меморија није подржана" #: main.c:360 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" -msgstr "" -"променљива окружења „POSIXLY_CORRECT“ је постављена: укључујем „--posix“" +msgstr "променљива окружења „POSIXLY_CORRECT“ је постављена: укључујем „--posix“" #: main.c:367 msgid "`--posix' overrides `--traditional'" @@ -3067,7 +2913,7 @@ msgstr "покретање „%s setuid root“ може бити безбедн #: main.c:396 msgid "The -r/--re-interval options no longer have any effect" -msgstr "" +msgstr "Опције „-r/--re-interval“ немају више никакво дејство" #: main.c:450 #, c-format @@ -3091,15 +2937,12 @@ msgstr "уопште нема текста програма!" #: main.c:611 #, c-format msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n" -msgstr "" -"Употреба: %s [опције „POSIX“ или Гну стила] -f датотека_програма [--] " -"датотека ...\n" +msgstr "Употреба: %s [опције „POSIX“ или Гну стила] -f датотека_програма [--] датотека ...\n" #: main.c:613 #, c-format msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n" -msgstr "" -"Употреба: %s [опције „POSIX“ или Гну стила] [--] %cпрограм%c датотека ...\n" +msgstr "Употреба: %s [опције „POSIX“ или Гну стила] [--] %cпрограм%c датотека ...\n" #: main.c:618 msgid "POSIX options:\t\tGNU long options: (standard)\n" @@ -3239,16 +3082,6 @@ msgstr "\t-Z језик\t\t--locale=језик\n" #. TRANSLATORS: --help output (end) #. no-wrap #: main.c:665 -#, fuzzy -#| msgid "" -#| "\n" -#| "To report bugs, see node `Bugs' in `gawk.info'\n" -#| "which is section `Reporting Problems and Bugs' in the\n" -#| "printed version. This same information may be found at\n" -#| "https://www.gnu.org/software/gawk/manual/html_node/Bugs.html.\n" -#| "PLEASE do NOT try to report bugs by posting in comp.lang.awk,\n" -#| "or by using a web forum such as Stack Overflow.\n" -#| "\n" msgid "" "\n" "To report bugs, use the `gawkbug' program.\n" @@ -3261,7 +3094,8 @@ msgid "" "\n" msgstr "" "\n" -"Да известите о грешкама, видите „Bugs“ у „gawk.info“\n" +"Да известите о грешкама, користите програм „gawkbug“.\n" +"За потпуним упутама, видите чвор „Bugs“ у „gawk.info“\n" "што је у одељку „Reporting Problems and Bugs“ у штампаном\n" "издању. Те исте информације можете наћи на адреси\n" "„https://www.gnu.org/software/gawk/manual/html_node/Bugs.html“.\n" @@ -3405,13 +3239,11 @@ msgstr "„-M“ је занемарено: „MPFR/GMP“ подршка ниј #: main.c:1779 #, c-format msgid "Use `GAWK_PERSIST_FILE=%s gawk ...' instead of --persist." -msgstr "" +msgstr "Користите „GAWK_PERSIST_FILE=%s gawk ...“ уместо „--persist“." #: main.c:1781 -#, fuzzy -#| msgid "IPv6 communication is not supported" msgid "Persistent memory is not supported." -msgstr "„IPv6“ комуникација није подржана" +msgstr "Трајна меморија није подржана." #: main.c:1790 #, c-format @@ -3537,12 +3369,8 @@ msgstr "нема хексадецималних цифара у „\\x“ низ #: node.c:639 #, c-format -msgid "" -"hex escape \\x%.*s of %d characters probably not interpreted the way you " -"expect" -msgstr "" -"хексадецимална промена реда „\\x%.*s“ %d знака вероватно није протумачена " -"онако како сте очекивали" +msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" +msgstr "хексадецимална промена реда „\\x%.*s“ %d знака вероватно није протумачена онако како сте очекивали" #: node.c:654 #, c-format @@ -3550,30 +3378,22 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "низ промене реда „\\%c“ је узет као обичан „%c“" #: node.c:790 -msgid "" -"Invalid multibyte data detected. There may be a mismatch between your data " -"and your locale" -msgstr "" -"Откривени су неисправни вишебајтни подаци. Може бити неподударања између " -"ваших података и вашег језика" +msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale" +msgstr "Откривени су неисправни вишебајтни подаци. Може бити неподударања између ваших података и вашег језика" #: posix/gawkmisc.c:174 #, c-format msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)" -msgstr "" -"%s %s „%s“: не могу да добавим заставице описника датотеке: (fcntl F_GETFD: " -"%s)" +msgstr "%s %s „%s“: не могу да добавим заставице описника датотеке: (fcntl F_GETFD: %s)" #: posix/gawkmisc.c:186 #, c-format msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" -msgstr "" -"%s %s „%s“: не могу да поставим затварање након извршења: (fcntl F_GETFD: %s)" +msgstr "%s %s „%s“: не могу да поставим затварање након извршења: (fcntl F_GETFD: %s)" #: profile.c:73 msgid "Program indentation level too deep. Consider refactoring your code" -msgstr "" -"Ниво увлачења програма је предубок. Размислите о рефакторисању вашег кода" +msgstr "Ниво увлачења програма је предубок. Размислите о рефакторисању вашег кода" #: profile.c:112 msgid "sending profile to standard error" @@ -3646,12 +3466,8 @@ msgid "redir2str: unknown redirection type %d" msgstr "redir2str: непозната врста преусмерења %d" #: re.c:58 re.c:163 -msgid "" -"behavior of matching a regexp containing NUL characters is not defined by " -"POSIX" -msgstr "" -"понашање поклапања регуларног израза који садржи НИШТАВНЕ знаке није " -"дефинисано „POSIX“-ом" +msgid "behavior of matching a regexp containing NUL characters is not defined by POSIX" +msgstr "понашање поклапања регуларног израза који садржи НИШТАВНЕ знаке није дефинисано „POSIX“-ом" #: re.c:127 msgid "invalid NUL byte in dynamic regexp" @@ -3665,9 +3481,7 @@ msgstr "низ промене реда регуларног израза „\\%c #: re.c:193 #, c-format msgid "regexp escape sequence `\\%c' is not a known regexp operator" -msgstr "" -"низ промене реда регуларног израза „\\%c“ није познат оператер регуларног " -"израза" +msgstr "низ промене реда регуларног израза „\\%c“ није познат оператер регуларног израза" #: re.c:669 #, c-format @@ -3691,26 +3505,20 @@ msgid "unfinished \\ escape" msgstr "недовршена \\ промене реда" #: support/dfa.c:1319 -#, fuzzy -#| msgid "invalid subscript expression" msgid "? at start of expression" -msgstr "неисправан израз садржане скрипте" +msgstr "? на почетку израза" #: support/dfa.c:1331 -#, fuzzy -#| msgid "invalid subscript expression" msgid "* at start of expression" -msgstr "неисправан израз садржане скрипте" +msgstr "* на почетку израза" #: support/dfa.c:1345 -#, fuzzy -#| msgid "invalid subscript expression" msgid "+ at start of expression" -msgstr "неисправан израз садржане скрипте" +msgstr "+ на почетку израза" #: support/dfa.c:1400 msgid "{...} at start of expression" -msgstr "" +msgstr "{...} на почетку израза" #: support/dfa.c:1403 msgid "invalid content of \\{\\}" @@ -3722,20 +3530,20 @@ msgstr "регуларни израз је превелик" #: support/dfa.c:1555 msgid "stray \\ before unprintable character" -msgstr "" +msgstr "залутала \\ пре неисписивог знака" #: support/dfa.c:1557 msgid "stray \\ before white space" -msgstr "" +msgstr "залутала \\ пре празнине" #: support/dfa.c:1561 #, c-format msgid "stray \\ before %lc" -msgstr "" +msgstr "залутала \\ пре „%lc“" #: support/dfa.c:1562 msgid "stray \\" -msgstr "" +msgstr "залутала \\" #: support/dfa.c:1917 msgid "unbalanced (" commit 53d97efad03453b0fff5a941170db6b7abdb2083 Author: Arnold D. Robbins Date: Fri Sep 30 11:23:32 2022 +0300 Disable pma on M1 mac. At least for now. diff --git a/configure b/configure index cf805142..d81d3b19 100755 --- a/configure +++ b/configure @@ -12722,8 +12722,18 @@ fi ;; *darwin*) - LDFLAGS="${LDFLAGS} -Xlinker -no_pie" - export LDFLAGS + # 30 September 2022: PMA works on Intel but not + # on M1, disable it, until it gets fixed + case $host in + x86_64-*) + LDFLAGS="${LDFLAGS} -Xlinker -no_pie" + export LDFLAGS + ;; + *) + # aarch64-* + use_persistent_malloc=no + ;; + esac ;; *cygwin* | *CYGWIN* | *solaris2.11* | freebsd13.* | openbsd7.* ) true # nothing do, exes on these systems are not PIE diff --git a/m4/ChangeLog b/m4/ChangeLog index 705d8375..6a7f944b 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,8 @@ +2022-09-30 Arnold D. Robbins + + * pma.m4: Disable pma on M1 mac. It doesn't work there. We hope + that this is just temporary. + 2022-09-21 Arnold D. Robbins * pma.m4: Allow FreeBSD 13 and OpenBSD 7. diff --git a/m4/pma.m4 b/m4/pma.m4 index 0a8afef9..080713e1 100644 --- a/m4/pma.m4 +++ b/m4/pma.m4 @@ -24,8 +24,18 @@ then export LDFLAGS]) ;; *darwin*) - LDFLAGS="${LDFLAGS} -Xlinker -no_pie" - export LDFLAGS + # 30 September 2022: PMA works on Intel but not + # on M1, disable it, until it gets fixed + case $host in + x86_64-*) + LDFLAGS="${LDFLAGS} -Xlinker -no_pie" + export LDFLAGS + ;; + *) + # aarch64-* + use_persistent_malloc=no + ;; + esac ;; *cygwin* | *CYGWIN* | *solaris2.11* | freebsd13.* | openbsd7.* ) true # nothing do, exes on these systems are not PIE commit bc8957f4f5e1aafd00c82b52f4c82997b7cfc183 Author: Arnold D. Robbins Date: Fri Sep 30 12:59:47 2022 +0300 Fix a memory leak. diff --git a/ChangeLog b/ChangeLog index bfa22e2b..519facfb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2022-09-30 Arnold D. Robbins + + * interpret.h (r_interpret): For the `push' opcodes with + Node_elem_new, deref `m' before assigning m = dupnode(Nnull_string). + Thanks to Andrew Schorr and valgrind for the report. + 2022-09-23 Arnold D. Robbins * interpret.h (r_interpret): For the `push' opcodes with diff --git a/interpret.h b/interpret.h index fde02d2d..f703080d 100644 --- a/interpret.h +++ b/interpret.h @@ -217,6 +217,7 @@ uninitialized_scalar: m->type = Node_var; m->var_value = dupnode(Nnull_string); } + if (do_lint) lintwarn(isparam ? _("reference to uninitialized argument `%s'") : @@ -235,6 +236,7 @@ uninitialized_scalar: m->type = Node_var; m->var_value = dupnode(Nnull_string); } + if (do_lint) lintwarn(isparam ? _("reference to uninitialized argument `%s'") : @@ -242,6 +244,7 @@ uninitialized_scalar: save_symbol->vname); // set up local param by value if (op != Op_push_arg_untyped) { + DEREF(m); m = dupnode(Nnull_string); } commit 141a9e05f552d30b45e0c66a21e79ca9e7de54e9 Author: Arnold D. Robbins Date: Tue Oct 4 12:18:24 2022 +0300 Small doc fixes. diff --git a/doc/ChangeLog b/doc/ChangeLog index dfbd541e..df03bd17 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2022-10-04 Arnold D. Robbins + + * gawktexi.in: Make usage consistent for VAX, macos, z/OS and a few + other small cleanups. + 2022-09-25 Arnold D. Robbins * gawktexi.in (Persistent Memory): Document REALLY_USE_PERSIST_MALLOC diff --git a/doc/gawk.texi b/doc/gawk.texi index 0789b54b..cc6e7311 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1435,7 +1435,7 @@ implementation of @command{awk} called @command{gawk} (which stands for ``GNU @command{awk}''). @command{gawk} runs on a broad range of Unix systems, ranging from Intel-architecture PC-based computers up through large-scale systems. -@command{gawk} has also been ported to Mac OS X, +@command{gawk} has also been ported to macOS, z/OS, Microsoft Windows (all versions), and OpenVMS.@footnote{Some other, obsolete systems to which @command{gawk} @@ -16493,13 +16493,13 @@ This element gives a string indicating the platform for which Microsoft Windows, using MinGW. @item "os390" -OS/390. +OS/390 (also known as z/OS). @item "posix" -GNU/Linux, Cygwin, Mac OS X, and legacy Unix systems. +GNU/Linux, Cygwin, macOS, and legacy Unix systems. @item "vms" -OpenVMS or Vax/VMS. +OpenVMS or VAX/VMS. @end table @item PROCINFO["pgrpid"] @@ -31069,7 +31069,7 @@ If you see the @samp{PMA} with a version indicator, then it's supported. @cindex @env{REALLY_USE_PERSIST_MALLOC} environment variable @cindex environment variables @subentry @env{REALLY_USE_PERSIST_MALLOC} As of this writing, persistent memory has only been tested on GNU/Linux, -Cygwin, Solaris 2.11, Mac OS, FreeBSD 13.1 and OpenBSD 7.1. +Cygwin, Solaris 2.11, macOS, FreeBSD 13.1 and OpenBSD 7.1. On all others, persistent memory is disabled by default. You can force it to be enabled by exporting the shell variable @env{REALLY_USE_PERSIST_MALLOC} with a nonempty value before @@ -42875,7 +42875,7 @@ Files needed for building @command{gawk} under MS-Windows (@pxref{PC Installation} for details). @item vms/* -Files needed for building @command{gawk} under Vax/VMS and OpenVMS +Files needed for building @command{gawk} under VAX/VMS and OpenVMS (@pxref{VMS Installation} for details). @item test/* @@ -43473,7 +43473,7 @@ Under MSYS2, compilation using the standard @samp{./configure && make} recipe works ``out of the box.'' @node VMS Installation -@appendixsubsec Compiling and Installing @command{gawk} on Vax/VMS and OpenVMS +@appendixsubsec Compiling and Installing @command{gawk} on VAX/VMS and OpenVMS @c based on material from Pat Rankin @c now rankin@pactechdata.com @@ -44588,7 +44588,7 @@ the file. @command{gawk} may be built on non-POSIX systems as well. The currently supported systems are MS-Windows using MSYS, MSYS2, MinGW, and Cygwin, -and both Vax/VMS and OpenVMS. +and both VAX/VMS and OpenVMS. Instructions for each system are included in this @value{APPENDIX}. @item @@ -45061,11 +45061,11 @@ out a version and try it out? The @command{gawk} maintainer wants it to be possible for any interested @command{awk} user in the world to just clone the repository, check out the branch of interest and -build it. Without their having to have the correct version(s) of the +build it, without their having to have the correct version(s) of the autotools.@footnote{There is one GNU program that is (in our opinion) severely difficult to bootstrap from the Git repository. For example, on the author's old (but still working) PowerPC Macintosh with -Mac OS X 10.5, it was necessary to bootstrap a ton of software, starting +macOS 10.5, it was necessary to bootstrap a ton of software, starting with Git itself, in order to try to work with the latest code. It's not pleasant, and especially on older systems, it's a big waste of time. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 854b6e0c..a13fc271 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1430,7 +1430,7 @@ implementation of @command{awk} called @command{gawk} (which stands for ``GNU @command{awk}''). @command{gawk} runs on a broad range of Unix systems, ranging from Intel-architecture PC-based computers up through large-scale systems. -@command{gawk} has also been ported to Mac OS X, +@command{gawk} has also been ported to macOS, z/OS, Microsoft Windows (all versions), and OpenVMS.@footnote{Some other, obsolete systems to which @command{gawk} @@ -15680,13 +15680,13 @@ This element gives a string indicating the platform for which Microsoft Windows, using MinGW. @item "os390" -OS/390. +OS/390 (also known as z/OS). @item "posix" -GNU/Linux, Cygwin, Mac OS X, and legacy Unix systems. +GNU/Linux, Cygwin, macOS, and legacy Unix systems. @item "vms" -OpenVMS or Vax/VMS. +OpenVMS or VAX/VMS. @end table @item PROCINFO["pgrpid"] @@ -29951,7 +29951,7 @@ If you see the @samp{PMA} with a version indicator, then it's supported. @cindex @env{REALLY_USE_PERSIST_MALLOC} environment variable @cindex environment variables @subentry @env{REALLY_USE_PERSIST_MALLOC} As of this writing, persistent memory has only been tested on GNU/Linux, -Cygwin, Solaris 2.11, Mac OS, FreeBSD 13.1 and OpenBSD 7.1. +Cygwin, Solaris 2.11, macOS, FreeBSD 13.1 and OpenBSD 7.1. On all others, persistent memory is disabled by default. You can force it to be enabled by exporting the shell variable @env{REALLY_USE_PERSIST_MALLOC} with a nonempty value before @@ -41718,7 +41718,7 @@ Files needed for building @command{gawk} under MS-Windows (@pxref{PC Installation} for details). @item vms/* -Files needed for building @command{gawk} under Vax/VMS and OpenVMS +Files needed for building @command{gawk} under VAX/VMS and OpenVMS (@pxref{VMS Installation} for details). @item test/* @@ -42316,7 +42316,7 @@ Under MSYS2, compilation using the standard @samp{./configure && make} recipe works ``out of the box.'' @node VMS Installation -@appendixsubsec Compiling and Installing @command{gawk} on Vax/VMS and OpenVMS +@appendixsubsec Compiling and Installing @command{gawk} on VAX/VMS and OpenVMS @c based on material from Pat Rankin @c now rankin@pactechdata.com @@ -43403,7 +43403,7 @@ the file. @command{gawk} may be built on non-POSIX systems as well. The currently supported systems are MS-Windows using MSYS, MSYS2, MinGW, and Cygwin, -and both Vax/VMS and OpenVMS. +and both VAX/VMS and OpenVMS. Instructions for each system are included in this @value{APPENDIX}. @item @@ -43876,11 +43876,11 @@ out a version and try it out? The @command{gawk} maintainer wants it to be possible for any interested @command{awk} user in the world to just clone the repository, check out the branch of interest and -build it. Without their having to have the correct version(s) of the +build it, without their having to have the correct version(s) of the autotools.@footnote{There is one GNU program that is (in our opinion) severely difficult to bootstrap from the Git repository. For example, on the author's old (but still working) PowerPC Macintosh with -Mac OS X 10.5, it was necessary to bootstrap a ton of software, starting +macOS 10.5, it was necessary to bootstrap a ton of software, starting with Git itself, in order to try to work with the latest code. It's not pleasant, and especially on older systems, it's a big waste of time.