summaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/5a/a.y2
-rw-r--r--src/cmd/5a/lex.c5
-rw-r--r--src/cmd/5a/y.tab.c2
-rw-r--r--src/cmd/5c/cgen.c38
-rw-r--r--src/cmd/5c/gc.h5
-rw-r--r--src/cmd/5c/peep.c4
-rw-r--r--src/cmd/5c/reg.c19
-rw-r--r--src/cmd/5c/sgen.c2
-rw-r--r--src/cmd/5c/swt.c11
-rw-r--r--src/cmd/5c/txt.c40
-rw-r--r--src/cmd/5g/cgen.c81
-rw-r--r--src/cmd/5g/galign.c8
-rw-r--r--src/cmd/5g/gg.h12
-rw-r--r--src/cmd/5g/ggen.c25
-rw-r--r--src/cmd/5g/gsubr.c27
-rw-r--r--src/cmd/5g/opt.h20
-rw-r--r--src/cmd/5g/peep.c6
-rw-r--r--src/cmd/5g/reg.c12
-rw-r--r--src/cmd/5l/5.out.h166
-rw-r--r--src/cmd/5l/asm.c75
-rw-r--r--src/cmd/5l/l.h76
-rw-r--r--src/cmd/5l/mkenam45
-rw-r--r--src/cmd/5l/noop.c43
-rw-r--r--src/cmd/5l/obj.c13
-rw-r--r--src/cmd/6a/a.y2
-rw-r--r--src/cmd/6a/lex.c35
-rw-r--r--src/cmd/6a/y.tab.c2
-rw-r--r--src/cmd/6c/cgen.c36
-rw-r--r--src/cmd/6c/gc.h5
-rw-r--r--src/cmd/6c/reg.c14
-rw-r--r--src/cmd/6c/sgen.c9
-rw-r--r--src/cmd/6c/swt.c9
-rw-r--r--src/cmd/6c/txt.c40
-rw-r--r--src/cmd/6g/cgen.c10
-rw-r--r--src/cmd/6g/galign.c8
-rw-r--r--src/cmd/6g/gg.h2
-rw-r--r--src/cmd/6g/ggen.c61
-rw-r--r--src/cmd/6g/gsubr.c29
-rw-r--r--src/cmd/6g/opt.h20
-rw-r--r--src/cmd/6g/reg.c8
-rw-r--r--src/cmd/6l/6.out.h2
-rw-r--r--src/cmd/6l/asm.c17
-rw-r--r--src/cmd/6l/l.h10
-rw-r--r--src/cmd/6l/mkenam45
-rw-r--r--src/cmd/8a/a.y2
-rw-r--r--src/cmd/8a/lex.c35
-rw-r--r--src/cmd/8a/y.tab.c2
-rw-r--r--src/cmd/8c/cgen.c38
-rw-r--r--src/cmd/8c/gc.h5
-rw-r--r--src/cmd/8c/reg.c9
-rw-r--r--src/cmd/8c/sgen.c2
-rw-r--r--src/cmd/8c/swt.c9
-rw-r--r--src/cmd/8c/txt.c40
-rw-r--r--src/cmd/8g/cgen.c88
-rw-r--r--src/cmd/8g/galign.c8
-rw-r--r--src/cmd/8g/gg.h1
-rw-r--r--src/cmd/8g/ggen.c49
-rw-r--r--src/cmd/8g/gsubr.c26
-rw-r--r--src/cmd/8g/opt.h20
-rw-r--r--src/cmd/8g/peep.c4
-rw-r--r--src/cmd/8g/reg.c6
-rw-r--r--src/cmd/8l/8.out.h2
-rw-r--r--src/cmd/8l/asm.c18
-rw-r--r--src/cmd/8l/l.h7
-rw-r--r--src/cmd/8l/mkenam45
-rw-r--r--src/cmd/addr2line/addr2line_test.go5
-rw-r--r--src/cmd/addr2line/main.go166
-rw-r--r--src/cmd/api/goapi.go158
-rw-r--r--src/cmd/api/goapi_test.go24
-rw-r--r--src/cmd/api/run.go9
-rw-r--r--src/cmd/cc/bv.c45
-rw-r--r--src/cmd/cc/cc.h8
-rw-r--r--src/cmd/cc/cc.y1
-rw-r--r--src/cmd/cc/dcl.c25
-rw-r--r--src/cmd/cc/godefs.c67
-rw-r--r--src/cmd/cc/lex.c3
-rw-r--r--src/cmd/cc/pgen.c202
-rw-r--r--src/cmd/cc/y.tab.c1147
-rw-r--r--src/cmd/cc/y.tab.h68
-rw-r--r--src/cmd/cgo/ast.go5
-rw-r--r--src/cmd/cgo/doc.go2
-rw-r--r--src/cmd/cgo/gcc.go187
-rw-r--r--src/cmd/cgo/out.go243
-rw-r--r--src/cmd/dist/a.h4
-rw-r--r--src/cmd/dist/arm.c3
-rw-r--r--src/cmd/dist/buf.c2
-rw-r--r--src/cmd/dist/build.c267
-rw-r--r--src/cmd/dist/buildgc.c38
-rw-r--r--src/cmd/dist/buildruntime.c84
-rw-r--r--src/cmd/dist/goc2c.c833
-rw-r--r--src/cmd/dist/plan9.c6
-rw-r--r--src/cmd/dist/unix.c16
-rw-r--r--src/cmd/dist/windows.c6
-rw-r--r--src/cmd/fix/doc.go2
-rw-r--r--src/cmd/fix/fix.go2
-rw-r--r--src/cmd/gc/align.c4
-rwxr-xr-xsrc/cmd/gc/bisonerrors18
-rw-r--r--src/cmd/gc/builtin.c33
-rw-r--r--src/cmd/gc/bv.c5
-rw-r--r--src/cmd/gc/const.c9
-rw-r--r--src/cmd/gc/dcl.c14
-rw-r--r--src/cmd/gc/esc.c3
-rw-r--r--src/cmd/gc/fmt.c36
-rw-r--r--src/cmd/gc/gen.c75
-rw-r--r--src/cmd/gc/go.h17
-rw-r--r--src/cmd/gc/go.y15
-rw-r--r--src/cmd/gc/lex.c363
-rw-r--r--src/cmd/gc/md5.c12
-rw-r--r--src/cmd/gc/mparith1.c2
-rw-r--r--src/cmd/gc/mparith2.c4
-rw-r--r--src/cmd/gc/mparith3.c4
-rw-r--r--src/cmd/gc/obj.c9
-rw-r--r--src/cmd/gc/order.c48
-rw-r--r--src/cmd/gc/pgen.c57
-rw-r--r--src/cmd/gc/plive.c34
-rw-r--r--src/cmd/gc/popt.c6
-rw-r--r--src/cmd/gc/racewalk.c26
-rw-r--r--src/cmd/gc/range.c48
-rw-r--r--src/cmd/gc/reflect.c591
-rw-r--r--src/cmd/gc/runtime.go40
-rw-r--r--src/cmd/gc/select.c65
-rw-r--r--src/cmd/gc/sinit.c32
-rw-r--r--src/cmd/gc/subr.c193
-rw-r--r--src/cmd/gc/swt.c1
-rw-r--r--src/cmd/gc/typecheck.c122
-rw-r--r--src/cmd/gc/walk.c543
-rw-r--r--src/cmd/gc/y.tab.c2566
-rw-r--r--src/cmd/gc/yerr.h84
-rw-r--r--src/cmd/go/build.go226
-rw-r--r--src/cmd/go/doc.go206
-rw-r--r--src/cmd/go/generate.go398
-rw-r--r--src/cmd/go/generate_test.go48
-rw-r--r--src/cmd/go/get.go35
-rw-r--r--src/cmd/go/go_windows_test.go55
-rw-r--r--src/cmd/go/help.go29
-rw-r--r--src/cmd/go/list.go39
-rw-r--r--src/cmd/go/main.go5
-rwxr-xr-xsrc/cmd/go/mkdoc.sh2
-rw-r--r--src/cmd/go/pkg.go180
-rwxr-xr-xsrc/cmd/go/test.bash405
-rw-r--r--src/cmd/go/test.go178
-rw-r--r--src/cmd/go/testdata/generate/test1.go13
-rw-r--r--src/cmd/go/testdata/generate/test2.go10
-rw-r--r--src/cmd/go/testdata/generate/test3.go9
-rw-r--r--src/cmd/go/testdata/importcom/bad.go3
-rw-r--r--src/cmd/go/testdata/importcom/conflict.go3
-rw-r--r--src/cmd/go/testdata/importcom/src/bad/bad.go1
-rw-r--r--src/cmd/go/testdata/importcom/src/conflict/a.go1
-rw-r--r--src/cmd/go/testdata/importcom/src/conflict/b.go1
-rw-r--r--src/cmd/go/testdata/importcom/src/works/x/x.go1
-rw-r--r--src/cmd/go/testdata/importcom/src/works/x/x1.go1
-rw-r--r--src/cmd/go/testdata/importcom/src/wrongplace/x.go1
-rw-r--r--src/cmd/go/testdata/importcom/works.go3
-rw-r--r--src/cmd/go/testdata/importcom/wrongplace.go3
-rw-r--r--src/cmd/go/testdata/norunexample/example_test.go11
-rw-r--r--src/cmd/go/testdata/norunexample/test_test.go10
-rw-r--r--src/cmd/go/testdata/src/badc/x.c1
-rw-r--r--src/cmd/go/testdata/src/badc/x.go1
-rw-r--r--src/cmd/go/testdata/src/badtest/badexec/x_test.go5
-rw-r--r--src/cmd/go/testdata/src/badtest/badsyntax/x.go1
-rw-r--r--src/cmd/go/testdata/src/badtest/badsyntax/x_test.go3
-rw-r--r--src/cmd/go/testdata/src/badtest/badvar/x.go1
-rw-r--r--src/cmd/go/testdata/src/badtest/badvar/x_test.go5
-rw-r--r--src/cmd/go/testdata/src/vetpkg/a_test.go1
-rw-r--r--src/cmd/go/testdata/src/vetpkg/b.go7
-rw-r--r--src/cmd/go/testdata/testinternal/p.go3
-rw-r--r--src/cmd/go/testdata/testinternal2/p.go3
-rw-r--r--src/cmd/go/testdata/testinternal2/x/y/z/internal/w/w.go1
-rw-r--r--src/cmd/go/testflag.go7
-rw-r--r--src/cmd/go/testgo.go21
-rw-r--r--src/cmd/go/tool.go14
-rw-r--r--src/cmd/go/vcs.go149
-rw-r--r--src/cmd/go/vcs_test.go124
-rw-r--r--src/cmd/go/vet.go25
-rw-r--r--src/cmd/gofmt/doc.go2
-rw-r--r--src/cmd/gofmt/gofmt.go193
-rw-r--r--src/cmd/gofmt/gofmt_test.go121
-rw-r--r--src/cmd/gofmt/long_test.go4
-rw-r--r--src/cmd/gofmt/rewrite.go3
-rw-r--r--src/cmd/gofmt/simplify.go50
-rw-r--r--src/cmd/gofmt/testdata/composites.golden2
-rw-r--r--src/cmd/gofmt/testdata/composites.input2
-rw-r--r--src/cmd/gofmt/testdata/crlf.golden1
-rw-r--r--src/cmd/gofmt/testdata/crlf.input1
-rw-r--r--src/cmd/gofmt/testdata/emptydecl.golden14
-rw-r--r--src/cmd/gofmt/testdata/emptydecl.input16
-rw-r--r--src/cmd/gofmt/testdata/ranges.golden30
-rw-r--r--src/cmd/gofmt/testdata/ranges.input20
-rw-r--r--src/cmd/gofmt/testdata/rewrite1.golden2
-rw-r--r--src/cmd/gofmt/testdata/rewrite1.input2
-rw-r--r--src/cmd/gofmt/testdata/rewrite2.golden2
-rw-r--r--src/cmd/gofmt/testdata/rewrite2.input2
-rw-r--r--src/cmd/gofmt/testdata/rewrite3.golden2
-rw-r--r--src/cmd/gofmt/testdata/rewrite3.input2
-rw-r--r--src/cmd/gofmt/testdata/rewrite4.golden2
-rw-r--r--src/cmd/gofmt/testdata/rewrite4.input2
-rw-r--r--src/cmd/gofmt/testdata/rewrite5.golden2
-rw-r--r--src/cmd/gofmt/testdata/rewrite5.input2
-rw-r--r--src/cmd/gofmt/testdata/rewrite6.golden2
-rw-r--r--src/cmd/gofmt/testdata/rewrite6.input2
-rw-r--r--src/cmd/gofmt/testdata/rewrite7.golden2
-rw-r--r--src/cmd/gofmt/testdata/rewrite7.input2
-rw-r--r--src/cmd/gofmt/testdata/rewrite8.golden2
-rw-r--r--src/cmd/gofmt/testdata/rewrite8.input2
-rw-r--r--src/cmd/gofmt/testdata/slices1.golden8
-rw-r--r--src/cmd/gofmt/testdata/slices1.input8
-rw-r--r--src/cmd/gofmt/testdata/slices2.golden2
-rw-r--r--src/cmd/gofmt/testdata/slices2.input2
-rw-r--r--src/cmd/gofmt/testdata/stdin1.golden2
-rw-r--r--src/cmd/gofmt/testdata/stdin1.golden.gofmt3
-rw-r--r--src/cmd/gofmt/testdata/stdin1.input2
-rw-r--r--src/cmd/gofmt/testdata/stdin1.input.gofmt3
-rw-r--r--src/cmd/gofmt/testdata/stdin2.golden2
-rw-r--r--src/cmd/gofmt/testdata/stdin2.golden.gofmt10
-rw-r--r--src/cmd/gofmt/testdata/stdin2.input2
-rw-r--r--src/cmd/gofmt/testdata/stdin2.input.gofmt11
-rw-r--r--src/cmd/gofmt/testdata/stdin3.golden1
-rw-r--r--src/cmd/gofmt/testdata/stdin3.golden.gofmt7
-rw-r--r--src/cmd/gofmt/testdata/stdin3.input1
-rw-r--r--src/cmd/gofmt/testdata/stdin3.input.gofmt7
-rw-r--r--src/cmd/gofmt/testdata/stdin4.golden2
-rw-r--r--src/cmd/gofmt/testdata/stdin4.golden.gofmt3
-rw-r--r--src/cmd/gofmt/testdata/stdin4.input2
-rw-r--r--src/cmd/gofmt/testdata/stdin4.input.gofmt3
-rw-r--r--src/cmd/gofmt/testdata/stdin5.golden3
-rw-r--r--src/cmd/gofmt/testdata/stdin5.input3
-rw-r--r--src/cmd/gofmt/testdata/stdin6.golden19
-rw-r--r--src/cmd/gofmt/testdata/stdin6.input21
-rw-r--r--src/cmd/gofmt/testdata/stdin7.golden19
-rw-r--r--src/cmd/gofmt/testdata/stdin7.input21
-rw-r--r--src/cmd/internal/goobj/read.go (renamed from src/cmd/nm/debug_goobj.go)342
-rw-r--r--src/cmd/internal/goobj/read_test.go28
-rw-r--r--src/cmd/internal/objfile/disasm.go248
-rw-r--r--src/cmd/internal/objfile/elf.go104
-rw-r--r--src/cmd/internal/objfile/goobj.go93
-rw-r--r--src/cmd/internal/objfile/macho.go116
-rw-r--r--src/cmd/internal/objfile/objfile.go94
-rw-r--r--src/cmd/internal/objfile/pe.go201
-rw-r--r--src/cmd/internal/objfile/plan9obj.go146
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/Makefile2
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/decode.go567
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/decode_test.go69
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/ext_test.go614
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/gnu.go164
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/inst.go438
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/objdump_test.go258
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/objdumpext_test.go260
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/plan9x.go211
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/tables.go9448
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/testdata/Makefile5
-rw-r--r--src/cmd/internal/rsc.io/arm/armasm/testdata/decode.txt306
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/Makefile3
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/decode.go1616
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/decode_test.go71
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/ext_test.go811
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/gnu.go926
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/inst.go641
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/inst_test.go20
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/intel.go518
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/objdump_test.go383
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/objdumpext_test.go314
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/plan9ext_test.go120
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/plan9x.go346
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/plan9x_test.go54
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/tables.go9760
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/testdata/Makefile12
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/testdata/decode.txt6731
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/xed_test.go211
-rw-r--r--src/cmd/internal/rsc.io/x86/x86asm/xedext_test.go206
-rw-r--r--src/cmd/ld/data.c357
-rw-r--r--src/cmd/ld/decodesym.c38
-rw-r--r--src/cmd/ld/doc.go6
-rw-r--r--src/cmd/ld/dwarf.c156
-rw-r--r--src/cmd/ld/elf.c3
-rw-r--r--src/cmd/ld/ldelf.c8
-rw-r--r--src/cmd/ld/ldmacho.c4
-rw-r--r--src/cmd/ld/ldpe.c32
-rw-r--r--src/cmd/ld/lib.c91
-rw-r--r--src/cmd/ld/lib.h14
-rw-r--r--src/cmd/ld/macho.c3
-rw-r--r--src/cmd/ld/pass.c104
-rw-r--r--src/cmd/ld/pcln.c6
-rw-r--r--src/cmd/ld/pobj.c22
-rw-r--r--src/cmd/ld/symtab.c55
-rw-r--r--src/cmd/ld/textflag.h13
-rw-r--r--src/cmd/nm/elf.go57
-rw-r--r--src/cmd/nm/goobj.go67
-rw-r--r--src/cmd/nm/macho.go69
-rw-r--r--src/cmd/nm/nm.go57
-rw-r--r--src/cmd/nm/nm_test.go11
-rw-r--r--src/cmd/nm/pe.go98
-rw-r--r--src/cmd/nm/plan9obj.go48
-rw-r--r--src/cmd/objdump/Makefile10
-rw-r--r--src/cmd/objdump/armasm.go10821
-rw-r--r--src/cmd/objdump/elf.go65
-rw-r--r--src/cmd/objdump/macho.go77
-rw-r--r--src/cmd/objdump/main.go456
-rw-r--r--src/cmd/objdump/objdump_test.go122
-rw-r--r--src/cmd/objdump/pe.go99
-rw-r--r--src/cmd/objdump/plan9obj.go63
-rw-r--r--src/cmd/objdump/x86.go13800
-rw-r--r--src/cmd/pack/doc.go4
-rw-r--r--src/cmd/pack/pack.go50
-rw-r--r--src/cmd/pack/pack_test.go33
-rw-r--r--src/cmd/pprof/README8
-rw-r--r--src/cmd/pprof/doc.go12
-rw-r--r--src/cmd/pprof/internal/commands/commands.go215
-rw-r--r--src/cmd/pprof/internal/driver/driver.go1036
-rw-r--r--src/cmd/pprof/internal/driver/interactive.go492
-rw-r--r--src/cmd/pprof/internal/fetch/fetch.go82
-rw-r--r--src/cmd/pprof/internal/plugin/plugin.go213
-rw-r--r--src/cmd/pprof/internal/profile/encode.go470
-rw-r--r--src/cmd/pprof/internal/profile/filter.go157
-rw-r--r--src/cmd/pprof/internal/profile/legacy_profile.go1250
-rw-r--r--src/cmd/pprof/internal/profile/profile.go567
-rw-r--r--src/cmd/pprof/internal/profile/proto.go298
-rw-r--r--src/cmd/pprof/internal/profile/prune.go97
-rw-r--r--src/cmd/pprof/internal/report/report.go1718
-rw-r--r--src/cmd/pprof/internal/report/source.go450
-rw-r--r--src/cmd/pprof/internal/report/source_html.go77
-rw-r--r--src/cmd/pprof/internal/svg/svg.go75
-rw-r--r--src/cmd/pprof/internal/symbolizer/symbolizer.go195
-rw-r--r--src/cmd/pprof/internal/symbolz/symbolz.go111
-rw-r--r--src/cmd/pprof/internal/tempfile/tempfile.go45
-rw-r--r--src/cmd/pprof/pprof.go237
-rw-r--r--src/cmd/yacc/Makefile12
-rw-r--r--src/cmd/yacc/doc.go5
-rw-r--r--src/cmd/yacc/testdata/expr/README20
-rw-r--r--src/cmd/yacc/testdata/expr/expr.y (renamed from src/cmd/yacc/expr.y)7
-rw-r--r--src/cmd/yacc/testdata/expr/main.go15
-rw-r--r--src/cmd/yacc/yacc.go90
331 files changed, 52163 insertions, 32298 deletions
diff --git a/src/cmd/5a/a.y b/src/cmd/5a/a.y
index 56d0c563d..ad647606e 100644
--- a/src/cmd/5a/a.y
+++ b/src/cmd/5a/a.y
@@ -33,7 +33,7 @@
#include <stdio.h> /* if we don't, bison will, and a.h re-#defines getc */
#include <libc.h>
#include "a.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
%}
%union
{
diff --git a/src/cmd/5a/lex.c b/src/cmd/5a/lex.c
index 571fdf7f2..9c6970947 100644
--- a/src/cmd/5a/lex.c
+++ b/src/cmd/5a/lex.c
@@ -85,6 +85,7 @@ main(int argc, char *argv[])
ctxt = linknew(&linkarm);
ctxt->diag = yyerror;
ctxt->bso = &bstdout;
+ ctxt->enforce_data_order = 1;
Binit(&bstdout, 1, OWRITE);
listinit5();
fmtinstall('L', Lconv);
@@ -199,8 +200,8 @@ struct
"R6", LREG, 6,
"R7", LREG, 7,
"R8", LREG, 8,
- "m", LREG, 9, // avoid unintentionally clobber m/g using R9/R10
- "g", LREG, 10,
+ "R9", LREG, 9,
+ "g", LREG, 10, // avoid unintentionally clobber g using R10
"R11", LREG, 11,
"R12", LREG, 12,
"R13", LREG, 13,
diff --git a/src/cmd/5a/y.tab.c b/src/cmd/5a/y.tab.c
index 0bc8c34e1..a6251b835 100644
--- a/src/cmd/5a/y.tab.c
+++ b/src/cmd/5a/y.tab.c
@@ -69,7 +69,7 @@
#include <stdio.h> /* if we don't, bison will, and a.h re-#defines getc */
#include <libc.h>
#include "a.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
/* Line 371 of yacc.c */
#line 76 "y.tab.c"
diff --git a/src/cmd/5c/cgen.c b/src/cmd/5c/cgen.c
index 08ed36055..5a049ae62 100644
--- a/src/cmd/5c/cgen.c
+++ b/src/cmd/5c/cgen.c
@@ -29,7 +29,7 @@
// THE SOFTWARE.
#include "gc.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
void
_cgen(Node *n, Node *nn, int inrel)
@@ -46,7 +46,7 @@ _cgen(Node *n, Node *nn, int inrel)
}
if(n == Z || n->type == T)
return;
- if(typesuv[n->type->etype]) {
+ if(typesuv[n->type->etype] && (n->op != OFUNC || nn != Z)) {
sugen(n, nn, n->type->width);
return;
}
@@ -75,7 +75,7 @@ _cgen(Node *n, Node *nn, int inrel)
if(r != Z && r->complex >= FNX)
switch(o) {
default:
- regret(&nod, r);
+ regret(&nod, r, 0, 0);
cgen(r, &nod);
regsalloc(&nod1, r);
@@ -107,7 +107,7 @@ _cgen(Node *n, Node *nn, int inrel)
if(l->addable >= INDEXED && l->complex < FNX) {
if(nn != Z || r->addable < INDEXED) {
if(r->complex >= FNX && nn == Z)
- regret(&nod, r);
+ regret(&nod, r, 0, 0);
else
regalloc(&nod, r, nn);
cgen(r, &nod);
@@ -348,7 +348,7 @@ _cgen(Node *n, Node *nn, int inrel)
if(l->op != OIND)
diag(n, "bad function call");
- regret(&nod, l->left);
+ regret(&nod, l->left, 0, 0);
cgen(l->left, &nod);
regsalloc(&nod1, l->left);
gopcode(OAS, &nod, Z, &nod1);
@@ -366,22 +366,20 @@ _cgen(Node *n, Node *nn, int inrel)
if(REGARG >= 0)
o = reg[REGARG];
gargs(r, &nod, &nod1);
- gpcdata(PCDATA_ArgSize, curarg);
if(l->addable < INDEXED) {
reglcgen(&nod, l, Z);
gopcode(OFUNC, Z, Z, &nod);
regfree(&nod);
} else
gopcode(OFUNC, Z, Z, l);
- gpcdata(PCDATA_ArgSize, -1);
if(REGARG >= 0)
if(o != reg[REGARG])
reg[REGARG]--;
- if(nn != Z) {
- regret(&nod, n);
- gopcode(OAS, &nod, Z, nn);
+ regret(&nod, n, l->type, 1);
+ if(nn != Z)
+ gmove(&nod, nn);
+ if(nod.op == OREGISTER)
regfree(&nod);
- }
break;
case OIND:
@@ -823,7 +821,7 @@ boolgen(Node *n, int true, Node *nn)
if(true)
o = comrel[relindex(o)];
if(l->complex >= FNX && r->complex >= FNX) {
- regret(&nod, r);
+ regret(&nod, r, 0, 0);
cgenrel(r, &nod);
regsalloc(&nod1, r);
gopcode(OAS, &nod, Z, &nod1);
@@ -957,7 +955,7 @@ sugen(Node *n, Node *nn, int32 w)
if(nn != Z && side(nn)) {
nod1 = *n;
nod1.type = typ(TIND, n->type);
- regret(&nod2, &nod1);
+ regret(&nod2, &nod1, 0, 0);
lcgen(nn, &nod2);
regsalloc(&nod0, &nod1);
gopcode(OAS, &nod2, Z, &nod0);
@@ -1036,6 +1034,20 @@ sugen(Node *n, Node *nn, int32 w)
break;
case OFUNC:
+ if(!hasdotdotdot(n->left->type)) {
+ cgen(n, Z);
+ if(nn != Z) {
+ curarg -= n->type->width;
+ regret(&nod1, n, n->left->type, 1);
+ if(nn->complex >= FNX) {
+ regsalloc(&nod2, n);
+ cgen(&nod1, &nod2);
+ nod1 = nod2;
+ }
+ cgen(&nod1, nn);
+ }
+ break;
+ }
if(nn == Z) {
sugen(n, nodrat, w);
break;
diff --git a/src/cmd/5c/gc.h b/src/cmd/5c/gc.h
index 40d3a2b07..7417b7dbe 100644
--- a/src/cmd/5c/gc.h
+++ b/src/cmd/5c/gc.h
@@ -144,7 +144,6 @@ EXTERN Prog* lastp;
EXTERN int32 maxargsafe;
EXTERN int mnstring;
EXTERN Multab multab[20];
-EXTERN int retok;
extern int hintabsize;
EXTERN Node* nodrat;
EXTERN Node* nodret;
@@ -211,7 +210,7 @@ void usedset(Node*, int);
void xcom(Node*);
int bcomplex(Node*, Node*);
Prog* gtext(Sym*, int32);
-vlong argsize(void);
+vlong argsize(int);
/*
* cgen.c
@@ -237,7 +236,7 @@ Node* nodconst(int32);
Node* nod32const(vlong);
Node* nodfconst(double);
void nodreg(Node*, Node*, int);
-void regret(Node*, Node*);
+void regret(Node*, Node*, Type*, int);
int tmpreg(void);
void regalloc(Node*, Node*, Node*);
void regfree(Node*);
diff --git a/src/cmd/5c/peep.c b/src/cmd/5c/peep.c
index 143400a63..1de56b594 100644
--- a/src/cmd/5c/peep.c
+++ b/src/cmd/5c/peep.c
@@ -853,11 +853,15 @@ xtramodes(Reg *r, Addr *a)
switch (p1->from.type) {
case D_REG:
/* register offset */
+ if(nacl)
+ return 0;
a->type = D_SHIFT;
a->offset = p1->from.reg;
break;
case D_SHIFT:
/* scaled register offset */
+ if(nacl)
+ return 0;
a->type = D_SHIFT;
case D_CONST:
/* immediate offset */
diff --git a/src/cmd/5c/reg.c b/src/cmd/5c/reg.c
index b9ac21abd..9024d5f49 100644
--- a/src/cmd/5c/reg.c
+++ b/src/cmd/5c/reg.c
@@ -204,6 +204,16 @@ regopt(Prog *p)
break;
}
+ /* the mod/div runtime routines smash R12 */
+ switch(p->as) {
+ case AMOD:
+ case AMODU:
+ case ADIV:
+ case ADIVU:
+ regbits |= RtoB(12);
+ break;
+ }
+
if(p->as == AMOVM) {
if(p->from.type == D_CONST)
z = p->from.offset;
@@ -396,7 +406,7 @@ loop2:
rgp->cost = change;
nregion++;
if(nregion >= NRGN) {
- warn(Z, "too many regions");
+ fatal(Z, "too many regions");
goto brk;
}
rgp++;
@@ -632,11 +642,8 @@ mkvar(Addr *a, int docon)
if(s)
if(s->name[0] == '.')
goto none;
- if(nvar >= NVAR) {
- if(debug['w'] > 1 && s)
- warn(Z, "variable not optimized: %s", s->name);
- goto none;
- }
+ if(nvar >= NVAR)
+ fatal(Z, "variable not optimized: %s", s->name);
i = nvar;
nvar++;
v = &var[i];
diff --git a/src/cmd/5c/sgen.c b/src/cmd/5c/sgen.c
index efcc0437b..a36612caa 100644
--- a/src/cmd/5c/sgen.c
+++ b/src/cmd/5c/sgen.c
@@ -36,7 +36,7 @@ gtext(Sym *s, int32 stkoff)
{
int32 a;
- a = argsize();
+ a = argsize(1);
if((textflag & NOSPLIT) != 0 && stkoff >= 128)
yyerror("stack frame too large for NOSPLIT function");
diff --git a/src/cmd/5c/swt.c b/src/cmd/5c/swt.c
index fd81a4e68..f39963b8f 100644
--- a/src/cmd/5c/swt.c
+++ b/src/cmd/5c/swt.c
@@ -60,7 +60,7 @@ swit2(C1 *q, int nc, int32 def, Node *n)
if(nc >= 3) {
i = (q+nc-1)->val - (q+0)->val;
- if(i > 0 && i < nc*2)
+ if(!nacl && i > 0 && i < nc*2)
goto direct;
}
if(nc < 5) {
@@ -374,10 +374,11 @@ align(int32 i, Type *t, int op, int32 *maxalign)
{
int32 o;
Type *v;
- int w;
+ int w, packw;
o = i;
w = 1;
+ packw = 0;
switch(op) {
default:
diag(Z, "unknown align opcode %d", op);
@@ -388,7 +389,7 @@ align(int32 i, Type *t, int op, int32 *maxalign)
if(w < 1)
w = 1;
if(packflg)
- w = packflg;
+ packw = packflg;
break;
case Ael1: /* initial align of struct element */
@@ -404,7 +405,7 @@ align(int32 i, Type *t, int op, int32 *maxalign)
if(w < 1 || w > SZ_LONG)
fatal(Z, "align");
if(packflg)
- w = packflg;
+ packw = packflg;
break;
case Ael2: /* width of a struct element */
@@ -440,6 +441,8 @@ align(int32 i, Type *t, int op, int32 *maxalign)
w = SZ_LONG; /* because of a pun in cc/dcl.c:contig() */
break;
}
+ if(packw != 0 && xround(o, w) != xround(o, packw))
+ diag(Z, "#pragma pack changes offset of %T", t);
o = xround(o, w);
if(maxalign != nil && *maxalign < w)
*maxalign = w;
diff --git a/src/cmd/5c/txt.c b/src/cmd/5c/txt.c
index a753510ca..af40220cc 100644
--- a/src/cmd/5c/txt.c
+++ b/src/cmd/5c/txt.c
@@ -274,15 +274,43 @@ nodreg(Node *n, Node *nn, int reg)
}
void
-regret(Node *n, Node *nn)
+regret(Node *n, Node *nn, Type *t, int mode)
{
int r;
- r = REGRET;
- if(typefd[nn->type->etype])
- r = FREGRET+NREG;
- nodreg(n, nn, r);
- reg[r]++;
+ if(mode == 0 || hasdotdotdot(t) || nn->type->width == 0) {
+ r = REGRET;
+ if(typefd[nn->type->etype])
+ r = FREGRET+NREG;
+ nodreg(n, nn, r);
+ reg[r]++;
+ return;
+ }
+
+ if(mode == 1) {
+ // fetch returned value after call.
+ // already called gargs, so curarg is set.
+ curarg = (curarg+3) & ~3;
+ regaalloc(n, nn);
+ return;
+ }
+
+ if(mode == 2) {
+ // store value to be returned.
+ // must compute arg offset.
+ if(t->etype != TFUNC)
+ fatal(Z, "bad regret func %T", t);
+ *n = *nn;
+ n->op = ONAME;
+ n->class = CPARAM;
+ n->sym = slookup(".ret");
+ n->complex = nodret->complex;
+ n->xoffset = argsize(0);
+ n->addable = 20;
+ return;
+ }
+
+ fatal(Z, "bad regret");
}
int
diff --git a/src/cmd/5g/cgen.c b/src/cmd/5g/cgen.c
index 9011b2022..c535cfbef 100644
--- a/src/cmd/5g/cgen.c
+++ b/src/cmd/5g/cgen.c
@@ -254,7 +254,6 @@ cgen(Node *n, Node *res)
case OOR:
case OXOR:
case OADD:
- case OADDPTR:
case OMUL:
a = optoas(n->op, nl->type);
goto sbop;
@@ -1107,11 +1106,10 @@ bgen(Node *n, int true, int likely, Prog *to)
{
int et, a;
Node *nl, *nr, *r;
- Node n1, n2, n3, n4, tmp;
+ Node n1, n2, n3, tmp;
NodeList *ll;
Prog *p1, *p2;
- USED(n4); // in unreachable code below
if(debug['g']) {
dump("\nbgen", n);
}
@@ -1497,7 +1495,7 @@ sgen(Node *n, Node *res, int64 w)
if(osrc < odst && odst < osrc+w)
dir = -dir;
- if(op == AMOVW && dir > 0 && c >= 4 && c <= 128) {
+ if(op == AMOVW && !nacl && dir > 0 && c >= 4 && c <= 128) {
r0.op = OREGISTER;
r0.val.u.reg = REGALLOC_R0;
r1.op = OREGISTER;
@@ -1524,7 +1522,7 @@ sgen(Node *n, Node *res, int64 w)
f = sysfunc("duffcopy");
p = gins(ADUFFCOPY, N, f);
afunclit(&p->to, f);
- // 8 and 128 = magic constants: see ../../pkg/runtime/asm_arm.s
+ // 8 and 128 = magic constants: see ../../runtime/asm_arm.s
p->to.offset = 8*(128-c);
regfree(&tmp);
@@ -1636,7 +1634,10 @@ int
componentgen(Node *nr, Node *nl)
{
Node nodl, nodr, tmp;
+ Type *t;
int freel, freer;
+ vlong fldcount;
+ vlong loffset, roffset;
freel = 0;
freer = 0;
@@ -1646,8 +1647,33 @@ componentgen(Node *nr, Node *nl)
goto no;
case TARRAY:
- if(!isslice(nl->type))
+ t = nl->type;
+
+ // Slices are ok.
+ if(isslice(t))
+ break;
+ // Small arrays are ok.
+ if(t->bound > 0 && t->bound <= 3 && !isfat(t->type))
+ break;
+
+ goto no;
+
+ case TSTRUCT:
+ // Small structs with non-fat types are ok.
+ // Zero-sized structs are treated separately elsewhere.
+ fldcount = 0;
+ for(t=nl->type->type; t; t=t->down) {
+ if(isfat(t->type))
+ goto no;
+ if(t->etype != TFIELD)
+ fatal("componentgen: not a TFIELD: %lT", t);
+ fldcount++;
+ }
+ if(fldcount == 0 || fldcount > 4)
goto no;
+
+ break;
+
case TSTRING:
case TINTER:
break;
@@ -1675,6 +1701,7 @@ componentgen(Node *nr, Node *nl)
freer = 1;
}
+
// nl and nr are 'cadable' which basically means they are names (variables) now.
// If they are the same variable, don't generate any code, because the
// VARDEF we generate will mark the old value as dead incorrectly.
@@ -1684,8 +1711,25 @@ componentgen(Node *nr, Node *nl)
switch(nl->type->etype) {
case TARRAY:
+ // componentgen for arrays.
if(nl->op == ONAME)
gvardef(nl);
+ t = nl->type;
+ if(!isslice(t)) {
+ nodl.type = t->type;
+ nodr.type = nodl.type;
+ for(fldcount=0; fldcount < t->bound; fldcount++) {
+ if(nr == N)
+ clearslim(&nodl);
+ else
+ gmove(&nodr, &nodl);
+ nodl.xoffset += t->type->width;
+ nodr.xoffset += t->type->width;
+ }
+ goto yes;
+ }
+
+ // componentgen for slices.
nodl.xoffset += Array_array;
nodl.type = ptrto(nl->type->type);
@@ -1760,6 +1804,31 @@ componentgen(Node *nr, Node *nl)
gmove(&nodr, &nodl);
goto yes;
+
+ case TSTRUCT:
+ if(nl->op == ONAME)
+ gvardef(nl);
+ loffset = nodl.xoffset;
+ roffset = nodr.xoffset;
+ // funarg structs may not begin at offset zero.
+ if(nl->type->etype == TSTRUCT && nl->type->funarg && nl->type->type)
+ loffset -= nl->type->type->width;
+ if(nr != N && nr->type->etype == TSTRUCT && nr->type->funarg && nr->type->type)
+ roffset -= nr->type->type->width;
+
+ for(t=nl->type->type; t; t=t->down) {
+ nodl.xoffset = loffset + t->width;
+ nodl.type = t->type;
+
+ if(nr == N)
+ clearslim(&nodl);
+ else {
+ nodr.xoffset = roffset + t->width;
+ nodr.type = nodl.type;
+ gmove(&nodr, &nodl);
+ }
+ }
+ goto yes;
}
no:
diff --git a/src/cmd/5g/galign.c b/src/cmd/5g/galign.c
index a62102ef8..b4c45da69 100644
--- a/src/cmd/5g/galign.c
+++ b/src/cmd/5g/galign.c
@@ -23,10 +23,10 @@ vlong MAXWIDTH = (1LL<<32) - 1;
*/
Typedef typedefs[] =
{
- "int", TINT, TINT32,
- "uint", TUINT, TUINT32,
- "uintptr", TUINTPTR, TUINT32,
- 0
+ {"int", TINT, TINT32},
+ {"uint", TUINT, TUINT32},
+ {"uintptr", TUINTPTR, TUINT32},
+ {0}
};
void
diff --git a/src/cmd/5g/gg.h b/src/cmd/5g/gg.h
index 413e93c24..00914bfa3 100644
--- a/src/cmd/5g/gg.h
+++ b/src/cmd/5g/gg.h
@@ -11,10 +11,13 @@
#define TEXTFLAG reg
-#define REGALLOC_R0 0
-#define REGALLOC_RMAX REGEXT
-#define REGALLOC_F0 NREG
-#define REGALLOC_FMAX (REGALLOC_F0 + FREGEXT)
+enum
+{
+ REGALLOC_R0 = 0,
+ REGALLOC_RMAX = REGEXT,
+ REGALLOC_F0 = NREG,
+ REGALLOC_FMAX = REGALLOC_F0 + FREGEXT,
+};
EXTERN int32 dynloc;
EXTERN uchar reg[REGALLOC_FMAX+1];
@@ -106,7 +109,6 @@ void split64(Node*, Node*, Node*);
void splitclean(void);
Node* ncon(uint32 i);
void gtrack(Sym*);
-void gargsize(int32);
/*
* obj.c
diff --git a/src/cmd/5g/ggen.c b/src/cmd/5g/ggen.c
index fb32c2f36..53cddb760 100644
--- a/src/cmd/5g/ggen.c
+++ b/src/cmd/5g/ggen.c
@@ -76,7 +76,7 @@ zerorange(Prog *p, vlong frame, vlong lo, vlong hi, uint32 *r0)
if(cnt < 4*widthptr) {
for(i = 0; i < cnt; i += widthptr)
p = appendpp(p, AMOVW, D_REG, 0, 0, D_OREG, REGSP, 4+frame+lo+i);
- } else if(cnt <= 128*widthptr) {
+ } else if(!nacl && (cnt <= 128*widthptr)) {
p = appendpp(p, AADD, D_CONST, NREG, 4+frame+lo, D_REG, 1, 0);
p->reg = REGSP;
p = appendpp(p, ADUFFZERO, D_NONE, NREG, 0, D_OREG, NREG, 0);
@@ -179,28 +179,12 @@ fixautoused(Prog* p)
void
ginscall(Node *f, int proc)
{
- int32 arg;
Prog *p;
Node n1, r, r1, con;
if(f->type != T)
setmaxarg(f->type);
- arg = -1;
- // Most functions have a fixed-size argument block, so traceback uses that during unwind.
- // Not all, though: there are some variadic functions in package runtime,
- // and for those we emit call-specific metadata recorded by caller.
- // Reflect generates functions with variable argsize (see reflect.methodValueCall/makeFuncStub),
- // so we do this for all indirect calls as well.
- if(f->type != T && (f->sym == S || (f->sym != S && f->sym->pkg == runtimepkg) || proc == 1 || proc == 2)) {
- arg = f->type->argwid;
- if(proc == 1 || proc == 2)
- arg += 3*widthptr;
- }
-
- if(arg != -1)
- gargsize(arg);
-
switch(proc) {
default:
fatal("ginscall: bad proc %d", proc);
@@ -297,9 +281,6 @@ ginscall(Node *f, int proc)
}
break;
}
-
- if(arg != -1)
- gargsize(-1);
}
/*
@@ -906,11 +887,11 @@ clearfat(Node *nl)
patch(gbranch(ABNE, T, 0), pl);
regfree(&end);
- } else if(q >= 4) {
+ } else if(q >= 4 && !nacl) {
f = sysfunc("duffzero");
p = gins(ADUFFZERO, N, f);
afunclit(&p->to, f);
- // 4 and 128 = magic constants: see ../../pkg/runtime/asm_arm.s
+ // 4 and 128 = magic constants: see ../../runtime/asm_arm.s
p->to.offset = 4*(128-q);
} else
while(q > 0) {
diff --git a/src/cmd/5g/gsubr.c b/src/cmd/5g/gsubr.c
index f66c87b5a..06e274e14 100644
--- a/src/cmd/5g/gsubr.c
+++ b/src/cmd/5g/gsubr.c
@@ -31,11 +31,11 @@
#include <u.h>
#include <libc.h>
#include "gg.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
// TODO(rsc): Can make this bigger if we move
// the text segment up higher in 5l for all GOOS.
-// At the same time, can raise StackBig in ../../pkg/runtime/stack.h.
+// At the same time, can raise StackBig in ../../runtime/stack.h.
long unmappedzero = 4096;
void
@@ -206,17 +206,7 @@ ggloblnod(Node *nam)
}
void
-gargsize(int32 size)
-{
- Node n1, n2;
-
- nodconst(&n1, types[TINT32], PCDATA_ArgSize);
- nodconst(&n2, types[TINT32], size);
- gins(APCDATA, &n1, &n2);
-}
-
-void
-ggloblsym(Sym *s, int32 width, int dupok, int rodata)
+ggloblsym(Sym *s, int32 width, int8 flags)
{
Prog *p;
@@ -227,10 +217,7 @@ ggloblsym(Sym *s, int32 width, int dupok, int rodata)
p->to.type = D_CONST;
p->to.name = D_NONE;
p->to.offset = width;
- if(dupok)
- p->reg |= DUPOK;
- if(rodata)
- p->reg |= RODATA;
+ p->reg = flags;
}
void
@@ -374,7 +361,7 @@ regalloc(Node *n, Type *t, Node *o)
print("registers allocated at\n");
for(i=REGALLOC_R0; i<=REGALLOC_RMAX; i++)
print("%d %p\n", i, regpc[i]);
- yyerror("out of fixed registers");
+ fatal("out of fixed registers");
goto err;
case TFLOAT32:
@@ -387,7 +374,7 @@ regalloc(Node *n, Type *t, Node *o)
for(i=REGALLOC_F0; i<=REGALLOC_FMAX; i++)
if(reg[i] == 0)
goto out;
- yyerror("out of floating point registers");
+ fatal("out of floating point registers");
goto err;
case TCOMPLEX64:
@@ -636,6 +623,7 @@ splitclean(void)
}
#define CASE(a,b) (((a)<<16)|((b)<<0))
+/*c2go int CASE(int, int); */
void
gmove(Node *f, Node *t)
@@ -1601,7 +1589,6 @@ optoas(int op, Type *t)
case CASE(OADD, TINT32):
case CASE(OADD, TUINT32):
case CASE(OADD, TPTR32):
- case CASE(OADDPTR, TPTR32):
a = AADD;
break;
diff --git a/src/cmd/5g/opt.h b/src/cmd/5g/opt.h
index e3e3f78ed..1946c1d33 100644
--- a/src/cmd/5g/opt.h
+++ b/src/cmd/5g/opt.h
@@ -49,6 +49,24 @@
typedef struct Reg Reg;
typedef struct Rgn Rgn;
+/*c2go
+extern Node *Z;
+enum
+{
+ D_HI = D_NONE,
+ D_LO = D_NONE,
+ CLOAD = 5,
+ CREF = 5,
+ CINF = 1000,
+ LOOP = 3,
+};
+
+uint32 BLOAD(Reg*);
+uint32 BSTORE(Reg*);
+uint32 LOAD(Reg*);
+uint32 STORE(Reg*);
+*/
+
// A Reg is a wrapper around a single Prog (one instruction) that holds
// register optimization information while the optimizer runs.
// r->prog is the instruction.
@@ -71,8 +89,10 @@ struct Reg
int32 regu; // register used bitmap
};
#define R ((Reg*)0)
+/*c2go extern Reg *R; */
#define NRGN 600
+/*c2go enum { NRGN = 600 }; */
struct Rgn
{
Reg* enter;
diff --git a/src/cmd/5g/peep.c b/src/cmd/5g/peep.c
index 4aa645206..639f4c5f6 100644
--- a/src/cmd/5g/peep.c
+++ b/src/cmd/5g/peep.c
@@ -564,6 +564,8 @@ gotit:
* ..
*/
#define FAIL(msg) { if(debug['P']) print("\t%s; FAILURE\n", msg); return 0; }
+/*c2go void FAIL(char*); */
+
int
shiftprop(Flow *r)
{
@@ -875,11 +877,15 @@ xtramodes(Graph *g, Flow *r, Adr *a)
switch (p1->from.type) {
case D_REG:
/* register offset */
+ if(nacl)
+ return 0;
a->type = D_SHIFT;
a->offset = p1->from.reg;
break;
case D_SHIFT:
/* scaled register offset */
+ if(nacl)
+ return 0;
a->type = D_SHIFT;
case D_CONST:
/* immediate offset */
diff --git a/src/cmd/5g/reg.c b/src/cmd/5g/reg.c
index 4762df506..b78c268df 100644
--- a/src/cmd/5g/reg.c
+++ b/src/cmd/5g/reg.c
@@ -36,6 +36,11 @@
#define NREGVAR 32
#define REGBITS ((uint32)0xffffffff)
+/*c2go enum {
+ NREGVAR = 32,
+ REGBITS = 0xffffffff,
+};
+*/
void addsplits(void);
static Reg* firstr;
@@ -194,7 +199,7 @@ regopt(Prog *firstp)
proginfo(&info, p);
// Avoid making variables for direct-called functions.
- if(p->as == ABL && p->to.type == D_EXTERN)
+ if(p->as == ABL && p->to.name == D_EXTERN)
continue;
bit = mkvar(r, &p->from);
@@ -222,6 +227,10 @@ regopt(Prog *firstp)
for(z=0; z<BITS; z++)
r->set.b[z] |= bit.b[z];
}
+
+ /* the mod/div runtime routines smash R12 */
+ if(p->as == ADIV || p->as == ADIVU || p->as == AMOD || p->as == AMODU)
+ r->set.b[0] |= RtoB(12);
}
if(firstr == R)
return;
@@ -1306,6 +1315,7 @@ void
addreg(Adr *a, int rn)
{
a->sym = nil;
+ a->node = nil;
a->name = D_NONE;
a->type = D_REG;
a->reg = rn;
diff --git a/src/cmd/5l/5.out.h b/src/cmd/5l/5.out.h
index 9e8aceecb..7b16ac446 100644
--- a/src/cmd/5l/5.out.h
+++ b/src/cmd/5l/5.out.h
@@ -28,34 +28,94 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
-#define NSNAME 8
-#define NSYM 50
-#define NREG 16
+enum
+{
+ NSNAME = 8,
+ NSYM = 50,
+ NREG = 16,
+};
#include "../ld/textflag.h"
-#define REGRET 0
/* -1 disables use of REGARG */
#define REGARG -1
-/* compiler allocates R1 up as temps */
-/* compiler allocates register variables R3 up */
-#define REGEXT 10
-/* these two registers are declared in runtime.h */
-#define REGG (REGEXT-0)
-#define REGM (REGEXT-1)
-/* compiler allocates external registers R10 down */
-#define REGTMP 11
-#define REGSP 13
-#define REGLINK 14
-#define REGPC 15
-
-#define NFREG 16
-#define FREGRET 0
-#define FREGEXT 7
-#define FREGTMP 15
+/*c2go enum { REGARG = -1 }; */
+
+enum
+{
+ REGRET = 0,
+ /* compiler allocates R1 up as temps */
+ /* compiler allocates register variables R3 up */
+ /* compiler allocates external registers R10 down */
+ REGEXT = 10,
+ /* these two registers are declared in runtime.h */
+ REGG = REGEXT-0,
+ REGM = REGEXT-1,
+
+ REGTMP = 11,
+ REGSP = 13,
+ REGLINK = 14,
+ REGPC = 15,
+
+ NFREG = 16,
+ FREGRET = 0,
+ FREGEXT = 7,
+ FREGTMP = 15,
+};
/* compiler allocates register variables F0 up */
/* compiler allocates external registers F7 down */
-enum as
+enum
+{
+ C_NONE,
+ C_REG,
+ C_REGREG,
+ C_REGREG2,
+ C_SHIFT,
+ C_FREG,
+ C_PSR,
+ C_FCR,
+
+ C_RCON, /* 0xff rotated */
+ C_NCON, /* ~RCON */
+ C_SCON, /* 0xffff */
+ C_LCON,
+ C_LCONADDR,
+ C_ZFCON,
+ C_SFCON,
+ C_LFCON,
+
+ C_RACON,
+ C_LACON,
+
+ C_SBRA,
+ C_LBRA,
+
+ C_HAUTO, /* halfword insn offset (-0xff to 0xff) */
+ C_FAUTO, /* float insn offset (0 to 0x3fc, word aligned) */
+ C_HFAUTO, /* both H and F */
+ C_SAUTO, /* -0xfff to 0xfff */
+ C_LAUTO,
+
+ C_HOREG,
+ C_FOREG,
+ C_HFOREG,
+ C_SOREG,
+ C_ROREG,
+ C_SROREG, /* both nil and R */
+ C_LOREG,
+
+ C_PC,
+ C_SP,
+ C_HREG,
+
+ C_ADDR, /* reference to relocatable address */
+
+ C_GOK,
+
+ C_NCLASS, /* must be the last */
+};
+
+enum
{
AXXX,
@@ -202,6 +262,8 @@ enum as
AVARKILL,
ADUFFCOPY,
ADUFFZERO,
+ ADATABUNDLE,
+ ADATABUNDLEEND,
AMRC, // MRC/MCR
@@ -209,35 +271,38 @@ enum as
};
/* scond byte */
-#define C_SCOND ((1<<4)-1)
-#define C_SBIT (1<<4)
-#define C_PBIT (1<<5)
-#define C_WBIT (1<<6)
-#define C_FBIT (1<<7) /* psr flags-only */
-#define C_UBIT (1<<7) /* up bit, unsigned bit */
-
-#define C_SCOND_EQ 0
-#define C_SCOND_NE 1
-#define C_SCOND_HS 2
-#define C_SCOND_LO 3
-#define C_SCOND_MI 4
-#define C_SCOND_PL 5
-#define C_SCOND_VS 6
-#define C_SCOND_VC 7
-#define C_SCOND_HI 8
-#define C_SCOND_LS 9
-#define C_SCOND_GE 10
-#define C_SCOND_LT 11
-#define C_SCOND_GT 12
-#define C_SCOND_LE 13
-#define C_SCOND_NONE 14
-#define C_SCOND_NV 15
-
-/* D_SHIFT type */
-#define SHIFT_LL 0<<5
-#define SHIFT_LR 1<<5
-#define SHIFT_AR 2<<5
-#define SHIFT_RR 3<<5
+enum
+{
+ C_SCOND = (1<<4)-1,
+ C_SBIT = 1<<4,
+ C_PBIT = 1<<5,
+ C_WBIT = 1<<6,
+ C_FBIT = 1<<7, /* psr flags-only */
+ C_UBIT = 1<<7, /* up bit, unsigned bit */
+
+ C_SCOND_EQ = 0,
+ C_SCOND_NE = 1,
+ C_SCOND_HS = 2,
+ C_SCOND_LO = 3,
+ C_SCOND_MI = 4,
+ C_SCOND_PL = 5,
+ C_SCOND_VS = 6,
+ C_SCOND_VC = 7,
+ C_SCOND_HI = 8,
+ C_SCOND_LS = 9,
+ C_SCOND_GE = 10,
+ C_SCOND_LT = 11,
+ C_SCOND_GT = 12,
+ C_SCOND_LE = 13,
+ C_SCOND_NONE = 14,
+ C_SCOND_NV = 15,
+
+ /* D_SHIFT type */
+ SHIFT_LL = 0<<5,
+ SHIFT_LR = 1<<5,
+ SHIFT_AR = 2<<5,
+ SHIFT_RR = 3<<5,
+};
enum
{
@@ -279,3 +344,4 @@ enum
* this is the ranlib header
*/
#define SYMDEF "__.GOSYMDEF"
+/*c2go extern char SYMDEF[]; */
diff --git a/src/cmd/5l/asm.c b/src/cmd/5l/asm.c
index e87921218..9c1c04e2d 100644
--- a/src/cmd/5l/asm.c
+++ b/src/cmd/5l/asm.c
@@ -648,19 +648,20 @@ asmb(void)
switch(HEADTYPE) {
default:
case Hplan9: /* plan 9 */
- lput(0x647); /* magic */
- lput(segtext.filelen); /* sizes */
- lput(segdata.filelen);
- lput(segdata.len - segdata.filelen);
- lput(symsize); /* nsyms */
- lput(entryvalue()); /* va of entry */
- lput(0L);
- lput(lcsize);
+ LPUT(0x647); /* magic */
+ LPUT(segtext.filelen); /* sizes */
+ LPUT(segdata.filelen);
+ LPUT(segdata.len - segdata.filelen);
+ LPUT(symsize); /* nsyms */
+ LPUT(entryvalue()); /* va of entry */
+ LPUT(0L);
+ LPUT(lcsize);
break;
case Hlinux:
case Hfreebsd:
case Hnetbsd:
case Hopenbsd:
+ case Hnacl:
asmbelf(symo);
break;
}
@@ -675,64 +676,6 @@ asmb(void)
}
}
-/*
-void
-cput(int32 c)
-{
- *cbp++ = c;
- if(--cbc <= 0)
- cflush();
-}
-*/
-
-void
-wput(int32 l)
-{
-
- cbp[0] = l>>8;
- cbp[1] = l;
- cbp += 2;
- cbc -= 2;
- if(cbc <= 0)
- cflush();
-}
-
-
-void
-hput(int32 l)
-{
-
- cbp[0] = l>>8;
- cbp[1] = l;
- cbp += 2;
- cbc -= 2;
- if(cbc <= 0)
- cflush();
-}
-
-void
-lput(int32 l)
-{
-
- cbp[0] = l>>24;
- cbp[1] = l>>16;
- cbp[2] = l>>8;
- cbp[3] = l;
- cbp += 4;
- cbc -= 4;
- if(cbc <= 0)
- cflush();
-}
-
-void
-nopstat(char *f, Count *c)
-{
- if(c->outof)
- Bprint(&bso, "%s delay %d/%d (%.2f)\n", f,
- c->outof - c->count, c->outof,
- (double)(c->outof - c->count)/c->outof);
-}
-
int32
rnd(int32 v, int32 r)
{
diff --git a/src/cmd/5l/l.h b/src/cmd/5l/l.h
index 761bc861a..c881a544a 100644
--- a/src/cmd/5l/l.h
+++ b/src/cmd/5l/l.h
@@ -48,23 +48,8 @@ enum
#define EXTERN extern
#endif
-/* do not undefine this - code will be removed eventually */
-#define CALLEEBX
-
-#define dynptrsize 0
-
#define P ((Prog*)0)
#define S ((LSym*)0)
-#define TNAME (ctxt->cursym?ctxt->cursym->name:noname)
-
-#define SIGNINTERN (1729*325*1729)
-
-typedef struct Count Count;
-struct Count
-{
- int32 count;
- int32 outof;
-};
enum
{
@@ -73,62 +58,9 @@ enum
LABEL = 1<<1,
LEAF = 1<<2,
- STRINGSZ = 200,
- MINSIZ = 64,
- NENT = 100,
- MAXIO = 8192,
- MAXHIST = 40, /* limit of path elements for history symbols */
MINLC = 4,
-
- C_NONE = 0,
- C_REG,
- C_REGREG,
- C_REGREG2,
- C_SHIFT,
- C_FREG,
- C_PSR,
- C_FCR,
-
- C_RCON, /* 0xff rotated */
- C_NCON, /* ~RCON */
- C_SCON, /* 0xffff */
- C_LCON,
- C_LCONADDR,
- C_ZFCON,
- C_SFCON,
- C_LFCON,
-
- C_RACON,
- C_LACON,
-
- C_SBRA,
- C_LBRA,
-
- C_HAUTO, /* halfword insn offset (-0xff to 0xff) */
- C_FAUTO, /* float insn offset (0 to 0x3fc, word aligned) */
- C_HFAUTO, /* both H and F */
- C_SAUTO, /* -0xfff to 0xfff */
- C_LAUTO,
-
- C_HOREG,
- C_FOREG,
- C_HFOREG,
- C_SOREG,
- C_ROREG,
- C_SROREG, /* both nil and R */
- C_LOREG,
-
- C_PC,
- C_SP,
- C_HREG,
-
- C_ADDR, /* reference to relocatable address */
-
- C_GOK,
};
-#ifndef COFFCVT
-
EXTERN int32 autosize;
EXTERN LSym* datap;
EXTERN int debug[128];
@@ -152,26 +84,18 @@ void adddynrela(LSym *rel, LSym *s, Reloc *r);
void adddynsym(Link *ctxt, LSym *s);
int archreloc(Reloc *r, LSym *s, vlong *val);
void asmb(void);
-void cput(int32 c);
int elfreloc1(Reloc *r, vlong sectoff);
void elfsetupplt(void);
-void hput(int32 l);
void listinit(void);
-void lput(int32 l);
int machoreloc1(Reloc *r, vlong sectoff);
void main(int argc, char *argv[]);
-void noops(void);
-void nopstat(char *f, Count *c);
int32 rnd(int32 v, int32 r);
-void wput(int32 l);
/* Native is little-endian */
#define LPUT(a) lputl(a)
#define WPUT(a) wputl(a)
#define VPUT(a) abort()
-#endif
-
/* Used by ../ld/dwarf.c */
enum
{
diff --git a/src/cmd/5l/mkenam b/src/cmd/5l/mkenam
deleted file mode 100644
index 6cccb0263..000000000
--- a/src/cmd/5l/mkenam
+++ /dev/null
@@ -1,45 +0,0 @@
-# Inferno utils/5c/mkenam
-# http://code.google.com/p/inferno-os/source/browse/utils/5c/mkenam
-#
-# Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-# Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-# Portions Copyright © 1997-1999 Vita Nuova Limited
-# Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-# Portions Copyright © 2004,2006 Bruce Ellis
-# Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-# Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-# Portions Copyright © 2009 The Go Authors. All rights reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-awk '
-BEGIN {
- print "char* anames[] ="
- print "{"
-}
-
-/^ A/ {
- name=$1
- sub(/,/, "", name)
- sub(/^A/, "", name)
- print "\t\"" name "\","
-}
-
-END { print "};" }
-' ../5l/5.out.h >enam.c
diff --git a/src/cmd/5l/noop.c b/src/cmd/5l/noop.c
deleted file mode 100644
index d42c86289..000000000
--- a/src/cmd/5l/noop.c
+++ /dev/null
@@ -1,43 +0,0 @@
-// Inferno utils/5l/noop.c
-// http://code.google.com/p/inferno-os/source/browse/utils/5l/noop.c
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-// Code transformations.
-
-#include "l.h"
-#include "../ld/lib.h"
-
-void
-noops(void)
-{
- LSym *s;
-
- for(s = ctxt->textp; s != nil; s = s->next)
- ctxt->arch->addstacksplit(ctxt, s);
-}
diff --git a/src/cmd/5l/obj.c b/src/cmd/5l/obj.c
index 86a0ece2e..c6f60ee7c 100644
--- a/src/cmd/5l/obj.c
+++ b/src/cmd/5l/obj.c
@@ -63,6 +63,7 @@ archinit(void)
break;
case Hlinux:
case Hfreebsd:
+ case Hnacl:
break;
}
@@ -82,7 +83,6 @@ archinit(void)
case Hlinux: /* arm elf */
case Hfreebsd:
case Hnetbsd:
- case Hnacl:
debug['d'] = 0; // with dynamic linking
elfinit();
HEADR = ELFRESERVE;
@@ -93,6 +93,17 @@ archinit(void)
if(INITRND == -1)
INITRND = 4096;
break;
+ case Hnacl:
+ elfinit();
+ HEADR = 0x10000;
+ funcalign = 16;
+ if(INITTEXT == -1)
+ INITTEXT = 0x20000;
+ if(INITDAT == -1)
+ INITDAT = 0;
+ if(INITRND == -1)
+ INITRND = 0x10000;
+ break;
}
if(INITDAT != 0 && INITRND != 0)
print("warning: -D0x%ux is ignored because of -R0x%ux\n",
diff --git a/src/cmd/6a/a.y b/src/cmd/6a/a.y
index 6fd491067..1089d4061 100644
--- a/src/cmd/6a/a.y
+++ b/src/cmd/6a/a.y
@@ -33,7 +33,7 @@
#include <stdio.h> /* if we don't, bison will, and a.h re-#defines getc */
#include <libc.h>
#include "a.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
%}
%union {
Sym *sym;
diff --git a/src/cmd/6a/lex.c b/src/cmd/6a/lex.c
index 167e6b6c1..8973d6974 100644
--- a/src/cmd/6a/lex.c
+++ b/src/cmd/6a/lex.c
@@ -101,6 +101,7 @@ main(int argc, char *argv[])
ctxt = linknew(thelinkarch);
ctxt->diag = yyerror;
ctxt->bso = &bstdout;
+ ctxt->enforce_data_order = 1;
Binit(&bstdout, 1, OWRITE);
listinit6();
fmtinstall('L', Lconv);
@@ -435,49 +436,49 @@ struct
"IRETQ", LTYPE0, AIRETQ,
"IRETW", LTYPE0, AIRETW,
- "JOS", LTYPER, AJOS,
+ "JOS", LTYPER, AJOS, /* overflow set (OF = 1) */
"JO", LTYPER, AJOS, /* alternate */
- "JOC", LTYPER, AJOC,
+ "JOC", LTYPER, AJOC, /* overflow clear (OF = 0) */
"JNO", LTYPER, AJOC, /* alternate */
- "JCS", LTYPER, AJCS,
+ "JCS", LTYPER, AJCS, /* carry set (CF = 1) */
"JB", LTYPER, AJCS, /* alternate */
"JC", LTYPER, AJCS, /* alternate */
"JNAE", LTYPER, AJCS, /* alternate */
"JLO", LTYPER, AJCS, /* alternate */
- "JCC", LTYPER, AJCC,
+ "JCC", LTYPER, AJCC, /* carry clear (CF = 0) */
"JAE", LTYPER, AJCC, /* alternate */
"JNB", LTYPER, AJCC, /* alternate */
"JNC", LTYPER, AJCC, /* alternate */
"JHS", LTYPER, AJCC, /* alternate */
- "JEQ", LTYPER, AJEQ,
+ "JEQ", LTYPER, AJEQ, /* equal (ZF = 1) */
"JE", LTYPER, AJEQ, /* alternate */
"JZ", LTYPER, AJEQ, /* alternate */
- "JNE", LTYPER, AJNE,
+ "JNE", LTYPER, AJNE, /* not equal (ZF = 0) */
"JNZ", LTYPER, AJNE, /* alternate */
- "JLS", LTYPER, AJLS,
+ "JLS", LTYPER, AJLS, /* lower or same (unsigned) (CF = 1 || ZF = 1) */
"JBE", LTYPER, AJLS, /* alternate */
"JNA", LTYPER, AJLS, /* alternate */
- "JHI", LTYPER, AJHI,
+ "JHI", LTYPER, AJHI, /* higher (unsigned) (CF = 0 && ZF = 0) */
"JA", LTYPER, AJHI, /* alternate */
"JNBE", LTYPER, AJHI, /* alternate */
- "JMI", LTYPER, AJMI,
+ "JMI", LTYPER, AJMI, /* negative (minus) (SF = 1) */
"JS", LTYPER, AJMI, /* alternate */
- "JPL", LTYPER, AJPL,
+ "JPL", LTYPER, AJPL, /* non-negative (plus) (SF = 0) */
"JNS", LTYPER, AJPL, /* alternate */
- "JPS", LTYPER, AJPS,
+ "JPS", LTYPER, AJPS, /* parity set (PF = 1) */
"JP", LTYPER, AJPS, /* alternate */
"JPE", LTYPER, AJPS, /* alternate */
- "JPC", LTYPER, AJPC,
+ "JPC", LTYPER, AJPC, /* parity clear (PF = 0) */
"JNP", LTYPER, AJPC, /* alternate */
"JPO", LTYPER, AJPC, /* alternate */
- "JLT", LTYPER, AJLT,
+ "JLT", LTYPER, AJLT, /* less than (signed) (SF != OF) */
"JL", LTYPER, AJLT, /* alternate */
"JNGE", LTYPER, AJLT, /* alternate */
- "JGE", LTYPER, AJGE,
+ "JGE", LTYPER, AJGE, /* greater than or equal (signed) (SF = OF) */
"JNL", LTYPER, AJGE, /* alternate */
- "JLE", LTYPER, AJLE,
+ "JLE", LTYPER, AJLE, /* less than or equal (signed) (ZF = 1 || SF != OF) */
"JNG", LTYPER, AJLE, /* alternate */
- "JGT", LTYPER, AJGT,
+ "JGT", LTYPER, AJGT, /* greater than (signed) (ZF = 0 && SF = OF) */
"JG", LTYPER, AJGT, /* alternate */
"JNLE", LTYPER, AJGT, /* alternate */
"JCXZL", LTYPER, AJCXZL,
@@ -612,7 +613,7 @@ struct
"SCASL", LTYPE0, ASCASL,
"SCASQ", LTYPE0, ASCASQ,
"SCASW", LTYPE0, ASCASW,
- "SETCC", LTYPE1, ASETCC,
+ "SETCC", LTYPE1, ASETCC, /* see JCC etc above for condition codes */
"SETCS", LTYPE1, ASETCS,
"SETEQ", LTYPE1, ASETEQ,
"SETGE", LTYPE1, ASETGE,
diff --git a/src/cmd/6a/y.tab.c b/src/cmd/6a/y.tab.c
index a4f0f74cc..b69fd95b5 100644
--- a/src/cmd/6a/y.tab.c
+++ b/src/cmd/6a/y.tab.c
@@ -150,7 +150,7 @@
#include <stdio.h> /* if we don't, bison will, and a.h re-#defines getc */
#include <libc.h>
#include "a.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
/* Enabling traces. */
diff --git a/src/cmd/6c/cgen.c b/src/cmd/6c/cgen.c
index bdef76ff0..68dd7bb5f 100644
--- a/src/cmd/6c/cgen.c
+++ b/src/cmd/6c/cgen.c
@@ -29,7 +29,7 @@
// THE SOFTWARE.
#include "gc.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
/* ,x/^(print|prtree)\(/i/\/\/ */
int castup(Type*, Type*);
@@ -51,7 +51,7 @@ cgen(Node *n, Node *nn)
}
if(n == Z || n->type == T)
return;
- if(typesu[n->type->etype]) {
+ if(typesu[n->type->etype] && (n->op != OFUNC || nn != Z)) {
sugen(n, nn, n->type->width);
return;
}
@@ -88,7 +88,7 @@ cgen(Node *n, Node *nn)
if(cond(o) && typesu[l->type->etype])
break;
- regret(&nod, r);
+ regret(&nod, r, 0, 0);
cgen(r, &nod);
regsalloc(&nod1, r);
@@ -135,7 +135,7 @@ cgen(Node *n, Node *nn)
if(!hardleft) {
if(nn != Z || r->addable < INDEXED || hardconst(r)) {
if(r->complex >= FNX && nn == Z)
- regret(&nod, r);
+ regret(&nod, r, 0, 0);
else
regalloc(&nod, r, nn);
cgen(r, &nod);
@@ -929,7 +929,7 @@ cgen(Node *n, Node *nn)
if(l->op != OIND)
diag(n, "bad function call");
- regret(&nod, l->left);
+ regret(&nod, l->left, 0, 0);
cgen(l->left, &nod);
regsalloc(&nod1, l->left);
gmove(&nod, &nod1);
@@ -945,7 +945,6 @@ cgen(Node *n, Node *nn)
return;
}
gargs(r, &nod, &nod1);
- gpcdata(PCDATA_ArgSize, curarg);
if(l->addable < INDEXED) {
reglcgen(&nod, l, nn);
nod.op = OREGISTER;
@@ -953,14 +952,13 @@ cgen(Node *n, Node *nn)
regfree(&nod);
} else
gopcode(OFUNC, n->type, Z, l);
- gpcdata(PCDATA_ArgSize, -1);
if(REGARG >= 0 && reg[REGARG])
reg[REGARG]--;
- if(nn != Z) {
- regret(&nod, n);
+ regret(&nod, n, l->type, 1); // update maxarg if nothing else
+ if(nn != Z)
gmove(&nod, nn);
+ if(nod.op == OREGISTER)
regfree(&nod);
- }
break;
case OIND:
@@ -1382,7 +1380,7 @@ boolgen(Node *n, int true, Node *nn)
if(true)
o = comrel[relindex(o)];
if(l->complex >= FNX && r->complex >= FNX) {
- regret(&nod, r);
+ regret(&nod, r, 0, 0);
cgen(r, &nod);
regsalloc(&nod1, r);
gmove(&nod, &nod1);
@@ -1535,7 +1533,7 @@ sugen(Node *n, Node *nn, int32 w)
if(nn != Z && side(nn)) {
nod1 = *n;
nod1.type = typ(TIND, n->type);
- regret(&nod2, &nod1);
+ regret(&nod2, &nod1, 0, 0);
lcgen(nn, &nod2);
regsalloc(&nod0, &nod1);
cgen(&nod2, &nod0);
@@ -1617,6 +1615,20 @@ sugen(Node *n, Node *nn, int32 w)
break;
case OFUNC:
+ if(!hasdotdotdot(n->left->type)) {
+ cgen(n, Z);
+ if(nn != Z) {
+ curarg -= n->type->width;
+ regret(&nod1, n, n->left->type, 1);
+ if(nn->complex >= FNX) {
+ regsalloc(&nod2, n);
+ cgen(&nod1, &nod2);
+ nod1 = nod2;
+ }
+ cgen(&nod1, nn);
+ }
+ break;
+ }
if(nn == Z) {
sugen(n, nodrat, w);
break;
diff --git a/src/cmd/6c/gc.h b/src/cmd/6c/gc.h
index a196e55a8..aa9d95d21 100644
--- a/src/cmd/6c/gc.h
+++ b/src/cmd/6c/gc.h
@@ -143,7 +143,6 @@ EXTERN int32 cursafe;
EXTERN Prog* lastp;
EXTERN int32 maxargsafe;
EXTERN int mnstring;
-EXTERN int retok;
EXTERN Node* nodrat;
EXTERN Node* nodret;
EXTERN Node* nodsafe;
@@ -211,7 +210,7 @@ void xcom(Node*);
void indx(Node*);
int bcomplex(Node*, Node*);
Prog* gtext(Sym*, int32);
-vlong argsize(void);
+vlong argsize(int);
/*
* cgen.c
@@ -240,7 +239,7 @@ Node* nodfconst(double);
Node* nodgconst(vlong, Type*);
int nodreg(Node*, Node*, int);
int isreg(Node*, int);
-void regret(Node*, Node*);
+void regret(Node*, Node*, Type*, int);
void regalloc(Node*, Node*, Node*);
void regfree(Node*);
void regialloc(Node*, Node*, Node*);
diff --git a/src/cmd/6c/reg.c b/src/cmd/6c/reg.c
index 348d747b7..6f8d3ce14 100644
--- a/src/cmd/6c/reg.c
+++ b/src/cmd/6c/reg.c
@@ -585,14 +585,11 @@ loop2:
}
rgp->cost = change;
nregion++;
- if(nregion >= NRGN) {
- warn(Z, "too many regions");
- goto brk;
- }
+ if(nregion >= NRGN)
+ fatal(Z, "too many regions");
rgp++;
}
}
-brk:
qsort(region, nregion, sizeof(region[0]), rcmp);
/*
@@ -808,11 +805,8 @@ mkvar(Reg *r, Addr *a)
goto out;
v++;
}
- if(nvar >= NVAR) {
- if(debug['w'] > 1 && s)
- warn(Z, "variable not optimized: %s", s->name);
- goto none;
- }
+ if(nvar >= NVAR)
+ fatal(Z, "variable not optimized: %s", s->name);
i = nvar;
nvar++;
v = &var[i];
diff --git a/src/cmd/6c/sgen.c b/src/cmd/6c/sgen.c
index ba1c1f652..fceb332b2 100644
--- a/src/cmd/6c/sgen.c
+++ b/src/cmd/6c/sgen.c
@@ -29,14 +29,14 @@
// THE SOFTWARE.
#include "gc.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
Prog*
gtext(Sym *s, int32 stkoff)
{
vlong v;
- v = ((uvlong)argsize() << 32) | (stkoff & 0xffffffff);
+ v = ((uvlong)argsize(1) << 32) | (stkoff & 0xffffffff);
if((textflag & NOSPLIT) && stkoff >= 128)
yyerror("stack frame too large for NOSPLIT function");
@@ -124,10 +124,7 @@ xcom(Node *n)
break;
case ONAME:
- if(flag_largemodel)
- n->addable = 9;
- else
- n->addable = 10;
+ n->addable = 9;
if(n->class == CPARAM || n->class == CAUTO)
n->addable = 11;
break;
diff --git a/src/cmd/6c/swt.c b/src/cmd/6c/swt.c
index d7713648d..6e918eb10 100644
--- a/src/cmd/6c/swt.c
+++ b/src/cmd/6c/swt.c
@@ -250,10 +250,11 @@ align(int32 i, Type *t, int op, int32 *maxalign)
{
int32 o;
Type *v;
- int w;
+ int w, packw;
o = i;
w = 1;
+ packw = 0;
switch(op) {
default:
diag(Z, "unknown align opcode %d", op);
@@ -264,7 +265,7 @@ align(int32 i, Type *t, int op, int32 *maxalign)
if(w < 1)
w = 1;
if(packflg)
- w = packflg;
+ packw = packflg;
break;
case Ael1: /* initial align of struct element */
@@ -277,7 +278,7 @@ align(int32 i, Type *t, int op, int32 *maxalign)
if(w < 1 || w > SZ_VLONG)
fatal(Z, "align");
if(packflg)
- w = packflg;
+ packw = packflg;
break;
case Ael2: /* width of a struct element */
@@ -331,6 +332,8 @@ align(int32 i, Type *t, int op, int32 *maxalign)
o = align(o, t, Ael2, nil);
break;
}
+ if(packw != 0 && xround(o, w) != xround(o, packw))
+ diag(Z, "#pragma pack changes offset of %T", t);
o = xround(o, w);
if(maxalign && *maxalign < w)
*maxalign = w;
diff --git a/src/cmd/6c/txt.c b/src/cmd/6c/txt.c
index 4d07436c3..3bdbf410e 100644
--- a/src/cmd/6c/txt.c
+++ b/src/cmd/6c/txt.c
@@ -351,15 +351,43 @@ nodreg(Node *n, Node *nn, int r)
}
void
-regret(Node *n, Node *nn)
+regret(Node *n, Node *nn, Type *t, int mode)
{
int r;
+
+ if(mode == 0 || hasdotdotdot(t) || nn->type->width == 0) {
+ r = REGRET;
+ if(typefd[nn->type->etype])
+ r = FREGRET;
+ nodreg(n, nn, r);
+ reg[r]++;
+ return;
+ }
+
+ if(mode == 1) {
+ // fetch returned value after call.
+ // already called gargs, so curarg is set.
+ curarg = (curarg+7) & ~7;
+ regaalloc(n, nn);
+ return;
+ }
- r = REGRET;
- if(typefd[nn->type->etype])
- r = FREGRET;
- nodreg(n, nn, r);
- reg[r]++;
+ if(mode == 2) {
+ // store value to be returned.
+ // must compute arg offset.
+ if(t->etype != TFUNC)
+ fatal(Z, "bad regret func %T", t);
+ *n = *nn;
+ n->op = ONAME;
+ n->class = CPARAM;
+ n->sym = slookup(".ret");
+ n->complex = nodret->complex;
+ n->addable = 20;
+ n->xoffset = argsize(0);
+ return;
+ }
+
+ fatal(Z, "bad regret");
}
void
diff --git a/src/cmd/6g/cgen.c b/src/cmd/6g/cgen.c
index 4dd505b08..d13c98dad 100644
--- a/src/cmd/6g/cgen.c
+++ b/src/cmd/6g/cgen.c
@@ -247,7 +247,6 @@ cgen(Node *n, Node *res)
case OOR:
case OXOR:
case OADD:
- case OADDPTR:
case OMUL:
a = optoas(n->op, nl->type);
if(a == AIMULB) {
@@ -752,12 +751,7 @@ agenr(Node *n, Node *a, Node *res)
regalloc(&n3, types[tptr], res);
p1 = gins(ALEAQ, N, &n3);
datastring(nl->val.u.sval->s, nl->val.u.sval->len, &p1->from);
- if(flag_largemodel) {
- gins(AADDQ, &n2, &n3);
- } else {
- p1->from.scale = 1;
- p1->from.index = n2.val.u.reg;
- }
+ gins(AADDQ, &n2, &n3);
goto indexdone;
}
@@ -1457,7 +1451,7 @@ sgen(Node *n, Node *ns, int64 w)
p = gins(ADUFFCOPY, N, N);
p->to.type = D_ADDR;
p->to.sym = linksym(pkglookup("duffcopy", runtimepkg));
- // 14 and 128 = magic constants: see ../../pkg/runtime/asm_amd64.s
+ // 14 and 128 = magic constants: see ../../runtime/asm_amd64.s
p->to.offset = 14*(128-q);
} else
while(q > 0) {
diff --git a/src/cmd/6g/galign.c b/src/cmd/6g/galign.c
index 1d32c5a61..5670e6fac 100644
--- a/src/cmd/6g/galign.c
+++ b/src/cmd/6g/galign.c
@@ -30,10 +30,10 @@ int cmpptr = ACMPQ;
*/
Typedef typedefs[] =
{
- "int", TINT, TINT64,
- "uint", TUINT, TUINT64,
- "uintptr", TUINTPTR, TUINT64,
- 0
+ {"int", TINT, TINT64},
+ {"uint", TUINT, TUINT64},
+ {"uintptr", TUINTPTR, TUINT64},
+ {0}
};
void
diff --git a/src/cmd/6g/gg.h b/src/cmd/6g/gg.h
index a5da17d61..fe69d5c96 100644
--- a/src/cmd/6g/gg.h
+++ b/src/cmd/6g/gg.h
@@ -51,7 +51,6 @@ void allocparams(void);
void checklabels(void);
void ginscall(Node*, int);
int gen_as_init(Node*);
-void clearslim(Node*);
/*
* cgen.c
@@ -100,7 +99,6 @@ int sudoaddable(int, Node*, Addr*);
void afunclit(Addr*, Node*);
void nodfconst(Node*, Type*, Mpflt*);
void gtrack(Sym*);
-void gargsize(vlong);
void fixlargeoffset(Node *n);
/*
diff --git a/src/cmd/6g/ggen.c b/src/cmd/6g/ggen.c
index 9665d831b..363620769 100644
--- a/src/cmd/6g/ggen.c
+++ b/src/cmd/6g/ggen.c
@@ -175,7 +175,6 @@ fixautoused(Prog *p)
void
ginscall(Node *f, int proc)
{
- int32 arg;
Prog *p;
Node reg, con;
Node r1;
@@ -183,21 +182,6 @@ ginscall(Node *f, int proc)
if(f->type != T)
setmaxarg(f->type);
- arg = -1;
- // Most functions have a fixed-size argument block, so traceback uses that during unwind.
- // Not all, though: there are some variadic functions in package runtime,
- // and for those we emit call-specific metadata recorded by caller.
- // Reflect generates functions with variable argsize (see reflect.methodValueCall/makeFuncStub),
- // so we do this for all indirect calls as well.
- if(f->type != T && (f->sym == S || (f->sym != S && f->sym->pkg == runtimepkg) || proc == 1 || proc == 2)) {
- arg = f->type->argwid;
- if(proc == 1 || proc == 2)
- arg += 2*widthptr;
- }
-
- if(arg != -1)
- gargsize(arg);
-
switch(proc) {
default:
fatal("ginscall: bad proc %d", proc);
@@ -275,9 +259,6 @@ ginscall(Node *f, int proc)
}
break;
}
-
- if(arg != -1)
- gargsize(-1);
}
/*
@@ -1121,26 +1102,54 @@ clearfat(Node *nl)
c = w % 8; // bytes
q = w / 8; // quads
+ if(q < 4) {
+ // Write sequence of MOV 0, off(base) instead of using STOSQ.
+ // The hope is that although the code will be slightly longer,
+ // the MOVs will have no dependencies and pipeline better
+ // than the unrolled STOSQ loop.
+ // NOTE: Must use agen, not igen, so that optimizer sees address
+ // being taken. We are not writing on field boundaries.
+ agenr(nl, &n1, N);
+ n1.op = OINDREG;
+ nodconst(&z, types[TUINT64], 0);
+ while(q-- > 0) {
+ n1.type = z.type;
+ gins(AMOVQ, &z, &n1);
+ n1.xoffset += 8;
+ }
+ if(c >= 4) {
+ nodconst(&z, types[TUINT32], 0);
+ n1.type = z.type;
+ gins(AMOVL, &z, &n1);
+ n1.xoffset += 4;
+ c -= 4;
+ }
+ nodconst(&z, types[TUINT8], 0);
+ while(c-- > 0) {
+ n1.type = z.type;
+ gins(AMOVB, &z, &n1);
+ n1.xoffset++;
+ }
+ regfree(&n1);
+ return;
+ }
+
savex(D_DI, &n1, &oldn1, N, types[tptr]);
agen(nl, &n1);
savex(D_AX, &ax, &oldax, N, types[tptr]);
gconreg(AMOVL, 0, D_AX);
- if(q > 128 || (q >= 4 && nacl)) {
+ if(q > 128 || nacl) {
gconreg(movptr, q, D_CX);
gins(AREP, N, N); // repeat
gins(ASTOSQ, N, N); // STOQ AL,*(DI)+
- } else if(q >= 4) {
+ } else {
p = gins(ADUFFZERO, N, N);
p->to.type = D_ADDR;
p->to.sym = linksym(pkglookup("duffzero", runtimepkg));
- // 2 and 128 = magic constants: see ../../pkg/runtime/asm_amd64.s
+ // 2 and 128 = magic constants: see ../../runtime/asm_amd64.s
p->to.offset = 2*(128-q);
- } else
- while(q > 0) {
- gins(ASTOSQ, N, N); // STOQ AL,*(DI)+
- q--;
}
z = ax;
diff --git a/src/cmd/6g/gsubr.c b/src/cmd/6g/gsubr.c
index e4d00bf41..5bd924660 100644
--- a/src/cmd/6g/gsubr.c
+++ b/src/cmd/6g/gsubr.c
@@ -31,11 +31,11 @@
#include <u.h>
#include <libc.h>
#include "gg.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
// TODO(rsc): Can make this bigger if we move
// the text segment up higher in 6l for all GOOS.
-// At the same time, can raise StackBig in ../../pkg/runtime/stack.h.
+// At the same time, can raise StackBig in ../../runtime/stack.h.
vlong unmappedzero = 4096;
void
@@ -215,17 +215,7 @@ gtrack(Sym *s)
}
void
-gargsize(vlong size)
-{
- Node n1, n2;
-
- nodconst(&n1, types[TINT32], PCDATA_ArgSize);
- nodconst(&n2, types[TINT32], size);
- gins(APCDATA, &n1, &n2);
-}
-
-void
-ggloblsym(Sym *s, int32 width, int dupok, int rodata)
+ggloblsym(Sym *s, int32 width, int8 flags)
{
Prog *p;
@@ -236,10 +226,7 @@ ggloblsym(Sym *s, int32 width, int dupok, int rodata)
p->to.type = D_CONST;
p->to.index = D_NONE;
p->to.offset = width;
- if(dupok)
- p->from.scale |= DUPOK;
- if(rodata)
- p->from.scale |= RODATA;
+ p->from.scale = flags;
}
int
@@ -584,6 +571,7 @@ ginscon(int as, vlong c, Node *n2)
}
#define CASE(a,b) (((a)<<16)|((b)<<0))
+/*c2go int CASE(int, int); */
/*
* Is this node a memory operand?
@@ -600,11 +588,8 @@ ismem(Node *n)
case ONAME:
case OPARAM:
case OCLOSUREVAR:
- return 1;
case OADDR:
- if(flag_largemodel)
- return 1;
- break;
+ return 1;
}
return 0;
}
@@ -1542,14 +1527,12 @@ optoas(int op, Type *t)
case CASE(OADD, TINT32):
case CASE(OADD, TUINT32):
case CASE(OADD, TPTR32):
- case CASE(OADDPTR, TPTR32):
a = AADDL;
break;
case CASE(OADD, TINT64):
case CASE(OADD, TUINT64):
case CASE(OADD, TPTR64):
- case CASE(OADDPTR, TPTR64):
a = AADDQ;
break;
diff --git a/src/cmd/6g/opt.h b/src/cmd/6g/opt.h
index bf356af0c..dbd039d89 100644
--- a/src/cmd/6g/opt.h
+++ b/src/cmd/6g/opt.h
@@ -49,6 +49,24 @@
typedef struct Reg Reg;
typedef struct Rgn Rgn;
+/*c2go
+extern Node *Z;
+enum
+{
+ D_HI = D_NONE,
+ D_LO = D_NONE,
+ CLOAD = 5,
+ CREF = 5,
+ CINF = 1000,
+ LOOP = 3,
+};
+
+uint32 BLOAD(Reg*);
+uint32 BSTORE(Reg*);
+uint32 LOAD(Reg*);
+uint32 STORE(Reg*);
+*/
+
// A Reg is a wrapper around a single Prog (one instruction) that holds
// register optimization information while the optimizer runs.
// r->prog is the instruction.
@@ -71,8 +89,10 @@ struct Reg
int32 regu; // register used bitmap
};
#define R ((Reg*)0)
+/*c2go extern Reg *R; */
#define NRGN 600
+/*c2go enum { NRGN = 600 }; */
struct Rgn
{
Reg* enter;
diff --git a/src/cmd/6g/reg.c b/src/cmd/6g/reg.c
index f3b1e55de..1f757e197 100644
--- a/src/cmd/6g/reg.c
+++ b/src/cmd/6g/reg.c
@@ -35,6 +35,11 @@
#define NREGVAR 32 /* 16 general + 16 floating */
#define REGBITS ((uint32)0xffffffff)
+/*c2go enum {
+ NREGVAR = 32,
+ REGBITS = 0xffffffff,
+};
+*/
static Reg* firstr;
static int first = 1;
@@ -839,7 +844,7 @@ prop(Reg *r, Bits ref, Bits cal)
if(v == v1 || ((cal.b[j/32]>>(j&31))&1) == 0) {
for(; v1 != nil; v1 = v1->nextinnode) {
j = v1 - var;
- cal.b[j/32] |= 1<<(j&31);
+ cal.b[j/32] |= 1UL<<(j&31);
}
}
}
@@ -1186,6 +1191,7 @@ void
addreg(Adr *a, int rn)
{
a->sym = nil;
+ a->node = nil;
a->offset = 0;
a->type = rn;
diff --git a/src/cmd/6l/6.out.h b/src/cmd/6l/6.out.h
index 1e2a1488f..af72784e8 100644
--- a/src/cmd/6l/6.out.h
+++ b/src/cmd/6l/6.out.h
@@ -36,7 +36,7 @@
* amd64
*/
-enum as
+enum
{
AXXX,
AAAA,
diff --git a/src/cmd/6l/asm.c b/src/cmd/6l/asm.c
index 7828e2892..18b5aa311 100644
--- a/src/cmd/6l/asm.c
+++ b/src/cmd/6l/asm.c
@@ -290,7 +290,6 @@ elfreloc1(Reloc *r, vlong sectoff)
break;
case R_CALL:
- case R_PCREL:
if(r->siz == 4) {
if(r->xsym->type == SDYNIMPORT)
VPUT(R_X86_64_GOTPCREL | (uint64)elfsym<<32);
@@ -299,7 +298,14 @@ elfreloc1(Reloc *r, vlong sectoff)
} else
return -1;
break;
-
+
+ case R_PCREL:
+ if(r->siz == 4) {
+ VPUT(R_X86_64_PC32 | (uint64)elfsym<<32);
+ } else
+ return -1;
+ break;
+
case R_TLS:
if(r->siz == 4) {
if(flag_shared)
@@ -323,7 +329,7 @@ machoreloc1(Reloc *r, vlong sectoff)
rs = r->xsym;
- if(rs->type == SHOSTOBJ) {
+ if(rs->type == SHOSTOBJ || r->type == R_PCREL) {
if(rs->dynid < 0) {
diag("reloc %d to non-macho symbol %s type=%d", r->type, rs->name, rs->type);
return -1;
@@ -345,10 +351,13 @@ machoreloc1(Reloc *r, vlong sectoff)
v |= MACHO_X86_64_RELOC_UNSIGNED<<28;
break;
case R_CALL:
- case R_PCREL:
v |= 1<<24; // pc-relative bit
v |= MACHO_X86_64_RELOC_BRANCH<<28;
break;
+ case R_PCREL:
+ // NOTE: Only works with 'external' relocation. Forced above.
+ v |= 1<<24; // pc-relative bit
+ v |= MACHO_X86_64_RELOC_SIGNED<<28;
}
switch(r->siz) {
diff --git a/src/cmd/6l/l.h b/src/cmd/6l/l.h
index 7303910a6..ff2e69452 100644
--- a/src/cmd/6l/l.h
+++ b/src/cmd/6l/l.h
@@ -68,14 +68,9 @@ EXTERN int RegSize;
#define P ((Prog*)0)
#define S ((LSym*)0)
-#define TNAME (ctxt->cursym?ctxt->cursym->name:noname)
enum
{
- MINSIZ = 8,
- STRINGSZ = 200,
MINLC = 1,
- MAXIO = 8192,
- MAXHIST = 40, /* limit of path elements for history symbols */
};
#pragma varargck type "I" uchar*
@@ -89,9 +84,6 @@ EXTERN int32 spsize;
EXTERN LSym* symlist;
EXTERN int32 symsize;
-EXTERN vlong textstksiz;
-EXTERN vlong textarg;
-
int Iconv(Fmt *fp);
void adddynlib(char *lib);
void adddynrel(LSym *s, Reloc *r);
@@ -103,8 +95,6 @@ int elfreloc1(Reloc *r, vlong sectoff);
void elfsetupplt(void);
void listinit(void);
int machoreloc1(Reloc *r, vlong sectoff);
-void main(int argc, char *argv[]);
-void parsetextconst(vlong arg);
vlong rnd(vlong v, vlong r);
/* Native is little-endian */
diff --git a/src/cmd/6l/mkenam b/src/cmd/6l/mkenam
deleted file mode 100644
index 3001dbe93..000000000
--- a/src/cmd/6l/mkenam
+++ /dev/null
@@ -1,45 +0,0 @@
-# Inferno utils/6c/mkenam
-# http://code.google.com/p/inferno-os/source/browse/utils/6c/mkenam
-#
-# Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-# Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-# Portions Copyright © 1997-1999 Vita Nuova Limited
-# Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-# Portions Copyright © 2004,2006 Bruce Ellis
-# Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-# Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-# Portions Copyright © 2009 The Go Authors. All rights reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-awk '
-BEGIN {
- print "char* anames[] ="
- print "{"
-}
-
-/^ A/ {
- name=$1
- sub(/,/, "", name)
- sub(/^A/, "", name)
- print "\t\"" name "\","
-}
-
-END { print "};" }
-' ../6l/6.out.h >enam.c
diff --git a/src/cmd/8a/a.y b/src/cmd/8a/a.y
index d7ff623da..6bcf1313b 100644
--- a/src/cmd/8a/a.y
+++ b/src/cmd/8a/a.y
@@ -33,7 +33,7 @@
#include <stdio.h> /* if we don't, bison will, and a.h re-#defines getc */
#include <libc.h>
#include "a.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
%}
%union {
Sym *sym;
diff --git a/src/cmd/8a/lex.c b/src/cmd/8a/lex.c
index 32c099b75..6ce6a18ab 100644
--- a/src/cmd/8a/lex.c
+++ b/src/cmd/8a/lex.c
@@ -90,6 +90,7 @@ main(int argc, char *argv[])
ctxt = linknew(&link386);
ctxt->diag = yyerror;
ctxt->bso = &bstdout;
+ ctxt->enforce_data_order = 1;
Binit(&bstdout, 1, OWRITE);
listinit8();
fmtinstall('L', Lconv);
@@ -352,49 +353,49 @@ struct
"IRETL", LTYPE0, AIRETL,
"IRETW", LTYPE0, AIRETW,
- "JOS", LTYPER, AJOS,
+ "JOS", LTYPER, AJOS, /* overflow set (OF = 1) */
"JO", LTYPER, AJOS, /* alternate */
- "JOC", LTYPER, AJOC,
+ "JOC", LTYPER, AJOC, /* overflow clear (OF = 0) */
"JNO", LTYPER, AJOC, /* alternate */
- "JCS", LTYPER, AJCS,
+ "JCS", LTYPER, AJCS, /* carry set (CF = 1) */
"JB", LTYPER, AJCS, /* alternate */
"JC", LTYPER, AJCS, /* alternate */
"JNAE", LTYPER, AJCS, /* alternate */
"JLO", LTYPER, AJCS, /* alternate */
- "JCC", LTYPER, AJCC,
+ "JCC", LTYPER, AJCC, /* carry clear (CF = 0) */
"JAE", LTYPER, AJCC, /* alternate */
"JNB", LTYPER, AJCC, /* alternate */
"JNC", LTYPER, AJCC, /* alternate */
"JHS", LTYPER, AJCC, /* alternate */
- "JEQ", LTYPER, AJEQ,
+ "JEQ", LTYPER, AJEQ, /* equal (ZF = 1) */
"JE", LTYPER, AJEQ, /* alternate */
"JZ", LTYPER, AJEQ, /* alternate */
- "JNE", LTYPER, AJNE,
+ "JNE", LTYPER, AJNE, /* not equal (ZF = 0) */
"JNZ", LTYPER, AJNE, /* alternate */
- "JLS", LTYPER, AJLS,
+ "JLS", LTYPER, AJLS, /* lower or same (unsigned) (CF = 1 || ZF = 1) */
"JBE", LTYPER, AJLS, /* alternate */
"JNA", LTYPER, AJLS, /* alternate */
- "JHI", LTYPER, AJHI,
+ "JHI", LTYPER, AJHI, /* higher (unsigned) (CF = 0 && ZF = 0) */
"JA", LTYPER, AJHI, /* alternate */
"JNBE", LTYPER, AJHI, /* alternate */
- "JMI", LTYPER, AJMI,
+ "JMI", LTYPER, AJMI, /* negative (minus) (SF = 1) */
"JS", LTYPER, AJMI, /* alternate */
- "JPL", LTYPER, AJPL,
+ "JPL", LTYPER, AJPL, /* non-negative (plus) (SF = 0) */
"JNS", LTYPER, AJPL, /* alternate */
- "JPS", LTYPER, AJPS,
+ "JPS", LTYPER, AJPS, /* parity set (PF = 1) */
"JP", LTYPER, AJPS, /* alternate */
"JPE", LTYPER, AJPS, /* alternate */
- "JPC", LTYPER, AJPC,
+ "JPC", LTYPER, AJPC, /* parity clear (PF = 0) */
"JNP", LTYPER, AJPC, /* alternate */
"JPO", LTYPER, AJPC, /* alternate */
- "JLT", LTYPER, AJLT,
+ "JLT", LTYPER, AJLT, /* less than (signed) (SF != OF) */
"JL", LTYPER, AJLT, /* alternate */
"JNGE", LTYPER, AJLT, /* alternate */
- "JGE", LTYPER, AJGE,
+ "JGE", LTYPER, AJGE, /* greater than or equal (signed) (SF = OF) */
"JNL", LTYPER, AJGE, /* alternate */
- "JLE", LTYPER, AJLE,
+ "JLE", LTYPER, AJLE, /* less than or equal (signed) (ZF = 1 || SF != OF) */
"JNG", LTYPER, AJLE, /* alternate */
- "JGT", LTYPER, AJGT,
+ "JGT", LTYPER, AJGT, /* greater than (signed) (ZF = 0 && SF = OF) */
"JG", LTYPER, AJGT, /* alternate */
"JNLE", LTYPER, AJGT, /* alternate */
@@ -493,7 +494,7 @@ struct
"SCASB", LTYPE0, ASCASB,
"SCASL", LTYPE0, ASCASL,
"SCASW", LTYPE0, ASCASW,
- "SETCC", LTYPE1, ASETCC,
+ "SETCC", LTYPE1, ASETCC, /* see JCC etc above for condition codes */
"SETCS", LTYPE1, ASETCS,
"SETEQ", LTYPE1, ASETEQ,
"SETGE", LTYPE1, ASETGE,
diff --git a/src/cmd/8a/y.tab.c b/src/cmd/8a/y.tab.c
index f48c9fe1f..85279c21f 100644
--- a/src/cmd/8a/y.tab.c
+++ b/src/cmd/8a/y.tab.c
@@ -146,7 +146,7 @@
#include <stdio.h> /* if we don't, bison will, and a.h re-#defines getc */
#include <libc.h>
#include "a.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
/* Enabling traces. */
diff --git a/src/cmd/8c/cgen.c b/src/cmd/8c/cgen.c
index f54102245..87e8fdad8 100644
--- a/src/cmd/8c/cgen.c
+++ b/src/cmd/8c/cgen.c
@@ -29,7 +29,7 @@
// THE SOFTWARE.
#include "gc.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
/* ,x/^(print|prtree)\(/i/\/\/ */
@@ -49,7 +49,7 @@ cgen(Node *n, Node *nn)
}
if(n == Z || n->type == T)
return;
- if(typesuv[n->type->etype]) {
+ if(typesuv[n->type->etype] && (n->op != OFUNC || nn != Z)) {
sugen(n, nn, n->type->width);
return;
}
@@ -86,7 +86,7 @@ cgen(Node *n, Node *nn)
if(cond(o) && typesuv[l->type->etype])
break;
- regret(&nod, r);
+ regret(&nod, r, 0, 0);
cgen(r, &nod);
regsalloc(&nod1, r);
@@ -147,7 +147,7 @@ cgen(Node *n, Node *nn)
if(!hardleft) {
if(nn != Z || r->addable < INDEXED) {
if(r->complex >= FNX && nn == Z)
- regret(&nod, r);
+ regret(&nod, r, 0, 0);
else
regalloc(&nod, r, nn);
cgen(r, &nod);
@@ -922,7 +922,7 @@ cgen(Node *n, Node *nn)
if(l->op != OIND)
diag(n, "bad function call");
- regret(&nod, l->left);
+ regret(&nod, l->left, 0, 0);
cgen(l->left, &nod);
regsalloc(&nod1, l->left);
gmove(&nod, &nod1);
@@ -938,7 +938,6 @@ cgen(Node *n, Node *nn)
return;
}
gargs(r, &nod, &nod1);
- gpcdata(PCDATA_ArgSize, curarg);
if(l->addable < INDEXED) {
reglcgen(&nod, l, nn);
nod.op = OREGISTER;
@@ -946,15 +945,14 @@ cgen(Node *n, Node *nn)
regfree(&nod);
} else
gopcode(OFUNC, n->type, Z, l);
- gpcdata(PCDATA_ArgSize, -1);
if(REGARG >= 0 && reg[REGARG])
reg[REGARG]--;
- if(nn != Z) {
- regret(&nod, n);
+ regret(&nod, n, l->type, 1); // update maxarg if nothing else
+ if(nn != Z)
gmove(&nod, nn);
+ if(nod.op == OREGISTER)
regfree(&nod);
- } else
- if(typefd[n->type->etype])
+ if(nn == Z && hasdotdotdot(l->type) && typefd[n->type->etype])
gins(AFMOVDP, &fregnode0, &fregnode0);
break;
@@ -1374,7 +1372,7 @@ boolgen(Node *n, int true, Node *nn)
if(true)
o = comrel[relindex(o)];
if(l->complex >= FNX && r->complex >= FNX) {
- regret(&nod, r);
+ regret(&nod, r, 0, 0);
cgen(r, &nod);
regsalloc(&nod1, r);
gmove(&nod, &nod1);
@@ -1567,7 +1565,7 @@ sugen(Node *n, Node *nn, int32 w)
if(nn != Z && side(nn)) {
nod1 = *n;
nod1.type = typ(TIND, n->type);
- regret(&nod2, &nod1);
+ regret(&nod2, &nod1, 0, 0);
lcgen(nn, &nod2);
regsalloc(&nod0, &nod1);
cgen(&nod2, &nod0);
@@ -1649,6 +1647,20 @@ sugen(Node *n, Node *nn, int32 w)
break;
case OFUNC:
+ if(!hasdotdotdot(n->left->type)) {
+ cgen(n, Z);
+ if(nn != Z) {
+ curarg -= n->type->width;
+ regret(&nod1, n, n->left->type, 1);
+ if(nn->complex >= FNX) {
+ regsalloc(&nod2, n);
+ cgen(&nod1, &nod2);
+ nod1 = nod2;
+ }
+ cgen(&nod1, nn);
+ }
+ break;
+ }
if(nn == Z) {
sugen(n, nodrat, w);
break;
diff --git a/src/cmd/8c/gc.h b/src/cmd/8c/gc.h
index 87b8e22bc..aa3888d73 100644
--- a/src/cmd/8c/gc.h
+++ b/src/cmd/8c/gc.h
@@ -143,7 +143,6 @@ EXTERN int32 cursafe;
EXTERN Prog* lastp;
EXTERN int32 maxargsafe;
EXTERN int mnstring;
-EXTERN int retok;
EXTERN Node* nodrat;
EXTERN Node* nodret;
EXTERN Node* nodsafe;
@@ -211,7 +210,7 @@ void xcom(Node*);
void indx(Node*);
int bcomplex(Node*, Node*);
Prog* gtext(Sym*, int32);
-vlong argsize(void);
+vlong argsize(int);
/*
* cgen.c
@@ -245,7 +244,7 @@ Node* nodconst(int32);
Node* nodfconst(double);
int nodreg(Node*, Node*, int);
int isreg(Node*, int);
-void regret(Node*, Node*);
+void regret(Node*, Node*, Type*, int);
void regalloc(Node*, Node*, Node*);
void regfree(Node*);
void regialloc(Node*, Node*, Node*);
diff --git a/src/cmd/8c/reg.c b/src/cmd/8c/reg.c
index e6ba8bcb3..ea862f388 100644
--- a/src/cmd/8c/reg.c
+++ b/src/cmd/8c/reg.c
@@ -518,7 +518,7 @@ loop2:
rgp->cost = change;
nregion++;
if(nregion >= NRGN) {
- warn(Z, "too many regions");
+ fatal(Z, "too many regions");
goto brk;
}
rgp++;
@@ -746,11 +746,8 @@ mkvar(Reg *r, Addr *a)
goto out;
v++;
}
- if(nvar >= NVAR) {
- if(debug['w'] > 1 && s)
- warn(Z, "variable not optimized: %s", s->name);
- goto none;
- }
+ if(nvar >= NVAR)
+ fatal(Z, "variable not optimized: %s", s->name);
i = nvar;
nvar++;
v = &var[i];
diff --git a/src/cmd/8c/sgen.c b/src/cmd/8c/sgen.c
index 069bbc1fc..d647010ef 100644
--- a/src/cmd/8c/sgen.c
+++ b/src/cmd/8c/sgen.c
@@ -35,7 +35,7 @@ gtext(Sym *s, int32 stkoff)
{
int32 a;
- a = argsize();
+ a = argsize(1);
if((textflag & NOSPLIT) != 0 && stkoff >= 128)
yyerror("stack frame too large for NOSPLIT function");
diff --git a/src/cmd/8c/swt.c b/src/cmd/8c/swt.c
index ae36f84ea..d960519e3 100644
--- a/src/cmd/8c/swt.c
+++ b/src/cmd/8c/swt.c
@@ -255,10 +255,11 @@ align(int32 i, Type *t, int op, int32 *maxalign)
{
int32 o;
Type *v;
- int w;
+ int w, packw;
o = i;
w = 1;
+ packw = 0;
switch(op) {
default:
diag(Z, "unknown align opcode %d", op);
@@ -269,7 +270,7 @@ align(int32 i, Type *t, int op, int32 *maxalign)
if(w < 1)
w = 1;
if(packflg)
- w = packflg;
+ packw = packflg;
break;
case Ael1: /* initial align of struct element */
@@ -285,7 +286,7 @@ align(int32 i, Type *t, int op, int32 *maxalign)
if(w < 1 || w > SZ_LONG)
fatal(Z, "align");
if(packflg)
- w = packflg;
+ packw = packflg;
break;
case Ael2: /* width of a struct element */
@@ -320,6 +321,8 @@ align(int32 i, Type *t, int op, int32 *maxalign)
o = align(o, t, Ael2, nil);
break;
}
+ if(packw != 0 && xround(o, w) != xround(o, packw))
+ diag(Z, "#pragma pack changes offset of %T", t);
o = xround(o, w);
if(maxalign && *maxalign < w)
*maxalign = w;
diff --git a/src/cmd/8c/txt.c b/src/cmd/8c/txt.c
index 25082de05..7f87a0a0d 100644
--- a/src/cmd/8c/txt.c
+++ b/src/cmd/8c/txt.c
@@ -311,15 +311,43 @@ nodreg(Node *n, Node *nn, int r)
}
void
-regret(Node *n, Node *nn)
+regret(Node *n, Node *nn, Type *t, int mode)
{
int r;
- r = REGRET;
- if(typefd[nn->type->etype])
- r = FREGRET;
- nodreg(n, nn, r);
- reg[r]++;
+ if(mode == 0 || hasdotdotdot(t) || nn->type->width == 0) {
+ r = REGRET;
+ if(typefd[nn->type->etype])
+ r = FREGRET;
+ nodreg(n, nn, r);
+ reg[r]++;
+ return;
+ }
+
+ if(mode == 1) {
+ // fetch returned value after call.
+ // already called gargs, so curarg is set.
+ curarg = (curarg+3) & ~3;
+ regaalloc(n, nn);
+ return;
+ }
+
+ if(mode == 2) {
+ // store value to be returned.
+ // must compute arg offset.
+ if(t->etype != TFUNC)
+ fatal(Z, "bad regret func %T", t);
+ *n = *nn;
+ n->op = ONAME;
+ n->class = CPARAM;
+ n->sym = slookup(".retx");
+ n->complex = 0;
+ n->addable = 20;
+ n->xoffset = argsize(0);
+ return;
+ }
+
+ fatal(Z, "bad regret");
}
void
diff --git a/src/cmd/8g/cgen.c b/src/cmd/8g/cgen.c
index d626c2eb0..2735fb6a5 100644
--- a/src/cmd/8g/cgen.c
+++ b/src/cmd/8g/cgen.c
@@ -242,7 +242,6 @@ cgen(Node *n, Node *res)
case OOR:
case OXOR:
case OADD:
- case OADDPTR:
case OMUL:
a = optoas(n->op, nl->type);
if(a == AIMULB) {
@@ -347,8 +346,11 @@ cgen(Node *n, Node *res)
if(istype(nl->type, TCHAN)) {
// chan has cap in the second 32-bit word.
// a zero pointer means zero length
- regalloc(&n1, types[tptr], res);
+ tempname(&n1, types[tptr]);
cgen(nl, &n1);
+ regalloc(&n2, types[tptr], N);
+ gmove(&n1, &n2);
+ n1 = n2;
nodconst(&n2, types[tptr], 0);
gins(optoas(OCMP, types[tptr]), &n1, &n2);
@@ -1324,7 +1326,7 @@ sgen(Node *n, Node *res, int64 w)
p = gins(ADUFFCOPY, N, N);
p->to.type = D_ADDR;
p->to.sym = linksym(pkglookup("duffcopy", runtimepkg));
- // 10 and 128 = magic constants: see ../../pkg/runtime/asm_386.s
+ // 10 and 128 = magic constants: see ../../runtime/asm_386.s
p->to.offset = 10*(128-q);
} else
while(q > 0) {
@@ -1364,7 +1366,10 @@ int
componentgen(Node *nr, Node *nl)
{
Node nodl, nodr;
+ Type *t;
int freel, freer;
+ vlong fldcount;
+ vlong loffset, roffset;
freel = 0;
freer = 0;
@@ -1374,8 +1379,33 @@ componentgen(Node *nr, Node *nl)
goto no;
case TARRAY:
- if(!isslice(nl->type))
+ t = nl->type;
+
+ // Slices are ok.
+ if(isslice(t))
+ break;
+ // Small arrays are ok.
+ if(t->bound > 0 && t->bound <= 3 && !isfat(t->type))
+ break;
+
+ goto no;
+
+ case TSTRUCT:
+ // Small structs with non-fat types are ok.
+ // Zero-sized structs are treated separately elsewhere.
+ fldcount = 0;
+ for(t=nl->type->type; t; t=t->down) {
+ if(isfat(t->type))
+ goto no;
+ if(t->etype != TFIELD)
+ fatal("componentgen: not a TFIELD: %lT", t);
+ fldcount++;
+ }
+ if(fldcount == 0 || fldcount > 4)
goto no;
+
+ break;
+
case TSTRING:
case TINTER:
break;
@@ -1396,7 +1426,7 @@ componentgen(Node *nr, Node *nl)
freer = 1;
}
}
-
+
// nl and nr are 'cadable' which basically means they are names (variables) now.
// If they are the same variable, don't generate any code, because the
// VARDEF we generate will mark the old value as dead incorrectly.
@@ -1406,8 +1436,25 @@ componentgen(Node *nr, Node *nl)
switch(nl->type->etype) {
case TARRAY:
+ // componentgen for arrays.
if(nl->op == ONAME)
gvardef(nl);
+ t = nl->type;
+ if(!isslice(t)) {
+ nodl.type = t->type;
+ nodr.type = nodl.type;
+ for(fldcount=0; fldcount < t->bound; fldcount++) {
+ if(nr == N)
+ clearslim(&nodl);
+ else
+ gmove(&nodr, &nodl);
+ nodl.xoffset += t->type->width;
+ nodr.xoffset += t->type->width;
+ }
+ goto yes;
+ }
+
+ // componentgen for slices.
nodl.xoffset += Array_array;
nodl.type = ptrto(nl->type->type);
@@ -1419,7 +1466,7 @@ componentgen(Node *nr, Node *nl)
gmove(&nodr, &nodl);
nodl.xoffset += Array_nel-Array_array;
- nodl.type = types[TUINT32];
+ nodl.type = types[simtype[TUINT]];
if(nr != N) {
nodr.xoffset += Array_nel-Array_array;
@@ -1429,7 +1476,7 @@ componentgen(Node *nr, Node *nl)
gmove(&nodr, &nodl);
nodl.xoffset += Array_cap-Array_nel;
- nodl.type = types[TUINT32];
+ nodl.type = types[simtype[TUINT]];
if(nr != N) {
nodr.xoffset += Array_cap-Array_nel;
@@ -1454,7 +1501,7 @@ componentgen(Node *nr, Node *nl)
gmove(&nodr, &nodl);
nodl.xoffset += Array_nel-Array_array;
- nodl.type = types[TUINT32];
+ nodl.type = types[simtype[TUINT]];
if(nr != N) {
nodr.xoffset += Array_nel-Array_array;
@@ -1489,6 +1536,31 @@ componentgen(Node *nr, Node *nl)
gmove(&nodr, &nodl);
goto yes;
+
+ case TSTRUCT:
+ if(nl->op == ONAME)
+ gvardef(nl);
+ loffset = nodl.xoffset;
+ roffset = nodr.xoffset;
+ // funarg structs may not begin at offset zero.
+ if(nl->type->etype == TSTRUCT && nl->type->funarg && nl->type->type)
+ loffset -= nl->type->type->width;
+ if(nr != N && nr->type->etype == TSTRUCT && nr->type->funarg && nr->type->type)
+ roffset -= nr->type->type->width;
+
+ for(t=nl->type->type; t; t=t->down) {
+ nodl.xoffset = loffset + t->width;
+ nodl.type = t->type;
+
+ if(nr == N)
+ clearslim(&nodl);
+ else {
+ nodr.xoffset = roffset + t->width;
+ nodr.type = nodl.type;
+ gmove(&nodr, &nodl);
+ }
+ }
+ goto yes;
}
no:
diff --git a/src/cmd/8g/galign.c b/src/cmd/8g/galign.c
index fbd2e9ad3..a0eb34937 100644
--- a/src/cmd/8g/galign.c
+++ b/src/cmd/8g/galign.c
@@ -23,10 +23,10 @@ vlong MAXWIDTH = (1LL<<32) - 1;
*/
Typedef typedefs[] =
{
- "int", TINT, TINT32,
- "uint", TUINT, TUINT32,
- "uintptr", TUINTPTR, TUINT32,
- 0
+ {"int", TINT, TINT32},
+ {"uint", TUINT, TUINT32},
+ {"uintptr", TUINTPTR, TUINT32},
+ {0}
};
void
diff --git a/src/cmd/8g/gg.h b/src/cmd/8g/gg.h
index bdefa93b5..238f92765 100644
--- a/src/cmd/8g/gg.h
+++ b/src/cmd/8g/gg.h
@@ -114,7 +114,6 @@ void split64(Node*, Node*, Node*);
void splitclean(void);
void nswap(Node*, Node*);
void gtrack(Sym*);
-void gargsize(int32);
/*
* cplx.c
*/
diff --git a/src/cmd/8g/ggen.c b/src/cmd/8g/ggen.c
index 5e3140480..6333a60bb 100644
--- a/src/cmd/8g/ggen.c
+++ b/src/cmd/8g/ggen.c
@@ -157,7 +157,7 @@ void
clearfat(Node *nl)
{
uint32 w, c, q;
- Node n1;
+ Node n1, z;
Prog *p;
/* clear a fat object */
@@ -172,6 +172,32 @@ clearfat(Node *nl)
c = w % 4; // bytes
q = w / 4; // quads
+ if(q < 4) {
+ // Write sequence of MOV 0, off(base) instead of using STOSL.
+ // The hope is that although the code will be slightly longer,
+ // the MOVs will have no dependencies and pipeline better
+ // than the unrolled STOSL loop.
+ // NOTE: Must use agen, not igen, so that optimizer sees address
+ // being taken. We are not writing on field boundaries.
+ regalloc(&n1, types[tptr], N);
+ agen(nl, &n1);
+ n1.op = OINDREG;
+ nodconst(&z, types[TUINT64], 0);
+ while(q-- > 0) {
+ n1.type = z.type;
+ gins(AMOVL, &z, &n1);
+ n1.xoffset += 4;
+ }
+ nodconst(&z, types[TUINT8], 0);
+ while(c-- > 0) {
+ n1.type = z.type;
+ gins(AMOVB, &z, &n1);
+ n1.xoffset++;
+ }
+ regfree(&n1);
+ return;
+ }
+
nodreg(&n1, types[tptr], D_DI);
agen(nl, &n1);
gconreg(AMOVL, 0, D_AX);
@@ -184,7 +210,7 @@ clearfat(Node *nl)
p = gins(ADUFFZERO, N, N);
p->to.type = D_ADDR;
p->to.sym = linksym(pkglookup("duffzero", runtimepkg));
- // 1 and 128 = magic constants: see ../../pkg/runtime/asm_386.s
+ // 1 and 128 = magic constants: see ../../runtime/asm_386.s
p->to.offset = 1*(128-q);
} else
while(q > 0) {
@@ -210,28 +236,12 @@ clearfat(Node *nl)
void
ginscall(Node *f, int proc)
{
- int32 arg;
Prog *p;
Node reg, r1, con;
if(f->type != T)
setmaxarg(f->type);
- arg = -1;
- // Most functions have a fixed-size argument block, so traceback uses that during unwind.
- // Not all, though: there are some variadic functions in package runtime,
- // and for those we emit call-specific metadata recorded by caller.
- // Reflect generates functions with variable argsize (see reflect.methodValueCall/makeFuncStub),
- // so we do this for all indirect calls as well.
- if(f->type != T && (f->sym == S || (f->sym != S && f->sym->pkg == runtimepkg) || proc == 1 || proc == 2)) {
- arg = f->type->argwid;
- if(proc == 1 || proc == 2)
- arg += 2*widthptr;
- }
-
- if(arg != -1)
- gargsize(arg);
-
switch(proc) {
default:
fatal("ginscall: bad proc %d", proc);
@@ -293,9 +303,6 @@ ginscall(Node *f, int proc)
}
break;
}
-
- if(arg != -1)
- gargsize(-1);
}
/*
diff --git a/src/cmd/8g/gsubr.c b/src/cmd/8g/gsubr.c
index 2f3cb28c8..3077e0ad9 100644
--- a/src/cmd/8g/gsubr.c
+++ b/src/cmd/8g/gsubr.c
@@ -31,14 +31,15 @@
#include <u.h>
#include <libc.h>
#include "gg.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
// TODO(rsc): Can make this bigger if we move
// the text segment up higher in 8l for all GOOS.
-// At the same time, can raise StackBig in ../../pkg/runtime/stack.h.
+// At the same time, can raise StackBig in ../../runtime/stack.h.
uint32 unmappedzero = 4096;
#define CASE(a,b) (((a)<<16)|((b)<<0))
+/*c2go int CASE(int, int);*/
void
clearp(Prog *p)
@@ -205,17 +206,7 @@ ggloblnod(Node *nam)
}
void
-gargsize(int32 size)
-{
- Node n1, n2;
-
- nodconst(&n1, types[TINT32], PCDATA_ArgSize);
- nodconst(&n2, types[TINT32], size);
- gins(APCDATA, &n1, &n2);
-}
-
-void
-ggloblsym(Sym *s, int32 width, int dupok, int rodata)
+ggloblsym(Sym *s, int32 width, int8 flags)
{
Prog *p;
@@ -226,10 +217,7 @@ ggloblsym(Sym *s, int32 width, int dupok, int rodata)
p->to.type = D_CONST;
p->to.index = D_NONE;
p->to.offset = width;
- if(dupok)
- p->from.scale |= DUPOK;
- if(rodata)
- p->from.scale |= RODATA;
+ p->from.scale = flags;
}
void
@@ -432,7 +420,6 @@ optoas(int op, Type *t)
case CASE(OADD, TINT32):
case CASE(OADD, TUINT32):
case CASE(OADD, TPTR32):
- case CASE(OADDPTR, TPTR32):
a = AADDL;
break;
@@ -697,6 +684,7 @@ optoas(int op, Type *t)
}
#define FCASE(a, b, c) (((a)<<16)|((b)<<8)|(c))
+/*c2go int FCASE(int, int, int); */
int
foptoas(int op, Type *t, int flg)
{
@@ -950,7 +938,7 @@ regalloc(Node *n, Type *t, Node *o)
fprint(2, "registers allocated at\n");
for(i=D_AX; i<=D_DI; i++)
fprint(2, "\t%R\t%#lux\n", i, regpc[i]);
- yyerror("out of fixed registers");
+ fatal("out of fixed registers");
goto err;
case TFLOAT32:
diff --git a/src/cmd/8g/opt.h b/src/cmd/8g/opt.h
index 77a69e13a..09f58c40a 100644
--- a/src/cmd/8g/opt.h
+++ b/src/cmd/8g/opt.h
@@ -49,6 +49,24 @@
typedef struct Reg Reg;
typedef struct Rgn Rgn;
+/*c2go
+extern Node *Z;
+enum
+{
+ D_HI = D_NONE,
+ D_LO = D_NONE,
+ CLOAD = 5,
+ CREF = 5,
+ CINF = 1000,
+ LOOP = 3,
+};
+
+uint32 BLOAD(Reg*);
+uint32 BSTORE(Reg*);
+uint32 LOAD(Reg*);
+uint32 STORE(Reg*);
+*/
+
// A Reg is a wrapper around a single Prog (one instruction) that holds
// register optimization information while the optimizer runs.
// r->prog is the instruction.
@@ -84,8 +102,10 @@ struct Reg
Prog* prog; // actual instruction
};
#define R ((Reg*)0)
+/*c2go extern Reg *R; */
#define NRGN 600
+/*c2go enum { NRGN = 600 }; */
struct Rgn
{
Reg* enter;
diff --git a/src/cmd/8g/peep.c b/src/cmd/8g/peep.c
index e2f3a003d..91a91d20d 100644
--- a/src/cmd/8g/peep.c
+++ b/src/cmd/8g/peep.c
@@ -33,7 +33,9 @@
#include "gg.h"
#include "opt.h"
-#define REGEXT 0
+enum {
+ REGEXT = 0,
+};
static void conprop(Flow *r);
static void elimshortmov(Graph*);
diff --git a/src/cmd/8g/reg.c b/src/cmd/8g/reg.c
index fd610f87a..302b273a1 100644
--- a/src/cmd/8g/reg.c
+++ b/src/cmd/8g/reg.c
@@ -35,6 +35,11 @@
#define NREGVAR 16 /* 8 integer + 8 floating */
#define REGBITS ((uint32)0xffff)
+/*c2go enum {
+ NREGVAR = 16,
+ REGBITS = (1<<NREGVAR) - 1,
+};
+*/
static Reg* firstr;
static int first = 1;
@@ -1163,6 +1168,7 @@ void
addreg(Adr *a, int rn)
{
a->sym = nil;
+ a->node = nil;
a->offset = 0;
a->type = rn;
diff --git a/src/cmd/8l/8.out.h b/src/cmd/8l/8.out.h
index 8e642d390..ed54f6744 100644
--- a/src/cmd/8l/8.out.h
+++ b/src/cmd/8l/8.out.h
@@ -32,7 +32,7 @@
#define NSNAME 8
#include "../ld/textflag.h"
-enum as
+enum
{
AXXX,
AAAA,
diff --git a/src/cmd/8l/asm.c b/src/cmd/8l/asm.c
index c135dce70..98c042403 100644
--- a/src/cmd/8l/asm.c
+++ b/src/cmd/8l/asm.c
@@ -117,13 +117,21 @@ adddynrel(LSym *s, Reloc *r)
case 256 + R_386_GOT32:
if(targ->type != SDYNIMPORT) {
// have symbol
- // turn MOVL of GOT entry into LEAL of symbol itself
- if(r->off < 2 || s->p[r->off-2] != 0x8b) {
- diag("unexpected GOT reloc for non-dynamic symbol %s", targ->name);
+ if(r->off >= 2 && s->p[r->off-2] == 0x8b) {
+ // turn MOVL of GOT entry into LEAL of symbol address, relative to GOT.
+ s->p[r->off-2] = 0x8d;
+ r->type = R_GOTOFF;
return;
}
- s->p[r->off-2] = 0x8d;
- r->type = R_GOTOFF;
+ if(r->off >= 2 && s->p[r->off-2] == 0xff && s->p[r->off-1] == 0xb3) {
+ // turn PUSHL of GOT entry into PUSHL of symbol itself.
+ // use unnecessary SS prefix to keep instruction same length.
+ s->p[r->off-2] = 0x36;
+ s->p[r->off-1] = 0x68;
+ r->type = R_ADDR;
+ return;
+ }
+ diag("unexpected GOT reloc for non-dynamic symbol %s", targ->name);
return;
}
addgotsym(ctxt, targ);
diff --git a/src/cmd/8l/l.h b/src/cmd/8l/l.h
index c9695ade0..70d3a4bb4 100644
--- a/src/cmd/8l/l.h
+++ b/src/cmd/8l/l.h
@@ -50,15 +50,10 @@ enum
#define P ((Prog*)0)
#define S ((LSym*)0)
-#define TNAME (ctxt->cursym?ctxt->cursym->name:noname)
enum
{
- MINSIZ = 4,
- STRINGSZ = 200,
MINLC = 1,
- MAXIO = 8192,
- MAXHIST = 40, /* limit of path elements for history symbols */
};
#pragma varargck type "I" uchar*
@@ -72,7 +67,6 @@ EXTERN char* rpath;
EXTERN int32 spsize;
EXTERN LSym* symlist;
EXTERN int32 symsize;
-EXTERN int32 textsize;
int Iconv(Fmt *fp);
void adddynlib(char *lib);
@@ -85,7 +79,6 @@ int elfreloc1(Reloc *r, vlong sectoff);
void elfsetupplt(void);
void listinit(void);
int machoreloc1(Reloc *r, vlong sectoff);
-void main(int argc, char *argv[]);
int32 rnd(int32 v, int32 r);
void s8put(char *n);
char* xsymname(LSym *s);
diff --git a/src/cmd/8l/mkenam b/src/cmd/8l/mkenam
deleted file mode 100644
index 992aa3160..000000000
--- a/src/cmd/8l/mkenam
+++ /dev/null
@@ -1,45 +0,0 @@
-# Inferno utils/8c/mkenam
-# http://code.google.com/p/inferno-os/source/browse/utils/8c/mkenam
-#
-# Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-# Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-# Portions Copyright © 1997-1999 Vita Nuova Limited
-# Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-# Portions Copyright © 2004,2006 Bruce Ellis
-# Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-# Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-# Portions Copyright © 2009 The Go Authors. All rights reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-awk '
-BEGIN {
- print "char* anames[] ="
- print "{"
-}
-
-/^ A/ {
- name=$1
- sub(/,/, "", name)
- sub(/^A/, "", name)
- print "\t\"" name "\","
-}
-
-END { print "};" }
-' ../8l/8.out.h >enam.c
diff --git a/src/cmd/addr2line/addr2line_test.go b/src/cmd/addr2line/addr2line_test.go
index b278d08ce..10d1dc922 100644
--- a/src/cmd/addr2line/addr2line_test.go
+++ b/src/cmd/addr2line/addr2line_test.go
@@ -92,8 +92,9 @@ func testAddr2Line(t *testing.T, exepath, addr string) {
// This is line 93. The test depends on that.
func TestAddr2Line(t *testing.T) {
- if runtime.GOOS == "nacl" {
- t.Skip("skipping on nacl")
+ switch runtime.GOOS {
+ case "nacl", "android":
+ t.Skipf("skipping on %s", runtime.GOOS)
}
syms := loadSyms(t)
diff --git a/src/cmd/addr2line/main.go b/src/cmd/addr2line/main.go
index b94ba12ef..267f4170a 100644
--- a/src/cmd/addr2line/main.go
+++ b/src/cmd/addr2line/main.go
@@ -19,17 +19,14 @@ package main
import (
"bufio"
- "debug/elf"
- "debug/gosym"
- "debug/macho"
- "debug/pe"
- "debug/plan9obj"
"flag"
"fmt"
"log"
"os"
"strconv"
"strings"
+
+ "cmd/internal/objfile"
)
func printUsage(w *os.File) {
@@ -60,18 +57,12 @@ func main() {
usage()
}
- f, err := os.Open(flag.Arg(0))
+ f, err := objfile.Open(flag.Arg(0))
if err != nil {
log.Fatal(err)
}
- textStart, symtab, pclntab, err := loadTables(f)
- if err != nil {
- log.Fatalf("reading %s: %v", flag.Arg(0), err)
- }
-
- pcln := gosym.NewLineTable(pclntab, textStart)
- tab, err := gosym.NewTable(symtab, pcln)
+ tab, err := f.PCLineTable()
if err != nil {
log.Fatalf("reading %s: %v", flag.Arg(0), err)
}
@@ -102,152 +93,3 @@ func main() {
}
stdout.Flush()
}
-
-func loadTables(f *os.File) (textStart uint64, symtab, pclntab []byte, err error) {
- if obj, err := elf.NewFile(f); err == nil {
- if sect := obj.Section(".text"); sect != nil {
- textStart = sect.Addr
- }
- if sect := obj.Section(".gosymtab"); sect != nil {
- if symtab, err = sect.Data(); err != nil {
- return 0, nil, nil, err
- }
- }
- if sect := obj.Section(".gopclntab"); sect != nil {
- if pclntab, err = sect.Data(); err != nil {
- return 0, nil, nil, err
- }
- }
- return textStart, symtab, pclntab, nil
- }
-
- if obj, err := macho.NewFile(f); err == nil {
- if sect := obj.Section("__text"); sect != nil {
- textStart = sect.Addr
- }
- if sect := obj.Section("__gosymtab"); sect != nil {
- if symtab, err = sect.Data(); err != nil {
- return 0, nil, nil, err
- }
- }
- if sect := obj.Section("__gopclntab"); sect != nil {
- if pclntab, err = sect.Data(); err != nil {
- return 0, nil, nil, err
- }
- }
- return textStart, symtab, pclntab, nil
- }
-
- if obj, err := pe.NewFile(f); err == nil {
- var imageBase uint64
- switch oh := obj.OptionalHeader.(type) {
- case *pe.OptionalHeader32:
- imageBase = uint64(oh.ImageBase)
- case *pe.OptionalHeader64:
- imageBase = oh.ImageBase
- default:
- return 0, nil, nil, fmt.Errorf("pe file format not recognized")
- }
- if sect := obj.Section(".text"); sect != nil {
- textStart = imageBase + uint64(sect.VirtualAddress)
- }
- if pclntab, err = loadPETable(obj, "pclntab", "epclntab"); err != nil {
- return 0, nil, nil, err
- }
- if symtab, err = loadPETable(obj, "symtab", "esymtab"); err != nil {
- return 0, nil, nil, err
- }
- return textStart, symtab, pclntab, nil
- }
-
- if obj, err := plan9obj.NewFile(f); err == nil {
- sym, err := findPlan9Symbol(obj, "text")
- if err != nil {
- return 0, nil, nil, err
- }
- textStart = sym.Value
- if pclntab, err = loadPlan9Table(obj, "pclntab", "epclntab"); err != nil {
- return 0, nil, nil, err
- }
- if symtab, err = loadPlan9Table(obj, "symtab", "esymtab"); err != nil {
- return 0, nil, nil, err
- }
- return textStart, symtab, pclntab, nil
- }
-
- return 0, nil, nil, fmt.Errorf("unrecognized binary format")
-}
-
-func findPESymbol(f *pe.File, name string) (*pe.Symbol, error) {
- for _, s := range f.Symbols {
- if s.Name != name {
- continue
- }
- if s.SectionNumber <= 0 {
- return nil, fmt.Errorf("symbol %s: invalid section number %d", name, s.SectionNumber)
- }
- if len(f.Sections) < int(s.SectionNumber) {
- return nil, fmt.Errorf("symbol %s: section number %d is larger than max %d", name, s.SectionNumber, len(f.Sections))
- }
- return s, nil
- }
- return nil, fmt.Errorf("no %s symbol found", name)
-}
-
-func loadPETable(f *pe.File, sname, ename string) ([]byte, error) {
- ssym, err := findPESymbol(f, sname)
- if err != nil {
- return nil, err
- }
- esym, err := findPESymbol(f, ename)
- if err != nil {
- return nil, err
- }
- if ssym.SectionNumber != esym.SectionNumber {
- return nil, fmt.Errorf("%s and %s symbols must be in the same section", sname, ename)
- }
- sect := f.Sections[ssym.SectionNumber-1]
- data, err := sect.Data()
- if err != nil {
- return nil, err
- }
- return data[ssym.Value:esym.Value], nil
-}
-
-func findPlan9Symbol(f *plan9obj.File, name string) (*plan9obj.Sym, error) {
- syms, err := f.Symbols()
- if err != nil {
- return nil, err
- }
- for _, s := range syms {
- if s.Name != name {
- continue
- }
- return &s, nil
- }
- return nil, fmt.Errorf("no %s symbol found", name)
-}
-
-func loadPlan9Table(f *plan9obj.File, sname, ename string) ([]byte, error) {
- ssym, err := findPlan9Symbol(f, sname)
- if err != nil {
- return nil, err
- }
- esym, err := findPlan9Symbol(f, ename)
- if err != nil {
- return nil, err
- }
- text, err := findPlan9Symbol(f, "text")
- if err != nil {
- return nil, err
- }
- sect := f.Section("text")
- if sect == nil {
- return nil, err
- }
- data, err := sect.Data()
- if err != nil {
- return nil, err
- }
- return data[ssym.Value-text.Value : esym.Value-text.Value], nil
-}
diff --git a/src/cmd/api/goapi.go b/src/cmd/api/goapi.go
index 4bde794a1..4a63eac71 100644
--- a/src/cmd/api/goapi.go
+++ b/src/cmd/api/goapi.go
@@ -107,6 +107,8 @@ func setContexts() {
}
}
+var internalPkg = regexp.MustCompile(`(^|/)internal($|/)`)
+
func main() {
flag.Parse()
@@ -132,12 +134,16 @@ func main() {
if err != nil {
log.Fatal(err)
}
- pkgNames = strings.Fields(string(stds))
+ for _, pkg := range strings.Fields(string(stds)) {
+ if !internalPkg.MatchString(pkg) {
+ pkgNames = append(pkgNames, pkg)
+ }
+ }
}
var featureCtx = make(map[string]map[string]bool) // feature -> context name -> true
for _, context := range contexts {
- w := NewWalker(context, filepath.Join(build.Default.GOROOT, "src/pkg"))
+ w := NewWalker(context, filepath.Join(build.Default.GOROOT, "src"))
for _, name := range pkgNames {
// - Package "unsafe" contains special signatures requiring
@@ -277,7 +283,7 @@ func compareAPI(w io.Writer, features, required, optional, exception []string) (
delete(optionalSet, newFeature)
} else {
fmt.Fprintf(w, "+%s\n", newFeature)
- if !*allowNew {
+ if !*allowNew || !strings.Contains(runtime.Version(), "devel") {
ok = false // we're in lock-down mode for next release
}
}
@@ -307,11 +313,15 @@ func fileFeatures(filename string) []string {
if err != nil {
log.Fatalf("Error reading file %s: %v", filename, err)
}
- text := strings.TrimSpace(string(bs))
- if text == "" {
- return nil
+ lines := strings.Split(string(bs), "\n")
+ var nonblank []string
+ for _, line := range lines {
+ line = strings.TrimSpace(line)
+ if line != "" && !strings.HasPrefix(line, "#") {
+ nonblank = append(nonblank, line)
+ }
}
- return strings.Split(text, "\n")
+ return nonblank
}
var fset = token.NewFileSet()
@@ -370,6 +380,106 @@ func (w *Walker) parseFile(dir, file string) (*ast.File, error) {
log.Fatalf("incorrect generated file: %s", err)
}
}
+ if w.context != nil && file == fmt.Sprintf("zruntime_defs_%s_%s.go", w.context.GOOS, w.context.GOARCH) {
+ // Just enough to keep the api checker happy. Keep sorted.
+ src := "package runtime; type (" +
+ " _defer struct{};" +
+ " _func struct{};" +
+ " _panic struct{};" +
+ " _select struct{}; " +
+ " _type struct{};" +
+ " alg struct{};" +
+ " chantype struct{};" +
+ " context struct{};" + // windows
+ " eface struct{};" +
+ " epollevent struct{};" +
+ " funcval struct{};" +
+ " g struct{};" +
+ " gobuf struct{};" +
+ " hchan struct{};" +
+ " iface struct{};" +
+ " interfacetype struct{};" +
+ " itab struct{};" +
+ " keventt struct{};" +
+ " m struct{};" +
+ " maptype struct{};" +
+ " mcache struct{};" +
+ " mspan struct{};" +
+ " mutex struct{};" +
+ " note struct{};" +
+ " p struct{};" +
+ " parfor struct{};" +
+ " slicetype struct{};" +
+ " stkframe struct{};" +
+ " sudog struct{};" +
+ " timespec struct{};" +
+ " waitq struct{};" +
+ " wincallbackcontext struct{};" +
+ "); " +
+ "const (" +
+ " cb_max = 2000;" +
+ " _CacheLineSize = 64;" +
+ " _Gidle = 1;" +
+ " _Grunnable = 2;" +
+ " _Grunning = 3;" +
+ " _Gsyscall = 4;" +
+ " _Gwaiting = 5;" +
+ " _Gdead = 6;" +
+ " _Genqueue = 7;" +
+ " _Gcopystack = 8;" +
+ " _NSIG = 32;" +
+ " _FlagNoScan = iota;" +
+ " _FlagNoZero;" +
+ " _TinySize;" +
+ " _TinySizeClass;" +
+ " _MaxSmallSize;" +
+ " _PageShift;" +
+ " _PageSize;" +
+ " _PageMask;" +
+ " _BitsPerPointer;" +
+ " _BitsMask;" +
+ " _PointersPerByte;" +
+ " _MaxGCMask;" +
+ " _BitsDead;" +
+ " _BitsPointer;" +
+ " _MSpanInUse;" +
+ " _ConcurrentSweep;" +
+ " _KindBool;" +
+ " _KindInt;" +
+ " _KindInt8;" +
+ " _KindInt16;" +
+ " _KindInt32;" +
+ " _KindInt64;" +
+ " _KindUint;" +
+ " _KindUint8;" +
+ " _KindUint16;" +
+ " _KindUint32;" +
+ " _KindUint64;" +
+ " _KindUintptr;" +
+ " _KindFloat32;" +
+ " _KindFloat64;" +
+ " _KindComplex64;" +
+ " _KindComplex128;" +
+ " _KindArray;" +
+ " _KindChan;" +
+ " _KindFunc;" +
+ " _KindInterface;" +
+ " _KindMap;" +
+ " _KindPtr;" +
+ " _KindSlice;" +
+ " _KindString;" +
+ " _KindStruct;" +
+ " _KindUnsafePointer;" +
+ " _KindDirectIface;" +
+ " _KindGCProg;" +
+ " _KindNoPointers;" +
+ " _KindMask;" +
+ ")"
+ f, err = parser.ParseFile(fset, filename, src, 0)
+ if err != nil {
+ log.Fatalf("incorrect generated file: %s", err)
+ }
+ }
if f == nil {
f, err = parser.ParseFile(fset, filename, nil, 0)
@@ -391,6 +501,11 @@ func contains(list []string, s string) bool {
return false
}
+// The package cache doesn't operate correctly in rare (so far artificial)
+// circumstances (issue 8425). Disable before debugging non-obvious errors
+// from the type-checker.
+const usePkgCache = true
+
var (
pkgCache = map[string]*types.Package{} // map tagKey to package
pkgTags = map[string][]string{} // map import dir to list of relevant tags
@@ -452,11 +567,13 @@ func (w *Walker) Import(name string) (pkg *types.Package) {
// If we've already done an import with the same set
// of relevant tags, reuse the result.
var key string
- if tags, ok := pkgTags[dir]; ok {
- key = tagKey(dir, context, tags)
- if pkg := pkgCache[key]; pkg != nil {
- w.imported[name] = pkg
- return pkg
+ if usePkgCache {
+ if tags, ok := pkgTags[dir]; ok {
+ key = tagKey(dir, context, tags)
+ if pkg := pkgCache[key]; pkg != nil {
+ w.imported[name] = pkg
+ return pkg
+ }
}
}
@@ -469,9 +586,11 @@ func (w *Walker) Import(name string) (pkg *types.Package) {
}
// Save tags list first time we see a directory.
- if _, ok := pkgTags[dir]; !ok {
- pkgTags[dir] = info.AllTags
- key = tagKey(dir, context, info.AllTags)
+ if usePkgCache {
+ if _, ok := pkgTags[dir]; !ok {
+ pkgTags[dir] = info.AllTags
+ key = tagKey(dir, context, info.AllTags)
+ }
}
filenames := append(append([]string{}, info.GoFiles...), info.CgoFiles...)
@@ -488,6 +607,11 @@ func (w *Walker) Import(name string) (pkg *types.Package) {
if !contains(filenames, n) {
filenames = append(filenames, n)
}
+
+ n = fmt.Sprintf("zruntime_defs_%s_%s.go", w.context.GOOS, w.context.GOARCH)
+ if !contains(filenames, n) {
+ filenames = append(filenames, n)
+ }
}
// Parse package files.
@@ -519,7 +643,9 @@ func (w *Walker) Import(name string) (pkg *types.Package) {
log.Fatalf("error typechecking package %s: %s (%s)", name, err, ctxt)
}
- pkgCache[key] = pkg
+ if usePkgCache {
+ pkgCache[key] = pkg
+ }
w.imported[name] = pkg
return
diff --git a/src/cmd/api/goapi_test.go b/src/cmd/api/goapi_test.go
index b909c32b3..f4fb7d319 100644
--- a/src/cmd/api/goapi_test.go
+++ b/src/cmd/api/goapi_test.go
@@ -38,7 +38,7 @@ func TestGolden(t *testing.T) {
continue
}
- goldenFile := filepath.Join("testdata", "src", "pkg", fi.Name(), "golden.txt")
+ goldenFile := filepath.Join("testdata", "src", fi.Name(), "golden.txt")
w := NewWalker(nil, "testdata/src/pkg")
w.export(w.Import(fi.Name()))
@@ -142,6 +142,26 @@ func TestCompareAPI(t *testing.T) {
}
}
+func TestSkipInternal(t *testing.T) {
+ tests := []struct {
+ pkg string
+ want bool
+ }{
+ {"net/http", true},
+ {"net/http/internal-foo", true},
+ {"net/http/internal", false},
+ {"net/http/internal/bar", false},
+ {"internal/foo", false},
+ {"internal", false},
+ }
+ for _, tt := range tests {
+ got := !internalPkg.MatchString(tt.pkg)
+ if got != tt.want {
+ t.Errorf("%s is internal = %v; want %v", tt.pkg, got, tt.want)
+ }
+ }
+}
+
func BenchmarkAll(b *testing.B) {
stds, err := exec.Command("go", "list", "std").Output()
if err != nil {
@@ -156,7 +176,7 @@ func BenchmarkAll(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, context := range contexts {
- w := NewWalker(context, filepath.Join(build.Default.GOROOT, "src/pkg"))
+ w := NewWalker(context, filepath.Join(build.Default.GOROOT, "src"))
for _, name := range pkgNames {
if name != "unsafe" && !strings.HasPrefix(name, "cmd/") {
w.export(w.Import(name))
diff --git a/src/cmd/api/run.go b/src/cmd/api/run.go
index 896b2b4a1..ed5613edd 100644
--- a/src/cmd/api/run.go
+++ b/src/cmd/api/run.go
@@ -21,6 +21,7 @@ import (
"os/exec"
"os/user"
"path/filepath"
+ "runtime"
"strings"
)
@@ -53,7 +54,7 @@ func main() {
}
out, err = exec.Command("go", "tool", "api",
- "-c", file("go1", "go1.1", "go1.2", "go1.3"),
+ "-c", file("go1", "go1.1", "go1.2", "go1.3", "go1.4"),
"-next", file("next"),
"-except", file("except")).CombinedOutput()
if err != nil {
@@ -98,16 +99,14 @@ func prepGoPath() string {
if err == nil {
username = u.Username
} else {
- // Only need to handle Unix here, as Windows's os/user uses
- // native syscall and should work fine without cgo.
username = os.Getenv("USER")
if username == "" {
- log.Fatalf("Error getting current user: %v", err)
+ username = "nobody"
}
}
// The GOPATH we'll return
- gopath := filepath.Join(os.TempDir(), "gopath-api-"+cleanUsername(username), goToolsVersion)
+ gopath := filepath.Join(os.TempDir(), "gopath-api-"+cleanUsername(username)+"-"+cleanUsername(strings.Fields(runtime.Version())[0]), goToolsVersion)
// cloneDir is where we run "hg clone".
cloneDir := filepath.Join(gopath, "src", "code.google.com", "p")
diff --git a/src/cmd/cc/bv.c b/src/cmd/cc/bv.c
deleted file mode 100644
index 51b7f4076..000000000
--- a/src/cmd/cc/bv.c
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include <u.h>
-#include "cc.h"
-
-enum {
- WORDSIZE = sizeof(uint32),
- WORDBITS = 32,
-};
-
-uintptr
-bvsize(uintptr n)
-{
- return ((n + WORDBITS - 1) / WORDBITS) * WORDSIZE;
-}
-
-Bvec*
-bvalloc(int32 n)
-{
- Bvec *bv;
- uintptr nbytes;
-
- if(n < 0)
- fatal(Z, "bvalloc: initial size is negative\n");
- nbytes = sizeof(Bvec) + bvsize(n);
- bv = malloc(nbytes);
- if(bv == nil)
- fatal(Z, "bvalloc: malloc failed\n");
- memset(bv, 0, nbytes);
- bv->n = n;
- return bv;
-}
-
-void
-bvset(Bvec *bv, int32 i)
-{
- uint32 mask;
-
- if(i < 0 || i >= bv->n)
- fatal(Z, "bvset: index %d is out of bounds with length %d\n", i, bv->n);
- mask = 1 << (i % WORDBITS);
- bv->b[i / WORDBITS] |= mask;
-}
diff --git a/src/cmd/cc/cc.h b/src/cmd/cc/cc.h
index c8aac1253..9530f5cf6 100644
--- a/src/cmd/cc/cc.h
+++ b/src/cmd/cc/cc.h
@@ -762,12 +762,6 @@ int beq(Bits, Bits);
int bset(Bits, uint);
/*
- * bv.c
- */
-Bvec* bvalloc(int32 n);
-void bvset(Bvec *bv, int32 i);
-
-/*
* dpchk.c
*/
void dpcheck(Node*);
@@ -794,7 +788,7 @@ void xcom(Node*);
int32 exreg(Type*);
int32 align(int32, Type*, int, int32*);
int32 maxround(int32, int32);
-int hasdotdotdot(void);
+int hasdotdotdot(Type*);
void linkarchinit(void);
extern schar ewidth[];
diff --git a/src/cmd/cc/cc.y b/src/cmd/cc/cc.y
index 11ee444b7..8d7cb1472 100644
--- a/src/cmd/cc/cc.y
+++ b/src/cmd/cc/cc.y
@@ -1043,6 +1043,7 @@ complex:
}
| LSTRUCT sbody
{
+ diag(Z, "struct must have tag");
taggen++;
sprint(symb, "_%d_", taggen);
$$ = dotag(lookup(), TSTRUCT, autobn);
diff --git a/src/cmd/cc/dcl.c b/src/cmd/cc/dcl.c
index a7a942686..117508fd6 100644
--- a/src/cmd/cc/dcl.c
+++ b/src/cmd/cc/dcl.c
@@ -30,6 +30,9 @@
#include <u.h>
#include "cc.h"
+#include "../ld/textflag.h"
+
+static int haspointers(Type*);
Node*
dodecl(void (*f)(int,Type*,Sym*), int c, Type *t, Node *n)
@@ -123,7 +126,8 @@ loop:
if(dataflag) {
s->dataflag = dataflag;
dataflag = 0;
- }
+ } else if(s->type != T && !haspointers(s->type))
+ s->dataflag = NOPTR;
firstbit = 0;
n->sym = s;
n->type = s->type;
@@ -568,9 +572,8 @@ haspointers(Type *t)
return 0;
case TARRAY:
return haspointers(t->link);
- case TFUNC:
case TIND:
- return 1;
+ return t->link->etype != TFUNC;
default:
return 0;
}
@@ -697,7 +700,8 @@ argmark(Node *n, int pass)
{
Type *t;
- autoffset = align(0, thisfn->link, Aarg0, nil);
+ if(hasdotdotdot(thisfn->link))
+ autoffset = align(0, thisfn->link, Aarg0, nil);
stkoff = 0;
for(; n->left != Z; n = n->left) {
if(n->op != OFUNC || n->left->op != ONAME)
@@ -1401,6 +1405,10 @@ xdecl(int c, Type *t, Sym *s)
}
tmerge(t, s);
s->type = t;
+ if(c == CTYPEDEF && (typechlv[t->etype] || typefd[t->etype])) {
+ s->type = copytyp(t);
+ s->type->tag = s;
+ }
s->class = c;
s->block = 0;
s->offset = o;
@@ -1481,12 +1489,9 @@ edecl(int c, Type *t, Sym *s)
{
Type *t1;
- if(s == S) {
- if(!typesu[t->etype])
- diag(Z, "unnamed structure element must be struct/union");
- if(c != CXXX)
- diag(Z, "unnamed structure element cannot have class");
- } else
+ if(s == S)
+ diag(Z, "unnamed structure elements not supported");
+ else
if(c != CXXX)
diag(Z, "structure element cannot have class: %s", s->name);
t1 = t;
diff --git a/src/cmd/cc/godefs.c b/src/cmd/cc/godefs.c
index 7457bd000..d9f67f0ae 100644
--- a/src/cmd/cc/godefs.c
+++ b/src/cmd/cc/godefs.c
@@ -154,7 +154,6 @@ static void
printtypename(Type *t)
{
Sym *s;
- Type *t1;
int w;
char *n;
@@ -188,40 +187,27 @@ printtypename(Type *t)
switch(t->etype) {
case TINT:
- Bprint(&outbuf, "int32");
- break;
case TUINT:
- Bprint(&outbuf, "uint32");
- break;
case TCHAR:
- Bprint(&outbuf, "int8");
- break;
case TUCHAR:
- Bprint(&outbuf, "uint8");
- break;
case TSHORT:
- Bprint(&outbuf, "int16");
- break;
case TUSHORT:
- Bprint(&outbuf, "uint16");
- break;
case TLONG:
- Bprint(&outbuf, "int32");
- break;
case TULONG:
- Bprint(&outbuf, "uint32");
- break;
case TVLONG:
- Bprint(&outbuf, "int64");
- break;
case TUVLONG:
- Bprint(&outbuf, "uint64");
- break;
case TFLOAT:
- Bprint(&outbuf, "float32");
- break;
case TDOUBLE:
- Bprint(&outbuf, "float64");
+ // All names used in the runtime code should be typedefs.
+ if(t->tag != nil) {
+ if(strcmp(t->tag->name, "intgo") == 0)
+ Bprint(&outbuf, "int");
+ else if(strcmp(t->tag->name, "uintgo") == 0)
+ Bprint(&outbuf, "uint");
+ else
+ Bprint(&outbuf, "%s", t->tag->name);
+ } else
+ Bprint(&outbuf, "C.%T", t);
break;
case TUNION:
case TSTRUCT:
@@ -231,27 +217,18 @@ printtypename(Type *t)
n = s->name;
else if(t->tag)
n = t->tag->name;
- if(strcmp(n, "String") == 0){
+ if(strcmp(n, "String") == 0)
Bprint(&outbuf, "string");
- } else if(strcmp(n, "Slice") == 0){
+ else if(strcmp(n, "Slice") == 0)
Bprint(&outbuf, "[]byte");
- } else
+ else if(strcmp(n, "Eface") == 0)
+ Bprint(&outbuf, "interface{}");
+ else
Bprint(&outbuf, "%U", n);
break;
case TFUNC:
- Bprint(&outbuf, "func(");
- for(t1 = t->down; t1 != T; t1 = t1->down) {
- if(t1->etype == TVOID)
- break;
- if(t1 != t->down)
- Bprint(&outbuf, ", ");
- printtypename(t1);
- }
- Bprint(&outbuf, ")");
- if(t->link && t->link->etype != TVOID) {
- Bprint(&outbuf, " ");
- printtypename(t->link);
- }
+ // There's no equivalent to a C function in the Go world.
+ Bprint(&outbuf, "unsafe.Pointer");
break;
case TDOT:
Bprint(&outbuf, "...interface{}");
@@ -340,9 +317,9 @@ godefvar(Sym *s)
switch(t->etype) {
case TENUM:
if(!typefd[t->etype])
- Bprint(&outbuf, "const %U = %lld\n", s->name, s->vconst);
+ Bprint(&outbuf, "const %s = %lld\n", s->name, s->vconst);
else
- Bprint(&outbuf, "const %U = %f\n;", s->name, s->fconst);
+ Bprint(&outbuf, "const %s = %f\n;", s->name, s->fconst);
break;
case TFUNC:
@@ -376,8 +353,10 @@ godefvar(Sym *s)
case CSTATIC:
case CEXTERN:
case CGLOBL:
- if(strchr(s->name, '$') != nil) // TODO(lvd)
- break;
+ if(strchr(s->name, '$') != nil)
+ break;
+ if(strncmp(s->name, "go.weak.", 8) == 0)
+ break;
Bprint(&outbuf, "var %U\t", s->name);
printtypename(t);
Bprint(&outbuf, "\n");
diff --git a/src/cmd/cc/lex.c b/src/cmd/cc/lex.c
index 424843764..7c9f718c0 100644
--- a/src/cmd/cc/lex.c
+++ b/src/cmd/cc/lex.c
@@ -31,6 +31,7 @@
#include <u.h>
#include "cc.h"
#include "y.tab.h"
+#include "../ld/textflag.h"
#ifndef CPP
#define CPP "cpp"
@@ -203,6 +204,7 @@ main(int argc, char *argv[])
flagparse(&argc, &argv, usage);
ctxt->debugasm = debug['S'];
+ ctxt->debugvlog = debug['v'];
if(argc < 1 && outfile == 0)
usage();
@@ -1316,6 +1318,7 @@ cinit(void)
t->width = 0;
symstring = slookup(".string");
symstring->class = CSTATIC;
+ symstring->dataflag = NOPTR;
symstring->type = t;
t = typ(TARRAY, types[TCHAR]);
diff --git a/src/cmd/cc/pgen.c b/src/cmd/cc/pgen.c
index 10bebc196..db9aae916 100644
--- a/src/cmd/cc/pgen.c
+++ b/src/cmd/cc/pgen.c
@@ -29,51 +29,27 @@
// THE SOFTWARE.
#include "gc.h"
-#include "../../pkg/runtime/funcdata.h"
-
-enum { BitsPerPointer = 2 };
-
-static void dumpgcargs(Type *fn, Sym *sym);
-
-static Sym*
-makefuncdatasym(char *namefmt, int64 funcdatakind)
-{
- Node nod;
- Sym *sym;
- static int32 nsym;
- static char namebuf[40];
-
- snprint(namebuf, sizeof(namebuf), namefmt, nsym++);
- sym = slookup(namebuf);
- sym->class = CSTATIC;
- memset(&nod, 0, sizeof nod);
- nod.op = ONAME;
- nod.sym = sym;
- nod.class = CSTATIC;
- gins(AFUNCDATA, nodconst(funcdatakind), &nod);
- linksym(sym)->type = SRODATA;
- return sym;
-}
+#include "../../runtime/funcdata.h"
int
-hasdotdotdot(void)
+hasdotdotdot(Type *t)
{
- Type *t;
-
- for(t=thisfn->down; t!=T; t=t->down)
+ for(t=t->down; t!=T; t=t->down)
if(t->etype == TDOT)
return 1;
return 0;
}
vlong
-argsize(void)
+argsize(int doret)
{
Type *t;
int32 s;
//print("t=%T\n", thisfn);
- s = align(0, thisfn->link, Aarg0, nil);
+ s = 0;
+ if(hasdotdotdot(thisfn))
+ s = align(s, thisfn->link, Aarg0, nil);
for(t=thisfn->down; t!=T; t=t->down) {
switch(t->etype) {
case TVOID:
@@ -93,6 +69,14 @@ argsize(void)
s = (s+7) & ~7;
else
s = (s+3) & ~3;
+ if(doret && thisfn->link->etype != TVOID) {
+ s = align(s, thisfn->link, Aarg1, nil);
+ s = align(s, thisfn->link, Aarg2, nil);
+ if(thechar == '6')
+ s = (s+7) & ~7;
+ else
+ s = (s+3) & ~3;
+ }
return s;
}
@@ -101,9 +85,6 @@ codgen(Node *n, Node *nn)
{
Prog *sp;
Node *n1, nod, nod1;
- Sym *gcargs;
- Sym *gclocals;
- int isvarargs;
cursafe = 0;
curarg = 0;
@@ -123,19 +104,10 @@ codgen(Node *n, Node *nn)
nearln = nn->lineno;
p = gtext(n1->sym, stkoff);
+ p->from.sym->cfunc = 1;
sp = p;
/*
- * generate funcdata symbol for this function.
- * data is filled in at the end of codgen().
- */
- isvarargs = hasdotdotdot();
- gcargs = nil;
- if(!isvarargs)
- gcargs = makefuncdatasym("gcargs·%d", FUNCDATA_ArgsPointerMaps);
- gclocals = makefuncdatasym("gclocals·%d", FUNCDATA_LocalsPointerMaps);
-
- /*
* isolate first argument
*/
if(REGARG >= 0) {
@@ -155,8 +127,6 @@ codgen(Node *n, Node *nn)
}
}
- retok = 0;
-
canreach = 1;
warnreach = 1;
gen(n);
@@ -171,22 +141,6 @@ codgen(Node *n, Node *nn)
if(thechar=='6' || thechar=='7') /* [sic] */
maxargsafe = xround(maxargsafe, 8);
sp->to.offset += maxargsafe;
-
- if(!isvarargs)
- dumpgcargs(thisfn, gcargs);
-
- // TODO(rsc): "stkoff" is not right. It does not account for
- // the possibility of data stored in .safe variables.
- // Unfortunately those move up and down just like
- // the argument frame (and in fact dovetail with it)
- // so the number we need is not available or even
- // well-defined. Probably we need to make the safe
- // area its own section.
- // That said, we've been using stkoff for months
- // and nothing too terrible has happened.
- gextern(gclocals, nodconst(-stkoff), 0, 4); // locals
- gclocals->type = typ(0, T);
- gclocals->type->width = 4;
}
void
@@ -214,7 +168,7 @@ supgen(Node *n)
void
gen(Node *n)
{
- Node *l, nod;
+ Node *l, nod, nod1;
Prog *sp, *spc, *spb;
Case *cn;
long sbc, scc;
@@ -275,14 +229,26 @@ loop:
gbranch(ORETURN);
break;
}
+ if(typecmplx[n->type->etype] && !hasdotdotdot(thisfn)) {
+ regret(&nod, n, thisfn, 2);
+ sugen(l, &nod, n->type->width);
+ noretval(3);
+ gbranch(ORETURN);
+ break;
+ }
if(typecmplx[n->type->etype]) {
sugen(l, nodret, n->type->width);
noretval(3);
gbranch(ORETURN);
break;
}
- regret(&nod, n);
+ regret(&nod1, n, thisfn, 2);
+ nod = nod1;
+ if(nod.op != OREGISTER)
+ regalloc(&nod, n, Z);
cgen(l, &nod);
+ if(nod1.op != OREGISTER)
+ gmove(&nod, &nod1);
regfree(&nod);
if(typefd[n->type->etype])
noretval(1);
@@ -654,111 +620,3 @@ bcomplex(Node *n, Node *c)
boolgen(n, 1, Z);
return 0;
}
-
-// Updates the bitvector with a set bit for each pointer containing
-// value in the type description starting at offset.
-static void
-walktype1(Type *t, int32 offset, Bvec *bv, int param)
-{
- Type *t1;
- int32 o;
- int32 widthptr;
-
- widthptr = ewidth[TIND];
- switch(t->etype) {
- case TCHAR:
- case TUCHAR:
- case TSHORT:
- case TUSHORT:
- case TINT:
- case TUINT:
- case TLONG:
- case TULONG:
- case TVLONG:
- case TUVLONG:
- case TFLOAT:
- case TDOUBLE:
- // non-pointer types
- for(o = 0; o < t->width; o++)
- bvset(bv, ((offset + t->offset + o) / widthptr) * BitsPerPointer); // 1 = live scalar
- break;
-
- case TIND:
- pointer:
- // pointer types
- if((offset + t->offset) % widthptr != 0)
- yyerror("unaligned pointer");
- bvset(bv, ((offset + t->offset) / widthptr)*BitsPerPointer + 1); // 2 = live ptr
- break;
-
- case TARRAY:
- if(param) // unlike Go, C passes arrays by reference
- goto pointer;
- // array in struct or union is an actual array
- for(o = 0; o < t->width; o += t->link->width)
- walktype1(t->link, offset+o, bv, 0);
- break;
-
- case TSTRUCT:
- // build map recursively
- for(t1 = t->link; t1 != T; t1 = t1->down)
- walktype1(t1, offset, bv, 0);
- break;
-
- case TUNION:
- walktype1(t->link, offset, bv, 0);
- break;
-
- default:
- yyerror("can't handle arg type %s\n", tnames[t->etype]);
- }
-}
-
-// Compute a bit vector to describe the pointer containing locations
-// in the argument list. Adds the data to gcsym and returns the offset
-// of end of the bit vector.
-static void
-dumpgcargs(Type *fn, Sym *sym)
-{
- Bvec *bv;
- Type *t;
- int32 i;
- int32 argbytes;
- int32 symoffset, argoffset;
-
- // Dump the length of the bitmap array. This value is always one for
- // functions written in C.
- symoffset = 0;
- gextern(sym, nodconst(1), symoffset, 4);
- symoffset += 4;
- argbytes = (argsize() + ewidth[TIND] - 1);
- bv = bvalloc((argbytes / ewidth[TIND]) * BitsPerPointer);
- argoffset = align(0, fn->link, Aarg0, nil);
- if(argoffset > 0) {
- // The C calling convention returns structs by copying them to a
- // location pointed to by a hidden first argument. This first
- // argument is a pointer.
- if(argoffset != ewidth[TIND])
- yyerror("passbyptr arg not the right size");
- bvset(bv, 1); // 2 = live ptr
- }
- for(t = fn->down; t != T; t = t->down) {
- if(t->etype == TVOID)
- continue;
- argoffset = align(argoffset, t, Aarg1, nil);
- walktype1(t, argoffset, bv, 1);
- argoffset = align(argoffset, t, Aarg2, nil);
- }
- // Dump the length of the bitmap.
- gextern(sym, nodconst(bv->n), symoffset, 4);
- symoffset += 4;
- // Dump the words of the bitmap.
- for(i = 0; i < bv->n; i += 32) {
- gextern(sym, nodconst(bv->b[i/32]), symoffset, 4);
- symoffset += 4;
- }
- free(bv);
- // Finalize the gc symbol.
- sym->type = typ(0, T);
- sym->type->width = symoffset;
-}
diff --git a/src/cmd/cc/y.tab.c b/src/cmd/cc/y.tab.c
index 8588515ab..94932efe5 100644
--- a/src/cmd/cc/y.tab.c
+++ b/src/cmd/cc/y.tab.c
@@ -1,21 +1,24 @@
-/* A Bison parser, made by GNU Bison 2.7.12-4996. */
+/* A Bison parser, made by GNU Bison 2.3. */
-/* Bison implementation for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
- This program is free software: you can redistribute it and/or modify
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -26,7 +29,7 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
@@ -44,7 +47,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.7.12-4996"
+#define YYBISON_VERSION "2.3"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -52,53 +55,10 @@
/* Pure parsers. */
#define YYPURE 0
-/* Push parsers. */
-#define YYPUSH 0
-
-/* Pull parsers. */
-#define YYPULL 1
-
-
-
-
-/* Copy the first part of user declarations. */
-/* Line 371 of yacc.c */
-#line 31 "cc.y"
-
-#include <u.h>
-#include <stdio.h> /* if we don't, bison will, and cc.h re-#defines getc */
-#include "cc.h"
+/* Using locations. */
+#define YYLSP_NEEDED 0
-/* Line 371 of yacc.c */
-#line 74 "y.tab.c"
-# ifndef YY_NULL
-# if defined __cplusplus && 201103L <= __cplusplus
-# define YY_NULL nullptr
-# else
-# define YY_NULL 0
-# endif
-# endif
-
-/* Enabling verbose error messages. */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* In a future release of Bison, this section will be replaced
- by #include "y.tab.h". */
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
-/* Enabling traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
/* Tokens. */
#ifndef YYTOKENTYPE
@@ -256,12 +216,37 @@ extern int yydebug;
+
+/* Copy the first part of user declarations. */
+#line 31 "cc.y"
+
+#include <u.h>
+#include <stdio.h> /* if we don't, bison will, and cc.h re-#defines getc */
+#include "cc.h"
+
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
-{
-/* Line 387 of yacc.c */
#line 36 "cc.y"
-
+{
Node* node;
Sym* sym;
Type* type;
@@ -285,38 +270,22 @@ typedef union YYSTYPE
int32 lval;
double dval;
vlong vval;
-
-
-/* Line 387 of yacc.c */
-#line 292 "y.tab.c"
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
+}
+/* Line 193 of yacc.c. */
+#line 276 "y.tab.c"
+ YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
#endif
-extern YYSTYPE yylval;
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-#endif /* !YY_YY_Y_TAB_H_INCLUDED */
/* Copy the second part of user declarations. */
-/* Line 390 of yacc.c */
-#line 320 "y.tab.c"
+
+/* Line 216 of yacc.c. */
+#line 289 "y.tab.c"
#ifdef short
# undef short
@@ -369,45 +338,36 @@ typedef short int yytype_int16;
# if defined YYENABLE_NLS && YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
# endif
# endif
# ifndef YY_
-# define YY_(Msgid) Msgid
-# endif
-#endif
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later. */
-# if (! defined __GNUC__ || __GNUC__ < 2 \
- || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
-# define __attribute__(Spec) /* empty */
+# define YY_(msgid) msgid
# endif
#endif
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
+# define YYUSE(e) ((void) (e))
#else
-# define YYUSE(E) /* empty */
+# define YYUSE(e) /* empty */
#endif
-
/* Identity function, used to suppress warnings about constant conditions. */
#ifndef lint
-# define YYID(N) (N)
+# define YYID(n) (n)
#else
#if (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
static int
-YYID (int yyi)
+YYID (int i)
#else
static int
-YYID (yyi)
- int yyi;
+YYID (i)
+ int i;
#endif
{
- return yyi;
+ return i;
}
#endif
@@ -428,12 +388,11 @@ YYID (yyi)
# define alloca _alloca
# else
# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
- /* Use EXIT_SUCCESS as a witness for stdlib.h. */
-# ifndef EXIT_SUCCESS
-# define EXIT_SUCCESS 0
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
# endif
# endif
# endif
@@ -456,24 +415,24 @@ YYID (yyi)
# ifndef YYSTACK_ALLOC_MAXIMUM
# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
# endif
-# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+# if (defined __cplusplus && ! defined _STDLIB_H \
&& ! ((defined YYMALLOC || defined malloc) \
&& (defined YYFREE || defined free)))
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef EXIT_SUCCESS
-# define EXIT_SUCCESS 0
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
# endif
# endif
# ifndef YYMALLOC
# define YYMALLOC malloc
-# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
# ifndef YYFREE
# define YYFREE free
-# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
void free (void *); /* INFRINGES ON USER NAME SPACE */
# endif
@@ -489,9 +448,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
/* A type that is properly aligned for any stack member. */
union yyalloc
{
- yytype_int16 yyss_alloc;
- YYSTYPE yyvs_alloc;
-};
+ yytype_int16 yyss;
+ YYSTYPE yyvs;
+ };
/* The size of the maximum gap between one aligned stack and the next. */
# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
@@ -502,19 +461,35 @@ union yyalloc
((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
-# define YYCOPY_NEEDED 1
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
/* Relocate STACK from its old location to the new one. The
local variables YYSIZE and YYSTACKSIZE give the old and new number of
elements in the stack, and YYPTR gives the new location of the
stack. Advance YYPTR to a properly aligned location for the next
stack. */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+# define YYSTACK_RELOCATE(Stack) \
do \
{ \
YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
- Stack = &yyptr->Stack_alloc; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
yyptr += yynewbytes / sizeof (*yyptr); \
} \
@@ -522,26 +497,6 @@ union yyalloc
#endif
-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from SRC to DST. The source and destination do
- not overlap. */
-# ifndef YYCOPY
-# if defined __GNUC__ && 1 < __GNUC__
-# define YYCOPY(Dst, Src, Count) \
- __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
-# else
-# define YYCOPY(Dst, Src, Count) \
- do \
- { \
- YYSIZE_T yyi; \
- for (yyi = 0; yyi < (Count); yyi++) \
- (Dst)[yyi] = (Src)[yyi]; \
- } \
- while (YYID (0))
-# endif
-# endif
-#endif /* !YYCOPY_NEEDED */
-
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
@@ -737,16 +692,16 @@ static const yytype_uint16 yyrline[] =
794, 798, 802, 803, 810, 817, 824, 831, 838, 845,
852, 859, 860, 863, 873, 891, 901, 919, 922, 925,
926, 933, 932, 955, 959, 962, 967, 972, 978, 986,
- 992, 998, 1004, 1012, 1020, 1027, 1033, 1032, 1044, 1052,
- 1058, 1057, 1069, 1077, 1086, 1090, 1085, 1107, 1106, 1115,
- 1121, 1122, 1128, 1131, 1137, 1138, 1139, 1142, 1143, 1149,
- 1150, 1153, 1157, 1161, 1162, 1165, 1166, 1167, 1168, 1169,
- 1170, 1171, 1172, 1173, 1176, 1177, 1178, 1179, 1180, 1181,
- 1182, 1185, 1186, 1187, 1190, 1205, 1217, 1218
+ 992, 998, 1004, 1012, 1020, 1027, 1033, 1032, 1044, 1053,
+ 1059, 1058, 1070, 1078, 1087, 1091, 1086, 1108, 1107, 1116,
+ 1122, 1123, 1129, 1132, 1138, 1139, 1140, 1143, 1144, 1150,
+ 1151, 1154, 1158, 1162, 1163, 1166, 1167, 1168, 1169, 1170,
+ 1171, 1172, 1173, 1174, 1177, 1178, 1179, 1180, 1181, 1182,
+ 1183, 1186, 1187, 1188, 1191, 1206, 1218, 1219
};
#endif
-#if YYDEBUG || YYERROR_VERBOSE || 0
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
@@ -764,16 +719,16 @@ static const char *const yytname[] =
"LTYPEDEF", "LTYPESTR", "LUNION", "LUNSIGNED", "LWHILE", "LVOID",
"LENUM", "LSIGNED", "LCONSTNT", "LVOLATILE", "LSET", "LSIGNOF",
"LRESTRICT", "LINLINE", "')'", "']'", "'{'", "'}'", "'!'", "'~'",
- "$accept", "prog", "xdecl", "$@1", "$@2", "xdlist", "$@3", "xdecor",
- "xdecor2", "adecl", "adlist", "$@4", "pdecl", "pdlist", "edecl", "$@5",
- "$@6", "zedlist", "edlist", "edecor", "abdecor", "abdecor1", "abdecor2",
+ "$accept", "prog", "xdecl", "@1", "@2", "xdlist", "@3", "xdecor",
+ "xdecor2", "adecl", "adlist", "@4", "pdecl", "pdlist", "edecl", "@5",
+ "@6", "zedlist", "edlist", "edecor", "abdecor", "abdecor1", "abdecor2",
"abdecor3", "init", "qual", "qlist", "ilist", "zarglist", "arglist",
- "block", "slist", "labels", "label", "stmnt", "forexpr", "ulstmnt",
- "$@7", "$@8", "zcexpr", "zexpr", "lexpr", "cexpr", "expr", "xuexpr",
- "uexpr", "pexpr", "string", "lstring", "zelist", "elist", "sbody", "@9",
- "zctlist", "types", "tlist", "ctlist", "complex", "$@10", "$@11", "$@12",
- "$@13", "$@14", "gctnlist", "zgnlist", "gctname", "gcnlist", "gcname",
- "enum", "tname", "cname", "gname", "name", "tag", "ltag", YY_NULL
+ "block", "slist", "labels", "label", "stmnt", "forexpr", "ulstmnt", "@7",
+ "@8", "zcexpr", "zexpr", "lexpr", "cexpr", "expr", "xuexpr", "uexpr",
+ "pexpr", "string", "lstring", "zelist", "elist", "sbody", "@9",
+ "zctlist", "types", "tlist", "ctlist", "complex", "@10", "@11", "@12",
+ "@13", "@14", "gctnlist", "zgnlist", "gctname", "gcnlist", "gcname",
+ "enum", "tname", "cname", "gname", "name", "tag", "ltag", 0
};
#endif
@@ -855,8 +810,8 @@ static const yytype_uint8 yyr2[] =
1, 1, 1, 1, 1, 1, 1, 1
};
-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
- Performed when YYTABLE doesn't specify something else to do. Zero
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
@@ -981,7 +936,8 @@ static const yytype_int16 yypgoto[] =
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
- number is the opposite. If YYTABLE_NINF, syntax error. */
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -205
static const yytype_int16 yytable[] =
{
@@ -1106,12 +1062,6 @@ static const yytype_int16 yytable[] =
178, 179, 180, 181, 182, 183, 184, 185, 186
};
-#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-331)))
-
-#define yytable_value_is_error(Yytable_value) \
- YYID (0)
-
static const yytype_int16 yycheck[] =
{
1, 27, 14, 91, 131, 17, 30, 58, 20, 33,
@@ -1295,50 +1245,78 @@ static const yytype_uint8 yystos[] =
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. However,
- YYFAIL appears to be in use. Nevertheless, it is formally deprecated
- in Bison 2.4.2's NEWS entry, where a plan to phase it out is
- discussed. */
+ Once GCC version 2 has supplanted version 1, this can go. */
#define YYFAIL goto yyerrlab
-#if defined YYFAIL
- /* This is here to suppress warnings from the GCC cpp's
- -Wunused-macros. Normally we don't worry about that warning, but
- some users do, and we want to make it easy for users to remove
- YYFAIL uses, which will produce warnings from Bison 2.5. */
-#endif
#define YYRECOVERING() (!!yyerrstatus)
-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- YYPOPSTACK (yylen); \
- yystate = *yyssp; \
- goto yybackup; \
- } \
- else \
- { \
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yytoken = YYTRANSLATE (yychar); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
yyerror (YY_("syntax error: cannot back up")); \
YYERROR; \
} \
while (YYID (0))
-/* Error token number */
+
#define YYTERROR 1
#define YYERRCODE 256
-/* This macro is provided for backward compatibility. */
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+ This macro was not mandated originally: define only if we know
+ we won't break user code: when these are the locations we know. */
+
#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+# define YY_LOCATION_PRINT(File, Loc) \
+ fprintf (File, "%d.%d-%d.%d", \
+ (Loc).first_line, (Loc).first_column, \
+ (Loc).last_line, (Loc).last_column)
+# else
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
#endif
/* YYLEX -- calling `yylex' with the right arguments. */
+
#ifdef YYLEX_PARAM
# define YYLEX yylex (YYLEX_PARAM)
#else
@@ -1388,8 +1366,6 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep)
YYSTYPE const * const yyvaluep;
#endif
{
- FILE *yyo = yyoutput;
- YYUSE (yyo);
if (!yyvaluep)
return;
# ifdef YYPRINT
@@ -1398,7 +1374,11 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep)
# else
YYUSE (yyoutput);
# endif
- YYUSE (yytype);
+ switch (yytype)
+ {
+ default:
+ break;
+ }
}
@@ -1435,20 +1415,17 @@ yy_symbol_print (yyoutput, yytype, yyvaluep)
#if (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
#else
static void
-yy_stack_print (yybottom, yytop)
- yytype_int16 *yybottom;
- yytype_int16 *yytop;
+yy_stack_print (bottom, top)
+ yytype_int16 *bottom;
+ yytype_int16 *top;
#endif
{
YYFPRINTF (stderr, "Stack now");
- for (; yybottom <= yytop; yybottom++)
- {
- int yybot = *yybottom;
- YYFPRINTF (stderr, " %d", yybot);
- }
+ for (; bottom <= top; ++bottom)
+ YYFPRINTF (stderr, " %d", *bottom);
YYFPRINTF (stderr, "\n");
}
@@ -1482,11 +1459,11 @@ yy_reduce_print (yyvsp, yyrule)
/* The symbols being reduced. */
for (yyi = 0; yyi < yynrhs; yyi++)
{
- YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ fprintf (stderr, " $%d = ", yyi + 1);
yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
&(yyvsp[(yyi + 1) - (yynrhs)])
);
- YYFPRINTF (stderr, "\n");
+ fprintf (stderr, "\n");
}
}
@@ -1523,6 +1500,7 @@ int yydebug;
# define YYMAXDEPTH 10000
#endif
+
#if YYERROR_VERBOSE
@@ -1625,145 +1603,115 @@ yytnamerr (char *yyres, const char *yystr)
}
# endif
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
- about the unexpected token YYTOKEN for the state stack whose top is
- YYSSP.
-
- Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
- not large enough to hold the message. In that case, also set
- *YYMSG_ALLOC to the required number of bytes. Return 2 if the
- required number of bytes is too large to store. */
-static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
- yytype_int16 *yyssp, int yytoken)
+/* Copy into YYRESULT an error message about the unexpected token
+ YYCHAR while in state YYSTATE. Return the number of bytes copied,
+ including the terminating null byte. If YYRESULT is null, do not
+ copy anything; just return the number of bytes that would be
+ copied. As a special case, return 0 if an ordinary "syntax error"
+ message will do. Return YYSIZE_MAXIMUM if overflow occurs during
+ size calculation. */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
{
- YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
- YYSIZE_T yysize = yysize0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- /* Internationalized format string. */
- const char *yyformat = YY_NULL;
- /* Arguments of yyformat. */
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- /* Number of reported tokens (one for the "unexpected", one per
- "expected"). */
- int yycount = 0;
-
- /* There are many possibilities here to consider:
- - Assume YYFAIL is not used. It's too flawed to consider. See
- <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
- for details. YYERROR is fine as it does not invoke this
- function.
- - If this state is a consistent state with a default action, then
- the only way this function was invoked is if the default action
- is an error action. In that case, don't check for expected
- tokens because there are none.
- - The only way there can be no lookahead present (in yychar) is if
- this state is a consistent state with a default action. Thus,
- detecting the absence of a lookahead is sufficient to determine
- that there is no unexpected or expected token to report. In that
- case, just report a simple "syntax error".
- - Don't assume there isn't a lookahead just because this state is a
- consistent state with a default action. There might have been a
- previous inconsistent state, consistent state with a non-default
- action, or user semantic action that manipulated yychar.
- - Of course, the expected token list depends on states to have
- correct lookahead information, and it depends on the parser not
- to perform extra reductions after fetching a lookahead from the
- scanner and before detecting a syntax error. Thus, state merging
- (from LALR or IELR) and default reductions corrupt the expected
- token list. However, the list is correct for canonical LR with
- one exception: it will still contain any token that will not be
- accepted due to an error action in a later state.
- */
- if (yytoken != YYEMPTY)
- {
- int yyn = yypact[*yyssp];
- yyarg[yycount++] = yytname[yytoken];
- if (!yypact_value_is_default (yyn))
- {
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. In other words, skip the first -YYN actions for
- this state because they are default actions. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yyx;
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
- && !yytable_value_is_error (yytable[yyx + yyn]))
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- yysize = yysize0;
- break;
- }
- yyarg[yycount++] = yytname[yyx];
- {
- YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
- if (! (yysize <= yysize1
- && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
- return 2;
- yysize = yysize1;
- }
- }
- }
- }
+ int yyn = yypact[yystate];
- switch (yycount)
- {
-# define YYCASE_(N, S) \
- case N: \
- yyformat = S; \
- break
- YYCASE_(0, YY_("syntax error"));
- YYCASE_(1, YY_("syntax error, unexpected %s"));
- YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
- YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
- YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
- YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
- }
+ if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+ return 0;
+ else
+ {
+ int yytype = YYTRANSLATE (yychar);
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ int yysize_overflow = 0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ int yyx;
+
+# if 0
+ /* This is so xgettext sees the translatable formats that are
+ constructed on the fly. */
+ YY_("syntax error, unexpected %s");
+ YY_("syntax error, unexpected %s, expecting %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+ char *yyfmt;
+ char const *yyf;
+ static char const yyunexpected[] = "syntax error, unexpected %s";
+ static char const yyexpecting[] = ", expecting %s";
+ static char const yyor[] = " or %s";
+ char yyformat[sizeof yyunexpected
+ + sizeof yyexpecting - 1
+ + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+ * (sizeof yyor - 1))];
+ char const *yyprefix = yyexpecting;
+
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yycount = 1;
+
+ yyarg[0] = yytname[yytype];
+ yyfmt = yystpcpy (yyformat, yyunexpected);
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ yyformat[sizeof yyunexpected - 1] = '\0';
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+ yyfmt = yystpcpy (yyfmt, yyprefix);
+ yyprefix = yyor;
+ }
- {
- YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
- if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
- return 2;
- yysize = yysize1;
- }
+ yyf = YY_(yyformat);
+ yysize1 = yysize + yystrlen (yyf);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
- if (*yymsg_alloc < yysize)
- {
- *yymsg_alloc = 2 * yysize;
- if (! (yysize <= *yymsg_alloc
- && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
- *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
- return 1;
- }
+ if (yysize_overflow)
+ return YYSIZE_MAXIMUM;
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- {
- char *yyp = *yymsg;
- int yyi = 0;
- while ((*yyp = *yyformat) != '\0')
- if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyformat += 2;
- }
- else
- {
- yyp++;
- yyformat++;
- }
- }
- return 0;
+ if (yyresult)
+ {
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ char *yyp = yyresult;
+ int yyi = 0;
+ while ((*yyp = *yyf) != '\0')
+ {
+ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyf += 2;
+ }
+ else
+ {
+ yyp++;
+ yyf++;
+ }
+ }
+ }
+ return yysize;
+ }
}
#endif /* YYERROR_VERBOSE */
+
/*-----------------------------------------------.
| Release the memory associated to this symbol. |
@@ -1788,31 +1736,44 @@ yydestruct (yymsg, yytype, yyvaluep)
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
- YYUSE (yytype);
-}
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+/* Prevent warnings from -Wmissing-prototypes. */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
-/* The lookahead symbol. */
-int yychar;
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
+/* The look-ahead symbol. */
+int yychar;
-/* The semantic value of the lookahead symbol. */
-YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
+/* The semantic value of the look-ahead symbol. */
+YYSTYPE yylval;
/* Number of syntax errors so far. */
int yynerrs;
+
/*----------.
| yyparse. |
`----------*/
@@ -1839,37 +1800,14 @@ yyparse ()
#endif
#endif
{
- int yystate;
- /* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
-
- /* The stacks and their tools:
- `yyss': related to states.
- `yyvs': related to semantic values.
-
- Refer to the stacks through separate pointers, to allow yyoverflow
- to reallocate them elsewhere. */
-
- /* The state stack. */
- yytype_int16 yyssa[YYINITDEPTH];
- yytype_int16 *yyss;
- yytype_int16 *yyssp;
-
- /* The semantic value stack. */
- YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs;
- YYSTYPE *yyvsp;
-
- YYSIZE_T yystacksize;
-
+
+ int yystate;
int yyn;
int yyresult;
- /* Lookahead token as an internal (translated) token number. */
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Look-ahead token as an internal (translated) token number. */
int yytoken = 0;
- /* The variables used to return semantic value and location from the
- action routines. */
- YYSTYPE yyval;
-
#if YYERROR_VERBOSE
/* Buffer for error messages, and its allocated size. */
char yymsgbuf[128];
@@ -1877,22 +1815,54 @@ yyparse ()
YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
#endif
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss = yyssa;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp;
+
+
+
#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
/* The number of symbols on the RHS of the reduced rule.
Keep to zero when no symbol should be popped. */
int yylen = 0;
- yyssp = yyss = yyssa;
- yyvsp = yyvs = yyvsa;
- yystacksize = YYINITDEPTH;
-
YYDPRINTF ((stderr, "Starting parse\n"));
yystate = 0;
yyerrstatus = 0;
yynerrs = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+
goto yysetstate;
/*------------------------------------------------------------.
@@ -1919,6 +1889,7 @@ yyparse ()
YYSTYPE *yyvs1 = yyvs;
yytype_int16 *yyss1 = yyss;
+
/* Each stack pointer address is followed by the size of the
data in use in that stack, in bytes. This used to be a
conditional around just the two extra args, but that might
@@ -1926,6 +1897,7 @@ yyparse ()
yyoverflow (YY_("memory exhausted"),
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
+
&yystacksize);
yyss = yyss1;
@@ -1948,8 +1920,9 @@ yyparse ()
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss_alloc, yyss);
- YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+
# undef YYSTACK_RELOCATE
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
@@ -1960,6 +1933,7 @@ yyparse ()
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
+
YYDPRINTF ((stderr, "Stack size increased to %lu\n",
(unsigned long int) yystacksize));
@@ -1969,9 +1943,6 @@ yyparse ()
YYDPRINTF ((stderr, "Entering state %d\n", yystate));
- if (yystate == YYFINAL)
- YYACCEPT;
-
goto yybackup;
/*-----------.
@@ -1980,16 +1951,16 @@ yyparse ()
yybackup:
/* Do appropriate processing given the current state. Read a
- lookahead token if we need one and don't already have one. */
+ look-ahead token if we need one and don't already have one. */
- /* First try to decide what to do without reference to lookahead token. */
+ /* First try to decide what to do without reference to look-ahead token. */
yyn = yypact[yystate];
- if (yypact_value_is_default (yyn))
+ if (yyn == YYPACT_NINF)
goto yydefault;
- /* Not known => get a lookahead token if don't already have one. */
+ /* Not known => get a look-ahead token if don't already have one. */
- /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
@@ -2015,27 +1986,29 @@ yybackup:
yyn = yytable[yyn];
if (yyn <= 0)
{
- if (yytable_value_is_error (yyn))
- goto yyerrlab;
+ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
/* Count tokens shifted since error; after three, turn off error
status. */
if (yyerrstatus)
yyerrstatus--;
- /* Shift the lookahead token. */
+ /* Shift the look-ahead token. */
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
- /* Discard the shifted token. */
- yychar = YYEMPTY;
+ /* Discard the shifted token unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
yystate = yyn;
- YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
- YY_IGNORE_MAYBE_UNINITIALIZED_END
goto yynewstate;
@@ -2072,7 +2045,6 @@ yyreduce:
switch (yyn)
{
case 4:
-/* Line 1787 of yacc.c */
#line 109 "cc.y"
{
dodecl(xdecl, lastclass, lasttype, Z);
@@ -2080,7 +2052,6 @@ yyreduce:
break;
case 6:
-/* Line 1787 of yacc.c */
#line 114 "cc.y"
{
lastdcl = T;
@@ -2098,7 +2069,6 @@ yyreduce:
break;
case 7:
-/* Line 1787 of yacc.c */
#line 128 "cc.y"
{
argmark((yyvsp[(2) - (4)].node), 1);
@@ -2106,7 +2076,6 @@ yyreduce:
break;
case 8:
-/* Line 1787 of yacc.c */
#line 132 "cc.y"
{
Node *n;
@@ -2120,7 +2089,6 @@ yyreduce:
break;
case 9:
-/* Line 1787 of yacc.c */
#line 144 "cc.y"
{
dodecl(xdecl, lastclass, lasttype, (yyvsp[(1) - (1)].node));
@@ -2128,7 +2096,6 @@ yyreduce:
break;
case 10:
-/* Line 1787 of yacc.c */
#line 148 "cc.y"
{
(yyvsp[(1) - (1)].node) = dodecl(xdecl, lastclass, lasttype, (yyvsp[(1) - (1)].node));
@@ -2136,7 +2103,6 @@ yyreduce:
break;
case 11:
-/* Line 1787 of yacc.c */
#line 152 "cc.y"
{
doinit((yyvsp[(1) - (4)].node)->sym, (yyvsp[(1) - (4)].node)->type, 0L, (yyvsp[(4) - (4)].node));
@@ -2144,7 +2110,6 @@ yyreduce:
break;
case 14:
-/* Line 1787 of yacc.c */
#line 160 "cc.y"
{
(yyval.node) = new(OIND, (yyvsp[(3) - (3)].node), Z);
@@ -2153,7 +2118,6 @@ yyreduce:
break;
case 16:
-/* Line 1787 of yacc.c */
#line 168 "cc.y"
{
(yyval.node) = (yyvsp[(2) - (3)].node);
@@ -2161,7 +2125,6 @@ yyreduce:
break;
case 17:
-/* Line 1787 of yacc.c */
#line 172 "cc.y"
{
(yyval.node) = new(OFUNC, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
@@ -2169,7 +2132,6 @@ yyreduce:
break;
case 18:
-/* Line 1787 of yacc.c */
#line 176 "cc.y"
{
(yyval.node) = new(OARRAY, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
@@ -2177,7 +2139,6 @@ yyreduce:
break;
case 19:
-/* Line 1787 of yacc.c */
#line 185 "cc.y"
{
(yyval.node) = dodecl(adecl, lastclass, lasttype, Z);
@@ -2185,7 +2146,6 @@ yyreduce:
break;
case 20:
-/* Line 1787 of yacc.c */
#line 189 "cc.y"
{
(yyval.node) = (yyvsp[(2) - (3)].node);
@@ -2193,7 +2153,6 @@ yyreduce:
break;
case 21:
-/* Line 1787 of yacc.c */
#line 195 "cc.y"
{
dodecl(adecl, lastclass, lasttype, (yyvsp[(1) - (1)].node));
@@ -2202,7 +2161,6 @@ yyreduce:
break;
case 22:
-/* Line 1787 of yacc.c */
#line 200 "cc.y"
{
(yyvsp[(1) - (1)].node) = dodecl(adecl, lastclass, lasttype, (yyvsp[(1) - (1)].node));
@@ -2210,7 +2168,6 @@ yyreduce:
break;
case 23:
-/* Line 1787 of yacc.c */
#line 204 "cc.y"
{
int32 w;
@@ -2222,7 +2179,6 @@ yyreduce:
break;
case 24:
-/* Line 1787 of yacc.c */
#line 212 "cc.y"
{
(yyval.node) = (yyvsp[(1) - (3)].node);
@@ -2235,7 +2191,6 @@ yyreduce:
break;
case 27:
-/* Line 1787 of yacc.c */
#line 229 "cc.y"
{
dodecl(pdecl, lastclass, lasttype, (yyvsp[(1) - (1)].node));
@@ -2243,7 +2198,6 @@ yyreduce:
break;
case 29:
-/* Line 1787 of yacc.c */
#line 239 "cc.y"
{
lasttype = (yyvsp[(1) - (1)].type);
@@ -2251,7 +2205,6 @@ yyreduce:
break;
case 31:
-/* Line 1787 of yacc.c */
#line 244 "cc.y"
{
lasttype = (yyvsp[(2) - (2)].type);
@@ -2259,7 +2212,6 @@ yyreduce:
break;
case 33:
-/* Line 1787 of yacc.c */
#line 250 "cc.y"
{
lastfield = 0;
@@ -2268,7 +2220,6 @@ yyreduce:
break;
case 35:
-/* Line 1787 of yacc.c */
#line 258 "cc.y"
{
dodecl(edecl, CXXX, lasttype, (yyvsp[(1) - (1)].node));
@@ -2276,7 +2227,6 @@ yyreduce:
break;
case 37:
-/* Line 1787 of yacc.c */
#line 265 "cc.y"
{
lastbit = 0;
@@ -2285,7 +2235,6 @@ yyreduce:
break;
case 38:
-/* Line 1787 of yacc.c */
#line 270 "cc.y"
{
(yyval.node) = new(OBIT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2293,7 +2242,6 @@ yyreduce:
break;
case 39:
-/* Line 1787 of yacc.c */
#line 274 "cc.y"
{
(yyval.node) = new(OBIT, Z, (yyvsp[(2) - (2)].node));
@@ -2301,7 +2249,6 @@ yyreduce:
break;
case 40:
-/* Line 1787 of yacc.c */
#line 282 "cc.y"
{
(yyval.node) = (Z);
@@ -2309,7 +2256,6 @@ yyreduce:
break;
case 42:
-/* Line 1787 of yacc.c */
#line 289 "cc.y"
{
(yyval.node) = new(OIND, (Z), Z);
@@ -2318,7 +2264,6 @@ yyreduce:
break;
case 43:
-/* Line 1787 of yacc.c */
#line 294 "cc.y"
{
(yyval.node) = new(OIND, (yyvsp[(3) - (3)].node), Z);
@@ -2327,7 +2272,6 @@ yyreduce:
break;
case 46:
-/* Line 1787 of yacc.c */
#line 303 "cc.y"
{
(yyval.node) = new(OFUNC, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
@@ -2335,7 +2279,6 @@ yyreduce:
break;
case 47:
-/* Line 1787 of yacc.c */
#line 307 "cc.y"
{
(yyval.node) = new(OARRAY, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
@@ -2343,7 +2286,6 @@ yyreduce:
break;
case 48:
-/* Line 1787 of yacc.c */
#line 313 "cc.y"
{
(yyval.node) = new(OFUNC, (Z), Z);
@@ -2351,7 +2293,6 @@ yyreduce:
break;
case 49:
-/* Line 1787 of yacc.c */
#line 317 "cc.y"
{
(yyval.node) = new(OARRAY, (Z), (yyvsp[(2) - (3)].node));
@@ -2359,7 +2300,6 @@ yyreduce:
break;
case 50:
-/* Line 1787 of yacc.c */
#line 321 "cc.y"
{
(yyval.node) = (yyvsp[(2) - (3)].node);
@@ -2367,7 +2307,6 @@ yyreduce:
break;
case 52:
-/* Line 1787 of yacc.c */
#line 328 "cc.y"
{
(yyval.node) = new(OINIT, invert((yyvsp[(2) - (3)].node)), Z);
@@ -2375,7 +2314,6 @@ yyreduce:
break;
case 53:
-/* Line 1787 of yacc.c */
#line 334 "cc.y"
{
(yyval.node) = new(OARRAY, (yyvsp[(2) - (3)].node), Z);
@@ -2383,7 +2321,6 @@ yyreduce:
break;
case 54:
-/* Line 1787 of yacc.c */
#line 338 "cc.y"
{
(yyval.node) = new(OELEM, Z, Z);
@@ -2392,7 +2329,6 @@ yyreduce:
break;
case 57:
-/* Line 1787 of yacc.c */
#line 347 "cc.y"
{
(yyval.node) = new(OLIST, (yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
@@ -2400,7 +2336,6 @@ yyreduce:
break;
case 59:
-/* Line 1787 of yacc.c */
#line 352 "cc.y"
{
(yyval.node) = new(OLIST, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
@@ -2408,7 +2343,6 @@ yyreduce:
break;
case 62:
-/* Line 1787 of yacc.c */
#line 360 "cc.y"
{
(yyval.node) = new(OLIST, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
@@ -2416,7 +2350,6 @@ yyreduce:
break;
case 63:
-/* Line 1787 of yacc.c */
#line 365 "cc.y"
{
(yyval.node) = Z;
@@ -2424,7 +2357,6 @@ yyreduce:
break;
case 64:
-/* Line 1787 of yacc.c */
#line 369 "cc.y"
{
(yyval.node) = invert((yyvsp[(1) - (1)].node));
@@ -2432,7 +2364,6 @@ yyreduce:
break;
case 66:
-/* Line 1787 of yacc.c */
#line 377 "cc.y"
{
(yyval.node) = new(OPROTO, (yyvsp[(2) - (2)].node), Z);
@@ -2441,7 +2372,6 @@ yyreduce:
break;
case 67:
-/* Line 1787 of yacc.c */
#line 382 "cc.y"
{
(yyval.node) = new(OPROTO, (yyvsp[(2) - (2)].node), Z);
@@ -2450,7 +2380,6 @@ yyreduce:
break;
case 68:
-/* Line 1787 of yacc.c */
#line 387 "cc.y"
{
(yyval.node) = new(ODOTDOT, Z, Z);
@@ -2458,7 +2387,6 @@ yyreduce:
break;
case 69:
-/* Line 1787 of yacc.c */
#line 391 "cc.y"
{
(yyval.node) = new(OLIST, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2466,7 +2394,6 @@ yyreduce:
break;
case 70:
-/* Line 1787 of yacc.c */
#line 397 "cc.y"
{
(yyval.node) = invert((yyvsp[(2) - (3)].node));
@@ -2478,7 +2405,6 @@ yyreduce:
break;
case 71:
-/* Line 1787 of yacc.c */
#line 406 "cc.y"
{
(yyval.node) = Z;
@@ -2486,7 +2412,6 @@ yyreduce:
break;
case 72:
-/* Line 1787 of yacc.c */
#line 410 "cc.y"
{
(yyval.node) = new(OLIST, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
@@ -2494,7 +2419,6 @@ yyreduce:
break;
case 73:
-/* Line 1787 of yacc.c */
#line 414 "cc.y"
{
(yyval.node) = new(OLIST, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
@@ -2502,7 +2426,6 @@ yyreduce:
break;
case 75:
-/* Line 1787 of yacc.c */
#line 421 "cc.y"
{
(yyval.node) = new(OLIST, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
@@ -2510,7 +2433,6 @@ yyreduce:
break;
case 76:
-/* Line 1787 of yacc.c */
#line 427 "cc.y"
{
(yyval.node) = new(OCASE, (yyvsp[(2) - (3)].node), Z);
@@ -2518,7 +2440,6 @@ yyreduce:
break;
case 77:
-/* Line 1787 of yacc.c */
#line 431 "cc.y"
{
(yyval.node) = new(OCASE, Z, Z);
@@ -2526,7 +2447,6 @@ yyreduce:
break;
case 78:
-/* Line 1787 of yacc.c */
#line 435 "cc.y"
{
(yyval.node) = new(OLABEL, dcllabel((yyvsp[(1) - (2)].sym), 1), Z);
@@ -2534,7 +2454,6 @@ yyreduce:
break;
case 79:
-/* Line 1787 of yacc.c */
#line 441 "cc.y"
{
(yyval.node) = Z;
@@ -2542,7 +2461,6 @@ yyreduce:
break;
case 81:
-/* Line 1787 of yacc.c */
#line 446 "cc.y"
{
(yyval.node) = new(OLIST, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
@@ -2550,7 +2468,6 @@ yyreduce:
break;
case 83:
-/* Line 1787 of yacc.c */
#line 453 "cc.y"
{
(yyval.node) = (yyvsp[(2) - (2)].node);
@@ -2558,7 +2475,6 @@ yyreduce:
break;
case 85:
-/* Line 1787 of yacc.c */
#line 459 "cc.y"
{
markdcl();
@@ -2566,7 +2482,6 @@ yyreduce:
break;
case 86:
-/* Line 1787 of yacc.c */
#line 463 "cc.y"
{
(yyval.node) = revertdcl();
@@ -2578,7 +2493,6 @@ yyreduce:
break;
case 87:
-/* Line 1787 of yacc.c */
#line 471 "cc.y"
{
(yyval.node) = new(OIF, (yyvsp[(3) - (5)].node), new(OLIST, (yyvsp[(5) - (5)].node), Z));
@@ -2588,7 +2502,6 @@ yyreduce:
break;
case 88:
-/* Line 1787 of yacc.c */
#line 477 "cc.y"
{
(yyval.node) = new(OIF, (yyvsp[(3) - (7)].node), new(OLIST, (yyvsp[(5) - (7)].node), (yyvsp[(7) - (7)].node)));
@@ -2600,13 +2513,11 @@ yyreduce:
break;
case 89:
-/* Line 1787 of yacc.c */
#line 484 "cc.y"
{ markdcl(); }
break;
case 90:
-/* Line 1787 of yacc.c */
#line 485 "cc.y"
{
(yyval.node) = revertdcl();
@@ -2621,7 +2532,6 @@ yyreduce:
break;
case 91:
-/* Line 1787 of yacc.c */
#line 496 "cc.y"
{
(yyval.node) = new(OWHILE, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
@@ -2629,7 +2539,6 @@ yyreduce:
break;
case 92:
-/* Line 1787 of yacc.c */
#line 500 "cc.y"
{
(yyval.node) = new(ODWHILE, (yyvsp[(5) - (7)].node), (yyvsp[(2) - (7)].node));
@@ -2637,7 +2546,6 @@ yyreduce:
break;
case 93:
-/* Line 1787 of yacc.c */
#line 504 "cc.y"
{
(yyval.node) = new(ORETURN, (yyvsp[(2) - (3)].node), Z);
@@ -2646,7 +2554,6 @@ yyreduce:
break;
case 94:
-/* Line 1787 of yacc.c */
#line 509 "cc.y"
{
(yyval.node) = new(OCONST, Z, Z);
@@ -2664,7 +2571,6 @@ yyreduce:
break;
case 95:
-/* Line 1787 of yacc.c */
#line 523 "cc.y"
{
(yyval.node) = new(OBREAK, Z, Z);
@@ -2672,7 +2578,6 @@ yyreduce:
break;
case 96:
-/* Line 1787 of yacc.c */
#line 527 "cc.y"
{
(yyval.node) = new(OCONTINUE, Z, Z);
@@ -2680,7 +2585,6 @@ yyreduce:
break;
case 97:
-/* Line 1787 of yacc.c */
#line 531 "cc.y"
{
(yyval.node) = new(OGOTO, dcllabel((yyvsp[(2) - (3)].sym), 0), Z);
@@ -2688,7 +2592,6 @@ yyreduce:
break;
case 98:
-/* Line 1787 of yacc.c */
#line 535 "cc.y"
{
(yyval.node) = new(OUSED, (yyvsp[(3) - (5)].node), Z);
@@ -2696,7 +2599,6 @@ yyreduce:
break;
case 99:
-/* Line 1787 of yacc.c */
#line 539 "cc.y"
{
(yyval.node) = new(OPREFETCH, (yyvsp[(3) - (5)].node), Z);
@@ -2704,7 +2606,6 @@ yyreduce:
break;
case 100:
-/* Line 1787 of yacc.c */
#line 543 "cc.y"
{
(yyval.node) = new(OSET, (yyvsp[(3) - (5)].node), Z);
@@ -2712,7 +2613,6 @@ yyreduce:
break;
case 101:
-/* Line 1787 of yacc.c */
#line 548 "cc.y"
{
(yyval.node) = Z;
@@ -2720,7 +2620,6 @@ yyreduce:
break;
case 103:
-/* Line 1787 of yacc.c */
#line 554 "cc.y"
{
(yyval.node) = Z;
@@ -2728,7 +2627,6 @@ yyreduce:
break;
case 105:
-/* Line 1787 of yacc.c */
#line 561 "cc.y"
{
(yyval.node) = new(OCAST, (yyvsp[(1) - (1)].node), Z);
@@ -2737,7 +2635,6 @@ yyreduce:
break;
case 107:
-/* Line 1787 of yacc.c */
#line 569 "cc.y"
{
(yyval.node) = new(OCOMMA, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2745,7 +2642,6 @@ yyreduce:
break;
case 109:
-/* Line 1787 of yacc.c */
#line 576 "cc.y"
{
(yyval.node) = new(OMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2753,7 +2649,6 @@ yyreduce:
break;
case 110:
-/* Line 1787 of yacc.c */
#line 580 "cc.y"
{
(yyval.node) = new(ODIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2761,7 +2656,6 @@ yyreduce:
break;
case 111:
-/* Line 1787 of yacc.c */
#line 584 "cc.y"
{
(yyval.node) = new(OMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2769,7 +2663,6 @@ yyreduce:
break;
case 112:
-/* Line 1787 of yacc.c */
#line 588 "cc.y"
{
(yyval.node) = new(OADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2777,7 +2670,6 @@ yyreduce:
break;
case 113:
-/* Line 1787 of yacc.c */
#line 592 "cc.y"
{
(yyval.node) = new(OSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2785,7 +2677,6 @@ yyreduce:
break;
case 114:
-/* Line 1787 of yacc.c */
#line 596 "cc.y"
{
(yyval.node) = new(OASHR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2793,7 +2684,6 @@ yyreduce:
break;
case 115:
-/* Line 1787 of yacc.c */
#line 600 "cc.y"
{
(yyval.node) = new(OASHL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2801,7 +2691,6 @@ yyreduce:
break;
case 116:
-/* Line 1787 of yacc.c */
#line 604 "cc.y"
{
(yyval.node) = new(OLT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2809,7 +2698,6 @@ yyreduce:
break;
case 117:
-/* Line 1787 of yacc.c */
#line 608 "cc.y"
{
(yyval.node) = new(OGT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2817,7 +2705,6 @@ yyreduce:
break;
case 118:
-/* Line 1787 of yacc.c */
#line 612 "cc.y"
{
(yyval.node) = new(OLE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2825,7 +2712,6 @@ yyreduce:
break;
case 119:
-/* Line 1787 of yacc.c */
#line 616 "cc.y"
{
(yyval.node) = new(OGE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2833,7 +2719,6 @@ yyreduce:
break;
case 120:
-/* Line 1787 of yacc.c */
#line 620 "cc.y"
{
(yyval.node) = new(OEQ, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2841,7 +2726,6 @@ yyreduce:
break;
case 121:
-/* Line 1787 of yacc.c */
#line 624 "cc.y"
{
(yyval.node) = new(ONE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2849,7 +2733,6 @@ yyreduce:
break;
case 122:
-/* Line 1787 of yacc.c */
#line 628 "cc.y"
{
(yyval.node) = new(OAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2857,7 +2740,6 @@ yyreduce:
break;
case 123:
-/* Line 1787 of yacc.c */
#line 632 "cc.y"
{
(yyval.node) = new(OXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2865,7 +2747,6 @@ yyreduce:
break;
case 124:
-/* Line 1787 of yacc.c */
#line 636 "cc.y"
{
(yyval.node) = new(OOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2873,7 +2754,6 @@ yyreduce:
break;
case 125:
-/* Line 1787 of yacc.c */
#line 640 "cc.y"
{
(yyval.node) = new(OANDAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2881,7 +2761,6 @@ yyreduce:
break;
case 126:
-/* Line 1787 of yacc.c */
#line 644 "cc.y"
{
(yyval.node) = new(OOROR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2889,7 +2768,6 @@ yyreduce:
break;
case 127:
-/* Line 1787 of yacc.c */
#line 648 "cc.y"
{
(yyval.node) = new(OCOND, (yyvsp[(1) - (5)].node), new(OLIST, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)));
@@ -2897,7 +2775,6 @@ yyreduce:
break;
case 128:
-/* Line 1787 of yacc.c */
#line 652 "cc.y"
{
(yyval.node) = new(OAS, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2905,7 +2782,6 @@ yyreduce:
break;
case 129:
-/* Line 1787 of yacc.c */
#line 656 "cc.y"
{
(yyval.node) = new(OASADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2913,7 +2789,6 @@ yyreduce:
break;
case 130:
-/* Line 1787 of yacc.c */
#line 660 "cc.y"
{
(yyval.node) = new(OASSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2921,7 +2796,6 @@ yyreduce:
break;
case 131:
-/* Line 1787 of yacc.c */
#line 664 "cc.y"
{
(yyval.node) = new(OASMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2929,7 +2803,6 @@ yyreduce:
break;
case 132:
-/* Line 1787 of yacc.c */
#line 668 "cc.y"
{
(yyval.node) = new(OASDIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2937,7 +2810,6 @@ yyreduce:
break;
case 133:
-/* Line 1787 of yacc.c */
#line 672 "cc.y"
{
(yyval.node) = new(OASMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2945,7 +2817,6 @@ yyreduce:
break;
case 134:
-/* Line 1787 of yacc.c */
#line 676 "cc.y"
{
(yyval.node) = new(OASASHL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2953,7 +2824,6 @@ yyreduce:
break;
case 135:
-/* Line 1787 of yacc.c */
#line 680 "cc.y"
{
(yyval.node) = new(OASASHR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2961,7 +2831,6 @@ yyreduce:
break;
case 136:
-/* Line 1787 of yacc.c */
#line 684 "cc.y"
{
(yyval.node) = new(OASAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2969,7 +2838,6 @@ yyreduce:
break;
case 137:
-/* Line 1787 of yacc.c */
#line 688 "cc.y"
{
(yyval.node) = new(OASXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2977,7 +2845,6 @@ yyreduce:
break;
case 138:
-/* Line 1787 of yacc.c */
#line 692 "cc.y"
{
(yyval.node) = new(OASOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -2985,7 +2852,6 @@ yyreduce:
break;
case 140:
-/* Line 1787 of yacc.c */
#line 699 "cc.y"
{
(yyval.node) = new(OCAST, (yyvsp[(5) - (5)].node), Z);
@@ -2996,7 +2862,6 @@ yyreduce:
break;
case 141:
-/* Line 1787 of yacc.c */
#line 706 "cc.y"
{
(yyval.node) = new(OSTRUCT, (yyvsp[(6) - (7)].node), Z);
@@ -3006,7 +2871,6 @@ yyreduce:
break;
case 143:
-/* Line 1787 of yacc.c */
#line 715 "cc.y"
{
(yyval.node) = new(OIND, (yyvsp[(2) - (2)].node), Z);
@@ -3014,7 +2878,6 @@ yyreduce:
break;
case 144:
-/* Line 1787 of yacc.c */
#line 719 "cc.y"
{
(yyval.node) = new(OADDR, (yyvsp[(2) - (2)].node), Z);
@@ -3022,7 +2885,6 @@ yyreduce:
break;
case 145:
-/* Line 1787 of yacc.c */
#line 723 "cc.y"
{
(yyval.node) = new(OPOS, (yyvsp[(2) - (2)].node), Z);
@@ -3030,7 +2892,6 @@ yyreduce:
break;
case 146:
-/* Line 1787 of yacc.c */
#line 727 "cc.y"
{
(yyval.node) = new(ONEG, (yyvsp[(2) - (2)].node), Z);
@@ -3038,7 +2899,6 @@ yyreduce:
break;
case 147:
-/* Line 1787 of yacc.c */
#line 731 "cc.y"
{
(yyval.node) = new(ONOT, (yyvsp[(2) - (2)].node), Z);
@@ -3046,7 +2906,6 @@ yyreduce:
break;
case 148:
-/* Line 1787 of yacc.c */
#line 735 "cc.y"
{
(yyval.node) = new(OCOM, (yyvsp[(2) - (2)].node), Z);
@@ -3054,7 +2913,6 @@ yyreduce:
break;
case 149:
-/* Line 1787 of yacc.c */
#line 739 "cc.y"
{
(yyval.node) = new(OPREINC, (yyvsp[(2) - (2)].node), Z);
@@ -3062,7 +2920,6 @@ yyreduce:
break;
case 150:
-/* Line 1787 of yacc.c */
#line 743 "cc.y"
{
(yyval.node) = new(OPREDEC, (yyvsp[(2) - (2)].node), Z);
@@ -3070,7 +2927,6 @@ yyreduce:
break;
case 151:
-/* Line 1787 of yacc.c */
#line 747 "cc.y"
{
(yyval.node) = new(OSIZE, (yyvsp[(2) - (2)].node), Z);
@@ -3078,7 +2934,6 @@ yyreduce:
break;
case 152:
-/* Line 1787 of yacc.c */
#line 751 "cc.y"
{
(yyval.node) = new(OSIGN, (yyvsp[(2) - (2)].node), Z);
@@ -3086,7 +2941,6 @@ yyreduce:
break;
case 153:
-/* Line 1787 of yacc.c */
#line 757 "cc.y"
{
(yyval.node) = (yyvsp[(2) - (3)].node);
@@ -3094,7 +2948,6 @@ yyreduce:
break;
case 154:
-/* Line 1787 of yacc.c */
#line 761 "cc.y"
{
(yyval.node) = new(OSIZE, Z, Z);
@@ -3104,7 +2957,6 @@ yyreduce:
break;
case 155:
-/* Line 1787 of yacc.c */
#line 767 "cc.y"
{
(yyval.node) = new(OSIGN, Z, Z);
@@ -3114,7 +2966,6 @@ yyreduce:
break;
case 156:
-/* Line 1787 of yacc.c */
#line 773 "cc.y"
{
(yyval.node) = new(OFUNC, (yyvsp[(1) - (4)].node), Z);
@@ -3126,7 +2977,6 @@ yyreduce:
break;
case 157:
-/* Line 1787 of yacc.c */
#line 781 "cc.y"
{
(yyval.node) = new(OIND, new(OADD, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node)), Z);
@@ -3134,7 +2984,6 @@ yyreduce:
break;
case 158:
-/* Line 1787 of yacc.c */
#line 785 "cc.y"
{
(yyval.node) = new(ODOT, new(OIND, (yyvsp[(1) - (3)].node), Z), Z);
@@ -3143,7 +2992,6 @@ yyreduce:
break;
case 159:
-/* Line 1787 of yacc.c */
#line 790 "cc.y"
{
(yyval.node) = new(ODOT, (yyvsp[(1) - (3)].node), Z);
@@ -3152,7 +3000,6 @@ yyreduce:
break;
case 160:
-/* Line 1787 of yacc.c */
#line 795 "cc.y"
{
(yyval.node) = new(OPOSTINC, (yyvsp[(1) - (2)].node), Z);
@@ -3160,7 +3007,6 @@ yyreduce:
break;
case 161:
-/* Line 1787 of yacc.c */
#line 799 "cc.y"
{
(yyval.node) = new(OPOSTDEC, (yyvsp[(1) - (2)].node), Z);
@@ -3168,7 +3014,6 @@ yyreduce:
break;
case 163:
-/* Line 1787 of yacc.c */
#line 804 "cc.y"
{
(yyval.node) = new(OCONST, Z, Z);
@@ -3179,7 +3024,6 @@ yyreduce:
break;
case 164:
-/* Line 1787 of yacc.c */
#line 811 "cc.y"
{
(yyval.node) = new(OCONST, Z, Z);
@@ -3190,7 +3034,6 @@ yyreduce:
break;
case 165:
-/* Line 1787 of yacc.c */
#line 818 "cc.y"
{
(yyval.node) = new(OCONST, Z, Z);
@@ -3201,7 +3044,6 @@ yyreduce:
break;
case 166:
-/* Line 1787 of yacc.c */
#line 825 "cc.y"
{
(yyval.node) = new(OCONST, Z, Z);
@@ -3212,7 +3054,6 @@ yyreduce:
break;
case 167:
-/* Line 1787 of yacc.c */
#line 832 "cc.y"
{
(yyval.node) = new(OCONST, Z, Z);
@@ -3223,7 +3064,6 @@ yyreduce:
break;
case 168:
-/* Line 1787 of yacc.c */
#line 839 "cc.y"
{
(yyval.node) = new(OCONST, Z, Z);
@@ -3234,7 +3074,6 @@ yyreduce:
break;
case 169:
-/* Line 1787 of yacc.c */
#line 846 "cc.y"
{
(yyval.node) = new(OCONST, Z, Z);
@@ -3245,7 +3084,6 @@ yyreduce:
break;
case 170:
-/* Line 1787 of yacc.c */
#line 853 "cc.y"
{
(yyval.node) = new(OCONST, Z, Z);
@@ -3256,7 +3094,6 @@ yyreduce:
break;
case 173:
-/* Line 1787 of yacc.c */
#line 864 "cc.y"
{
(yyval.node) = new(OSTRING, Z, Z);
@@ -3270,7 +3107,6 @@ yyreduce:
break;
case 174:
-/* Line 1787 of yacc.c */
#line 874 "cc.y"
{
char *s;
@@ -3290,7 +3126,6 @@ yyreduce:
break;
case 175:
-/* Line 1787 of yacc.c */
#line 892 "cc.y"
{
(yyval.node) = new(OLSTRING, Z, Z);
@@ -3304,7 +3139,6 @@ yyreduce:
break;
case 176:
-/* Line 1787 of yacc.c */
#line 902 "cc.y"
{
char *s;
@@ -3324,7 +3158,6 @@ yyreduce:
break;
case 177:
-/* Line 1787 of yacc.c */
#line 919 "cc.y"
{
(yyval.node) = Z;
@@ -3332,7 +3165,6 @@ yyreduce:
break;
case 180:
-/* Line 1787 of yacc.c */
#line 927 "cc.y"
{
(yyval.node) = new(OLIST, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
@@ -3340,7 +3172,6 @@ yyreduce:
break;
case 181:
-/* Line 1787 of yacc.c */
#line 933 "cc.y"
{
(yyval.tyty).t1 = strf;
@@ -3357,7 +3188,6 @@ yyreduce:
break;
case 182:
-/* Line 1787 of yacc.c */
#line 946 "cc.y"
{
(yyval.type) = strf;
@@ -3369,7 +3199,6 @@ yyreduce:
break;
case 183:
-/* Line 1787 of yacc.c */
#line 955 "cc.y"
{
lastclass = CXXX;
@@ -3378,7 +3207,6 @@ yyreduce:
break;
case 185:
-/* Line 1787 of yacc.c */
#line 963 "cc.y"
{
(yyval.tycl).t = (yyvsp[(1) - (1)].type);
@@ -3387,7 +3215,6 @@ yyreduce:
break;
case 186:
-/* Line 1787 of yacc.c */
#line 968 "cc.y"
{
(yyval.tycl).t = simplet((yyvsp[(1) - (1)].lval));
@@ -3396,7 +3223,6 @@ yyreduce:
break;
case 187:
-/* Line 1787 of yacc.c */
#line 973 "cc.y"
{
(yyval.tycl).t = simplet((yyvsp[(1) - (1)].lval));
@@ -3406,7 +3232,6 @@ yyreduce:
break;
case 188:
-/* Line 1787 of yacc.c */
#line 979 "cc.y"
{
(yyval.tycl).t = (yyvsp[(1) - (2)].type);
@@ -3418,7 +3243,6 @@ yyreduce:
break;
case 189:
-/* Line 1787 of yacc.c */
#line 987 "cc.y"
{
(yyval.tycl).t = simplet(typebitor((yyvsp[(1) - (2)].lval), (yyvsp[(2) - (2)].lval)));
@@ -3428,7 +3252,6 @@ yyreduce:
break;
case 190:
-/* Line 1787 of yacc.c */
#line 993 "cc.y"
{
(yyval.tycl).t = (yyvsp[(2) - (3)].type);
@@ -3438,7 +3261,6 @@ yyreduce:
break;
case 191:
-/* Line 1787 of yacc.c */
#line 999 "cc.y"
{
(yyval.tycl).t = simplet((yyvsp[(2) - (2)].lval));
@@ -3448,7 +3270,6 @@ yyreduce:
break;
case 192:
-/* Line 1787 of yacc.c */
#line 1005 "cc.y"
{
(yyval.tycl).t = simplet(typebitor((yyvsp[(2) - (3)].lval), (yyvsp[(3) - (3)].lval)));
@@ -3458,7 +3279,6 @@ yyreduce:
break;
case 193:
-/* Line 1787 of yacc.c */
#line 1013 "cc.y"
{
(yyval.type) = (yyvsp[(1) - (1)].tycl).t;
@@ -3468,7 +3288,6 @@ yyreduce:
break;
case 194:
-/* Line 1787 of yacc.c */
#line 1021 "cc.y"
{
lasttype = (yyvsp[(1) - (1)].tycl).t;
@@ -3477,7 +3296,6 @@ yyreduce:
break;
case 195:
-/* Line 1787 of yacc.c */
#line 1028 "cc.y"
{
dotag((yyvsp[(2) - (2)].sym), TSTRUCT, 0);
@@ -3486,7 +3304,6 @@ yyreduce:
break;
case 196:
-/* Line 1787 of yacc.c */
#line 1033 "cc.y"
{
dotag((yyvsp[(2) - (2)].sym), TSTRUCT, autobn);
@@ -3494,7 +3311,6 @@ yyreduce:
break;
case 197:
-/* Line 1787 of yacc.c */
#line 1037 "cc.y"
{
(yyval.type) = (yyvsp[(2) - (4)].sym)->suetag;
@@ -3506,9 +3322,9 @@ yyreduce:
break;
case 198:
-/* Line 1787 of yacc.c */
#line 1045 "cc.y"
{
+ diag(Z, "struct must have tag");
taggen++;
sprint(symb, "_%d_", taggen);
(yyval.type) = dotag(lookup(), TSTRUCT, autobn);
@@ -3518,8 +3334,7 @@ yyreduce:
break;
case 199:
-/* Line 1787 of yacc.c */
-#line 1053 "cc.y"
+#line 1054 "cc.y"
{
dotag((yyvsp[(2) - (2)].sym), TUNION, 0);
(yyval.type) = (yyvsp[(2) - (2)].sym)->suetag;
@@ -3527,16 +3342,14 @@ yyreduce:
break;
case 200:
-/* Line 1787 of yacc.c */
-#line 1058 "cc.y"
+#line 1059 "cc.y"
{
dotag((yyvsp[(2) - (2)].sym), TUNION, autobn);
}
break;
case 201:
-/* Line 1787 of yacc.c */
-#line 1062 "cc.y"
+#line 1063 "cc.y"
{
(yyval.type) = (yyvsp[(2) - (4)].sym)->suetag;
if((yyval.type)->link != T)
@@ -3547,8 +3360,7 @@ yyreduce:
break;
case 202:
-/* Line 1787 of yacc.c */
-#line 1070 "cc.y"
+#line 1071 "cc.y"
{
taggen++;
sprint(symb, "_%d_", taggen);
@@ -3559,8 +3371,7 @@ yyreduce:
break;
case 203:
-/* Line 1787 of yacc.c */
-#line 1078 "cc.y"
+#line 1079 "cc.y"
{
dotag((yyvsp[(2) - (2)].sym), TENUM, 0);
(yyval.type) = (yyvsp[(2) - (2)].sym)->suetag;
@@ -3571,16 +3382,14 @@ yyreduce:
break;
case 204:
-/* Line 1787 of yacc.c */
-#line 1086 "cc.y"
+#line 1087 "cc.y"
{
dotag((yyvsp[(2) - (2)].sym), TENUM, autobn);
}
break;
case 205:
-/* Line 1787 of yacc.c */
-#line 1090 "cc.y"
+#line 1091 "cc.y"
{
en.tenum = T;
en.cenum = T;
@@ -3588,8 +3397,7 @@ yyreduce:
break;
case 206:
-/* Line 1787 of yacc.c */
-#line 1095 "cc.y"
+#line 1096 "cc.y"
{
(yyval.type) = (yyvsp[(2) - (7)].sym)->suetag;
if((yyval.type)->link != T)
@@ -3604,8 +3412,7 @@ yyreduce:
break;
case 207:
-/* Line 1787 of yacc.c */
-#line 1107 "cc.y"
+#line 1108 "cc.y"
{
en.tenum = T;
en.cenum = T;
@@ -3613,186 +3420,158 @@ yyreduce:
break;
case 208:
-/* Line 1787 of yacc.c */
-#line 1112 "cc.y"
+#line 1113 "cc.y"
{
(yyval.type) = en.tenum;
}
break;
case 209:
-/* Line 1787 of yacc.c */
-#line 1116 "cc.y"
+#line 1117 "cc.y"
{
(yyval.type) = tcopy((yyvsp[(1) - (1)].sym)->type);
}
break;
case 211:
-/* Line 1787 of yacc.c */
-#line 1123 "cc.y"
+#line 1124 "cc.y"
{
(yyval.lval) = typebitor((yyvsp[(1) - (2)].lval), (yyvsp[(2) - (2)].lval));
}
break;
case 212:
-/* Line 1787 of yacc.c */
-#line 1128 "cc.y"
+#line 1129 "cc.y"
{
(yyval.lval) = 0;
}
break;
case 213:
-/* Line 1787 of yacc.c */
-#line 1132 "cc.y"
+#line 1133 "cc.y"
{
(yyval.lval) = typebitor((yyvsp[(1) - (2)].lval), (yyvsp[(2) - (2)].lval));
}
break;
case 218:
-/* Line 1787 of yacc.c */
-#line 1144 "cc.y"
+#line 1145 "cc.y"
{
(yyval.lval) = typebitor((yyvsp[(1) - (2)].lval), (yyvsp[(2) - (2)].lval));
}
break;
case 221:
-/* Line 1787 of yacc.c */
-#line 1154 "cc.y"
+#line 1155 "cc.y"
{
doenum((yyvsp[(1) - (1)].sym), Z);
}
break;
case 222:
-/* Line 1787 of yacc.c */
-#line 1158 "cc.y"
+#line 1159 "cc.y"
{
doenum((yyvsp[(1) - (3)].sym), (yyvsp[(3) - (3)].node));
}
break;
case 225:
-/* Line 1787 of yacc.c */
-#line 1165 "cc.y"
+#line 1166 "cc.y"
{ (yyval.lval) = BCHAR; }
break;
case 226:
-/* Line 1787 of yacc.c */
-#line 1166 "cc.y"
+#line 1167 "cc.y"
{ (yyval.lval) = BSHORT; }
break;
case 227:
-/* Line 1787 of yacc.c */
-#line 1167 "cc.y"
+#line 1168 "cc.y"
{ (yyval.lval) = BINT; }
break;
case 228:
-/* Line 1787 of yacc.c */
-#line 1168 "cc.y"
+#line 1169 "cc.y"
{ (yyval.lval) = BLONG; }
break;
case 229:
-/* Line 1787 of yacc.c */
-#line 1169 "cc.y"
+#line 1170 "cc.y"
{ (yyval.lval) = BSIGNED; }
break;
case 230:
-/* Line 1787 of yacc.c */
-#line 1170 "cc.y"
+#line 1171 "cc.y"
{ (yyval.lval) = BUNSIGNED; }
break;
case 231:
-/* Line 1787 of yacc.c */
-#line 1171 "cc.y"
+#line 1172 "cc.y"
{ (yyval.lval) = BFLOAT; }
break;
case 232:
-/* Line 1787 of yacc.c */
-#line 1172 "cc.y"
+#line 1173 "cc.y"
{ (yyval.lval) = BDOUBLE; }
break;
case 233:
-/* Line 1787 of yacc.c */
-#line 1173 "cc.y"
+#line 1174 "cc.y"
{ (yyval.lval) = BVOID; }
break;
case 234:
-/* Line 1787 of yacc.c */
-#line 1176 "cc.y"
+#line 1177 "cc.y"
{ (yyval.lval) = BAUTO; }
break;
case 235:
-/* Line 1787 of yacc.c */
-#line 1177 "cc.y"
+#line 1178 "cc.y"
{ (yyval.lval) = BSTATIC; }
break;
case 236:
-/* Line 1787 of yacc.c */
-#line 1178 "cc.y"
+#line 1179 "cc.y"
{ (yyval.lval) = BEXTERN; }
break;
case 237:
-/* Line 1787 of yacc.c */
-#line 1179 "cc.y"
+#line 1180 "cc.y"
{ (yyval.lval) = BTYPEDEF; }
break;
case 238:
-/* Line 1787 of yacc.c */
-#line 1180 "cc.y"
+#line 1181 "cc.y"
{ (yyval.lval) = BTYPESTR; }
break;
case 239:
-/* Line 1787 of yacc.c */
-#line 1181 "cc.y"
+#line 1182 "cc.y"
{ (yyval.lval) = BREGISTER; }
break;
case 240:
-/* Line 1787 of yacc.c */
-#line 1182 "cc.y"
+#line 1183 "cc.y"
{ (yyval.lval) = 0; }
break;
case 241:
-/* Line 1787 of yacc.c */
-#line 1185 "cc.y"
+#line 1186 "cc.y"
{ (yyval.lval) = BCONSTNT; }
break;
case 242:
-/* Line 1787 of yacc.c */
-#line 1186 "cc.y"
+#line 1187 "cc.y"
{ (yyval.lval) = BVOLATILE; }
break;
case 243:
-/* Line 1787 of yacc.c */
-#line 1187 "cc.y"
+#line 1188 "cc.y"
{ (yyval.lval) = 0; }
break;
case 244:
-/* Line 1787 of yacc.c */
-#line 1191 "cc.y"
+#line 1192 "cc.y"
{
(yyval.node) = new(ONAME, Z, Z);
if((yyvsp[(1) - (1)].sym)->class == CLOCAL)
@@ -3809,8 +3588,7 @@ yyreduce:
break;
case 245:
-/* Line 1787 of yacc.c */
-#line 1206 "cc.y"
+#line 1207 "cc.y"
{
(yyval.node) = new(ONAME, Z, Z);
(yyval.node)->sym = (yyvsp[(1) - (1)].sym);
@@ -3824,21 +3602,10 @@ yyreduce:
break;
-/* Line 1787 of yacc.c */
-#line 3829 "y.tab.c"
+/* Line 1267 of yacc.c. */
+#line 3607 "y.tab.c"
default: break;
}
- /* User semantic actions sometimes alter yychar, and that requires
- that yytoken be updated with the new translation. We take the
- approach of translating immediately before every use of yytoken.
- One alternative is translating here after every semantic action,
- but that translation would be missed if the semantic action invokes
- YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
- if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
- incorrect destructor might then be invoked immediately. In the
- case of YYERROR or YYBACKUP, subsequent parser actions might lead
- to an incorrect destructor call or verbose syntax error message
- before the lookahead is translated. */
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
YYPOPSTACK (yylen);
@@ -3847,6 +3614,7 @@ yyreduce:
*++yyvsp = yyval;
+
/* Now `shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
number reduced by. */
@@ -3866,10 +3634,6 @@ yyreduce:
| yyerrlab -- here on detecting error |
`------------------------------------*/
yyerrlab:
- /* Make sure we have latest lookahead translation. See comments at
- user semantic actions for why this is necessary. */
- yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
/* If not already recovering from an error, report this error. */
if (!yyerrstatus)
{
@@ -3877,36 +3641,37 @@ yyerrlab:
#if ! YYERROR_VERBOSE
yyerror (YY_("syntax error"));
#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
- yyssp, yytoken)
{
- char const *yymsgp = YY_("syntax error");
- int yysyntax_error_status;
- yysyntax_error_status = YYSYNTAX_ERROR;
- if (yysyntax_error_status == 0)
- yymsgp = yymsg;
- else if (yysyntax_error_status == 1)
- {
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
- if (!yymsg)
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- yysyntax_error_status = 2;
- }
- else
- {
- yysyntax_error_status = YYSYNTAX_ERROR;
- yymsgp = yymsg;
- }
- }
- yyerror (yymsgp);
- if (yysyntax_error_status == 2)
- goto yyexhaustedlab;
+ YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+ if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+ {
+ YYSIZE_T yyalloc = 2 * yysize;
+ if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+ yyalloc = YYSTACK_ALLOC_MAXIMUM;
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+ if (yymsg)
+ yymsg_alloc = yyalloc;
+ else
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ }
+ }
+
+ if (0 < yysize && yysize <= yymsg_alloc)
+ {
+ (void) yysyntax_error (yymsg, yystate, yychar);
+ yyerror (yymsg);
+ }
+ else
+ {
+ yyerror (YY_("syntax error"));
+ if (yysize != 0)
+ goto yyexhaustedlab;
+ }
}
-# undef YYSYNTAX_ERROR
#endif
}
@@ -3914,7 +3679,7 @@ yyerrlab:
if (yyerrstatus == 3)
{
- /* If just tried and failed to reuse lookahead token after an
+ /* If just tried and failed to reuse look-ahead token after an
error, discard it. */
if (yychar <= YYEOF)
@@ -3931,7 +3696,7 @@ yyerrlab:
}
}
- /* Else will try to reuse lookahead token after shifting the error
+ /* Else will try to reuse look-ahead token after shifting the error
token. */
goto yyerrlab1;
@@ -3965,7 +3730,7 @@ yyerrlab1:
for (;;)
{
yyn = yypact[yystate];
- if (!yypact_value_is_default (yyn))
+ if (yyn != YYPACT_NINF)
{
yyn += YYTERROR;
if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
@@ -3988,9 +3753,10 @@ yyerrlab1:
YY_STACK_PRINT (yyss, yyssp);
}
- YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
*++yyvsp = yylval;
- YY_IGNORE_MAYBE_UNINITIALIZED_END
/* Shift the error token. */
@@ -4014,7 +3780,7 @@ yyabortlab:
yyresult = 1;
goto yyreturn;
-#if !defined yyoverflow || YYERROR_VERBOSE
+#ifndef yyoverflow
/*-------------------------------------------------.
| yyexhaustedlab -- memory exhaustion comes here. |
`-------------------------------------------------*/
@@ -4025,14 +3791,9 @@ yyexhaustedlab:
#endif
yyreturn:
- if (yychar != YYEMPTY)
- {
- /* Make sure we have latest lookahead translation. See comments at
- user semantic actions for why this is necessary. */
- yytoken = YYTRANSLATE (yychar);
- yydestruct ("Cleanup: discarding lookahead",
- yytoken, &yylval);
- }
+ if (yychar != YYEOF && yychar != YYEMPTY)
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
/* Do not reclaim the symbols of the rule which action triggered
this YYABORT or YYACCEPT. */
YYPOPSTACK (yylen);
@@ -4056,6 +3817,6 @@ yyreturn:
}
-/* Line 2050 of yacc.c */
-#line 1219 "cc.y"
+#line 1220 "cc.y"
+
diff --git a/src/cmd/cc/y.tab.h b/src/cmd/cc/y.tab.h
index b26d659ef..32daca9b6 100644
--- a/src/cmd/cc/y.tab.h
+++ b/src/cmd/cc/y.tab.h
@@ -1,21 +1,24 @@
-/* A Bison parser, made by GNU Bison 2.7.12-4996. */
+/* A Bison parser, made by GNU Bison 2.3. */
-/* Bison interface for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
- This program is free software: you can redistribute it and/or modify
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -26,20 +29,10 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
-/* Enabling traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
@@ -196,12 +189,11 @@ extern int yydebug;
+
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
-{
-/* Line 2053 of yacc.c */
#line 36 "cc.y"
-
+{
Node* node;
Sym* sym;
Type* type;
@@ -225,30 +217,14 @@ typedef union YYSTYPE
int32 lval;
double dval;
vlong vval;
-
-
-/* Line 2053 of yacc.c */
-#line 232 "y.tab.h"
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
+}
+/* Line 1529 of yacc.c. */
+#line 223 "y.tab.h"
+ YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
#endif
extern YYSTYPE yylval;
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-#endif /* !YY_YY_Y_TAB_H_INCLUDED */
diff --git a/src/cmd/cgo/ast.go b/src/cmd/cgo/ast.go
index 7757efa1b..10e2278a1 100644
--- a/src/cmd/cgo/ast.go
+++ b/src/cmd/cgo/ast.go
@@ -272,7 +272,7 @@ func (f *File) walk(x interface{}, context string, visit func(*File, interface{}
case nil:
- // These are ordered and grouped to match ../../pkg/go/ast/ast.go
+ // These are ordered and grouped to match ../../go/ast/ast.go
case *ast.Field:
if len(n.Names) == 0 && context == "field" {
f.walk(&n.Type, "embed-type", visit)
@@ -308,6 +308,9 @@ func (f *File) walk(x interface{}, context string, visit func(*File, interface{}
if n.High != nil {
f.walk(&n.High, "expr", visit)
}
+ if n.Max != nil {
+ f.walk(&n.Max, "expr", visit)
+ }
case *ast.TypeAssertExpr:
f.walk(&n.X, "expr", visit)
f.walk(&n.Type, "type", visit)
diff --git a/src/cmd/cgo/doc.go b/src/cmd/cgo/doc.go
index 69c7ce893..6179c7afd 100644
--- a/src/cmd/cgo/doc.go
+++ b/src/cmd/cgo/doc.go
@@ -152,7 +152,7 @@ In C, a function argument written as a fixed size array
actually requires a pointer to the first element of the array.
C compilers are aware of this calling convention and adjust
the call accordingly, but Go cannot. In Go, you must pass
-the pointer to the first element explicitly: C.f(&x[0]).
+the pointer to the first element explicitly: C.f(&C.x[0]).
A few special functions convert between Go and C types
by making copies of the data. In pseudo-Go definitions:
diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go
index f55cfbac4..abdd369d7 100644
--- a/src/cmd/cgo/gcc.go
+++ b/src/cmd/cgo/gcc.go
@@ -229,7 +229,8 @@ func (p *Package) guessKinds(f *File) []*Name {
// Determine kinds for names we already know about,
// like #defines or 'struct foo', before bothering with gcc.
var names, needType []*Name
- for _, n := range f.Name {
+ for _, key := range nameKeys(f.Name) {
+ n := f.Name[key]
// If we've already found this name as a #define
// and we can translate it as a constant value, do so.
if n.Define != "" {
@@ -331,6 +332,7 @@ func (p *Package) guessKinds(f *File) []*Name {
const (
notType = 1 << iota
notConst
+ notDeclared
)
for _, line := range strings.Split(stderr, "\n") {
if !strings.Contains(line, ": error:") {
@@ -365,7 +367,7 @@ func (p *Package) guessKinds(f *File) []*Name {
completed = true
case "not-declared":
- error_(token.NoPos, "%s", strings.TrimSpace(line[c2+1:]))
+ sniff[i] |= notDeclared
case "not-type":
sniff[i] |= notType
case "not-const":
@@ -374,12 +376,12 @@ func (p *Package) guessKinds(f *File) []*Name {
}
if !completed {
- fatalf("%s did not produce error at completed:1\non input:\n%s", p.gccBaseCmd()[0], b.Bytes())
+ fatalf("%s did not produce error at completed:1\non input:\n%s\nfull error output:\n%s", p.gccBaseCmd()[0], b.Bytes(), stderr)
}
for i, n := range names {
switch sniff[i] {
- case 0:
+ default:
error_(token.NoPos, "could not determine kind of name for C.%s", fixGo(n.Go))
case notType:
n.Kind = "const"
@@ -390,6 +392,14 @@ func (p *Package) guessKinds(f *File) []*Name {
}
}
if nerrors > 0 {
+ // Check if compiling the preamble by itself causes any errors,
+ // because the messages we've printed out so far aren't helpful
+ // to users debugging preamble mistakes. See issue 8442.
+ preambleErrors := p.gccErrors([]byte(f.Preamble))
+ if len(preambleErrors) > 0 {
+ error_(token.NoPos, "\n%s errors for preamble:\n%s", p.gccBaseCmd()[0], preambleErrors)
+ }
+
fatalf("unresolved names")
}
@@ -649,7 +659,13 @@ func (p *Package) rewriteRef(f *File) {
f.Name[fpName] = name
}
r.Name = name
- expr = ast.NewIdent(name.Mangle)
+ // Rewrite into call to _Cgo_ptr to prevent assignments. The _Cgo_ptr
+ // function is defined in out.go and simply returns its argument. See
+ // issue 7757.
+ expr = &ast.CallExpr{
+ Fun: &ast.Ident{NamePos: (*r.Expr).Pos(), Name: "_Cgo_ptr"},
+ Args: []ast.Expr{ast.NewIdent(name.Mangle)},
+ }
} else if r.Name.Kind == "type" {
// Okay - might be new(T)
expr = r.Name.Type.Go
@@ -928,9 +944,8 @@ type typeConv struct {
// Map from types to incomplete pointers to those types.
ptrs map[dwarf.Type][]*Type
-
- // Fields to be processed by godefsField after completing pointers.
- todoFlds [][]*ast.Field
+ // Keys of ptrs in insertion order (deterministic worklist)
+ ptrKeys []dwarf.Type
// Predeclared types.
bool ast.Expr
@@ -940,9 +955,9 @@ type typeConv struct {
float32, float64 ast.Expr
complex64, complex128 ast.Expr
void ast.Expr
- unsafePointer ast.Expr
string ast.Expr
goVoid ast.Expr // _Ctype_void, denotes C's void
+ goVoidPtr ast.Expr // unsafe.Pointer or *byte
ptrSize int64
intSize int64
@@ -972,10 +987,17 @@ func (c *typeConv) Init(ptrSize, intSize int64) {
c.float64 = c.Ident("float64")
c.complex64 = c.Ident("complex64")
c.complex128 = c.Ident("complex128")
- c.unsafePointer = c.Ident("unsafe.Pointer")
c.void = c.Ident("void")
c.string = c.Ident("string")
c.goVoid = c.Ident("_Ctype_void")
+
+ // Normally cgo translates void* to unsafe.Pointer,
+ // but for historical reasons -cdefs and -godefs use *byte instead.
+ if *cdefs || *godefs {
+ c.goVoidPtr = &ast.StarExpr{X: c.byte}
+ } else {
+ c.goVoidPtr = c.Ident("unsafe.Pointer")
+ }
}
// base strips away qualifiers and typedefs to get the underlying type
@@ -1037,29 +1059,22 @@ func (tr *TypeRepr) Set(repr string, fargs ...interface{}) {
}
// FinishType completes any outstanding type mapping work.
-// In particular, it resolves incomplete pointer types and also runs
-// godefsFields on any new struct types.
+// In particular, it resolves incomplete pointer types.
func (c *typeConv) FinishType(pos token.Pos) {
// Completing one pointer type might produce more to complete.
// Keep looping until they're all done.
- for len(c.ptrs) > 0 {
- for dtype := range c.ptrs {
- // Note Type might invalidate c.ptrs[dtype].
- t := c.Type(dtype, pos)
- for _, ptr := range c.ptrs[dtype] {
- ptr.Go.(*ast.StarExpr).X = t.Go
- ptr.C.Set("%s*", t.C)
- }
- delete(c.ptrs, dtype)
- }
- }
+ for len(c.ptrKeys) > 0 {
+ dtype := c.ptrKeys[0]
+ c.ptrKeys = c.ptrKeys[1:]
- // Now that pointer types are completed, we can invoke godefsFields
- // to rewrite struct definitions.
- for _, fld := range c.todoFlds {
- godefsFields(fld)
+ // Note Type might invalidate c.ptrs[dtype].
+ t := c.Type(dtype, pos)
+ for _, ptr := range c.ptrs[dtype] {
+ ptr.Go.(*ast.StarExpr).X = t.Go
+ ptr.C.Set("%s*", t.C)
+ }
+ c.ptrs[dtype] = nil // retain the map key
}
- c.todoFlds = nil
}
// Type returns a *Type with the same memory layout as
@@ -1072,12 +1087,6 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type {
return t
}
- // clang won't generate DW_AT_byte_size for pointer types,
- // so we have to fix it here.
- if dt, ok := base(dtype).(*dwarf.PtrType); ok && dt.ByteSize == -1 {
- dt.ByteSize = c.ptrSize
- }
-
t := new(Type)
t.Size = dtype.Size() // note: wrong for array of pointers, corrected below
t.Align = -1
@@ -1101,12 +1110,20 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type {
t.Go = c.Opaque(t.Size)
break
}
+ count := dt.Count
+ if count == -1 {
+ // Indicates flexible array member, which Go doesn't support.
+ // Translate to zero-length array instead.
+ count = 0
+ }
sub := c.Type(dt.Type, pos)
t.Align = sub.Align
t.Go = &ast.ArrayType{
- Len: c.intExpr(dt.Count),
+ Len: c.intExpr(count),
Elt: sub.Go,
}
+ // Recalculate t.Size now that we know sub.Size.
+ t.Size = count * sub.Size
t.C.Set("__typeof__(%s[%d])", sub.C, dt.Count)
case *dwarf.BoolType:
@@ -1207,11 +1224,15 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type {
}
case *dwarf.PtrType:
+ // Clang doesn't emit DW_AT_byte_size for pointer types.
+ if t.Size != c.ptrSize && t.Size != -1 {
+ fatalf("%s: unexpected: %d-byte pointer type - %s", lineno(pos), t.Size, dtype)
+ }
+ t.Size = c.ptrSize
t.Align = c.ptrSize
- // Translate void* as unsafe.Pointer
if _, ok := base(dt.Type).(*dwarf.VoidType); ok {
- t.Go = c.unsafePointer
+ t.Go = c.goVoidPtr
t.C.Set("void*")
break
}
@@ -1219,6 +1240,9 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type {
// Placeholder initialization; completed in FinishType.
t.Go = &ast.StarExpr{}
t.C.Set("<incomplete>*")
+ if _, ok := c.ptrs[dt.Type]; !ok {
+ c.ptrKeys = append(c.ptrKeys, dt.Type)
+ }
c.ptrs[dt.Type] = append(c.ptrs[dt.Type], t)
case *dwarf.QualType:
@@ -1379,34 +1403,24 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type {
}
}
- if t.Size <= 0 {
- // Clang does not record the size of a pointer in its DWARF entry,
- // so if dtype is an array, the call to dtype.Size at the top of the function
- // computed the size as the array length * 0 = 0.
- // The type switch called Type (this function) recursively on the pointer
- // entry, and the code near the top of the function updated the size to
- // be correct, so calling dtype.Size again will produce the correct value.
- t.Size = dtype.Size()
- if t.Size < 0 {
- // Unsized types are [0]byte, unless they're typedefs of other types
- // or structs with tags.
- // if so, use the name we've already defined.
- t.Size = 0
- switch dt := dtype.(type) {
- case *dwarf.TypedefType:
- // ok
- case *dwarf.StructType:
- if dt.StructName != "" {
- break
- }
- t.Go = c.Opaque(0)
- default:
- t.Go = c.Opaque(0)
- }
- if t.C.Empty() {
- t.C.Set("void")
+ if t.Size < 0 {
+ // Unsized types are [0]byte, unless they're typedefs of other types
+ // or structs with tags.
+ // if so, use the name we've already defined.
+ t.Size = 0
+ switch dt := dtype.(type) {
+ case *dwarf.TypedefType:
+ // ok
+ case *dwarf.StructType:
+ if dt.StructName != "" {
+ break
}
- return t
+ t.Go = c.Opaque(0)
+ default:
+ t.Go = c.Opaque(0)
+ }
+ if t.C.Empty() {
+ t.C.Set("void")
}
}
@@ -1538,6 +1552,9 @@ func (c *typeConv) pad(fld []*ast.Field, size int64) []*ast.Field {
// Struct conversion: return Go and (6g) C syntax for type.
func (c *typeConv) Struct(dt *dwarf.StructType, pos token.Pos) (expr *ast.StructType, csyntax string, align int64) {
+ // Minimum alignment for a struct is 1 byte.
+ align = 1
+
var buf bytes.Buffer
buf.WriteString("struct {")
fld := make([]*ast.Field, 0, 2*len(dt.Field)+1) // enough for padding around every field
@@ -1579,7 +1596,27 @@ func (c *typeConv) Struct(dt *dwarf.StructType, pos token.Pos) (expr *ast.Struct
fld = c.pad(fld, f.ByteOffset-off)
off = f.ByteOffset
}
- t := c.Type(f.Type, pos)
+
+ name := f.Name
+ ft := f.Type
+
+ // In godefs or cdefs mode, if this field is a C11
+ // anonymous union then treat the first field in the
+ // union as the field in the struct. This handles
+ // cases like the glibc <sys/resource.h> file; see
+ // issue 6677.
+ if *godefs || *cdefs {
+ if st, ok := f.Type.(*dwarf.StructType); ok && name == "" && st.Kind == "union" && len(st.Field) > 0 && !used[st.Field[0].Name] {
+ name = st.Field[0].Name
+ ident[name] = name
+ ft = st.Field[0].Type
+ }
+ }
+
+ // TODO: Handle fields that are anonymous structs by
+ // promoting the fields of the inner struct.
+
+ t := c.Type(ft, pos)
tgo := t.Go
size := t.Size
talign := t.Align
@@ -1598,17 +1635,18 @@ func (c *typeConv) Struct(dt *dwarf.StructType, pos token.Pos) (expr *ast.Struct
talign = size
}
- if talign > 0 && f.ByteOffset%talign != 0 {
+ if talign > 0 && f.ByteOffset%talign != 0 && !*cdefs {
// Drop misaligned fields, the same way we drop integer bit fields.
// The goal is to make available what can be made available.
// Otherwise one bad and unneeded field in an otherwise okay struct
// makes the whole program not compile. Much of the time these
// structs are in system headers that cannot be corrected.
+ // Exception: In -cdefs mode, we use #pragma pack, so misaligned
+ // fields should still work.
continue
}
n := len(fld)
fld = fld[0 : n+1]
- name := f.Name
if name == "" {
name = fmt.Sprintf("anon%d", anon)
anon++
@@ -1635,7 +1673,7 @@ func (c *typeConv) Struct(dt *dwarf.StructType, pos token.Pos) (expr *ast.Struct
csyntax = buf.String()
if *godefs || *cdefs {
- c.todoFlds = append(c.todoFlds, fld)
+ godefsFields(fld)
}
expr = &ast.StructType{Fields: &ast.FieldList{List: fld}}
return
@@ -1673,19 +1711,6 @@ func godefsFields(fld []*ast.Field) {
n.Name = upper(n.Name)
}
}
- p := &f.Type
- t := *p
- if star, ok := t.(*ast.StarExpr); ok {
- star = &ast.StarExpr{X: star.X}
- *p = star
- p = &star.X
- t = *p
- }
- if id, ok := t.(*ast.Ident); ok {
- if id.Name == "unsafe.Pointer" {
- *p = ast.NewIdent("*byte")
- }
- }
}
}
diff --git a/src/cmd/cgo/out.go b/src/cmd/cgo/out.go
index 76c7247af..d92bed9bf 100644
--- a/src/cmd/cgo/out.go
+++ b/src/cmd/cgo/out.go
@@ -44,6 +44,7 @@ func (p *Package) writeDefs() {
fmt.Fprintf(fm, "int main() { return 0; }\n")
if *importRuntimeCgo {
fmt.Fprintf(fm, "void crosscall2(void(*fn)(void*, int), void *a, int c) { }\n")
+ fmt.Fprintf(fm, "char* _cgo_topofstack(void) { return (char*)0; }\n")
} else {
// If we're not importing runtime/cgo, we *are* runtime/cgo,
// which provides crosscall2. We just need a prototype.
@@ -58,16 +59,14 @@ func (p *Package) writeDefs() {
fmt.Fprintf(fgo2, "// Created by cgo - DO NOT EDIT\n\n")
fmt.Fprintf(fgo2, "package %s\n\n", p.PackageName)
fmt.Fprintf(fgo2, "import \"unsafe\"\n\n")
- if *importSyscall {
- fmt.Fprintf(fgo2, "import \"syscall\"\n\n")
- }
if !*gccgo && *importRuntimeCgo {
fmt.Fprintf(fgo2, "import _ \"runtime/cgo\"\n\n")
}
- fmt.Fprintf(fgo2, "type _ unsafe.Pointer\n\n")
if *importSyscall {
- fmt.Fprintf(fgo2, "func _Cerrno(dst *error, x int32) { *dst = syscall.Errno(x) }\n")
+ fmt.Fprintf(fgo2, "import \"syscall\"\n\n")
+ fmt.Fprintf(fgo2, "var _ syscall.Errno\n")
}
+ fmt.Fprintf(fgo2, "func _Cgo_ptr(ptr unsafe.Pointer) unsafe.Pointer { return ptr }\n\n")
typedefNames := make([]string, 0, len(typedef))
for name := range typedef {
@@ -87,9 +86,10 @@ func (p *Package) writeDefs() {
}
if *gccgo {
- fmt.Fprintf(fc, p.cPrologGccgo())
+ fmt.Fprint(fc, p.cPrologGccgo())
} else {
- fmt.Fprintf(fc, cProlog)
+ fmt.Fprint(fc, cProlog)
+ fmt.Fprint(fgo2, goProlog)
}
gccgoSymbolPrefix := p.gccgoSymbolPrefix()
@@ -130,6 +130,7 @@ func (p *Package) writeDefs() {
fmt.Fprintf(fc, `extern void *%s __asm__("%s.%s");`, n.Mangle, gccgoSymbolPrefix, n.Mangle)
fmt.Fprintf(&gccgoInit, "\t%s = %s%s;\n", n.Mangle, amp, n.C)
} else {
+ fmt.Fprintf(fc, "#pragma dataflag NOPTR /* C pointer, not heap pointer */ \n")
fmt.Fprintf(fc, "void *·%s = %s%s;\n", n.Mangle, amp, n.C)
}
fmt.Fprintf(fc, "\n")
@@ -296,10 +297,6 @@ func (p *Package) structType(n *Name) (string, int64) {
fmt.Fprintf(&buf, "\t\tchar __pad%d[%d];\n", off, pad)
off += pad
}
- if n.AddError {
- fmt.Fprint(&buf, "\t\tint e[2*sizeof(void *)/sizeof(int)]; /* error */\n")
- off += 2 * p.PtrSize
- }
if off == 0 {
fmt.Fprintf(&buf, "\t\tchar unused;\n") // avoid empty struct
}
@@ -334,19 +331,18 @@ func (p *Package) writeDefsFunc(fc, fgo2 *os.File, n *Name) {
}
// Builtins defined in the C prolog.
- inProlog := name == "CString" || name == "GoString" || name == "GoStringN" || name == "GoBytes" || name == "_CMalloc"
+ inProlog := builtinDefs[name] != ""
+ cname := fmt.Sprintf("_cgo%s%s", cPrefix, n.Mangle)
+ paramnames := []string(nil)
+ for i, param := range d.Type.Params.List {
+ paramName := fmt.Sprintf("p%d", i)
+ param.Names = []*ast.Ident{ast.NewIdent(paramName)}
+ paramnames = append(paramnames, paramName)
+ }
if *gccgo {
// Gccgo style hooks.
fmt.Fprint(fgo2, "\n")
- cname := fmt.Sprintf("_cgo%s%s", cPrefix, n.Mangle)
- paramnames := []string(nil)
- for i, param := range d.Type.Params.List {
- paramName := fmt.Sprintf("p%d", i)
- param.Names = []*ast.Ident{ast.NewIdent(paramName)}
- paramnames = append(paramnames, paramName)
- }
-
conf.Fprint(fgo2, fset, d)
fmt.Fprint(fgo2, " {\n")
if !inProlog {
@@ -383,7 +379,7 @@ func (p *Package) writeDefsFunc(fc, fgo2 *os.File, n *Name) {
fmt.Fprint(fgo2, "}\n")
// declare the C function.
- fmt.Fprintf(fgo2, "//extern _cgo%s%s\n", cPrefix, n.Mangle)
+ fmt.Fprintf(fgo2, "//extern %s\n", cname)
d.Name = ast.NewIdent(cname)
if n.AddError {
l := d.Type.Results.List
@@ -394,61 +390,50 @@ func (p *Package) writeDefsFunc(fc, fgo2 *os.File, n *Name) {
return
}
- conf.Fprint(fgo2, fset, d)
- fmt.Fprint(fgo2, "\n")
if inProlog {
+ fmt.Fprint(fgo2, builtinDefs[name])
return
}
- var argSize int64
- _, argSize = p.structType(n)
-
// C wrapper calls into gcc, passing a pointer to the argument frame.
- fmt.Fprintf(fc, "#pragma cgo_import_static _cgo%s%s\n", cPrefix, n.Mangle)
- fmt.Fprintf(fc, "void _cgo%s%s(void*);\n", cPrefix, n.Mangle)
- fmt.Fprintf(fc, "\n")
- fmt.Fprintf(fc, "void\n")
- if argSize == 0 {
- argSize++
+ fmt.Fprintf(fc, "#pragma cgo_import_static %s\n", cname)
+ fmt.Fprintf(fc, "void %s(void*);\n", cname)
+ fmt.Fprintf(fc, "#pragma dataflag NOPTR\n")
+ fmt.Fprintf(fc, "void *·%s = %s;\n", cname, cname)
+
+ nret := 0
+ if !void {
+ d.Type.Results.List[0].Names = []*ast.Ident{ast.NewIdent("r1")}
+ nret = 1
}
- // TODO(rsc): The struct here should declare pointers only where
- // there are pointers in the actual argument frame.
- // This is a workaround for golang.org/issue/6397.
- fmt.Fprintf(fc, "·%s(struct{", n.Mangle)
- if n := argSize / p.PtrSize; n > 0 {
- fmt.Fprintf(fc, "void *y[%d];", n)
+ if n.AddError {
+ d.Type.Results.List[nret].Names = []*ast.Ident{ast.NewIdent("r2")}
}
- if n := argSize % p.PtrSize; n > 0 {
- fmt.Fprintf(fc, "uint8 x[%d];", n)
+
+ fmt.Fprint(fgo2, "\n")
+ fmt.Fprintf(fgo2, "var %s unsafe.Pointer\n", cname)
+ conf.Fprint(fgo2, fset, d)
+ fmt.Fprint(fgo2, " {\n")
+
+ // NOTE: Using uintptr to hide from escape analysis.
+ arg := "0"
+ if len(paramnames) > 0 {
+ arg = "uintptr(unsafe.Pointer(&p0))"
+ } else if !void {
+ arg = "uintptr(unsafe.Pointer(&r1))"
}
- fmt.Fprintf(fc, "}p)\n")
- fmt.Fprintf(fc, "{\n")
- fmt.Fprintf(fc, "\truntime·cgocall(_cgo%s%s, &p);\n", cPrefix, n.Mangle)
+
+ prefix := ""
if n.AddError {
- // gcc leaves errno in first word of interface at end of p.
- // check whether it is zero; if so, turn interface into nil.
- // if not, turn interface into errno.
- // Go init function initializes ·_Cerrno with an os.Errno
- // for us to copy.
- fmt.Fprintln(fc, ` {
- int32 e;
- void **v;
- v = (void**)(&p+1) - 2; /* v = final two void* of p */
- e = *(int32*)v;
- v[0] = (void*)0xdeadbeef;
- v[1] = (void*)0xdeadbeef;
- if(e == 0) {
- /* nil interface */
- v[0] = 0;
- v[1] = 0;
- } else {
- ·_Cerrno(v, e); /* fill in v as error for errno e */
- }
- }`)
+ prefix = "errno := "
}
- fmt.Fprintf(fc, "}\n")
- fmt.Fprintf(fc, "\n")
+ fmt.Fprintf(fgo2, "\t%s_cgo_runtime_cgocall_errno(%s, %s)\n", prefix, cname, arg)
+ if n.AddError {
+ fmt.Fprintf(fgo2, "\tif errno != 0 { r2 = syscall.Errno(errno) }\n")
+ }
+ fmt.Fprintf(fgo2, "\treturn\n")
+ fmt.Fprintf(fgo2, "}\n")
}
// writeOutput creates stubs for a specific source file to be compiled by 6g
@@ -521,7 +506,11 @@ func (p *Package) writeOutputFunc(fgcc *os.File, n *Name) {
// Gcc wrapper unpacks the C argument struct
// and calls the actual C function.
- fmt.Fprintf(fgcc, "void\n")
+ if n.AddError {
+ fmt.Fprintf(fgcc, "int\n")
+ } else {
+ fmt.Fprintf(fgcc, "void\n")
+ }
fmt.Fprintf(fgcc, "_cgo%s%s(void *v)\n", cPrefix, n.Mangle)
fmt.Fprintf(fgcc, "{\n")
if n.AddError {
@@ -531,9 +520,13 @@ func (p *Package) writeOutputFunc(fgcc *os.File, n *Name) {
// Use packed attribute to force no padding in this struct in case
// gcc has different packing requirements.
fmt.Fprintf(fgcc, "\t%s %v *a = v;\n", ctype, p.packedAttribute())
+ if n.FuncType.Result != nil {
+ // Save the stack top for use below.
+ fmt.Fprintf(fgcc, "\tchar *stktop = _cgo_topofstack();\n")
+ }
fmt.Fprintf(fgcc, "\t")
if t := n.FuncType.Result; t != nil {
- fmt.Fprintf(fgcc, "a->r = ")
+ fmt.Fprintf(fgcc, "__typeof__(a->r) r = ")
if c := t.C.String(); c[len(c)-1] == '*' {
fmt.Fprint(fgcc, "(__typeof__(a->r)) ")
}
@@ -556,8 +549,15 @@ func (p *Package) writeOutputFunc(fgcc *os.File, n *Name) {
fmt.Fprintf(fgcc, "a->p%d", i)
}
fmt.Fprintf(fgcc, ");\n")
+ if n.FuncType.Result != nil {
+ // The cgo call may have caused a stack copy (via a callback).
+ // Adjust the return value pointer appropriately.
+ fmt.Fprintf(fgcc, "\ta = (void*)((char*)a + (_cgo_topofstack() - stktop));\n")
+ // Save the return value.
+ fmt.Fprintf(fgcc, "\ta->r = r;\n")
+ }
if n.AddError {
- fmt.Fprintf(fgcc, "\t*(int*)(a->e) = errno;\n")
+ fmt.Fprintf(fgcc, "\treturn errno;\n")
}
fmt.Fprintf(fgcc, "}\n")
fmt.Fprintf(fgcc, "\n")
@@ -1016,7 +1016,7 @@ func forFieldList(fl *ast.FieldList, fn func(int, ast.Expr)) {
fn(i, r.Type)
i++
} else {
- for _ = range r.Names {
+ for range r.Names {
fn(i, r.Type)
i++
}
@@ -1143,21 +1143,17 @@ __cgo_size_assert(__cgo_long_long, 8)
__cgo_size_assert(float, 4)
__cgo_size_assert(double, 8)
+extern char* _cgo_topofstack(void);
+
#include <errno.h>
#include <string.h>
`
const builtinProlog = `
-#include <sys/types.h> /* for size_t below */
+#include <stddef.h> /* for ptrdiff_t and size_t below */
/* Define intgo when compiling with GCC. */
-#ifdef __PTRDIFF_TYPE__
-typedef __PTRDIFF_TYPE__ intgo;
-#elif defined(_LP64)
-typedef long long intgo;
-#else
-typedef int intgo;
-#endif
+typedef ptrdiff_t intgo;
typedef struct { char *p; intgo n; } _GoString_;
typedef struct { char *p; intgo n; intgo c; } _GoBytes_;
@@ -1171,47 +1167,86 @@ void *_CMalloc(size_t);
const cProlog = `
#include "runtime.h"
#include "cgocall.h"
+#include "textflag.h"
+
+#pragma dataflag NOPTR
+static void *cgocall_errno = runtime·cgocall_errno;
+#pragma dataflag NOPTR
+void *·_cgo_runtime_cgocall_errno = &cgocall_errno;
+
+#pragma dataflag NOPTR
+static void *runtime_gostring = runtime·gostring;
+#pragma dataflag NOPTR
+void *·_cgo_runtime_gostring = &runtime_gostring;
+
+#pragma dataflag NOPTR
+static void *runtime_gostringn = runtime·gostringn;
+#pragma dataflag NOPTR
+void *·_cgo_runtime_gostringn = &runtime_gostringn;
+
+#pragma dataflag NOPTR
+static void *runtime_gobytes = runtime·gobytes;
+#pragma dataflag NOPTR
+void *·_cgo_runtime_gobytes = &runtime_gobytes;
+
+#pragma dataflag NOPTR
+static void *runtime_cmalloc = runtime·cmalloc;
+#pragma dataflag NOPTR
+void *·_cgo_runtime_cmalloc = &runtime_cmalloc;
void ·_Cerrno(void*, int32);
+`
-void
-·_Cfunc_GoString(int8 *p, String s)
-{
- s = runtime·gostring((byte*)p);
- FLUSH(&s);
+const goProlog = `
+var _cgo_runtime_cgocall_errno func(unsafe.Pointer, uintptr) int32
+var _cgo_runtime_cmalloc func(uintptr) unsafe.Pointer
+`
+
+const goStringDef = `
+var _cgo_runtime_gostring func(*_Ctype_char) string
+func _Cfunc_GoString(p *_Ctype_char) string {
+ return _cgo_runtime_gostring(p)
}
+`
-void
-·_Cfunc_GoStringN(int8 *p, int32 l, String s)
-{
- s = runtime·gostringn((byte*)p, l);
- FLUSH(&s);
+const goStringNDef = `
+var _cgo_runtime_gostringn func(*_Ctype_char, int) string
+func _Cfunc_GoStringN(p *_Ctype_char, l _Ctype_int) string {
+ return _cgo_runtime_gostringn(p, int(l))
}
+`
-void
-·_Cfunc_GoBytes(int8 *p, int32 l, Slice s)
-{
- s = runtime·gobytes((byte*)p, l);
- FLUSH(&s);
+const goBytesDef = `
+var _cgo_runtime_gobytes func(unsafe.Pointer, int) []byte
+func _Cfunc_GoBytes(p unsafe.Pointer, l _Ctype_int) []byte {
+ return _cgo_runtime_gobytes(p, int(l))
}
+`
-void
-·_Cfunc_CString(String s, int8 *p)
-{
- p = runtime·cmalloc(s.len+1);
- runtime·memmove((byte*)p, s.str, s.len);
- p[s.len] = 0;
- FLUSH(&p);
+const cStringDef = `
+func _Cfunc_CString(s string) *_Ctype_char {
+ p := _cgo_runtime_cmalloc(uintptr(len(s)+1))
+ pp := (*[1<<30]byte)(p)
+ copy(pp[:], s)
+ pp[len(s)] = 0
+ return (*_Ctype_char)(p)
}
+`
-void
-·_Cfunc__CMalloc(uintptr n, int8 *p)
-{
- p = runtime·cmalloc(n);
- FLUSH(&p);
+const cMallocDef = `
+func _Cfunc__CMalloc(n _Ctype_size_t) unsafe.Pointer {
+ return _cgo_runtime_cmalloc(uintptr(n))
}
`
+var builtinDefs = map[string]string{
+ "GoString": goStringDef,
+ "GoStringN": goStringNDef,
+ "GoBytes": goBytesDef,
+ "CString": cStringDef,
+ "_CMalloc": cMallocDef,
+}
+
func (p *Package) cPrologGccgo() string {
return strings.Replace(cPrologGccgo, "PREFIX", cPrefix, -1)
}
diff --git a/src/cmd/dist/a.h b/src/cmd/dist/a.h
index 6222e5060..288063b94 100644
--- a/src/cmd/dist/a.h
+++ b/src/cmd/dist/a.h
@@ -108,9 +108,6 @@ void mkzexperiment(char*, char*);
// buildgo.c
void mkzdefaultcc(char*, char*);
-// goc2c.c
-void goc2c(char*, char*);
-
// main.c
extern int vflag;
extern int sflag;
@@ -129,6 +126,7 @@ bool isfile(char *p);
char* lastelem(char*);
Time mtime(char*);
void readfile(Buf*, char*);
+void copyfile(char*, char*, int);
void run(Buf *b, char *dir, int mode, char *cmd, ...);
void runv(Buf *b, char *dir, int mode, Vec *argv);
void bgrunv(char *dir, int mode, Vec *argv);
diff --git a/src/cmd/dist/arm.c b/src/cmd/dist/arm.c
index 52a621c5d..1ce7b7710 100644
--- a/src/cmd/dist/arm.c
+++ b/src/cmd/dist/arm.c
@@ -21,7 +21,8 @@ xgetgoarm(void)
// FreeBSD has broken VFP support
return "5";
#endif
- if(xtryexecfunc(useVFPv3))
+ // NaCl always has VFP support.
+ if(streq(goos, "nacl") || xtryexecfunc(useVFPv3))
return "7";
else if(xtryexecfunc(useVFPv1))
return "6";
diff --git a/src/cmd/dist/buf.c b/src/cmd/dist/buf.c
index 45fb1954d..2ddc6be75 100644
--- a/src/cmd/dist/buf.c
+++ b/src/cmd/dist/buf.c
@@ -202,7 +202,7 @@ vadd(Vec *v, char *p)
}
// vaddn adds a string consisting of the n bytes at p to the vector.
-void
+static void
vaddn(Vec *v, char *p, int n)
{
char *q;
diff --git a/src/cmd/dist/build.c b/src/cmd/dist/build.c
index 6884e0aae..d638ae4eb 100644
--- a/src/cmd/dist/build.c
+++ b/src/cmd/dist/build.c
@@ -35,7 +35,6 @@ bool rebuildall;
bool defaultclang;
static bool shouldbuild(char*, char*);
-static void copy(char*, char*, int);
static void dopack(char*, char*, char**, int);
static char *findgoversion(void);
@@ -56,6 +55,7 @@ static char *okgoos[] = {
"darwin",
"dragonfly",
"linux",
+ "android",
"solaris",
"freebsd",
"nacl",
@@ -366,8 +366,8 @@ static char *oldtool[] = {
// not be in release branches.
static char *unreleased[] = {
"src/cmd/link",
- "src/pkg/debug/goobj",
- "src/pkg/old",
+ "src/debug/goobj",
+ "src/old",
};
// setup sets up the tree for the initial build.
@@ -590,7 +590,7 @@ static struct {
"$GOROOT/pkg/obj/$GOHOSTOS_$GOHOSTARCH/libbio.a",
"$GOROOT/pkg/obj/$GOHOSTOS_$GOHOSTARCH/lib9.a",
}},
- {"pkg/runtime", {
+ {"runtime", {
"zaexperiment.h", // must sort above zasm
"zasm_$GOOS_$GOARCH.h",
"zsys_$GOOS_$GOARCH.s",
@@ -607,7 +607,6 @@ char *depsuffix[] = {
".h",
".s",
".go",
- ".goc",
};
// gentab records how to generate some trivial files.
@@ -639,7 +638,7 @@ install(char *dir)
{
char *name, *p, *elem, *prefix, *exe;
bool islib, ispkg, isgo, stale, ispackcmd;
- Buf b, b1, path;
+ Buf b, b1, path, final_path, final_name;
Vec compile, files, link, go, missing, clean, lib, extra;
Time ttarg, t;
int i, j, k, n, doclean, targ;
@@ -654,6 +653,8 @@ install(char *dir)
binit(&b);
binit(&b1);
binit(&path);
+ binit(&final_path);
+ binit(&final_name);
vinit(&compile);
vinit(&files);
vinit(&link);
@@ -666,15 +667,9 @@ install(char *dir)
// path = full path to dir.
bpathf(&path, "%s/src/%s", goroot, dir);
+ bpathf(&final_path, "%s/src/%s", goroot_final, dir);
name = lastelem(dir);
- // For misc/prof, copy into the tool directory and we're done.
- if(hasprefix(dir, "misc/")) {
- copy(bpathf(&b, "%s/%s", tooldir, name),
- bpathf(&b1, "%s/misc/%s", goroot, name), 1);
- goto out;
- }
-
// set up gcc command line on first run.
if(gccargs.len == 0) {
bprintf(&b, "%s %s", defaultcc, defaultcflags);
@@ -704,7 +699,7 @@ install(char *dir)
}
islib = hasprefix(dir, "lib") || streq(dir, "cmd/cc") || streq(dir, "cmd/gc");
- ispkg = hasprefix(dir, "pkg");
+ ispkg = !islib && !hasprefix(dir, "cmd/");
isgo = ispkg || streq(dir, "cmd/go") || streq(dir, "cmd/cgo");
exe = "";
@@ -730,11 +725,11 @@ install(char *dir)
// Go library (package).
ispackcmd = 1;
vadd(&link, "pack"); // program name - unused here, but all the other cases record one
- p = bprintf(&b, "%s/pkg/%s_%s/%s", goroot, goos, goarch, dir+4);
+ p = bprintf(&b, "%s/pkg/%s_%s/%s", goroot, goos, goarch, dir);
*xstrrchr(p, '/') = '\0';
xmkdirall(p);
targ = link.len;
- vadd(&link, bpathf(&b, "%s/pkg/%s_%s/%s.a", goroot, goos, goarch, dir+4));
+ vadd(&link, bpathf(&b, "%s/pkg/%s_%s/%s.a", goroot, goos, goarch, dir));
} else if(streq(dir, "cmd/go") || streq(dir, "cmd/cgo")) {
// Go command.
vadd(&link, bpathf(&b, "%s/%sl", tooldir, gochar));
@@ -881,18 +876,22 @@ install(char *dir)
goto out;
// For package runtime, copy some files into the work space.
- if(streq(dir, "pkg/runtime")) {
- copy(bpathf(&b, "%s/arch_GOARCH.h", workdir),
+ if(streq(dir, "runtime")) {
+ copyfile(bpathf(&b, "%s/arch_GOARCH.h", workdir),
bpathf(&b1, "%s/arch_%s.h", bstr(&path), goarch), 0);
- copy(bpathf(&b, "%s/defs_GOOS_GOARCH.h", workdir),
+ copyfile(bpathf(&b, "%s/defs_GOOS_GOARCH.h", workdir),
bpathf(&b1, "%s/defs_%s_%s.h", bstr(&path), goos, goarch), 0);
p = bpathf(&b1, "%s/signal_%s_%s.h", bstr(&path), goos, goarch);
if(isfile(p))
- copy(bpathf(&b, "%s/signal_GOOS_GOARCH.h", workdir), p, 0);
- copy(bpathf(&b, "%s/os_GOOS.h", workdir),
+ copyfile(bpathf(&b, "%s/signal_GOOS_GOARCH.h", workdir), p, 0);
+ copyfile(bpathf(&b, "%s/os_GOOS.h", workdir),
bpathf(&b1, "%s/os_%s.h", bstr(&path), goos), 0);
- copy(bpathf(&b, "%s/signals_GOOS.h", workdir),
+ copyfile(bpathf(&b, "%s/signals_GOOS.h", workdir),
bpathf(&b1, "%s/signals_%s.h", bstr(&path), goos), 0);
+ copyfile(bpathf(&b, "%s/pkg/%s_%s/textflag.h", goroot, goos, goarch),
+ bpathf(&b1, "%s/src/cmd/ld/textflag.h", goroot), 0);
+ copyfile(bpathf(&b, "%s/pkg/%s_%s/funcdata.h", goroot, goos, goarch),
+ bpathf(&b1, "%s/src/runtime/funcdata.h", goroot), 0);
}
// Generate any missing files; regenerate existing ones.
@@ -907,7 +906,7 @@ install(char *dir)
errprintf("generate %s\n", p);
gentab[j].gen(bstr(&path), p);
// Do not add generated file to clean list.
- // In pkg/runtime, we want to be able to
+ // In runtime, we want to be able to
// build the package with the go tool,
// and it assumes these generated files already
// exist (it does not know how to build them).
@@ -925,27 +924,11 @@ install(char *dir)
// One more copy for package runtime.
// The last batch was required for the generators.
// This one is generated.
- if(streq(dir, "pkg/runtime")) {
- copy(bpathf(&b, "%s/zasm_GOOS_GOARCH.h", workdir),
+ if(streq(dir, "runtime")) {
+ copyfile(bpathf(&b, "%s/zasm_GOOS_GOARCH.h", workdir),
bpathf(&b1, "%s/zasm_%s_%s.h", bstr(&path), goos, goarch), 0);
}
- // Generate .c files from .goc files.
- if(streq(dir, "pkg/runtime")) {
- for(i=0; i<files.len; i++) {
- p = files.p[i];
- if(!hassuffix(p, ".goc"))
- continue;
- // b = path/zp but with _goos_goarch.c instead of .goc
- bprintf(&b, "%s%sz%s", bstr(&path), slash, lastelem(p));
- b.len -= 4;
- bwritef(&b, "_%s_%s.c", goos, goarch);
- goc2c(p, bstr(&b));
- vadd(&files, bstr(&b));
- }
- vuniq(&files);
- }
-
if((!streq(goos, gohostos) || !streq(goarch, gohostarch)) && isgo) {
// We've generated the right files; the go command can do the build.
if(vflag > 1)
@@ -1086,7 +1069,7 @@ install(char *dir)
else
vadd(&compile, "main");
- if(streq(dir, "pkg/runtime"))
+ if(streq(dir, "runtime"))
vadd(&compile, "-+");
vcopy(&compile, go.p, go.len);
@@ -1115,11 +1098,11 @@ install(char *dir)
nobuild:
// In package runtime, we install runtime.h and cgocall.h too,
// for use by cgo compilation.
- if(streq(dir, "pkg/runtime")) {
- copy(bpathf(&b, "%s/pkg/%s_%s/cgocall.h", goroot, goos, goarch),
- bpathf(&b1, "%s/src/pkg/runtime/cgocall.h", goroot), 0);
- copy(bpathf(&b, "%s/pkg/%s_%s/runtime.h", goroot, goos, goarch),
- bpathf(&b1, "%s/src/pkg/runtime/runtime.h", goroot), 0);
+ if(streq(dir, "runtime")) {
+ copyfile(bpathf(&b, "%s/pkg/%s_%s/cgocall.h", goroot, goos, goarch),
+ bpathf(&b1, "%s/src/runtime/cgocall.h", goroot), 0);
+ copyfile(bpathf(&b, "%s/pkg/%s_%s/runtime.h", goroot, goos, goarch),
+ bpathf(&b1, "%s/src/runtime/runtime.h", goroot), 0);
}
@@ -1149,7 +1132,7 @@ matchfield(char *f)
p = xstrrchr(f, ',');
if(p == nil)
- return streq(f, goos) || streq(f, goarch) || streq(f, "cmd_go_bootstrap") || streq(f, "go1.1");
+ return streq(f, goos) || streq(f, goarch) || streq(f, "cmd_go_bootstrap") || streq(f, "go1.1") || (streq(goos, "android") && streq(f, "linux"));
*p = 0;
res = matchfield(f) && matchfield(p+1);
*p = ',';
@@ -1241,8 +1224,8 @@ out:
}
// copy copies the file src to dst, via memory (so only good for small files).
-static void
-copy(char *dst, char *src, int exec)
+void
+copyfile(char *dst, char *src, int exec)
{
Buf b;
@@ -1303,8 +1286,6 @@ static char *buildorder[] = {
"libbio",
"liblink",
- "misc/pprof",
-
"cmd/cc", // must be before c
"cmd/gc", // must be before g
"cmd/%sl", // must be before a, c, g
@@ -1316,47 +1297,47 @@ static char *buildorder[] = {
// back when there were build scripts. Will have to
// be maintained by hand, but shouldn't change very
// often.
- "pkg/runtime",
- "pkg/errors",
- "pkg/sync/atomic",
- "pkg/sync",
- "pkg/io",
- "pkg/unicode",
- "pkg/unicode/utf8",
- "pkg/unicode/utf16",
- "pkg/bytes",
- "pkg/math",
- "pkg/strings",
- "pkg/strconv",
- "pkg/bufio",
- "pkg/sort",
- "pkg/container/heap",
- "pkg/encoding/base64",
- "pkg/syscall",
- "pkg/time",
- "pkg/os",
- "pkg/reflect",
- "pkg/fmt",
- "pkg/encoding",
- "pkg/encoding/json",
- "pkg/flag",
- "pkg/path/filepath",
- "pkg/path",
- "pkg/io/ioutil",
- "pkg/log",
- "pkg/regexp/syntax",
- "pkg/regexp",
- "pkg/go/token",
- "pkg/go/scanner",
- "pkg/go/ast",
- "pkg/go/parser",
- "pkg/os/exec",
- "pkg/os/signal",
- "pkg/net/url",
- "pkg/text/template/parse",
- "pkg/text/template",
- "pkg/go/doc",
- "pkg/go/build",
+ "runtime",
+ "errors",
+ "sync/atomic",
+ "sync",
+ "io",
+ "unicode",
+ "unicode/utf8",
+ "unicode/utf16",
+ "bytes",
+ "math",
+ "strings",
+ "strconv",
+ "bufio",
+ "sort",
+ "container/heap",
+ "encoding/base64",
+ "syscall",
+ "time",
+ "os",
+ "reflect",
+ "fmt",
+ "encoding",
+ "encoding/json",
+ "flag",
+ "path/filepath",
+ "path",
+ "io/ioutil",
+ "log",
+ "regexp/syntax",
+ "regexp",
+ "go/token",
+ "go/scanner",
+ "go/ast",
+ "go/parser",
+ "os/exec",
+ "os/signal",
+ "net/url",
+ "text/template/parse",
+ "text/template",
+ "go/doc",
+ "go/build",
"cmd/go",
};
@@ -1364,6 +1345,7 @@ static char *buildorder[] = {
// It is bigger than the buildorder because we clean all the
// compilers but build only the $GOARCH ones.
static char *cleantab[] = {
+ // Commands and C libraries.
"cmd/5a",
"cmd/5c",
"cmd/5g",
@@ -1382,46 +1364,48 @@ static char *cleantab[] = {
"lib9",
"libbio",
"liblink",
- "pkg/bufio",
- "pkg/bytes",
- "pkg/container/heap",
- "pkg/encoding",
- "pkg/encoding/base64",
- "pkg/encoding/json",
- "pkg/errors",
- "pkg/flag",
- "pkg/fmt",
- "pkg/go/ast",
- "pkg/go/build",
- "pkg/go/doc",
- "pkg/go/parser",
- "pkg/go/scanner",
- "pkg/go/token",
- "pkg/io",
- "pkg/io/ioutil",
- "pkg/log",
- "pkg/math",
- "pkg/net/url",
- "pkg/os",
- "pkg/os/exec",
- "pkg/path",
- "pkg/path/filepath",
- "pkg/reflect",
- "pkg/regexp",
- "pkg/regexp/syntax",
- "pkg/runtime",
- "pkg/sort",
- "pkg/strconv",
- "pkg/strings",
- "pkg/sync",
- "pkg/sync/atomic",
- "pkg/syscall",
- "pkg/text/template",
- "pkg/text/template/parse",
- "pkg/time",
- "pkg/unicode",
- "pkg/unicode/utf16",
- "pkg/unicode/utf8",
+
+ // Go packages.
+ "bufio",
+ "bytes",
+ "container/heap",
+ "encoding",
+ "encoding/base64",
+ "encoding/json",
+ "errors",
+ "flag",
+ "fmt",
+ "go/ast",
+ "go/build",
+ "go/doc",
+ "go/parser",
+ "go/scanner",
+ "go/token",
+ "io",
+ "io/ioutil",
+ "log",
+ "math",
+ "net/url",
+ "os",
+ "os/exec",
+ "path",
+ "path/filepath",
+ "reflect",
+ "regexp",
+ "regexp/syntax",
+ "runtime",
+ "sort",
+ "strconv",
+ "strings",
+ "sync",
+ "sync/atomic",
+ "syscall",
+ "text/template",
+ "text/template/parse",
+ "time",
+ "unicode",
+ "unicode/utf16",
+ "unicode/utf8",
};
static void
@@ -1450,9 +1434,9 @@ clean(void)
xremove(bpathf(&b, "%s/%s", bstr(&path), cleantab[i]+4));
}
- // remove src/pkg/runtime/z* unconditionally
+ // remove src/runtime/z* unconditionally
vreset(&dir);
- bpathf(&path, "%s/src/pkg/runtime", goroot);
+ bpathf(&path, "%s/src/runtime", goroot);
xreaddir(&dir, bstr(&path));
for(j=0; j<dir.len; j++) {
if(hasprefix(dir.p[j], "z"))
@@ -1589,6 +1573,15 @@ cmdbootstrap(int argc, char **argv)
if(argc > 0)
usage();
+ if(isdir(bpathf(&b, "%s/src/pkg", goroot))) {
+ fatal("\n\n"
+ "The Go package sources have moved to $GOROOT/src.\n"
+ "*** %s still exists. ***\n"
+ "It probably contains stale files that may confuse the build.\n"
+ "Please (check what's there and) remove it and try again.\n"
+ "See http://golang.org/s/go14nopkg\n", bpathf(&b, "%s/src/pkg", goroot));
+ }
+
if(rebuildall)
clean();
goversion = findgoversion();
@@ -1619,9 +1612,9 @@ cmdbootstrap(int argc, char **argv)
xsetenv("GOARCH", goarch);
xsetenv("GOOS", goos);
- // Build pkg/runtime for actual goos/goarch too.
+ // Build runtime for actual goos/goarch too.
if(!streq(goos, gohostos) || !streq(goarch, gohostarch))
- install("pkg/runtime");
+ install("runtime");
bfree(&b);
}
diff --git a/src/cmd/dist/buildgc.c b/src/cmd/dist/buildgc.c
index 1f0625daa..66adf6857 100644
--- a/src/cmd/dist/buildgc.c
+++ b/src/cmd/dist/buildgc.c
@@ -65,24 +65,35 @@ gcopnames(char *dir, char *file)
// mkanames reads [568].out.h and writes anames[568].c
// The format is much the same as the Go opcodes above.
+// it also writes out cnames array for C_* constants.
void
mkanames(char *dir, char *file)
{
- int i, ch;
- Buf in, b, out;
+ int i, j, ch;
+ Buf in, b, out, out2;
Vec lines;
char *p;
binit(&b);
binit(&in);
binit(&out);
+ binit(&out2);
vinit(&lines);
ch = file[xstrlen(file)-3];
bprintf(&b, "%s/../cmd/%cl/%c.out.h", dir, ch, ch);
readfile(&in, bstr(&b));
splitlines(&lines, bstr(&in));
- bprintf(&out, "char* anames%c[] = {\n", ch);
+
+ // Include link.h so that the extern declaration there is
+ // checked against the non-extern declaration we are generating.
+ bwritestr(&out, bprintf(&b, "#include <u.h>\n"));
+ bwritestr(&out, bprintf(&b, "#include <libc.h>\n"));
+ bwritestr(&out, bprintf(&b, "#include <bio.h>\n"));
+ bwritestr(&out, bprintf(&b, "#include <link.h>\n"));
+ bwritestr(&out, bprintf(&b, "\n"));
+
+ bwritestr(&out, bprintf(&b, "char* anames%c[] = {\n", ch));
for(i=0; i<lines.len; i++) {
if(hasprefix(lines.p[i], "\tA")) {
p = xstrstr(lines.p[i], ",");
@@ -96,10 +107,31 @@ mkanames(char *dir, char *file)
}
}
bwritestr(&out, "};\n");
+
+ j=0;
+ bprintf(&out2, "char* cnames%c[] = {\n", ch);
+ for(i=0; i<lines.len; i++) {
+ if(hasprefix(lines.p[i], "\tC_")) {
+ p = xstrstr(lines.p[i], ",");
+ if(p)
+ *p = '\0';
+ p = xstrstr(lines.p[i], "\n");
+ if(p)
+ *p = '\0';
+ p = lines.p[i] + 3;
+ bwritestr(&out2, bprintf(&b, "\t\"%s\",\n", p));
+ j++;
+ }
+ }
+ bwritestr(&out2, "};\n");
+ if(j>0)
+ bwriteb(&out, &out2);
+
writefile(&out, file, 0);
bfree(&b);
bfree(&in);
bfree(&out);
+ bfree(&out2);
vfree(&lines);
}
diff --git a/src/cmd/dist/buildruntime.c b/src/cmd/dist/buildruntime.c
index ba5993b2f..bb774e05f 100644
--- a/src/cmd/dist/buildruntime.c
+++ b/src/cmd/dist/buildruntime.c
@@ -5,7 +5,7 @@
#include "a.h"
/*
- * Helpers for building pkg/runtime.
+ * Helpers for building runtime.
*/
// mkzversion writes zversion.go:
@@ -30,7 +30,8 @@ mkzversion(char *dir, char *file)
"package runtime\n"
"\n"
"const defaultGoroot = `%s`\n"
- "const theVersion = `%s`\n", goroot_final, goversion));
+ "const theVersion = `%s`\n"
+ "var buildVersion = theVersion\n", goroot_final, goversion));
writefile(&out, file, 0);
@@ -108,10 +109,14 @@ mkzgoos(char *dir, char *file)
binit(&b);
binit(&out);
+
+ bwritestr(&out, "// auto generated by go tool dist\n\n");
+
+ if(streq(goos, "linux")) {
+ bwritestr(&out, "// +build !android\n\n");
+ }
bwritestr(&out, bprintf(&b,
- "// auto generated by go tool dist\n"
- "\n"
"package runtime\n"
"\n"
"const theGoos = `%s`\n", goos));
@@ -130,17 +135,14 @@ static struct {
{"386", "",
"#define get_tls(r) MOVL TLS, r\n"
"#define g(r) 0(r)(TLS*1)\n"
- "#define m(r) 4(r)(TLS*1)\n"
},
{"amd64p32", "",
"#define get_tls(r) MOVL TLS, r\n"
"#define g(r) 0(r)(TLS*1)\n"
- "#define m(r) 4(r)(TLS*1)\n"
},
{"amd64", "",
"#define get_tls(r) MOVQ TLS, r\n"
"#define g(r) 0(r)(TLS*1)\n"
- "#define m(r) 8(r)(TLS*1)\n"
},
{"arm", "",
@@ -160,11 +162,12 @@ mkzasm(char *dir, char *file)
{
int i, n;
char *aggr, *p;
- Buf in, b, out, exp;
+ Buf in, b, b1, out, exp;
Vec argv, lines, fields;
binit(&in);
binit(&b);
+ binit(&b1);
binit(&out);
binit(&exp);
vinit(&argv);
@@ -172,6 +175,10 @@ mkzasm(char *dir, char *file)
vinit(&fields);
bwritestr(&out, "// auto generated by go tool dist\n\n");
+ if(streq(goos, "linux")) {
+ bwritestr(&out, "// +build !android\n\n");
+ }
+
for(i=0; i<nelem(zasmhdr); i++) {
if(hasprefix(goarch, zasmhdr[i].goarch) && hasprefix(goos, zasmhdr[i].goos)) {
bwritestr(&out, zasmhdr[i].hdr);
@@ -181,6 +188,9 @@ mkzasm(char *dir, char *file)
fatal("unknown $GOOS/$GOARCH in mkzasm");
ok:
+ copyfile(bpathf(&b, "%s/pkg/%s_%s/textflag.h", goroot, goos, goarch),
+ bpathf(&b1, "%s/src/cmd/ld/textflag.h", goroot), 0);
+
// Run 6c -D GOOS_goos -D GOARCH_goarch -I workdir -a -n -o workdir/proc.acid proc.c
// to get acid [sic] output. Run once without the -a -o workdir/proc.acid in order to
// report compilation failures (the -o redirects all messages, unfortunately).
@@ -192,6 +202,8 @@ ok:
vadd(&argv, bprintf(&b, "GOARCH_%s", goarch));
vadd(&argv, "-I");
vadd(&argv, bprintf(&b, "%s", workdir));
+ vadd(&argv, "-I");
+ vadd(&argv, bprintf(&b, "%s/pkg/%s_%s", goroot, goos, goarch));
vadd(&argv, "-n");
vadd(&argv, "-a");
vadd(&argv, "-o");
@@ -230,6 +242,12 @@ ok:
aggr = "cbctxt";
else if(streq(fields.p[1], "SEH"))
aggr = "seh";
+ else if(streq(fields.p[1], "Alg"))
+ aggr = "alg";
+ else if(streq(fields.p[1], "Panic"))
+ aggr = "panic";
+ else if(streq(fields.p[1], "Stack"))
+ aggr = "stack";
}
if(hasprefix(lines.p[i], "}"))
aggr = nil;
@@ -262,6 +280,7 @@ ok:
bfree(&in);
bfree(&b);
+ bfree(&b1);
bfree(&out);
bfree(&exp);
vfree(&argv);
@@ -283,6 +302,10 @@ mkzsys(char *dir, char *file)
binit(&out);
bwritestr(&out, "// auto generated by go tool dist\n\n");
+ if(streq(goos, "linux")) {
+ bwritestr(&out, "// +build !android\n\n");
+ }
+
if(streq(goos, "windows")) {
bwritef(&out,
"// runtime·callbackasm is called by external code to\n"
@@ -306,16 +329,20 @@ mkzsys(char *dir, char *file)
static char *runtimedefs[] = {
"defs.c",
+ "malloc.c",
+ "mcache.c",
+ "mgc0.c",
"proc.c",
"parfor.c",
+ "stack.c",
};
// mkzruntimedefs writes zruntime_defs_$GOOS_$GOARCH.h,
// which contains Go struct definitions equivalent to the C ones.
// Mostly we just write the output of 6c -q to the file.
// However, we run it on multiple files, so we have to delete
-// the duplicated definitions, and we don't care about the funcs
-// and consts, so we delete those too.
+// the duplicated definitions, and we don't care about the funcs,
+// so we delete those too.
//
void
mkzruntimedefs(char *dir, char *file)
@@ -335,13 +362,24 @@ mkzruntimedefs(char *dir, char *file)
vinit(&seen);
bwritestr(&out, "// auto generated by go tool dist\n"
- "\n"
+ "\n");
+
+ if(streq(goos, "linux")) {
+ bwritestr(&out, "// +build !android\n\n");
+ }
+
+ bwritestr(&out,
"package runtime\n"
"import \"unsafe\"\n"
"var _ unsafe.Pointer\n"
"\n"
);
+ // Do not emit definitions for these.
+ vadd(&seen, "true");
+ vadd(&seen, "false");
+ vadd(&seen, "raceenabled");
+ vadd(&seen, "allgs");
// Run 6c -D GOOS_goos -D GOARCH_goarch -I workdir -q -n -o workdir/runtimedefs
// on each of the runtimedefs C files.
@@ -352,6 +390,8 @@ mkzruntimedefs(char *dir, char *file)
vadd(&argv, bprintf(&b, "GOARCH_%s", goarch));
vadd(&argv, "-I");
vadd(&argv, bprintf(&b, "%s", workdir));
+ vadd(&argv, "-I");
+ vadd(&argv, bprintf(&b, "%s/pkg/%s_%s", goroot, goos, goarch));
vadd(&argv, "-q");
vadd(&argv, "-n");
vadd(&argv, "-o");
@@ -371,15 +411,15 @@ mkzruntimedefs(char *dir, char *file)
splitlines(&lines, bstr(&in));
for(i=0; i<lines.len; i++) {
p = lines.p[i];
- // Drop comment, func, and const lines.
- if(hasprefix(p, "//") || hasprefix(p, "const") || hasprefix(p, "func"))
+ // Drop comment and func lines.
+ if(hasprefix(p, "//") || hasprefix(p, "func"))
continue;
// Note beginning of type or var decl, which can be multiline.
// Remove duplicates. The linear check of seen here makes the
// whole processing quadratic in aggregate, but there are only
// about 100 declarations, so this is okay (and simple).
- if(hasprefix(p, "type ") || hasprefix(p, "var ")) {
+ if(hasprefix(p, "type ") || hasprefix(p, "var ") || hasprefix(p, "const ")) {
splitfields(&fields, p);
if(fields.len < 2)
continue;
@@ -390,6 +430,17 @@ mkzruntimedefs(char *dir, char *file)
}
vadd(&seen, fields.p[1]);
}
+
+ // Const lines are printed in original case (usually upper). Add a leading _ as needed.
+ if(hasprefix(p, "const ")) {
+ if('A' <= p[6] && p[6] <= 'Z')
+ bwritestr(&out, "const _");
+ else
+ bwritestr(&out, "const ");
+ bwritestr(&out, p+6);
+ continue;
+ }
+
if(skip) {
if(hasprefix(p, "}"))
skip = 0;
@@ -398,6 +449,11 @@ mkzruntimedefs(char *dir, char *file)
bwritestr(&out, p);
}
+
+ // Some windows specific const.
+ if(streq(goos, "windows")) {
+ bwritestr(&out, bprintf(&b, "const cb_max = %d\n", MAXWINCB));
+ }
writefile(&out, file, 0);
diff --git a/src/cmd/dist/goc2c.c b/src/cmd/dist/goc2c.c
deleted file mode 100644
index 38627657e..000000000
--- a/src/cmd/dist/goc2c.c
+++ /dev/null
@@ -1,833 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include "a.h"
-
-/*
- * Translate a .goc file into a .c file. A .goc file is a combination
- * of a limited form of Go with C.
- */
-
-/*
- package PACKAGENAME
- {# line}
- func NAME([NAME TYPE { , NAME TYPE }]) [(NAME TYPE { , NAME TYPE })] \{
- C code with proper brace nesting
- \}
-*/
-
-/*
- * We generate C code which implements the function such that it can
- * be called from Go and executes the C code.
- */
-
-static char *input;
-static Buf *output;
-#define EOF -1
-
-enum
-{
- use64bitint = 1,
-};
-
-static int
-xgetchar(void)
-{
- int c;
-
- c = *input;
- if(c == 0)
- return EOF;
- input++;
- return c;
-}
-
-static void
-xungetc(void)
-{
- input--;
-}
-
-static void
-xputchar(char c)
-{
- bwrite(output, &c, 1);
-}
-
-static int
-xisspace(int c)
-{
- return c == ' ' || c == '\t' || c == '\r' || c == '\n';
-}
-
-/* Whether we're emitting for gcc */
-static int gcc;
-
-/* File and line number */
-static const char *file;
-static unsigned int lineno;
-
-/* List of names and types. */
-struct params {
- struct params *next;
- char *name;
- char *type;
-};
-
-/* index into type_table */
-enum {
- Bool,
- Float,
- Int,
- Uint,
- Uintptr,
- String,
- Slice,
- Eface,
- Complex128,
- Float32,
- Float64,
-};
-
-static struct {
- char *name;
- int size;
- int rnd; // alignment
-} type_table[] = {
- /*
- * variable sized first, for easy replacement.
- * order matches enum above.
- * default is 32-bit architecture sizes.
- * spelling as in package runtime, so intgo/uintgo not int/uint.
- */
- {"bool", 1},
- {"float", 4},
- {"intgo", 4},
- {"uintgo", 4},
- {"uintptr", 4},
- {"String", 8},
- {"Slice", 12},
- {"Eface", 8},
- {"Complex128", 16},
-
- /* fixed size */
- {"float32", 4},
- {"float64", 8},
- {"byte", 1},
- {"int8", 1},
- {"uint8", 1},
- {"int16", 2},
- {"uint16", 2},
- {"int32", 4},
- {"rune", 4},
- {"uint32", 4},
- {"int64", 8},
- {"uint64", 8},
-
- {nil, 0},
-};
-
-/* Fixed structure alignment (non-gcc only) */
-int structround = 4;
-
-/* Unexpected EOF. */
-static void
-bad_eof(void)
-{
- fatal("%s:%d: unexpected EOF\n", file, lineno);
-}
-
-/* Free a list of parameters. */
-static void
-free_params(struct params *p)
-{
- while (p != nil) {
- struct params *next;
-
- next = p->next;
- xfree(p->name);
- xfree(p->type);
- xfree(p);
- p = next;
- }
-}
-
-/* Read a character, tracking lineno. */
-static int
-getchar_update_lineno(void)
-{
- int c;
-
- c = xgetchar();
- if (c == '\n')
- ++lineno;
- return c;
-}
-
-/* Read a character, giving an error on EOF, tracking lineno. */
-static int
-getchar_no_eof(void)
-{
- int c;
-
- c = getchar_update_lineno();
- if (c == EOF)
- bad_eof();
- return c;
-}
-
-/* Read a character, skipping comments. */
-static int
-getchar_skipping_comments(void)
-{
- int c;
-
- while (1) {
- c = getchar_update_lineno();
- if (c != '/')
- return c;
-
- c = xgetchar();
- if (c == '/') {
- do {
- c = getchar_update_lineno();
- } while (c != EOF && c != '\n');
- return c;
- } else if (c == '*') {
- while (1) {
- c = getchar_update_lineno();
- if (c == EOF)
- return EOF;
- if (c == '*') {
- do {
- c = getchar_update_lineno();
- } while (c == '*');
- if (c == '/')
- break;
- }
- }
- } else {
- xungetc();
- return '/';
- }
- }
-}
-
-/*
- * Read and return a token. Tokens are string or character literals
- * or else delimited by whitespace or by [(),{}].
- * The latter are all returned as single characters.
- */
-static char *
-read_token(void)
-{
- int c, q;
- char *buf;
- unsigned int alc, off;
- char* delims = "(),{}";
-
- while (1) {
- c = getchar_skipping_comments();
- if (c == EOF)
- return nil;
- if (!xisspace(c))
- break;
- }
- alc = 16;
- buf = xmalloc(alc + 1);
- off = 0;
- if(c == '"' || c == '\'') {
- q = c;
- buf[off] = c;
- ++off;
- while (1) {
- if (off+2 >= alc) { // room for c and maybe next char
- alc *= 2;
- buf = xrealloc(buf, alc + 1);
- }
- c = getchar_no_eof();
- buf[off] = c;
- ++off;
- if(c == q)
- break;
- if(c == '\\') {
- buf[off] = getchar_no_eof();
- ++off;
- }
- }
- } else if (xstrrchr(delims, c) != nil) {
- buf[off] = c;
- ++off;
- } else {
- while (1) {
- if (off >= alc) {
- alc *= 2;
- buf = xrealloc(buf, alc + 1);
- }
- buf[off] = c;
- ++off;
- c = getchar_skipping_comments();
- if (c == EOF)
- break;
- if (xisspace(c) || xstrrchr(delims, c) != nil) {
- if (c == '\n')
- lineno--;
- xungetc();
- break;
- }
- }
- }
- buf[off] = '\0';
- return buf;
-}
-
-/* Read a token, giving an error on EOF. */
-static char *
-read_token_no_eof(void)
-{
- char *token = read_token();
- if (token == nil)
- bad_eof();
- return token;
-}
-
-/* Read the package clause, and return the package name. */
-static char *
-read_package(void)
-{
- char *token;
-
- token = read_token_no_eof();
- if (token == nil)
- fatal("%s:%d: no token\n", file, lineno);
- if (!streq(token, "package")) {
- fatal("%s:%d: expected \"package\", got \"%s\"\n",
- file, lineno, token);
- }
- return read_token_no_eof();
-}
-
-/* Read and copy preprocessor lines. */
-static void
-read_preprocessor_lines(void)
-{
- int first;
-
- first = 1;
- while (1) {
- int c;
-
- do {
- c = getchar_skipping_comments();
- } while (xisspace(c));
- if (c != '#') {
- xungetc();
- break;
- }
- if(first) {
- first = 0;
- xputchar('\n');
- }
- xputchar(c);
- do {
- c = getchar_update_lineno();
- xputchar(c);
- } while (c != '\n');
- }
-}
-
-/*
- * Read a type in Go syntax and return a type in C syntax. We only
- * permit basic types and pointers.
- */
-static char *
-read_type(void)
-{
- char *p, *op, *q;
- int pointer_count;
- unsigned int len;
-
- p = read_token_no_eof();
- if (*p != '*' && !streq(p, "int") && !streq(p, "uint"))
- return p;
- op = p;
- pointer_count = 0;
- while (*p == '*') {
- ++pointer_count;
- ++p;
- }
- len = xstrlen(p);
- q = xmalloc(len + 2 + pointer_count + 1);
- xmemmove(q, p, len);
-
- // Turn int/uint into intgo/uintgo.
- if((len == 3 && xmemcmp(q, "int", 3) == 0) || (len == 4 && xmemcmp(q, "uint", 4) == 0)) {
- q[len++] = 'g';
- q[len++] = 'o';
- }
-
- while (pointer_count-- > 0)
- q[len++] = '*';
-
- q[len] = '\0';
- xfree(op);
- return q;
-}
-
-/* Return the size of the given type. */
-static int
-type_size(char *p, int *rnd)
-{
- int i;
-
- if(p[xstrlen(p)-1] == '*') {
- *rnd = type_table[Uintptr].rnd;
- return type_table[Uintptr].size;
- }
-
- if(streq(p, "Iface"))
- p = "Eface";
-
- for(i=0; type_table[i].name; i++)
- if(streq(type_table[i].name, p)) {
- *rnd = type_table[i].rnd;
- return type_table[i].size;
- }
- fatal("%s:%d: unknown type %s\n", file, lineno, p);
- return 0;
-}
-
-/*
- * Read a list of parameters. Each parameter is a name and a type.
- * The list ends with a ')'. We have already read the '('.
- */
-static struct params *
-read_params(int *poffset)
-{
- char *token;
- struct params *ret, **pp, *p;
- int offset, size, rnd;
-
- ret = nil;
- pp = &ret;
- token = read_token_no_eof();
- offset = 0;
- if (!streq(token, ")")) {
- while (1) {
- p = xmalloc(sizeof(struct params));
- p->name = token;
- p->next = nil;
- *pp = p;
- pp = &p->next;
-
- if(streq(token, "...")) {
- p->type = xstrdup("");
- } else {
- p->type = read_type();
- rnd = 0;
- size = type_size(p->type, &rnd);
- if(rnd > structround)
- rnd = structround;
- if(offset%rnd)
- offset += rnd - offset%rnd;
- offset += size;
- }
-
- token = read_token_no_eof();
- if (!streq(token, ","))
- break;
- token = read_token_no_eof();
- }
- }
- if (!streq(token, ")")) {
- fatal("%s:%d: expected '('\n",
- file, lineno);
- }
- if (poffset != nil)
- *poffset = offset;
- return ret;
-}
-
-/*
- * Read a function header. This reads up to and including the initial
- * '{' character. Returns 1 if it read a header, 0 at EOF.
- */
-static int
-read_func_header(char **name, struct params **params, int *paramwid, struct params **rets)
-{
- int lastline;
- char *token;
-
- lastline = -1;
- while (1) {
- read_preprocessor_lines();
- token = read_token();
- if (token == nil)
- return 0;
- if (streq(token, "func")) {
- if(lastline != -1)
- bwritef(output, "\n");
- break;
- }
- if (lastline != lineno) {
- if (lastline == lineno-1)
- bwritef(output, "\n");
- else
- bwritef(output, "\n#line %d \"%s\"\n", lineno, file);
- lastline = lineno;
- }
- bwritef(output, "%s ", token);
- }
-
- *name = read_token_no_eof();
-
- token = read_token();
- if (token == nil || !streq(token, "(")) {
- fatal("%s:%d: expected \"(\"\n",
- file, lineno);
- }
- *params = read_params(paramwid);
-
- token = read_token();
- if (token == nil || !streq(token, "("))
- *rets = nil;
- else {
- *rets = read_params(nil);
- token = read_token();
- }
- if (token == nil || !streq(token, "{")) {
- fatal("%s:%d: expected \"{\"\n",
- file, lineno);
- }
- return 1;
-}
-
-/* Write out parameters. */
-static void
-write_params(struct params *params, int *first)
-{
- struct params *p;
-
- for (p = params; p != nil; p = p->next) {
- if (*first)
- *first = 0;
- else
- bwritef(output, ", ");
- bwritef(output, "%s %s", p->type, p->name);
- }
-}
-
-/* Write a 6g function header. */
-static void
-write_6g_func_header(char *package, char *name, struct params *params,
- int paramwid, struct params *rets)
-{
- int first, n;
- struct params *p;
-
- bwritef(output, "void\n");
- if(!contains(name, "·"))
- bwritef(output, "%s·", package);
- bwritef(output, "%s(", name);
-
- first = 1;
- write_params(params, &first);
-
- /* insert padding to align output struct */
- if(rets != nil && paramwid%structround != 0) {
- n = structround - paramwid%structround;
- if(n & 1)
- bwritef(output, ", uint8");
- if(n & 2)
- bwritef(output, ", uint16");
- if(n & 4)
- bwritef(output, ", uint32");
- }
-
- write_params(rets, &first);
- bwritef(output, ")\n{\n");
-
- for (p = rets; p != nil; p = p->next) {
- if(streq(p->name, "..."))
- continue;
- if(streq(p->type, "Slice"))
- bwritef(output, "\t%s.array = 0;\n\t%s.len = 0;\n\t%s.cap = 0;\n", p->name, p->name, p->name);
- else if(streq(p->type, "String"))
- bwritef(output, "\t%s.str = 0;\n\t%s.len = 0;\n", p->name, p->name);
- else if(streq(p->type, "Eface"))
- bwritef(output, "\t%s.type = 0;\n\t%s.data = 0;\n", p->name, p->name);
- else if(streq(p->type, "Iface"))
- bwritef(output, "\t%s.tab = 0;\n\t%s.data = 0;\n", p->name, p->name);
- else if(streq(p->type, "Complex128"))
- bwritef(output, "\t%s.real = 0;\n\t%s.imag = 0;\n", p->name, p->name);
- else
- bwritef(output, "\t%s = 0;\n", p->name);
- bwritef(output, "\tFLUSH(&%s);\n", p->name);
- }
-}
-
-/* Write a 6g function trailer. */
-static void
-write_6g_func_trailer(struct params *rets)
-{
- struct params *p;
-
- for (p = rets; p != nil; p = p->next)
- if(!streq(p->name, "..."))
- bwritef(output, "\tFLUSH(&%s);\n", p->name);
- bwritef(output, "}\n");
-}
-
-/* Define the gcc function return type if necessary. */
-static void
-define_gcc_return_type(char *package, char *name, struct params *rets)
-{
- struct params *p;
-
- if (rets == nil || rets->next == nil)
- return;
- bwritef(output, "struct %s_%s_ret {\n", package, name);
- for (p = rets; p != nil; p = p->next)
- bwritef(output, " %s %s;\n", p->type, p->name);
- bwritef(output, "};\n");
-}
-
-/* Write out the gcc function return type. */
-static void
-write_gcc_return_type(char *package, char *name, struct params *rets)
-{
- if (rets == nil)
- bwritef(output, "void");
- else if (rets->next == nil)
- bwritef(output, "%s", rets->type);
- else
- bwritef(output, "struct %s_%s_ret", package, name);
-}
-
-/* Write out a gcc function header. */
-static void
-write_gcc_func_header(char *package, char *name, struct params *params,
- struct params *rets)
-{
- int first;
- struct params *p;
-
- define_gcc_return_type(package, name, rets);
- write_gcc_return_type(package, name, rets);
- bwritef(output, " %s_%s(", package, name);
- first = 1;
- write_params(params, &first);
- bwritef(output, ") asm (\"%s.%s\");\n", package, name);
- write_gcc_return_type(package, name, rets);
- bwritef(output, " %s_%s(", package, name);
- first = 1;
- write_params(params, &first);
- bwritef(output, ")\n{\n");
- for (p = rets; p != nil; p = p->next)
- bwritef(output, " %s %s;\n", p->type, p->name);
-}
-
-/* Write out a gcc function trailer. */
-static void
-write_gcc_func_trailer(char *package, char *name, struct params *rets)
-{
- if (rets == nil) {
- // nothing to do
- }
- else if (rets->next == nil)
- bwritef(output, "return %s;\n", rets->name);
- else {
- struct params *p;
-
- bwritef(output, " {\n struct %s_%s_ret __ret;\n", package, name);
- for (p = rets; p != nil; p = p->next)
- bwritef(output, " __ret.%s = %s;\n", p->name, p->name);
- bwritef(output, " return __ret;\n }\n");
- }
- bwritef(output, "}\n");
-}
-
-/* Write out a function header. */
-static void
-write_func_header(char *package, char *name,
- struct params *params, int paramwid,
- struct params *rets)
-{
- if (gcc)
- write_gcc_func_header(package, name, params, rets);
- else
- write_6g_func_header(package, name, params, paramwid, rets);
- bwritef(output, "#line %d \"%s\"\n", lineno, file);
-}
-
-/* Write out a function trailer. */
-static void
-write_func_trailer(char *package, char *name,
- struct params *rets)
-{
- if (gcc)
- write_gcc_func_trailer(package, name, rets);
- else
- write_6g_func_trailer(rets);
-}
-
-/*
- * Read and write the body of the function, ending in an unnested }
- * (which is read but not written).
- */
-static void
-copy_body(void)
-{
- int nesting = 0;
- while (1) {
- int c;
-
- c = getchar_no_eof();
- if (c == '}' && nesting == 0)
- return;
- xputchar(c);
- switch (c) {
- default:
- break;
- case '{':
- ++nesting;
- break;
- case '}':
- --nesting;
- break;
- case '/':
- c = getchar_update_lineno();
- xputchar(c);
- if (c == '/') {
- do {
- c = getchar_no_eof();
- xputchar(c);
- } while (c != '\n');
- } else if (c == '*') {
- while (1) {
- c = getchar_no_eof();
- xputchar(c);
- if (c == '*') {
- do {
- c = getchar_no_eof();
- xputchar(c);
- } while (c == '*');
- if (c == '/')
- break;
- }
- }
- }
- break;
- case '"':
- case '\'':
- {
- int delim = c;
- do {
- c = getchar_no_eof();
- xputchar(c);
- if (c == '\\') {
- c = getchar_no_eof();
- xputchar(c);
- c = '\0';
- }
- } while (c != delim);
- }
- break;
- }
- }
-}
-
-/* Process the entire file. */
-static void
-process_file(void)
-{
- char *package, *name, *p, *n;
- struct params *params, *rets;
- int paramwid;
-
- package = read_package();
- read_preprocessor_lines();
- while (read_func_header(&name, &params, &paramwid, &rets)) {
- // name may have a package override already
- n = xstrstr(name, "·");
- if(n != nil) {
- p = xmalloc(n - name + 1);
- xmemmove(p, name, n - name);
- p[n - name] = 0;
- n += xstrlen("·");
- } else {
- p = package;
- n = name;
- }
- write_func_header(p, n, params, paramwid, rets);
- copy_body();
- write_func_trailer(p, n, rets);
- xfree(name);
- if(p != package) xfree(p);
- free_params(params);
- free_params(rets);
- }
- xfree(package);
-}
-
-void
-goc2c(char *goc, char *c)
-{
- int i;
- Buf in, out;
-
- binit(&in);
- binit(&out);
-
- file = goc;
- readfile(&in, goc);
-
- // TODO: set gcc=1 when using gcc
-
- if(!gcc) {
- if(streq(goarch, "amd64")) {
- type_table[Uintptr].size = 8;
- if(use64bitint) {
- type_table[Int].size = 8;
- } else {
- type_table[Int].size = 4;
- }
- structround = 8;
- } else if(streq(goarch, "amd64p32")) {
- type_table[Uintptr].size = 4;
- type_table[Int].size = 4;
- structround = 8;
- } else {
- // NOTE: These are set in the initializer,
- // but they might have been changed by a
- // previous invocation of goc2c, so we have
- // to restore them.
- type_table[Uintptr].size = 4;
- type_table[Int].size = 4;
- structround = 4;
- }
-
- type_table[Uint].size = type_table[Int].size;
- type_table[Slice].size = type_table[Uintptr].size+2*type_table[Int].size;
- type_table[Eface].size = 2*type_table[Uintptr].size;
- type_table[String].size = 2*type_table[Uintptr].size;
-
- for(i=0; i<nelem(type_table); i++)
- type_table[i].rnd = type_table[i].size;
-
- type_table[String].rnd = type_table[Uintptr].rnd;
- type_table[Slice].rnd = type_table[Uintptr].rnd;
- type_table[Eface].rnd = type_table[Uintptr].rnd;
- type_table[Complex128].rnd = type_table[Float64].rnd;
- }
-
- bprintf(&out, "// auto generated by go tool dist\n// goos=%s goarch=%s\n\n", goos, goarch);
- input = bstr(&in);
- output = &out;
-
- lineno = 1;
- process_file();
-
- writefile(&out, c, 0);
-}
diff --git a/src/cmd/dist/plan9.c b/src/cmd/dist/plan9.c
index 8d492ebc6..e4bf25147 100644
--- a/src/cmd/dist/plan9.c
+++ b/src/cmd/dist/plan9.c
@@ -23,7 +23,7 @@ bprintf(Buf *b, char *fmt, ...)
{
va_list arg;
char buf[4096];
-
+
breset(b);
va_start(arg, fmt);
vsnprintf(buf, sizeof buf, fmt, arg);
@@ -572,10 +572,10 @@ bool
hassuffix(char *p, char *suffix)
{
int np, ns;
-
+
np = strlen(p);
ns = strlen(suffix);
- return np >= ns && strcmp(p+np-ns, suffix) == 0;
+ return np >= ns && streq(p+np-ns, suffix);
}
// hasprefix reports whether p begins with prefix.
diff --git a/src/cmd/dist/unix.c b/src/cmd/dist/unix.c
index 8b943a2d9..4a78684b4 100644
--- a/src/cmd/dist/unix.c
+++ b/src/cmd/dist/unix.c
@@ -431,7 +431,7 @@ xremoveall(char *p)
}
bfree(&b);
- vfree(&dir);
+ vfree(&dir);
}
// xreaddir replaces dst with a list of the names of the files in dir.
@@ -441,13 +441,13 @@ xreaddir(Vec *dst, char *dir)
{
DIR *d;
struct dirent *dp;
-
+
vreset(dst);
d = opendir(dir);
if(d == nil)
fatal("opendir %s: %s", dir, strerror(errno));
while((dp = readdir(d)) != nil) {
- if(strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0)
+ if(streq(dp->d_name, ".") || streq(dp->d_name, ".."))
continue;
vadd(dst, dp->d_name);
}
@@ -461,7 +461,7 @@ xworkdir(void)
{
Buf b;
char *p;
-
+
binit(&b);
xgetenv(&b, "TMPDIR");
@@ -546,10 +546,10 @@ bool
hassuffix(char *p, char *suffix)
{
int np, ns;
-
+
np = strlen(p);
ns = strlen(suffix);
- return np >= ns && strcmp(p+np-ns, suffix) == 0;
+ return np >= ns && streq(p+np-ns, suffix);
}
// hasprefix reports whether p begins with prefix.
@@ -712,7 +712,7 @@ main(int argc, char **argv)
fatal("unknown architecture: %s", u.machine);
}
- if(strcmp(gohostarch, "arm") == 0)
+ if(streq(gohostarch, "arm"))
maxnbg = 1;
// The OS X 10.6 linker does not support external linking mode.
@@ -724,7 +724,7 @@ main(int argc, char **argv)
//
// Roughly, OS X 10.N shows up as uname release (N+4),
// so OS X 10.6 is uname version 10 and OS X 10.8 is uname version 12.
- if(strcmp(gohostos, "darwin") == 0) {
+ if(streq(gohostos, "darwin")) {
if(uname(&u) < 0)
fatal("uname: %s", strerror(errno));
osx = atoi(u.release) - 4;
diff --git a/src/cmd/dist/windows.c b/src/cmd/dist/windows.c
index 2839c4bc5..ff1a27351 100644
--- a/src/cmd/dist/windows.c
+++ b/src/cmd/dist/windows.c
@@ -770,10 +770,10 @@ bool
hassuffix(char *p, char *suffix)
{
int np, ns;
-
+
np = strlen(p);
ns = strlen(suffix);
- return np >= ns && strcmp(p+np-ns, suffix) == 0;
+ return np >= ns && streq(p+np-ns, suffix);
}
bool
@@ -929,7 +929,7 @@ xsamefile(char *f1, char *f2)
return 1;
torune(&ru, f1);
- // refer to ../../pkg/os/stat_windows.go:/sameFile
+ // refer to ../../os/stat_windows.go:/sameFile
fd1 = CreateFileW(ru, 0, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
xfree(ru);
if(fd1 == INVALID_HANDLE_VALUE)
diff --git a/src/cmd/fix/doc.go b/src/cmd/fix/doc.go
index 5de3e08c5..057016957 100644
--- a/src/cmd/fix/doc.go
+++ b/src/cmd/fix/doc.go
@@ -27,7 +27,7 @@ rewrites are idempotent, so that it is safe to apply fix to updated
or partially updated code even without using the -r flag.
Fix prints the full list of fixes it can apply in its help output;
-to see them, run go tool fix -?.
+to see them, run go tool fix -help.
Fix does not make backup copies of the files that it edits.
Instead, use a version control system's ``diff'' functionality to inspect
diff --git a/src/cmd/fix/fix.go b/src/cmd/fix/fix.go
index a100be794..a07bbac79 100644
--- a/src/cmd/fix/fix.go
+++ b/src/cmd/fix/fix.go
@@ -101,7 +101,7 @@ func walkBeforeAfter(x interface{}, before, after func(interface{})) {
case *[]ast.Stmt:
walkBeforeAfter(*n, before, after)
- // These are ordered and grouped to match ../../pkg/go/ast/ast.go
+ // These are ordered and grouped to match ../../go/ast/ast.go
case *ast.Field:
walkBeforeAfter(&n.Names, before, after)
walkBeforeAfter(&n.Type, before, after)
diff --git a/src/cmd/gc/align.c b/src/cmd/gc/align.c
index b809640e4..6e5d149c7 100644
--- a/src/cmd/gc/align.c
+++ b/src/cmd/gc/align.c
@@ -119,8 +119,10 @@ dowidth(Type *t)
if(t->width == -2) {
lno = lineno;
lineno = t->lineno;
- if(!t->broke)
+ if(!t->broke) {
+ t->broke = 1;
yyerror("invalid recursive type %T", t);
+ }
t->width = 0;
lineno = lno;
return;
diff --git a/src/cmd/gc/bisonerrors b/src/cmd/gc/bisonerrors
index 1f97fc8ce..fa74c67c3 100755
--- a/src/cmd/gc/bisonerrors
+++ b/src/cmd/gc/bisonerrors
@@ -22,6 +22,7 @@ BEGIN{
bison = 1
grammar = 0
states = 0
+ open = 0
}
# In Grammar section of y.output,
@@ -130,11 +131,26 @@ $1 == "%" {
continue
# No shift or reduce applied - found the error.
- printf("\t%s, %s,\n", state, tok);
+ printf("\t{%s, %s,\n", state, tok);
+ open = 1;
break
}
next
}
# Print other lines verbatim.
+open && /,$/ {
+ s = $0;
+ sub(",", "},", s)
+ print s
+ open = 0
+ next
+}
+
+open && /"$/ {
+ print $0 "}"
+ open = 0
+ next
+}
+
{print}
diff --git a/src/cmd/gc/builtin.c b/src/cmd/gc/builtin.c
index 5ca5aeb77..fbca4ee5f 100644
--- a/src/cmd/gc/builtin.c
+++ b/src/cmd/gc/builtin.c
@@ -2,18 +2,19 @@
char *runtimeimport =
"package runtime\n"
"import runtime \"runtime\"\n"
- "func @\"\".new (@\"\".typ·2 *byte) (? *any)\n"
+ "func @\"\".newobject (@\"\".typ·2 *byte) (? *any)\n"
"func @\"\".panicindex ()\n"
"func @\"\".panicslice ()\n"
"func @\"\".panicdivide ()\n"
"func @\"\".throwreturn ()\n"
"func @\"\".throwinit ()\n"
"func @\"\".panicwrap (? string, ? string, ? string)\n"
- "func @\"\".panic (? interface {})\n"
- "func @\"\".recover (? *int32) (? interface {})\n"
+ "func @\"\".gopanic (? interface {})\n"
+ "func @\"\".gorecover (? *int32) (? interface {})\n"
"func @\"\".printbool (? bool)\n"
"func @\"\".printfloat (? float64)\n"
"func @\"\".printint (? int64)\n"
+ "func @\"\".printhex (? uint64)\n"
"func @\"\".printuint (? uint64)\n"
"func @\"\".printcomplex (? complex128)\n"
"func @\"\".printstring (? string)\n"
@@ -23,7 +24,6 @@ char *runtimeimport =
"func @\"\".printslice (? any)\n"
"func @\"\".printnl ()\n"
"func @\"\".printsp ()\n"
- "func @\"\".goprintf ()\n"
"func @\"\".concatstring2 (? string, ? string) (? string)\n"
"func @\"\".concatstring3 (? string, ? string, ? string) (? string)\n"
"func @\"\".concatstring4 (? string, ? string, ? string, ? string) (? string)\n"
@@ -39,7 +39,7 @@ char *runtimeimport =
"func @\"\".stringtoslicerune (? string) (? []rune)\n"
"func @\"\".stringiter (? string, ? int) (? int)\n"
"func @\"\".stringiter2 (? string, ? int) (@\"\".retk·1 int, @\"\".retv·2 rune)\n"
- "func @\"\".copy (@\"\".to·2 any, @\"\".fr·3 any, @\"\".wid·4 uintptr) (? int)\n"
+ "func @\"\".slicecopy (@\"\".to·2 any, @\"\".fr·3 any, @\"\".wid·4 uintptr) (? int)\n"
"func @\"\".slicestringcopy (@\"\".to·2 any, @\"\".fr·3 any) (? int)\n"
"func @\"\".typ2Itab (@\"\".typ·2 *byte, @\"\".typ2·3 *byte, @\"\".cache·4 **byte) (@\"\".ret·1 *byte)\n"
"func @\"\".convI2E (@\"\".elem·2 any) (@\"\".ret·1 any)\n"
@@ -64,7 +64,6 @@ char *runtimeimport =
"func @\"\".efaceeq (@\"\".i1·2 any, @\"\".i2·3 any) (@\"\".ret·1 bool)\n"
"func @\"\".ifacethash (@\"\".i1·2 any) (@\"\".ret·1 uint32)\n"
"func @\"\".efacethash (@\"\".i1·2 any) (@\"\".ret·1 uint32)\n"
- "func @\"\".equal (@\"\".typ·2 *byte, @\"\".x1·3 any, @\"\".x2·4 any) (@\"\".ret·1 bool)\n"
"func @\"\".makemap (@\"\".mapType·2 *byte, @\"\".hint·3 int64) (@\"\".hmap·1 map[any]any)\n"
"func @\"\".mapaccess1 (@\"\".mapType·2 *byte, @\"\".hmap·3 map[any]any, @\"\".key·4 *any) (@\"\".val·1 *any)\n"
"func @\"\".mapaccess1_fast32 (@\"\".mapType·2 *byte, @\"\".hmap·3 map[any]any, @\"\".key·4 any) (@\"\".val·1 *any)\n"
@@ -83,10 +82,18 @@ char *runtimeimport =
"func @\"\".chanrecv2 (@\"\".chanType·2 *byte, @\"\".hchan·3 <-chan any, @\"\".elem·4 *any) (? bool)\n"
"func @\"\".chansend1 (@\"\".chanType·1 *byte, @\"\".hchan·2 chan<- any, @\"\".elem·3 *any)\n"
"func @\"\".closechan (@\"\".hchan·1 any)\n"
+ "func @\"\".writebarrierptr (@\"\".dst·1 *any, @\"\".src·2 any)\n"
+ "func @\"\".writebarrierstring (@\"\".dst·1 *any, @\"\".src·2 any)\n"
+ "func @\"\".writebarrierslice (@\"\".dst·1 *any, @\"\".src·2 any)\n"
+ "func @\"\".writebarrieriface (@\"\".dst·1 *any, @\"\".src·2 any)\n"
+ "func @\"\".writebarrierfat2 (@\"\".dst·1 *any, _ *byte, @\"\".src·3 any)\n"
+ "func @\"\".writebarrierfat3 (@\"\".dst·1 *any, _ *byte, @\"\".src·3 any)\n"
+ "func @\"\".writebarrierfat4 (@\"\".dst·1 *any, _ *byte, @\"\".src·3 any)\n"
+ "func @\"\".writebarrierfat (@\"\".typ·1 *byte, @\"\".dst·2 *any, @\"\".src·3 *any)\n"
"func @\"\".selectnbsend (@\"\".chanType·2 *byte, @\"\".hchan·3 chan<- any, @\"\".elem·4 *any) (? bool)\n"
"func @\"\".selectnbrecv (@\"\".chanType·2 *byte, @\"\".elem·3 *any, @\"\".hchan·4 <-chan any) (? bool)\n"
"func @\"\".selectnbrecv2 (@\"\".chanType·2 *byte, @\"\".elem·3 *any, @\"\".received·4 *bool, @\"\".hchan·5 <-chan any) (? bool)\n"
- "func @\"\".newselect (@\"\".size·2 int32) (@\"\".sel·1 *byte)\n"
+ "func @\"\".newselect (@\"\".sel·1 *byte, @\"\".selsize·2 int64, @\"\".size·3 int32)\n"
"func @\"\".selectsend (@\"\".sel·2 *byte, @\"\".hchan·3 chan<- any, @\"\".elem·4 *any) (@\"\".selected·1 bool)\n"
"func @\"\".selectrecv (@\"\".sel·2 *byte, @\"\".hchan·3 <-chan any, @\"\".elem·4 *any) (@\"\".selected·1 bool)\n"
"func @\"\".selectrecv2 (@\"\".sel·2 *byte, @\"\".hchan·3 <-chan any, @\"\".elem·4 *any, @\"\".received·5 *bool) (@\"\".selected·1 bool)\n"
@@ -96,12 +103,12 @@ char *runtimeimport =
"func @\"\".makeslice (@\"\".typ·2 *byte, @\"\".nel·3 int64, @\"\".cap·4 int64) (@\"\".ary·1 []any)\n"
"func @\"\".growslice (@\"\".typ·2 *byte, @\"\".old·3 []any, @\"\".n·4 int64) (@\"\".ary·1 []any)\n"
"func @\"\".memmove (@\"\".to·1 *any, @\"\".frm·2 *any, @\"\".length·3 uintptr)\n"
- "func @\"\".memequal (@\"\".eq·1 *bool, @\"\".size·2 uintptr, @\"\".x·3 *any, @\"\".y·4 *any)\n"
- "func @\"\".memequal8 (@\"\".eq·1 *bool, @\"\".size·2 uintptr, @\"\".x·3 *any, @\"\".y·4 *any)\n"
- "func @\"\".memequal16 (@\"\".eq·1 *bool, @\"\".size·2 uintptr, @\"\".x·3 *any, @\"\".y·4 *any)\n"
- "func @\"\".memequal32 (@\"\".eq·1 *bool, @\"\".size·2 uintptr, @\"\".x·3 *any, @\"\".y·4 *any)\n"
- "func @\"\".memequal64 (@\"\".eq·1 *bool, @\"\".size·2 uintptr, @\"\".x·3 *any, @\"\".y·4 *any)\n"
- "func @\"\".memequal128 (@\"\".eq·1 *bool, @\"\".size·2 uintptr, @\"\".x·3 *any, @\"\".y·4 *any)\n"
+ "func @\"\".memequal (@\"\".x·2 *any, @\"\".y·3 *any, @\"\".size·4 uintptr) (? bool)\n"
+ "func @\"\".memequal8 (@\"\".x·2 *any, @\"\".y·3 *any, @\"\".size·4 uintptr) (? bool)\n"
+ "func @\"\".memequal16 (@\"\".x·2 *any, @\"\".y·3 *any, @\"\".size·4 uintptr) (? bool)\n"
+ "func @\"\".memequal32 (@\"\".x·2 *any, @\"\".y·3 *any, @\"\".size·4 uintptr) (? bool)\n"
+ "func @\"\".memequal64 (@\"\".x·2 *any, @\"\".y·3 *any, @\"\".size·4 uintptr) (? bool)\n"
+ "func @\"\".memequal128 (@\"\".x·2 *any, @\"\".y·3 *any, @\"\".size·4 uintptr) (? bool)\n"
"func @\"\".int64div (? int64, ? int64) (? int64)\n"
"func @\"\".uint64div (? uint64, ? uint64) (? uint64)\n"
"func @\"\".int64mod (? int64, ? int64) (? int64)\n"
diff --git a/src/cmd/gc/bv.c b/src/cmd/gc/bv.c
index 0e8f8d473..cfd1cd281 100644
--- a/src/cmd/gc/bv.c
+++ b/src/cmd/gc/bv.c
@@ -108,6 +108,9 @@ bvnext(Bvec *bv, int32 i)
{
uint32 w;
+ if(i >= bv->n)
+ return -1;
+
// Jump i ahead to next word with bits.
if((bv->b[i>>WORDSHIFT]>>(i&WORDMASK)) == 0) {
i &= ~WORDMASK;
@@ -117,7 +120,7 @@ bvnext(Bvec *bv, int32 i)
}
if(i >= bv->n)
return -1;
-
+
// Find 1 bit.
w = bv->b[i>>WORDSHIFT]>>(i&WORDMASK);
while((w&1) == 0) {
diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c
index 143c1730d..e418b9c56 100644
--- a/src/cmd/gc/const.c
+++ b/src/cmd/gc/const.c
@@ -6,6 +6,7 @@
#include <libc.h>
#include "go.h"
#define TUP(x,y) (((x)<<16)|(y))
+/*c2go int TUP(int, int); */
static Val tocplx(Val);
static Val toflt(Val);
@@ -1565,7 +1566,6 @@ isgoconst(Node *n)
case ORSH:
case OSUB:
case OXOR:
- case OCONV:
case OIOTA:
case OCOMPLEX:
case OREAL:
@@ -1573,7 +1573,12 @@ isgoconst(Node *n)
if(isgoconst(n->left) && (n->right == N || isgoconst(n->right)))
return 1;
break;
-
+
+ case OCONV:
+ if(okforconst[n->type->etype] && isgoconst(n->left))
+ return 1;
+ break;
+
case OLEN:
case OCAP:
l = n->left;
diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c
index 73c2581be..dfcf47520 100644
--- a/src/cmd/gc/dcl.c
+++ b/src/cmd/gc/dcl.c
@@ -488,6 +488,10 @@ colasdefn(NodeList *left, Node *defn)
NodeList *l;
Node *n;
+ for(l=left; l; l=l->next)
+ if(l->n->sym != S)
+ l->n->sym->flags |= SymUniq;
+
nnew = 0;
nerr = 0;
for(l=left; l; l=l->next) {
@@ -499,6 +503,13 @@ colasdefn(NodeList *left, Node *defn)
nerr++;
continue;
}
+ if((n->sym->flags & SymUniq) == 0) {
+ yyerrorl(defn->lineno, "%S repeated on left side of :=", n->sym);
+ n->diag++;
+ nerr++;
+ continue;
+ }
+ n->sym->flags &= ~SymUniq;
if(n->sym->block == block)
continue;
@@ -547,6 +558,9 @@ ifacedcl(Node *n)
if(n->op != ODCLFIELD || n->right == N)
fatal("ifacedcl");
+ if(isblank(n->left))
+ yyerror("methods must have a unique non-blank name");
+
dclcontext = PPARAM;
markdcl();
funcdepth++;
diff --git a/src/cmd/gc/esc.c b/src/cmd/gc/esc.c
index 78624d7cb..324f24fcf 100644
--- a/src/cmd/gc/esc.c
+++ b/src/cmd/gc/esc.c
@@ -495,7 +495,7 @@ esc(EscState *e, Node *n, Node *up)
case ORANGE:
// Everything but fixed array is a dereference.
- if(isfixedarray(n->type) && n->list->next)
+ if(isfixedarray(n->type) && n->list && n->list->next)
escassign(e, n->list->next->n, n->right);
break;
@@ -1110,6 +1110,7 @@ escflood(EscState *e, Node *dst)
// pass all the tests we have written so far, which we assume matches
// the level of complexity we want the escape analysis code to handle.
#define MinLevel (-2)
+/*c2go enum { MinLevel = -2 };*/
static void
escwalk(EscState *e, int level, Node *dst, Node *src)
diff --git a/src/cmd/gc/fmt.c b/src/cmd/gc/fmt.c
index b5f8a834f..89d2a1404 100644
--- a/src/cmd/gc/fmt.c
+++ b/src/cmd/gc/fmt.c
@@ -649,7 +649,7 @@ typefmt(Fmt *fp, Type *t)
if(t->funarg) {
fmtstrcpy(fp, "(");
- if(fmtmode == FTypeId || fmtmode == FErr) { // no argument names on function signature, and no "noescape" tags
+ if(fmtmode == FTypeId || fmtmode == FErr) { // no argument names on function signature, and no "noescape"/"nosplit" tags
for(t1=t->type; t1!=T; t1=t1->down)
if(t1->down)
fmtprint(fp, "%hT, ", t1);
@@ -810,6 +810,13 @@ stmtfmt(Fmt *f, Node *n)
break;
case OASOP:
+ if(n->implicit) {
+ if(n->etype == OADD)
+ fmtprint(f, "%N++", n->left);
+ else
+ fmtprint(f, "%N--", n->left);
+ break;
+ }
fmtprint(f, "%N %#O= %N", n->left, n->etype, n->right);
break;
@@ -880,7 +887,11 @@ stmtfmt(Fmt *f, Node *n)
fmtstrcpy(f, "for loop");
break;
}
-
+
+ if(n->list == nil) {
+ fmtprint(f, "for range %N { %H }", n->right, n->nbody);
+ break;
+ }
fmtprint(f, "for %,H = range %N { %H }", n->list, n->right, n->nbody);
break;
@@ -974,7 +985,6 @@ static int opprec[] = {
[OTFUNC] = 8,
[OTINTER] = 8,
[OTMAP] = 8,
- [OTPAREN] = 8,
[OTSTRUCT] = 8,
[OINDEXMAP] = 8,
@@ -1105,16 +1115,11 @@ exprfmt(Fmt *f, Node *n, int prec)
case ONAME:
// Special case: name used as local variable in export.
- switch(n->class&~PHEAP){
- case PAUTO:
- case PPARAM:
- case PPARAMOUT:
- // _ becomes ~b%d internally; print as _ for export
- if(fmtmode == FExp && n->sym && n->sym->name[0] == '~' && n->sym->name[1] == 'b')
- return fmtprint(f, "_");
- if(fmtmode == FExp && n->sym && !isblank(n) && n->vargen > 0)
- return fmtprint(f, "%S·%d", n->sym, n->vargen);
- }
+ // _ becomes ~b%d internally; print as _ for export
+ if(fmtmode == FExp && n->sym && n->sym->name[0] == '~' && n->sym->name[1] == 'b')
+ return fmtprint(f, "_");
+ if(fmtmode == FExp && n->sym && !isblank(n) && n->vargen > 0)
+ return fmtprint(f, "%S·%d", n->sym, n->vargen);
// Special case: explicit name of func (*T) method(...) is turned into pkg.(*T).method,
// but for export, this should be rendered as (*pkg.T).meth.
@@ -1140,9 +1145,6 @@ exprfmt(Fmt *f, Node *n, int prec)
return fmtprint(f, "[]%N", n->left);
return fmtprint(f, "[]%N", n->right); // happens before typecheck
- case OTPAREN:
- return fmtprint(f, "(%N)", n->left);
-
case OTMAP:
return fmtprint(f, "map[%N]%N", n->left, n->right);
@@ -1153,7 +1155,7 @@ exprfmt(Fmt *f, Node *n, int prec)
case Csend:
return fmtprint(f, "chan<- %N", n->left);
default:
- if(n->left != N && n->left->op == TCHAN && n->left->sym == S && n->left->etype == Crecv)
+ if(n->left != N && n->left->op == OTCHAN && n->left->sym == S && n->left->etype == Crecv)
return fmtprint(f, "chan (%N)", n->left);
else
return fmtprint(f, "chan %N", n->left);
diff --git a/src/cmd/gc/gen.c b/src/cmd/gc/gen.c
index cf630f348..c7c9fcdaf 100644
--- a/src/cmd/gc/gen.c
+++ b/src/cmd/gc/gen.c
@@ -54,9 +54,6 @@ addrescapes(Node *n)
if(n->class == PAUTO && n->esc == EscNever)
break;
- if(debug['N'] && n->esc != EscUnknown)
- fatal("without escape analysis, only PAUTO's should have esc: %N", n);
-
switch(n->class) {
case PPARAMREF:
addrescapes(n->defn);
@@ -91,8 +88,7 @@ addrescapes(Node *n)
snprint(buf, sizeof buf, "&%S", n->sym);
n->heapaddr->sym = lookup(buf);
n->heapaddr->orig->sym = n->heapaddr->sym;
- if(!debug['N'])
- n->esc = EscHeap;
+ n->esc = EscHeap;
if(debug['m'])
print("%L: moved to heap: %N\n", n->lineno, n);
curfn = oldfn;
@@ -584,6 +580,8 @@ cgen_dcl(Node *n)
}
if(!(n->class & PHEAP))
return;
+ if(compiling_runtime)
+ yyerror("%N escapes to heap, not allowed in runtime.", n);
if(n->alloc == nil)
n->alloc = callnew(n->type);
cgen_as(n->heapaddr, n->alloc);
@@ -733,14 +731,10 @@ cgen_as(Node *nl, Node *nr)
return;
}
- if(nr == N || isnil(nr)) {
- // externals and heaps should already be clear
- if(nr == N) {
- if(nl->class == PEXTERN)
- return;
- if(nl->class & PHEAP)
- return;
- }
+ if(nr == N || iszero(nr)) {
+ // heaps should already be clear
+ if(nr == N && (nl->class & PHEAP))
+ return;
tl = nl->type;
if(tl == T)
@@ -804,7 +798,8 @@ cgen_eface(Node *n, Node *res)
void
cgen_slice(Node *n, Node *res)
{
- Node src, dst, *cap, *len, *offs, *add, *base;
+ Node src, dst, *cap, *len, *offs, *add, *base, *tmpcap, *tmplen, *cmp, con;
+ Prog *p1, *p2;
cap = n->list->n;
len = n->list->next->n;
@@ -821,6 +816,11 @@ cgen_slice(Node *n, Node *res)
// garbage collector can see.
base = temp(types[TUINTPTR]);
+ tmplen = temp(types[TINT]);
+ if(n->op != OSLICESTR)
+ tmpcap = temp(types[TINT]);
+ else
+ tmpcap = tmplen;
if(isnil(n->left)) {
tempname(&src, n->left->type);
@@ -835,43 +835,62 @@ cgen_slice(Node *n, Node *res)
fatal("slicearr is supposed to work on pointer: %+N\n", n);
cgen(&src, base);
cgen_checknil(base);
- if(offs != N) {
- add = nod(OADD, base, offs);
- typecheck(&add, Erv);
- cgen(add, base);
- }
- } else if(offs == N) {
- src.type = types[tptr];
- cgen(&src, base);
} else {
src.type = types[tptr];
- add = nod(OADDPTR, &src, offs);
- typecheck(&add, Erv);
- cgen(add, base);
+ cgen(&src, base);
}
// committed to the update
gvardef(res);
+ // compute len and cap.
+ // len = n-i, cap = m-i, and offs = i*width.
+ // computing offs last lets the multiply overwrite i.
+ cgen(len, tmplen);
+ if(n->op != OSLICESTR)
+ cgen(cap, tmpcap);
+
+ // if new cap != 0 { base += add }
+ // This avoids advancing base past the end of the underlying array/string,
+ // so that it cannot point at the next object in memory.
+ // If cap == 0, the base doesn't matter except insofar as it is 0 or non-zero.
+ // In essence we are replacing x[i:j:k] where i == j == k
+ // or x[i:j] where i == j == cap(x) with x[0:0:0].
+ if(offs != N) {
+ p1 = gjmp(P);
+ p2 = gjmp(P);
+ patch(p1, pc);
+
+ nodconst(&con, tmpcap->type, 0);
+ cmp = nod(OEQ, tmpcap, &con);
+ typecheck(&cmp, Erv);
+ bgen(cmp, 1, -1, p2);
+
+ add = nod(OADD, base, offs);
+ typecheck(&add, Erv);
+ cgen(add, base);
+
+ patch(p2, pc);
+ }
+
// dst.array = src.array [ + lo *width ]
dst = *res;
dst.xoffset += Array_array;
dst.type = types[tptr];
-
cgen(base, &dst);
// dst.len = hi [ - lo ]
dst = *res;
dst.xoffset += Array_nel;
dst.type = types[simtype[TUINT]];
- cgen(len, &dst);
+ cgen(tmplen, &dst);
if(n->op != OSLICESTR) {
// dst.cap = cap [ - lo ]
dst = *res;
dst.xoffset += Array_cap;
dst.type = types[simtype[TUINT]];
- cgen(cap, &dst);
+ cgen(tmpcap, &dst);
}
}
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index ee879f67f..965a0550d 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -269,6 +269,7 @@ struct Node
uchar colas; // OAS resulting from :=
uchar diag; // already printed error about this
uchar noescape; // func arguments do not escape
+ uchar nosplit; // func should not execute on separate stack
uchar builtin; // built-in name, like len or close
uchar walkdef;
uchar typecheck;
@@ -282,6 +283,7 @@ struct Node
uchar addrtaken; // address taken, even if not moved to heap
uchar dupok; // duplicate definitions ok (for func)
uchar wrapper; // is method wrapper (for func)
+ uchar reslice; // this is a reslice x = x[0:y] or x = append(x, ...)
schar likely; // likeliness of if statement
uchar hasbreak; // has break statement
uchar needzero; // if it contains pointers, needs to be zeroed on function entry
@@ -380,7 +382,6 @@ enum
SymExported = 1<<2, // already written out by export
SymUniq = 1<<3,
SymSiggen = 1<<4,
- SymGcgen = 1<<5,
};
struct Sym
@@ -447,7 +448,6 @@ enum
OSUB, // x - y
OOR, // x | y
OXOR, // x ^ y
- OADDPTR, // ptr + uintptr, inserted by compiler only, used to avoid unsafe type changes during codegen
OADDSTR, // s + "foo"
OADDR, // &x
OANDAND, // b0 && b1
@@ -573,7 +573,6 @@ enum
OTINTER, // interface{}
OTFUNC, // func()
OTARRAY, // []int, [8]int, [N]int or [...]int
- OTPAREN, // (T)
// misc
ODDD, // func f(args ...int) or f(l...) or var a = [...]int{0, 1, 2}.
@@ -975,11 +974,13 @@ EXTERN int funcdepth;
EXTERN int typecheckok;
EXTERN int compiling_runtime;
EXTERN int compiling_wrappers;
+EXTERN int use_writebarrier;
EXTERN int pure_go;
EXTERN char* flag_installsuffix;
EXTERN int flag_race;
EXTERN int flag_largemodel;
EXTERN int noescape;
+EXTERN int nosplit;
EXTERN int debuglive;
EXTERN Link* ctxt;
@@ -1169,6 +1170,7 @@ void cgen_callmeth(Node *n, int proc);
void cgen_eface(Node* n, Node* res);
void cgen_slice(Node* n, Node* res);
void clearlabels(void);
+void clearslim(Node*);
void checklabels(void);
int dotoffset(Node *n, int64 *oary, Node **nn);
void gen(Node *n);
@@ -1284,6 +1286,7 @@ LSym* linksym(Sym*);
* order.c
*/
void order(Node *fn);
+void orderstmtinplace(Node **stmt);
/*
* range.c
@@ -1302,7 +1305,6 @@ Sym* typenamesym(Type *t);
Sym* tracksym(Type *t);
Sym* typesymprefix(char *prefix, Type *t);
int haspointers(Type *t);
-void usefield(Node*);
Type* hiter(Type* t);
/*
@@ -1364,6 +1366,7 @@ int is64(Type *t);
int isbadimport(Strlit *s);
int isblank(Node *n);
int isblanksym(Sym *s);
+int isdirectiface(Type*);
int isfixedarray(Type *t);
int isideal(Type *t);
int isinter(Type *t);
@@ -1372,6 +1375,7 @@ int isnilinter(Type *t);
int isptrto(Type *t, int et);
int isslice(Type *t);
int istype(Type *t, int et);
+int iszero(Node *n);
void linehist(char *file, int32 off, int relative);
NodeList* list(NodeList *l, Node *n);
NodeList* list1(Node *n);
@@ -1464,7 +1468,9 @@ void walkstmt(Node **np);
void walkstmtlist(NodeList *l);
Node* conv(Node*, Type*);
int candiscard(Node*);
+int needwritebarrier(Node*, Node*);
Node* outervalue(Node*);
+void usefield(Node*);
/*
* arch-specific ggen.c/gsubr.c/gobj.c/pgen.c/plive.c
@@ -1505,7 +1511,7 @@ void gdata(Node*, Node*, int);
void gdatacomplex(Node*, Mpcplx*);
void gdatastring(Node*, Strlit*);
void ggloblnod(Node *nam);
-void ggloblsym(Sym *s, int32 width, int dupok, int rodata);
+void ggloblsym(Sym *s, int32 width, int8 flags);
void gvardef(Node*);
void gvarkill(Node*);
Prog* gjmp(Prog*);
@@ -1514,6 +1520,7 @@ void movelarge(NodeList*);
int isfat(Type*);
void linkarchinit(void);
void liveness(Node*, Prog*, Sym*, Sym*);
+void twobitwalktype1(Type*, vlong*, Bvec*);
void markautoused(Prog*);
Plist* newplist(void);
Node* nodarg(Type*, int);
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y
index 2f354f723..68fccc1ad 100644
--- a/src/cmd/gc/go.y
+++ b/src/cmd/gc/go.y
@@ -460,11 +460,13 @@ simple_stmt:
| expr LINC
{
$$ = nod(OASOP, $1, nodintconst(1));
+ $$->implicit = 1;
$$->etype = OADD;
}
| expr LDEC
{
$$ = nod(OASOP, $1, nodintconst(1));
+ $$->implicit = 1;
$$->etype = OSUB;
}
@@ -613,6 +615,11 @@ range_stmt:
$$->colas = 1;
colasdefn($1, $$);
}
+| LRANGE expr
+ {
+ $$ = nod(ORANGE, N, $2);
+ $$->etype = 0; // := flag
+ }
for_header:
osimple_stmt ';' osimple_stmt ';' osimple_stmt
@@ -1180,7 +1187,7 @@ ntype:
| dotname
| '(' ntype ')'
{
- $$ = nod(OTPAREN, $2, N);
+ $$ = $2;
}
non_expr_type:
@@ -1199,7 +1206,7 @@ non_recvchantype:
| dotname
| '(' ntype ')'
{
- $$ = nod(OTPAREN, $2, N);
+ $$ = $2;
}
convtype:
@@ -1311,6 +1318,7 @@ xfndcl:
$$->nbody = $3;
$$->endlineno = lineno;
$$->noescape = noescape;
+ $$->nosplit = nosplit;
funcbody($$);
}
@@ -1365,8 +1373,6 @@ fndcl:
yyerror("bad receiver in method");
break;
}
- if(rcvr->right->op == OTPAREN || (rcvr->right->op == OIND && rcvr->right->left->op == OTPAREN))
- yyerror("cannot parenthesize receiver type");
t = nod(OTFUNC, rcvr, N);
t->list = $6;
@@ -1495,6 +1501,7 @@ xdcl_list:
testdclstack();
nointerface = 0;
noescape = 0;
+ nosplit = 0;
}
vardcl_list:
diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c
index a50101c42..523ba37aa 100644
--- a/src/cmd/gc/lex.c
+++ b/src/cmd/gc/lex.c
@@ -45,7 +45,7 @@ static struct {
};
// Debug arguments.
-// These can be specified with the -d flag, as in "-d checknil"
+// These can be specified with the -d flag, as in "-d nil"
// to set the debug_checknil variable. In general the list passed
// to -d can be comma-separated.
static struct {
@@ -139,6 +139,8 @@ yy_isalnum(int c)
#define isalnum use_yy_isalnum_instead_of_isalnum
#define DBG if(!debug['x']){}else print
+/*c2go void DBG(char*, ...); */
+
enum
{
EOF = -1,
@@ -310,6 +312,8 @@ main(int argc, char *argv[])
flagcount("u", "reject unsafe code", &safemode);
flagcount("v", "increase debug verbosity", &debug['v']);
flagcount("w", "debug type checking", &debug['w']);
+ use_writebarrier = 1;
+ flagcount("wb", "enable write barrier", &use_writebarrier);
flagcount("x", "debug lexer", &debug['x']);
flagcount("y", "debug declarations in canned imports (with -d)", &debug['y']);
if(thechar == '6')
@@ -317,6 +321,7 @@ main(int argc, char *argv[])
flagparse(&argc, &argv, usage);
ctxt->debugasm = debug['S'];
+ ctxt->debugvlog = debug['v'];
if(argc < 1)
usage();
@@ -339,8 +344,8 @@ main(int argc, char *argv[])
break;
}
}
- if(j == nelem(debugtab))
- fatal("unknown debug information -d '%s'\n", f[i]);
+ if(debugtab[j].name == nil)
+ sysfatal("unknown debug information -d '%s'\n", f[i]);
}
}
@@ -476,8 +481,12 @@ main(int argc, char *argv[])
}
// Phase 5: Escape analysis.
- if(!debug['N'])
- escapes(xtop);
+ // Required for moving heap allocations onto stack,
+ // which in turn is required by the closure implementation,
+ // which stores the addresses of stack variables into the closure.
+ // If the closure does not escape, it needs to be on the stack
+ // or else the stack copier will not update it.
+ escapes(xtop);
// Escape analysis moved escaped values off stack.
// Move large values off stack too.
@@ -516,24 +525,18 @@ saveerrors(void)
nerrors = 0;
}
-/*
- * macro to portably read/write archive header.
- * 'cmd' is read/write/Bread/Bwrite, etc.
- */
-#define HEADER_IO(cmd, f, h) cmd(f, h.name, sizeof(h.name)) != sizeof(h.name)\
- || cmd(f, h.date, sizeof(h.date)) != sizeof(h.date)\
- || cmd(f, h.uid, sizeof(h.uid)) != sizeof(h.uid)\
- || cmd(f, h.gid, sizeof(h.gid)) != sizeof(h.gid)\
- || cmd(f, h.mode, sizeof(h.mode)) != sizeof(h.mode)\
- || cmd(f, h.size, sizeof(h.size)) != sizeof(h.size)\
- || cmd(f, h.fmag, sizeof(h.fmag)) != sizeof(h.fmag)
-
static int
arsize(Biobuf *b, char *name)
{
struct ar_hdr a;
- if (HEADER_IO(Bread, b, a))
+ if(Bread(b, a.name, sizeof(a.name)) != sizeof(a.name) ||
+ Bread(b, a.date, sizeof(a.date)) != sizeof(a.date) ||
+ Bread(b, a.uid, sizeof(a.uid)) != sizeof(a.uid) ||
+ Bread(b, a.gid, sizeof(a.gid)) != sizeof(a.gid) ||
+ Bread(b, a.mode, sizeof(a.mode)) != sizeof(a.mode) ||
+ Bread(b, a.size, sizeof(a.size)) != sizeof(a.size) ||
+ Bread(b, a.fmag, sizeof(a.fmag)) != sizeof(a.fmag))
return -1;
if(strncmp(a.name, name, strlen(name)) != 0)
@@ -1592,6 +1595,10 @@ go:
noescape = 1;
goto out;
}
+ if(strcmp(lexbuf, "go:nosplit") == 0) {
+ nosplit = 1;
+ goto out;
+ }
out:
return c;
@@ -1854,74 +1861,74 @@ static struct
/* name lexical etype op
*/
/* basic types */
- "int8", LNAME, TINT8, OXXX,
- "int16", LNAME, TINT16, OXXX,
- "int32", LNAME, TINT32, OXXX,
- "int64", LNAME, TINT64, OXXX,
-
- "uint8", LNAME, TUINT8, OXXX,
- "uint16", LNAME, TUINT16, OXXX,
- "uint32", LNAME, TUINT32, OXXX,
- "uint64", LNAME, TUINT64, OXXX,
-
- "float32", LNAME, TFLOAT32, OXXX,
- "float64", LNAME, TFLOAT64, OXXX,
-
- "complex64", LNAME, TCOMPLEX64, OXXX,
- "complex128", LNAME, TCOMPLEX128, OXXX,
-
- "bool", LNAME, TBOOL, OXXX,
- "string", LNAME, TSTRING, OXXX,
-
- "any", LNAME, TANY, OXXX,
-
- "break", LBREAK, Txxx, OXXX,
- "case", LCASE, Txxx, OXXX,
- "chan", LCHAN, Txxx, OXXX,
- "const", LCONST, Txxx, OXXX,
- "continue", LCONTINUE, Txxx, OXXX,
- "default", LDEFAULT, Txxx, OXXX,
- "else", LELSE, Txxx, OXXX,
- "defer", LDEFER, Txxx, OXXX,
- "fallthrough", LFALL, Txxx, OXXX,
- "for", LFOR, Txxx, OXXX,
- "func", LFUNC, Txxx, OXXX,
- "go", LGO, Txxx, OXXX,
- "goto", LGOTO, Txxx, OXXX,
- "if", LIF, Txxx, OXXX,
- "import", LIMPORT, Txxx, OXXX,
- "interface", LINTERFACE, Txxx, OXXX,
- "map", LMAP, Txxx, OXXX,
- "package", LPACKAGE, Txxx, OXXX,
- "range", LRANGE, Txxx, OXXX,
- "return", LRETURN, Txxx, OXXX,
- "select", LSELECT, Txxx, OXXX,
- "struct", LSTRUCT, Txxx, OXXX,
- "switch", LSWITCH, Txxx, OXXX,
- "type", LTYPE, Txxx, OXXX,
- "var", LVAR, Txxx, OXXX,
-
- "append", LNAME, Txxx, OAPPEND,
- "cap", LNAME, Txxx, OCAP,
- "close", LNAME, Txxx, OCLOSE,
- "complex", LNAME, Txxx, OCOMPLEX,
- "copy", LNAME, Txxx, OCOPY,
- "delete", LNAME, Txxx, ODELETE,
- "imag", LNAME, Txxx, OIMAG,
- "len", LNAME, Txxx, OLEN,
- "make", LNAME, Txxx, OMAKE,
- "new", LNAME, Txxx, ONEW,
- "panic", LNAME, Txxx, OPANIC,
- "print", LNAME, Txxx, OPRINT,
- "println", LNAME, Txxx, OPRINTN,
- "real", LNAME, Txxx, OREAL,
- "recover", LNAME, Txxx, ORECOVER,
-
- "notwithstanding", LIGNORE, Txxx, OXXX,
- "thetruthofthematter", LIGNORE, Txxx, OXXX,
- "despiteallobjections", LIGNORE, Txxx, OXXX,
- "whereas", LIGNORE, Txxx, OXXX,
- "insofaras", LIGNORE, Txxx, OXXX,
+ {"int8", LNAME, TINT8, OXXX},
+ {"int16", LNAME, TINT16, OXXX},
+ {"int32", LNAME, TINT32, OXXX},
+ {"int64", LNAME, TINT64, OXXX},
+
+ {"uint8", LNAME, TUINT8, OXXX},
+ {"uint16", LNAME, TUINT16, OXXX},
+ {"uint32", LNAME, TUINT32, OXXX},
+ {"uint64", LNAME, TUINT64, OXXX},
+
+ {"float32", LNAME, TFLOAT32, OXXX},
+ {"float64", LNAME, TFLOAT64, OXXX},
+
+ {"complex64", LNAME, TCOMPLEX64, OXXX},
+ {"complex128", LNAME, TCOMPLEX128, OXXX},
+
+ {"bool", LNAME, TBOOL, OXXX},
+ {"string", LNAME, TSTRING, OXXX},
+
+ {"any", LNAME, TANY, OXXX},
+
+ {"break", LBREAK, Txxx, OXXX},
+ {"case", LCASE, Txxx, OXXX},
+ {"chan", LCHAN, Txxx, OXXX},
+ {"const", LCONST, Txxx, OXXX},
+ {"continue", LCONTINUE, Txxx, OXXX},
+ {"default", LDEFAULT, Txxx, OXXX},
+ {"else", LELSE, Txxx, OXXX},
+ {"defer", LDEFER, Txxx, OXXX},
+ {"fallthrough", LFALL, Txxx, OXXX},
+ {"for", LFOR, Txxx, OXXX},
+ {"func", LFUNC, Txxx, OXXX},
+ {"go", LGO, Txxx, OXXX},
+ {"goto", LGOTO, Txxx, OXXX},
+ {"if", LIF, Txxx, OXXX},
+ {"import", LIMPORT, Txxx, OXXX},
+ {"interface", LINTERFACE, Txxx, OXXX},
+ {"map", LMAP, Txxx, OXXX},
+ {"package", LPACKAGE, Txxx, OXXX},
+ {"range", LRANGE, Txxx, OXXX},
+ {"return", LRETURN, Txxx, OXXX},
+ {"select", LSELECT, Txxx, OXXX},
+ {"struct", LSTRUCT, Txxx, OXXX},
+ {"switch", LSWITCH, Txxx, OXXX},
+ {"type", LTYPE, Txxx, OXXX},
+ {"var", LVAR, Txxx, OXXX},
+
+ {"append", LNAME, Txxx, OAPPEND},
+ {"cap", LNAME, Txxx, OCAP},
+ {"close", LNAME, Txxx, OCLOSE},
+ {"complex", LNAME, Txxx, OCOMPLEX},
+ {"copy", LNAME, Txxx, OCOPY},
+ {"delete", LNAME, Txxx, ODELETE},
+ {"imag", LNAME, Txxx, OIMAG},
+ {"len", LNAME, Txxx, OLEN},
+ {"make", LNAME, Txxx, OMAKE},
+ {"new", LNAME, Txxx, ONEW},
+ {"panic", LNAME, Txxx, OPANIC},
+ {"print", LNAME, Txxx, OPRINT},
+ {"println", LNAME, Txxx, OPRINTN},
+ {"real", LNAME, Txxx, OREAL},
+ {"recover", LNAME, Txxx, ORECOVER},
+
+ {"notwithstanding", LIGNORE, Txxx, OXXX},
+ {"thetruthofthematter", LIGNORE, Txxx, OXXX},
+ {"despiteallobjections", LIGNORE, Txxx, OXXX},
+ {"whereas", LIGNORE, Txxx, OXXX},
+ {"insofaras", LIGNORE, Txxx, OXXX},
};
static void
@@ -2171,50 +2178,50 @@ struct
char* name;
} lexn[] =
{
- LANDAND, "ANDAND",
- LANDNOT, "ANDNOT",
- LASOP, "ASOP",
- LBREAK, "BREAK",
- LCASE, "CASE",
- LCHAN, "CHAN",
- LCOLAS, "COLAS",
- LCOMM, "<-",
- LCONST, "CONST",
- LCONTINUE, "CONTINUE",
- LDDD, "...",
- LDEC, "DEC",
- LDEFAULT, "DEFAULT",
- LDEFER, "DEFER",
- LELSE, "ELSE",
- LEQ, "EQ",
- LFALL, "FALL",
- LFOR, "FOR",
- LFUNC, "FUNC",
- LGE, "GE",
- LGO, "GO",
- LGOTO, "GOTO",
- LGT, "GT",
- LIF, "IF",
- LIMPORT, "IMPORT",
- LINC, "INC",
- LINTERFACE, "INTERFACE",
- LLE, "LE",
- LLITERAL, "LITERAL",
- LLSH, "LSH",
- LLT, "LT",
- LMAP, "MAP",
- LNAME, "NAME",
- LNE, "NE",
- LOROR, "OROR",
- LPACKAGE, "PACKAGE",
- LRANGE, "RANGE",
- LRETURN, "RETURN",
- LRSH, "RSH",
- LSELECT, "SELECT",
- LSTRUCT, "STRUCT",
- LSWITCH, "SWITCH",
- LTYPE, "TYPE",
- LVAR, "VAR",
+ {LANDAND, "ANDAND"},
+ {LANDNOT, "ANDNOT"},
+ {LASOP, "ASOP"},
+ {LBREAK, "BREAK"},
+ {LCASE, "CASE"},
+ {LCHAN, "CHAN"},
+ {LCOLAS, "COLAS"},
+ {LCOMM, "<-"},
+ {LCONST, "CONST"},
+ {LCONTINUE, "CONTINUE"},
+ {LDDD, "..."},
+ {LDEC, "DEC"},
+ {LDEFAULT, "DEFAULT"},
+ {LDEFER, "DEFER"},
+ {LELSE, "ELSE"},
+ {LEQ, "EQ"},
+ {LFALL, "FALL"},
+ {LFOR, "FOR"},
+ {LFUNC, "FUNC"},
+ {LGE, "GE"},
+ {LGO, "GO"},
+ {LGOTO, "GOTO"},
+ {LGT, "GT"},
+ {LIF, "IF"},
+ {LIMPORT, "IMPORT"},
+ {LINC, "INC"},
+ {LINTERFACE, "INTERFACE"},
+ {LLE, "LE"},
+ {LLITERAL, "LITERAL"},
+ {LLSH, "LSH"},
+ {LLT, "LT"},
+ {LMAP, "MAP"},
+ {LNAME, "NAME"},
+ {LNE, "NE"},
+ {LOROR, "OROR"},
+ {LPACKAGE, "PACKAGE"},
+ {LRANGE, "RANGE"},
+ {LRETURN, "RETURN"},
+ {LRSH, "RSH"},
+ {LSELECT, "SELECT"},
+ {LSTRUCT, "STRUCT"},
+ {LSWITCH, "SWITCH"},
+ {LTYPE, "TYPE"},
+ {LVAR, "VAR"},
};
char*
@@ -2236,56 +2243,56 @@ struct
char *want;
} yytfix[] =
{
- "$end", "EOF",
- "LLITERAL", "literal",
- "LASOP", "op=",
- "LBREAK", "break",
- "LCASE", "case",
- "LCHAN", "chan",
- "LCOLAS", ":=",
- "LCONST", "const",
- "LCONTINUE", "continue",
- "LDDD", "...",
- "LDEFAULT", "default",
- "LDEFER", "defer",
- "LELSE", "else",
- "LFALL", "fallthrough",
- "LFOR", "for",
- "LFUNC", "func",
- "LGO", "go",
- "LGOTO", "goto",
- "LIF", "if",
- "LIMPORT", "import",
- "LINTERFACE", "interface",
- "LMAP", "map",
- "LNAME", "name",
- "LPACKAGE", "package",
- "LRANGE", "range",
- "LRETURN", "return",
- "LSELECT", "select",
- "LSTRUCT", "struct",
- "LSWITCH", "switch",
- "LTYPE", "type",
- "LVAR", "var",
- "LANDAND", "&&",
- "LANDNOT", "&^",
- "LBODY", "{",
- "LCOMM", "<-",
- "LDEC", "--",
- "LINC", "++",
- "LEQ", "==",
- "LGE", ">=",
- "LGT", ">",
- "LLE", "<=",
- "LLT", "<",
- "LLSH", "<<",
- "LRSH", ">>",
- "LOROR", "||",
- "LNE", "!=",
+ {"$end", "EOF"},
+ {"LLITERAL", "literal"},
+ {"LASOP", "op="},
+ {"LBREAK", "break"},
+ {"LCASE", "case"},
+ {"LCHAN", "chan"},
+ {"LCOLAS", ":="},
+ {"LCONST", "const"},
+ {"LCONTINUE", "continue"},
+ {"LDDD", "..."},
+ {"LDEFAULT", "default"},
+ {"LDEFER", "defer"},
+ {"LELSE", "else"},
+ {"LFALL", "fallthrough"},
+ {"LFOR", "for"},
+ {"LFUNC", "func"},
+ {"LGO", "go"},
+ {"LGOTO", "goto"},
+ {"LIF", "if"},
+ {"LIMPORT", "import"},
+ {"LINTERFACE", "interface"},
+ {"LMAP", "map"},
+ {"LNAME", "name"},
+ {"LPACKAGE", "package"},
+ {"LRANGE", "range"},
+ {"LRETURN", "return"},
+ {"LSELECT", "select"},
+ {"LSTRUCT", "struct"},
+ {"LSWITCH", "switch"},
+ {"LTYPE", "type"},
+ {"LVAR", "var"},
+ {"LANDAND", "&&"},
+ {"LANDNOT", "&^"},
+ {"LBODY", "{"},
+ {"LCOMM", "<-"},
+ {"LDEC", "--"},
+ {"LINC", "++"},
+ {"LEQ", "=="},
+ {"LGE", ">="},
+ {"LGT", ">"},
+ {"LLE", "<="},
+ {"LLT", "<"},
+ {"LLSH", "<<"},
+ {"LRSH", ">>"},
+ {"LOROR", "||"},
+ {"LNE", "!="},
// spell out to avoid confusion with punctuation in error messages
- "';'", "semicolon or newline",
- "','", "comma",
+ {"';'", "semicolon or newline"},
+ {"','", "comma"},
};
static void
diff --git a/src/cmd/gc/md5.c b/src/cmd/gc/md5.c
index 0051ac964..46cb6b712 100644
--- a/src/cmd/gc/md5.c
+++ b/src/cmd/gc/md5.c
@@ -3,7 +3,7 @@
// license that can be found in the LICENSE file.
// 64-bit MD5 (does full MD5 but returns 64 bits only).
-// Translation of ../../pkg/crypto/md5/md5*.go.
+// Translation of ../../crypto/md5/md5*.go.
#include <u.h>
#include <libc.h>
@@ -20,7 +20,15 @@ enum {
#define _Init1 0xEFCDAB89
#define _Init2 0x98BADCFE
#define _Init3 0x10325476
-
+/*c2go
+enum {
+ _Init0 = 0x67452301,
+ _Init1 = 0xEFCDAB89,
+ _Init2 = 0x98BADCFE,
+ _Init3 = 0x10325476
+};
+*/
+
void
md5reset(MD5 *d)
{
diff --git a/src/cmd/gc/mparith1.c b/src/cmd/gc/mparith1.c
index 1519caec7..d33a81e09 100644
--- a/src/cmd/gc/mparith1.c
+++ b/src/cmd/gc/mparith1.c
@@ -591,7 +591,7 @@ Fconv(Fmt *fp)
d = mpgetflt(fvp);
if(d >= 0 && (fp->flags & FmtSign))
fmtprint(fp, "+");
- return fmtprint(fp, "%g", d, exp, fvp);
+ return fmtprint(fp, "%g", d);
}
// very out of range. compute decimal approximation by hand.
diff --git a/src/cmd/gc/mparith2.c b/src/cmd/gc/mparith2.c
index 5cf98c62c..fd9f591ce 100644
--- a/src/cmd/gc/mparith2.c
+++ b/src/cmd/gc/mparith2.c
@@ -656,7 +656,7 @@ mpdivmodfixfix(Mpint *q, Mpint *r, Mpint *n, Mpint *d)
}
static int
-iszero(Mpint *a)
+mpiszero(Mpint *a)
{
long *a1;
int i;
@@ -687,7 +687,7 @@ mpdivfract(Mpint *a, Mpint *b)
for(j=0; j<Mpscale; j++) {
x <<= 1;
if(mpcmp(&d, &n) <= 0) {
- if(!iszero(&d))
+ if(!mpiszero(&d))
x |= 1;
mpsubfixfix(&n, &d);
}
diff --git a/src/cmd/gc/mparith3.c b/src/cmd/gc/mparith3.c
index 95618f1c6..6afd75c02 100644
--- a/src/cmd/gc/mparith3.c
+++ b/src/cmd/gc/mparith3.c
@@ -251,8 +251,8 @@ mpgetfltN(Mpflt *a, int prec, int bias)
s = minexp - e;
if(s > prec+1)
s = prec+1;
- if((v & ((1<<s)-1)) != 0)
- v |= 1<<s;
+ if((v & ((1ULL<<s)-1)) != 0)
+ v |= 1ULL<<s;
v >>= s;
e = minexp;
}
diff --git a/src/cmd/gc/obj.c b/src/cmd/gc/obj.c
index 4eeb03aa8..b752a13ce 100644
--- a/src/cmd/gc/obj.c
+++ b/src/cmd/gc/obj.c
@@ -5,6 +5,7 @@
#include <u.h>
#include <libc.h>
#include "go.h"
+#include "../ld/textflag.h"
/*
* architecture-independent object file output
@@ -84,7 +85,7 @@ dumpobj(void)
externdcl = tmp;
zero = pkglookup("zerovalue", runtimepkg);
- ggloblsym(zero, zerosize, 1, 1);
+ ggloblsym(zero, zerosize, DUPOK|RODATA);
dumpdata();
writeobj(ctxt, bout);
@@ -128,7 +129,7 @@ dumpglobls(void)
for(l=funcsyms; l; l=l->next) {
n = l->n;
dsymptr(n->sym, 0, n->sym->def->shortname->sym, 0);
- ggloblsym(n->sym, widthptr, 1, 1);
+ ggloblsym(n->sym, widthptr, DUPOK|RODATA);
}
// Do not reprocess funcsyms on next dumpglobls call.
@@ -249,7 +250,7 @@ stringsym(char *s, int len)
}
off = duint8(sym, off, 0); // terminating NUL for runtime
off = (off+widthptr-1)&~(widthptr-1); // round to pointer alignment
- ggloblsym(sym, off, 1, 1);
+ ggloblsym(sym, off, DUPOK|RODATA);
return sym;
}
@@ -272,7 +273,7 @@ slicebytes(Node *nam, char *s, int len)
m = len-n;
off = dsname(sym, off, s+n, m);
}
- ggloblsym(sym, off, 0, 0);
+ ggloblsym(sym, off, NOPTR);
if(nam->op != ONAME)
fatal("slicebytes %N", nam);
diff --git a/src/cmd/gc/order.c b/src/cmd/gc/order.c
index 30dbc7dac..76820fde7 100644
--- a/src/cmd/gc/order.c
+++ b/src/cmd/gc/order.c
@@ -317,7 +317,7 @@ orderexprinplace(Node **np, Order *outer)
// Orderstmtinplace orders the side effects of the single statement *np
// and replaces it with the resulting statement list.
-static void
+void
orderstmtinplace(Node **np)
{
Node *n;
@@ -438,6 +438,9 @@ ordercall(Node *n, Order *order)
// cases they are also typically registerizable, so not much harm done.
// And this only applies to the multiple-assignment form.
// We could do a more precise analysis if needed, like in walk.c.
+//
+// Ordermapassign also inserts these temporaries if needed for
+// calling writebarrierfat with a pointer to n->right.
static void
ordermapassign(Node *n, Order *order)
{
@@ -451,7 +454,8 @@ ordermapassign(Node *n, Order *order)
case OAS:
order->out = list(order->out, n);
- if(n->left->op == OINDEXMAP && !isaddrokay(n->right)) {
+ // We call writebarrierfat only for values > 4 pointers long. See walk.c.
+ if((n->left->op == OINDEXMAP || (needwritebarrier(n->left, n->right) && n->left->type->width > 4*widthptr)) && !isaddrokay(n->right)) {
m = n->left;
n->left = ordertemp(m->type, order, 0);
a = nod(OAS, m, n->left);
@@ -593,7 +597,10 @@ orderstmt(Node *n, Order *order)
orderexpr(&n->rlist->n->left, order); // arg to recv
ch = n->rlist->n->left->type;
tmp1 = ordertemp(ch->type, order, haspointers(ch->type));
- tmp2 = ordertemp(types[TBOOL], order, 0);
+ if(!isblank(n->list->next->n))
+ tmp2 = ordertemp(n->list->next->n->type, order, 0);
+ else
+ tmp2 = ordertemp(types[TBOOL], order, 0);
order->out = list(order->out, n);
r = nod(OAS, n->list->n, tmp1);
typecheck(&r, Etop);
@@ -768,6 +775,12 @@ orderstmt(Node *n, Order *order)
// Special: clean case temporaries in each block entry.
// Select must enter one of its blocks, so there is no
// need for a cleaning at the end.
+ // Doubly special: evaluation order for select is stricter
+ // than ordinary expressions. Even something like p.c
+ // has to be hoisted into a temporary, so that it cannot be
+ // reordered after the channel evaluation for a different
+ // case (if p were nil, then the timing of the fault would
+ // give this away).
t = marktemp(order);
for(l=n->list; l; l=l->next) {
if(l->n->op != OXCASE)
@@ -810,6 +823,8 @@ orderstmt(Node *n, Order *order)
// r->left == N means 'case <-c'.
// c is always evaluated; x and ok are only evaluated when assigned.
orderexpr(&r->right->left, order);
+ if(r->right->left->op != ONAME)
+ r->right->left = ordercopyexpr(r->right->left, r->right->left->type, order, 0);
// Introduce temporary for receive and move actual copy into case body.
// avoids problems with target being addressed, as usual.
@@ -1017,11 +1032,21 @@ orderexpr(Node **np, Order *order)
orderexprinplace(&n->right, order);
break;
+ case OAPPEND:
case OCALLFUNC:
- case OCALLMETH:
case OCALLINTER:
- case OAPPEND:
+ case OCALLMETH:
+ case OCAP:
case OCOMPLEX:
+ case OCOPY:
+ case OIMAG:
+ case OLEN:
+ case OMAKECHAN:
+ case OMAKEMAP:
+ case OMAKESLICE:
+ case ONEW:
+ case OREAL:
+ case ORECOVER:
ordercall(n, order);
n = ordercopyexpr(n, n->type, order, 0);
break;
@@ -1055,6 +1080,19 @@ orderexpr(Node **np, Order *order)
orderexpr(&n->left, order);
n = ordercopyexpr(n, n->type, order, 1);
break;
+
+ case OEQ:
+ case ONE:
+ orderexpr(&n->left, order);
+ orderexpr(&n->right, order);
+ t = n->left->type;
+ if(t->etype == TSTRUCT || isfixedarray(t)) {
+ // for complex comparisons, we need both args to be
+ // addressable so we can pass them to the runtime.
+ orderaddrtemp(&n->left, order);
+ orderaddrtemp(&n->right, order);
+ }
+ break;
}
lineno = lno;
diff --git a/src/cmd/gc/pgen.c b/src/cmd/gc/pgen.c
index 40620c3da..39028e3f8 100644
--- a/src/cmd/gc/pgen.c
+++ b/src/cmd/gc/pgen.c
@@ -11,9 +11,10 @@
#include "md5.h"
#include "gg.h"
#include "opt.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
static void allocauto(Prog* p);
+static void emitptrargsmap(void);
static Sym*
makefuncdatasym(char *namefmt, int64 funcdatakind)
@@ -173,9 +174,17 @@ compile(Node *fn)
lno = setlineno(fn);
+ curfn = fn;
+ dowidth(curfn->type);
+
if(fn->nbody == nil) {
- if(pure_go || strncmp(fn->nname->sym->name, "init·", 6) == 0)
+ if(pure_go || strncmp(fn->nname->sym->name, "init·", 6) == 0) {
yyerror("missing function body", fn);
+ goto ret;
+ }
+ if(debug['A'])
+ goto ret;
+ emitptrargsmap();
goto ret;
}
@@ -184,9 +193,6 @@ compile(Node *fn)
// set up domain for labels
clearlabels();
- curfn = fn;
- dowidth(curfn->type);
-
if(curfn->type->outnamed) {
// add clearing of the output parameters
t = structfirst(&save, getoutarg(curfn->type));
@@ -229,9 +235,11 @@ compile(Node *fn)
ptxt->TEXTFLAG |= WRAPPER;
if(fn->needctxt)
ptxt->TEXTFLAG |= NEEDCTXT;
+ if(fn->nosplit)
+ ptxt->TEXTFLAG |= NOSPLIT;
// Clumsy but important.
- // See test/recover.go for test cases and src/pkg/reflect/value.go
+ // See test/recover.go for test cases and src/reflect/value.go
// for the actual functions being considered.
if(myimportpath != nil && strcmp(myimportpath, "reflect") == 0) {
if(strcmp(curfn->nname->sym->name, "callReflect") == 0 || strcmp(curfn->nname->sym->name, "callMethod") == 0)
@@ -327,6 +335,43 @@ ret:
lineno = lno;
}
+static void
+emitptrargsmap(void)
+{
+ int nptr, nbitmap, j, off;
+ vlong xoffset;
+ Bvec *bv;
+ Sym *sym;
+
+ sym = lookup(smprint("%s.args_stackmap", curfn->nname->sym->name));
+
+ nptr = curfn->type->argwid / widthptr;
+ bv = bvalloc(nptr*2);
+ nbitmap = 1;
+ if(curfn->type->outtuple > 0)
+ nbitmap = 2;
+ off = duint32(sym, 0, nbitmap);
+ off = duint32(sym, off, bv->n);
+ if(curfn->type->thistuple > 0) {
+ xoffset = 0;
+ twobitwalktype1(getthisx(curfn->type), &xoffset, bv);
+ }
+ if(curfn->type->intuple > 0) {
+ xoffset = 0;
+ twobitwalktype1(getinargx(curfn->type), &xoffset, bv);
+ }
+ for(j = 0; j < bv->n; j += 32)
+ off = duint32(sym, off, bv->b[j/32]);
+ if(curfn->type->outtuple > 0) {
+ xoffset = 0;
+ twobitwalktype1(getoutargx(curfn->type), &xoffset, bv);
+ for(j = 0; j < bv->n; j += 32)
+ off = duint32(sym, off, bv->b[j/32]);
+ }
+ ggloblsym(sym, off, RODATA);
+ free(bv);
+}
+
// Sort the list of stack variables. Autos after anything else,
// within autos, unused after used, within used, things with
// pointers first, zeroed things first, and then decreasing size.
diff --git a/src/cmd/gc/plive.c b/src/cmd/gc/plive.c
index 7a40ab559..0feb2c710 100644
--- a/src/cmd/gc/plive.c
+++ b/src/cmd/gc/plive.c
@@ -17,9 +17,9 @@
#include <libc.h>
#include "gg.h"
#include "opt.h"
-#include "../../pkg/runtime/funcdata.h"
-
-enum { BitsPerPointer = 2 };
+#include "../ld/textflag.h"
+#include "../../runtime/funcdata.h"
+#include "../../runtime/mgc0.h"
enum {
UNVISITED = 0,
@@ -674,8 +674,8 @@ static void
progeffects(Prog *prog, Array *vars, Bvec *uevar, Bvec *varkill, Bvec *avarinit)
{
ProgInfo info;
- Adr *from;
- Adr *to;
+ Addr *from;
+ Addr *to;
Node *node;
int32 i;
int32 pos;
@@ -1063,7 +1063,7 @@ checkptxt(Node *fn, Prog *firstp)
// and then simply copied into bv at the correct offset on future calls with
// the same type t. On https://rsc.googlecode.com/hg/testdata/slow.go, twobitwalktype1
// accounts for 40% of the 6g execution time.
-static void
+void
twobitwalktype1(Type *t, vlong *xoffset, Bvec *bv)
{
vlong fieldoffset;
@@ -1113,8 +1113,7 @@ twobitwalktype1(Type *t, vlong *xoffset, Bvec *bv)
// struct { byte *str; intgo len; }
if((*xoffset & (widthptr-1)) != 0)
fatal("twobitwalktype1: invalid alignment, %T", t);
- bvset(bv, (*xoffset / widthptr) * BitsPerPointer + 0);
- bvset(bv, (*xoffset / widthptr) * BitsPerPointer + 1); // 3:0 = multiword:string
+ bvset(bv, (*xoffset / widthptr) * BitsPerPointer + 1); // 2 = live ptr in first slot
*xoffset += t->width;
break;
@@ -1145,9 +1144,7 @@ twobitwalktype1(Type *t, vlong *xoffset, Bvec *bv)
// struct { byte *array; uintgo len; uintgo cap; }
if((*xoffset & (widthptr-1)) != 0)
fatal("twobitwalktype1: invalid TARRAY alignment, %T", t);
- bvset(bv, (*xoffset / widthptr) * BitsPerPointer + 0);
- bvset(bv, (*xoffset / widthptr) * BitsPerPointer + 1);
- bvset(bv, (*xoffset / widthptr) * BitsPerPointer + 2); // 3:1 = multiword/slice
+ bvset(bv, (*xoffset / widthptr) * BitsPerPointer + 1); // 2 = live ptr in first slot
*xoffset += t->width;
} else
for(i = 0; i < t->bound; i++)
@@ -1683,6 +1680,13 @@ livenessepilogue(Liveness *lv)
// FNV-1 hash function constants.
#define H0 2166136261UL
#define Hp 16777619UL
+/*c2go
+enum
+{
+ H0 = 2166136261,
+ Hp = 16777619,
+};
+*/
static uint32
hashbitmap(uint32 h, Bvec *bv)
@@ -1932,11 +1936,15 @@ twobitwritesymbol(Array *arr, Sym *sym)
break;
for(j = 0; j < bv->n; j += 32) {
word = bv->b[j/32];
- off = duint32(sym, off, word);
+ // Runtime reads the bitmaps as byte arrays. Oblige.
+ off = duint8(sym, off, word);
+ off = duint8(sym, off, word>>8);
+ off = duint8(sym, off, word>>16);
+ off = duint8(sym, off, word>>24);
}
}
duint32(sym, 0, i); // number of bitmaps
- ggloblsym(sym, off, 0, 1);
+ ggloblsym(sym, off, RODATA);
}
static void
diff --git a/src/cmd/gc/popt.c b/src/cmd/gc/popt.c
index ea88b94db..993bb2482 100644
--- a/src/cmd/gc/popt.c
+++ b/src/cmd/gc/popt.c
@@ -49,7 +49,7 @@ noreturn(Prog *p)
symlist[0] = pkglookup("panicindex", runtimepkg);
symlist[1] = pkglookup("panicslice", runtimepkg);
symlist[2] = pkglookup("throwinit", runtimepkg);
- symlist[3] = pkglookup("panic", runtimepkg);
+ symlist[3] = pkglookup("gopanic", runtimepkg);
symlist[4] = pkglookup("panicwrap", runtimepkg);
symlist[5] = pkglookup("throwreturn", runtimepkg);
symlist[6] = pkglookup("selectgo", runtimepkg);
@@ -98,6 +98,10 @@ chasejmp(Prog *p, int *jmploop)
*/
#define alive ((void*)0)
#define dead ((void*)1)
+/*c2go
+extern void *alive;
+extern void *dead;
+*/
/* mark all code reachable from firstp as alive */
static void
diff --git a/src/cmd/gc/racewalk.c b/src/cmd/gc/racewalk.c
index 285bd78a2..c9e27fe56 100644
--- a/src/cmd/gc/racewalk.c
+++ b/src/cmd/gc/racewalk.c
@@ -208,6 +208,26 @@ racewalknode(Node **np, NodeList **init, int wr, int skip)
goto ret;
case OCALLFUNC:
+ // Instrument dst argument of runtime.writebarrier* calls
+ // as we do not instrument runtime code.
+ if(n->left->sym != S && n->left->sym->pkg == runtimepkg && strncmp(n->left->sym->name, "writebarrier", 12) == 0) {
+ // Find the dst argument.
+ // The list can be reordered, so it's not necessary just the first or the second element.
+ for(l = n->list; l; l = l->next) {
+ if(strcmp(n->left->sym->name, "writebarrierfat") == 0) {
+ if(l->n->left->xoffset == widthptr)
+ break;
+ } else {
+ if(l->n->left->xoffset == 0)
+ break;
+ }
+ }
+ if(l == nil)
+ fatal("racewalk: writebarrier no arg");
+ if(l->n->right->op != OADDR)
+ fatal("racewalk: writebarrier bad arg");
+ callinstr(&l->n->right->left, init, 1, 0);
+ }
racewalknode(&n->left, init, 0, 0);
goto ret;
@@ -419,8 +439,10 @@ racewalknode(Node **np, NodeList **init, int wr, int skip)
ret:
if(n->op != OBLOCK) // OBLOCK is handled above in a special way.
racewalklist(n->list, init);
- racewalknode(&n->ntest, &n->ntest->ninit, 0, 0);
- racewalknode(&n->nincr, &n->nincr->ninit, 0, 0);
+ if(n->ntest != N)
+ racewalknode(&n->ntest, &n->ntest->ninit, 0, 0);
+ if(n->nincr != N)
+ racewalknode(&n->nincr, &n->nincr->ninit, 0, 0);
racewalklist(n->nbody, nil);
racewalklist(n->nelse, nil);
racewalklist(n->rlist, nil);
diff --git a/src/cmd/gc/range.c b/src/cmd/gc/range.c
index 45aa521b3..4ed452832 100644
--- a/src/cmd/gc/range.c
+++ b/src/cmd/gc/range.c
@@ -67,9 +67,11 @@ typecheckrange(Node *n)
yyerror("too many variables in range");
}
- v1 = n->list->n;
+ v1 = N;
+ if(n->list)
+ v1 = n->list->n;
v2 = N;
- if(n->list->next)
+ if(n->list && n->list->next)
v2 = n->list->next->n;
// this is not only a optimization but also a requirement in the spec.
@@ -77,14 +79,17 @@ typecheckrange(Node *n)
// clause is equivalent to the same clause with only the first variable
// present."
if(isblank(v2)) {
- n->list = list1(v1);
+ if(v1 != N)
+ n->list = list1(v1);
v2 = N;
}
- if(v1->defn == n)
- v1->type = t1;
- else if(v1->type != T && assignop(t1, v1->type, &why) == 0)
- yyerror("cannot assign type %T to %lN in range%s", t1, v1, why);
+ if(v1) {
+ if(v1->defn == n)
+ v1->type = t1;
+ else if(v1->type != T && assignop(t1, v1->type, &why) == 0)
+ yyerror("cannot assign type %T to %lN in range%s", t1, v1, why);
+ }
if(v2) {
if(v2->defn == n)
v2->type = t2;
@@ -123,9 +128,11 @@ walkrange(Node *n)
a = n->right;
lno = setlineno(a);
- v1 = n->list->n;
+ v1 = N;
+ if(n->list)
+ v1 = n->list->n;
v2 = N;
- if(n->list->next && !isblank(n->list->next->n))
+ if(n->list && n->list->next && !isblank(n->list->next->n))
v2 = n->list->next->n;
// n->list has no meaning anymore, clear it
// to avoid erroneous processing by racewalk.
@@ -154,7 +161,9 @@ walkrange(Node *n)
n->ntest = nod(OLT, hv1, hn);
n->nincr = nod(OAS, hv1, nod(OADD, hv1, nodintconst(1)));
- if(v2 == N)
+ if(v1 == N)
+ body = nil;
+ else if(v2 == N)
body = list1(nod(OAS, v1, hv1));
else {
a = nod(OAS2, N, N);
@@ -205,16 +214,18 @@ walkrange(Node *n)
key = nod(ODOT, hit, keyname);
key = nod(OIND, key, N);
- if(v2 == N) {
- a = nod(OAS, v1, key);
+ if(v1 == N)
+ body = nil;
+ else if(v2 == N) {
+ body = list1(nod(OAS, v1, key));
} else {
val = nod(ODOT, hit, valname);
val = nod(OIND, val, N);
a = nod(OAS2, N, N);
a->list = list(list1(v1), v2);
a->rlist = list(list1(key), val);
+ body = list1(a);
}
- body = list1(a);
break;
case TCHAN:
@@ -223,6 +234,7 @@ walkrange(Node *n)
n->ntest = N;
hv1 = temp(t->type);
+ hv1->typecheck = 1;
if(haspointers(t->type))
init = list(init, nod(OAS, hv1, N));
hb = temp(types[TBOOL]);
@@ -233,7 +245,10 @@ walkrange(Node *n)
a->list = list(list1(hv1), hb);
a->rlist = list1(nod(ORECV, ha, N));
n->ntest->ninit = list1(a);
- body = list1(nod(OAS, v1, hv1));
+ if(v1 == N)
+ body = nil;
+ else
+ body = list1(nod(OAS, v1, hv1));
break;
case TSTRING:
@@ -257,7 +272,10 @@ walkrange(Node *n)
n->ntest = nod(ONE, hv1, nodintconst(0));
n->ntest->ninit = list(list1(nod(OAS, ohv1, hv1)), a);
- body = list1(nod(OAS, v1, ohv1));
+
+ body = nil;
+ if(v1 != N)
+ body = list1(nod(OAS, v1, ohv1));
if(v2 != N)
body = list(body, nod(OAS, v2, hv2));
break;
diff --git a/src/cmd/gc/reflect.c b/src/cmd/gc/reflect.c
index dbb447e4e..b2ff2fbc5 100644
--- a/src/cmd/gc/reflect.c
+++ b/src/cmd/gc/reflect.c
@@ -5,7 +5,9 @@
#include <u.h>
#include <libc.h>
#include "go.h"
-#include "../../pkg/runtime/mgc0.h"
+#include "../ld/textflag.h"
+#include "../../runtime/mgc0.h"
+#include "../../runtime/typekind.h"
/*
* runtime interface and reflection data structures
@@ -15,7 +17,9 @@ static NodeList* signatlist;
static Sym* dtypesym(Type*);
static Sym* weaktypesym(Type*);
static Sym* dalgsym(Type*);
-static Sym* dgcsym(Type*);
+static int usegcprog(Type*);
+static void gengcprog(Type*, Sym**, Sym**);
+static void gengcmask(Type*, uint8[16]);
static int
sigcmp(Sig *a, Sig *b)
@@ -105,7 +109,7 @@ lsort(Sig *l, int(*f)(Sig*, Sig*))
// the given map type. This type is not visible to users -
// we include only enough information to generate a correct GC
// program for it.
-// Make sure this stays in sync with ../../pkg/runtime/hashmap.c!
+// Make sure this stays in sync with ../../runtime/hashmap.c!
enum {
BUCKETSIZE = 8,
MAXKEYSIZE = 128,
@@ -188,7 +192,7 @@ mapbucket(Type *t)
// the given map type. This type is not visible to users -
// we include only enough information to generate a correct GC
// program for it.
-// Make sure this stays in sync with ../../pkg/runtime/hashmap.c!
+// Make sure this stays in sync with ../../runtime/hashmap.go!
static Type*
hmap(Type *t)
{
@@ -207,10 +211,6 @@ hmap(Type *t)
offset += 4; // flags
offset += 4; // hash0
offset += 1; // B
- offset += 1; // keysize
- offset += 1; // valuesize
- offset = (offset + 1) / 2 * 2;
- offset += 2; // bucketsize
offset = (offset + widthptr - 1) / widthptr * widthptr;
bucketsfield = typ(TFIELD);
@@ -261,7 +261,7 @@ hiter(Type *t)
// bptr *Bucket
// other [4]uintptr
// }
- // must match ../../pkg/runtime/hashmap.c:hash_iter.
+ // must match ../../runtime/hashmap.c:hash_iter.
field[0] = typ(TFIELD);
field[0]->type = ptrto(t->down);
field[0]->sym = mal(sizeof(Sym));
@@ -378,7 +378,7 @@ methods(Type *t)
// type stored in interface word
it = t;
- if(it->width > widthptr)
+ if(!isdirectiface(it))
it = ptrto(t);
// make list of methods for t,
@@ -524,7 +524,7 @@ dimportpath(Pkg *p)
p->pathsym = n->sym;
gdatastring(n, p->path);
- ggloblsym(n->sym, types[TSTRING]->width, 1, 1);
+ ggloblsym(n->sym, types[TSTRING]->width, DUPOK|RODATA);
}
static int
@@ -550,7 +550,7 @@ dgopkgpath(Sym *s, int ot, Pkg *pkg)
/*
* uncommonType
- * ../../pkg/runtime/type.go:/uncommonType
+ * ../../runtime/type.go:/uncommonType
*/
static int
dextratype(Sym *sym, int off, Type *t, int ptroff)
@@ -564,6 +564,7 @@ dextratype(Sym *sym, int off, Type *t, int ptroff)
return off;
// fill in *extraType pointer in header
+ off = rnd(off, widthptr);
dsymptr(sym, ptroff, sym, off);
n = 0;
@@ -593,7 +594,7 @@ dextratype(Sym *sym, int off, Type *t, int ptroff)
// methods
for(a=m; a; a=a->link) {
// method
- // ../../pkg/runtime/type.go:/method
+ // ../../runtime/type.go:/method
ot = dgostringptr(s, ot, a->name);
ot = dgopkgpath(s, ot, a->pkg);
ot = dsymptr(s, ot, dtypesym(a->mtype), 0);
@@ -611,37 +612,6 @@ dextratype(Sym *sym, int off, Type *t, int ptroff)
return ot;
}
-enum {
- KindBool = 1,
- KindInt,
- KindInt8,
- KindInt16,
- KindInt32,
- KindInt64,
- KindUint,
- KindUint8,
- KindUint16,
- KindUint32,
- KindUint64,
- KindUintptr,
- KindFloat32,
- KindFloat64,
- KindComplex64,
- KindComplex128,
- KindArray,
- KindChan,
- KindFunc,
- KindInterface,
- KindMap,
- KindPtr,
- KindSlice,
- KindString,
- KindStruct,
- KindUnsafePointer,
-
- KindNoPointers = 1<<7,
-};
-
static int
kinds[] =
{
@@ -740,28 +710,30 @@ haspointers(Type *t)
/*
* commonType
- * ../../pkg/runtime/type.go:/commonType
+ * ../../runtime/type.go:/commonType
*/
static int
dcommontype(Sym *s, int ot, Type *t)
{
- int i, alg, sizeofAlg;
- Sym *sptr, *algsym, *zero;
+ int i, alg, sizeofAlg, gcprog;
+ Sym *sptr, *algsym, *zero, *gcprog0, *gcprog1, *sbits;
+ uint8 gcmask[16];
static Sym *algarray;
+ uint64 x1, x2;
char *p;
if(ot != 0)
fatal("dcommontype %d", ot);
- sizeofAlg = 4*widthptr;
+ sizeofAlg = 2*widthptr;
if(algarray == nil)
algarray = pkglookup("algarray", runtimepkg);
+ dowidth(t);
alg = algtype(t);
algsym = S;
if(alg < 0)
algsym = dalgsym(t);
- dowidth(t);
if(t->sym != nil && !isptr[t->etype])
sptr = dtypesym(ptrto(t));
else
@@ -808,17 +780,52 @@ dcommontype(Sym *s, int ot, Type *t)
ot = duint8(s, ot, t->align); // align
ot = duint8(s, ot, t->align); // fieldAlign
+ gcprog = usegcprog(t);
i = kinds[t->etype];
if(t->etype == TARRAY && t->bound < 0)
i = KindSlice;
if(!haspointers(t))
i |= KindNoPointers;
+ if(isdirectiface(t))
+ i |= KindDirectIface;
+ if(gcprog)
+ i |= KindGCProg;
ot = duint8(s, ot, i); // kind
if(alg >= 0)
ot = dsymptr(s, ot, algarray, alg*sizeofAlg);
else
ot = dsymptr(s, ot, algsym, 0);
- ot = dsymptr(s, ot, dgcsym(t), 0); // gc
+ // gc
+ if(gcprog) {
+ gengcprog(t, &gcprog0, &gcprog1);
+ if(gcprog0 != S)
+ ot = dsymptr(s, ot, gcprog0, 0);
+ else
+ ot = duintptr(s, ot, 0);
+ ot = dsymptr(s, ot, gcprog1, 0);
+ } else {
+ gengcmask(t, gcmask);
+ x1 = 0;
+ for(i=0; i<8; i++)
+ x1 = x1<<8 | gcmask[i];
+ if(widthptr == 4) {
+ p = smprint("gcbits.%#016llux", x1);
+ } else {
+ x2 = 0;
+ for(i=0; i<8; i++)
+ x2 = x2<<8 | gcmask[i+8];
+ p = smprint("gcbits.%#016llux%016llux", x1, x2);
+ }
+ sbits = pkglookup(p, runtimepkg);
+ if((sbits->flags & SymUniq) == 0) {
+ sbits->flags |= SymUniq;
+ for(i = 0; i < 2*widthptr; i++)
+ duint8(sbits, i, gcmask[i]);
+ ggloblsym(sbits, 2*widthptr, DUPOK|RODATA);
+ }
+ ot = dsymptr(s, ot, sbits, 0);
+ ot = duintptr(s, ot, 0);
+ }
p = smprint("%-uT", t);
//print("dcommontype: %s\n", p);
ot = dgostringptr(s, ot, p); // string
@@ -975,7 +982,9 @@ dtypesym(Type *t)
tbase = t;
if(isptr[t->etype] && t->sym == S && t->type->sym != S)
tbase = t->type;
- dupok = tbase->sym == S;
+ dupok = 0;
+ if(tbase->sym == S)
+ dupok = DUPOK;
if(compiling_runtime &&
(tbase == types[tbase->etype] ||
@@ -1002,7 +1011,7 @@ ok:
case TARRAY:
if(t->bound >= 0) {
- // ../../pkg/runtime/type.go:/ArrayType
+ // ../../runtime/type.go:/ArrayType
s1 = dtypesym(t->type);
t2 = typ(TARRAY);
t2->type = t->type;
@@ -1014,7 +1023,7 @@ ok:
ot = dsymptr(s, ot, s2, 0);
ot = duintptr(s, ot, t->bound);
} else {
- // ../../pkg/runtime/type.go:/SliceType
+ // ../../runtime/type.go:/SliceType
s1 = dtypesym(t->type);
ot = dcommontype(s, ot, t);
xt = ot - 3*widthptr;
@@ -1023,7 +1032,7 @@ ok:
break;
case TCHAN:
- // ../../pkg/runtime/type.go:/ChanType
+ // ../../runtime/type.go:/ChanType
s1 = dtypesym(t->type);
ot = dcommontype(s, ot, t);
xt = ot - 3*widthptr;
@@ -1073,14 +1082,14 @@ ok:
n++;
}
- // ../../pkg/runtime/type.go:/InterfaceType
+ // ../../runtime/type.go:/InterfaceType
ot = dcommontype(s, ot, t);
xt = ot - 3*widthptr;
ot = dsymptr(s, ot, s, ot+widthptr+2*widthint);
ot = duintxx(s, ot, n, widthint);
ot = duintxx(s, ot, n, widthint);
for(a=m; a; a=a->link) {
- // ../../pkg/runtime/type.go:/imethod
+ // ../../runtime/type.go:/imethod
ot = dgostringptr(s, ot, a->name);
ot = dgopkgpath(s, ot, a->pkg);
ot = dsymptr(s, ot, dtypesym(a->type), 0);
@@ -1088,7 +1097,7 @@ ok:
break;
case TMAP:
- // ../../pkg/runtime/type.go:/MapType
+ // ../../runtime/type.go:/MapType
s1 = dtypesym(t->down);
s2 = dtypesym(t->type);
s3 = dtypesym(mapbucket(t));
@@ -1099,16 +1108,31 @@ ok:
ot = dsymptr(s, ot, s2, 0);
ot = dsymptr(s, ot, s3, 0);
ot = dsymptr(s, ot, s4, 0);
+ if(t->down->width > MAXKEYSIZE) {
+ ot = duint8(s, ot, widthptr);
+ ot = duint8(s, ot, 1); // indirect
+ } else {
+ ot = duint8(s, ot, t->down->width);
+ ot = duint8(s, ot, 0); // not indirect
+ }
+ if(t->type->width > MAXVALSIZE) {
+ ot = duint8(s, ot, widthptr);
+ ot = duint8(s, ot, 1); // indirect
+ } else {
+ ot = duint8(s, ot, t->type->width);
+ ot = duint8(s, ot, 0); // not indirect
+ }
+ ot = duint16(s, ot, mapbucket(t)->width);
break;
case TPTR32:
case TPTR64:
if(t->type->etype == TANY) {
- // ../../pkg/runtime/type.go:/UnsafePointerType
+ // ../../runtime/type.go:/UnsafePointerType
ot = dcommontype(s, ot, t);
break;
}
- // ../../pkg/runtime/type.go:/PtrType
+ // ../../runtime/type.go:/PtrType
s1 = dtypesym(t->type);
ot = dcommontype(s, ot, t);
xt = ot - 3*widthptr;
@@ -1116,7 +1140,7 @@ ok:
break;
case TSTRUCT:
- // ../../pkg/runtime/type.go:/StructType
+ // ../../runtime/type.go:/StructType
// for security, only the exported fields.
n = 0;
for(t1=t->type; t1!=T; t1=t1->down) {
@@ -1129,7 +1153,7 @@ ok:
ot = duintxx(s, ot, n, widthint);
ot = duintxx(s, ot, n, widthint);
for(t1=t->type; t1!=T; t1=t1->down) {
- // ../../pkg/runtime/type.go:/structField
+ // ../../runtime/type.go:/structField
if(t1->sym && !t1->embedded) {
ot = dgostringptr(s, ot, t1->sym->name);
if(exportname(t1->sym->name))
@@ -1150,7 +1174,7 @@ ok:
break;
}
ot = dextratype(s, ot, t, xt);
- ggloblsym(s, ot, dupok, 1);
+ ggloblsym(s, ot, dupok|RODATA);
// generate typelink.foo pointing at s = type.foo.
// The linker will leave a table of all the typelinks for
@@ -1164,7 +1188,7 @@ ok:
case TMAP:
slink = typelinksym(t);
dsymptr(slink, 0, s, 0);
- ggloblsym(slink, widthptr, dupok, 1);
+ ggloblsym(slink, widthptr, dupok|RODATA);
}
}
@@ -1236,8 +1260,7 @@ static Sym*
dalgsym(Type *t)
{
int ot;
- Sym *s, *hash, *eq;
- char buf[100];
+ Sym *s, *hash, *hashfunc, *eq, *eqfunc;
// dalgsym is only called for a type that needs an algorithm table,
// which implies that the type is comparable (or else it would use ANOEQ).
@@ -1248,55 +1271,225 @@ dalgsym(Type *t)
eq = typesymprefix(".eq", t);
geneq(eq, t);
- // ../../pkg/runtime/runtime.h:/Alg
+ // make Go funcs (closures) for calling hash and equal from Go
+ hashfunc = typesymprefix(".hashfunc", t);
+ dsymptr(hashfunc, 0, hash, 0);
+ ggloblsym(hashfunc, widthptr, DUPOK|RODATA);
+ eqfunc = typesymprefix(".eqfunc", t);
+ dsymptr(eqfunc, 0, eq, 0);
+ ggloblsym(eqfunc, widthptr, DUPOK|RODATA);
+
+ // ../../runtime/alg.go:/typeAlg
ot = 0;
- ot = dsymptr(s, ot, hash, 0);
- ot = dsymptr(s, ot, eq, 0);
- ot = dsymptr(s, ot, pkglookup("memprint", runtimepkg), 0);
- switch(t->width) {
- default:
- ot = dsymptr(s, ot, pkglookup("memcopy", runtimepkg), 0);
- break;
- case 1:
- case 2:
- case 4:
- case 8:
- case 16:
- snprint(buf, sizeof buf, "memcopy%d", (int)t->width*8);
- ot = dsymptr(s, ot, pkglookup(buf, runtimepkg), 0);
- break;
- }
+ ot = dsymptr(s, ot, hashfunc, 0);
+ ot = dsymptr(s, ot, eqfunc, 0);
- ggloblsym(s, ot, 1, 1);
+ ggloblsym(s, ot, DUPOK|RODATA);
return s;
}
static int
-gcinline(Type *t)
+usegcprog(Type *t)
{
- switch(t->etype) {
- case TARRAY:
- if(t->bound == 1)
- return 1;
- if(t->width <= 4*widthptr)
- return 1;
- break;
+ vlong size, nptr;
+
+ if(!haspointers(t))
+ return 0;
+ if(t->width == BADWIDTH)
+ dowidth(t);
+ // Calculate size of the unrolled GC mask.
+ nptr = (t->width+widthptr-1)/widthptr;
+ size = nptr;
+ if(size%2)
+ size *= 2; // repeated
+ size = size*gcBits/8; // 4 bits per word
+ // Decide whether to use unrolled GC mask or GC program.
+ // We could use a more elaborate condition, but this seems to work well in practice.
+ // For small objects GC program can't give significant reduction.
+ // While large objects usually contain arrays; and even if it don't
+ // the program uses 2-bits per word while mask uses 4-bits per word,
+ // so the program is still smaller.
+ return size > 2*widthptr;
+}
+
+// Generates sparse GC bitmask (4 bits per word).
+static void
+gengcmask(Type *t, uint8 gcmask[16])
+{
+ Bvec *vec;
+ vlong xoffset, nptr, i, j;
+ int half, mw;
+ uint8 bits, *pos;
+
+ memset(gcmask, 0, 16);
+ if(!haspointers(t))
+ return;
+
+ // Generate compact mask as stacks use.
+ xoffset = 0;
+ vec = bvalloc(2*widthptr*8);
+ twobitwalktype1(t, &xoffset, vec);
+
+ // Unfold the mask for the GC bitmap format:
+ // 4 bits per word, 2 high bits encode pointer info.
+ pos = (uint8*)gcmask;
+ nptr = (t->width+widthptr-1)/widthptr;
+ half = 0;
+ mw = 0;
+ // If number of words is odd, repeat the mask.
+ // This makes simpler handling of arrays in runtime.
+ for(j=0; j<=(nptr%2); j++) {
+ for(i=0; i<nptr; i++) {
+ bits = bvget(vec, i*BitsPerPointer) | bvget(vec, i*BitsPerPointer+1)<<1;
+ // Some fake types (e.g. Hmap) has missing fileds.
+ // twobitwalktype1 generates BitsDead for that holes,
+ // replace BitsDead with BitsScalar.
+ if(!mw && bits == BitsDead)
+ bits = BitsScalar;
+ mw = !mw && bits == BitsMultiWord;
+ bits <<= 2;
+ if(half)
+ bits <<= 4;
+ *pos |= bits;
+ half = !half;
+ if(!half)
+ pos++;
+ }
}
- return 0;
}
-static int
-dgcsym1(Sym *s, int ot, Type *t, vlong *off, int stack_size)
+// Helper object for generation of GC programs.
+typedef struct ProgGen ProgGen;
+struct ProgGen
{
- Type *t1;
- vlong o, off2, fieldoffset, i;
+ Sym* s;
+ int32 datasize;
+ uint8 data[256/PointersPerByte];
+ vlong ot;
+};
- if(t->align > 0 && (*off % t->align) != 0)
- fatal("dgcsym1: invalid initial alignment, %T", t);
+static void
+proggeninit(ProgGen *g, Sym *s)
+{
+ g->s = s;
+ g->datasize = 0;
+ g->ot = 0;
+ memset(g->data, 0, sizeof(g->data));
+}
+
+static void
+proggenemit(ProgGen *g, uint8 v)
+{
+ g->ot = duint8(g->s, g->ot, v);
+}
+
+// Emits insData block from g->data.
+static void
+proggendataflush(ProgGen *g)
+{
+ int32 i, s;
+
+ if(g->datasize == 0)
+ return;
+ proggenemit(g, insData);
+ proggenemit(g, g->datasize);
+ s = (g->datasize + PointersPerByte - 1)/PointersPerByte;
+ for(i = 0; i < s; i++)
+ proggenemit(g, g->data[i]);
+ g->datasize = 0;
+ memset(g->data, 0, sizeof(g->data));
+}
+
+static void
+proggendata(ProgGen *g, uint8 d)
+{
+ g->data[g->datasize/PointersPerByte] |= d << ((g->datasize%PointersPerByte)*BitsPerPointer);
+ g->datasize++;
+ if(g->datasize == 255)
+ proggendataflush(g);
+}
+
+// Skip v bytes due to alignment, etc.
+static void
+proggenskip(ProgGen *g, vlong off, vlong v)
+{
+ vlong i;
+
+ for(i = off; i < off+v; i++) {
+ if((i%widthptr) == 0)
+ proggendata(g, BitsScalar);
+ }
+}
+
+// Emit insArray instruction.
+static void
+proggenarray(ProgGen *g, vlong len)
+{
+ int32 i;
+
+ proggendataflush(g);
+ proggenemit(g, insArray);
+ for(i = 0; i < widthptr; i++, len >>= 8)
+ proggenemit(g, len);
+}
+
+static void
+proggenarrayend(ProgGen *g)
+{
+ proggendataflush(g);
+ proggenemit(g, insArrayEnd);
+}
+
+static vlong
+proggenfini(ProgGen *g)
+{
+ proggendataflush(g);
+ proggenemit(g, insEnd);
+ return g->ot;
+}
+
+static void gengcprog1(ProgGen *g, Type *t, vlong *xoffset);
+
+// Generates GC program for large types.
+static void
+gengcprog(Type *t, Sym **pgc0, Sym **pgc1)
+{
+ Sym *gc0, *gc1;
+ vlong nptr, size, ot, xoffset;
+ ProgGen g;
+
+ nptr = (t->width+widthptr-1)/widthptr;
+ size = nptr;
+ if(size%2)
+ size *= 2; // repeated twice
+ size = size*PointersPerByte/8; // 4 bits per word
+ size++; // unroll flag in the beginning, used by runtime (see runtime.markallocated)
+ // emity space in BSS for unrolled program
+ *pgc0 = S;
+ // Don't generate it if it's too large, runtime will unroll directly into GC bitmap.
+ if(size <= MaxGCMask) {
+ gc0 = typesymprefix(".gc", t);
+ ggloblsym(gc0, size, DUPOK|NOPTR);
+ *pgc0 = gc0;
+ }
+
+ // program in RODATA
+ gc1 = typesymprefix(".gcprog", t);
+ proggeninit(&g, gc1);
+ xoffset = 0;
+ gengcprog1(&g, t, &xoffset);
+ ot = proggenfini(&g);
+ ggloblsym(gc1, ot, DUPOK|RODATA);
+ *pgc1 = gc1;
+}
+
+// Recursively walks type t and writes GC program into g.
+static void
+gengcprog1(ProgGen *g, Type *t, vlong *xoffset)
+{
+ vlong fieldoffset, i, o, n;
+ Type *t1;
- if(t->width == BADWIDTH)
- dowidth(t);
-
switch(t->etype) {
case TINT8:
case TUINT8:
@@ -1314,187 +1507,71 @@ dgcsym1(Sym *s, int ot, Type *t, vlong *off, int stack_size)
case TFLOAT64:
case TCOMPLEX64:
case TCOMPLEX128:
- *off += t->width;
+ proggenskip(g, *xoffset, t->width);
+ *xoffset += t->width;
break;
-
case TPTR32:
case TPTR64:
- // NOTE: Any changes here need to be made to reflect.PtrTo as well.
- if(*off % widthptr != 0)
- fatal("dgcsym1: invalid alignment, %T", t);
-
- // NOTE(rsc): Emitting GC_APTR here for *nonptrtype
- // (pointer to non-pointer-containing type) means that
- // we do not record 'nonptrtype' and instead tell the
- // garbage collector to look up the type of the memory in
- // type information stored in the heap. In effect we are telling
- // the collector "we don't trust our information - use yours".
- // It's not completely clear why we want to do this.
- // It does have the effect that if you have a *SliceHeader and a *[]int
- // pointing at the same actual slice header, *SliceHeader will not be
- // used as an authoritative type for the memory, which is good:
- // if the collector scanned the memory as type *SliceHeader, it would
- // see no pointers inside but mark the block as scanned, preventing
- // the seeing of pointers when we followed the *[]int pointer.
- // Perhaps that kind of situation is the rationale.
- if(!haspointers(t->type)) {
- ot = duintptr(s, ot, GC_APTR);
- ot = duintptr(s, ot, *off);
- } else {
- ot = duintptr(s, ot, GC_PTR);
- ot = duintptr(s, ot, *off);
- ot = dsymptr(s, ot, dgcsym(t->type), 0);
- }
- *off += t->width;
- break;
-
case TUNSAFEPTR:
case TFUNC:
- if(*off % widthptr != 0)
- fatal("dgcsym1: invalid alignment, %T", t);
- ot = duintptr(s, ot, GC_APTR);
- ot = duintptr(s, ot, *off);
- *off += t->width;
- break;
-
- // struct Hchan*
case TCHAN:
- // NOTE: Any changes here need to be made to reflect.ChanOf as well.
- if(*off % widthptr != 0)
- fatal("dgcsym1: invalid alignment, %T", t);
- ot = duintptr(s, ot, GC_CHAN_PTR);
- ot = duintptr(s, ot, *off);
- ot = dsymptr(s, ot, dtypesym(t), 0);
- *off += t->width;
- break;
-
- // struct Hmap*
case TMAP:
- // NOTE: Any changes here need to be made to reflect.MapOf as well.
- if(*off % widthptr != 0)
- fatal("dgcsym1: invalid alignment, %T", t);
- ot = duintptr(s, ot, GC_PTR);
- ot = duintptr(s, ot, *off);
- ot = dsymptr(s, ot, dgcsym(hmap(t)), 0);
- *off += t->width;
+ proggendata(g, BitsPointer);
+ *xoffset += t->width;
break;
-
- // struct { byte *str; int32 len; }
case TSTRING:
- if(*off % widthptr != 0)
- fatal("dgcsym1: invalid alignment, %T", t);
- ot = duintptr(s, ot, GC_STRING);
- ot = duintptr(s, ot, *off);
- *off += t->width;
+ proggendata(g, BitsPointer);
+ proggendata(g, BitsScalar);
+ *xoffset += t->width;
break;
-
- // struct { Itab* tab; void* data; }
- // struct { Type* type; void* data; } // When isnilinter(t)==true
case TINTER:
- if(*off % widthptr != 0)
- fatal("dgcsym1: invalid alignment, %T", t);
- if(isnilinter(t)) {
- ot = duintptr(s, ot, GC_EFACE);
- ot = duintptr(s, ot, *off);
- } else {
- ot = duintptr(s, ot, GC_IFACE);
- ot = duintptr(s, ot, *off);
- }
- *off += t->width;
+ proggendata(g, BitsMultiWord);
+ if(isnilinter(t))
+ proggendata(g, BitsEface);
+ else
+ proggendata(g, BitsIface);
+ *xoffset += t->width;
break;
-
case TARRAY:
- if(t->bound < -1)
- fatal("dgcsym1: invalid bound, %T", t);
- if(t->type->width == BADWIDTH)
- dowidth(t->type);
if(isslice(t)) {
- // NOTE: Any changes here need to be made to reflect.SliceOf as well.
- // struct { byte* array; uint32 len; uint32 cap; }
- if(*off % widthptr != 0)
- fatal("dgcsym1: invalid alignment, %T", t);
- if(t->type->width != 0) {
- ot = duintptr(s, ot, GC_SLICE);
- ot = duintptr(s, ot, *off);
- ot = dsymptr(s, ot, dgcsym(t->type), 0);
- } else {
- ot = duintptr(s, ot, GC_APTR);
- ot = duintptr(s, ot, *off);
- }
- *off += t->width;
+ proggendata(g, BitsPointer);
+ proggendata(g, BitsScalar);
+ proggendata(g, BitsScalar);
} else {
- // NOTE: Any changes here need to be made to reflect.ArrayOf as well,
- // at least once ArrayOf's gc info is implemented and ArrayOf is exported.
- // struct { byte* array; uint32 len; uint32 cap; }
- if(t->bound < 1 || !haspointers(t->type)) {
- *off += t->width;
- } else if(gcinline(t)) {
- for(i=0; i<t->bound; i++)
- ot = dgcsym1(s, ot, t->type, off, stack_size); // recursive call of dgcsym1
+ t1 = t->type;
+ if(t1->width == 0) {
+ // ignore
+ } if(t->bound <= 1 || t->bound*t1->width < 32*widthptr) {
+ for(i = 0; i < t->bound; i++)
+ gengcprog1(g, t1, xoffset);
+ } else if(!haspointers(t1)) {
+ n = t->width;
+ n -= -*xoffset&(widthptr-1); // skip to next ptr boundary
+ proggenarray(g, (n+widthptr-1)/widthptr);
+ proggendata(g, BitsScalar);
+ proggenarrayend(g);
+ *xoffset -= (n+widthptr-1)/widthptr*widthptr - t->width;
} else {
- if(stack_size < GC_STACK_CAPACITY) {
- ot = duintptr(s, ot, GC_ARRAY_START); // a stack push during GC
- ot = duintptr(s, ot, *off);
- ot = duintptr(s, ot, t->bound);
- ot = duintptr(s, ot, t->type->width);
- off2 = 0;
- ot = dgcsym1(s, ot, t->type, &off2, stack_size+1); // recursive call of dgcsym1
- ot = duintptr(s, ot, GC_ARRAY_NEXT); // a stack pop during GC
- } else {
- ot = duintptr(s, ot, GC_REGION);
- ot = duintptr(s, ot, *off);
- ot = duintptr(s, ot, t->width);
- ot = dsymptr(s, ot, dgcsym(t), 0);
- }
- *off += t->width;
+ proggenarray(g, t->bound);
+ gengcprog1(g, t1, xoffset);
+ *xoffset += (t->bound-1)*t1->width;
+ proggenarrayend(g);
}
}
break;
-
case TSTRUCT:
o = 0;
- for(t1=t->type; t1!=T; t1=t1->down) {
+ for(t1 = t->type; t1 != T; t1 = t1->down) {
fieldoffset = t1->width;
- *off += fieldoffset - o;
- ot = dgcsym1(s, ot, t1->type, off, stack_size); // recursive call of dgcsym1
+ proggenskip(g, *xoffset, fieldoffset - o);
+ *xoffset += fieldoffset - o;
+ gengcprog1(g, t1->type, xoffset);
o = fieldoffset + t1->type->width;
}
- *off += t->width - o;
+ proggenskip(g, *xoffset, t->width - o);
+ *xoffset += t->width - o;
break;
-
default:
- fatal("dgcsym1: unexpected type %T", t);
+ fatal("gengcprog1: unexpected type, %T", t);
}
-
- return ot;
-}
-
-static Sym*
-dgcsym(Type *t)
-{
- int ot;
- vlong off;
- Sym *s;
-
- s = typesymprefix(".gc", t);
- if(s->flags & SymGcgen)
- return s;
- s->flags |= SymGcgen;
-
- if(t->width == BADWIDTH)
- dowidth(t);
-
- ot = 0;
- off = 0;
- ot = duintptr(s, ot, t->width);
- ot = dgcsym1(s, ot, t, &off, 0);
- ot = duintptr(s, ot, GC_END);
- ggloblsym(s, ot, 1, 1);
-
- if(t->align > 0)
- off = rnd(off, t->align);
- if(off != t->width)
- fatal("dgcsym: off=%lld, size=%lld, type %T", off, t->width, t);
-
- return s;
}
diff --git a/src/cmd/gc/runtime.go b/src/cmd/gc/runtime.go
index fb5c2a150..0fb15c265 100644
--- a/src/cmd/gc/runtime.go
+++ b/src/cmd/gc/runtime.go
@@ -12,7 +12,7 @@ package PACKAGE
// emitted by compiler, not referred to by go programs
-func new(typ *byte) *any
+func newobject(typ *byte) *any
func panicindex()
func panicslice()
func panicdivide()
@@ -20,12 +20,13 @@ func throwreturn()
func throwinit()
func panicwrap(string, string, string)
-func panic(interface{})
-func recover(*int32) interface{}
+func gopanic(interface{})
+func gorecover(*int32) interface{}
func printbool(bool)
func printfloat(float64)
func printint(int64)
+func printhex(uint64)
func printuint(uint64)
func printcomplex(complex128)
func printstring(string)
@@ -35,7 +36,6 @@ func printeface(any)
func printslice(any)
func printnl()
func printsp()
-func goprintf()
func concatstring2(string, string) string
func concatstring3(string, string, string) string
@@ -53,7 +53,7 @@ func stringtoslicebyte(string) []byte
func stringtoslicerune(string) []rune
func stringiter(string, int) int
func stringiter2(string, int) (retk int, retv rune)
-func copy(to any, fr any, wid uintptr) int
+func slicecopy(to any, fr any, wid uintptr) int
func slicestringcopy(to any, fr any) int
// interface conversions
@@ -84,8 +84,6 @@ func efaceeq(i1 any, i2 any) (ret bool)
func ifacethash(i1 any) (ret uint32)
func efacethash(i1 any) (ret uint32)
-func equal(typ *byte, x1, x2 any) (ret bool)
-
// *byte is really *runtime.Type
func makemap(mapType *byte, hint int64) (hmap map[any]any)
func mapaccess1(mapType *byte, hmap map[any]any, key *any) (val *any)
@@ -108,11 +106,25 @@ func chanrecv2(chanType *byte, hchan <-chan any, elem *any) bool
func chansend1(chanType *byte, hchan chan<- any, elem *any)
func closechan(hchan any)
+// *byte is really *runtime.Type
+func writebarrierptr(dst *any, src any)
+func writebarrierstring(dst *any, src any)
+func writebarrierslice(dst *any, src any)
+func writebarrieriface(dst *any, src any)
+
+// The unused *byte argument makes sure that src is 2-pointer-aligned,
+// which is the maximum alignment on NaCl amd64p32
+// (and possibly on 32-bit systems if we start 64-bit aligning uint64s).
+func writebarrierfat2(dst *any, _ *byte, src any)
+func writebarrierfat3(dst *any, _ *byte, src any)
+func writebarrierfat4(dst *any, _ *byte, src any)
+func writebarrierfat(typ *byte, dst *any, src *any)
+
func selectnbsend(chanType *byte, hchan chan<- any, elem *any) bool
func selectnbrecv(chanType *byte, elem *any, hchan <-chan any) bool
func selectnbrecv2(chanType *byte, elem *any, received *bool, hchan <-chan any) bool
-func newselect(size int32) (sel *byte)
+func newselect(sel *byte, selsize int64, size int32)
func selectsend(sel *byte, hchan chan<- any, elem *any) (selected bool)
func selectrecv(sel *byte, hchan <-chan any, elem *any) (selected bool)
func selectrecv2(sel *byte, hchan <-chan any, elem *any, received *bool) (selected bool)
@@ -124,12 +136,12 @@ func makeslice(typ *byte, nel int64, cap int64) (ary []any)
func growslice(typ *byte, old []any, n int64) (ary []any)
func memmove(to *any, frm *any, length uintptr)
-func memequal(eq *bool, size uintptr, x, y *any)
-func memequal8(eq *bool, size uintptr, x, y *any)
-func memequal16(eq *bool, size uintptr, x, y *any)
-func memequal32(eq *bool, size uintptr, x, y *any)
-func memequal64(eq *bool, size uintptr, x, y *any)
-func memequal128(eq *bool, size uintptr, x, y *any)
+func memequal(x, y *any, size uintptr) bool
+func memequal8(x, y *any, size uintptr) bool
+func memequal16(x, y *any, size uintptr) bool
+func memequal32(x, y *any, size uintptr) bool
+func memequal64(x, y *any, size uintptr) bool
+func memequal128(x, y *any, size uintptr) bool
// only used on 32-bit
func int64div(int64, int64) int64
diff --git a/src/cmd/gc/select.c b/src/cmd/gc/select.c
index 58a120674..965ad277f 100644
--- a/src/cmd/gc/select.c
+++ b/src/cmd/gc/select.c
@@ -10,6 +10,8 @@
#include <libc.h>
#include "go.h"
+static Type* selecttype(int32 size);
+
void
typecheckselect(Node *sel)
{
@@ -95,7 +97,7 @@ void
walkselect(Node *sel)
{
int lno, i;
- Node *n, *r, *a, *var, *cas, *dflt, *ch;
+ Node *n, *r, *a, *var, *selv, *cas, *dflt, *ch;
NodeList *l, *init;
if(sel->list == nil && sel->xoffset != 0)
@@ -257,8 +259,12 @@ walkselect(Node *sel)
// generate sel-struct
setlineno(sel);
- var = temp(ptrto(types[TUINT8]));
- r = nod(OAS, var, mkcall("newselect", var->type, nil, nodintconst(sel->xoffset)));
+ selv = temp(selecttype(sel->xoffset));
+ r = nod(OAS, selv, N);
+ typecheck(&r, Etop);
+ init = list(init, r);
+ var = conv(conv(nod(OADDR, selv, N), types[TUNSAFEPTR]), ptrto(types[TUINT8]));
+ r = mkcall("newselect", T, nil, var, nodintconst(selv->type->width), nodintconst(sel->xoffset));
typecheck(&r, Etop);
init = list(init, r);
@@ -301,6 +307,8 @@ walkselect(Node *sel)
break;
}
}
+ // selv is no longer alive after use.
+ r->nbody = list(r->nbody, nod(OVARKILL, selv, N));
r->nbody = concat(r->nbody, cas->nbody);
r->nbody = list(r->nbody, nod(OBREAK, N, N));
init = list(init, r);
@@ -316,3 +324,54 @@ out:
walkstmtlist(sel->nbody);
lineno = lno;
}
+
+// Keep in sync with src/runtime/chan.h.
+static Type*
+selecttype(int32 size)
+{
+ Node *sel, *sudog, *scase, *arr;
+
+ // TODO(dvyukov): it's possible to generate SudoG and Scase only once
+ // and then cache; and also cache Select per size.
+ sudog = nod(OTSTRUCT, N, N);
+ sudog->list = list(sudog->list, nod(ODCLFIELD, newname(lookup("g")), typenod(ptrto(types[TUINT8]))));
+ sudog->list = list(sudog->list, nod(ODCLFIELD, newname(lookup("selectdone")), typenod(ptrto(types[TUINT8]))));
+ sudog->list = list(sudog->list, nod(ODCLFIELD, newname(lookup("link")), typenod(ptrto(types[TUINT8]))));
+ sudog->list = list(sudog->list, nod(ODCLFIELD, newname(lookup("prev")), typenod(ptrto(types[TUINT8]))));
+ sudog->list = list(sudog->list, nod(ODCLFIELD, newname(lookup("elem")), typenod(ptrto(types[TUINT8]))));
+ sudog->list = list(sudog->list, nod(ODCLFIELD, newname(lookup("releasetime")), typenod(types[TUINT64])));
+ sudog->list = list(sudog->list, nod(ODCLFIELD, newname(lookup("nrelease")), typenod(types[TINT32])));
+ sudog->list = list(sudog->list, nod(ODCLFIELD, newname(lookup("waitlink")), typenod(ptrto(types[TUINT8]))));
+ typecheck(&sudog, Etype);
+ sudog->type->noalg = 1;
+ sudog->type->local = 1;
+
+ scase = nod(OTSTRUCT, N, N);
+ scase->list = list(scase->list, nod(ODCLFIELD, newname(lookup("elem")), typenod(ptrto(types[TUINT8]))));
+ scase->list = list(scase->list, nod(ODCLFIELD, newname(lookup("chan")), typenod(ptrto(types[TUINT8]))));
+ scase->list = list(scase->list, nod(ODCLFIELD, newname(lookup("pc")), typenod(types[TUINTPTR])));
+ scase->list = list(scase->list, nod(ODCLFIELD, newname(lookup("kind")), typenod(types[TUINT16])));
+ scase->list = list(scase->list, nod(ODCLFIELD, newname(lookup("so")), typenod(types[TUINT16])));
+ scase->list = list(scase->list, nod(ODCLFIELD, newname(lookup("receivedp")), typenod(ptrto(types[TUINT8]))));
+ scase->list = list(scase->list, nod(ODCLFIELD, newname(lookup("releasetime")), typenod(types[TUINT64])));
+ typecheck(&scase, Etype);
+ scase->type->noalg = 1;
+ scase->type->local = 1;
+
+ sel = nod(OTSTRUCT, N, N);
+ sel->list = list(sel->list, nod(ODCLFIELD, newname(lookup("tcase")), typenod(types[TUINT16])));
+ sel->list = list(sel->list, nod(ODCLFIELD, newname(lookup("ncase")), typenod(types[TUINT16])));
+ sel->list = list(sel->list, nod(ODCLFIELD, newname(lookup("pollorder")), typenod(ptrto(types[TUINT8]))));
+ sel->list = list(sel->list, nod(ODCLFIELD, newname(lookup("lockorder")), typenod(ptrto(types[TUINT8]))));
+ arr = nod(OTARRAY, nodintconst(size), scase);
+ sel->list = list(sel->list, nod(ODCLFIELD, newname(lookup("scase")), arr));
+ arr = nod(OTARRAY, nodintconst(size), typenod(ptrto(types[TUINT8])));
+ sel->list = list(sel->list, nod(ODCLFIELD, newname(lookup("lockorderarr")), arr));
+ arr = nod(OTARRAY, nodintconst(size), typenod(types[TUINT16]));
+ sel->list = list(sel->list, nod(ODCLFIELD, newname(lookup("pollorderarr")), arr));
+ typecheck(&sel, Etype);
+ sel->type->noalg = 1;
+ sel->type->local = 1;
+
+ return sel->type;
+}
diff --git a/src/cmd/gc/sinit.c b/src/cmd/gc/sinit.c
index 59804cd8d..8ad7ae7ab 100644
--- a/src/cmd/gc/sinit.c
+++ b/src/cmd/gc/sinit.c
@@ -17,7 +17,6 @@ enum
InitPending = 2,
};
-static int iszero(Node*);
static void initplan(Node*);
static NodeList *initlist;
static void init2(Node*, NodeList**);
@@ -207,7 +206,7 @@ init2(Node *n, NodeList **out)
if(n->op == OCLOSURE)
init2list(n->closure->nbody, out);
- if(n->op == ODOTMETH)
+ if(n->op == ODOTMETH || n->op == OCALLPART)
init2(n->type->nname, out);
}
@@ -633,11 +632,14 @@ structlit(int ctxt, int pass, Node *n, Node *var, NodeList **init)
a = nod(ODOT, var, newname(index->sym));
a = nod(OAS, a, value);
typecheck(&a, Etop);
- walkexpr(&a, init);
if(pass == 1) {
+ walkexpr(&a, init); // add any assignments in r to top
if(a->op != OAS)
fatal("structlit: not as");
a->dodata = 2;
+ } else {
+ orderstmtinplace(&a);
+ walkstmt(&a);
}
*init = list(*init, a);
}
@@ -693,11 +695,14 @@ arraylit(int ctxt, int pass, Node *n, Node *var, NodeList **init)
a = nod(OINDEX, var, index);
a = nod(OAS, a, value);
typecheck(&a, Etop);
- walkexpr(&a, init); // add any assignments in r to top
if(pass == 1) {
+ walkexpr(&a, init);
if(a->op != OAS)
- fatal("structlit: not as");
+ fatal("arraylit: not as");
a->dodata = 2;
+ } else {
+ orderstmtinplace(&a);
+ walkstmt(&a);
}
*init = list(*init, a);
}
@@ -807,7 +812,8 @@ slicelit(int ctxt, Node *n, Node *var, NodeList **init)
// make slice out of heap (5)
a = nod(OAS, var, nod(OSLICE, vauto, nod(OKEY, N, N)));
typecheck(&a, Etop);
- walkexpr(&a, init);
+ orderstmtinplace(&a);
+ walkstmt(&a);
*init = list(*init, a);
// put dynamics into slice (6)
@@ -839,7 +845,8 @@ slicelit(int ctxt, Node *n, Node *var, NodeList **init)
// build list of var[c] = expr
a = nod(OAS, a, value);
typecheck(&a, Etop);
- walkexpr(&a, init);
+ orderstmtinplace(&a);
+ walkstmt(&a);
*init = list(*init, a);
}
}
@@ -1060,7 +1067,7 @@ anylit(int ctxt, Node *n, Node *var, NodeList **init)
if(t->etype != TSTRUCT)
fatal("anylit: not struct");
- if(simplename(var)) {
+ if(simplename(var) && count(n->list) > 4) {
if(ctxt == 0) {
// lay out static data
@@ -1083,7 +1090,7 @@ anylit(int ctxt, Node *n, Node *var, NodeList **init)
}
// initialize of not completely specified
- if(count(n->list) < structcount(t)) {
+ if(simplename(var) || count(n->list) < structcount(t)) {
a = nod(OAS, var, N);
typecheck(&a, Etop);
walkexpr(&a, init);
@@ -1100,7 +1107,7 @@ anylit(int ctxt, Node *n, Node *var, NodeList **init)
break;
}
- if(simplename(var)) {
+ if(simplename(var) && count(n->list) > 4) {
if(ctxt == 0) {
// lay out static data
@@ -1123,7 +1130,7 @@ anylit(int ctxt, Node *n, Node *var, NodeList **init)
}
// initialize of not completely specified
- if(count(n->list) < t->bound) {
+ if(simplename(var) || count(n->list) < t->bound) {
a = nod(OAS, var, N);
typecheck(&a, Etop);
walkexpr(&a, init);
@@ -1348,7 +1355,6 @@ no:
return 0;
}
-static int iszero(Node*);
static int isvaluelit(Node*);
static InitEntry* entry(InitPlan*);
static void addvalue(InitPlan*, vlong, Node*, Node*);
@@ -1432,7 +1438,7 @@ addvalue(InitPlan *p, vlong xoffset, Node *key, Node *n)
e->expr = n;
}
-static int
+int
iszero(Node *n)
{
NodeList *l;
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index 72a9ac20c..c3bc5af3b 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -529,7 +529,8 @@ algtype1(Type *t, Type **bad)
if(bad)
*bad = T;
-
+ if(t->broke)
+ return AMEM;
if(t->noalg)
return ANOEQ;
@@ -656,11 +657,15 @@ maptype(Type *key, Type *val)
{
Type *t;
Type *bad;
- int atype;
+ int atype, mtype;
if(key != nil) {
atype = algtype1(key, &bad);
- switch(bad == T ? key->etype : bad->etype) {
+ if(bad == T)
+ mtype = key->etype;
+ else
+ mtype = bad->etype;
+ switch(mtype) {
default:
if(atype == ANOEQ)
yyerror("invalid map key type %T", key);
@@ -2625,9 +2630,10 @@ hashmem(Type *t)
n = newname(sym);
n->class = PFUNC;
tfn = nod(OTFUNC, N, N);
- tfn->list = list(tfn->list, nod(ODCLFIELD, N, typenod(ptrto(types[TUINTPTR]))));
- tfn->list = list(tfn->list, nod(ODCLFIELD, N, typenod(types[TUINTPTR])));
tfn->list = list(tfn->list, nod(ODCLFIELD, N, typenod(ptrto(t))));
+ tfn->list = list(tfn->list, nod(ODCLFIELD, N, typenod(types[TUINTPTR])));
+ tfn->list = list(tfn->list, nod(ODCLFIELD, N, typenod(types[TUINTPTR])));
+ tfn->rlist = list(tfn->rlist, nod(ODCLFIELD, N, typenod(types[TUINTPTR])));
typecheck(&tfn, Etype);
n->type = tfn->type;
return n;
@@ -2673,9 +2679,10 @@ hashfor(Type *t)
n = newname(sym);
n->class = PFUNC;
tfn = nod(OTFUNC, N, N);
- tfn->list = list(tfn->list, nod(ODCLFIELD, N, typenod(ptrto(types[TUINTPTR]))));
- tfn->list = list(tfn->list, nod(ODCLFIELD, N, typenod(types[TUINTPTR])));
tfn->list = list(tfn->list, nod(ODCLFIELD, N, typenod(ptrto(t))));
+ tfn->list = list(tfn->list, nod(ODCLFIELD, N, typenod(types[TUINTPTR])));
+ tfn->list = list(tfn->list, nod(ODCLFIELD, N, typenod(types[TUINTPTR])));
+ tfn->rlist = list(tfn->rlist, nod(ODCLFIELD, N, typenod(types[TUINTPTR])));
typecheck(&tfn, Etype);
n->type = tfn->type;
return n;
@@ -2687,7 +2694,7 @@ hashfor(Type *t)
void
genhash(Sym *sym, Type *t)
{
- Node *n, *fn, *np, *nh, *ni, *call, *nx, *na, *tfn;
+ Node *n, *fn, *np, *nh, *ni, *call, *nx, *na, *tfn, *r;
Node *hashel;
Type *first, *t1;
int old_safemode;
@@ -2700,21 +2707,23 @@ genhash(Sym *sym, Type *t)
dclcontext = PEXTERN;
markdcl();
- // func sym(h *uintptr, s uintptr, p *T)
+ // func sym(p *T, s uintptr, h uintptr) uintptr
fn = nod(ODCLFUNC, N, N);
fn->nname = newname(sym);
fn->nname->class = PFUNC;
tfn = nod(OTFUNC, N, N);
fn->nname->ntype = tfn;
- n = nod(ODCLFIELD, newname(lookup("h")), typenod(ptrto(types[TUINTPTR])));
+ n = nod(ODCLFIELD, newname(lookup("p")), typenod(ptrto(t)));
tfn->list = list(tfn->list, n);
- nh = n->left;
+ np = n->left;
n = nod(ODCLFIELD, newname(lookup("s")), typenod(types[TUINTPTR]));
tfn->list = list(tfn->list, n);
- n = nod(ODCLFIELD, newname(lookup("p")), typenod(ptrto(t)));
+ n = nod(ODCLFIELD, newname(lookup("h")), typenod(types[TUINTPTR]));
tfn->list = list(tfn->list, n);
- np = n->left;
+ nh = n->left;
+ n = nod(ODCLFIELD, N, typenod(types[TUINTPTR])); // return value
+ tfn->rlist = list(tfn->rlist, n);
funchdr(fn);
typecheck(&fn->nname->ntype, Etype);
@@ -2740,15 +2749,17 @@ genhash(Sym *sym, Type *t)
colasdefn(n->list, n);
ni = n->list->n;
- // *h = *h<<3 | *h>>61
+ // TODO: with aeshash we don't need these shift/mul parts
+
+ // h = h<<3 | h>>61
n->nbody = list(n->nbody,
nod(OAS,
- nod(OIND, nh, N),
+ nh,
nod(OOR,
- nod(OLSH, nod(OIND, nh, N), nodintconst(3)),
- nod(ORSH, nod(OIND, nh, N), nodintconst(widthptr*8-3)))));
+ nod(OLSH, nh, nodintconst(3)),
+ nod(ORSH, nh, nodintconst(widthptr*8-3)))));
- // *h *= mul
+ // h *= mul
// Same multipliers as in runtime.memhash.
if(widthptr == 4)
mul = 3267000013LL;
@@ -2756,19 +2767,19 @@ genhash(Sym *sym, Type *t)
mul = 23344194077549503LL;
n->nbody = list(n->nbody,
nod(OAS,
- nod(OIND, nh, N),
- nod(OMUL, nod(OIND, nh, N), nodintconst(mul))));
+ nh,
+ nod(OMUL, nh, nodintconst(mul))));
- // hashel(h, sizeof(p[i]), &p[i])
+ // h = hashel(&p[i], sizeof(p[i]), h)
call = nod(OCALL, hashel, N);
- call->list = list(call->list, nh);
- call->list = list(call->list, nodintconst(t->type->width));
nx = nod(OINDEX, np, ni);
nx->bounded = 1;
na = nod(OADDR, nx, N);
na->etype = 1; // no escape to heap
call->list = list(call->list, na);
- n->nbody = list(n->nbody, call);
+ call->list = list(call->list, nodintconst(t->type->width));
+ call->list = list(call->list, nh);
+ n->nbody = list(n->nbody, nod(OAS, nh, call));
fn->nbody = list(fn->nbody, n);
break;
@@ -2793,15 +2804,15 @@ genhash(Sym *sym, Type *t)
if(first != T) {
size = offend - first->width; // first->width is offset
hashel = hashmem(first->type);
- // hashel(h, size, &p.first)
+ // h = hashel(&p.first, size, h)
call = nod(OCALL, hashel, N);
- call->list = list(call->list, nh);
- call->list = list(call->list, nodintconst(size));
nx = nod(OXDOT, np, newname(first->sym)); // TODO: fields from other packages?
na = nod(OADDR, nx, N);
na->etype = 1; // no escape to heap
call->list = list(call->list, na);
- fn->nbody = list(fn->nbody, call);
+ call->list = list(call->list, nodintconst(size));
+ call->list = list(call->list, nh);
+ fn->nbody = list(fn->nbody, nod(OAS, nh, call));
first = T;
}
@@ -2812,20 +2823,21 @@ genhash(Sym *sym, Type *t)
// Run hash for this field.
hashel = hashfor(t1->type);
- // hashel(h, size, &p.t1)
+ // h = hashel(&p.t1, size, h)
call = nod(OCALL, hashel, N);
- call->list = list(call->list, nh);
- call->list = list(call->list, nodintconst(t1->type->width));
nx = nod(OXDOT, np, newname(t1->sym)); // TODO: fields from other packages?
na = nod(OADDR, nx, N);
na->etype = 1; // no escape to heap
call->list = list(call->list, na);
- fn->nbody = list(fn->nbody, call);
+ call->list = list(call->list, nodintconst(t1->type->width));
+ call->list = list(call->list, nh);
+ fn->nbody = list(fn->nbody, nod(OAS, nh, call));
}
- // make sure body is not empty.
- fn->nbody = list(fn->nbody, nod(ORETURN, N, N));
break;
}
+ r = nod(ORETURN, N, N);
+ r->list = list(r->list, nh);
+ fn->nbody = list(fn->nbody, r);
if(debug['r'])
dumplist("genhash body", fn->nbody);
@@ -2849,18 +2861,19 @@ genhash(Sym *sym, Type *t)
}
// Return node for
-// if p.field != q.field { *eq = false; return }
+// if p.field != q.field { return false }
static Node*
-eqfield(Node *p, Node *q, Node *field, Node *eq)
+eqfield(Node *p, Node *q, Node *field)
{
- Node *nif, *nx, *ny;
+ Node *nif, *nx, *ny, *r;
nx = nod(OXDOT, p, field);
ny = nod(OXDOT, q, field);
nif = nod(OIF, N, N);
nif->ntest = nod(ONE, nx, ny);
- nif->nbody = list(nif->nbody, nod(OAS, nod(OIND, eq, N), nodbool(0)));
- nif->nbody = list(nif->nbody, nod(ORETURN, N, N));
+ r = nod(ORETURN, N, N);
+ r->list = list(r->list, nodbool(0));
+ nif->nbody = list(nif->nbody, r);
return nif;
}
@@ -2889,11 +2902,11 @@ eqmemfunc(vlong size, Type *type)
}
// Return node for
-// if memequal(size, &p.field, &q.field, eq); !*eq { return }
+// if !memequal(&p.field, &q.field, size) { return false }
static Node*
-eqmem(Node *p, Node *q, Node *field, vlong size, Node *eq)
+eqmem(Node *p, Node *q, Node *field, vlong size)
{
- Node *nif, *nx, *ny, *call;
+ Node *nif, *nx, *ny, *call, *r;
nx = nod(OADDR, nod(OXDOT, p, field), N);
nx->etype = 1; // does not escape
@@ -2903,15 +2916,16 @@ eqmem(Node *p, Node *q, Node *field, vlong size, Node *eq)
typecheck(&ny, Erv);
call = nod(OCALL, eqmemfunc(size, nx->type->type), N);
- call->list = list(call->list, eq);
- call->list = list(call->list, nodintconst(size));
call->list = list(call->list, nx);
call->list = list(call->list, ny);
+ call->list = list(call->list, nodintconst(size));
nif = nod(OIF, N, N);
nif->ninit = list(nif->ninit, call);
- nif->ntest = nod(ONOT, nod(OIND, eq, N), N);
- nif->nbody = list(nif->nbody, nod(ORETURN, N, N));
+ nif->ntest = nod(ONOT, call, N);
+ r = nod(ORETURN, N, N);
+ r->list = list(r->list, nodbool(0));
+ nif->nbody = list(nif->nbody, r);
return nif;
}
@@ -2921,7 +2935,7 @@ eqmem(Node *p, Node *q, Node *field, vlong size, Node *eq)
void
geneq(Sym *sym, Type *t)
{
- Node *n, *fn, *np, *neq, *nq, *tfn, *nif, *ni, *nx, *ny, *nrange;
+ Node *n, *fn, *np, *nq, *tfn, *nif, *ni, *nx, *ny, *nrange, *r;
Type *t1, *first;
int old_safemode;
int64 size;
@@ -2934,24 +2948,23 @@ geneq(Sym *sym, Type *t)
dclcontext = PEXTERN;
markdcl();
- // func sym(eq *bool, s uintptr, p, q *T)
+ // func sym(p, q *T, s uintptr) bool
fn = nod(ODCLFUNC, N, N);
fn->nname = newname(sym);
fn->nname->class = PFUNC;
tfn = nod(OTFUNC, N, N);
fn->nname->ntype = tfn;
- n = nod(ODCLFIELD, newname(lookup("eq")), typenod(ptrto(types[TBOOL])));
- tfn->list = list(tfn->list, n);
- neq = n->left;
- n = nod(ODCLFIELD, newname(lookup("s")), typenod(types[TUINTPTR]));
- tfn->list = list(tfn->list, n);
n = nod(ODCLFIELD, newname(lookup("p")), typenod(ptrto(t)));
tfn->list = list(tfn->list, n);
np = n->left;
n = nod(ODCLFIELD, newname(lookup("q")), typenod(ptrto(t)));
tfn->list = list(tfn->list, n);
nq = n->left;
+ n = nod(ODCLFIELD, newname(lookup("s")), typenod(types[TUINTPTR]));
+ tfn->list = list(tfn->list, n);
+ n = nod(ODCLFIELD, N, typenod(types[TBOOL]));
+ tfn->rlist = list(tfn->rlist, n);
funchdr(fn);
@@ -2977,7 +2990,7 @@ geneq(Sym *sym, Type *t)
colasdefn(nrange->list, nrange);
ni = nrange->list->n;
- // if p[i] != q[i] { *eq = false; return }
+ // if p[i] != q[i] { return false }
nx = nod(OINDEX, np, ni);
nx->bounded = 1;
ny = nod(OINDEX, nq, ni);
@@ -2985,13 +2998,11 @@ geneq(Sym *sym, Type *t)
nif = nod(OIF, N, N);
nif->ntest = nod(ONE, nx, ny);
- nif->nbody = list(nif->nbody, nod(OAS, nod(OIND, neq, N), nodbool(0)));
- nif->nbody = list(nif->nbody, nod(ORETURN, N, N));
+ r = nod(ORETURN, N, N);
+ r->list = list(r->list, nodbool(0));
+ nif->nbody = list(nif->nbody, r);
nrange->nbody = list(nrange->nbody, nif);
fn->nbody = list(fn->nbody, nrange);
-
- // *eq = true;
- fn->nbody = list(fn->nbody, nod(OAS, nod(OIND, neq, N), nodbool(1)));
break;
case TSTRUCT:
@@ -3016,16 +3027,16 @@ geneq(Sym *sym, Type *t)
// cross-package unexported fields.
if(first != T) {
if(first->down == t1) {
- fn->nbody = list(fn->nbody, eqfield(np, nq, newname(first->sym), neq));
+ fn->nbody = list(fn->nbody, eqfield(np, nq, newname(first->sym)));
} else if(first->down->down == t1) {
- fn->nbody = list(fn->nbody, eqfield(np, nq, newname(first->sym), neq));
+ fn->nbody = list(fn->nbody, eqfield(np, nq, newname(first->sym)));
first = first->down;
if(!isblanksym(first->sym))
- fn->nbody = list(fn->nbody, eqfield(np, nq, newname(first->sym), neq));
+ fn->nbody = list(fn->nbody, eqfield(np, nq, newname(first->sym)));
} else {
// More than two fields: use memequal.
size = offend - first->width; // first->width is offset
- fn->nbody = list(fn->nbody, eqmem(np, nq, newname(first->sym), size, neq));
+ fn->nbody = list(fn->nbody, eqmem(np, nq, newname(first->sym), size));
}
first = T;
}
@@ -3035,14 +3046,17 @@ geneq(Sym *sym, Type *t)
continue;
// Check this field, which is not just memory.
- fn->nbody = list(fn->nbody, eqfield(np, nq, newname(t1->sym), neq));
+ fn->nbody = list(fn->nbody, eqfield(np, nq, newname(t1->sym)));
}
- // *eq = true;
- fn->nbody = list(fn->nbody, nod(OAS, nod(OIND, neq, N), nodbool(1)));
break;
}
+ // return true
+ r = nod(ORETURN, N, N);
+ r->list = list(r->list, nodbool(1));
+ fn->nbody = list(fn->nbody, r);
+
if(debug['r'])
dumplist("geneq body", fn->nbody);
@@ -3445,7 +3459,7 @@ smagic(Magic *m)
mask = 0xffffffffLL;
break;
case 64:
- mask = 0xffffffffffffffffLL;
+ mask = 0xffffffffffffffffULL;
break;
}
two31 = mask ^ (mask>>1);
@@ -3453,7 +3467,7 @@ smagic(Magic *m)
p = m->w-1;
ad = m->sd;
if(m->sd < 0)
- ad = -m->sd;
+ ad = -(uvlong)m->sd;
// bad denominators
if(ad == 0 || ad == 1 || ad == two31) {
@@ -3543,7 +3557,7 @@ umagic(Magic *m)
mask = 0xffffffffLL;
break;
case 64:
- mask = 0xffffffffffffffffLL;
+ mask = 0xffffffffffffffffULL;
break;
}
two31 = mask ^ (mask>>1);
@@ -3628,7 +3642,7 @@ ngotype(Node *n)
* users if we escape that as little as possible.
*
* If you edit this, edit ../ld/lib.c:/^pathtoprefix too.
- * If you edit this, edit ../../pkg/debug/goobj/read.go:/importPathToPrefix too.
+ * If you edit this, edit ../../debug/goobj/read.go:/importPathToPrefix too.
*/
static char*
pathtoprefix(char *s)
@@ -3785,3 +3799,42 @@ checknil(Node *x, NodeList **init)
n->typecheck = 1;
*init = list(*init, n);
}
+
+/*
+ * Can this type be stored directly in an interface word?
+ */
+int
+isdirectiface(Type *t)
+{
+ // Setting IfacePointerOnly = 1 changes the
+ // interface representation so that the data word
+ // in an interface value must always be a pointer.
+ // Setting it to 0 uses the original representation,
+ // where the data word can hold a pointer or any
+ // non-pointer value no bigger than a pointer.
+ enum {
+ IfacePointerOnly = 1,
+ };
+
+ if(IfacePointerOnly) {
+ switch(t->etype) {
+ case TPTR32:
+ case TPTR64:
+ case TCHAN:
+ case TMAP:
+ case TFUNC:
+ case TUNSAFEPTR:
+ return 1;
+ case TARRAY:
+ // Array of 1 direct iface type can be direct.
+ return t->bound == 1 && isdirectiface(t->type);
+ case TSTRUCT:
+ // Struct with 1 field of direct iface type can be direct.
+ return t->type != T && t->type->down == T && isdirectiface(t->type->type);
+ }
+ return 0;
+ }
+
+ dowidth(t);
+ return t->width <= widthptr;
+}
diff --git a/src/cmd/gc/swt.c b/src/cmd/gc/swt.c
index ce0190507..e1d8af878 100644
--- a/src/cmd/gc/swt.c
+++ b/src/cmd/gc/swt.c
@@ -34,6 +34,7 @@ struct Case
Case* link; // linked list to link
};
#define C ((Case*)nil)
+/*c2go Case *C; */
void
dumpcase(Case *c0)
diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c
index c50b2285b..714c66268 100644
--- a/src/cmd/gc/typecheck.c
+++ b/src/cmd/gc/typecheck.c
@@ -33,7 +33,7 @@ static void stringtoarraylit(Node**);
static Node* resolve(Node*);
static void checkdefergo(Node*);
static int checkmake(Type*, char*, Node*);
-static int checksliceindex(Node*, Type*);
+static int checksliceindex(Node*, Node*, Type*);
static int checksliceconst(Node*, Node*);
static NodeList* typecheckdefstack;
@@ -311,6 +311,7 @@ typecheck1(Node **np, int top)
Type *t, *tp, *missing, *have, *badtype;
Val v;
char *why, *desc, descbuf[64];
+ vlong x;
n = *np;
@@ -382,16 +383,6 @@ reswitch:
if(n->type == T)
goto error;
break;
-
- case OTPAREN:
- ok |= Etype;
- l = typecheck(&n->left, Etype);
- if(l->type == T)
- goto error;
- n->op = OTYPE;
- n->type = l->type;
- n->left = N;
- break;
case OTARRAY:
ok |= Etype;
@@ -418,7 +409,10 @@ reswitch:
v = toint(l->val);
break;
default:
- yyerror("invalid array bound %N", l);
+ if(l->type != T && isint[l->type->etype] && l->op != OLITERAL)
+ yyerror("non-constant array bound %N", l);
+ else
+ yyerror("invalid array bound %N", l);
goto error;
}
t->bound = mpgetfix(v.u.xval);
@@ -535,19 +529,6 @@ reswitch:
op = n->etype;
goto arith;
- case OADDPTR:
- ok |= Erv;
- l = typecheck(&n->left, Erv);
- r = typecheck(&n->right, Erv);
- if(l->type == T || r->type == T)
- goto error;
- if(l->type->etype != tptr)
- fatal("bad OADDPTR left type %E for %N", l->type->etype, n->left);
- if(r->type->etype != TUINTPTR)
- fatal("bad OADDPTR right type %E for %N", r->type->etype, n->right);
- n->type = types[tptr];
- goto ret;
-
case OADD:
case OAND:
case OANDAND:
@@ -620,6 +601,10 @@ reswitch:
}
if(t->etype != TIDEAL && !eqtype(l->type, r->type)) {
defaultlit2(&l, &r, 1);
+ if(n->op == OASOP && n->implicit) {
+ yyerror("invalid operation: %N (non-numeric type %T)", n, l->type);
+ goto error;
+ }
yyerror("invalid operation: %N (mismatched types %T and %T)", n, l->type, r->type);
goto error;
}
@@ -756,10 +741,6 @@ reswitch:
l = n->left;
if((t = l->type) == T)
goto error;
- // top&Eindir means this is &x in *&x. (or the arg to built-in print)
- // n->etype means code generator flagged it as non-escaping.
- if(debug['N'] && !(top & Eindir) && !n->etype)
- addrescapes(n->left);
n->type = ptrto(t);
goto ret;
@@ -915,11 +896,12 @@ reswitch:
break;
}
if(isconst(n->right, CTINT)) {
- if(mpgetfix(n->right->val.u.xval) < 0)
+ x = mpgetfix(n->right->val.u.xval);
+ if(x < 0)
yyerror("invalid %s index %N (index must be non-negative)", why, n->right);
- else if(isfixedarray(t) && t->bound > 0 && mpgetfix(n->right->val.u.xval) >= t->bound)
+ else if(isfixedarray(t) && t->bound > 0 && x >= t->bound)
yyerror("invalid array index %N (out of bounds for %d-element array)", n->right, t->bound);
- else if(isconst(n->left, CTSTR) && mpgetfix(n->right->val.u.xval) >= n->left->val.u.sval->len)
+ else if(isconst(n->left, CTSTR) && x >= n->left->val.u.sval->len)
yyerror("invalid string index %N (out of bounds for %d-byte string)", n->right, n->left->val.u.sval->len);
else if(mpcmpfixfix(n->right->val.u.xval, maxintval[TINT]) > 0)
yyerror("invalid %s index %N (index too large)", why, n->right);
@@ -1019,9 +1001,9 @@ reswitch:
yyerror("cannot slice %N (type %T)", l, t);
goto error;
}
- if((lo = n->right->left) != N && checksliceindex(lo, tp) < 0)
+ if((lo = n->right->left) != N && checksliceindex(l, lo, tp) < 0)
goto error;
- if((hi = n->right->right) != N && checksliceindex(hi, tp) < 0)
+ if((hi = n->right->right) != N && checksliceindex(l, hi, tp) < 0)
goto error;
if(checksliceconst(lo, hi) < 0)
goto error;
@@ -1068,11 +1050,11 @@ reswitch:
yyerror("cannot slice %N (type %T)", l, t);
goto error;
}
- if((lo = n->right->left) != N && checksliceindex(lo, tp) < 0)
+ if((lo = n->right->left) != N && checksliceindex(l, lo, tp) < 0)
goto error;
- if((mid = n->right->right->left) != N && checksliceindex(mid, tp) < 0)
+ if((mid = n->right->right->left) != N && checksliceindex(l, mid, tp) < 0)
goto error;
- if((hi = n->right->right->right) != N && checksliceindex(hi, tp) < 0)
+ if((hi = n->right->right->right) != N && checksliceindex(l, hi, tp) < 0)
goto error;
if(checksliceconst(lo, hi) < 0 || checksliceconst(lo, mid) < 0 || checksliceconst(mid, hi) < 0)
goto error;
@@ -1842,7 +1824,7 @@ out:
}
static int
-checksliceindex(Node *r, Type *tp)
+checksliceindex(Node *l, Node *r, Type *tp)
{
Type *t;
@@ -1859,6 +1841,9 @@ checksliceindex(Node *r, Type *tp)
} else if(tp != nil && tp->bound > 0 && mpgetfix(r->val.u.xval) > tp->bound) {
yyerror("invalid slice index %N (out of bounds for %d-element array)", r, tp->bound);
return -1;
+ } else if(isconst(l, CTSTR) && mpgetfix(r->val.u.xval) > l->val.u.sval->len) {
+ yyerror("invalid slice index %N (out of bounds for %d-byte string)", r, l->val.u.sval->len);
+ return -1;
} else if(mpcmpfixfix(r->val.u.xval, maxintval[TINT]) > 0) {
yyerror("invalid slice index %N (index too large)", r);
return -1;
@@ -2139,18 +2124,19 @@ lookdot(Node *n, Type *t, int dostrcmp)
if(!eqtype(rcvr, tt)) {
if(rcvr->etype == tptr && eqtype(rcvr->type, tt)) {
checklvalue(n->left, "call pointer method on");
- if(debug['N'])
- addrescapes(n->left);
n->left = nod(OADDR, n->left, N);
n->left->implicit = 1;
typecheck(&n->left, Etype|Erv);
- } else if(tt->etype == tptr && eqtype(tt->type, rcvr)) {
+ } else if(tt->etype == tptr && rcvr->etype != tptr && eqtype(tt->type, rcvr)) {
n->left = nod(OIND, n->left, N);
n->left->implicit = 1;
typecheck(&n->left, Etype|Erv);
- } else if(tt->etype == tptr && tt->type->etype == tptr && eqtype(derefall(tt), rcvr)) {
+ } else if(tt->etype == tptr && tt->type->etype == tptr && eqtype(derefall(tt), derefall(rcvr))) {
yyerror("calling method %N with receiver %lN requires explicit dereference", n->right, n->left);
while(tt->etype == tptr) {
+ // Stop one level early for method with pointer receiver.
+ if(rcvr->etype == tptr && tt->type->etype != tptr)
+ break;
n->left = nod(OIND, n->left, N);
n->left->implicit = 1;
typecheck(&n->left, Etype|Erv);
@@ -2831,6 +2817,33 @@ checkassignlist(NodeList *l)
checkassign(l->n);
}
+// Check whether l and r are the same side effect-free expression,
+// so that it is safe to reuse one instead of computing both.
+static int
+samesafeexpr(Node *l, Node *r)
+{
+ if(l->op != r->op || !eqtype(l->type, r->type))
+ return 0;
+
+ switch(l->op) {
+ case ONAME:
+ case OCLOSUREVAR:
+ return l == r;
+
+ case ODOT:
+ case ODOTPTR:
+ return l->right != nil && r->right != nil && l->right->sym == r->right->sym && samesafeexpr(l->left, r->left);
+
+ case OIND:
+ return samesafeexpr(l->left, r->left);
+
+ case OINDEX:
+ return samesafeexpr(l->left, r->left) && samesafeexpr(l->right, r->right);
+ }
+
+ return 0;
+}
+
/*
* type check assignment.
* if this assignment is the definition of a var on the left side,
@@ -2868,6 +2881,29 @@ typecheckas(Node *n)
n->typecheck = 1;
if(n->left->typecheck == 0)
typecheck(&n->left, Erv | Easgn);
+
+ // Recognize slices being updated in place, for better code generation later.
+ // Don't rewrite if using race detector, to avoid needing to teach race detector
+ // about this optimization.
+ if(n->left && n->left->op != OINDEXMAP && n->right && !flag_race) {
+ switch(n->right->op) {
+ case OSLICE:
+ case OSLICE3:
+ case OSLICESTR:
+ // For x = x[0:y], x can be updated in place, without touching pointer.
+ if(samesafeexpr(n->left, n->right->left) && (n->right->right->left == N || iszero(n->right->right->left)))
+ n->right->reslice = 1;
+ break;
+
+ case OAPPEND:
+ // For x = append(x, ...), x can be updated in place when there is capacity,
+ // without touching the pointer; otherwise the emitted code to growslice
+ // can take care of updating the pointer, and only in that case.
+ if(n->right->list != nil && samesafeexpr(n->left, n->right->list->n))
+ n->right->reslice = 1;
+ break;
+ }
+ }
}
static void
@@ -2975,7 +3011,7 @@ typecheckas2(Node *n)
if(l->defn == n)
l->type = r->type;
l = n->list->next->n;
- if(l->type != T)
+ if(l->type != T && l->type->etype != TBOOL)
checkassignto(types[TBOOL], l);
if(l->defn == n && l->ntype == N)
l->type = types[TBOOL];
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c
index 1cb25512e..ff9b36208 100644
--- a/src/cmd/gc/walk.c
+++ b/src/cmd/gc/walk.c
@@ -5,8 +5,11 @@
#include <u.h>
#include <libc.h>
#include "go.h"
+#include "../ld/textflag.h"
-static Node* walkprint(Node*, NodeList**, int);
+static Node* walkprint(Node*, NodeList**);
+static Node* writebarrierfn(char*, Type*, Type*);
+static Node* applywritebarrier(Node*, NodeList**);
static Node* mapfn(char*, Type*);
static Node* mapfndel(char*, Type*);
static Node* ascompatee1(int, Node*, Node*, NodeList**);
@@ -29,6 +32,7 @@ static void walkmul(Node**, NodeList**);
static void walkdiv(Node**, NodeList**);
static int bounded(Node*, int64);
static Mpint mpzero;
+static void walkprintfunc(Node**, NodeList**);
void
walk(Node *fn)
@@ -134,6 +138,8 @@ walkstmt(Node **np)
n = *np;
if(n == N)
return;
+ if(n->dodata == 2) // don't walk, generated by anylit.
+ return;
setlineno(n);
@@ -221,8 +227,7 @@ walkstmt(Node **np)
switch(n->left->op) {
case OPRINT:
case OPRINTN:
- walkexprlist(n->left->list, &n->ninit);
- n->left = walkprint(n->left, &n->ninit, 1);
+ walkprintfunc(&n->left, &n->ninit);
break;
case OCOPY:
n->left = copyany(n->left, &n->ninit, 1);
@@ -255,8 +260,7 @@ walkstmt(Node **np)
switch(n->left->op) {
case OPRINT:
case OPRINTN:
- walkexprlist(n->left->list, &n->ninit);
- n->left = walkprint(n->left, &n->ninit, 1);
+ walkprintfunc(&n->left, &n->ninit);
break;
case OCOPY:
n->left = copyany(n->left, &n->ninit, 1);
@@ -538,15 +542,15 @@ walkexpr(Node **np, NodeList **init)
case OPRINT:
case OPRINTN:
walkexprlist(n->list, init);
- n = walkprint(n, init, 0);
+ n = walkprint(n, init);
goto ret;
case OPANIC:
- n = mkcall("panic", T, init, n->left);
+ n = mkcall("gopanic", T, init, n->left);
goto ret;
case ORECOVER:
- n = mkcall("recover", n->type, init, nod(OADDR, nodfp, N));
+ n = mkcall("gorecover", n->type, init, nod(OADDR, nodfp, N));
goto ret;
case OLITERAL:
@@ -609,7 +613,7 @@ walkexpr(Node **np, NodeList **init)
if(oaslit(n, init))
goto ret;
- if(n->right == N)
+ if(n->right == N || iszero(n->right) && !flag_race)
goto ret;
switch(n->right->op) {
@@ -632,6 +636,7 @@ walkexpr(Node **np, NodeList **init)
r = convas(nod(OAS, n->left, n->right), init);
r->dodata = n->dodata;
n = r;
+ n = applywritebarrier(n, init);
}
goto ret;
@@ -643,6 +648,8 @@ walkexpr(Node **np, NodeList **init)
walkexprlistsafe(n->rlist, init);
ll = ascompatee(OAS, n->list, n->rlist, init);
ll = reorder3(ll);
+ for(lr = ll; lr != nil; lr = lr->next)
+ lr->n = applywritebarrier(lr->n, init);
n = liststmt(ll);
goto ret;
@@ -655,6 +662,8 @@ walkexpr(Node **np, NodeList **init)
walkexpr(&r, init);
ll = ascompatet(n->op, n->list, &r->type, 0, init);
+ for(lr = ll; lr != nil; lr = lr->next)
+ lr->n = applywritebarrier(lr->n, init);
n = liststmt(concat(list1(r), ll));
goto ret;
@@ -672,7 +681,7 @@ walkexpr(Node **np, NodeList **init)
n1 = nod(OADDR, n->list->n, N);
n1->etype = 1; // addr does not escape
fn = chanfn("chanrecv2", 2, r->left->type);
- r = mkcall1(fn, types[TBOOL], init, typename(r->left->type), r->left, n1);
+ r = mkcall1(fn, n->list->next->n->type, init, typename(r->left->type), r->left, n1);
n = nod(OAS, n->list->next->n, r);
typecheck(&n, Etop);
goto ret;
@@ -687,7 +696,7 @@ walkexpr(Node **np, NodeList **init)
walkexpr(&r->right, init);
t = r->left->type;
p = nil;
- if(t->type->width <= 128) { // Check ../../pkg/runtime/hashmap.c:MAXVALUESIZE before changing.
+ if(t->type->width <= 128) { // Check ../../runtime/hashmap.c:MAXVALUESIZE before changing.
switch(simsimtype(t->down)) {
case TINT32:
case TUINT32:
@@ -722,6 +731,12 @@ walkexpr(Node **np, NodeList **init)
var->typecheck = 1;
fn = mapfn(p, t);
r = mkcall1(fn, getoutargx(fn->type), init, typename(t), r->left, key);
+
+ // mapaccess2* returns a typed bool, but due to spec changes,
+ // the boolean result of i.(T) is now untyped so we make it the
+ // same type as the variable on the lhs.
+ if(!isblank(n->list->next->n))
+ r->type->type->down->type = n->list->next->n->type;
n->rlist = list1(r);
n->op = OAS2FUNC;
n->list->n = var;
@@ -769,6 +784,12 @@ walkexpr(Node **np, NodeList **init)
*p = '\0';
fn = syslook(buf, 1);
+
+ // runtime.assert(E|I)2TOK returns a typed bool, but due
+ // to spec changes, the boolean result of i.(T) is now untyped
+ // so we make it the same type as the variable on the lhs.
+ if(!isblank(n->list->next->n))
+ fn->type->type->down->type->type = n->list->next->n->type;
ll = list1(typename(r->type));
ll = list(ll, r->left);
argtype(fn, r->left->type);
@@ -821,9 +842,7 @@ walkexpr(Node **np, NodeList **init)
walkexpr(&n->left, init);
// Optimize convT2E as a two-word copy when T is uintptr-shaped.
- if(!isinter(n->left->type) && isnilinter(n->type) &&
- (n->left->type->width == widthptr) &&
- isint[simsimtype(n->left->type)]) {
+ if(isnilinter(n->type) && isdirectiface(n->left->type) && n->left->type->width == widthptr && isint[simsimtype(n->left->type)]) {
l = nod(OEFACE, typename(n->left->type), n->left);
l->type = n->type;
l->typecheck = n->typecheck;
@@ -865,14 +884,13 @@ walkexpr(Node **np, NodeList **init)
l->class = PEXTERN;
l->xoffset = 0;
sym->def = l;
- ggloblsym(sym, widthptr, 1, 0);
+ ggloblsym(sym, widthptr, DUPOK|NOPTR);
}
l = nod(OADDR, sym->def, N);
l->addable = 1;
ll = list(ll, l);
- if(n->left->type->width == widthptr &&
- isint[simsimtype(n->left->type)]) {
+ if(isdirectiface(n->left->type) && n->left->type->width == widthptr && isint[simsimtype(n->left->type)]) {
/* For pointer types, we can make a special form of optimization
*
* These statements are put onto the expression init list:
@@ -1073,7 +1091,7 @@ walkexpr(Node **np, NodeList **init)
t = n->left->type;
p = nil;
- if(t->type->width <= 128) { // Check ../../pkg/runtime/hashmap.c:MAXVALUESIZE before changing.
+ if(t->type->width <= 128) { // Check ../../runtime/hashmap.c:MAXVALUESIZE before changing.
switch(simsimtype(t->down)) {
case TINT32:
case TUINT32:
@@ -1371,7 +1389,6 @@ walkexpr(Node **np, NodeList **init)
case OMAPLIT:
case OSTRUCTLIT:
case OPTRLIT:
- // XXX TODO do we need to clear var?
var = temp(n->type);
anylit(0, n, var, init);
n = var;
@@ -1471,8 +1488,13 @@ ascompatee(int op, NodeList *nl, NodeList *nr, NodeList **init)
static int
fncall(Node *l, Type *rt)
{
+ Node r;
+
if(l->ullman >= UINF || l->op == OINDEXMAP)
return 1;
+ memset(&r, 0, sizeof r);
+ if(needwritebarrier(l, &r))
+ return 1;
if(eqtype(l->type, rt))
return 0;
return 1;
@@ -1523,8 +1545,10 @@ ascompatet(int op, NodeList *nl, Type **nr, int fp, NodeList **init)
a = nod(OAS, l, nodarg(r, fp));
a = convas(a, init);
ullmancalc(a);
- if(a->ullman >= UINF)
+ if(a->ullman >= UINF) {
+ dump("ascompatet ucount", a);
ucount++;
+ }
nn = list(nn, a);
r = structnext(&saver);
}
@@ -1732,7 +1756,7 @@ ret:
// generate code for print
static Node*
-walkprint(Node *nn, NodeList **init, int defer)
+walkprint(Node *nn, NodeList **init)
{
Node *r;
Node *n;
@@ -1740,31 +1764,17 @@ walkprint(Node *nn, NodeList **init, int defer)
Node *on;
Type *t;
int notfirst, et, op;
- NodeList *calls, *intypes, *args;
- Fmt fmt;
+ NodeList *calls;
on = nil;
op = nn->op;
all = nn->list;
calls = nil;
notfirst = 0;
- intypes = nil;
- args = nil;
-
- memset(&fmt, 0, sizeof fmt);
- if(defer) {
- // defer print turns into defer printf with format string
- fmtstrinit(&fmt);
- intypes = list(intypes, nod(ODCLFIELD, N, typenod(types[TSTRING])));
- args = list1(nod(OXXX, N, N));
- }
for(l=all; l; l=l->next) {
if(notfirst) {
- if(defer)
- fmtprint(&fmt, " ");
- else
- calls = list(calls, mkcall("printsp", T, init));
+ calls = list(calls, mkcall("printsp", T, init));
}
notfirst = op == OPRINTN;
@@ -1792,119 +1802,63 @@ walkprint(Node *nn, NodeList **init, int defer)
t = n->type;
et = n->type->etype;
if(isinter(n->type)) {
- if(defer) {
- if(isnilinter(n->type))
- fmtprint(&fmt, "%%e");
- else
- fmtprint(&fmt, "%%i");
- } else {
- if(isnilinter(n->type))
- on = syslook("printeface", 1);
- else
- on = syslook("printiface", 1);
- argtype(on, n->type); // any-1
- }
+ if(isnilinter(n->type))
+ on = syslook("printeface", 1);
+ else
+ on = syslook("printiface", 1);
+ argtype(on, n->type); // any-1
} else if(isptr[et] || et == TCHAN || et == TMAP || et == TFUNC || et == TUNSAFEPTR) {
- if(defer) {
- fmtprint(&fmt, "%%p");
- } else {
- on = syslook("printpointer", 1);
- argtype(on, n->type); // any-1
- }
+ on = syslook("printpointer", 1);
+ argtype(on, n->type); // any-1
} else if(isslice(n->type)) {
- if(defer) {
- fmtprint(&fmt, "%%a");
- } else {
- on = syslook("printslice", 1);
- argtype(on, n->type); // any-1
- }
+ on = syslook("printslice", 1);
+ argtype(on, n->type); // any-1
} else if(isint[et]) {
- if(defer) {
- if(et == TUINT64)
- fmtprint(&fmt, "%%U");
- else {
- fmtprint(&fmt, "%%D");
- t = types[TINT64];
- }
- } else {
- if(et == TUINT64)
- on = syslook("printuint", 0);
+ if(et == TUINT64) {
+ if((t->sym->pkg == runtimepkg || compiling_runtime) && strcmp(t->sym->name, "hex") == 0)
+ on = syslook("printhex", 0);
else
- on = syslook("printint", 0);
- }
- } else if(isfloat[et]) {
- if(defer) {
- fmtprint(&fmt, "%%f");
- t = types[TFLOAT64];
+ on = syslook("printuint", 0);
} else
- on = syslook("printfloat", 0);
+ on = syslook("printint", 0);
+ } else if(isfloat[et]) {
+ on = syslook("printfloat", 0);
} else if(iscomplex[et]) {
- if(defer) {
- fmtprint(&fmt, "%%C");
- t = types[TCOMPLEX128];
- } else
- on = syslook("printcomplex", 0);
+ on = syslook("printcomplex", 0);
} else if(et == TBOOL) {
- if(defer)
- fmtprint(&fmt, "%%t");
- else
- on = syslook("printbool", 0);
+ on = syslook("printbool", 0);
} else if(et == TSTRING) {
- if(defer)
- fmtprint(&fmt, "%%S");
- else
- on = syslook("printstring", 0);
+ on = syslook("printstring", 0);
} else {
badtype(OPRINT, n->type, T);
continue;
}
- if(!defer) {
- t = *getinarg(on->type);
- if(t != nil)
- t = t->type;
- if(t != nil)
- t = t->type;
- }
+ t = *getinarg(on->type);
+ if(t != nil)
+ t = t->type;
+ if(t != nil)
+ t = t->type;
if(!eqtype(t, n->type)) {
n = nod(OCONV, n, N);
n->type = t;
}
- if(defer) {
- intypes = list(intypes, nod(ODCLFIELD, N, typenod(t)));
- args = list(args, n);
- } else {
- r = nod(OCALL, on, N);
- r->list = list1(n);
- calls = list(calls, r);
- }
+ r = nod(OCALL, on, N);
+ r->list = list1(n);
+ calls = list(calls, r);
}
- if(defer) {
- if(op == OPRINTN)
- fmtprint(&fmt, "\n");
- on = syslook("goprintf", 1);
- on->type = functype(nil, intypes, nil);
- args->n = nod(OLITERAL, N, N);
- args->n->val.ctype = CTSTR;
- args->n->val.u.sval = strlit(fmtstrflush(&fmt));
- r = nod(OCALL, on, N);
- r->list = args;
- typecheck(&r, Etop);
- walkexpr(&r, init);
- } else {
- if(op == OPRINTN)
- calls = list(calls, mkcall("printnl", T, nil));
- typechecklist(calls, Etop);
- walkexprlist(calls, init);
+ if(op == OPRINTN)
+ calls = list(calls, mkcall("printnl", T, nil));
+ typechecklist(calls, Etop);
+ walkexprlist(calls, init);
- r = nod(OEMPTY, N, N);
- typecheck(&r, Etop);
- walkexpr(&r, init);
- r->ninit = calls;
- }
+ r = nod(OEMPTY, N, N);
+ typecheck(&r, Etop);
+ walkexpr(&r, init);
+ r->ninit = calls;
return r;
}
@@ -1914,11 +1868,166 @@ callnew(Type *t)
Node *fn;
dowidth(t);
- fn = syslook("new", 1);
+ fn = syslook("newobject", 1);
argtype(fn, t);
return mkcall1(fn, ptrto(t), nil, typename(t));
}
+static int
+isstack(Node *n)
+{
+ while(n->op == ODOT || n->op == OPAREN || n->op == OCONVNOP || n->op == OINDEX && isfixedarray(n->left->type))
+ n = n->left;
+
+ switch(n->op) {
+ case OINDREG:
+ // OINDREG only ends up in walk if it's indirect of SP.
+ return 1;
+
+ case ONAME:
+ switch(n->class) {
+ case PAUTO:
+ case PPARAM:
+ case PPARAMOUT:
+ return 1;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+static int
+isglobal(Node *n)
+{
+ while(n->op == ODOT || n->op == OPAREN || n->op == OCONVNOP || n->op == OINDEX && isfixedarray(n->left->type))
+ n = n->left;
+
+ switch(n->op) {
+ case ONAME:
+ switch(n->class) {
+ case PEXTERN:
+ return 1;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+// Do we need a write barrier for the assignment l = r?
+int
+needwritebarrier(Node *l, Node *r)
+{
+ if(!use_writebarrier)
+ return 0;
+
+ if(l == N || isblank(l))
+ return 0;
+
+ // No write barrier for write of non-pointers.
+ dowidth(l->type);
+ if(!haspointers(l->type))
+ return 0;
+
+ // No write barrier for write to stack.
+ if(isstack(l))
+ return 0;
+
+ // No write barrier for implicit or explicit zeroing.
+ if(r == N || iszero(r))
+ return 0;
+
+ // No write barrier for initialization to constant.
+ if(r->op == OLITERAL)
+ return 0;
+
+ // No write barrier for storing static (read-only) data.
+ if(r->op == ONAME && strncmp(r->sym->name, "statictmp_", 10) == 0)
+ return 0;
+
+ // No write barrier for storing address of stack values,
+ // which are guaranteed only to be written to the stack.
+ if(r->op == OADDR && isstack(r->left))
+ return 0;
+
+ // No write barrier for storing address of global, which
+ // is live no matter what.
+ if(r->op == OADDR && isglobal(r->left))
+ return 0;
+
+ // No write barrier for reslice: x = x[0:y] or x = append(x, ...).
+ // Both are compiled to modify x directly.
+ // In the case of append, a write barrier may still be needed
+ // if the underlying array grows, but the append code can
+ // generate the write barrier directly in that case.
+ // (It does not yet, but the cost of the write barrier will be
+ // small compared to the cost of the allocation.)
+ if(r->reslice) {
+ switch(r->op) {
+ case OSLICE:
+ case OSLICE3:
+ case OSLICESTR:
+ case OAPPEND:
+ break;
+ default:
+ dump("bad reslice-l", l);
+ dump("bad reslice-r", r);
+ break;
+ }
+ return 0;
+ }
+
+ // Otherwise, be conservative and use write barrier.
+ return 1;
+}
+
+// TODO(rsc): Perhaps componentgen should run before this.
+static Node*
+applywritebarrier(Node *n, NodeList **init)
+{
+ Node *l, *r;
+ Type *t;
+
+ if(n->left && n->right && needwritebarrier(n->left, n->right)) {
+ t = n->left->type;
+ l = nod(OADDR, n->left, N);
+ l->etype = 1; // addr does not escape
+ if(t->width == widthptr) {
+ n = mkcall1(writebarrierfn("writebarrierptr", t, n->right->type), T, init,
+ l, n->right);
+ } else if(t->etype == TSTRING) {
+ n = mkcall1(writebarrierfn("writebarrierstring", t, n->right->type), T, init,
+ l, n->right);
+ } else if(isslice(t)) {
+ n = mkcall1(writebarrierfn("writebarrierslice", t, n->right->type), T, init,
+ l, n->right);
+ } else if(isinter(t)) {
+ n = mkcall1(writebarrierfn("writebarrieriface", t, n->right->type), T, init,
+ l, n->right);
+ } else if(t->width == 2*widthptr) {
+ n = mkcall1(writebarrierfn("writebarrierfat2", t, n->right->type), T, init,
+ l, nodnil(), n->right);
+ } else if(t->width == 3*widthptr) {
+ n = mkcall1(writebarrierfn("writebarrierfat3", t, n->right->type), T, init,
+ l, nodnil(), n->right);
+ } else if(t->width == 4*widthptr) {
+ n = mkcall1(writebarrierfn("writebarrierfat4", t, n->right->type), T, init,
+ l, nodnil(), n->right);
+ } else {
+ r = n->right;
+ while(r->op == OCONVNOP)
+ r = r->left;
+ r = nod(OADDR, r, N);
+ r->etype = 1; // addr does not escape
+ //warnl(n->lineno, "writebarrierfat %T %N", t, r);
+ n = mkcall1(writebarrierfn("writebarrierfat", t, r->left->type), T, init,
+ typename(t), l, r);
+ }
+ }
+ return n;
+}
+
static Node*
convas(Node *n, NodeList **init)
{
@@ -1958,11 +2067,10 @@ convas(Node *n, NodeList **init)
goto out;
}
- if(eqtype(lt, rt))
- goto out;
-
- n->right = assignconv(n->right, lt, "assignment");
- walkexpr(&n->right, init);
+ if(!eqtype(lt, rt)) {
+ n->right = assignconv(n->right, lt, "assignment");
+ walkexpr(&n->right, init);
+ }
out:
ullmancalc(n);
@@ -2355,6 +2463,8 @@ paramstoheap(Type **argin, int out)
continue;
// generate allocation & copying code
+ if(compiling_runtime)
+ yyerror("%N escapes to heap, not allowed in runtime.", v);
if(v->alloc == nil)
v->alloc = callnew(v->type);
nn = list(nn, nod(OAS, v->heapaddr, v->alloc));
@@ -2512,6 +2622,17 @@ mapfndel(char *name, Type *t)
}
static Node*
+writebarrierfn(char *name, Type *l, Type *r)
+{
+ Node *fn;
+
+ fn = syslook(name, 1);
+ argtype(fn, l);
+ argtype(fn, r);
+ return fn;
+}
+
+static Node*
addstr(Node *n, NodeList **init)
{
Node *r, *cat, *slice;
@@ -2620,7 +2741,7 @@ appendslice(Node *n, NodeList **init)
if(l2->type->etype == TSTRING)
fn = syslook("slicestringcopy", 1);
else
- fn = syslook("copy", 1);
+ fn = syslook("slicecopy", 1);
argtype(fn, l1->type);
argtype(fn, l2->type);
nt = mkcall1(fn, types[TINT], &l,
@@ -2758,7 +2879,7 @@ copyany(Node *n, NodeList **init, int runtimecall)
if(n->right->type->etype == TSTRING)
fn = syslook("slicestringcopy", 1);
else
- fn = syslook("copy", 1);
+ fn = syslook("slicecopy", 1);
argtype(fn, n->left->type);
argtype(fn, n->right->type);
return mkcall1(fn, n->type, init,
@@ -2863,14 +2984,14 @@ sliceany(Node* n, NodeList **init)
lb = N;
}
- // dynamic checks convert all bounds to unsigned to save us the bound < 0 comparison
- // generate
- // if hb > bound || lb > hb { panicslice() }
+ // Checking src[lb:hb:cb] or src[lb:hb].
+ // if chk0 || chk1 || chk2 { panicslice() }
chk = N;
- chk0 = N;
- chk1 = N;
- chk2 = N;
+ chk0 = N; // cap(src) < cb
+ chk1 = N; // cb < hb for src[lb:hb:cb]; cap(src) < hb for src[lb:hb]
+ chk2 = N; // hb < lb
+ // All comparisons are unsigned to avoid testing < 0.
bt = types[simtype[TUINT]];
if(cb != N && cb->type->width > 4)
bt = types[TUINT64];
@@ -3010,10 +3131,10 @@ eqfor(Type *t)
n = newname(sym);
n->class = PFUNC;
ntype = nod(OTFUNC, N, N);
- ntype->list = list(ntype->list, nod(ODCLFIELD, N, typenod(ptrto(types[TBOOL]))));
- ntype->list = list(ntype->list, nod(ODCLFIELD, N, typenod(types[TUINTPTR])));
ntype->list = list(ntype->list, nod(ODCLFIELD, N, typenod(ptrto(t))));
ntype->list = list(ntype->list, nod(ODCLFIELD, N, typenod(ptrto(t))));
+ ntype->list = list(ntype->list, nod(ODCLFIELD, N, typenod(types[TUINTPTR])));
+ ntype->rlist = list(ntype->rlist, nod(ODCLFIELD, N, typenod(types[TBOOL])));
typecheck(&ntype, Etype);
n->type = ntype->type;
return n;
@@ -3034,10 +3155,9 @@ countfield(Type *t)
static void
walkcompare(Node **np, NodeList **init)
{
- Node *n, *l, *r, *fn, *call, *a, *li, *ri, *expr;
+ Node *n, *l, *r, *call, *a, *li, *ri, *expr, *cmpl, *cmpr;
int andor, i;
Type *t, *t1;
- static Node *tempbool;
n = *np;
@@ -3055,17 +3175,25 @@ walkcompare(Node **np, NodeList **init)
break;
}
- if(!islvalue(n->left) || !islvalue(n->right))
- goto hard;
+ cmpl = n->left;
+ while(cmpl != N && cmpl->op == OCONVNOP)
+ cmpl = cmpl->left;
+ cmpr = n->right;
+ while(cmpr != N && cmpr->op == OCONVNOP)
+ cmpr = cmpr->left;
+
+ if(!islvalue(cmpl) || !islvalue(cmpr)) {
+ fatal("arguments of comparison must be lvalues - %N %N", cmpl, cmpr);
+ }
l = temp(ptrto(t));
- a = nod(OAS, l, nod(OADDR, n->left, N));
+ a = nod(OAS, l, nod(OADDR, cmpl, N));
a->right->etype = 1; // addr does not escape
typecheck(&a, Etop);
*init = list(*init, a);
r = temp(ptrto(t));
- a = nod(OAS, r, nod(OADDR, n->right, N));
+ a = nod(OAS, r, nod(OADDR, cmpr, N));
a->right->etype = 1; // addr does not escape
typecheck(&a, Etop);
*init = list(*init, a);
@@ -3115,57 +3243,16 @@ walkcompare(Node **np, NodeList **init)
goto ret;
}
- // Chose not to inline, but still have addresses.
- // Call equality function directly.
- // The equality function requires a bool pointer for
- // storing its address, because it has to be callable
- // from C, and C can't access an ordinary Go return value.
- // To avoid creating many temporaries, cache one per function.
- if(tempbool == N || tempbool->curfn != curfn)
- tempbool = temp(types[TBOOL]);
-
+ // Chose not to inline. Call equality function directly.
call = nod(OCALL, eqfor(t), N);
- a = nod(OADDR, tempbool, N);
- a->etype = 1; // does not escape
- call->list = list(call->list, a);
- call->list = list(call->list, nodintconst(t->width));
call->list = list(call->list, l);
call->list = list(call->list, r);
- typecheck(&call, Etop);
- walkstmt(&call);
- *init = list(*init, call);
-
- // tempbool cannot be used directly as multiple comparison
- // expressions may exist in the same statement. Create another
- // temporary to hold the value (its address is not taken so it can
- // be optimized away).
- r = temp(types[TBOOL]);
- a = nod(OAS, r, tempbool);
- typecheck(&a, Etop);
- walkstmt(&a);
- *init = list(*init, a);
-
+ call->list = list(call->list, nodintconst(t->width));
+ r = call;
if(n->op != OEQ)
r = nod(ONOT, r, N);
goto ret;
-hard:
- // Cannot take address of one or both of the operands.
- // Instead, pass directly to runtime helper function.
- // Easier on the stack than passing the address
- // of temporary variables, because we are better at reusing
- // the argument space than temporary variable space.
- fn = syslook("equal", 1);
- l = n->left;
- r = n->right;
- argtype(fn, n->left->type);
- argtype(fn, n->left->type);
- r = mkcall1(fn, n->type, init, typename(n->left->type), l, r);
- if(n->op == ONE) {
- r = nod(ONOT, r, N);
- }
- goto ret;
-
ret:
typecheck(&r, Erv);
walkexpr(&r, init);
@@ -3780,3 +3867,71 @@ candiscard(Node *n)
return 1;
}
+
+// rewrite
+// print(x, y, z)
+// into
+// func(a1, a2, a3) {
+// print(a1, a2, a3)
+// }(x, y, z)
+// and same for println.
+static void
+walkprintfunc(Node **np, NodeList **init)
+{
+ Node *n;
+ Node *a, *fn, *t, *oldfn;
+ NodeList *l, *printargs;
+ int num;
+ char buf[100];
+ static int prgen;
+
+ n = *np;
+
+ if(n->ninit != nil) {
+ walkstmtlist(n->ninit);
+ *init = concat(*init, n->ninit);
+ n->ninit = nil;
+ }
+
+ t = nod(OTFUNC, N, N);
+ num = 0;
+ printargs = nil;
+ for(l=n->list; l != nil; l=l->next) {
+ snprint(buf, sizeof buf, "a%d", num++);
+ a = nod(ODCLFIELD, newname(lookup(buf)), typenod(l->n->type));
+ t->list = list(t->list, a);
+ printargs = list(printargs, a->left);
+ }
+
+ fn = nod(ODCLFUNC, N, N);
+ snprint(buf, sizeof buf, "print·%d", ++prgen);
+ fn->nname = newname(lookup(buf));
+ fn->nname->defn = fn;
+ fn->nname->ntype = t;
+ declare(fn->nname, PFUNC);
+
+ oldfn = curfn;
+ curfn = nil;
+ funchdr(fn);
+
+ a = nod(n->op, N, N);
+ a->list = printargs;
+ typecheck(&a, Etop);
+ walkstmt(&a);
+
+ fn->nbody = list1(a);
+
+ funcbody(fn);
+
+ typecheck(&fn, Etop);
+ typechecklist(fn->nbody, Etop);
+ xtop = list(xtop, fn);
+ curfn = oldfn;
+
+ a = nod(OCALL, N, N);
+ a->left = fn->nname;
+ a->list = n->list;
+ typecheck(&a, Etop);
+ walkexpr(&a, init);
+ *np = a;
+}
diff --git a/src/cmd/gc/y.tab.c b/src/cmd/gc/y.tab.c
index 08d8ecff2..f464126ac 100644
--- a/src/cmd/gc/y.tab.c
+++ b/src/cmd/gc/y.tab.c
@@ -440,16 +440,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 4
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 2270
+#define YYLAST 2201
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 76
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 142
/* YYNRULES -- Number of rules. */
-#define YYNRULES 351
+#define YYNRULES 352
/* YYNRULES -- Number of states. */
-#define YYNSTATES 667
+#define YYNSTATES 669
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
@@ -506,35 +506,35 @@ static const yytype_uint16 yyprhs[] =
129, 132, 137, 141, 146, 150, 152, 155, 157, 159,
162, 164, 168, 172, 176, 179, 182, 186, 192, 198,
201, 202, 207, 208, 212, 213, 216, 217, 222, 227,
- 232, 238, 240, 242, 245, 246, 250, 252, 256, 257,
- 258, 259, 268, 269, 275, 276, 279, 280, 283, 284,
- 285, 293, 294, 300, 302, 306, 310, 314, 318, 322,
- 326, 330, 334, 338, 342, 346, 350, 354, 358, 362,
- 366, 370, 374, 378, 382, 384, 387, 390, 393, 396,
- 399, 402, 405, 408, 412, 418, 425, 427, 429, 433,
- 439, 445, 450, 457, 466, 468, 474, 480, 486, 494,
- 496, 497, 501, 503, 508, 510, 515, 517, 521, 523,
- 525, 527, 529, 531, 533, 535, 536, 538, 540, 542,
- 544, 549, 554, 556, 558, 560, 563, 565, 567, 569,
- 571, 573, 577, 579, 581, 583, 586, 588, 590, 592,
- 594, 598, 600, 602, 604, 606, 608, 610, 612, 614,
- 616, 620, 625, 630, 633, 637, 643, 645, 647, 650,
- 654, 660, 664, 670, 674, 678, 684, 693, 699, 708,
- 714, 715, 719, 720, 722, 726, 728, 733, 736, 737,
- 741, 743, 747, 749, 753, 755, 759, 761, 765, 767,
- 771, 775, 778, 783, 787, 793, 799, 801, 805, 807,
- 810, 812, 816, 821, 823, 826, 829, 831, 833, 837,
- 838, 841, 842, 844, 846, 848, 850, 852, 854, 856,
- 858, 860, 861, 866, 868, 871, 874, 877, 880, 883,
- 886, 888, 892, 894, 898, 900, 904, 906, 910, 912,
- 916, 918, 920, 924, 928, 929, 932, 933, 935, 936,
- 938, 939, 941, 942, 944, 945, 947, 948, 950, 951,
- 953, 954, 956, 957, 959, 964, 969, 975, 982, 987,
- 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010,
- 1014, 1019, 1025, 1030, 1035, 1038, 1041, 1046, 1050, 1054,
- 1060, 1064, 1069, 1073, 1079, 1081, 1082, 1084, 1088, 1090,
- 1092, 1095, 1097, 1099, 1105, 1106, 1109, 1111, 1115, 1117,
- 1121, 1123
+ 232, 235, 241, 243, 245, 248, 249, 253, 255, 259,
+ 260, 261, 262, 271, 272, 278, 279, 282, 283, 286,
+ 287, 288, 296, 297, 303, 305, 309, 313, 317, 321,
+ 325, 329, 333, 337, 341, 345, 349, 353, 357, 361,
+ 365, 369, 373, 377, 381, 385, 387, 390, 393, 396,
+ 399, 402, 405, 408, 411, 415, 421, 428, 430, 432,
+ 436, 442, 448, 453, 460, 469, 471, 477, 483, 489,
+ 497, 499, 500, 504, 506, 511, 513, 518, 520, 524,
+ 526, 528, 530, 532, 534, 536, 538, 539, 541, 543,
+ 545, 547, 552, 557, 559, 561, 563, 566, 568, 570,
+ 572, 574, 576, 580, 582, 584, 586, 589, 591, 593,
+ 595, 597, 601, 603, 605, 607, 609, 611, 613, 615,
+ 617, 619, 623, 628, 633, 636, 640, 646, 648, 650,
+ 653, 657, 663, 667, 673, 677, 681, 687, 696, 702,
+ 711, 717, 718, 722, 723, 725, 729, 731, 736, 739,
+ 740, 744, 746, 750, 752, 756, 758, 762, 764, 768,
+ 770, 774, 778, 781, 786, 790, 796, 802, 804, 808,
+ 810, 813, 815, 819, 824, 826, 829, 832, 834, 836,
+ 840, 841, 844, 845, 847, 849, 851, 853, 855, 857,
+ 859, 861, 863, 864, 869, 871, 874, 877, 880, 883,
+ 886, 889, 891, 895, 897, 901, 903, 907, 909, 913,
+ 915, 919, 921, 923, 927, 931, 932, 935, 936, 938,
+ 939, 941, 942, 944, 945, 947, 948, 950, 951, 953,
+ 954, 956, 957, 959, 960, 962, 967, 972, 978, 985,
+ 990, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011,
+ 1013, 1017, 1022, 1028, 1033, 1038, 1041, 1044, 1049, 1053,
+ 1057, 1063, 1067, 1072, 1076, 1082, 1084, 1085, 1087, 1091,
+ 1093, 1095, 1098, 1100, 1102, 1108, 1109, 1112, 1114, 1118,
+ 1120, 1124, 1126
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -563,96 +563,96 @@ static const yytype_int16 yyrhs[] =
-1, -1, 67, 101, 183, 68, -1, -1, 99, 103,
183, -1, -1, 104, 102, -1, -1, 35, 106, 183,
68, -1, 186, 65, 26, 126, -1, 186, 5, 26,
- 126, -1, 194, 62, 194, 62, 194, -1, 194, -1,
- 107, -1, 108, 105, -1, -1, 16, 111, 109, -1,
- 194, -1, 194, 62, 194, -1, -1, -1, -1, 20,
- 114, 112, 115, 105, 116, 119, 120, -1, -1, 14,
- 20, 118, 112, 105, -1, -1, 119, 117, -1, -1,
- 14, 100, -1, -1, -1, 30, 122, 112, 123, 35,
- 104, 68, -1, -1, 28, 125, 35, 104, 68, -1,
- 127, -1, 126, 47, 126, -1, 126, 33, 126, -1,
- 126, 38, 126, -1, 126, 46, 126, -1, 126, 45,
- 126, -1, 126, 43, 126, -1, 126, 39, 126, -1,
- 126, 40, 126, -1, 126, 49, 126, -1, 126, 50,
- 126, -1, 126, 51, 126, -1, 126, 52, 126, -1,
- 126, 53, 126, -1, 126, 54, 126, -1, 126, 55,
- 126, -1, 126, 56, 126, -1, 126, 34, 126, -1,
- 126, 44, 126, -1, 126, 48, 126, -1, 126, 36,
- 126, -1, 134, -1, 53, 127, -1, 56, 127, -1,
- 49, 127, -1, 50, 127, -1, 69, 127, -1, 70,
- 127, -1, 52, 127, -1, 36, 127, -1, 134, 59,
- 60, -1, 134, 59, 187, 191, 60, -1, 134, 59,
- 187, 11, 191, 60, -1, 3, -1, 143, -1, 134,
- 63, 141, -1, 134, 63, 59, 135, 60, -1, 134,
- 63, 59, 31, 60, -1, 134, 71, 126, 72, -1,
- 134, 71, 192, 66, 192, 72, -1, 134, 71, 192,
- 66, 192, 66, 192, 72, -1, 128, -1, 149, 59,
- 126, 191, 60, -1, 150, 137, 130, 189, 68, -1,
- 129, 67, 130, 189, 68, -1, 59, 135, 60, 67,
- 130, 189, 68, -1, 165, -1, -1, 126, 66, 133,
- -1, 126, -1, 67, 130, 189, 68, -1, 126, -1,
- 67, 130, 189, 68, -1, 129, -1, 59, 135, 60,
- -1, 126, -1, 147, -1, 146, -1, 35, -1, 67,
- -1, 141, -1, 141, -1, -1, 138, -1, 24, -1,
- 142, -1, 73, -1, 74, 3, 63, 24, -1, 74,
- 3, 63, 73, -1, 141, -1, 138, -1, 11, -1,
- 11, 146, -1, 155, -1, 161, -1, 153, -1, 154,
- -1, 152, -1, 59, 146, 60, -1, 155, -1, 161,
- -1, 153, -1, 53, 147, -1, 161, -1, 153, -1,
- 154, -1, 152, -1, 59, 146, 60, -1, 161, -1,
- 153, -1, 153, -1, 155, -1, 161, -1, 153, -1,
- 154, -1, 152, -1, 143, -1, 143, 63, 141, -1,
- 71, 192, 72, 146, -1, 71, 11, 72, 146, -1,
- 8, 148, -1, 8, 36, 146, -1, 23, 71, 146,
- 72, 146, -1, 156, -1, 157, -1, 53, 146, -1,
- 36, 8, 146, -1, 29, 137, 170, 190, 68, -1,
- 29, 137, 68, -1, 22, 137, 171, 190, 68, -1,
- 22, 137, 68, -1, 17, 159, 162, -1, 141, 59,
- 179, 60, 163, -1, 59, 179, 60, 141, 59, 179,
- 60, 163, -1, 200, 59, 195, 60, 210, -1, 59,
- 215, 60, 141, 59, 195, 60, 210, -1, 17, 59,
- 179, 60, 163, -1, -1, 67, 183, 68, -1, -1,
- 151, -1, 59, 179, 60, -1, 161, -1, 164, 137,
- 183, 68, -1, 164, 1, -1, -1, 166, 90, 62,
- -1, 93, -1, 167, 62, 93, -1, 95, -1, 168,
- 62, 95, -1, 97, -1, 169, 62, 97, -1, 172,
- -1, 170, 62, 172, -1, 175, -1, 171, 62, 175,
- -1, 184, 146, 198, -1, 174, 198, -1, 59, 174,
- 60, 198, -1, 53, 174, 198, -1, 59, 53, 174,
- 60, 198, -1, 53, 59, 174, 60, 198, -1, 24,
- -1, 24, 63, 141, -1, 173, -1, 138, 176, -1,
- 173, -1, 59, 173, 60, -1, 59, 179, 60, 163,
- -1, 136, -1, 141, 136, -1, 141, 145, -1, 145,
- -1, 177, -1, 178, 75, 177, -1, -1, 178, 191,
- -1, -1, 100, -1, 91, -1, 181, -1, 1, -1,
- 98, -1, 110, -1, 121, -1, 124, -1, 113, -1,
- -1, 144, 66, 182, 180, -1, 15, -1, 6, 140,
- -1, 10, 140, -1, 18, 128, -1, 13, 128, -1,
- 19, 138, -1, 27, 193, -1, 180, -1, 183, 62,
- 180, -1, 138, -1, 184, 75, 138, -1, 139, -1,
- 185, 75, 139, -1, 126, -1, 186, 75, 126, -1,
- 135, -1, 187, 75, 135, -1, 131, -1, 132, -1,
- 188, 75, 131, -1, 188, 75, 132, -1, -1, 188,
- 191, -1, -1, 62, -1, -1, 75, -1, -1, 126,
- -1, -1, 186, -1, -1, 98, -1, -1, 215, -1,
- -1, 216, -1, -1, 217, -1, -1, 3, -1, 21,
- 24, 3, 62, -1, 32, 200, 202, 62, -1, 9,
- 200, 65, 213, 62, -1, 9, 200, 202, 65, 213,
- 62, -1, 31, 201, 202, 62, -1, 17, 160, 162,
- 62, -1, 142, -1, 200, -1, 204, -1, 205, -1,
- 206, -1, 204, -1, 206, -1, 142, -1, 24, -1,
- 71, 72, 202, -1, 71, 3, 72, 202, -1, 23,
- 71, 202, 72, 202, -1, 29, 67, 196, 68, -1,
- 22, 67, 197, 68, -1, 53, 202, -1, 8, 203,
- -1, 8, 59, 205, 60, -1, 8, 36, 202, -1,
- 36, 8, 202, -1, 17, 59, 195, 60, 210, -1,
- 141, 202, 198, -1, 141, 11, 202, 198, -1, 141,
- 202, 198, -1, 141, 59, 195, 60, 210, -1, 202,
- -1, -1, 211, -1, 59, 195, 60, -1, 202, -1,
- 3, -1, 50, 3, -1, 141, -1, 212, -1, 59,
- 212, 49, 212, 60, -1, -1, 214, 199, -1, 207,
- -1, 215, 75, 207, -1, 208, -1, 216, 62, 208,
- -1, 209, -1, 217, 62, 209, -1
+ 126, -1, 26, 126, -1, 194, 62, 194, 62, 194,
+ -1, 194, -1, 107, -1, 108, 105, -1, -1, 16,
+ 111, 109, -1, 194, -1, 194, 62, 194, -1, -1,
+ -1, -1, 20, 114, 112, 115, 105, 116, 119, 120,
+ -1, -1, 14, 20, 118, 112, 105, -1, -1, 119,
+ 117, -1, -1, 14, 100, -1, -1, -1, 30, 122,
+ 112, 123, 35, 104, 68, -1, -1, 28, 125, 35,
+ 104, 68, -1, 127, -1, 126, 47, 126, -1, 126,
+ 33, 126, -1, 126, 38, 126, -1, 126, 46, 126,
+ -1, 126, 45, 126, -1, 126, 43, 126, -1, 126,
+ 39, 126, -1, 126, 40, 126, -1, 126, 49, 126,
+ -1, 126, 50, 126, -1, 126, 51, 126, -1, 126,
+ 52, 126, -1, 126, 53, 126, -1, 126, 54, 126,
+ -1, 126, 55, 126, -1, 126, 56, 126, -1, 126,
+ 34, 126, -1, 126, 44, 126, -1, 126, 48, 126,
+ -1, 126, 36, 126, -1, 134, -1, 53, 127, -1,
+ 56, 127, -1, 49, 127, -1, 50, 127, -1, 69,
+ 127, -1, 70, 127, -1, 52, 127, -1, 36, 127,
+ -1, 134, 59, 60, -1, 134, 59, 187, 191, 60,
+ -1, 134, 59, 187, 11, 191, 60, -1, 3, -1,
+ 143, -1, 134, 63, 141, -1, 134, 63, 59, 135,
+ 60, -1, 134, 63, 59, 31, 60, -1, 134, 71,
+ 126, 72, -1, 134, 71, 192, 66, 192, 72, -1,
+ 134, 71, 192, 66, 192, 66, 192, 72, -1, 128,
+ -1, 149, 59, 126, 191, 60, -1, 150, 137, 130,
+ 189, 68, -1, 129, 67, 130, 189, 68, -1, 59,
+ 135, 60, 67, 130, 189, 68, -1, 165, -1, -1,
+ 126, 66, 133, -1, 126, -1, 67, 130, 189, 68,
+ -1, 126, -1, 67, 130, 189, 68, -1, 129, -1,
+ 59, 135, 60, -1, 126, -1, 147, -1, 146, -1,
+ 35, -1, 67, -1, 141, -1, 141, -1, -1, 138,
+ -1, 24, -1, 142, -1, 73, -1, 74, 3, 63,
+ 24, -1, 74, 3, 63, 73, -1, 141, -1, 138,
+ -1, 11, -1, 11, 146, -1, 155, -1, 161, -1,
+ 153, -1, 154, -1, 152, -1, 59, 146, 60, -1,
+ 155, -1, 161, -1, 153, -1, 53, 147, -1, 161,
+ -1, 153, -1, 154, -1, 152, -1, 59, 146, 60,
+ -1, 161, -1, 153, -1, 153, -1, 155, -1, 161,
+ -1, 153, -1, 154, -1, 152, -1, 143, -1, 143,
+ 63, 141, -1, 71, 192, 72, 146, -1, 71, 11,
+ 72, 146, -1, 8, 148, -1, 8, 36, 146, -1,
+ 23, 71, 146, 72, 146, -1, 156, -1, 157, -1,
+ 53, 146, -1, 36, 8, 146, -1, 29, 137, 170,
+ 190, 68, -1, 29, 137, 68, -1, 22, 137, 171,
+ 190, 68, -1, 22, 137, 68, -1, 17, 159, 162,
+ -1, 141, 59, 179, 60, 163, -1, 59, 179, 60,
+ 141, 59, 179, 60, 163, -1, 200, 59, 195, 60,
+ 210, -1, 59, 215, 60, 141, 59, 195, 60, 210,
+ -1, 17, 59, 179, 60, 163, -1, -1, 67, 183,
+ 68, -1, -1, 151, -1, 59, 179, 60, -1, 161,
+ -1, 164, 137, 183, 68, -1, 164, 1, -1, -1,
+ 166, 90, 62, -1, 93, -1, 167, 62, 93, -1,
+ 95, -1, 168, 62, 95, -1, 97, -1, 169, 62,
+ 97, -1, 172, -1, 170, 62, 172, -1, 175, -1,
+ 171, 62, 175, -1, 184, 146, 198, -1, 174, 198,
+ -1, 59, 174, 60, 198, -1, 53, 174, 198, -1,
+ 59, 53, 174, 60, 198, -1, 53, 59, 174, 60,
+ 198, -1, 24, -1, 24, 63, 141, -1, 173, -1,
+ 138, 176, -1, 173, -1, 59, 173, 60, -1, 59,
+ 179, 60, 163, -1, 136, -1, 141, 136, -1, 141,
+ 145, -1, 145, -1, 177, -1, 178, 75, 177, -1,
+ -1, 178, 191, -1, -1, 100, -1, 91, -1, 181,
+ -1, 1, -1, 98, -1, 110, -1, 121, -1, 124,
+ -1, 113, -1, -1, 144, 66, 182, 180, -1, 15,
+ -1, 6, 140, -1, 10, 140, -1, 18, 128, -1,
+ 13, 128, -1, 19, 138, -1, 27, 193, -1, 180,
+ -1, 183, 62, 180, -1, 138, -1, 184, 75, 138,
+ -1, 139, -1, 185, 75, 139, -1, 126, -1, 186,
+ 75, 126, -1, 135, -1, 187, 75, 135, -1, 131,
+ -1, 132, -1, 188, 75, 131, -1, 188, 75, 132,
+ -1, -1, 188, 191, -1, -1, 62, -1, -1, 75,
+ -1, -1, 126, -1, -1, 186, -1, -1, 98, -1,
+ -1, 215, -1, -1, 216, -1, -1, 217, -1, -1,
+ 3, -1, 21, 24, 3, 62, -1, 32, 200, 202,
+ 62, -1, 9, 200, 65, 213, 62, -1, 9, 200,
+ 202, 65, 213, 62, -1, 31, 201, 202, 62, -1,
+ 17, 160, 162, 62, -1, 142, -1, 200, -1, 204,
+ -1, 205, -1, 206, -1, 204, -1, 206, -1, 142,
+ -1, 24, -1, 71, 72, 202, -1, 71, 3, 72,
+ 202, -1, 23, 71, 202, 72, 202, -1, 29, 67,
+ 196, 68, -1, 22, 67, 197, 68, -1, 53, 202,
+ -1, 8, 203, -1, 8, 59, 205, 60, -1, 8,
+ 36, 202, -1, 36, 8, 202, -1, 17, 59, 195,
+ 60, 210, -1, 141, 202, 198, -1, 141, 11, 202,
+ 198, -1, 141, 202, 198, -1, 141, 59, 195, 60,
+ 210, -1, 202, -1, -1, 211, -1, 59, 195, 60,
+ -1, 202, -1, 3, -1, 50, 3, -1, 141, -1,
+ 212, -1, 59, 212, 49, 212, 60, -1, -1, 214,
+ 199, -1, 207, -1, 215, 75, 207, -1, 208, -1,
+ 216, 62, 208, -1, 209, -1, 217, 62, 209, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
@@ -663,37 +663,37 @@ static const yytype_uint16 yyrline[] =
263, 264, 271, 271, 284, 288, 289, 293, 298, 304,
308, 312, 316, 322, 328, 334, 339, 343, 347, 353,
359, 363, 367, 373, 377, 383, 384, 388, 394, 403,
- 409, 427, 432, 444, 460, 465, 472, 492, 510, 519,
- 538, 537, 552, 551, 583, 586, 593, 592, 603, 609,
- 618, 629, 635, 638, 646, 645, 656, 662, 674, 678,
- 683, 673, 704, 703, 716, 719, 725, 728, 740, 744,
- 739, 762, 761, 777, 778, 782, 786, 790, 794, 798,
- 802, 806, 810, 814, 818, 822, 826, 830, 834, 838,
- 842, 846, 850, 855, 861, 862, 866, 877, 881, 885,
- 889, 894, 898, 908, 912, 917, 925, 929, 930, 941,
- 945, 949, 953, 957, 965, 966, 972, 979, 985, 992,
- 995, 1002, 1008, 1025, 1032, 1033, 1040, 1041, 1060, 1061,
- 1064, 1067, 1071, 1082, 1091, 1097, 1100, 1103, 1110, 1111,
- 1117, 1130, 1145, 1153, 1165, 1170, 1176, 1177, 1178, 1179,
- 1180, 1181, 1187, 1188, 1189, 1190, 1196, 1197, 1198, 1199,
- 1200, 1206, 1207, 1210, 1213, 1214, 1215, 1216, 1217, 1220,
- 1221, 1234, 1238, 1243, 1248, 1253, 1257, 1258, 1261, 1267,
- 1274, 1280, 1287, 1293, 1304, 1318, 1347, 1387, 1412, 1430,
- 1439, 1442, 1450, 1454, 1458, 1465, 1471, 1476, 1488, 1491,
- 1501, 1502, 1508, 1509, 1515, 1519, 1525, 1526, 1532, 1536,
- 1542, 1565, 1570, 1576, 1582, 1589, 1598, 1607, 1622, 1628,
- 1633, 1637, 1644, 1657, 1658, 1664, 1670, 1673, 1677, 1683,
- 1686, 1695, 1698, 1699, 1703, 1704, 1710, 1711, 1712, 1713,
- 1714, 1716, 1715, 1730, 1736, 1740, 1744, 1748, 1752, 1757,
- 1776, 1782, 1790, 1794, 1800, 1804, 1810, 1814, 1820, 1824,
- 1833, 1837, 1841, 1845, 1851, 1854, 1862, 1863, 1865, 1866,
- 1869, 1872, 1875, 1878, 1881, 1884, 1887, 1890, 1893, 1896,
- 1899, 1902, 1905, 1908, 1914, 1918, 1922, 1926, 1930, 1934,
- 1954, 1961, 1972, 1973, 1974, 1977, 1978, 1981, 1985, 1995,
- 1999, 2003, 2007, 2011, 2015, 2019, 2025, 2031, 2039, 2047,
- 2053, 2060, 2076, 2098, 2102, 2108, 2111, 2114, 2118, 2128,
- 2132, 2151, 2159, 2160, 2172, 2173, 2176, 2180, 2186, 2190,
- 2196, 2200
+ 409, 427, 432, 444, 460, 466, 474, 494, 512, 521,
+ 540, 539, 554, 553, 585, 588, 595, 594, 605, 611,
+ 618, 625, 636, 642, 645, 653, 652, 663, 669, 681,
+ 685, 690, 680, 711, 710, 723, 726, 732, 735, 747,
+ 751, 746, 769, 768, 784, 785, 789, 793, 797, 801,
+ 805, 809, 813, 817, 821, 825, 829, 833, 837, 841,
+ 845, 849, 853, 857, 862, 868, 869, 873, 884, 888,
+ 892, 896, 901, 905, 915, 919, 924, 932, 936, 937,
+ 948, 952, 956, 960, 964, 972, 973, 979, 986, 992,
+ 999, 1002, 1009, 1015, 1032, 1039, 1040, 1047, 1048, 1067,
+ 1068, 1071, 1074, 1078, 1089, 1098, 1104, 1107, 1110, 1117,
+ 1118, 1124, 1137, 1152, 1160, 1172, 1177, 1183, 1184, 1185,
+ 1186, 1187, 1188, 1194, 1195, 1196, 1197, 1203, 1204, 1205,
+ 1206, 1207, 1213, 1214, 1217, 1220, 1221, 1222, 1223, 1224,
+ 1227, 1228, 1241, 1245, 1250, 1255, 1260, 1264, 1265, 1268,
+ 1274, 1281, 1287, 1294, 1300, 1311, 1326, 1355, 1393, 1418,
+ 1436, 1445, 1448, 1456, 1460, 1464, 1471, 1477, 1482, 1494,
+ 1497, 1508, 1509, 1515, 1516, 1522, 1526, 1532, 1533, 1539,
+ 1543, 1549, 1572, 1577, 1583, 1589, 1596, 1605, 1614, 1629,
+ 1635, 1640, 1644, 1651, 1664, 1665, 1671, 1677, 1680, 1684,
+ 1690, 1693, 1702, 1705, 1706, 1710, 1711, 1717, 1718, 1719,
+ 1720, 1721, 1723, 1722, 1737, 1743, 1747, 1751, 1755, 1759,
+ 1764, 1783, 1789, 1797, 1801, 1807, 1811, 1817, 1821, 1827,
+ 1831, 1840, 1844, 1848, 1852, 1858, 1861, 1869, 1870, 1872,
+ 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 1900,
+ 1903, 1906, 1909, 1912, 1915, 1921, 1925, 1929, 1933, 1937,
+ 1941, 1961, 1968, 1979, 1980, 1981, 1984, 1985, 1988, 1992,
+ 2002, 2006, 2010, 2014, 2018, 2022, 2026, 2032, 2038, 2046,
+ 2054, 2060, 2067, 2083, 2105, 2109, 2115, 2118, 2121, 2125,
+ 2135, 2139, 2158, 2166, 2167, 2179, 2180, 2183, 2187, 2193,
+ 2197, 2203, 2207
};
#endif
@@ -772,35 +772,35 @@ static const yytype_uint8 yyr1[] =
93, 93, 93, 94, 94, 95, 95, 95, 96, 97,
98, 98, 98, 98, 98, 98, 99, 99, 99, 99,
101, 100, 103, 102, 104, 104, 106, 105, 107, 107,
- 108, 108, 108, 109, 111, 110, 112, 112, 114, 115,
- 116, 113, 118, 117, 119, 119, 120, 120, 122, 123,
- 121, 125, 124, 126, 126, 126, 126, 126, 126, 126,
+ 107, 108, 108, 108, 109, 111, 110, 112, 112, 114,
+ 115, 116, 113, 118, 117, 119, 119, 120, 120, 122,
+ 123, 121, 125, 124, 126, 126, 126, 126, 126, 126,
126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
- 126, 126, 126, 126, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 128, 128, 128, 129, 129, 129, 129,
+ 126, 126, 126, 126, 126, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 128, 128, 128, 129, 129, 129,
129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 130, 131, 132, 132, 133, 133, 134, 134, 135, 135,
- 136, 137, 137, 138, 139, 140, 140, 141, 141, 141,
- 142, 142, 143, 144, 145, 145, 146, 146, 146, 146,
- 146, 146, 147, 147, 147, 147, 148, 148, 148, 148,
- 148, 149, 149, 150, 151, 151, 151, 151, 151, 152,
- 152, 153, 153, 153, 153, 153, 153, 153, 154, 155,
- 156, 156, 157, 157, 158, 159, 159, 160, 160, 161,
- 162, 162, 163, 163, 163, 164, 165, 165, 166, 166,
- 167, 167, 168, 168, 169, 169, 170, 170, 171, 171,
- 172, 172, 172, 172, 172, 172, 173, 173, 174, 175,
- 175, 175, 176, 177, 177, 177, 177, 178, 178, 179,
- 179, 180, 180, 180, 180, 180, 181, 181, 181, 181,
- 181, 182, 181, 181, 181, 181, 181, 181, 181, 181,
- 183, 183, 184, 184, 185, 185, 186, 186, 187, 187,
- 188, 188, 188, 188, 189, 189, 190, 190, 191, 191,
- 192, 192, 193, 193, 194, 194, 195, 195, 196, 196,
- 197, 197, 198, 198, 199, 199, 199, 199, 199, 199,
- 200, 201, 202, 202, 202, 203, 203, 204, 204, 204,
- 204, 204, 204, 204, 204, 204, 204, 204, 205, 206,
- 207, 207, 208, 209, 209, 210, 210, 211, 211, 212,
- 212, 212, 213, 213, 214, 214, 215, 215, 216, 216,
- 217, 217
+ 129, 130, 131, 132, 132, 133, 133, 134, 134, 135,
+ 135, 136, 137, 137, 138, 139, 140, 140, 141, 141,
+ 141, 142, 142, 143, 144, 145, 145, 146, 146, 146,
+ 146, 146, 146, 147, 147, 147, 147, 148, 148, 148,
+ 148, 148, 149, 149, 150, 151, 151, 151, 151, 151,
+ 152, 152, 153, 153, 153, 153, 153, 153, 153, 154,
+ 155, 156, 156, 157, 157, 158, 159, 159, 160, 160,
+ 161, 162, 162, 163, 163, 163, 164, 165, 165, 166,
+ 166, 167, 167, 168, 168, 169, 169, 170, 170, 171,
+ 171, 172, 172, 172, 172, 172, 172, 173, 173, 174,
+ 175, 175, 175, 176, 177, 177, 177, 177, 178, 178,
+ 179, 179, 180, 180, 180, 180, 180, 181, 181, 181,
+ 181, 181, 182, 181, 181, 181, 181, 181, 181, 181,
+ 181, 183, 183, 184, 184, 185, 185, 186, 186, 187,
+ 187, 188, 188, 188, 188, 189, 189, 190, 190, 191,
+ 191, 192, 192, 193, 193, 194, 194, 195, 195, 196,
+ 196, 197, 197, 198, 198, 199, 199, 199, 199, 199,
+ 199, 200, 201, 202, 202, 202, 203, 203, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 205,
+ 206, 207, 207, 208, 209, 209, 210, 210, 211, 211,
+ 212, 212, 212, 213, 213, 214, 214, 215, 215, 216,
+ 216, 217, 217
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -813,35 +813,35 @@ static const yytype_uint8 yyr2[] =
2, 4, 3, 4, 3, 1, 2, 1, 1, 2,
1, 3, 3, 3, 2, 2, 3, 5, 5, 2,
0, 4, 0, 3, 0, 2, 0, 4, 4, 4,
- 5, 1, 1, 2, 0, 3, 1, 3, 0, 0,
- 0, 8, 0, 5, 0, 2, 0, 2, 0, 0,
- 7, 0, 5, 1, 3, 3, 3, 3, 3, 3,
+ 2, 5, 1, 1, 2, 0, 3, 1, 3, 0,
+ 0, 0, 8, 0, 5, 0, 2, 0, 2, 0,
+ 0, 7, 0, 5, 1, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 1, 2, 2, 2, 2, 2,
- 2, 2, 2, 3, 5, 6, 1, 1, 3, 5,
- 5, 4, 6, 8, 1, 5, 5, 5, 7, 1,
- 0, 3, 1, 4, 1, 4, 1, 3, 1, 1,
- 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
- 4, 4, 1, 1, 1, 2, 1, 1, 1, 1,
- 1, 3, 1, 1, 1, 2, 1, 1, 1, 1,
- 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 4, 4, 2, 3, 5, 1, 1, 2, 3,
- 5, 3, 5, 3, 3, 5, 8, 5, 8, 5,
- 0, 3, 0, 1, 3, 1, 4, 2, 0, 3,
- 1, 3, 1, 3, 1, 3, 1, 3, 1, 3,
- 3, 2, 4, 3, 5, 5, 1, 3, 1, 2,
- 1, 3, 4, 1, 2, 2, 1, 1, 3, 0,
- 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 0, 4, 1, 2, 2, 2, 2, 2, 2,
- 1, 3, 1, 3, 1, 3, 1, 3, 1, 3,
- 1, 1, 3, 3, 0, 2, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 4, 4, 5, 6, 4, 4,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
- 4, 5, 4, 4, 2, 2, 4, 3, 3, 5,
- 3, 4, 3, 5, 1, 0, 1, 3, 1, 1,
- 2, 1, 1, 5, 0, 2, 1, 3, 1, 3,
- 1, 3
+ 3, 3, 3, 3, 3, 1, 2, 2, 2, 2,
+ 2, 2, 2, 2, 3, 5, 6, 1, 1, 3,
+ 5, 5, 4, 6, 8, 1, 5, 5, 5, 7,
+ 1, 0, 3, 1, 4, 1, 4, 1, 3, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+ 1, 4, 4, 1, 1, 1, 2, 1, 1, 1,
+ 1, 1, 3, 1, 1, 1, 2, 1, 1, 1,
+ 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 3, 4, 4, 2, 3, 5, 1, 1, 2,
+ 3, 5, 3, 5, 3, 3, 5, 8, 5, 8,
+ 5, 0, 3, 0, 1, 3, 1, 4, 2, 0,
+ 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
+ 3, 3, 2, 4, 3, 5, 5, 1, 3, 1,
+ 2, 1, 3, 4, 1, 2, 2, 1, 1, 3,
+ 0, 2, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 4, 1, 2, 2, 2, 2, 2,
+ 2, 1, 3, 1, 3, 1, 3, 1, 3, 1,
+ 3, 1, 1, 3, 3, 0, 2, 0, 1, 0,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 0, 1, 4, 4, 5, 6, 4,
+ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 4, 5, 4, 4, 2, 2, 4, 3, 3,
+ 5, 3, 4, 3, 5, 1, 0, 1, 3, 1,
+ 1, 2, 1, 1, 5, 0, 2, 1, 3, 1,
+ 3, 1, 3
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -849,656 +849,642 @@ static const yytype_uint8 yyr2[] =
means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 5, 0, 3, 0, 1, 0, 7, 0, 22, 157,
- 159, 0, 0, 158, 218, 20, 6, 344, 0, 4,
+ 5, 0, 3, 0, 1, 0, 7, 0, 22, 158,
+ 160, 0, 0, 159, 219, 20, 6, 345, 0, 4,
0, 0, 0, 21, 0, 0, 0, 16, 0, 0,
- 9, 22, 0, 8, 28, 126, 155, 0, 39, 155,
- 0, 263, 74, 0, 0, 0, 78, 0, 0, 292,
- 91, 0, 88, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 290, 0, 25, 0, 256, 257,
- 260, 258, 259, 50, 93, 134, 146, 114, 163, 162,
- 127, 0, 0, 0, 183, 196, 197, 26, 215, 0,
- 139, 27, 0, 19, 0, 0, 0, 0, 0, 0,
- 345, 160, 161, 11, 14, 286, 18, 22, 13, 17,
- 156, 264, 153, 0, 0, 0, 0, 162, 189, 193,
- 179, 177, 178, 176, 265, 134, 0, 294, 249, 0,
- 210, 134, 268, 294, 151, 152, 0, 0, 276, 293,
- 269, 0, 0, 294, 0, 0, 36, 48, 0, 29,
- 274, 154, 0, 122, 117, 118, 121, 115, 116, 0,
- 0, 148, 0, 149, 174, 172, 173, 119, 120, 0,
- 291, 0, 219, 0, 32, 0, 0, 0, 0, 0,
+ 9, 22, 0, 8, 28, 127, 156, 0, 39, 156,
+ 0, 264, 75, 0, 0, 0, 79, 0, 0, 293,
+ 92, 0, 89, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 291, 0, 25, 0, 257, 258,
+ 261, 259, 260, 50, 94, 135, 147, 115, 164, 163,
+ 128, 0, 0, 0, 184, 197, 198, 26, 216, 0,
+ 140, 27, 0, 19, 0, 0, 0, 0, 0, 0,
+ 346, 161, 162, 11, 14, 287, 18, 22, 13, 17,
+ 157, 265, 154, 0, 0, 0, 0, 163, 190, 194,
+ 180, 178, 179, 177, 266, 135, 0, 295, 250, 0,
+ 211, 135, 269, 295, 152, 153, 0, 0, 277, 294,
+ 270, 0, 0, 295, 0, 0, 36, 48, 0, 29,
+ 275, 155, 0, 123, 118, 119, 122, 116, 117, 0,
+ 0, 149, 0, 150, 175, 173, 174, 120, 121, 0,
+ 292, 0, 220, 0, 32, 0, 0, 0, 0, 0,
55, 0, 0, 0, 54, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 140,
- 0, 0, 290, 261, 0, 140, 217, 0, 0, 0,
- 0, 310, 0, 0, 210, 0, 0, 311, 0, 0,
- 23, 287, 0, 12, 249, 0, 0, 194, 170, 168,
- 169, 166, 167, 198, 0, 0, 295, 72, 0, 75,
- 0, 71, 164, 243, 162, 246, 150, 247, 288, 0,
- 249, 0, 204, 79, 76, 157, 0, 203, 0, 286,
- 240, 228, 0, 64, 0, 0, 201, 272, 286, 226,
- 238, 302, 0, 89, 38, 224, 286, 49, 31, 220,
- 286, 0, 0, 40, 0, 175, 147, 0, 0, 35,
- 286, 0, 0, 51, 95, 110, 113, 96, 100, 101,
- 99, 111, 98, 97, 94, 112, 102, 103, 104, 105,
- 106, 107, 108, 109, 284, 123, 278, 288, 0, 128,
- 291, 0, 0, 288, 284, 255, 60, 253, 252, 270,
- 254, 0, 53, 52, 277, 0, 0, 0, 0, 318,
- 0, 0, 0, 0, 0, 317, 0, 312, 313, 314,
- 0, 346, 0, 0, 296, 0, 0, 0, 15, 10,
- 0, 0, 0, 180, 190, 66, 73, 0, 0, 294,
- 165, 244, 245, 289, 250, 212, 0, 0, 0, 294,
- 0, 236, 0, 249, 239, 287, 0, 0, 0, 0,
- 302, 0, 0, 287, 0, 303, 231, 0, 302, 0,
- 287, 0, 287, 0, 42, 275, 0, 0, 0, 199,
- 170, 168, 169, 167, 140, 192, 191, 287, 0, 44,
- 0, 140, 142, 280, 281, 288, 0, 288, 289, 0,
- 0, 0, 131, 290, 262, 289, 0, 0, 0, 0,
- 216, 0, 0, 325, 315, 316, 296, 300, 0, 298,
- 0, 324, 339, 0, 0, 341, 342, 0, 0, 0,
- 0, 0, 302, 0, 0, 309, 0, 297, 304, 308,
- 305, 212, 171, 0, 0, 0, 0, 248, 249, 162,
- 213, 188, 186, 187, 184, 185, 209, 212, 211, 80,
- 77, 237, 241, 0, 229, 202, 195, 0, 0, 92,
- 62, 65, 0, 233, 0, 302, 227, 200, 273, 230,
- 64, 225, 37, 221, 30, 41, 0, 284, 45, 222,
- 286, 47, 33, 43, 284, 0, 289, 285, 137, 0,
- 279, 124, 130, 129, 0, 135, 136, 0, 271, 327,
- 0, 0, 318, 0, 317, 0, 334, 350, 301, 0,
- 0, 0, 348, 299, 328, 340, 0, 306, 0, 319,
- 0, 302, 330, 0, 347, 335, 0, 69, 68, 294,
- 0, 249, 205, 84, 212, 0, 59, 0, 302, 302,
- 232, 0, 171, 0, 287, 0, 46, 0, 140, 144,
- 141, 282, 283, 125, 290, 132, 61, 326, 335, 296,
- 323, 0, 0, 302, 322, 0, 0, 320, 307, 331,
- 296, 296, 338, 207, 336, 67, 70, 214, 0, 86,
- 242, 0, 0, 56, 0, 63, 235, 234, 90, 138,
- 223, 34, 143, 284, 0, 329, 0, 351, 321, 332,
- 349, 0, 0, 0, 212, 0, 85, 81, 0, 0,
- 0, 133, 335, 343, 335, 337, 206, 82, 87, 58,
- 57, 145, 333, 208, 294, 0, 83
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 141,
+ 0, 0, 291, 262, 0, 141, 218, 0, 0, 0,
+ 0, 311, 0, 0, 211, 0, 0, 312, 0, 0,
+ 23, 288, 0, 12, 250, 0, 0, 195, 171, 169,
+ 170, 167, 168, 199, 0, 0, 0, 296, 73, 0,
+ 76, 0, 72, 165, 244, 163, 247, 151, 248, 289,
+ 0, 250, 0, 205, 80, 77, 158, 0, 204, 0,
+ 287, 241, 229, 0, 64, 0, 0, 202, 273, 287,
+ 227, 239, 303, 0, 90, 38, 225, 287, 49, 31,
+ 221, 287, 0, 0, 40, 0, 176, 148, 0, 0,
+ 35, 287, 0, 0, 51, 96, 111, 114, 97, 101,
+ 102, 100, 112, 99, 98, 95, 113, 103, 104, 105,
+ 106, 107, 108, 109, 110, 285, 124, 279, 289, 0,
+ 129, 292, 0, 0, 289, 285, 256, 60, 254, 253,
+ 271, 255, 0, 53, 52, 278, 0, 0, 0, 0,
+ 319, 0, 0, 0, 0, 0, 318, 0, 313, 314,
+ 315, 0, 347, 0, 0, 297, 0, 0, 0, 15,
+ 10, 0, 0, 0, 181, 191, 70, 66, 74, 0,
+ 0, 295, 166, 245, 246, 290, 251, 213, 0, 0,
+ 0, 295, 0, 237, 0, 250, 240, 288, 0, 0,
+ 0, 0, 303, 0, 0, 288, 0, 304, 232, 0,
+ 303, 0, 288, 0, 288, 0, 42, 276, 0, 0,
+ 0, 200, 171, 169, 170, 168, 141, 193, 192, 288,
+ 0, 44, 0, 141, 143, 281, 282, 289, 0, 289,
+ 290, 0, 0, 0, 132, 291, 263, 290, 0, 0,
+ 0, 0, 217, 0, 0, 326, 316, 317, 297, 301,
+ 0, 299, 0, 325, 340, 0, 0, 342, 343, 0,
+ 0, 0, 0, 0, 303, 0, 0, 310, 0, 298,
+ 305, 309, 306, 213, 172, 0, 0, 0, 0, 249,
+ 250, 163, 214, 189, 187, 188, 185, 186, 210, 213,
+ 212, 81, 78, 238, 242, 0, 230, 203, 196, 0,
+ 0, 93, 62, 65, 0, 234, 0, 303, 228, 201,
+ 274, 231, 64, 226, 37, 222, 30, 41, 0, 285,
+ 45, 223, 287, 47, 33, 43, 285, 0, 290, 286,
+ 138, 0, 280, 125, 131, 130, 0, 136, 137, 0,
+ 272, 328, 0, 0, 319, 0, 318, 0, 335, 351,
+ 302, 0, 0, 0, 349, 300, 329, 341, 0, 307,
+ 0, 320, 0, 303, 331, 0, 348, 336, 0, 69,
+ 68, 295, 0, 250, 206, 85, 213, 0, 59, 0,
+ 303, 303, 233, 0, 172, 0, 288, 0, 46, 0,
+ 141, 145, 142, 283, 284, 126, 291, 133, 61, 327,
+ 336, 297, 324, 0, 0, 303, 323, 0, 0, 321,
+ 308, 332, 297, 297, 339, 208, 337, 67, 71, 215,
+ 0, 87, 243, 0, 0, 56, 0, 63, 236, 235,
+ 91, 139, 224, 34, 144, 285, 0, 330, 0, 352,
+ 322, 333, 350, 0, 0, 0, 213, 0, 86, 82,
+ 0, 0, 0, 134, 336, 344, 336, 338, 207, 83,
+ 88, 58, 57, 146, 334, 209, 295, 0, 84
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
-1, 1, 6, 2, 3, 14, 21, 30, 105, 31,
- 8, 24, 16, 17, 65, 327, 67, 149, 518, 519,
- 145, 146, 68, 500, 328, 438, 501, 577, 388, 366,
- 473, 237, 238, 239, 69, 127, 253, 70, 133, 378,
- 573, 646, 664, 619, 647, 71, 143, 399, 72, 141,
- 73, 74, 75, 76, 314, 423, 424, 590, 77, 316,
- 243, 136, 78, 150, 111, 117, 13, 80, 81, 245,
- 246, 163, 119, 82, 83, 480, 228, 84, 230, 231,
- 85, 86, 87, 130, 214, 88, 252, 486, 89, 90,
- 22, 280, 520, 276, 268, 259, 269, 270, 271, 261,
- 384, 247, 248, 249, 329, 330, 322, 331, 272, 152,
- 92, 317, 425, 426, 222, 374, 171, 140, 254, 466,
- 551, 545, 396, 100, 212, 218, 612, 443, 347, 348,
- 349, 351, 552, 547, 613, 614, 456, 457, 25, 467,
- 553, 548
+ 8, 24, 16, 17, 65, 328, 67, 149, 520, 521,
+ 145, 146, 68, 502, 329, 440, 503, 579, 390, 368,
+ 475, 238, 239, 240, 69, 127, 254, 70, 133, 380,
+ 575, 648, 666, 621, 649, 71, 143, 401, 72, 141,
+ 73, 74, 75, 76, 315, 425, 426, 592, 77, 317,
+ 244, 136, 78, 150, 111, 117, 13, 80, 81, 246,
+ 247, 163, 119, 82, 83, 482, 228, 84, 230, 231,
+ 85, 86, 87, 130, 214, 88, 253, 488, 89, 90,
+ 22, 281, 522, 277, 269, 260, 270, 271, 272, 262,
+ 386, 248, 249, 250, 330, 331, 323, 332, 273, 152,
+ 92, 318, 427, 428, 222, 376, 171, 140, 255, 468,
+ 553, 547, 398, 100, 212, 218, 614, 445, 348, 349,
+ 350, 352, 554, 549, 615, 616, 458, 459, 25, 469,
+ 555, 550
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -474
+#define YYPACT_NINF -473
static const yytype_int16 yypact[] =
{
- -474, 48, 28, 35, -474, 258, -474, 37, -474, -474,
- -474, 61, 12, -474, 85, 107, -474, -474, 70, -474,
- 156, 82, 1059, -474, 122, 328, 22, -474, 56, 199,
- -474, 35, 211, -474, -474, -474, 258, 767, -474, 258,
- 459, -474, -474, 152, 459, 258, -474, 23, 145, 1650,
- -474, 23, -474, 294, 359, 1650, 1650, 1650, 1650, 1650,
- 1650, 1693, 1650, 1650, 1289, 159, -474, 412, -474, -474,
- -474, -474, -474, 939, -474, -474, 157, 302, -474, 168,
- -474, 175, 184, 23, 204, -474, -474, -474, 219, 54,
- -474, -474, 47, -474, 227, -12, 269, 227, 227, 239,
- -474, -474, -474, -474, -474, 240, -474, -474, -474, -474,
- -474, -474, -474, 250, 1813, 1813, 1813, -474, 259, -474,
- -474, -474, -474, -474, -474, 64, 302, 1650, 1805, 262,
- 260, 174, -474, 1650, -474, -474, 221, 1813, 2166, 255,
- -474, 290, 237, 1650, 304, 1813, -474, -474, 420, -474,
- -474, -474, 580, -474, -474, -474, -474, -474, -474, 1736,
- 1693, 2166, 280, -474, 253, -474, 50, -474, -474, 275,
- 2166, 285, -474, 430, -474, 612, 1650, 1650, 1650, 1650,
- -474, 1650, 1650, 1650, -474, 1650, 1650, 1650, 1650, 1650,
- 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, -474,
- 1332, 428, 1650, -474, 1650, -474, -474, 1234, 1650, 1650,
- 1650, -474, 763, 258, 260, 293, 369, -474, 1992, 1992,
- -474, 51, 326, -474, 1805, 392, 1813, -474, -474, -474,
- -474, -474, -474, -474, 341, 258, -474, -474, 371, -474,
- 89, 342, 1813, -474, 1805, -474, -474, -474, 335, 360,
- 1805, 1234, -474, -474, 357, 99, 399, -474, 365, 380,
- -474, -474, 377, -474, 173, 151, -474, -474, 381, -474,
- -474, 456, 1779, -474, -474, -474, 401, -474, -474, -474,
- 404, 1650, 258, 366, 1838, -474, 405, 1813, 1813, -474,
- 407, 1650, 410, 2166, 650, -474, 2190, 877, 877, 877,
- 877, -474, 877, 877, 2214, -474, 461, 461, 461, 461,
- -474, -474, -474, -474, 1387, -474, -474, 52, 1442, -474,
- 2064, 411, 1160, 2031, 1387, -474, -474, -474, -474, -474,
- -474, 19, 255, 255, 2166, 1905, 447, 441, 439, -474,
- 444, 505, 1992, 225, 27, -474, 454, -474, -474, -474,
- 1931, -474, 125, 458, 258, 460, 465, 466, -474, -474,
- 463, 1813, 480, -474, -474, -474, -474, 1497, 1552, 1650,
- -474, -474, -474, 1805, -474, 1872, 484, 24, 371, 1650,
- 258, 485, 487, 1805, -474, 472, 481, 1813, 81, 399,
- 456, 399, 490, 289, 483, -474, -474, 258, 456, 519,
- 258, 495, 258, 496, 255, -474, 1650, 1897, 1813, -474,
- 321, 349, 350, 354, -474, -474, -474, 258, 497, 255,
- 1650, -474, 2094, -474, -474, 488, 491, 489, 1693, 498,
- 500, 502, -474, 1650, -474, -474, 506, 503, 1234, 1160,
- -474, 1992, 534, -474, -474, -474, 258, 1958, 1992, 258,
- 1992, -474, -474, 565, 149, -474, -474, 510, 504, 1992,
- 225, 1992, 456, 258, 258, -474, 514, 507, -474, -474,
- -474, 1872, -474, 1234, 1650, 1650, 515, -474, 1805, 520,
- -474, -474, -474, -474, -474, -474, -474, 1872, -474, -474,
- -474, -474, -474, 518, -474, -474, -474, 1693, 517, -474,
- -474, -474, 524, -474, 525, 456, -474, -474, -474, -474,
- -474, -474, -474, -474, -474, 255, 526, 1387, -474, -474,
- 527, 612, -474, 255, 1387, 1595, 1387, -474, -474, 530,
- -474, -474, -474, -474, 116, -474, -474, 141, -474, -474,
- 539, 540, 521, 542, 546, 538, -474, -474, 548, 543,
- 1992, 549, -474, 552, -474, -474, 562, -474, 1992, -474,
- 556, 456, -474, 560, -474, 1984, 238, 2166, 2166, 1650,
- 561, 1805, -474, -474, 1872, 32, -474, 1160, 456, 456,
- -474, 186, 370, 554, 258, 563, 410, 557, -474, 2166,
- -474, -474, -474, -474, 1650, -474, -474, -474, 1984, 258,
- -474, 1958, 1992, 456, -474, 258, 149, -474, -474, -474,
- 258, 258, -474, -474, -474, -474, -474, -474, 564, 613,
- -474, 1650, 1650, -474, 1693, 566, -474, -474, -474, -474,
- -474, -474, -474, 1387, 558, -474, 571, -474, -474, -474,
- -474, 577, 582, 583, 1872, 36, -474, -474, 2118, 2142,
- 572, -474, 1984, -474, 1984, -474, -474, -474, -474, -474,
- -474, -474, -474, -474, 1650, 371, -474
+ -473, 65, 22, 49, -473, 261, -473, 64, -473, -473,
+ -473, 95, 52, -473, 143, 145, -473, -473, 104, -473,
+ 68, 128, 1049, -473, 142, 305, 16, -473, 56, 204,
+ -473, 49, 220, -473, -473, -473, 261, 974, -473, 261,
+ 562, -473, -473, 288, 562, 261, -473, 14, 147, 1615,
+ -473, 14, -473, 395, 401, 1615, 1615, 1615, 1615, 1615,
+ 1615, 1658, 1615, 1615, 737, 168, -473, 414, -473, -473,
+ -473, -473, -473, 649, -473, -473, 165, 122, -473, 169,
+ -473, 177, 218, 14, 219, -473, -473, -473, 235, 89,
+ -473, -473, 34, -473, 206, 124, 286, 206, 206, 260,
+ -473, -473, -473, -473, -473, 265, -473, -473, -473, -473,
+ -473, -473, -473, 270, 1803, 1803, 1803, -473, 269, -473,
+ -473, -473, -473, -473, -473, 39, 122, 882, 1777, 283,
+ 277, 230, -473, 1615, -473, -473, 292, 1803, 2097, 280,
+ -473, 332, 315, 1615, 215, 1803, -473, -473, 244, -473,
+ -473, -473, 949, -473, -473, -473, -473, -473, -473, 1701,
+ 1658, 2097, 298, -473, 9, -473, 59, -473, -473, 303,
+ 2097, 319, -473, 330, -473, 1744, 1615, 1615, 1615, 1615,
+ -473, 1615, 1615, 1615, -473, 1615, 1615, 1615, 1615, 1615,
+ 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, -473,
+ 1297, 455, 1615, -473, 1615, -473, -473, 1225, 1615, 1615,
+ 1615, -473, 594, 261, 277, 328, 403, -473, 1308, 1308,
+ -473, 152, 352, -473, 1777, 405, 1803, -473, -473, -473,
+ -473, -473, -473, -473, 354, 261, 1615, -473, -473, 382,
+ -473, 47, 360, 1803, -473, 1777, -473, -473, -473, 351,
+ 367, 1777, 1225, -473, -473, 366, 84, 407, -473, 374,
+ 373, -473, -473, 372, -473, 138, 42, -473, -473, 377,
+ -473, -473, 442, 1769, -473, -473, -473, 384, -473, -473,
+ -473, 389, 1615, 261, 391, 1830, -473, 394, 1803, 1803,
+ -473, 409, 1615, 411, 2097, 1935, -473, 2121, 1080, 1080,
+ 1080, 1080, -473, 1080, 1080, 2145, -473, 503, 503, 503,
+ 503, -473, -473, -473, -473, 1352, -473, -473, 27, 1407,
+ -473, 1995, 412, 1147, 1962, 1352, -473, -473, -473, -473,
+ -473, -473, 7, 280, 280, 2097, 698, 418, 415, 413,
+ -473, 416, 477, 1308, 188, 31, -473, 425, -473, -473,
+ -473, 1897, -473, 221, 433, 261, 434, 436, 439, -473,
+ -473, 432, 1803, 452, -473, -473, 2097, -473, -473, 1462,
+ 1517, 1615, -473, -473, -473, 1777, -473, 1856, 453, 91,
+ 382, 1615, 261, 454, 456, 1777, -473, 475, 451, 1803,
+ 133, 407, 442, 407, 460, 326, 462, -473, -473, 261,
+ 442, 467, 261, 478, 261, 486, 280, -473, 1615, 1864,
+ 1803, -473, 26, 248, 264, 430, -473, -473, -473, 261,
+ 492, 280, 1615, -473, 2025, -473, -473, 485, 493, 487,
+ 1658, 504, 506, 508, -473, 1615, -473, -473, 512, 505,
+ 1225, 1147, -473, 1308, 517, -473, -473, -473, 261, 1889,
+ 1308, 261, 1308, -473, -473, 571, 155, -473, -473, 514,
+ 509, 1308, 188, 1308, 442, 261, 261, -473, 518, 507,
+ -473, -473, -473, 1856, -473, 1225, 1615, 1615, 521, -473,
+ 1777, 528, -473, -473, -473, -473, -473, -473, -473, 1856,
+ -473, -473, -473, -473, -473, 520, -473, -473, -473, 1658,
+ 522, -473, -473, -473, 530, -473, 532, 442, -473, -473,
+ -473, -473, -473, -473, -473, -473, -473, 280, 535, 1352,
+ -473, -473, 536, 1744, -473, 280, 1352, 1560, 1352, -473,
+ -473, 539, -473, -473, -473, -473, 247, -473, -473, 308,
+ -473, -473, 541, 543, 545, 546, 547, 544, -473, -473,
+ 551, 548, 1308, 554, -473, 557, -473, -473, 576, -473,
+ 1308, -473, 564, 442, -473, 568, -473, 1923, 318, 2097,
+ 2097, 1615, 569, 1777, -473, -473, 1856, 156, -473, 1147,
+ 442, 442, -473, 243, 483, 563, 261, 577, 411, 570,
+ -473, 2097, -473, -473, -473, -473, 1615, -473, -473, -473,
+ 1923, 261, -473, 1889, 1308, 442, -473, 261, 155, -473,
+ -473, -473, 261, 261, -473, -473, -473, -473, -473, -473,
+ 579, 627, -473, 1615, 1615, -473, 1658, 580, -473, -473,
+ -473, -473, -473, -473, -473, 1352, 572, -473, 583, -473,
+ -473, -473, -473, 585, 586, 590, 1856, 77, -473, -473,
+ 2049, 2073, 584, -473, 1923, -473, 1923, -473, -473, -473,
+ -473, -473, -473, -473, -473, -473, 1615, 382, -473
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -474, -474, -474, -474, -474, -474, -474, -15, -474, -474,
- 616, -474, -3, -474, -474, 622, -474, -125, -27, 66,
- -474, -124, -112, -474, 11, -474, -474, -474, 147, -368,
- -474, -474, -474, -474, -474, -474, -140, -474, -474, -474,
- -474, -474, -474, -474, -474, -474, -474, -474, -474, -474,
- 532, 10, 247, -474, -194, 132, 135, -474, 279, -59,
- 418, 67, 5, 384, 624, 425, 317, 20, -474, 424,
- 636, 509, -474, -474, -474, -474, -36, -37, -31, -49,
- -474, -474, -474, -474, -474, -32, 464, -473, -474, -474,
- -474, -474, -474, -474, -474, -474, 277, -119, -231, 287,
- -474, 300, -474, -205, -300, 652, -474, -242, -474, -63,
- 106, 182, -474, -316, -241, -285, -195, -474, -111, -420,
- -474, -474, -245, -474, 402, -474, -176, -474, 345, 249,
- 346, 218, 87, 96, -415, -474, -429, 252, -474, 522,
- -474, -474
+ -473, -473, -473, -473, -473, -473, -473, -12, -473, -473,
+ 624, -473, -1, -473, -473, 635, -473, -137, -48, 74,
+ -473, -130, -112, -473, 11, -473, -473, -473, 149, -372,
+ -473, -473, -473, -473, -473, -473, -140, -473, -473, -473,
+ -473, -473, -473, -473, -473, -473, -473, -473, -473, -473,
+ 662, 448, 257, -473, -196, 135, 139, -473, 262, -59,
+ 424, -16, -3, 387, 632, 427, 313, 20, -473, 428,
+ -89, 524, -473, -473, -473, -473, -36, -37, -31, -49,
+ -473, -473, -473, -473, -473, -32, 458, -472, -473, -473,
+ -473, -473, -473, -473, -473, -473, 279, -108, -211, 290,
+ -473, 306, -473, -214, -291, 658, -473, -230, -473, -63,
+ -6, 191, -473, -302, -219, -254, -195, -473, -107, -435,
+ -473, -473, -347, -473, 323, -473, 72, -473, 371, 268,
+ 380, 242, 102, 110, -468, -473, -438, 255, -473, 515,
+ -473, -473
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -277
+#define YYTABLE_NINF -278
static const yytype_int16 yytable[] =
{
- 121, 120, 162, 273, 175, 123, 122, 321, 437, 377,
- 489, 324, 165, 104, 572, 236, 241, 260, 386, 360,
- 275, 236, 434, 279, 164, 556, 541, 394, 108, 166,
- 458, 236, 429, 390, 392, 401, 346, 621, 436, 403,
- 174, 110, 356, 357, 110, 376, 101, 213, 4, 418,
- 132, -215, 208, 5, 27, 206, 657, 118, 134, 27,
- 7, 15, 11, 427, 18, 153, 154, 155, 156, 157,
- 158, -267, 167, 168, 19, 9, -267, 229, 229, 229,
- 9, 439, 232, 232, 232, -215, 439, 440, 497, 134,
- 135, 229, 488, 498, 367, 102, 232, 622, 623, 459,
- 229, 620, -236, 326, 223, 232, 20, 624, 229, -181,
- 175, 165, 209, 232, 29, 229, 103, -215, 142, 29,
- 232, 135, 210, 164, 10, 11, -267, 428, 166, 10,
- 11, 23, -267, 26, 118, 118, 118, 382, 229, 538,
- 527, 258, 529, 232, 33, 503, 290, 267, 118, 499,
- 205, 165, 452, 509, 368, 139, 207, 118, 502, 27,
- 504, -236, 380, 164, 210, 118, 451, -236, 166, 153,
- 157, 656, 118, 9, 462, 381, 9, 641, 493, 636,
- 9, -266, 594, 635, 93, 463, -266, 229, 595, 229,
- 642, 643, 232, 497, 232, 118, 537, 381, 498, 453,
- 464, 583, 106, 439, 391, 229, 358, 229, 587, 596,
- 232, 128, 232, 229, 109, 28, 137, 562, 232, 29,
- 517, 172, 10, 11, 199, 10, 11, 524, 452, 10,
- 11, 566, 389, 240, -153, 229, -266, 662, 534, 663,
- 232, 203, -266, 204, 118, 255, 118, 411, 410, 9,
- 229, 229, 413, 412, 628, 232, 232, 236, 476, 431,
- 580, 255, 118, -182, 118, 539, 260, 236, 490, 165,
- 118, 546, 549, 570, 554, 453, 511, 513, -181, 585,
- 256, 164, 9, 559, 454, 561, 166, 125, -183, 257,
- 264, 131, 118, 216, 10, 11, 265, 666, 10, 11,
- 439, 11, 221, 220, 118, 266, 615, 118, 118, 224,
- 10, 11, -182, 255, 332, 333, 609, 650, 9, 126,
- -183, 250, 235, 126, 229, 263, 484, 251, 9, 232,
- 210, 10, 11, 626, 627, 625, 229, 94, 482, 481,
- 286, 232, 264, 485, 483, 95, 229, 287, 265, 96,
- 229, 232, 354, 144, 521, 232, -179, 288, 639, 97,
- 98, 200, 10, 11, 274, 201, 618, 10, 11, 530,
- 229, 229, 355, 202, 603, 232, 232, 10, 11, 165,
- -179, 118, 607, 9, -177, -178, 359, 404, -179, -176,
- 258, 164, 99, 118, 633, 118, 166, 419, 267, 634,
- 361, 363, 508, 118, 369, -180, 365, 118, -177, -178,
- 373, 211, 211, -176, 211, 211, -177, -178, 148, 379,
- 375, -176, 484, 381, 383, 546, 638, 118, 118, -180,
- 12, 406, 10, 11, 482, 481, 9, -180, 484, 485,
- 483, 229, 385, 393, 9, 32, 232, 79, 165, 387,
- 482, 481, 9, 32, 9, 485, 483, 236, 616, 395,
- 164, 112, 35, 400, 112, 166, 402, 37, 129, 417,
- 112, 173, 414, 332, 333, 420, 113, 433, 147, 151,
- 278, 47, 48, 9, 229, 10, 11, 318, 51, 232,
- 289, 118, 151, 10, 11, 178, 255, 215, 118, 217,
- 219, 10, 11, 10, 11, 186, 446, 118, 447, 190,
- 448, 449, 515, 450, 195, 196, 197, 198, 61, 460,
- 465, 521, 468, 471, 665, 484, 523, 469, 470, 345,
- 64, 256, 10, 11, 229, 345, 345, 482, 481, 232,
- 472, 118, 485, 483, 487, 10, 11, 492, 380, 495,
- 505, 507, 236, 244, 510, 512, 514, 522, 531, 528,
- 532, 112, 533, 526, 435, 530, 535, 112, 555, 147,
- 341, 536, 557, 151, 565, 165, 558, 569, 574, 571,
- -157, 138, 464, 576, 578, 579, 582, 164, 37, 584,
- 593, 118, 166, 161, 118, 484, 170, 113, 151, 597,
- 598, 599, 47, 48, 9, -158, 600, 482, 481, 51,
- 601, 606, 485, 483, 605, 602, 225, 604, 608, 610,
- 37, 617, 629, 631, 644, 632, 319, 645, 439, 113,
- 651, 652, 79, 115, 47, 48, 9, 653, 350, 226,
- 661, 51, 654, 655, 66, 281, 32, 107, 225, 244,
- 630, 64, 345, 10, 11, 282, 658, 581, 591, 345,
- 364, 592, 371, 124, 118, 115, 405, 345, 372, 285,
- 506, 226, 494, 477, 91, 244, 79, 291, 353, 575,
- 444, 445, 564, 64, 178, 10, 11, 282, 181, 182,
- 183, 540, 640, 185, 186, 187, 188, 637, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 151, 293, 294,
- 295, 296, 560, 297, 298, 299, 0, 300, 301, 302,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 0, 161, 0, 320, 352, 323, 0, 0, 0,
- 138, 138, 334, 0, 0, 0, 0, 79, 0, 0,
- 227, 233, 234, 0, 0, 0, 0, 0, 345, 0,
- 0, 0, 0, 0, 544, 345, 0, 345, 455, 0,
- 0, 335, 0, 262, 0, 37, 345, 0, 345, 350,
- 336, 277, 0, 0, 113, 337, 338, 339, 283, 47,
- 48, 9, 340, 0, 0, 0, 51, 0, 244, 341,
- 479, 0, 0, 114, 0, 491, 0, 0, 244, 0,
- 112, 292, 0, 138, 0, 0, 342, 0, 112, 0,
- 115, 0, 112, 138, 0, 147, 116, 151, 343, 0,
- 0, 0, 0, 0, 344, 0, 0, 11, 64, 0,
- 10, 11, 151, 0, 0, 0, 422, 0, 0, 0,
- 161, 0, 0, 0, 0, 0, 422, 0, 0, 0,
- 0, 0, 362, 79, 79, 0, 0, 345, 0, 0,
- 0, 350, 543, 0, 550, 345, 0, 0, 370, 455,
- 0, 0, 345, 0, 0, 455, 0, 0, 563, 350,
- 0, 0, 0, 0, 0, 0, 0, 0, 79, 138,
- 138, 0, 0, 244, 0, 0, 0, 0, 398, 0,
- 0, 178, 0, 0, 0, 345, 0, 0, 544, 345,
- 409, 186, 0, 415, 416, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 0, 0, 0, 0, 138, 0,
- 0, 0, 0, 176, -276, 0, 0, 0, 0, 0,
- 0, 0, 138, 0, 0, 0, 0, 0, 0, 0,
- 161, 0, 0, 0, 0, 170, 0, 0, 0, 345,
- 0, 345, 177, 178, 0, 179, 180, 181, 182, 183,
- 0, 184, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 244, 409, 0, 0,
- 0, 0, 79, 0, -276, 0, 567, 568, 0, 151,
- 0, 0, 0, 0, -276, 0, 0, 0, 0, 0,
- 0, 0, 0, 496, 350, 0, 543, 0, 0, 161,
- 550, 455, 0, 0, 0, 350, 350, 0, 0, 0,
- 0, 0, 0, 227, 516, 0, 0, 0, 0, 422,
- 0, 0, 0, 0, 0, 0, 422, 589, 422, -2,
+ 121, 120, 162, 274, 175, 123, 122, 322, 491, 325,
+ 361, 280, 165, 543, 276, 237, 104, 574, 558, 174,
+ 242, 237, 379, 439, 164, 227, 233, 234, 261, 166,
+ 108, 237, 436, 110, 460, 142, 110, 378, 429, 208,
+ 101, 388, 132, 139, -184, 505, -268, 5, 263, 134,
+ 396, -268, 369, 511, 392, 394, 278, 118, 403, 27,
+ -216, -180, 405, 284, 431, 4, 383, 205, -183, 441,
+ 438, 27, 420, 207, 7, 442, -184, 229, 229, 229,
+ 9, 135, 232, 232, 232, -180, 293, -237, 15, 102,
+ 206, 229, 9, -180, -216, 393, 232, 659, 18, 209,
+ 229, -268, 430, 461, 622, 232, 223, -268, 229, 210,
+ 175, 165, 370, 232, 19, 229, 103, 564, -182, 29,
+ 232, 241, 210, 164, 134, 291, -216, 28, 166, 10,
+ 11, 29, 637, 259, 118, 118, 118, 363, 229, 268,
+ 499, 10, 11, 232, 327, 500, -237, 382, 118, 384,
+ 540, 165, -237, 441, 372, 27, 135, 118, 454, 490,
+ 582, 623, 383, 164, 20, 118, 638, 26, 166, 23,
+ 643, 495, 118, 529, 658, 531, 9, 644, 645, 9,
+ 504, 200, 506, 213, 400, 201, 664, 229, 665, 229,
+ 33, 454, 232, 202, 232, 118, 411, 391, 11, 417,
+ 418, 501, 333, 334, 93, 455, 229, 106, 229, 359,
+ 539, 232, 9, 232, 229, 29, 611, 585, 137, 232,
+ 519, 624, 625, 109, 589, 10, 11, 526, 10, 11,
+ 172, 626, 199, 628, 629, -154, 229, -267, 455, 9,
+ 536, 232, -267, 203, 118, 568, 118, 456, 413, 412,
+ 499, 229, 229, 415, 414, 500, 232, 232, 641, 237,
+ 433, 10, 11, 118, 478, 118, 572, 515, 9, 237,
+ 165, 118, 513, 411, 492, 275, 406, 204, -183, 261,
+ 11, 465, 164, -178, 347, 9, 421, 166, 10, 11,
+ 357, 358, -267, 118, -182, 668, 466, 125, -267, -179,
+ 498, 131, 126, 587, 279, 118, 126, -178, 118, 118,
+ 216, 630, 9, 596, 94, -178, 256, 10, 11, 597,
+ 227, 518, 95, -179, 220, 229, 96, 221, 486, 224,
+ 232, -179, 235, 652, 10, 11, 97, 98, 229, 256,
+ 484, 483, 251, 232, 252, 487, 485, 128, 229, 627,
+ 256, 257, 229, 232, 9, 210, 523, 232, 287, 620,
+ 258, 10, 11, 333, 334, 10, 11, 264, 265, 99,
+ 441, 532, 229, 229, 266, 288, 598, 232, 232, 265,
+ 441, 165, 118, 267, 259, 266, 617, 355, 10, 11,
+ 290, 289, 268, 164, 635, 118, 510, 118, 166, 10,
+ 11, 636, 517, 10, 11, 118, 356, 211, 211, 118,
+ 211, 211, 360, 362, 364, 453, 525, 367, 215, 9,
+ 217, 219, 371, 464, 486, 9, 375, 377, 381, 118,
+ 118, 383, 12, 385, 588, 387, 484, 483, 9, 395,
+ 486, 487, 485, 229, 389, 397, 402, 32, 232, 79,
+ 165, 404, 484, 483, 144, 32, 408, 487, 485, 237,
+ 148, 416, 164, 112, 618, -177, 112, 166, 10, 11,
+ 129, 419, 112, 173, 10, 11, 422, 448, 435, 9,
+ 147, 151, 449, 451, 450, 452, 229, 10, 11, -177,
+ 462, 232, 473, 118, 151, 467, 470, -177, 471, 256,
+ 118, 472, 512, 153, 154, 155, 156, 157, 158, 118,
+ 167, 168, 474, 489, 319, 541, 494, 382, -181, 497,
+ 507, 548, 551, 523, 556, 346, 667, 486, 10, 11,
+ 509, 346, 346, 561, 257, 563, 229, 178, 514, 484,
+ 483, 232, -181, 118, 487, 485, 516, 186, 10, 11,
+ -181, 190, 524, 342, 237, 245, 195, 196, 197, 198,
+ 528, 530, 437, 112, 533, 35, 534, 532, 535, 112,
+ 37, 147, 537, 538, 557, 151, 559, 165, 567, 113,
+ 576, 560, 466, 571, 47, 48, 9, 573, 578, 164,
+ 580, 51, 581, 118, 166, 584, 118, 486, 586, 595,
+ 151, 599, 336, 600, -158, 601, -159, 153, 157, 484,
+ 483, 337, 602, 603, 487, 485, 338, 339, 340, 607,
+ 604, 61, 606, 341, 605, 608, 610, 612, 320, 619,
+ 342, 631, 609, 64, 79, 10, 11, 633, 634, 646,
+ 351, 647, 441, 654, 653, 655, 656, 343, 32, 346,
+ 657, 245, 663, 176, -277, 107, 346, 66, 660, 344,
+ 632, 583, 365, 593, 346, 345, 118, 594, 11, 373,
+ 407, 124, 354, 374, 508, 548, 640, 496, 245, 79,
+ 91, 479, 177, 178, 286, 179, 180, 181, 182, 183,
+ 577, 184, 185, 186, 187, 188, 189, 190, 191, 192,
+ 193, 194, 195, 196, 197, 198, 336, 446, 566, 642,
+ 151, 138, 542, 639, -277, 337, 447, 562, 0, 0,
+ 338, 339, 340, 161, -277, 0, 170, 341, 353, 0,
+ 0, 0, 0, 0, 443, 0, 0, 0, 0, 0,
+ 35, 0, 0, 0, 0, 37, 0, 0, 169, 0,
+ 79, 343, 0, 0, 113, 0, 346, 444, 0, 47,
+ 48, 9, 546, 346, 0, 346, 51, 0, 0, 345,
+ 0, 457, 11, 55, 346, 0, 346, 0, 0, 0,
+ 0, 0, 351, 0, 0, 0, 56, 57, 0, 58,
+ 59, 0, 0, 60, 0, 0, 61, 0, 0, 0,
+ 0, 0, 245, 0, 481, 0, 62, 63, 64, 493,
+ 10, 11, 245, 0, 112, 0, 0, 0, 0, 0,
+ 0, 0, 112, 0, 0, 0, 112, 0, 0, 147,
+ 0, 151, 0, 0, 0, 0, 0, 0, 294, 295,
+ 296, 297, 0, 298, 299, 300, 151, 301, 302, 303,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 0, 161, 0, 321, 346, 324, 79, 79, 0,
+ 138, 138, 335, 346, 0, 351, 545, 0, 552, 0,
+ 346, 0, 0, 457, 0, 35, 0, 0, 0, 457,
+ 37, 0, 565, 351, 0, 0, 0, 0, 366, 113,
+ 0, 0, 79, 0, 47, 48, 9, 245, 236, 0,
+ 0, 51, 0, 346, 0, 0, 546, 346, 55, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 56, 57, 0, 58, 59, 0, 0, 60, 0,
+ 0, 61, 0, 0, 138, 0, 0, 0, 0, 0,
+ 0, 62, 63, 64, 138, 10, 11, 37, 0, 0,
+ 0, 0, 0, 0, 0, 0, 113, 346, 0, 346,
+ 0, 47, 48, 9, 0, 0, 0, 424, 51, 0,
+ 0, 161, 37, 0, 0, 225, 0, 424, 0, 0,
+ 0, 113, 0, 0, 0, 0, 47, 48, 9, 0,
+ 245, 0, 115, 51, 0, 0, 79, 0, 226, 0,
+ 114, 0, 0, 151, 282, 0, 0, 0, 0, 0,
+ 64, 0, 10, 11, 283, 0, 0, 115, 351, 0,
+ 545, 138, 138, 116, 552, 457, 0, 0, 0, 351,
+ 351, 0, 0, 0, 0, 64, 0, 10, 11, -2,
34, 0, 35, 0, 0, 36, 0, 37, 38, 39,
0, 0, 40, 0, 41, 42, 43, 44, 45, 46,
- 0, 47, 48, 9, 0, 0, 49, 50, 51, 52,
- 53, 54, 0, 0, 0, 55, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 56, 57,
+ 138, 47, 48, 9, 0, 0, 49, 50, 51, 52,
+ 53, 54, 0, 0, 138, 55, 0, 0, 0, 0,
+ 0, 0, 161, 0, 0, 0, 0, 170, 56, 57,
0, 58, 59, 0, 0, 60, 0, 0, 61, 0,
- 0, -24, 0, 0, 0, 0, 170, 0, 62, 63,
- 64, 0, 10, 11, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 648, 649, 0, 161, 586, 0, 0,
- 0, 325, 0, 35, 0, 422, 36, -251, 37, 38,
- 39, 0, -251, 40, 0, 41, 42, 113, 44, 45,
- 46, 0, 47, 48, 9, 0, 0, 49, 50, 51,
- 52, 53, 54, 0, 0, 0, 55, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,
- 57, 0, 58, 59, 0, 0, 60, 0, 0, 61,
- 0, 0, -251, 0, 0, 0, 0, 326, -251, 62,
- 63, 64, 0, 10, 11, 325, 0, 35, 0, 0,
- 36, 0, 37, 38, 39, 0, 0, 40, 0, 41,
- 42, 113, 44, 45, 46, 0, 47, 48, 9, 0,
- 0, 49, 50, 51, 52, 53, 54, 0, 0, 0,
- 55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 56, 57, 0, 58, 59, 0, 0,
- 60, 0, 35, 61, 0, 0, -251, 37, 0, 0,
- 169, 326, -251, 62, 63, 64, 113, 10, 11, 0,
- 0, 47, 48, 9, 0, 0, 0, 0, 51, 0,
- 0, 0, 0, 0, 0, 55, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 35, 0, 0, 56, 57,
- 37, 58, 59, 0, 0, 60, 0, 0, 61, 113,
- 0, 0, 0, 0, 47, 48, 9, 0, 62, 63,
- 64, 51, 10, 11, 0, 0, 0, 0, 159, 0,
+ 0, -24, 0, 0, 178, 0, 0, 0, 62, 63,
+ 64, 0, 10, 11, 186, 0, 0, 0, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 0, 569, 570,
+ 0, 0, 0, 0, 0, 0, 0, 0, 326, 0,
+ 35, 0, 0, 36, -252, 37, 38, 39, 0, -252,
+ 40, 161, 41, 42, 113, 44, 45, 46, 0, 47,
+ 48, 9, 0, 0, 49, 50, 51, 52, 53, 54,
+ 0, 424, 0, 55, 0, 0, 0, 0, 424, 591,
+ 424, 0, 0, 0, 0, 0, 56, 57, 0, 58,
+ 59, 0, 0, 60, 0, 0, 61, 0, 0, -252,
+ 0, 0, 0, 0, 327, -252, 62, 63, 64, 0,
+ 10, 11, 0, 0, 0, 0, 326, 0, 35, 0,
+ 0, 36, 0, 37, 38, 39, 0, 0, 40, 0,
+ 41, 42, 113, 44, 45, 46, 0, 47, 48, 9,
+ 0, 0, 49, 50, 51, 52, 53, 54, 170, 0,
+ 0, 55, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 56, 57, 0, 58, 59, 0,
+ 0, 60, 0, 0, 61, 650, 651, -252, 161, 0,
+ 0, 0, 327, -252, 62, 63, 64, 424, 10, 11,
+ 35, 0, 0, 0, 0, 37, 0, 0, 0, 0,
+ 0, 0, 0, 0, 113, 0, 336, 0, 0, 47,
+ 48, 9, 0, 0, 0, 337, 51, 0, 0, 0,
+ 338, 339, 340, 159, 0, 0, 0, 341, 0, 0,
+ 0, 0, 0, 0, 342, 0, 56, 57, 0, 58,
+ 160, 0, 0, 60, 0, 35, 61, 316, 0, 0,
+ 37, 343, 0, 0, 0, 0, 62, 63, 64, 113,
+ 10, 11, 0, 0, 47, 48, 9, 0, 0, 345,
+ 0, 51, 11, 0, 0, 0, 0, 0, 55, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 56, 57, 0, 58, 160, 0, 0, 60, 0,
- 35, 61, 315, 0, 0, 37, 0, 0, 0, 0,
+ 0, 56, 57, 0, 58, 59, 0, 0, 60, 0,
+ 35, 61, 0, 0, 0, 37, 0, 0, 0, 423,
0, 62, 63, 64, 113, 10, 11, 0, 0, 47,
- 48, 9, 0, 0, 0, 0, 51, 0, 0, 0,
- 0, 0, 0, 55, 0, 0, 0, 0, 0, 0,
+ 48, 9, 0, 0, 0, 0, 51, 0, 432, 0,
+ 0, 0, 0, 159, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 56, 57, 0, 58,
- 59, 0, 0, 60, 0, 35, 61, 0, 0, 0,
- 37, 0, 0, 0, 421, 0, 62, 63, 64, 113,
- 10, 11, 0, 0, 47, 48, 9, 0, 0, 0,
- 0, 51, 0, 430, 0, 0, 0, 0, 159, 0,
+ 160, 0, 0, 60, 0, 35, 61, 0, 0, 0,
+ 37, 0, 0, 0, 0, 0, 62, 63, 64, 113,
+ 10, 11, 0, 0, 47, 48, 9, 0, 476, 0,
+ 0, 51, 0, 0, 0, 0, 0, 0, 55, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 56, 57, 0, 58, 160, 0, 0, 60, 0,
+ 0, 56, 57, 0, 58, 59, 0, 0, 60, 0,
35, 61, 0, 0, 0, 37, 0, 0, 0, 0,
0, 62, 63, 64, 113, 10, 11, 0, 0, 47,
- 48, 9, 0, 474, 0, 0, 51, 0, 0, 0,
+ 48, 9, 0, 477, 0, 0, 51, 0, 0, 0,
0, 0, 0, 55, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 56, 57, 0, 58,
- 59, 0, 0, 60, 0, 35, 61, 0, 0, 0,
- 37, 0, 0, 0, 0, 0, 62, 63, 64, 113,
- 10, 11, 0, 0, 47, 48, 9, 0, 475, 0,
- 0, 51, 0, 0, 0, 0, 0, 0, 55, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 35, 0,
- 0, 56, 57, 37, 58, 59, 0, 0, 60, 0,
- 0, 61, 113, 0, 0, 0, 0, 47, 48, 9,
- 0, 62, 63, 64, 51, 10, 11, 0, 0, 0,
+ 0, 0, 0, 35, 0, 0, 56, 57, 37, 58,
+ 59, 0, 0, 60, 0, 0, 61, 113, 0, 0,
+ 0, 0, 47, 48, 9, 0, 62, 63, 64, 51,
+ 10, 11, 0, 0, 0, 0, 55, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,
+ 57, 0, 58, 59, 0, 0, 60, 0, 35, 61,
+ 0, 0, 0, 37, 0, 0, 0, 590, 0, 62,
+ 63, 64, 113, 10, 11, 0, 0, 47, 48, 9,
+ 0, 0, 0, 0, 51, 0, 0, 0, 0, 0,
0, 55, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 56, 57, 0, 58, 59, 0,
- 0, 60, 0, 35, 61, 0, 0, 0, 37, 0,
- 0, 0, 588, 0, 62, 63, 64, 113, 10, 11,
- 0, 0, 47, 48, 9, 0, 0, 0, 0, 51,
- 0, 0, 0, 0, 0, 0, 55, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 35, 0, 0, 56,
- 57, 37, 58, 59, 0, 0, 60, 0, 0, 61,
- 113, 0, 0, 0, 0, 47, 48, 9, 0, 62,
- 63, 64, 51, 10, 11, 0, 0, 0, 0, 159,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 35,
- 0, 0, 56, 57, 284, 58, 160, 0, 0, 60,
- 0, 0, 61, 113, 0, 0, 0, 0, 47, 48,
- 9, 0, 62, 63, 64, 51, 10, 11, 0, 0,
- 0, 0, 55, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 56, 57, 37, 58, 59,
- 0, 0, 60, 0, 0, 61, 113, 0, 0, 0,
- 0, 47, 48, 9, 0, 62, 63, 64, 51, 10,
- 11, 0, 0, 37, 0, 225, 242, 0, 0, 0,
- 0, 37, 113, 0, 0, 0, 0, 47, 48, 9,
- 113, 0, 115, 0, 51, 47, 48, 9, 226, 0,
- 0, 225, 51, 0, 0, 0, 37, 0, 0, 225,
- 64, 0, 10, 11, 397, 113, 0, 0, 115, 0,
- 47, 48, 9, 0, 226, 0, 115, 51, 0, 0,
- 0, 0, 226, 0, 407, 0, 64, 0, 10, 11,
- 37, 0, 0, 0, 64, 0, 10, 11, 0, 113,
- 0, 115, 0, 0, 47, 48, 9, 408, 0, 0,
- 0, 51, 0, 0, 0, 284, 0, 0, 225, 64,
- 0, 10, 11, 335, 113, 0, 0, 0, 0, 47,
- 48, 9, 336, 0, 0, 115, 51, 337, 338, 339,
- 0, 478, 0, 225, 340, 0, 0, 0, 0, 335,
- 0, 441, 461, 64, 0, 10, 11, 0, 336, 0,
- 115, 0, 0, 337, 338, 339, 226, 0, 342, 0,
- 340, 0, 0, 0, 442, 0, 335, 341, 64, 0,
- 10, 11, 0, 0, 0, 336, 344, 0, 0, 11,
- 337, 338, 542, 0, 342, 0, 0, 340, 0, 0,
- 0, 0, 335, 0, 341, 0, 0, 0, 0, 0,
- 335, 336, 344, 0, 0, 11, 337, 338, 339, 336,
- 0, 342, 0, 340, 337, 338, 339, 0, 0, 0,
- 341, 340, 0, 0, 0, 0, 0, 0, 341, 344,
- 0, 10, 11, 0, 0, 0, 0, 342, 0, 0,
- 0, 0, 0, 611, 0, 342, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 344, 0, 0, 11, 0,
- 0, 0, 0, 344, 177, 178, 11, 179, 0, 181,
+ 0, 35, 0, 0, 56, 57, 37, 58, 59, 0,
+ 0, 60, 0, 0, 61, 113, 0, 0, 0, 0,
+ 47, 48, 9, 0, 62, 63, 64, 51, 10, 11,
+ 0, 0, 0, 0, 159, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 35, 0, 0, 56, 57, 285,
+ 58, 160, 0, 0, 60, 0, 0, 61, 113, 0,
+ 0, 0, 0, 47, 48, 9, 0, 62, 63, 64,
+ 51, 10, 11, 0, 0, 0, 0, 55, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56, 57, 37, 58, 59, 0, 0, 60, 0, 0,
+ 61, 113, 0, 0, 0, 0, 47, 48, 9, 0,
+ 62, 63, 64, 51, 10, 11, 0, 37, 0, 0,
+ 225, 0, 0, 0, 0, 37, 113, 0, 243, 0,
+ 0, 47, 48, 9, 113, 0, 0, 115, 51, 47,
+ 48, 9, 0, 226, 0, 225, 51, 0, 0, 292,
+ 0, 37, 0, 225, 0, 64, 0, 10, 11, 283,
+ 113, 0, 115, 0, 0, 47, 48, 9, 226, 0,
+ 115, 0, 51, 0, 0, 0, 226, 0, 37, 225,
+ 64, 0, 10, 11, 399, 0, 0, 113, 64, 0,
+ 10, 11, 47, 48, 9, 0, 115, 0, 0, 51,
+ 0, 0, 226, 0, 37, 0, 409, 0, 0, 0,
+ 0, 0, 285, 113, 64, 0, 10, 11, 47, 48,
+ 9, 113, 0, 115, 0, 51, 47, 48, 9, 410,
+ 0, 0, 225, 51, 0, 0, 0, 336, 0, 0,
+ 225, 64, 0, 10, 11, 336, 337, 0, 463, 115,
+ 0, 338, 339, 544, 337, 480, 0, 115, 341, 338,
+ 339, 340, 0, 226, 0, 342, 341, 64, 0, 10,
+ 11, 336, 0, 342, 0, 64, 0, 10, 11, 0,
+ 337, 0, 343, 0, 0, 338, 339, 340, 0, 0,
+ 343, 0, 341, 0, 0, 0, 0, 0, 0, 342,
+ 345, 0, 10, 11, 0, 0, 0, 0, 345, 178,
+ 0, 11, 0, 181, 182, 183, 343, 0, 185, 186,
+ 187, 188, 613, 190, 191, 192, 193, 194, 195, 196,
+ 197, 198, 0, 0, 345, 177, 178, 11, 179, 0,
+ 181, 182, 183, 0, 0, 185, 186, 187, 188, 189,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 177, 178,
+ 0, 179, 0, 181, 182, 183, 0, 437, 185, 186,
+ 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
+ 197, 198, 0, 0, 0, 0, 0, 0, 177, 178,
+ 0, 179, 0, 181, 182, 183, 0, 434, 185, 186,
+ 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
+ 197, 198, 177, 178, 0, 179, 0, 181, 182, 183,
+ 0, 527, 185, 186, 187, 188, 189, 190, 191, 192,
+ 193, 194, 195, 196, 197, 198, 177, 178, 0, 179,
+ 0, 181, 182, 183, 0, 661, 185, 186, 187, 188,
+ 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
+ 177, 178, 0, 179, 0, 181, 182, 183, 0, 662,
+ 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
+ 195, 196, 197, 198, 177, 178, 0, 0, 0, 181,
182, 183, 0, 0, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 177, 178, 0,
- 179, 0, 181, 182, 183, 0, 435, 185, 186, 187,
- 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
- 198, 0, 0, 0, 0, 0, 0, 177, 178, 0,
- 179, 0, 181, 182, 183, 0, 432, 185, 186, 187,
- 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
- 198, 177, 178, 0, 179, 0, 181, 182, 183, 0,
- 525, 185, 186, 187, 188, 189, 190, 191, 192, 193,
- 194, 195, 196, 197, 198, 177, 178, 0, 179, 0,
- 181, 182, 183, 0, 659, 185, 186, 187, 188, 189,
- 190, 191, 192, 193, 194, 195, 196, 197, 198, 177,
- 178, 0, 179, 0, 181, 182, 183, 0, 660, 185,
- 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
- 196, 197, 198, 177, 178, 0, 0, 0, 181, 182,
- 183, 0, 0, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 177, 178, 0,
- 0, 0, 181, 182, 183, 0, 0, 185, 186, 187,
- 188, 0, 190, 191, 192, 193, 194, 195, 196, 197,
- 198
+ 191, 192, 193, 194, 195, 196, 197, 198, 177, 178,
+ 0, 0, 0, 181, 182, 183, 0, 0, 185, 186,
+ 187, 188, 0, 190, 191, 192, 193, 194, 195, 196,
+ 197, 198
};
static const yytype_int16 yycheck[] =
{
- 37, 37, 61, 143, 67, 37, 37, 202, 324, 251,
- 378, 205, 61, 28, 487, 127, 127, 136, 259, 224,
- 144, 133, 322, 148, 61, 454, 446, 268, 31, 61,
- 3, 143, 317, 264, 265, 276, 212, 5, 323, 280,
- 67, 36, 218, 219, 39, 250, 24, 59, 0, 290,
- 45, 1, 5, 25, 3, 1, 20, 37, 35, 3,
- 25, 24, 74, 11, 3, 55, 56, 57, 58, 59,
- 60, 7, 62, 63, 62, 24, 12, 114, 115, 116,
- 24, 62, 114, 115, 116, 35, 62, 68, 7, 35,
- 67, 128, 68, 12, 5, 73, 128, 65, 66, 72,
- 137, 574, 3, 67, 107, 137, 21, 75, 145, 59,
- 173, 160, 65, 145, 63, 152, 60, 67, 51, 63,
- 152, 67, 75, 160, 73, 74, 62, 75, 160, 73,
- 74, 24, 68, 63, 114, 115, 116, 256, 175, 439,
- 425, 136, 427, 175, 62, 390, 173, 142, 128, 68,
- 83, 200, 3, 398, 65, 49, 89, 137, 389, 3,
- 391, 62, 63, 200, 75, 145, 342, 68, 200, 159,
- 160, 644, 152, 24, 350, 24, 24, 606, 383, 599,
- 24, 7, 66, 598, 62, 60, 12, 224, 72, 226,
- 610, 611, 224, 7, 226, 175, 438, 24, 12, 50,
- 75, 517, 3, 62, 53, 242, 221, 244, 524, 68,
- 242, 59, 244, 250, 3, 59, 71, 462, 250, 63,
- 414, 62, 73, 74, 67, 73, 74, 421, 3, 73,
- 74, 473, 59, 127, 66, 272, 62, 652, 433, 654,
- 272, 66, 68, 59, 224, 24, 226, 284, 284, 24,
- 287, 288, 284, 284, 68, 287, 288, 369, 369, 318,
- 505, 24, 242, 59, 244, 441, 385, 379, 379, 318,
- 250, 447, 448, 478, 450, 50, 400, 402, 59, 520,
- 59, 318, 24, 459, 59, 461, 318, 40, 35, 68,
- 53, 44, 272, 24, 73, 74, 59, 665, 73, 74,
- 62, 74, 62, 64, 284, 68, 68, 287, 288, 59,
- 73, 74, 59, 24, 208, 209, 561, 633, 24, 40,
- 67, 59, 63, 44, 361, 35, 375, 67, 24, 361,
- 75, 73, 74, 578, 579, 577, 373, 9, 375, 375,
- 60, 373, 53, 375, 375, 17, 383, 72, 59, 21,
- 387, 383, 59, 59, 417, 387, 35, 72, 603, 31,
- 32, 59, 73, 74, 60, 63, 571, 73, 74, 428,
- 407, 408, 3, 71, 550, 407, 408, 73, 74, 428,
- 59, 361, 558, 24, 35, 35, 60, 281, 67, 35,
- 385, 428, 64, 373, 588, 375, 428, 291, 393, 594,
- 8, 60, 397, 383, 62, 35, 35, 387, 59, 59,
- 75, 94, 95, 59, 97, 98, 67, 67, 59, 62,
- 60, 67, 471, 24, 59, 601, 602, 407, 408, 59,
- 5, 65, 73, 74, 471, 471, 24, 67, 487, 471,
- 471, 478, 62, 62, 24, 20, 478, 22, 497, 72,
- 487, 487, 24, 28, 24, 487, 487, 569, 569, 3,
- 497, 36, 3, 62, 39, 497, 62, 8, 43, 62,
- 45, 59, 67, 367, 368, 65, 17, 66, 53, 54,
- 60, 22, 23, 24, 521, 73, 74, 59, 29, 521,
- 60, 471, 67, 73, 74, 34, 24, 95, 478, 97,
- 98, 73, 74, 73, 74, 44, 59, 487, 67, 48,
- 71, 67, 406, 8, 53, 54, 55, 56, 59, 65,
- 62, 584, 62, 60, 664, 574, 420, 62, 62, 212,
- 71, 59, 73, 74, 571, 218, 219, 574, 574, 571,
- 60, 521, 574, 574, 60, 73, 74, 60, 63, 68,
- 60, 68, 664, 128, 35, 60, 60, 60, 60, 68,
- 60, 136, 60, 75, 75, 624, 60, 142, 3, 144,
- 36, 68, 62, 148, 60, 624, 72, 62, 60, 59,
- 59, 49, 75, 66, 60, 60, 60, 624, 8, 62,
- 60, 571, 624, 61, 574, 644, 64, 17, 173, 60,
- 60, 59, 22, 23, 24, 59, 68, 644, 644, 29,
- 62, 49, 644, 644, 62, 72, 36, 68, 62, 59,
- 8, 60, 68, 60, 60, 68, 201, 14, 62, 17,
- 72, 60, 207, 53, 22, 23, 24, 60, 213, 59,
- 68, 29, 60, 60, 22, 65, 221, 31, 36, 224,
- 584, 71, 335, 73, 74, 75, 645, 510, 526, 342,
- 235, 526, 244, 39, 644, 53, 282, 350, 244, 160,
- 393, 59, 385, 373, 22, 250, 251, 65, 214, 497,
- 335, 335, 464, 71, 34, 73, 74, 75, 38, 39,
- 40, 442, 605, 43, 44, 45, 46, 601, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 282, 176, 177,
- 178, 179, 460, 181, 182, 183, -1, 185, 186, 187,
+ 37, 37, 61, 143, 67, 37, 37, 202, 380, 205,
+ 224, 148, 61, 448, 144, 127, 28, 489, 456, 67,
+ 127, 133, 252, 325, 61, 114, 115, 116, 136, 61,
+ 31, 143, 323, 36, 3, 51, 39, 251, 11, 5,
+ 24, 260, 45, 49, 35, 392, 7, 25, 137, 35,
+ 269, 12, 5, 400, 265, 266, 145, 37, 277, 3,
+ 1, 35, 281, 152, 318, 0, 24, 83, 59, 62,
+ 324, 3, 291, 89, 25, 68, 67, 114, 115, 116,
+ 24, 67, 114, 115, 116, 59, 175, 3, 24, 73,
+ 1, 128, 24, 67, 35, 53, 128, 20, 3, 65,
+ 137, 62, 75, 72, 576, 137, 107, 68, 145, 75,
+ 173, 160, 65, 145, 62, 152, 60, 464, 59, 63,
+ 152, 127, 75, 160, 35, 173, 67, 59, 160, 73,
+ 74, 63, 600, 136, 114, 115, 116, 226, 175, 142,
+ 7, 73, 74, 175, 67, 12, 62, 63, 128, 257,
+ 441, 200, 68, 62, 243, 3, 67, 137, 3, 68,
+ 507, 5, 24, 200, 21, 145, 601, 63, 200, 24,
+ 608, 385, 152, 427, 646, 429, 24, 612, 613, 24,
+ 391, 59, 393, 59, 273, 63, 654, 224, 656, 226,
+ 62, 3, 224, 71, 226, 175, 285, 59, 74, 288,
+ 289, 68, 208, 209, 62, 50, 243, 3, 245, 221,
+ 440, 243, 24, 245, 251, 63, 563, 519, 71, 251,
+ 416, 65, 66, 3, 526, 73, 74, 423, 73, 74,
+ 62, 75, 67, 580, 581, 66, 273, 7, 50, 24,
+ 435, 273, 12, 66, 224, 475, 226, 59, 285, 285,
+ 7, 288, 289, 285, 285, 12, 288, 289, 605, 371,
+ 319, 73, 74, 243, 371, 245, 480, 404, 24, 381,
+ 319, 251, 402, 362, 381, 60, 282, 59, 59, 387,
+ 74, 60, 319, 35, 212, 24, 292, 319, 73, 74,
+ 218, 219, 62, 273, 59, 667, 75, 40, 68, 35,
+ 389, 44, 40, 522, 60, 285, 44, 59, 288, 289,
+ 24, 68, 24, 66, 9, 67, 24, 73, 74, 72,
+ 409, 410, 17, 59, 64, 362, 21, 62, 377, 59,
+ 362, 67, 63, 635, 73, 74, 31, 32, 375, 24,
+ 377, 377, 59, 375, 67, 377, 377, 59, 385, 579,
+ 24, 59, 389, 385, 24, 75, 419, 389, 60, 573,
+ 68, 73, 74, 369, 370, 73, 74, 35, 53, 64,
+ 62, 430, 409, 410, 59, 72, 68, 409, 410, 53,
+ 62, 430, 362, 68, 387, 59, 68, 59, 73, 74,
+ 60, 72, 395, 430, 590, 375, 399, 377, 430, 73,
+ 74, 596, 408, 73, 74, 385, 3, 94, 95, 389,
+ 97, 98, 60, 8, 60, 343, 422, 35, 95, 24,
+ 97, 98, 62, 351, 473, 24, 75, 60, 62, 409,
+ 410, 24, 5, 59, 523, 62, 473, 473, 24, 62,
+ 489, 473, 473, 480, 72, 3, 62, 20, 480, 22,
+ 499, 62, 489, 489, 59, 28, 65, 489, 489, 571,
+ 59, 67, 499, 36, 571, 35, 39, 499, 73, 74,
+ 43, 62, 45, 59, 73, 74, 65, 59, 66, 24,
+ 53, 54, 67, 67, 71, 8, 523, 73, 74, 59,
+ 65, 523, 60, 473, 67, 62, 62, 67, 62, 24,
+ 480, 62, 35, 55, 56, 57, 58, 59, 60, 489,
+ 62, 63, 60, 60, 59, 443, 60, 63, 35, 68,
+ 60, 449, 450, 586, 452, 212, 666, 576, 73, 74,
+ 68, 218, 219, 461, 59, 463, 573, 34, 60, 576,
+ 576, 573, 59, 523, 576, 576, 60, 44, 73, 74,
+ 67, 48, 60, 36, 666, 128, 53, 54, 55, 56,
+ 75, 68, 75, 136, 60, 3, 60, 626, 60, 142,
+ 8, 144, 60, 68, 3, 148, 62, 626, 60, 17,
+ 60, 72, 75, 62, 22, 23, 24, 59, 66, 626,
+ 60, 29, 60, 573, 626, 60, 576, 646, 62, 60,
+ 173, 60, 8, 60, 59, 59, 59, 159, 160, 646,
+ 646, 17, 68, 62, 646, 646, 22, 23, 24, 62,
+ 72, 59, 68, 29, 552, 49, 62, 59, 201, 60,
+ 36, 68, 560, 71, 207, 73, 74, 60, 68, 60,
+ 213, 14, 62, 60, 72, 60, 60, 53, 221, 336,
+ 60, 224, 68, 4, 5, 31, 343, 22, 647, 65,
+ 586, 512, 235, 528, 351, 71, 646, 528, 74, 245,
+ 283, 39, 214, 245, 395, 603, 604, 387, 251, 252,
+ 22, 375, 33, 34, 160, 36, 37, 38, 39, 40,
+ 499, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 8, 336, 466, 607,
+ 283, 49, 444, 603, 65, 17, 336, 462, -1, -1,
+ 22, 23, 24, 61, 75, -1, 64, 29, 213, -1,
+ -1, -1, -1, -1, 36, -1, -1, -1, -1, -1,
+ 3, -1, -1, -1, -1, 8, -1, -1, 11, -1,
+ 323, 53, -1, -1, 17, -1, 443, 59, -1, 22,
+ 23, 24, 449, 450, -1, 452, 29, -1, -1, 71,
+ -1, 344, 74, 36, 461, -1, 463, -1, -1, -1,
+ -1, -1, 355, -1, -1, -1, 49, 50, -1, 52,
+ 53, -1, -1, 56, -1, -1, 59, -1, -1, -1,
+ -1, -1, 375, -1, 377, -1, 69, 70, 71, 382,
+ 73, 74, 385, -1, 387, -1, -1, -1, -1, -1,
+ -1, -1, 395, -1, -1, -1, 399, -1, -1, 402,
+ -1, 404, -1, -1, -1, -1, -1, -1, 176, 177,
+ 178, 179, -1, 181, 182, 183, 419, 185, 186, 187,
188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
- 198, -1, 200, -1, 202, 213, 204, -1, -1, -1,
- 208, 209, 210, -1, -1, -1, -1, 322, -1, -1,
- 114, 115, 116, -1, -1, -1, -1, -1, 441, -1,
- -1, -1, -1, -1, 447, 448, -1, 450, 343, -1,
- -1, 8, -1, 137, -1, 8, 459, -1, 461, 354,
- 17, 145, -1, -1, 17, 22, 23, 24, 152, 22,
- 23, 24, 29, -1, -1, -1, 29, -1, 373, 36,
- 375, -1, -1, 36, -1, 380, -1, -1, 383, -1,
- 385, 175, -1, 281, -1, -1, 53, -1, 393, -1,
- 53, -1, 397, 291, -1, 400, 59, 402, 65, -1,
- -1, -1, -1, -1, 71, -1, -1, 74, 71, -1,
- 73, 74, 417, -1, -1, -1, 314, -1, -1, -1,
- 318, -1, -1, -1, -1, -1, 324, -1, -1, -1,
- -1, -1, 226, 438, 439, -1, -1, 550, -1, -1,
- -1, 446, 447, -1, 449, 558, -1, -1, 242, 454,
- -1, -1, 565, -1, -1, 460, -1, -1, 463, 464,
- -1, -1, -1, -1, -1, -1, -1, -1, 473, 367,
- 368, -1, -1, 478, -1, -1, -1, -1, 272, -1,
- -1, 34, -1, -1, -1, 598, -1, -1, 601, 602,
- 284, 44, -1, 287, 288, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, -1, -1, -1, -1, 406, -1,
- -1, -1, -1, 4, 5, -1, -1, -1, -1, -1,
- -1, -1, 420, -1, -1, -1, -1, -1, -1, -1,
- 428, -1, -1, -1, -1, 433, -1, -1, -1, 652,
- -1, 654, 33, 34, -1, 36, 37, 38, 39, 40,
- -1, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 571, 361, -1, -1,
- -1, -1, 577, -1, 65, -1, 474, 475, -1, 584,
- -1, -1, -1, -1, 75, -1, -1, -1, -1, -1,
- -1, -1, -1, 387, 599, -1, 601, -1, -1, 497,
- 605, 606, -1, -1, -1, 610, 611, -1, -1, -1,
- -1, -1, -1, 407, 408, -1, -1, -1, -1, 517,
- -1, -1, -1, -1, -1, -1, 524, 525, 526, 0,
+ 198, -1, 200, -1, 202, 552, 204, 440, 441, -1,
+ 208, 209, 210, 560, -1, 448, 449, -1, 451, -1,
+ 567, -1, -1, 456, -1, 3, -1, -1, -1, 462,
+ 8, -1, 465, 466, -1, -1, -1, -1, 236, 17,
+ -1, -1, 475, -1, 22, 23, 24, 480, 26, -1,
+ -1, 29, -1, 600, -1, -1, 603, 604, 36, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 49, 50, -1, 52, 53, -1, -1, 56, -1,
+ -1, 59, -1, -1, 282, -1, -1, -1, -1, -1,
+ -1, 69, 70, 71, 292, 73, 74, 8, -1, -1,
+ -1, -1, -1, -1, -1, -1, 17, 654, -1, 656,
+ -1, 22, 23, 24, -1, -1, -1, 315, 29, -1,
+ -1, 319, 8, -1, -1, 36, -1, 325, -1, -1,
+ -1, 17, -1, -1, -1, -1, 22, 23, 24, -1,
+ 573, -1, 53, 29, -1, -1, 579, -1, 59, -1,
+ 36, -1, -1, 586, 65, -1, -1, -1, -1, -1,
+ 71, -1, 73, 74, 75, -1, -1, 53, 601, -1,
+ 603, 369, 370, 59, 607, 608, -1, -1, -1, 612,
+ 613, -1, -1, -1, -1, 71, -1, 73, 74, 0,
1, -1, 3, -1, -1, 6, -1, 8, 9, 10,
-1, -1, 13, -1, 15, 16, 17, 18, 19, 20,
- -1, 22, 23, 24, -1, -1, 27, 28, 29, 30,
- 31, 32, -1, -1, -1, 36, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 49, 50,
+ 408, 22, 23, 24, -1, -1, 27, 28, 29, 30,
+ 31, 32, -1, -1, 422, 36, -1, -1, -1, -1,
+ -1, -1, 430, -1, -1, -1, -1, 435, 49, 50,
-1, 52, 53, -1, -1, 56, -1, -1, 59, -1,
- -1, 62, -1, -1, -1, -1, 594, -1, 69, 70,
- 71, -1, 73, 74, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 621, 622, -1, 624, 521, -1, -1,
- -1, 1, -1, 3, -1, 633, 6, 7, 8, 9,
- 10, -1, 12, 13, -1, 15, 16, 17, 18, 19,
- 20, -1, 22, 23, 24, -1, -1, 27, 28, 29,
- 30, 31, 32, -1, -1, -1, 36, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 49,
- 50, -1, 52, 53, -1, -1, 56, -1, -1, 59,
- -1, -1, 62, -1, -1, -1, -1, 67, 68, 69,
- 70, 71, -1, 73, 74, 1, -1, 3, -1, -1,
- 6, -1, 8, 9, 10, -1, -1, 13, -1, 15,
- 16, 17, 18, 19, 20, -1, 22, 23, 24, -1,
- -1, 27, 28, 29, 30, 31, 32, -1, -1, -1,
- 36, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 49, 50, -1, 52, 53, -1, -1,
- 56, -1, 3, 59, -1, -1, 62, 8, -1, -1,
- 11, 67, 68, 69, 70, 71, 17, 73, 74, -1,
- -1, 22, 23, 24, -1, -1, -1, -1, 29, -1,
- -1, -1, -1, -1, -1, 36, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 3, -1, -1, 49, 50,
- 8, 52, 53, -1, -1, 56, -1, -1, 59, 17,
- -1, -1, -1, -1, 22, 23, 24, -1, 69, 70,
- 71, 29, 73, 74, -1, -1, -1, -1, 36, -1,
+ -1, 62, -1, -1, 34, -1, -1, -1, 69, 70,
+ 71, -1, 73, 74, 44, -1, -1, -1, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, -1, 476, 477,
+ -1, -1, -1, -1, -1, -1, -1, -1, 1, -1,
+ 3, -1, -1, 6, 7, 8, 9, 10, -1, 12,
+ 13, 499, 15, 16, 17, 18, 19, 20, -1, 22,
+ 23, 24, -1, -1, 27, 28, 29, 30, 31, 32,
+ -1, 519, -1, 36, -1, -1, -1, -1, 526, 527,
+ 528, -1, -1, -1, -1, -1, 49, 50, -1, 52,
+ 53, -1, -1, 56, -1, -1, 59, -1, -1, 62,
+ -1, -1, -1, -1, 67, 68, 69, 70, 71, -1,
+ 73, 74, -1, -1, -1, -1, 1, -1, 3, -1,
+ -1, 6, -1, 8, 9, 10, -1, -1, 13, -1,
+ 15, 16, 17, 18, 19, 20, -1, 22, 23, 24,
+ -1, -1, 27, 28, 29, 30, 31, 32, 596, -1,
+ -1, 36, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 49, 50, -1, 52, 53, -1,
+ -1, 56, -1, -1, 59, 623, 624, 62, 626, -1,
+ -1, -1, 67, 68, 69, 70, 71, 635, 73, 74,
+ 3, -1, -1, -1, -1, 8, -1, -1, -1, -1,
+ -1, -1, -1, -1, 17, -1, 8, -1, -1, 22,
+ 23, 24, -1, -1, -1, 17, 29, -1, -1, -1,
+ 22, 23, 24, 36, -1, -1, -1, 29, -1, -1,
+ -1, -1, -1, -1, 36, -1, 49, 50, -1, 52,
+ 53, -1, -1, 56, -1, 3, 59, 60, -1, -1,
+ 8, 53, -1, -1, -1, -1, 69, 70, 71, 17,
+ 73, 74, -1, -1, 22, 23, 24, -1, -1, 71,
+ -1, 29, 74, -1, -1, -1, -1, -1, 36, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 49, 50, -1, 52, 53, -1, -1, 56, -1,
- 3, 59, 60, -1, -1, 8, -1, -1, -1, -1,
+ 3, 59, -1, -1, -1, 8, -1, -1, -1, 67,
-1, 69, 70, 71, 17, 73, 74, -1, -1, 22,
- 23, 24, -1, -1, -1, -1, 29, -1, -1, -1,
+ 23, 24, -1, -1, -1, -1, 29, -1, 31, -1,
-1, -1, -1, 36, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 49, 50, -1, 52,
53, -1, -1, 56, -1, 3, 59, -1, -1, -1,
- 8, -1, -1, -1, 67, -1, 69, 70, 71, 17,
- 73, 74, -1, -1, 22, 23, 24, -1, -1, -1,
- -1, 29, -1, 31, -1, -1, -1, -1, 36, -1,
+ 8, -1, -1, -1, -1, -1, 69, 70, 71, 17,
+ 73, 74, -1, -1, 22, 23, 24, -1, 26, -1,
+ -1, 29, -1, -1, -1, -1, -1, -1, 36, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 49, 50, -1, 52, 53, -1, -1, 56, -1,
3, 59, -1, -1, -1, 8, -1, -1, -1, -1,
-1, 69, 70, 71, 17, 73, 74, -1, -1, 22,
23, 24, -1, 26, -1, -1, 29, -1, -1, -1,
-1, -1, -1, 36, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 49, 50, -1, 52,
- 53, -1, -1, 56, -1, 3, 59, -1, -1, -1,
- 8, -1, -1, -1, -1, -1, 69, 70, 71, 17,
- 73, 74, -1, -1, 22, 23, 24, -1, 26, -1,
- -1, 29, -1, -1, -1, -1, -1, -1, 36, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 3, -1,
- -1, 49, 50, 8, 52, 53, -1, -1, 56, -1,
- -1, 59, 17, -1, -1, -1, -1, 22, 23, 24,
- -1, 69, 70, 71, 29, 73, 74, -1, -1, -1,
+ -1, -1, -1, 3, -1, -1, 49, 50, 8, 52,
+ 53, -1, -1, 56, -1, -1, 59, 17, -1, -1,
+ -1, -1, 22, 23, 24, -1, 69, 70, 71, 29,
+ 73, 74, -1, -1, -1, -1, 36, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 49,
+ 50, -1, 52, 53, -1, -1, 56, -1, 3, 59,
+ -1, -1, -1, 8, -1, -1, -1, 67, -1, 69,
+ 70, 71, 17, 73, 74, -1, -1, 22, 23, 24,
+ -1, -1, -1, -1, 29, -1, -1, -1, -1, -1,
-1, 36, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 49, 50, -1, 52, 53, -1,
- -1, 56, -1, 3, 59, -1, -1, -1, 8, -1,
- -1, -1, 67, -1, 69, 70, 71, 17, 73, 74,
- -1, -1, 22, 23, 24, -1, -1, -1, -1, 29,
- -1, -1, -1, -1, -1, -1, 36, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 3, -1, -1, 49,
- 50, 8, 52, 53, -1, -1, 56, -1, -1, 59,
- 17, -1, -1, -1, -1, 22, 23, 24, -1, 69,
- 70, 71, 29, 73, 74, -1, -1, -1, -1, 36,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
- -1, -1, 49, 50, 8, 52, 53, -1, -1, 56,
- -1, -1, 59, 17, -1, -1, -1, -1, 22, 23,
- 24, -1, 69, 70, 71, 29, 73, 74, -1, -1,
- -1, -1, 36, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 49, 50, 8, 52, 53,
- -1, -1, 56, -1, -1, 59, 17, -1, -1, -1,
- -1, 22, 23, 24, -1, 69, 70, 71, 29, 73,
- 74, -1, -1, 8, -1, 36, 11, -1, -1, -1,
- -1, 8, 17, -1, -1, -1, -1, 22, 23, 24,
- 17, -1, 53, -1, 29, 22, 23, 24, 59, -1,
- -1, 36, 29, -1, -1, -1, 8, -1, -1, 36,
- 71, -1, 73, 74, 75, 17, -1, -1, 53, -1,
- 22, 23, 24, -1, 59, -1, 53, 29, -1, -1,
- -1, -1, 59, -1, 36, -1, 71, -1, 73, 74,
- 8, -1, -1, -1, 71, -1, 73, 74, -1, 17,
- -1, 53, -1, -1, 22, 23, 24, 59, -1, -1,
- -1, 29, -1, -1, -1, 8, -1, -1, 36, 71,
- -1, 73, 74, 8, 17, -1, -1, -1, -1, 22,
- 23, 24, 17, -1, -1, 53, 29, 22, 23, 24,
- -1, 59, -1, 36, 29, -1, -1, -1, -1, 8,
- -1, 36, 11, 71, -1, 73, 74, -1, 17, -1,
- 53, -1, -1, 22, 23, 24, 59, -1, 53, -1,
- 29, -1, -1, -1, 59, -1, 8, 36, 71, -1,
- 73, 74, -1, -1, -1, 17, 71, -1, -1, 74,
- 22, 23, 24, -1, 53, -1, -1, 29, -1, -1,
- -1, -1, 8, -1, 36, -1, -1, -1, -1, -1,
- 8, 17, 71, -1, -1, 74, 22, 23, 24, 17,
- -1, 53, -1, 29, 22, 23, 24, -1, -1, -1,
- 36, 29, -1, -1, -1, -1, -1, -1, 36, 71,
- -1, 73, 74, -1, -1, -1, -1, 53, -1, -1,
- -1, -1, -1, 59, -1, 53, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 71, -1, -1, 74, -1,
- -1, -1, -1, 71, 33, 34, 74, 36, -1, 38,
+ -1, 3, -1, -1, 49, 50, 8, 52, 53, -1,
+ -1, 56, -1, -1, 59, 17, -1, -1, -1, -1,
+ 22, 23, 24, -1, 69, 70, 71, 29, 73, 74,
+ -1, -1, -1, -1, 36, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 3, -1, -1, 49, 50, 8,
+ 52, 53, -1, -1, 56, -1, -1, 59, 17, -1,
+ -1, -1, -1, 22, 23, 24, -1, 69, 70, 71,
+ 29, 73, 74, -1, -1, -1, -1, 36, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 49, 50, 8, 52, 53, -1, -1, 56, -1, -1,
+ 59, 17, -1, -1, -1, -1, 22, 23, 24, -1,
+ 69, 70, 71, 29, 73, 74, -1, 8, -1, -1,
+ 36, -1, -1, -1, -1, 8, 17, -1, 11, -1,
+ -1, 22, 23, 24, 17, -1, -1, 53, 29, 22,
+ 23, 24, -1, 59, -1, 36, 29, -1, -1, 65,
+ -1, 8, -1, 36, -1, 71, -1, 73, 74, 75,
+ 17, -1, 53, -1, -1, 22, 23, 24, 59, -1,
+ 53, -1, 29, -1, -1, -1, 59, -1, 8, 36,
+ 71, -1, 73, 74, 75, -1, -1, 17, 71, -1,
+ 73, 74, 22, 23, 24, -1, 53, -1, -1, 29,
+ -1, -1, 59, -1, 8, -1, 36, -1, -1, -1,
+ -1, -1, 8, 17, 71, -1, 73, 74, 22, 23,
+ 24, 17, -1, 53, -1, 29, 22, 23, 24, 59,
+ -1, -1, 36, 29, -1, -1, -1, 8, -1, -1,
+ 36, 71, -1, 73, 74, 8, 17, -1, 11, 53,
+ -1, 22, 23, 24, 17, 59, -1, 53, 29, 22,
+ 23, 24, -1, 59, -1, 36, 29, 71, -1, 73,
+ 74, 8, -1, 36, -1, 71, -1, 73, 74, -1,
+ 17, -1, 53, -1, -1, 22, 23, 24, -1, -1,
+ 53, -1, 29, -1, -1, -1, -1, -1, -1, 36,
+ 71, -1, 73, 74, -1, -1, -1, -1, 71, 34,
+ -1, 74, -1, 38, 39, 40, 53, -1, 43, 44,
+ 45, 46, 59, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, -1, -1, 71, 33, 34, 74, 36, -1,
+ 38, 39, 40, -1, -1, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 33, 34,
+ -1, 36, -1, 38, 39, 40, -1, 75, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, -1, -1, -1, -1, -1, -1, 33, 34,
+ -1, 36, -1, 38, 39, 40, -1, 72, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 33, 34, -1, 36, -1, 38, 39, 40,
+ -1, 66, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 33, 34, -1, 36,
+ -1, 38, 39, 40, -1, 66, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 33, 34, -1, 36, -1, 38, 39, 40, -1, 66,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 33, 34, -1, -1, -1, 38,
39, 40, -1, -1, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 33, 34, -1,
- 36, -1, 38, 39, 40, -1, 75, 43, 44, 45,
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, -1, -1, -1, -1, -1, -1, 33, 34, -1,
- 36, -1, 38, 39, 40, -1, 72, 43, 44, 45,
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 33, 34, -1, 36, -1, 38, 39, 40, -1,
- 66, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 33, 34, -1, 36, -1,
- 38, 39, 40, -1, 66, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 33,
- 34, -1, 36, -1, 38, 39, 40, -1, 66, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 33, 34, -1, -1, -1, 38, 39,
- 40, -1, -1, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 33, 34, -1,
- -1, -1, 38, 39, 40, -1, -1, 43, 44, 45,
- 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
- 56
+ 49, 50, 51, 52, 53, 54, 55, 56, 33, 34,
+ -1, -1, -1, 38, 39, 40, -1, -1, 43, 44,
+ 45, 46, -1, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1528,50 +1514,50 @@ static const yytype_uint8 yystos[] =
59, 63, 71, 66, 59, 137, 1, 137, 5, 65,
75, 142, 200, 59, 160, 200, 24, 200, 201, 200,
64, 62, 190, 88, 59, 36, 59, 146, 152, 153,
- 154, 155, 161, 146, 146, 63, 98, 107, 108, 109,
- 186, 194, 11, 136, 141, 145, 146, 177, 178, 179,
- 59, 67, 162, 112, 194, 24, 59, 68, 138, 171,
- 173, 175, 146, 35, 53, 59, 68, 138, 170, 172,
- 173, 174, 184, 112, 60, 97, 169, 146, 60, 93,
- 167, 65, 75, 146, 8, 147, 60, 72, 72, 60,
- 94, 65, 146, 126, 126, 126, 126, 126, 126, 126,
+ 154, 155, 161, 146, 146, 63, 26, 98, 107, 108,
+ 109, 186, 194, 11, 136, 141, 145, 146, 177, 178,
+ 179, 59, 67, 162, 112, 194, 24, 59, 68, 138,
+ 171, 173, 175, 146, 35, 53, 59, 68, 138, 170,
+ 172, 173, 174, 184, 112, 60, 97, 169, 146, 60,
+ 93, 167, 65, 75, 146, 8, 147, 60, 72, 72,
+ 60, 94, 65, 146, 126, 126, 126, 126, 126, 126,
126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
- 126, 126, 126, 126, 130, 60, 135, 187, 59, 141,
- 126, 192, 182, 126, 130, 1, 67, 91, 100, 180,
- 181, 183, 186, 186, 126, 8, 17, 22, 23, 24,
- 29, 36, 53, 65, 71, 142, 202, 204, 205, 206,
- 141, 207, 215, 162, 59, 3, 202, 202, 83, 60,
- 179, 8, 146, 60, 141, 35, 105, 5, 65, 62,
- 146, 136, 145, 75, 191, 60, 179, 183, 115, 62,
- 63, 24, 173, 59, 176, 62, 190, 72, 104, 59,
- 174, 53, 174, 62, 190, 3, 198, 75, 146, 123,
- 62, 190, 62, 190, 186, 139, 65, 36, 59, 146,
- 152, 153, 154, 161, 67, 146, 146, 62, 190, 186,
- 65, 67, 126, 131, 132, 188, 189, 11, 75, 191,
- 31, 135, 72, 66, 180, 75, 191, 189, 101, 62,
- 68, 36, 59, 203, 204, 206, 59, 67, 71, 67,
- 8, 202, 3, 50, 59, 141, 212, 213, 3, 72,
- 65, 11, 202, 60, 75, 62, 195, 215, 62, 62,
- 62, 60, 60, 106, 26, 26, 194, 177, 59, 141,
- 151, 152, 153, 154, 155, 161, 163, 60, 68, 105,
- 194, 141, 60, 179, 175, 68, 146, 7, 12, 68,
- 99, 102, 174, 198, 174, 60, 172, 68, 138, 198,
- 35, 97, 60, 93, 60, 186, 146, 130, 94, 95,
- 168, 185, 60, 186, 130, 66, 75, 191, 68, 191,
- 135, 60, 60, 60, 192, 60, 68, 183, 180, 202,
- 205, 195, 24, 141, 142, 197, 202, 209, 217, 202,
- 141, 196, 208, 216, 202, 3, 212, 62, 72, 202,
- 213, 202, 198, 141, 207, 60, 183, 126, 126, 62,
- 179, 59, 163, 116, 60, 187, 66, 103, 60, 60,
- 198, 104, 60, 189, 62, 190, 146, 189, 67, 126,
- 133, 131, 132, 60, 66, 72, 68, 60, 60, 59,
- 68, 62, 72, 202, 68, 62, 49, 202, 62, 198,
- 59, 59, 202, 210, 211, 68, 194, 60, 179, 119,
- 163, 5, 65, 66, 75, 183, 198, 198, 68, 68,
- 95, 60, 68, 130, 192, 210, 195, 209, 202, 198,
- 208, 212, 195, 195, 60, 14, 117, 120, 126, 126,
- 189, 72, 60, 60, 60, 60, 163, 20, 100, 66,
- 66, 68, 210, 210, 118, 112, 105
+ 126, 126, 126, 126, 126, 130, 60, 135, 187, 59,
+ 141, 126, 192, 182, 126, 130, 1, 67, 91, 100,
+ 180, 181, 183, 186, 186, 126, 8, 17, 22, 23,
+ 24, 29, 36, 53, 65, 71, 142, 202, 204, 205,
+ 206, 141, 207, 215, 162, 59, 3, 202, 202, 83,
+ 60, 179, 8, 146, 60, 141, 126, 35, 105, 5,
+ 65, 62, 146, 136, 145, 75, 191, 60, 179, 183,
+ 115, 62, 63, 24, 173, 59, 176, 62, 190, 72,
+ 104, 59, 174, 53, 174, 62, 190, 3, 198, 75,
+ 146, 123, 62, 190, 62, 190, 186, 139, 65, 36,
+ 59, 146, 152, 153, 154, 161, 67, 146, 146, 62,
+ 190, 186, 65, 67, 126, 131, 132, 188, 189, 11,
+ 75, 191, 31, 135, 72, 66, 180, 75, 191, 189,
+ 101, 62, 68, 36, 59, 203, 204, 206, 59, 67,
+ 71, 67, 8, 202, 3, 50, 59, 141, 212, 213,
+ 3, 72, 65, 11, 202, 60, 75, 62, 195, 215,
+ 62, 62, 62, 60, 60, 106, 26, 26, 194, 177,
+ 59, 141, 151, 152, 153, 154, 155, 161, 163, 60,
+ 68, 105, 194, 141, 60, 179, 175, 68, 146, 7,
+ 12, 68, 99, 102, 174, 198, 174, 60, 172, 68,
+ 138, 198, 35, 97, 60, 93, 60, 186, 146, 130,
+ 94, 95, 168, 185, 60, 186, 130, 66, 75, 191,
+ 68, 191, 135, 60, 60, 60, 192, 60, 68, 183,
+ 180, 202, 205, 195, 24, 141, 142, 197, 202, 209,
+ 217, 202, 141, 196, 208, 216, 202, 3, 212, 62,
+ 72, 202, 213, 202, 198, 141, 207, 60, 183, 126,
+ 126, 62, 179, 59, 163, 116, 60, 187, 66, 103,
+ 60, 60, 198, 104, 60, 189, 62, 190, 146, 189,
+ 67, 126, 133, 131, 132, 60, 66, 72, 68, 60,
+ 60, 59, 68, 62, 72, 202, 68, 62, 49, 202,
+ 62, 198, 59, 59, 202, 210, 211, 68, 194, 60,
+ 179, 119, 163, 5, 65, 66, 75, 183, 198, 198,
+ 68, 68, 95, 60, 68, 130, 192, 210, 195, 209,
+ 202, 198, 208, 212, 195, 195, 60, 14, 117, 120,
+ 126, 126, 189, 72, 60, 60, 60, 60, 163, 20,
+ 100, 66, 66, 68, 210, 210, 118, 112, 105
};
#define yyerrok (yyerrstatus = 0)
@@ -2795,20 +2781,22 @@ yyreduce:
#line 461 "go.y"
{
(yyval.node) = nod(OASOP, (yyvsp[(1) - (2)].node), nodintconst(1));
+ (yyval.node)->implicit = 1;
(yyval.node)->etype = OADD;
}
break;
case 55:
-#line 466 "go.y"
+#line 467 "go.y"
{
(yyval.node) = nod(OASOP, (yyvsp[(1) - (2)].node), nodintconst(1));
+ (yyval.node)->implicit = 1;
(yyval.node)->etype = OSUB;
}
break;
case 56:
-#line 473 "go.y"
+#line 475 "go.y"
{
Node *n, *nn;
@@ -2831,7 +2819,7 @@ yyreduce:
break;
case 57:
-#line 493 "go.y"
+#line 495 "go.y"
{
Node *n;
@@ -2852,7 +2840,7 @@ yyreduce:
break;
case 58:
-#line 511 "go.y"
+#line 513 "go.y"
{
// will be converted to OCASE
// right will point to next case
@@ -2864,7 +2852,7 @@ yyreduce:
break;
case 59:
-#line 520 "go.y"
+#line 522 "go.y"
{
Node *n, *nn;
@@ -2883,14 +2871,14 @@ yyreduce:
break;
case 60:
-#line 538 "go.y"
+#line 540 "go.y"
{
markdcl();
}
break;
case 61:
-#line 542 "go.y"
+#line 544 "go.y"
{
if((yyvsp[(3) - (4)].list) == nil)
(yyval.node) = nod(OEMPTY, N, N);
@@ -2901,7 +2889,7 @@ yyreduce:
break;
case 62:
-#line 552 "go.y"
+#line 554 "go.y"
{
// If the last token read by the lexer was consumed
// as part of the case, clear it (parser has cleared yychar).
@@ -2915,7 +2903,7 @@ yyreduce:
break;
case 63:
-#line 563 "go.y"
+#line 565 "go.y"
{
int last;
@@ -2937,28 +2925,28 @@ yyreduce:
break;
case 64:
-#line 583 "go.y"
+#line 585 "go.y"
{
(yyval.list) = nil;
}
break;
case 65:
-#line 587 "go.y"
+#line 589 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node));
}
break;
case 66:
-#line 593 "go.y"
+#line 595 "go.y"
{
markdcl();
}
break;
case 67:
-#line 597 "go.y"
+#line 599 "go.y"
{
(yyval.list) = (yyvsp[(3) - (4)].list);
popdcl();
@@ -2966,7 +2954,7 @@ yyreduce:
break;
case 68:
-#line 604 "go.y"
+#line 606 "go.y"
{
(yyval.node) = nod(ORANGE, N, (yyvsp[(4) - (4)].node));
(yyval.node)->list = (yyvsp[(1) - (4)].list);
@@ -2975,7 +2963,7 @@ yyreduce:
break;
case 69:
-#line 610 "go.y"
+#line 612 "go.y"
{
(yyval.node) = nod(ORANGE, N, (yyvsp[(4) - (4)].node));
(yyval.node)->list = (yyvsp[(1) - (4)].list);
@@ -2987,6 +2975,14 @@ yyreduce:
case 70:
#line 619 "go.y"
{
+ (yyval.node) = nod(ORANGE, N, (yyvsp[(2) - (2)].node));
+ (yyval.node)->etype = 0; // := flag
+ }
+ break;
+
+ case 71:
+#line 626 "go.y"
+ {
// init ; test ; incr
if((yyvsp[(5) - (5)].node) != N && (yyvsp[(5) - (5)].node)->colas != 0)
yyerror("cannot declare in the for-increment");
@@ -2998,8 +2994,8 @@ yyreduce:
}
break;
- case 71:
-#line 630 "go.y"
+ case 72:
+#line 637 "go.y"
{
// normal test
(yyval.node) = nod(OFOR, N, N);
@@ -3007,31 +3003,31 @@ yyreduce:
}
break;
- case 73:
-#line 639 "go.y"
+ case 74:
+#line 646 "go.y"
{
(yyval.node) = (yyvsp[(1) - (2)].node);
(yyval.node)->nbody = concat((yyval.node)->nbody, (yyvsp[(2) - (2)].list));
}
break;
- case 74:
-#line 646 "go.y"
+ case 75:
+#line 653 "go.y"
{
markdcl();
}
break;
- case 75:
-#line 650 "go.y"
+ case 76:
+#line 657 "go.y"
{
(yyval.node) = (yyvsp[(3) - (3)].node);
popdcl();
}
break;
- case 76:
-#line 657 "go.y"
+ case 77:
+#line 664 "go.y"
{
// test
(yyval.node) = nod(OIF, N, N);
@@ -3039,8 +3035,8 @@ yyreduce:
}
break;
- case 77:
-#line 663 "go.y"
+ case 78:
+#line 670 "go.y"
{
// init ; test
(yyval.node) = nod(OIF, N, N);
@@ -3050,30 +3046,30 @@ yyreduce:
}
break;
- case 78:
-#line 674 "go.y"
+ case 79:
+#line 681 "go.y"
{
markdcl();
}
break;
- case 79:
-#line 678 "go.y"
+ case 80:
+#line 685 "go.y"
{
if((yyvsp[(3) - (3)].node)->ntest == N)
yyerror("missing condition in if statement");
}
break;
- case 80:
-#line 683 "go.y"
+ case 81:
+#line 690 "go.y"
{
(yyvsp[(3) - (5)].node)->nbody = (yyvsp[(5) - (5)].list);
}
break;
- case 81:
-#line 687 "go.y"
+ case 82:
+#line 694 "go.y"
{
Node *n;
NodeList *nn;
@@ -3090,15 +3086,15 @@ yyreduce:
}
break;
- case 82:
-#line 704 "go.y"
+ case 83:
+#line 711 "go.y"
{
markdcl();
}
break;
- case 83:
-#line 708 "go.y"
+ case 84:
+#line 715 "go.y"
{
if((yyvsp[(4) - (5)].node)->ntest == N)
yyerror("missing condition in if statement");
@@ -3107,29 +3103,29 @@ yyreduce:
}
break;
- case 84:
-#line 716 "go.y"
+ case 85:
+#line 723 "go.y"
{
(yyval.list) = nil;
}
break;
- case 85:
-#line 720 "go.y"
+ case 86:
+#line 727 "go.y"
{
(yyval.list) = concat((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list));
}
break;
- case 86:
-#line 725 "go.y"
+ case 87:
+#line 732 "go.y"
{
(yyval.list) = nil;
}
break;
- case 87:
-#line 729 "go.y"
+ case 88:
+#line 736 "go.y"
{
NodeList *node;
@@ -3140,15 +3136,15 @@ yyreduce:
}
break;
- case 88:
-#line 740 "go.y"
+ case 89:
+#line 747 "go.y"
{
markdcl();
}
break;
- case 89:
-#line 744 "go.y"
+ case 90:
+#line 751 "go.y"
{
Node *n;
n = (yyvsp[(3) - (3)].node)->ntest;
@@ -3158,8 +3154,8 @@ yyreduce:
}
break;
- case 90:
-#line 752 "go.y"
+ case 91:
+#line 759 "go.y"
{
(yyval.node) = (yyvsp[(3) - (7)].node);
(yyval.node)->op = OSWITCH;
@@ -3169,15 +3165,15 @@ yyreduce:
}
break;
- case 91:
-#line 762 "go.y"
+ case 92:
+#line 769 "go.y"
{
typesw = nod(OXXX, typesw, N);
}
break;
- case 92:
-#line 766 "go.y"
+ case 93:
+#line 773 "go.y"
{
(yyval.node) = nod(OSELECT, N, N);
(yyval.node)->lineno = typesw->lineno;
@@ -3186,155 +3182,155 @@ yyreduce:
}
break;
- case 94:
-#line 779 "go.y"
+ case 95:
+#line 786 "go.y"
{
(yyval.node) = nod(OOROR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 95:
-#line 783 "go.y"
+ case 96:
+#line 790 "go.y"
{
(yyval.node) = nod(OANDAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 96:
-#line 787 "go.y"
+ case 97:
+#line 794 "go.y"
{
(yyval.node) = nod(OEQ, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 97:
-#line 791 "go.y"
+ case 98:
+#line 798 "go.y"
{
(yyval.node) = nod(ONE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 98:
-#line 795 "go.y"
+ case 99:
+#line 802 "go.y"
{
(yyval.node) = nod(OLT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 99:
-#line 799 "go.y"
+ case 100:
+#line 806 "go.y"
{
(yyval.node) = nod(OLE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 100:
-#line 803 "go.y"
+ case 101:
+#line 810 "go.y"
{
(yyval.node) = nod(OGE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 101:
-#line 807 "go.y"
+ case 102:
+#line 814 "go.y"
{
(yyval.node) = nod(OGT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 102:
-#line 811 "go.y"
+ case 103:
+#line 818 "go.y"
{
(yyval.node) = nod(OADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 103:
-#line 815 "go.y"
+ case 104:
+#line 822 "go.y"
{
(yyval.node) = nod(OSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 104:
-#line 819 "go.y"
+ case 105:
+#line 826 "go.y"
{
(yyval.node) = nod(OOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 105:
-#line 823 "go.y"
+ case 106:
+#line 830 "go.y"
{
(yyval.node) = nod(OXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 106:
-#line 827 "go.y"
+ case 107:
+#line 834 "go.y"
{
(yyval.node) = nod(OMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 107:
-#line 831 "go.y"
+ case 108:
+#line 838 "go.y"
{
(yyval.node) = nod(ODIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 108:
-#line 835 "go.y"
+ case 109:
+#line 842 "go.y"
{
(yyval.node) = nod(OMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 109:
-#line 839 "go.y"
+ case 110:
+#line 846 "go.y"
{
(yyval.node) = nod(OAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 110:
-#line 843 "go.y"
+ case 111:
+#line 850 "go.y"
{
(yyval.node) = nod(OANDNOT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 111:
-#line 847 "go.y"
+ case 112:
+#line 854 "go.y"
{
(yyval.node) = nod(OLSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 112:
-#line 851 "go.y"
+ case 113:
+#line 858 "go.y"
{
(yyval.node) = nod(ORSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 113:
-#line 856 "go.y"
+ case 114:
+#line 863 "go.y"
{
(yyval.node) = nod(OSEND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 115:
-#line 863 "go.y"
+ case 116:
+#line 870 "go.y"
{
(yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
}
break;
- case 116:
-#line 867 "go.y"
+ case 117:
+#line 874 "go.y"
{
if((yyvsp[(2) - (2)].node)->op == OCOMPLIT) {
// Special case for &T{...}: turn into (*T){...}.
@@ -3347,66 +3343,66 @@ yyreduce:
}
break;
- case 117:
-#line 878 "go.y"
+ case 118:
+#line 885 "go.y"
{
(yyval.node) = nod(OPLUS, (yyvsp[(2) - (2)].node), N);
}
break;
- case 118:
-#line 882 "go.y"
+ case 119:
+#line 889 "go.y"
{
(yyval.node) = nod(OMINUS, (yyvsp[(2) - (2)].node), N);
}
break;
- case 119:
-#line 886 "go.y"
+ case 120:
+#line 893 "go.y"
{
(yyval.node) = nod(ONOT, (yyvsp[(2) - (2)].node), N);
}
break;
- case 120:
-#line 890 "go.y"
+ case 121:
+#line 897 "go.y"
{
yyerror("the bitwise complement operator is ^");
(yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N);
}
break;
- case 121:
-#line 895 "go.y"
+ case 122:
+#line 902 "go.y"
{
(yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N);
}
break;
- case 122:
-#line 899 "go.y"
+ case 123:
+#line 906 "go.y"
{
(yyval.node) = nod(ORECV, (yyvsp[(2) - (2)].node), N);
}
break;
- case 123:
-#line 909 "go.y"
+ case 124:
+#line 916 "go.y"
{
(yyval.node) = nod(OCALL, (yyvsp[(1) - (3)].node), N);
}
break;
- case 124:
-#line 913 "go.y"
+ case 125:
+#line 920 "go.y"
{
(yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N);
(yyval.node)->list = (yyvsp[(3) - (5)].list);
}
break;
- case 125:
-#line 918 "go.y"
+ case 126:
+#line 925 "go.y"
{
(yyval.node) = nod(OCALL, (yyvsp[(1) - (6)].node), N);
(yyval.node)->list = (yyvsp[(3) - (6)].list);
@@ -3414,15 +3410,15 @@ yyreduce:
}
break;
- case 126:
-#line 926 "go.y"
+ case 127:
+#line 933 "go.y"
{
(yyval.node) = nodlit((yyvsp[(1) - (1)].val));
}
break;
- case 128:
-#line 931 "go.y"
+ case 129:
+#line 938 "go.y"
{
if((yyvsp[(1) - (3)].node)->op == OPACK) {
Sym *s;
@@ -3435,36 +3431,36 @@ yyreduce:
}
break;
- case 129:
-#line 942 "go.y"
+ case 130:
+#line 949 "go.y"
{
(yyval.node) = nod(ODOTTYPE, (yyvsp[(1) - (5)].node), (yyvsp[(4) - (5)].node));
}
break;
- case 130:
-#line 946 "go.y"
+ case 131:
+#line 953 "go.y"
{
(yyval.node) = nod(OTYPESW, N, (yyvsp[(1) - (5)].node));
}
break;
- case 131:
-#line 950 "go.y"
+ case 132:
+#line 957 "go.y"
{
(yyval.node) = nod(OINDEX, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
}
break;
- case 132:
-#line 954 "go.y"
+ case 133:
+#line 961 "go.y"
{
(yyval.node) = nod(OSLICE, (yyvsp[(1) - (6)].node), nod(OKEY, (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node)));
}
break;
- case 133:
-#line 958 "go.y"
+ case 134:
+#line 965 "go.y"
{
if((yyvsp[(5) - (8)].node) == N)
yyerror("middle index required in 3-index slice");
@@ -3474,8 +3470,8 @@ yyreduce:
}
break;
- case 135:
-#line 967 "go.y"
+ case 136:
+#line 974 "go.y"
{
// conversion
(yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N);
@@ -3483,8 +3479,8 @@ yyreduce:
}
break;
- case 136:
-#line 973 "go.y"
+ case 137:
+#line 980 "go.y"
{
(yyval.node) = (yyvsp[(3) - (5)].node);
(yyval.node)->right = (yyvsp[(1) - (5)].node);
@@ -3493,8 +3489,8 @@ yyreduce:
}
break;
- case 137:
-#line 980 "go.y"
+ case 138:
+#line 987 "go.y"
{
(yyval.node) = (yyvsp[(3) - (5)].node);
(yyval.node)->right = (yyvsp[(1) - (5)].node);
@@ -3502,8 +3498,8 @@ yyreduce:
}
break;
- case 138:
-#line 986 "go.y"
+ case 139:
+#line 993 "go.y"
{
yyerror("cannot parenthesize type in composite literal");
(yyval.node) = (yyvsp[(5) - (7)].node);
@@ -3512,8 +3508,8 @@ yyreduce:
}
break;
- case 140:
-#line 995 "go.y"
+ case 141:
+#line 1002 "go.y"
{
// composite expression.
// make node early so we get the right line number.
@@ -3521,15 +3517,15 @@ yyreduce:
}
break;
- case 141:
-#line 1003 "go.y"
+ case 142:
+#line 1010 "go.y"
{
(yyval.node) = nod(OKEY, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
break;
- case 142:
-#line 1009 "go.y"
+ case 143:
+#line 1016 "go.y"
{
// These nodes do not carry line numbers.
// Since a composite literal commonly spans several lines,
@@ -3548,24 +3544,24 @@ yyreduce:
}
break;
- case 143:
-#line 1026 "go.y"
+ case 144:
+#line 1033 "go.y"
{
(yyval.node) = (yyvsp[(2) - (4)].node);
(yyval.node)->list = (yyvsp[(3) - (4)].list);
}
break;
- case 145:
-#line 1034 "go.y"
+ case 146:
+#line 1041 "go.y"
{
(yyval.node) = (yyvsp[(2) - (4)].node);
(yyval.node)->list = (yyvsp[(3) - (4)].list);
}
break;
- case 147:
-#line 1042 "go.y"
+ case 148:
+#line 1049 "go.y"
{
(yyval.node) = (yyvsp[(2) - (3)].node);
@@ -3584,22 +3580,22 @@ yyreduce:
}
break;
- case 151:
-#line 1068 "go.y"
+ case 152:
+#line 1075 "go.y"
{
(yyval.i) = LBODY;
}
break;
- case 152:
-#line 1072 "go.y"
+ case 153:
+#line 1079 "go.y"
{
(yyval.i) = '{';
}
break;
- case 153:
-#line 1083 "go.y"
+ case 154:
+#line 1090 "go.y"
{
if((yyvsp[(1) - (1)].sym) == S)
(yyval.node) = N;
@@ -3608,22 +3604,22 @@ yyreduce:
}
break;
- case 154:
-#line 1092 "go.y"
+ case 155:
+#line 1099 "go.y"
{
(yyval.node) = dclname((yyvsp[(1) - (1)].sym));
}
break;
- case 155:
-#line 1097 "go.y"
+ case 156:
+#line 1104 "go.y"
{
(yyval.node) = N;
}
break;
- case 157:
-#line 1104 "go.y"
+ case 158:
+#line 1111 "go.y"
{
(yyval.sym) = (yyvsp[(1) - (1)].sym);
// during imports, unqualified non-exported identifiers are from builtinpkg
@@ -3632,15 +3628,15 @@ yyreduce:
}
break;
- case 159:
-#line 1112 "go.y"
+ case 160:
+#line 1119 "go.y"
{
(yyval.sym) = S;
}
break;
- case 160:
-#line 1118 "go.y"
+ case 161:
+#line 1125 "go.y"
{
Pkg *p;
@@ -3655,8 +3651,8 @@ yyreduce:
}
break;
- case 161:
-#line 1131 "go.y"
+ case 162:
+#line 1138 "go.y"
{
Pkg *p;
@@ -3671,8 +3667,8 @@ yyreduce:
}
break;
- case 162:
-#line 1146 "go.y"
+ case 163:
+#line 1153 "go.y"
{
(yyval.node) = oldname((yyvsp[(1) - (1)].sym));
if((yyval.node)->pack != N)
@@ -3680,44 +3676,44 @@ yyreduce:
}
break;
- case 164:
-#line 1166 "go.y"
+ case 165:
+#line 1173 "go.y"
{
yyerror("final argument in variadic function missing type");
(yyval.node) = nod(ODDD, typenod(typ(TINTER)), N);
}
break;
- case 165:
-#line 1171 "go.y"
+ case 166:
+#line 1178 "go.y"
{
(yyval.node) = nod(ODDD, (yyvsp[(2) - (2)].node), N);
}
break;
- case 171:
-#line 1182 "go.y"
+ case 172:
+#line 1189 "go.y"
{
- (yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N);
+ (yyval.node) = (yyvsp[(2) - (3)].node);
}
break;
- case 175:
-#line 1191 "go.y"
+ case 176:
+#line 1198 "go.y"
{
(yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
}
break;
- case 180:
-#line 1201 "go.y"
+ case 181:
+#line 1208 "go.y"
{
- (yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N);
+ (yyval.node) = (yyvsp[(2) - (3)].node);
}
break;
- case 190:
-#line 1222 "go.y"
+ case 191:
+#line 1229 "go.y"
{
if((yyvsp[(1) - (3)].node)->op == OPACK) {
Sym *s;
@@ -3730,61 +3726,61 @@ yyreduce:
}
break;
- case 191:
-#line 1235 "go.y"
+ case 192:
+#line 1242 "go.y"
{
(yyval.node) = nod(OTARRAY, (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
}
break;
- case 192:
-#line 1239 "go.y"
+ case 193:
+#line 1246 "go.y"
{
// array literal of nelem
(yyval.node) = nod(OTARRAY, nod(ODDD, N, N), (yyvsp[(4) - (4)].node));
}
break;
- case 193:
-#line 1244 "go.y"
+ case 194:
+#line 1251 "go.y"
{
(yyval.node) = nod(OTCHAN, (yyvsp[(2) - (2)].node), N);
(yyval.node)->etype = Cboth;
}
break;
- case 194:
-#line 1249 "go.y"
+ case 195:
+#line 1256 "go.y"
{
(yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N);
(yyval.node)->etype = Csend;
}
break;
- case 195:
-#line 1254 "go.y"
+ case 196:
+#line 1261 "go.y"
{
(yyval.node) = nod(OTMAP, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
}
break;
- case 198:
-#line 1262 "go.y"
+ case 199:
+#line 1269 "go.y"
{
(yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
}
break;
- case 199:
-#line 1268 "go.y"
+ case 200:
+#line 1275 "go.y"
{
(yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N);
(yyval.node)->etype = Crecv;
}
break;
- case 200:
-#line 1275 "go.y"
+ case 201:
+#line 1282 "go.y"
{
(yyval.node) = nod(OTSTRUCT, N, N);
(yyval.node)->list = (yyvsp[(3) - (5)].list);
@@ -3792,16 +3788,16 @@ yyreduce:
}
break;
- case 201:
-#line 1281 "go.y"
+ case 202:
+#line 1288 "go.y"
{
(yyval.node) = nod(OTSTRUCT, N, N);
fixlbrace((yyvsp[(2) - (3)].i));
}
break;
- case 202:
-#line 1288 "go.y"
+ case 203:
+#line 1295 "go.y"
{
(yyval.node) = nod(OTINTER, N, N);
(yyval.node)->list = (yyvsp[(3) - (5)].list);
@@ -3809,16 +3805,16 @@ yyreduce:
}
break;
- case 203:
-#line 1294 "go.y"
+ case 204:
+#line 1301 "go.y"
{
(yyval.node) = nod(OTINTER, N, N);
fixlbrace((yyvsp[(2) - (3)].i));
}
break;
- case 204:
-#line 1305 "go.y"
+ case 205:
+#line 1312 "go.y"
{
(yyval.node) = (yyvsp[(2) - (3)].node);
if((yyval.node) == N)
@@ -3828,12 +3824,13 @@ yyreduce:
(yyval.node)->nbody = (yyvsp[(3) - (3)].list);
(yyval.node)->endlineno = lineno;
(yyval.node)->noescape = noescape;
+ (yyval.node)->nosplit = nosplit;
funcbody((yyval.node));
}
break;
- case 205:
-#line 1319 "go.y"
+ case 206:
+#line 1327 "go.y"
{
Node *t;
@@ -3864,8 +3861,8 @@ yyreduce:
}
break;
- case 206:
-#line 1348 "go.y"
+ case 207:
+#line 1356 "go.y"
{
Node *rcvr, *t;
@@ -3886,8 +3883,6 @@ yyreduce:
yyerror("bad receiver in method");
break;
}
- if(rcvr->right->op == OTPAREN || (rcvr->right->op == OIND && rcvr->right->left->op == OTPAREN))
- yyerror("cannot parenthesize receiver type");
t = nod(OTFUNC, rcvr, N);
t->list = (yyvsp[(6) - (8)].list);
@@ -3905,8 +3900,8 @@ yyreduce:
}
break;
- case 207:
-#line 1388 "go.y"
+ case 208:
+#line 1394 "go.y"
{
Sym *s;
Type *t;
@@ -3933,8 +3928,8 @@ yyreduce:
}
break;
- case 208:
-#line 1413 "go.y"
+ case 209:
+#line 1419 "go.y"
{
(yyval.node) = methodname1(newname((yyvsp[(4) - (8)].sym)), (yyvsp[(2) - (8)].list)->n->right);
(yyval.node)->type = functype((yyvsp[(2) - (8)].list)->n, (yyvsp[(6) - (8)].list), (yyvsp[(8) - (8)].list));
@@ -3952,8 +3947,8 @@ yyreduce:
}
break;
- case 209:
-#line 1431 "go.y"
+ case 210:
+#line 1437 "go.y"
{
(yyvsp[(3) - (5)].list) = checkarglist((yyvsp[(3) - (5)].list), 1);
(yyval.node) = nod(OTFUNC, N, N);
@@ -3962,15 +3957,15 @@ yyreduce:
}
break;
- case 210:
-#line 1439 "go.y"
+ case 211:
+#line 1445 "go.y"
{
(yyval.list) = nil;
}
break;
- case 211:
-#line 1443 "go.y"
+ case 212:
+#line 1449 "go.y"
{
(yyval.list) = (yyvsp[(2) - (3)].list);
if((yyval.list) == nil)
@@ -3978,119 +3973,120 @@ yyreduce:
}
break;
- case 212:
-#line 1451 "go.y"
+ case 213:
+#line 1457 "go.y"
{
(yyval.list) = nil;
}
break;
- case 213:
-#line 1455 "go.y"
+ case 214:
+#line 1461 "go.y"
{
(yyval.list) = list1(nod(ODCLFIELD, N, (yyvsp[(1) - (1)].node)));
}
break;
- case 214:
-#line 1459 "go.y"
+ case 215:
+#line 1465 "go.y"
{
(yyvsp[(2) - (3)].list) = checkarglist((yyvsp[(2) - (3)].list), 0);
(yyval.list) = (yyvsp[(2) - (3)].list);
}
break;
- case 215:
-#line 1466 "go.y"
+ case 216:
+#line 1472 "go.y"
{
closurehdr((yyvsp[(1) - (1)].node));
}
break;
- case 216:
-#line 1472 "go.y"
+ case 217:
+#line 1478 "go.y"
{
(yyval.node) = closurebody((yyvsp[(3) - (4)].list));
fixlbrace((yyvsp[(2) - (4)].i));
}
break;
- case 217:
-#line 1477 "go.y"
+ case 218:
+#line 1483 "go.y"
{
(yyval.node) = closurebody(nil);
}
break;
- case 218:
-#line 1488 "go.y"
+ case 219:
+#line 1494 "go.y"
{
(yyval.list) = nil;
}
break;
- case 219:
-#line 1492 "go.y"
+ case 220:
+#line 1498 "go.y"
{
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list));
if(nsyntaxerrors == 0)
testdclstack();
nointerface = 0;
noescape = 0;
+ nosplit = 0;
}
break;
- case 221:
-#line 1503 "go.y"
+ case 222:
+#line 1510 "go.y"
{
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
}
break;
- case 223:
-#line 1510 "go.y"
+ case 224:
+#line 1517 "go.y"
{
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
}
break;
- case 224:
-#line 1516 "go.y"
+ case 225:
+#line 1523 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 225:
-#line 1520 "go.y"
+ case 226:
+#line 1527 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 227:
-#line 1527 "go.y"
+ case 228:
+#line 1534 "go.y"
{
(yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
}
break;
- case 228:
-#line 1533 "go.y"
+ case 229:
+#line 1540 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 229:
-#line 1537 "go.y"
+ case 230:
+#line 1544 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 230:
-#line 1543 "go.y"
+ case 231:
+#line 1550 "go.y"
{
NodeList *l;
@@ -4115,16 +4111,16 @@ yyreduce:
}
break;
- case 231:
-#line 1566 "go.y"
+ case 232:
+#line 1573 "go.y"
{
(yyvsp[(1) - (2)].node)->val = (yyvsp[(2) - (2)].val);
(yyval.list) = list1((yyvsp[(1) - (2)].node));
}
break;
- case 232:
-#line 1571 "go.y"
+ case 233:
+#line 1578 "go.y"
{
(yyvsp[(2) - (4)].node)->val = (yyvsp[(4) - (4)].val);
(yyval.list) = list1((yyvsp[(2) - (4)].node));
@@ -4132,8 +4128,8 @@ yyreduce:
}
break;
- case 233:
-#line 1577 "go.y"
+ case 234:
+#line 1584 "go.y"
{
(yyvsp[(2) - (3)].node)->right = nod(OIND, (yyvsp[(2) - (3)].node)->right, N);
(yyvsp[(2) - (3)].node)->val = (yyvsp[(3) - (3)].val);
@@ -4141,8 +4137,8 @@ yyreduce:
}
break;
- case 234:
-#line 1583 "go.y"
+ case 235:
+#line 1590 "go.y"
{
(yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N);
(yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val);
@@ -4151,8 +4147,8 @@ yyreduce:
}
break;
- case 235:
-#line 1590 "go.y"
+ case 236:
+#line 1597 "go.y"
{
(yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N);
(yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val);
@@ -4161,8 +4157,8 @@ yyreduce:
}
break;
- case 236:
-#line 1599 "go.y"
+ case 237:
+#line 1606 "go.y"
{
Node *n;
@@ -4173,8 +4169,8 @@ yyreduce:
}
break;
- case 237:
-#line 1608 "go.y"
+ case 238:
+#line 1615 "go.y"
{
Pkg *pkg;
@@ -4189,38 +4185,38 @@ yyreduce:
}
break;
- case 238:
-#line 1623 "go.y"
+ case 239:
+#line 1630 "go.y"
{
(yyval.node) = embedded((yyvsp[(1) - (1)].sym), localpkg);
}
break;
- case 239:
-#line 1629 "go.y"
+ case 240:
+#line 1636 "go.y"
{
(yyval.node) = nod(ODCLFIELD, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
ifacedcl((yyval.node));
}
break;
- case 240:
-#line 1634 "go.y"
+ case 241:
+#line 1641 "go.y"
{
(yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(1) - (1)].sym)));
}
break;
- case 241:
-#line 1638 "go.y"
+ case 242:
+#line 1645 "go.y"
{
(yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(2) - (3)].sym)));
yyerror("cannot parenthesize embedded type");
}
break;
- case 242:
-#line 1645 "go.y"
+ case 243:
+#line 1652 "go.y"
{
// without func keyword
(yyvsp[(2) - (4)].list) = checkarglist((yyvsp[(2) - (4)].list), 1);
@@ -4230,8 +4226,8 @@ yyreduce:
}
break;
- case 244:
-#line 1659 "go.y"
+ case 245:
+#line 1666 "go.y"
{
(yyval.node) = nod(ONONAME, N, N);
(yyval.node)->sym = (yyvsp[(1) - (2)].sym);
@@ -4239,8 +4235,8 @@ yyreduce:
}
break;
- case 245:
-#line 1665 "go.y"
+ case 246:
+#line 1672 "go.y"
{
(yyval.node) = nod(ONONAME, N, N);
(yyval.node)->sym = (yyvsp[(1) - (2)].sym);
@@ -4248,65 +4244,65 @@ yyreduce:
}
break;
- case 247:
-#line 1674 "go.y"
+ case 248:
+#line 1681 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 248:
-#line 1678 "go.y"
+ case 249:
+#line 1685 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 249:
-#line 1683 "go.y"
+ case 250:
+#line 1690 "go.y"
{
(yyval.list) = nil;
}
break;
- case 250:
-#line 1687 "go.y"
+ case 251:
+#line 1694 "go.y"
{
(yyval.list) = (yyvsp[(1) - (2)].list);
}
break;
- case 251:
-#line 1695 "go.y"
+ case 252:
+#line 1702 "go.y"
{
(yyval.node) = N;
}
break;
- case 253:
-#line 1700 "go.y"
+ case 254:
+#line 1707 "go.y"
{
(yyval.node) = liststmt((yyvsp[(1) - (1)].list));
}
break;
- case 255:
-#line 1705 "go.y"
+ case 256:
+#line 1712 "go.y"
{
(yyval.node) = N;
}
break;
- case 261:
-#line 1716 "go.y"
+ case 262:
+#line 1723 "go.y"
{
(yyvsp[(1) - (2)].node) = nod(OLABEL, (yyvsp[(1) - (2)].node), N);
(yyvsp[(1) - (2)].node)->sym = dclstack; // context, for goto restrictions
}
break;
- case 262:
-#line 1721 "go.y"
+ case 263:
+#line 1728 "go.y"
{
NodeList *l;
@@ -4318,8 +4314,8 @@ yyreduce:
}
break;
- case 263:
-#line 1731 "go.y"
+ case 264:
+#line 1738 "go.y"
{
// will be converted to OFALL
(yyval.node) = nod(OXFALL, N, N);
@@ -4327,44 +4323,44 @@ yyreduce:
}
break;
- case 264:
-#line 1737 "go.y"
+ case 265:
+#line 1744 "go.y"
{
(yyval.node) = nod(OBREAK, (yyvsp[(2) - (2)].node), N);
}
break;
- case 265:
-#line 1741 "go.y"
+ case 266:
+#line 1748 "go.y"
{
(yyval.node) = nod(OCONTINUE, (yyvsp[(2) - (2)].node), N);
}
break;
- case 266:
-#line 1745 "go.y"
+ case 267:
+#line 1752 "go.y"
{
(yyval.node) = nod(OPROC, (yyvsp[(2) - (2)].node), N);
}
break;
- case 267:
-#line 1749 "go.y"
+ case 268:
+#line 1756 "go.y"
{
(yyval.node) = nod(ODEFER, (yyvsp[(2) - (2)].node), N);
}
break;
- case 268:
-#line 1753 "go.y"
+ case 269:
+#line 1760 "go.y"
{
(yyval.node) = nod(OGOTO, (yyvsp[(2) - (2)].node), N);
(yyval.node)->sym = dclstack; // context, for goto restrictions
}
break;
- case 269:
-#line 1758 "go.y"
+ case 270:
+#line 1765 "go.y"
{
(yyval.node) = nod(ORETURN, N, N);
(yyval.node)->list = (yyvsp[(2) - (2)].list);
@@ -4383,8 +4379,8 @@ yyreduce:
}
break;
- case 270:
-#line 1777 "go.y"
+ case 271:
+#line 1784 "go.y"
{
(yyval.list) = nil;
if((yyvsp[(1) - (1)].node) != N)
@@ -4392,8 +4388,8 @@ yyreduce:
}
break;
- case 271:
-#line 1783 "go.y"
+ case 272:
+#line 1790 "go.y"
{
(yyval.list) = (yyvsp[(1) - (3)].list);
if((yyvsp[(3) - (3)].node) != N)
@@ -4401,190 +4397,190 @@ yyreduce:
}
break;
- case 272:
-#line 1791 "go.y"
+ case 273:
+#line 1798 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 273:
-#line 1795 "go.y"
+ case 274:
+#line 1802 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 274:
-#line 1801 "go.y"
+ case 275:
+#line 1808 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 275:
-#line 1805 "go.y"
+ case 276:
+#line 1812 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 276:
-#line 1811 "go.y"
+ case 277:
+#line 1818 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 277:
-#line 1815 "go.y"
+ case 278:
+#line 1822 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 278:
-#line 1821 "go.y"
+ case 279:
+#line 1828 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 279:
-#line 1825 "go.y"
+ case 280:
+#line 1832 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 280:
-#line 1834 "go.y"
+ case 281:
+#line 1841 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 281:
-#line 1838 "go.y"
+ case 282:
+#line 1845 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 282:
-#line 1842 "go.y"
+ case 283:
+#line 1849 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 283:
-#line 1846 "go.y"
+ case 284:
+#line 1853 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 284:
-#line 1851 "go.y"
+ case 285:
+#line 1858 "go.y"
{
(yyval.list) = nil;
}
break;
- case 285:
-#line 1855 "go.y"
+ case 286:
+#line 1862 "go.y"
{
(yyval.list) = (yyvsp[(1) - (2)].list);
}
break;
- case 290:
-#line 1869 "go.y"
+ case 291:
+#line 1876 "go.y"
{
(yyval.node) = N;
}
break;
- case 292:
-#line 1875 "go.y"
+ case 293:
+#line 1882 "go.y"
{
(yyval.list) = nil;
}
break;
- case 294:
-#line 1881 "go.y"
+ case 295:
+#line 1888 "go.y"
{
(yyval.node) = N;
}
break;
- case 296:
-#line 1887 "go.y"
+ case 297:
+#line 1894 "go.y"
{
(yyval.list) = nil;
}
break;
- case 298:
-#line 1893 "go.y"
+ case 299:
+#line 1900 "go.y"
{
(yyval.list) = nil;
}
break;
- case 300:
-#line 1899 "go.y"
+ case 301:
+#line 1906 "go.y"
{
(yyval.list) = nil;
}
break;
- case 302:
-#line 1905 "go.y"
+ case 303:
+#line 1912 "go.y"
{
(yyval.val).ctype = CTxxx;
}
break;
- case 304:
-#line 1915 "go.y"
+ case 305:
+#line 1922 "go.y"
{
importimport((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].val).u.sval);
}
break;
- case 305:
-#line 1919 "go.y"
+ case 306:
+#line 1926 "go.y"
{
importvar((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].type));
}
break;
- case 306:
-#line 1923 "go.y"
+ case 307:
+#line 1930 "go.y"
{
importconst((yyvsp[(2) - (5)].sym), types[TIDEAL], (yyvsp[(4) - (5)].node));
}
break;
- case 307:
-#line 1927 "go.y"
+ case 308:
+#line 1934 "go.y"
{
importconst((yyvsp[(2) - (6)].sym), (yyvsp[(3) - (6)].type), (yyvsp[(5) - (6)].node));
}
break;
- case 308:
-#line 1931 "go.y"
+ case 309:
+#line 1938 "go.y"
{
importtype((yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].type));
}
break;
- case 309:
-#line 1935 "go.y"
+ case 310:
+#line 1942 "go.y"
{
if((yyvsp[(2) - (4)].node) == N) {
dclcontext = PEXTERN; // since we skip the funcbody below
@@ -4604,31 +4600,31 @@ yyreduce:
}
break;
- case 310:
-#line 1955 "go.y"
+ case 311:
+#line 1962 "go.y"
{
(yyval.sym) = (yyvsp[(1) - (1)].sym);
structpkg = (yyval.sym)->pkg;
}
break;
- case 311:
-#line 1962 "go.y"
+ case 312:
+#line 1969 "go.y"
{
(yyval.type) = pkgtype((yyvsp[(1) - (1)].sym));
importsym((yyvsp[(1) - (1)].sym), OTYPE);
}
break;
- case 317:
-#line 1982 "go.y"
+ case 318:
+#line 1989 "go.y"
{
(yyval.type) = pkgtype((yyvsp[(1) - (1)].sym));
}
break;
- case 318:
-#line 1986 "go.y"
+ case 319:
+#line 1993 "go.y"
{
// predefined name like uint8
(yyvsp[(1) - (1)].sym) = pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg);
@@ -4640,50 +4636,50 @@ yyreduce:
}
break;
- case 319:
-#line 1996 "go.y"
+ case 320:
+#line 2003 "go.y"
{
(yyval.type) = aindex(N, (yyvsp[(3) - (3)].type));
}
break;
- case 320:
-#line 2000 "go.y"
+ case 321:
+#line 2007 "go.y"
{
(yyval.type) = aindex(nodlit((yyvsp[(2) - (4)].val)), (yyvsp[(4) - (4)].type));
}
break;
- case 321:
-#line 2004 "go.y"
+ case 322:
+#line 2011 "go.y"
{
(yyval.type) = maptype((yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].type));
}
break;
- case 322:
-#line 2008 "go.y"
+ case 323:
+#line 2015 "go.y"
{
(yyval.type) = tostruct((yyvsp[(3) - (4)].list));
}
break;
- case 323:
-#line 2012 "go.y"
+ case 324:
+#line 2019 "go.y"
{
(yyval.type) = tointerface((yyvsp[(3) - (4)].list));
}
break;
- case 324:
-#line 2016 "go.y"
+ case 325:
+#line 2023 "go.y"
{
(yyval.type) = ptrto((yyvsp[(2) - (2)].type));
}
break;
- case 325:
-#line 2020 "go.y"
+ case 326:
+#line 2027 "go.y"
{
(yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(2) - (2)].type);
@@ -4691,8 +4687,8 @@ yyreduce:
}
break;
- case 326:
-#line 2026 "go.y"
+ case 327:
+#line 2033 "go.y"
{
(yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(3) - (4)].type);
@@ -4700,8 +4696,8 @@ yyreduce:
}
break;
- case 327:
-#line 2032 "go.y"
+ case 328:
+#line 2039 "go.y"
{
(yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(3) - (3)].type);
@@ -4709,8 +4705,8 @@ yyreduce:
}
break;
- case 328:
-#line 2040 "go.y"
+ case 329:
+#line 2047 "go.y"
{
(yyval.type) = typ(TCHAN);
(yyval.type)->type = (yyvsp[(3) - (3)].type);
@@ -4718,15 +4714,15 @@ yyreduce:
}
break;
- case 329:
-#line 2048 "go.y"
+ case 330:
+#line 2055 "go.y"
{
(yyval.type) = functype(nil, (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list));
}
break;
- case 330:
-#line 2054 "go.y"
+ case 331:
+#line 2061 "go.y"
{
(yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(2) - (3)].type)));
if((yyvsp[(1) - (3)].sym))
@@ -4735,8 +4731,8 @@ yyreduce:
}
break;
- case 331:
-#line 2061 "go.y"
+ case 332:
+#line 2068 "go.y"
{
Type *t;
@@ -4752,8 +4748,8 @@ yyreduce:
}
break;
- case 332:
-#line 2077 "go.y"
+ case 333:
+#line 2084 "go.y"
{
Sym *s;
Pkg *p;
@@ -4775,50 +4771,50 @@ yyreduce:
}
break;
- case 333:
-#line 2099 "go.y"
+ case 334:
+#line 2106 "go.y"
{
(yyval.node) = nod(ODCLFIELD, newname((yyvsp[(1) - (5)].sym)), typenod(functype(fakethis(), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list))));
}
break;
- case 334:
-#line 2103 "go.y"
+ case 335:
+#line 2110 "go.y"
{
(yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type)));
}
break;
- case 335:
-#line 2108 "go.y"
+ case 336:
+#line 2115 "go.y"
{
(yyval.list) = nil;
}
break;
- case 337:
-#line 2115 "go.y"
+ case 338:
+#line 2122 "go.y"
{
(yyval.list) = (yyvsp[(2) - (3)].list);
}
break;
- case 338:
-#line 2119 "go.y"
+ case 339:
+#line 2126 "go.y"
{
(yyval.list) = list1(nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type))));
}
break;
- case 339:
-#line 2129 "go.y"
+ case 340:
+#line 2136 "go.y"
{
(yyval.node) = nodlit((yyvsp[(1) - (1)].val));
}
break;
- case 340:
-#line 2133 "go.y"
+ case 341:
+#line 2140 "go.y"
{
(yyval.node) = nodlit((yyvsp[(2) - (2)].val));
switch((yyval.node)->val.ctype){
@@ -4839,8 +4835,8 @@ yyreduce:
}
break;
- case 341:
-#line 2152 "go.y"
+ case 342:
+#line 2159 "go.y"
{
(yyval.node) = oldname(pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg));
if((yyval.node)->op != OLITERAL)
@@ -4848,8 +4844,8 @@ yyreduce:
}
break;
- case 343:
-#line 2161 "go.y"
+ case 344:
+#line 2168 "go.y"
{
if((yyvsp[(2) - (5)].node)->val.ctype == CTRUNE && (yyvsp[(4) - (5)].node)->val.ctype == CTINT) {
(yyval.node) = (yyvsp[(2) - (5)].node);
@@ -4862,43 +4858,43 @@ yyreduce:
}
break;
- case 346:
-#line 2177 "go.y"
+ case 347:
+#line 2184 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 347:
-#line 2181 "go.y"
+ case 348:
+#line 2188 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 348:
-#line 2187 "go.y"
+ case 349:
+#line 2194 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 349:
-#line 2191 "go.y"
+ case 350:
+#line 2198 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
break;
- case 350:
-#line 2197 "go.y"
+ case 351:
+#line 2204 "go.y"
{
(yyval.list) = list1((yyvsp[(1) - (1)].node));
}
break;
- case 351:
-#line 2201 "go.y"
+ case 352:
+#line 2208 "go.y"
{
(yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
}
@@ -4906,7 +4902,7 @@ yyreduce:
/* Line 1267 of yacc.c. */
-#line 4911 "y.tab.c"
+#line 4907 "y.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5120,7 +5116,7 @@ yyreturn:
}
-#line 2205 "go.y"
+#line 2212 "go.y"
static void
diff --git a/src/cmd/gc/yerr.h b/src/cmd/gc/yerr.h
index 1526d8231..d0dd639ff 100644
--- a/src/cmd/gc/yerr.h
+++ b/src/cmd/gc/yerr.h
@@ -14,66 +14,66 @@ static struct {
// is converted by bisonerrors into the yystate and yychar caused
// by that token list.
- 222, ',',
- "unexpected comma during import block",
+ {222, ',',
+ "unexpected comma during import block"},
- 32, ';',
- "missing import path; require quoted string",
+ {32, ';',
+ "missing import path; require quoted string"},
- 378, ';',
- "missing { after if clause",
+ {380, ';',
+ "missing { after if clause"},
- 399, ';',
- "missing { after switch clause",
+ {401, ';',
+ "missing { after switch clause"},
- 238, ';',
- "missing { after for clause",
+ {239, ';',
+ "missing { after for clause"},
- 476, LBODY,
- "missing { after for clause",
+ {478, LBODY,
+ "missing { after for clause"},
- 22, '{',
- "unexpected semicolon or newline before {",
+ {22, '{',
+ "unexpected semicolon or newline before {"},
- 145, ';',
- "unexpected semicolon or newline in type declaration",
+ {145, ';',
+ "unexpected semicolon or newline in type declaration"},
- 37, '}',
- "unexpected } in channel type",
+ {37, '}',
+ "unexpected } in channel type"},
- 37, ')',
- "unexpected ) in channel type",
+ {37, ')',
+ "unexpected ) in channel type"},
- 37, ',',
- "unexpected comma in channel type",
+ {37, ',',
+ "unexpected comma in channel type"},
- 439, LELSE,
- "unexpected semicolon or newline before else",
+ {441, LELSE,
+ "unexpected semicolon or newline before else"},
- 258, ',',
- "name list not allowed in interface type",
+ {259, ',',
+ "name list not allowed in interface type"},
- 238, LVAR,
- "var declaration not allowed in for initializer",
+ {239, LVAR,
+ "var declaration not allowed in for initializer"},
- 65, '{',
- "unexpected { at end of statement",
+ {65, '{',
+ "unexpected { at end of statement"},
- 377, '{',
- "unexpected { at end of statement",
+ {379, '{',
+ "unexpected { at end of statement"},
- 126, ';',
- "argument to go/defer must be function call",
+ {126, ';',
+ "argument to go/defer must be function call"},
- 426, ';',
- "need trailing comma before newline in composite literal",
+ {428, ';',
+ "need trailing comma before newline in composite literal"},
- 437, ';',
- "need trailing comma before newline in composite literal",
+ {439, ';',
+ "need trailing comma before newline in composite literal"},
- 113, LNAME,
- "nested func not allowed",
+ {113, LNAME,
+ "nested func not allowed"},
- 645, ';',
- "else must be followed by if or statement block"
+ {647, ';',
+ "else must be followed by if or statement block"}
};
diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go
index 3645f1c2d..1dd4314da 100644
--- a/src/cmd/go/build.go
+++ b/src/cmd/go/build.go
@@ -57,6 +57,7 @@ and test commands:
-a
force rebuilding of packages that are already up-to-date.
+ In Go releases, does not apply to the standard library.
-n
print the commands but do not run them.
-p n
@@ -64,7 +65,7 @@ and test commands:
The default is the number of CPUs available.
-race
enable data race detection.
- Supported only on linux/amd64, darwin/amd64 and windows/amd64.
+ Supported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64.
-v
print the names of packages as they are compiled.
-work
@@ -284,23 +285,26 @@ func runBuild(cmd *Command, args []string) {
}
}
+ depMode := modeBuild
+ if buildI {
+ depMode = modeInstall
+ }
+
if *buildO != "" {
if len(pkgs) > 1 {
fatalf("go build: cannot use -o with multiple packages")
+ } else if len(pkgs) == 0 {
+ fatalf("no packages to build")
}
p := pkgs[0]
p.target = "" // must build - not up to date
- a := b.action(modeInstall, modeBuild, p)
+ a := b.action(modeInstall, depMode, p)
a.target = *buildO
b.do(a)
return
}
a := &action{}
- depMode := modeBuild
- if buildI {
- depMode = modeInstall
- }
for _, p := range packages(args) {
a.deps = append(a.deps, b.action(modeBuild, depMode, p))
}
@@ -431,12 +435,11 @@ const (
)
var (
- goroot = filepath.Clean(runtime.GOROOT())
- gobin = os.Getenv("GOBIN")
- gorootBin = filepath.Join(goroot, "bin")
- gorootSrcPkg = filepath.Join(goroot, "src/pkg")
- gorootPkg = filepath.Join(goroot, "pkg")
- gorootSrc = filepath.Join(goroot, "src")
+ goroot = filepath.Clean(runtime.GOROOT())
+ gobin = os.Getenv("GOBIN")
+ gorootBin = filepath.Join(goroot, "bin")
+ gorootPkg = filepath.Join(goroot, "pkg")
+ gorootSrc = filepath.Join(goroot, "src")
)
func (b *builder) init() {
@@ -503,8 +506,13 @@ func goFilesPackage(gofiles []string) *Package {
}
ctxt.ReadDir = func(string) ([]os.FileInfo, error) { return dirent, nil }
- if !filepath.IsAbs(dir) {
- dir = filepath.Join(cwd, dir)
+ var err error
+ if dir == "" {
+ dir = cwd
+ }
+ dir, err = filepath.Abs(dir)
+ if err != nil {
+ fatalf("%s", err)
}
bp, err := ctxt.ImportDir(dir, 0)
@@ -823,12 +831,17 @@ func (b *builder) build(a *action) (err error) {
}
}
- var gofiles, cfiles, sfiles, objects, cgoObjects []string
+ var gofiles, cfiles, sfiles, objects, cgoObjects, pcCFLAGS, pcLDFLAGS []string
gofiles = append(gofiles, a.p.GoFiles...)
cfiles = append(cfiles, a.p.CFiles...)
sfiles = append(sfiles, a.p.SFiles...)
+ if a.p.usesCgo() || a.p.usesSwig() {
+ if pcCFLAGS, pcLDFLAGS, err = b.getPkgConfigFlags(a.p); err != nil {
+ return
+ }
+ }
// Run cgo.
if a.p.usesCgo() {
// In a package using cgo, cgo compiles the C, C++ and assembly files with gcc.
@@ -859,7 +872,7 @@ func (b *builder) build(a *action) (err error) {
if a.cgo != nil && a.cgo.target != "" {
cgoExe = a.cgo.target
}
- outGo, outObj, err := b.cgo(a.p, cgoExe, obj, gccfiles, a.p.CXXFiles, a.p.MFiles)
+ outGo, outObj, err := b.cgo(a.p, cgoExe, obj, pcCFLAGS, pcLDFLAGS, gccfiles, a.p.CXXFiles, a.p.MFiles)
if err != nil {
return err
}
@@ -872,9 +885,18 @@ func (b *builder) build(a *action) (err error) {
// In a package using SWIG, any .c or .s files are
// compiled with gcc.
gccfiles := append(cfiles, sfiles...)
+ cxxfiles, mfiles := a.p.CXXFiles, a.p.MFiles
cfiles = nil
sfiles = nil
- outGo, outObj, err := b.swig(a.p, obj, gccfiles, a.p.CXXFiles, a.p.MFiles)
+
+ // Don't build c/c++ files twice if cgo is enabled (mainly for pkg-config).
+ if a.p.usesCgo() {
+ cxxfiles = nil
+ gccfiles = nil
+ mfiles = nil
+ }
+
+ outGo, outObj, err := b.swig(a.p, obj, pcCFLAGS, gccfiles, cxxfiles, mfiles)
if err != nil {
return err
}
@@ -883,7 +905,7 @@ func (b *builder) build(a *action) (err error) {
}
if len(gofiles) == 0 {
- return &build.NoGoError{a.p.Dir}
+ return &build.NoGoError{Dir: a.p.Dir}
}
// If we're doing coverage, preprocess the .go files and put them in the work directory
@@ -1018,6 +1040,34 @@ func (b *builder) build(a *action) (err error) {
return nil
}
+// Calls pkg-config if needed and returns the cflags/ldflags needed to build the package.
+func (b *builder) getPkgConfigFlags(p *Package) (cflags, ldflags []string, err error) {
+ if pkgs := p.CgoPkgConfig; len(pkgs) > 0 {
+ var out []byte
+ out, err = b.runOut(p.Dir, p.ImportPath, nil, "pkg-config", "--cflags", pkgs)
+ if err != nil {
+ b.showOutput(p.Dir, "pkg-config --cflags "+strings.Join(pkgs, " "), string(out))
+ b.print(err.Error() + "\n")
+ err = errPrintedOutput
+ return
+ }
+ if len(out) > 0 {
+ cflags = strings.Fields(string(out))
+ }
+ out, err = b.runOut(p.Dir, p.ImportPath, nil, "pkg-config", "--libs", pkgs)
+ if err != nil {
+ b.showOutput(p.Dir, "pkg-config --libs "+strings.Join(pkgs, " "), string(out))
+ b.print(err.Error() + "\n")
+ err = errPrintedOutput
+ return
+ }
+ if len(out) > 0 {
+ ldflags = strings.Fields(string(out))
+ }
+ }
+ return
+}
+
// install is the action for installing a single package or executable.
func (b *builder) install(a *action) (err error) {
defer func() {
@@ -1253,7 +1303,7 @@ func (b *builder) showcmd(dir string, format string, args ...interface{}) {
// the source directory for the package that has failed to build.
// showOutput rewrites mentions of dir with a relative path to dir
// when the relative path is shorter. This is usually more pleasant.
-// For example, if fmt doesn't compile and we are in src/pkg/html,
+// For example, if fmt doesn't compile and we are in src/html,
// the output is
//
// $ go build
@@ -1265,7 +1315,7 @@ func (b *builder) showcmd(dir string, format string, args ...interface{}) {
//
// $ go build
// # fmt
-// /usr/gopher/go/src/pkg/fmt/print.go:1090: undefined: asdf
+// /usr/gopher/go/src/fmt/print.go:1090: undefined: asdf
// $
//
// showOutput also replaces references to the work directory with $WORK.
@@ -1425,6 +1475,14 @@ func (b *builder) runOut(dir string, desc string, env []string, cmdargs ...inter
continue
}
+ // err can be something like 'exit status 1'.
+ // Add information about what program was running.
+ // Note that if buf.Bytes() is non-empty, the caller usually
+ // shows buf.Bytes() and does not print err at all, so the
+ // prefix here does not make most output any more verbose.
+ if err != nil {
+ err = errors.New(cmdline[0] + ": " + err.Error())
+ }
return buf.Bytes(), err
}
}
@@ -1587,7 +1645,7 @@ func (gcToolchain) gc(b *builder, p *Package, archive, obj string, importArgs []
extFiles := len(p.CgoFiles) + len(p.CFiles) + len(p.CXXFiles) + len(p.MFiles) + len(p.SFiles) + len(p.SysoFiles) + len(p.SwigFiles) + len(p.SwigCXXFiles)
if p.Standard {
switch p.ImportPath {
- case "os", "runtime/pprof", "sync", "time":
+ case "bytes", "net", "os", "runtime/pprof", "sync", "time":
extFiles++
}
}
@@ -1611,8 +1669,10 @@ func (gcToolchain) gc(b *builder, p *Package, archive, obj string, importArgs []
}
func (gcToolchain) asm(b *builder, p *Package, obj, ofile, sfile string) error {
+ // Add -I pkg/GOOS_GOARCH so #include "textflag.h" works in .s files.
+ inc := filepath.Join(goroot, "pkg", fmt.Sprintf("%s_%s", goos, goarch))
sfile = mkAbs(p.Dir, sfile)
- return b.run(p.Dir, p.ImportPath, nil, tool(archChar+"a"), "-trimpath", b.work, "-I", obj, "-o", ofile, "-D", "GOOS_"+goos, "-D", "GOARCH_"+goarch, sfile)
+ return b.run(p.Dir, p.ImportPath, nil, tool(archChar+"a"), "-trimpath", b.work, "-I", obj, "-I", inc, "-o", ofile, "-D", "GOOS_"+goos, "-D", "GOARCH_"+goarch, sfile)
}
func (gcToolchain) pkgpath(basedir string, p *Package) string {
@@ -1706,7 +1766,7 @@ func packInternal(b *builder, afile string, ofiles []string) error {
func (gcToolchain) ld(b *builder, p *Package, out string, allactions []*action, mainpkg string, ofiles []string) error {
importArgs := b.includeArgs("-L", allactions)
- cxx := false
+ cxx := len(p.CXXFiles) > 0
for _, a := range allactions {
if a.p != nil && len(a.p.CXXFiles) > 0 {
cxx = true
@@ -1766,14 +1826,30 @@ func (gcToolchain) ld(b *builder, p *Package, out string, allactions []*action,
func (gcToolchain) cc(b *builder, p *Package, objdir, ofile, cfile string) error {
inc := filepath.Join(goroot, "pkg", fmt.Sprintf("%s_%s", goos, goarch))
cfile = mkAbs(p.Dir, cfile)
- args := stringList(tool(archChar+"c"), "-F", "-V", "-w", "-trimpath", b.work, "-I", objdir, "-I", inc, "-o", ofile, buildCcflags, "-D", "GOOS_"+goos, "-D", "GOARCH_"+goarch, cfile)
+ warn := []string{"-w"}
+ if p.usesSwig() {
+ // When using SWIG, this compiler is only used to
+ // compile the C files generated by SWIG.
+ // We don't want warnings.
+ // See issue 9065 for details.
+ warn = nil
+ }
+ args := stringList(tool(archChar+"c"), "-F", "-V", warn, "-trimpath", b.work, "-I", objdir, "-I", inc, "-o", ofile, buildCcflags, "-D", "GOOS_"+goos, "-D", "GOARCH_"+goarch, cfile)
return b.run(p.Dir, p.ImportPath, nil, args)
}
// The Gccgo toolchain.
type gccgoToolchain struct{}
-var gccgoBin, _ = exec.LookPath("gccgo")
+var gccgoName, gccgoBin string
+
+func init() {
+ gccgoName = os.Getenv("GCCGO")
+ if gccgoName == "" {
+ gccgoName = "gccgo"
+ }
+ gccgoBin, _ = exec.LookPath(gccgoName)
+}
func (gccgoToolchain) compiler() string {
return gccgoBin
@@ -1784,7 +1860,7 @@ func (gccgoToolchain) linker() string {
}
func (gccgoToolchain) gc(b *builder, p *Package, archive, obj string, importArgs []string, gofiles []string) (ofile string, output []byte, err error) {
- out := p.Name + ".o"
+ out := "_go_.o"
ofile = obj + out
gcargs := []string{"-g"}
gcargs = append(gcargs, b.gccArchArgs()...)
@@ -1794,7 +1870,7 @@ func (gccgoToolchain) gc(b *builder, p *Package, archive, obj string, importArgs
if p.localPrefix != "" {
gcargs = append(gcargs, "-fgo-relative-import-path="+p.localPrefix)
}
- args := stringList("gccgo", importArgs, "-c", gcargs, "-o", ofile, buildGccgoflags)
+ args := stringList(gccgoName, importArgs, "-c", gcargs, "-o", ofile, buildGccgoflags)
for _, f := range gofiles {
args = append(args, mkAbs(p.Dir, f))
}
@@ -1810,7 +1886,7 @@ func (gccgoToolchain) asm(b *builder, p *Package, obj, ofile, sfile string) erro
defs = append(defs, `-D`, `GOPKGPATH="`+pkgpath+`"`)
}
defs = append(defs, b.gccArchArgs()...)
- return b.run(p.Dir, p.ImportPath, nil, "gccgo", "-I", obj, "-o", ofile, defs, sfile)
+ return b.run(p.Dir, p.ImportPath, nil, gccgoName, "-I", obj, "-o", ofile, defs, sfile)
}
func (gccgoToolchain) pkgpath(basedir string, p *Package) string {
@@ -1836,8 +1912,8 @@ func (tools gccgoToolchain) ld(b *builder, p *Package, out string, allactions []
ldflags := b.gccArchArgs()
cgoldflags := []string{}
usesCgo := false
- cxx := false
- objc := false
+ cxx := len(p.CXXFiles) > 0
+ objc := len(p.MFiles) > 0
// Prefer the output of an install action to the output of a build action,
// because the install action will delete the output of the build action.
@@ -1877,6 +1953,7 @@ func (tools gccgoToolchain) ld(b *builder, p *Package, out string, allactions []
}
ldflags = append(ldflags, afiles...)
ldflags = append(ldflags, cgoldflags...)
+ ldflags = append(ldflags, envList("CGO_LDFLAGS", "")...)
ldflags = append(ldflags, p.CgoLDFLAGS...)
if usesCgo && goos == "linux" {
ldflags = append(ldflags, "-Wl,-E")
@@ -1887,7 +1964,7 @@ func (tools gccgoToolchain) ld(b *builder, p *Package, out string, allactions []
if objc {
ldflags = append(ldflags, "-lobjc")
}
- return b.run(".", p.ImportPath, nil, "gccgo", "-o", out, ofiles, "-Wl,-(", ldflags, "-Wl,-)", buildGccgoflags)
+ return b.run(".", p.ImportPath, nil, gccgoName, "-o", out, ofiles, "-Wl,-(", ldflags, "-Wl,-)", buildGccgoflags)
}
func (gccgoToolchain) cc(b *builder, p *Package, objdir, ofile, cfile string) error {
@@ -1898,8 +1975,7 @@ func (gccgoToolchain) cc(b *builder, p *Package, objdir, ofile, cfile string) er
if pkgpath := gccgoCleanPkgpath(p); pkgpath != "" {
defs = append(defs, `-D`, `GOPKGPATH="`+pkgpath+`"`)
}
- // TODO: Support using clang here (during gccgo build)?
- return b.run(p.Dir, p.ImportPath, nil, "gcc", "-Wall", "-g",
+ return b.run(p.Dir, p.ImportPath, nil, envList("CC", defaultCC), "-Wall", "-g",
"-I", objdir, "-I", inc, "-o", ofile, defs, "-c", cfile)
}
@@ -1950,9 +2026,9 @@ func (b *builder) libgcc(p *Package) (string, error) {
return "$LIBGCC", nil
}
- // clang might not be able to find libgcc, and in that case,
+ // The compiler might not be able to find libgcc, and in that case,
// it will simply return "libgcc.a", which is of no use to us.
- if strings.Contains(gccCmd[0], "clang") && !filepath.IsAbs(string(f)) {
+ if !filepath.IsAbs(string(f)) {
return "", nil
}
@@ -2090,36 +2166,16 @@ var (
cgoLibGccFileOnce sync.Once
)
-func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles, gxxfiles, mfiles []string) (outGo, outObj []string, err error) {
+func (b *builder) cgo(p *Package, cgoExe, obj string, pcCFLAGS, pcLDFLAGS, gccfiles, gxxfiles, mfiles []string) (outGo, outObj []string, err error) {
cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, cgoLDFLAGS := b.cflags(p, true)
_, cgoexeCFLAGS, _, _ := b.cflags(p, false)
-
+ cgoCPPFLAGS = append(cgoCPPFLAGS, pcCFLAGS...)
+ cgoLDFLAGS = append(cgoLDFLAGS, pcLDFLAGS...)
// If we are compiling Objective-C code, then we need to link against libobjc
if len(mfiles) > 0 {
cgoLDFLAGS = append(cgoLDFLAGS, "-lobjc")
}
- if pkgs := p.CgoPkgConfig; len(pkgs) > 0 {
- out, err := b.runOut(p.Dir, p.ImportPath, nil, "pkg-config", "--cflags", pkgs)
- if err != nil {
- b.showOutput(p.Dir, "pkg-config --cflags "+strings.Join(pkgs, " "), string(out))
- b.print(err.Error() + "\n")
- return nil, nil, errPrintedOutput
- }
- if len(out) > 0 {
- cgoCPPFLAGS = append(cgoCPPFLAGS, strings.Fields(string(out))...)
- }
- out, err = b.runOut(p.Dir, p.ImportPath, nil, "pkg-config", "--libs", pkgs)
- if err != nil {
- b.showOutput(p.Dir, "pkg-config --libs "+strings.Join(pkgs, " "), string(out))
- b.print(err.Error() + "\n")
- return nil, nil, errPrintedOutput
- }
- if len(out) > 0 {
- cgoLDFLAGS = append(cgoLDFLAGS, strings.Fields(string(out))...)
- }
- }
-
// Allows including _cgo_export.h from .[ch] files in the package.
cgoCPPFLAGS = append(cgoCPPFLAGS, "-I", obj)
@@ -2196,6 +2252,14 @@ func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles, gxxfiles, mfiles
strings.HasSuffix(f, ".so"),
strings.HasSuffix(f, ".dll"):
continue
+ // Remove any -fsanitize=foo flags.
+ // Otherwise the compiler driver thinks that we are doing final link
+ // and links sanitizer runtime into the object file. But we are not doing
+ // the final link, we will link the resulting object file again. And
+ // so the program ends up with two copies of sanitizer runtime.
+ // See issue 8788 for details.
+ case strings.HasPrefix(f, "-fsanitize="):
+ continue
default:
bareLDFLAGS = append(bareLDFLAGS, f)
}
@@ -2262,13 +2326,14 @@ func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles, gxxfiles, mfiles
linkobj = append(linkobj, p.SysoFiles...)
dynobj := obj + "_cgo_.o"
- if goarch == "arm" && goos == "linux" { // we need to use -pie for Linux/ARM to get accurate imported sym
+ pie := goarch == "arm" && (goos == "linux" || goos == "android")
+ if pie { // we need to use -pie for Linux/ARM to get accurate imported sym
cgoLDFLAGS = append(cgoLDFLAGS, "-pie")
}
if err := b.gccld(p, dynobj, cgoLDFLAGS, linkobj); err != nil {
return nil, nil, err
}
- if goarch == "arm" && goos == "linux" { // but we don't need -pie for normal cgo programs
+ if pie { // but we don't need -pie for normal cgo programs
cgoLDFLAGS = cgoLDFLAGS[0 : len(cgoLDFLAGS)-1]
}
@@ -2302,7 +2367,23 @@ func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles, gxxfiles, mfiles
nonGccObjs = append(nonGccObjs, f)
}
}
- if err := b.gccld(p, ofile, stringList(bareLDFLAGS, "-Wl,-r", "-nostdlib", staticLibs), gccObjs); err != nil {
+ ldflags := stringList(bareLDFLAGS, "-Wl,-r", "-nostdlib", staticLibs)
+
+ // Some systems, such as Ubuntu, always add --build-id to
+ // every link, but we don't want a build ID since we are
+ // producing an object file. On some of those system a plain
+ // -r (not -Wl,-r) will turn off --build-id, but clang 3.0
+ // doesn't support a plain -r. I don't know how to turn off
+ // --build-id when using clang other than passing a trailing
+ // --build-id=none. So that is what we do, but only on
+ // systems likely to support it, which is to say, systems that
+ // normally use gold or the GNU linker.
+ switch goos {
+ case "android", "dragonfly", "linux", "netbsd":
+ ldflags = append(ldflags, "-Wl,--build-id=none")
+ }
+
+ if err := b.gccld(p, ofile, ldflags, gccObjs); err != nil {
return nil, nil, err
}
@@ -2317,7 +2398,7 @@ func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles, gxxfiles, mfiles
// Run SWIG on all SWIG input files.
// TODO: Don't build a shared library, once SWIG emits the necessary
// pragmas for external linking.
-func (b *builder) swig(p *Package, obj string, gccfiles, gxxfiles, mfiles []string) (outGo, outObj []string, err error) {
+func (b *builder) swig(p *Package, obj string, pcCFLAGS, gccfiles, gxxfiles, mfiles []string) (outGo, outObj []string, err error) {
cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, _ := b.cflags(p, true)
cflags := stringList(cgoCPPFLAGS, cgoCFLAGS)
cxxflags := stringList(cgoCPPFLAGS, cgoCXXFLAGS)
@@ -2358,7 +2439,7 @@ func (b *builder) swig(p *Package, obj string, gccfiles, gxxfiles, mfiles []stri
}
for _, f := range p.SwigFiles {
- goFile, objFile, gccObjFile, err := b.swigOne(p, f, obj, false, intgosize)
+ goFile, objFile, gccObjFile, err := b.swigOne(p, f, obj, pcCFLAGS, false, intgosize)
if err != nil {
return nil, nil, err
}
@@ -2373,7 +2454,7 @@ func (b *builder) swig(p *Package, obj string, gccfiles, gxxfiles, mfiles []stri
}
}
for _, f := range p.SwigCXXFiles {
- goFile, objFile, gccObjFile, err := b.swigOne(p, f, obj, true, intgosize)
+ goFile, objFile, gccObjFile, err := b.swigOne(p, f, obj, pcCFLAGS, true, intgosize)
if err != nil {
return nil, nil, err
}
@@ -2452,13 +2533,13 @@ func (b *builder) swigIntSize(obj string) (intsize string, err error) {
}
// Run SWIG on one SWIG input file.
-func (b *builder) swigOne(p *Package, file, obj string, cxx bool, intgosize string) (outGo, outObj, objGccObj string, err error) {
+func (b *builder) swigOne(p *Package, file, obj string, pcCFLAGS []string, cxx bool, intgosize string) (outGo, outObj, objGccObj string, err error) {
cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, _ := b.cflags(p, true)
var cflags []string
if cxx {
- cflags = stringList(cgoCPPFLAGS, cgoCXXFLAGS)
+ cflags = stringList(cgoCPPFLAGS, pcCFLAGS, cgoCXXFLAGS)
} else {
- cflags = stringList(cgoCPPFLAGS, cgoCFLAGS)
+ cflags = stringList(cgoCPPFLAGS, pcCFLAGS, cgoCFLAGS)
}
n := 5 // length of ".swig"
@@ -2484,6 +2565,13 @@ func (b *builder) swigOne(p *Package, file, obj string, cxx bool, intgosize stri
"-o", obj + gccBase + gccExt,
"-outdir", obj,
}
+
+ for _, f := range cflags {
+ if len(f) > 3 && f[:2] == "-I" {
+ args = append(args, f)
+ }
+ }
+
if gccgo {
args = append(args, "-gccgo")
if pkgpath := gccgoPkgpath(p); pkgpath != "" {
@@ -2556,8 +2644,8 @@ func raceInit() {
if !buildRace {
return
}
- if goarch != "amd64" || goos != "linux" && goos != "darwin" && goos != "windows" {
- fmt.Fprintf(os.Stderr, "go %s: -race is only supported on linux/amd64, darwin/amd64 and windows/amd64\n", flag.Args()[0])
+ if goarch != "amd64" || goos != "linux" && goos != "freebsd" && goos != "darwin" && goos != "windows" {
+ fmt.Fprintf(os.Stderr, "go %s: -race is only supported on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64\n", flag.Args()[0])
os.Exit(2)
}
buildGcflags = append(buildGcflags, "-race")
diff --git a/src/cmd/go/doc.go b/src/cmd/go/doc.go
index 9840804ce..d0d8a8a5b 100644
--- a/src/cmd/go/doc.go
+++ b/src/cmd/go/doc.go
@@ -19,6 +19,7 @@ The commands are:
env print Go environment information
fix run go tool fix on packages
fmt run gofmt on package sources
+ generate generate Go files by processing source
get download and install packages and dependencies
install compile and install packages and dependencies
list list packages
@@ -75,6 +76,7 @@ and test commands:
-a
force rebuilding of packages that are already up-to-date.
+ In Go releases, does not apply to the standard library.
-n
print the commands but do not run them.
-p n
@@ -82,7 +84,7 @@ and test commands:
The default is the number of CPUs available.
-race
enable data race detection.
- Supported only on linux/amd64, darwin/amd64 and windows/amd64.
+ Supported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64.
-v
print the names of packages as they are compiled.
-work
@@ -219,11 +221,110 @@ To run gofmt with specific options, run gofmt itself.
See also: go fix, go vet.
+Generate Go files by processing source
+
+Usage:
+
+ go generate [-run regexp] [file.go... | packages]
+
+Generate runs commands described by directives within existing
+files. Those commands can run any process but the intent is to
+create or update Go source files, for instance by running yacc.
+
+Go generate is never run automatically by go build, go get, go test,
+and so on. It must be run explicitly.
+
+Go generate scans the file for directives, which are lines of
+the form,
+
+ //go:generate command argument...
+
+(note: no leading spaces and no space in "//go") where command
+is the generator to be run, corresponding to an executable file
+that can be run locally. It must either be in the shell path
+(gofmt), a fully qualified path (/usr/you/bin/mytool), or a
+command alias, described below.
+
+Note that go generate does not parse the file, so lines that look
+like directives in comments or multiline strings will be treated
+as directives.
+
+The arguments to the directive are space-separated tokens or
+double-quoted strings passed to the generator as individual
+arguments when it is run.
+
+Quoted strings use Go syntax and are evaluated before execution; a
+quoted string appears as a single argument to the generator.
+
+Go generate sets several variables when it runs the generator:
+
+ $GOARCH
+ The execution architecture (arm, amd64, etc.)
+ $GOOS
+ The execution operating system (linux, windows, etc.)
+ $GOFILE
+ The base name of the file.
+ $GOPACKAGE
+ The name of the package of the file containing the directive.
+
+Other than variable substitution and quoted-string evaluation, no
+special processing such as "globbing" is performed on the command
+line.
+
+As a last step before running the command, any invocations of any
+environment variables with alphanumeric names, such as $GOFILE or
+$HOME, are expanded throughout the command line. The syntax for
+variable expansion is $NAME on all operating systems. Due to the
+order of evaluation, variables are expanded even inside quoted
+strings. If the variable NAME is not set, $NAME expands to the
+empty string.
+
+A directive of the form,
+
+ //go:generate -command xxx args...
+
+specifies, for the remainder of this source file only, that the
+string xxx represents the command identified by the arguments. This
+can be used to create aliases or to handle multiword generators.
+For example,
+
+ //go:generate -command yacc go tool yacc
+
+specifies that the command "yacc" represents the generator
+"go tool yacc".
+
+Generate processes packages in the order given on the command line,
+one at a time. If the command line lists .go files, they are treated
+as a single package. Within a package, generate processes the
+source files in a package in file name order, one at a time. Within
+a source file, generate runs generators in the order they appear
+in the file, one at a time.
+
+If any generator returns an error exit status, "go generate" skips
+all further processing for that package.
+
+The generator is run in the package's source directory.
+
+Go generate accepts one specific flag:
+
+ -run=""
+ if non-empty, specifies a regular expression to
+ select directives whose command matches the expression.
+
+It also accepts the standard build flags -v, -n, and -x.
+The -v flag prints the names of packages and files as they are
+processed.
+The -n flag prints commands that would be executed.
+The -x flag prints commands as they are executed.
+
+For more about specifying packages, see 'go help packages'.
+
+
Download and install packages and dependencies
Usage:
- go get [-d] [-fix] [-t] [-u] [build flags] [packages]
+ go get [-d] [-f] [-fix] [-t] [-u] [build flags] [packages]
Get downloads and installs the packages named by the import paths,
along with their dependencies.
@@ -231,6 +332,11 @@ along with their dependencies.
The -d flag instructs get to stop after downloading the packages; that is,
it instructs get not to install the packages.
+The -f flag, valid only when -u is set, forces get -u not to verify that
+each package has been checked out from the source control repository
+implied by its import path. This can be useful if the source is a local fork
+of the original.
+
The -fix flag instructs get to run the fix tool on the downloaded packages
before resolving dependencies or building the code.
@@ -291,28 +397,29 @@ syntax of package template. The default output is equivalent to -f
'{{.ImportPath}}'. The struct being passed to the template is:
type Package struct {
- Dir string // directory containing package sources
- ImportPath string // import path of package in dir
- Name string // package name
- Doc string // package documentation string
- Target string // install path
- Goroot bool // is this package in the Go root?
- Standard bool // is this package part of the standard Go library?
- Stale bool // would 'go install' do anything for this package?
- Root string // Go root or Go path dir containing this package
+ Dir string // directory containing package sources
+ ImportPath string // import path of package in dir
+ ImportComment string // path in import comment on package statement
+ Name string // package name
+ Doc string // package documentation string
+ Target string // install path
+ Goroot bool // is this package in the Go root?
+ Standard bool // is this package part of the standard Go library?
+ Stale bool // would 'go install' do anything for this package?
+ Root string // Go root or Go path dir containing this package
// Source files
- GoFiles []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
- CgoFiles []string // .go sources files that import "C"
+ GoFiles []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
+ CgoFiles []string // .go sources files that import "C"
IgnoredGoFiles []string // .go sources ignored due to build constraints
- CFiles []string // .c source files
- CXXFiles []string // .cc, .cxx and .cpp source files
- MFiles []string // .m source files
- HFiles []string // .h, .hh, .hpp and .hxx source files
- SFiles []string // .s source files
- SwigFiles []string // .swig files
- SwigCXXFiles []string // .swigcxx files
- SysoFiles []string // .syso object files to add to archive
+ CFiles []string // .c source files
+ CXXFiles []string // .cc, .cxx and .cpp source files
+ MFiles []string // .m source files
+ HFiles []string // .h, .hh, .hpp and .hxx source files
+ SFiles []string // .s source files
+ SwigFiles []string // .swig files
+ SwigCXXFiles []string // .swigcxx files
+ SysoFiles []string // .syso object files to add to archive
// Cgo directives
CgoCFLAGS []string // cgo: flags for C compiler
@@ -431,16 +538,23 @@ non-test installation.
In addition to the build flags, the flags handled by 'go test' itself are:
- -c Compile the test binary to pkg.test but do not run it.
- (Where pkg is the last element of the package's import path.)
+ -c
+ Compile the test binary to pkg.test but do not run it
+ (where pkg is the last element of the package's import path).
+ The file name can be changed with the -o flag.
+
+ -exec xprog
+ Run the test binary using xprog. The behavior is the same as
+ in 'go run'. See 'go help run' for details.
-i
Install packages that are dependencies of the test.
Do not run the test.
- -exec xprog
- Run the test binary using xprog. The behavior is the same as
- in 'go run'. See 'go help run' for details.
+ -o file
+ Compile the test binary to the named file.
+ The test still runs (unless -c or -i is specified).
+
The test binary also accepts flags that control execution of the test; these
flags are also accessible by 'go test'. See 'go help testflag' for details.
@@ -488,7 +602,7 @@ Usage:
Vet runs the Go vet command on the packages named by the import paths.
-For more about vet, see 'godoc code.google.com/p/go.tools/cmd/vet'.
+For more about vet, see 'godoc golang.org/x/tools/cmd/vet'.
For more about specifying packages, see 'go help packages'.
To run the vet tool with specific options, run 'go tool vet'.
@@ -681,6 +795,11 @@ A few common code hosting sites have special syntax:
import "launchpad.net/~user/project/branch"
import "launchpad.net/~user/project/branch/sub/directory"
+ IBM DevOps Services (Git)
+
+ import "hub.jazz.net/git/user/project"
+ import "hub.jazz.net/git/user/project/sub/directory"
+
For code hosted on other servers, import paths may either be qualified
with the version control type, or the go tool can dynamically fetch
the import path over https/http and discover where the code resides
@@ -756,7 +875,26 @@ listed in the GOPATH environment variable (see 'go help gopath').
The go command attempts to download the version of the
package appropriate for the Go release being used.
-Run 'go help install' for more.
+Run 'go help get' for more.
+
+Import path checking
+
+When the custom import path feature described above redirects to a
+known code hosting site, each of the resulting packages has two possible
+import paths, using the custom domain or the known hosting site.
+
+A package statement is said to have an "import comment" if it is immediately
+followed (before the next newline) by a comment of one of these two forms:
+
+ package math // import "path"
+ package math /* import "path" * /
+
+The go command will refuse to install a package with an import comment
+unless it is being referred to by that import path. In this way, import comments
+let package authors make sure the custom import path is used and not a
+direct path to the underlying code hosting site.
+
+See https://golang.org/s/go14customimport for details.
Description of package lists
@@ -812,7 +950,8 @@ single directory, the command is applied to a single synthesized
package made up of exactly those files, ignoring any build constraints
in those files and ignoring any other files in the directory.
-File names that begin with "." or "_" are ignored by the go tool.
+Directory and file names that begin with "." or "_" are ignored
+by the go tool, as are directories named "testdata".
Description of testing flags
@@ -844,6 +983,7 @@ control the execution of any test:
-blockprofile block.out
Write a goroutine blocking profile to the specified file
when all tests are complete.
+ Writes test binary as -c would.
-blockprofilerate n
Control the detail provided in goroutine blocking profiles by
@@ -875,8 +1015,7 @@ control the execution of any test:
Sets -cover.
-coverprofile cover.out
- Write a coverage profile to the specified file after all tests
- have passed.
+ Write a coverage profile to the file after all tests have passed.
Sets -cover.
-cpu 1,2,4
@@ -886,10 +1025,11 @@ control the execution of any test:
-cpuprofile cpu.out
Write a CPU profile to the specified file before exiting.
+ Writes test binary as -c would.
-memprofile mem.out
- Write a memory profile to the specified file after all tests
- have passed.
+ Write a memory profile to the file after all tests have passed.
+ Writes test binary as -c would.
-memprofilerate n
Enable more precise (and expensive) memory profiles by setting
diff --git a/src/cmd/go/generate.go b/src/cmd/go/generate.go
new file mode 100644
index 000000000..baf4d2b55
--- /dev/null
+++ b/src/cmd/go/generate.go
@@ -0,0 +1,398 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+ "bufio"
+ "bytes"
+ "fmt"
+ "io"
+ "log"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "runtime"
+ "strconv"
+ "strings"
+ "unicode"
+ "unicode/utf8"
+)
+
+var cmdGenerate = &Command{
+ Run: runGenerate,
+ UsageLine: "generate [-run regexp] [file.go... | packages]",
+ Short: "generate Go files by processing source",
+ Long: `
+Generate runs commands described by directives within existing
+files. Those commands can run any process but the intent is to
+create or update Go source files, for instance by running yacc.
+
+Go generate is never run automatically by go build, go get, go test,
+and so on. It must be run explicitly.
+
+Go generate scans the file for directives, which are lines of
+the form,
+
+ //go:generate command argument...
+
+(note: no leading spaces and no space in "//go") where command
+is the generator to be run, corresponding to an executable file
+that can be run locally. It must either be in the shell path
+(gofmt), a fully qualified path (/usr/you/bin/mytool), or a
+command alias, described below.
+
+Note that go generate does not parse the file, so lines that look
+like directives in comments or multiline strings will be treated
+as directives.
+
+The arguments to the directive are space-separated tokens or
+double-quoted strings passed to the generator as individual
+arguments when it is run.
+
+Quoted strings use Go syntax and are evaluated before execution; a
+quoted string appears as a single argument to the generator.
+
+Go generate sets several variables when it runs the generator:
+
+ $GOARCH
+ The execution architecture (arm, amd64, etc.)
+ $GOOS
+ The execution operating system (linux, windows, etc.)
+ $GOFILE
+ The base name of the file.
+ $GOPACKAGE
+ The name of the package of the file containing the directive.
+
+Other than variable substitution and quoted-string evaluation, no
+special processing such as "globbing" is performed on the command
+line.
+
+As a last step before running the command, any invocations of any
+environment variables with alphanumeric names, such as $GOFILE or
+$HOME, are expanded throughout the command line. The syntax for
+variable expansion is $NAME on all operating systems. Due to the
+order of evaluation, variables are expanded even inside quoted
+strings. If the variable NAME is not set, $NAME expands to the
+empty string.
+
+A directive of the form,
+
+ //go:generate -command xxx args...
+
+specifies, for the remainder of this source file only, that the
+string xxx represents the command identified by the arguments. This
+can be used to create aliases or to handle multiword generators.
+For example,
+
+ //go:generate -command yacc go tool yacc
+
+specifies that the command "yacc" represents the generator
+"go tool yacc".
+
+Generate processes packages in the order given on the command line,
+one at a time. If the command line lists .go files, they are treated
+as a single package. Within a package, generate processes the
+source files in a package in file name order, one at a time. Within
+a source file, generate runs generators in the order they appear
+in the file, one at a time.
+
+If any generator returns an error exit status, "go generate" skips
+all further processing for that package.
+
+The generator is run in the package's source directory.
+
+Go generate accepts one specific flag:
+
+ -run=""
+ if non-empty, specifies a regular expression to
+ select directives whose command matches the expression.
+
+It also accepts the standard build flags -v, -n, and -x.
+The -v flag prints the names of packages and files as they are
+processed.
+The -n flag prints commands that would be executed.
+The -x flag prints commands as they are executed.
+
+For more about specifying packages, see 'go help packages'.
+ `,
+}
+
+var generateRunFlag string // generate -run flag
+
+func init() {
+ addBuildFlags(cmdGenerate)
+ cmdGenerate.Flag.StringVar(&generateRunFlag, "run", "", "")
+}
+
+func runGenerate(cmd *Command, args []string) {
+ // Even if the arguments are .go files, this loop suffices.
+ for _, pkg := range packages(args) {
+ for _, file := range pkg.gofiles {
+ if !generate(pkg.Name, file) {
+ break
+ }
+ }
+ }
+}
+
+// generate runs the generation directives for a single file.
+func generate(pkg, absFile string) bool {
+ fd, err := os.Open(absFile)
+ if err != nil {
+ log.Fatalf("generate: %s", err)
+ }
+ defer fd.Close()
+ g := &Generator{
+ r: fd,
+ path: absFile,
+ pkg: pkg,
+ commands: make(map[string][]string),
+ }
+ return g.run()
+}
+
+// A Generator represents the state of a single Go source file
+// being scanned for generator commands.
+type Generator struct {
+ r io.Reader
+ path string // full rooted path name.
+ dir string // full rooted directory of file.
+ file string // base name of file.
+ pkg string
+ commands map[string][]string
+ lineNum int
+}
+
+// run runs the generators in the current file.
+func (g *Generator) run() (ok bool) {
+ // Processing below here calls g.errorf on failure, which does panic(stop).
+ // If we encounter an error, we abort the package.
+ defer func() {
+ e := recover()
+ if e != nil {
+ ok = false
+ if e != stop {
+ panic(e)
+ }
+ setExitStatus(1)
+ }
+ }()
+ g.dir, g.file = filepath.Split(g.path)
+ g.dir = filepath.Clean(g.dir) // No final separator please.
+ if buildV {
+ fmt.Fprintf(os.Stderr, "%s\n", shortPath(g.path))
+ }
+
+ // Scan for lines that start "//go:generate".
+ // Can't use bufio.Scanner because it can't handle long lines,
+ // which are likely to appear when using generate.
+ input := bufio.NewReader(g.r)
+ var err error
+ // One line per loop.
+ for {
+ g.lineNum++ // 1-indexed.
+ var buf []byte
+ buf, err = input.ReadSlice('\n')
+ if err == bufio.ErrBufferFull {
+ // Line too long - consume and ignore.
+ if isGoGenerate(buf) {
+ g.errorf("directive too long")
+ }
+ for err == bufio.ErrBufferFull {
+ _, err = input.ReadSlice('\n')
+ }
+ if err != nil {
+ break
+ }
+ continue
+ }
+
+ if err != nil {
+ // Check for marker at EOF without final \n.
+ if err == io.EOF && isGoGenerate(buf) {
+ err = io.ErrUnexpectedEOF
+ }
+ break
+ }
+
+ if !isGoGenerate(buf) {
+ continue
+ }
+
+ words := g.split(string(buf))
+ if len(words) == 0 {
+ g.errorf("no arguments to directive")
+ }
+ if words[0] == "-command" {
+ g.setShorthand(words)
+ continue
+ }
+ // Run the command line.
+ if buildN || buildX {
+ fmt.Fprintf(os.Stderr, "%s\n", strings.Join(words, " "))
+ }
+ if buildN {
+ continue
+ }
+ g.exec(words)
+ }
+ if err != nil && err != io.EOF {
+ g.errorf("error reading %s: %s", shortPath(g.path), err)
+ }
+ return true
+}
+
+func isGoGenerate(buf []byte) bool {
+ return bytes.HasPrefix(buf, []byte("//go:generate ")) || bytes.HasPrefix(buf, []byte("//go:generate\t"))
+}
+
+// split breaks the line into words, evaluating quoted
+// strings and evaluating environment variables.
+// The initial //go:generate element is present in line.
+func (g *Generator) split(line string) []string {
+ // Parse line, obeying quoted strings.
+ var words []string
+ line = line[len("//go:generate ") : len(line)-1] // Drop preamble and final newline.
+ // One (possibly quoted) word per iteration.
+Words:
+ for {
+ line = strings.TrimLeft(line, " \t")
+ if len(line) == 0 {
+ break
+ }
+ if line[0] == '"' {
+ for i := 1; i < len(line); i++ {
+ c := line[i] // Only looking for ASCII so this is OK.
+ switch c {
+ case '\\':
+ if i+1 == len(line) {
+ g.errorf("bad backslash")
+ }
+ i++ // Absorb next byte (If it's a multibyte we'll get an error in Unquote).
+ case '"':
+ word, err := strconv.Unquote(line[0 : i+1])
+ if err != nil {
+ g.errorf("bad quoted string")
+ }
+ words = append(words, word)
+ line = line[i+1:]
+ // Check the next character is space or end of line.
+ if len(line) > 0 && line[0] != ' ' && line[0] != '\t' {
+ g.errorf("expect space after quoted argument")
+ }
+ continue Words
+ }
+ }
+ g.errorf("mismatched quoted string")
+ }
+ i := strings.IndexAny(line, " \t")
+ if i < 0 {
+ i = len(line)
+ }
+ words = append(words, line[0:i])
+ line = line[i:]
+ }
+ // Substitute command if required.
+ if len(words) > 0 && g.commands[words[0]] != nil {
+ // Replace 0th word by command substitution.
+ words = append(g.commands[words[0]], words[1:]...)
+ }
+ // Substitute environment variables.
+ for i, word := range words {
+ words[i] = g.expandEnv(word)
+ }
+ return words
+}
+
+var stop = fmt.Errorf("error in generation")
+
+// errorf logs an error message prefixed with the file and line number.
+// It then exits the program (with exit status 1) because generation stops
+// at the first error.
+func (g *Generator) errorf(format string, args ...interface{}) {
+ fmt.Fprintf(os.Stderr, "%s:%d: %s\n", shortPath(g.path), g.lineNum,
+ fmt.Sprintf(format, args...))
+ panic(stop)
+}
+
+// expandEnv expands any $XXX invocations in word.
+func (g *Generator) expandEnv(word string) string {
+ if !strings.ContainsRune(word, '$') {
+ return word
+ }
+ var buf bytes.Buffer
+ var w int
+ var r rune
+ for i := 0; i < len(word); i += w {
+ r, w = utf8.DecodeRuneInString(word[i:])
+ if r != '$' {
+ buf.WriteRune(r)
+ continue
+ }
+ w += g.identLength(word[i+w:])
+ envVar := word[i+1 : i+w]
+ var sub string
+ switch envVar {
+ case "GOARCH":
+ sub = runtime.GOARCH
+ case "GOOS":
+ sub = runtime.GOOS
+ case "GOFILE":
+ sub = g.file
+ case "GOPACKAGE":
+ sub = g.pkg
+ default:
+ sub = os.Getenv(envVar)
+ }
+ buf.WriteString(sub)
+ }
+ return buf.String()
+}
+
+// identLength returns the length of the identifier beginning the string.
+func (g *Generator) identLength(word string) int {
+ for i, r := range word {
+ if r == '_' || unicode.IsLetter(r) || unicode.IsDigit(r) {
+ continue
+ }
+ return i
+ }
+ return len(word)
+}
+
+// setShorthand installs a new shorthand as defined by a -command directive.
+func (g *Generator) setShorthand(words []string) {
+ // Create command shorthand.
+ if len(words) == 1 {
+ g.errorf("no command specified for -command")
+ }
+ command := words[1]
+ if g.commands[command] != nil {
+ g.errorf("command %q defined multiply defined", command)
+ }
+ g.commands[command] = words[2:len(words):len(words)] // force later append to make copy
+}
+
+// exec runs the command specified by the argument. The first word is
+// the command name itself.
+func (g *Generator) exec(words []string) {
+ cmd := exec.Command(words[0], words[1:]...)
+ // Standard in and out of generator should be the usual.
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+ // Run the command in the package directory.
+ cmd.Dir = g.dir
+ env := []string{
+ "GOARCH=" + runtime.GOARCH,
+ "GOOS=" + runtime.GOOS,
+ "GOFILE=" + g.file,
+ "GOPACKAGE=" + g.pkg,
+ }
+ cmd.Env = mergeEnvLists(env, os.Environ())
+ err := cmd.Run()
+ if err != nil {
+ g.errorf("running %q: %s", words[0], err)
+ }
+}
diff --git a/src/cmd/go/generate_test.go b/src/cmd/go/generate_test.go
new file mode 100644
index 000000000..660ebabbe
--- /dev/null
+++ b/src/cmd/go/generate_test.go
@@ -0,0 +1,48 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+ "reflect"
+ "runtime"
+ "testing"
+)
+
+type splitTest struct {
+ in string
+ out []string
+}
+
+var splitTests = []splitTest{
+ {"", nil},
+ {"x", []string{"x"}},
+ {" a b\tc ", []string{"a", "b", "c"}},
+ {` " a " `, []string{" a "}},
+ {"$GOARCH", []string{runtime.GOARCH}},
+ {"$GOOS", []string{runtime.GOOS}},
+ {"$GOFILE", []string{"proc.go"}},
+ {"$GOPACKAGE", []string{"sys"}},
+ {"a $XXNOTDEFINEDXX b", []string{"a", "", "b"}},
+ {"/$XXNOTDEFINED/", []string{"//"}},
+ {"yacc -o $GOARCH/yacc_$GOFILE", []string{"go", "tool", "yacc", "-o", runtime.GOARCH + "/yacc_proc.go"}},
+}
+
+func TestGenerateCommandParse(t *testing.T) {
+ g := &Generator{
+ r: nil, // Unused here.
+ path: "/usr/ken/sys/proc.go",
+ dir: "/usr/ken/sys",
+ file: "proc.go",
+ pkg: "sys",
+ commands: make(map[string][]string),
+ }
+ g.setShorthand([]string{"-command", "yacc", "go", "tool", "yacc"})
+ for _, test := range splitTests {
+ got := g.split("//go:generate " + test.in + "\n")
+ if !reflect.DeepEqual(got, test.out) {
+ t.Errorf("split(%q): got %q expected %q", test.in, got, test.out)
+ }
+ }
+}
diff --git a/src/cmd/go/get.go b/src/cmd/go/get.go
index e708fcf77..86e169761 100644
--- a/src/cmd/go/get.go
+++ b/src/cmd/go/get.go
@@ -16,7 +16,7 @@ import (
)
var cmdGet = &Command{
- UsageLine: "get [-d] [-fix] [-t] [-u] [build flags] [packages]",
+ UsageLine: "get [-d] [-f] [-fix] [-t] [-u] [build flags] [packages]",
Short: "download and install packages and dependencies",
Long: `
Get downloads and installs the packages named by the import paths,
@@ -25,6 +25,11 @@ along with their dependencies.
The -d flag instructs get to stop after downloading the packages; that is,
it instructs get not to install the packages.
+The -f flag, valid only when -u is set, forces get -u not to verify that
+each package has been checked out from the source control repository
+implied by its import path. This can be useful if the source is a local fork
+of the original.
+
The -fix flag instructs get to run the fix tool on the downloaded packages
before resolving dependencies or building the code.
@@ -53,6 +58,7 @@ See also: go build, go install, go clean.
}
var getD = cmdGet.Flag.Bool("d", false, "")
+var getF = cmdGet.Flag.Bool("f", false, "")
var getT = cmdGet.Flag.Bool("t", false, "")
var getU = cmdGet.Flag.Bool("u", false, "")
var getFix = cmdGet.Flag.Bool("fix", false, "")
@@ -63,6 +69,10 @@ func init() {
}
func runGet(cmd *Command, args []string) {
+ if *getF && !*getU {
+ fatalf("go get: cannot use -f flag without -u")
+ }
+
// Phase 1. Download/update.
var stk importStack
for _, arg := range downloadPaths(args) {
@@ -151,7 +161,9 @@ func download(arg string, stk *importStack, getTestDeps bool) {
}
// Only process each package once.
- if downloadCache[arg] {
+ // (Unless we're fetching test dependencies for this package,
+ // in which case we want to process it again.)
+ if downloadCache[arg] && !getTestDeps {
return
}
downloadCache[arg] = true
@@ -264,6 +276,25 @@ func downloadPackage(p *Package) error {
return err
}
repo = "<local>" // should be unused; make distinctive
+
+ // Double-check where it came from.
+ if *getU && vcs.remoteRepo != nil && !*getF {
+ dir := filepath.Join(p.build.SrcRoot, rootPath)
+ if remote, err := vcs.remoteRepo(vcs, dir); err == nil {
+ if rr, err := repoRootForImportPath(p.ImportPath); err == nil {
+ repo := rr.repo
+ if rr.vcs.resolveRepo != nil {
+ resolved, err := rr.vcs.resolveRepo(rr.vcs, dir, repo)
+ if err == nil {
+ repo = resolved
+ }
+ }
+ if remote != repo {
+ return fmt.Errorf("%s is from %s, should be from %s", dir, remote, repo)
+ }
+ }
+ }
+ }
} else {
// Analyze the import path to determine the version control system,
// repository, and the import path for the root of the repository.
diff --git a/src/cmd/go/go_windows_test.go b/src/cmd/go/go_windows_test.go
new file mode 100644
index 000000000..53d695ccc
--- /dev/null
+++ b/src/cmd/go/go_windows_test.go
@@ -0,0 +1,55 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+ "testing"
+)
+
+func TestAbsolutePath(t *testing.T) {
+ tmp, err := ioutil.TempDir("", "TestAbsolutePath")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.RemoveAll(tmp)
+
+ file := filepath.Join(tmp, "a.go")
+ err = ioutil.WriteFile(file, []byte{}, 0644)
+ if err != nil {
+ t.Fatal(err)
+ }
+ dir := filepath.Join(tmp, "dir")
+ err = os.Mkdir(dir, 0777)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ wd, err := os.Getwd()
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.Chdir(wd)
+
+ // Chdir so current directory and a.go reside on the same drive.
+ err = os.Chdir(dir)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ noVolume := file[len(filepath.VolumeName(file)):]
+ wrongPath := filepath.Join(dir, noVolume)
+ output, err := exec.Command("go", "build", noVolume).CombinedOutput()
+ if err == nil {
+ t.Fatal("build should fail")
+ }
+ if strings.Contains(string(output), wrongPath) {
+ t.Fatalf("wrong output found: %v %v", err, string(output))
+ }
+}
diff --git a/src/cmd/go/help.go b/src/cmd/go/help.go
index 40da7e1f5..c590fdb37 100644
--- a/src/cmd/go/help.go
+++ b/src/cmd/go/help.go
@@ -81,7 +81,8 @@ single directory, the command is applied to a single synthesized
package made up of exactly those files, ignoring any build constraints
in those files and ignoring any other files in the directory.
-File names that begin with "." or "_" are ignored by the go tool.
+Directory and file names that begin with "." or "_" are ignored
+by the go tool, as are directories named "testdata".
`,
}
@@ -154,6 +155,11 @@ A few common code hosting sites have special syntax:
import "launchpad.net/~user/project/branch"
import "launchpad.net/~user/project/branch/sub/directory"
+ IBM DevOps Services (Git)
+
+ import "hub.jazz.net/git/user/project"
+ import "hub.jazz.net/git/user/project/sub/directory"
+
For code hosted on other servers, import paths may either be qualified
with the version control type, or the go tool can dynamically fetch
the import path over https/http and discover where the code resides
@@ -229,7 +235,26 @@ listed in the GOPATH environment variable (see 'go help gopath').
The go command attempts to download the version of the
package appropriate for the Go release being used.
-Run 'go help install' for more.
+Run 'go help get' for more.
+
+Import path checking
+
+When the custom import path feature described above redirects to a
+known code hosting site, each of the resulting packages has two possible
+import paths, using the custom domain or the known hosting site.
+
+A package statement is said to have an "import comment" if it is immediately
+followed (before the next newline) by a comment of one of these two forms:
+
+ package math // import "path"
+ package math /* import "path" */
+
+The go command will refuse to install a package with an import comment
+unless it is being referred to by that import path. In this way, import comments
+let package authors make sure the custom import path is used and not a
+direct path to the underlying code hosting site.
+
+See https://golang.org/s/go14customimport for details.
`,
}
diff --git a/src/cmd/go/list.go b/src/cmd/go/list.go
index 0ead43502..fbf96167f 100644
--- a/src/cmd/go/list.go
+++ b/src/cmd/go/list.go
@@ -30,28 +30,29 @@ syntax of package template. The default output is equivalent to -f
'{{.ImportPath}}'. The struct being passed to the template is:
type Package struct {
- Dir string // directory containing package sources
- ImportPath string // import path of package in dir
- Name string // package name
- Doc string // package documentation string
- Target string // install path
- Goroot bool // is this package in the Go root?
- Standard bool // is this package part of the standard Go library?
- Stale bool // would 'go install' do anything for this package?
- Root string // Go root or Go path dir containing this package
+ Dir string // directory containing package sources
+ ImportPath string // import path of package in dir
+ ImportComment string // path in import comment on package statement
+ Name string // package name
+ Doc string // package documentation string
+ Target string // install path
+ Goroot bool // is this package in the Go root?
+ Standard bool // is this package part of the standard Go library?
+ Stale bool // would 'go install' do anything for this package?
+ Root string // Go root or Go path dir containing this package
// Source files
- GoFiles []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
- CgoFiles []string // .go sources files that import "C"
+ GoFiles []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
+ CgoFiles []string // .go sources files that import "C"
IgnoredGoFiles []string // .go sources ignored due to build constraints
- CFiles []string // .c source files
- CXXFiles []string // .cc, .cxx and .cpp source files
- MFiles []string // .m source files
- HFiles []string // .h, .hh, .hpp and .hxx source files
- SFiles []string // .s source files
- SwigFiles []string // .swig files
- SwigCXXFiles []string // .swigcxx files
- SysoFiles []string // .syso object files to add to archive
+ CFiles []string // .c source files
+ CXXFiles []string // .cc, .cxx and .cpp source files
+ MFiles []string // .m source files
+ HFiles []string // .h, .hh, .hpp and .hxx source files
+ SFiles []string // .s source files
+ SwigFiles []string // .swig files
+ SwigCXXFiles []string // .swigcxx files
+ SysoFiles []string // .syso object files to add to archive
// Cgo directives
CgoCFLAGS []string // cgo: flags for C compiler
diff --git a/src/cmd/go/main.go b/src/cmd/go/main.go
index 5b1194aaa..9691f39c7 100644
--- a/src/cmd/go/main.go
+++ b/src/cmd/go/main.go
@@ -79,6 +79,7 @@ var commands = []*Command{
cmdEnv,
cmdFix,
cmdFmt,
+ cmdGenerate,
cmdGet,
cmdInstall,
cmdList,
@@ -536,7 +537,7 @@ func matchPackages(pattern string) []string {
})
for _, src := range buildContext.SrcDirs() {
- if pattern == "std" && src != gorootSrcPkg {
+ if pattern == "std" && src != gorootSrc {
continue
}
src = filepath.Clean(src) + string(filepath.Separator)
@@ -618,7 +619,7 @@ func matchPackagesInFS(pattern string) []string {
// The initial case is not Cleaned, though, so we do this explicitly.
//
// This converts a path like "./io/" to "io". Without this step, running
- // "cd $GOROOT/src/pkg; go list ./io/..." would incorrectly skip the io
+ // "cd $GOROOT/src; go list ./io/..." would incorrectly skip the io
// package, because prepending the prefix "./" to the unclean path would
// result in "././io", and match("././io") returns false.
path = filepath.Clean(path)
diff --git a/src/cmd/go/mkdoc.sh b/src/cmd/go/mkdoc.sh
index 12fd7ba3e..e15e8809c 100755
--- a/src/cmd/go/mkdoc.sh
+++ b/src/cmd/go/mkdoc.sh
@@ -4,6 +4,6 @@
# license that can be found in the LICENSE file.
go install # So the next line will produce updated documentation.
-go help documentation > doc.go
+go help documentation | sed 's; \*/; * /;' >doc.go
gofmt -w doc.go
diff --git a/src/cmd/go/pkg.go b/src/cmd/go/pkg.go
index d45df265b..b71feb7a6 100644
--- a/src/cmd/go/pkg.go
+++ b/src/cmd/go/pkg.go
@@ -14,6 +14,7 @@ import (
"os"
pathpkg "path"
"path/filepath"
+ "runtime"
"sort"
"strings"
"time"
@@ -25,16 +26,17 @@ type Package struct {
// Note: These fields are part of the go command's public API.
// See list.go. It is okay to add fields, but not to change or
// remove existing ones. Keep in sync with list.go
- Dir string `json:",omitempty"` // directory containing package sources
- ImportPath string `json:",omitempty"` // import path of package in dir
- Name string `json:",omitempty"` // package name
- Doc string `json:",omitempty"` // package documentation string
- Target string `json:",omitempty"` // install path
- Goroot bool `json:",omitempty"` // is this package found in the Go root?
- Standard bool `json:",omitempty"` // is this package part of the standard Go library?
- Stale bool `json:",omitempty"` // would 'go install' do anything for this package?
- Root string `json:",omitempty"` // Go root or Go path dir containing this package
- ConflictDir string `json:",omitempty"` // Dir is hidden by this other directory
+ Dir string `json:",omitempty"` // directory containing package sources
+ ImportPath string `json:",omitempty"` // import path of package in dir
+ ImportComment string `json:",omitempty"` // path in import comment on package statement
+ Name string `json:",omitempty"` // package name
+ Doc string `json:",omitempty"` // package documentation string
+ Target string `json:",omitempty"` // install path
+ Goroot bool `json:",omitempty"` // is this package found in the Go root?
+ Standard bool `json:",omitempty"` // is this package part of the standard Go library?
+ Stale bool `json:",omitempty"` // would 'go install' do anything for this package?
+ Root string `json:",omitempty"` // Go root or Go path dir containing this package
+ ConflictDir string `json:",omitempty"` // Dir is hidden by this other directory
// Source files
GoFiles []string `json:",omitempty"` // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
@@ -103,6 +105,7 @@ func (p *Package) copyBuild(pp *build.Package) {
p.Dir = pp.Dir
p.ImportPath = pp.ImportPath
+ p.ImportComment = pp.ImportComment
p.Name = pp.Name
p.Doc = pp.Doc
p.Root = pp.Root
@@ -218,7 +221,7 @@ func dirToImportPath(dir string) string {
}
func makeImportValid(r rune) rune {
- // Should match Go spec, compilers, and ../../pkg/go/parser/parser.go:/isValidImport.
+ // Should match Go spec, compilers, and ../../go/parser/parser.go:/isValidImport.
const illegalChars = `!"#$%&'()*,:;<=>?[\]^{|}` + "`\uFFFD"
if !unicode.IsGraphic(r) || unicode.IsSpace(r) || strings.ContainsRune(illegalChars, r) {
return '_'
@@ -244,6 +247,9 @@ func loadImport(path string, srcDir string, stk *importStack, importPos []token.
importPath = dirToImportPath(filepath.Join(srcDir, path))
}
if p := packageCache[importPath]; p != nil {
+ if perr := disallowInternal(srcDir, p, stk); perr != p {
+ return perr
+ }
return reusePackage(p, stk)
}
@@ -258,11 +264,14 @@ func loadImport(path string, srcDir string, stk *importStack, importPos []token.
//
// TODO: After Go 1, decide when to pass build.AllowBinary here.
// See issue 3268 for mistakes to avoid.
- bp, err := buildContext.Import(path, srcDir, 0)
+ bp, err := buildContext.Import(path, srcDir, build.ImportComment)
bp.ImportPath = importPath
if gobin != "" {
bp.BinDir = gobin
}
+ if err == nil && !isLocal && bp.ImportComment != "" && bp.ImportComment != path {
+ err = fmt.Errorf("code in directory %s expects import %q", bp.Dir, bp.ImportComment)
+ }
p.load(stk, bp, err)
if p.Error != nil && len(importPos) > 0 {
pos := importPos[0]
@@ -270,6 +279,10 @@ func loadImport(path string, srcDir string, stk *importStack, importPos []token.
p.Error.Pos = pos.String()
}
+ if perr := disallowInternal(srcDir, p, stk); perr != p {
+ return perr
+ }
+
return p
}
@@ -298,12 +311,82 @@ func reusePackage(p *Package, stk *importStack) *Package {
return p
}
+// disallowInternal checks that srcDir is allowed to import p.
+// If the import is allowed, disallowInternal returns the original package p.
+// If not, it returns a new package containing just an appropriate error.
+func disallowInternal(srcDir string, p *Package, stk *importStack) *Package {
+ // golang.org/s/go14internal:
+ // An import of a path containing the element “internal”
+ // is disallowed if the importing code is outside the tree
+ // rooted at the parent of the “internal” directory.
+ //
+ // ... For Go 1.4, we will implement the rule first for $GOROOT, but not $GOPATH.
+
+ // Only applies to $GOROOT.
+ if !p.Standard {
+ return p
+ }
+
+ // The stack includes p.ImportPath.
+ // If that's the only thing on the stack, we started
+ // with a name given on the command line, not an
+ // import. Anything listed on the command line is fine.
+ if len(*stk) == 1 {
+ return p
+ }
+
+ // Check for "internal" element: four cases depending on begin of string and/or end of string.
+ i, ok := findInternal(p.ImportPath)
+ if !ok {
+ return p
+ }
+
+ // Internal is present.
+ // Map import path back to directory corresponding to parent of internal.
+ if i > 0 {
+ i-- // rewind over slash in ".../internal"
+ }
+ parent := p.Dir[:i+len(p.Dir)-len(p.ImportPath)]
+ if hasPathPrefix(filepath.ToSlash(srcDir), filepath.ToSlash(parent)) {
+ return p
+ }
+
+ // Internal is present, and srcDir is outside parent's tree. Not allowed.
+ perr := *p
+ perr.Error = &PackageError{
+ ImportStack: stk.copy(),
+ Err: "use of internal package not allowed",
+ }
+ perr.Incomplete = true
+ return &perr
+}
+
+// findInternal looks for the final "internal" path element in the given import path.
+// If there isn't one, findInternal returns ok=false.
+// Otherwise, findInternal returns ok=true and the index of the "internal".
+func findInternal(path string) (index int, ok bool) {
+ // Four cases, depending on internal at start/end of string or not.
+ // The order matters: we must return the index of the final element,
+ // because the final one produces the most restrictive requirement
+ // on the importer.
+ switch {
+ case strings.HasSuffix(path, "/internal"):
+ return len(path) - len("internal"), true
+ case strings.Contains(path, "/internal/"):
+ return strings.LastIndex(path, "/internal/") + 1, true
+ case path == "internal", strings.HasPrefix(path, "internal/"):
+ return 0, true
+ }
+ return 0, false
+}
+
type targetDir int
const (
- toRoot targetDir = iota // to bin dir inside package root (default)
- toTool // GOROOT/pkg/tool
- toBin // GOROOT/bin
+ toRoot targetDir = iota // to bin dir inside package root (default)
+ toTool // GOROOT/pkg/tool
+ toBin // GOROOT/bin
+ stalePath // the old import path; fail to build
)
// goTools is a map of Go program import path to install target directory.
@@ -316,10 +399,14 @@ var goTools = map[string]targetDir{
"cmd/nm": toTool,
"cmd/objdump": toTool,
"cmd/pack": toTool,
+ "cmd/pprof": toTool,
"cmd/yacc": toTool,
- "code.google.com/p/go.tools/cmd/cover": toTool,
- "code.google.com/p/go.tools/cmd/godoc": toBin,
- "code.google.com/p/go.tools/cmd/vet": toTool,
+ "golang.org/x/tools/cmd/cover": toTool,
+ "golang.org/x/tools/cmd/godoc": toBin,
+ "golang.org/x/tools/cmd/vet": toTool,
+ "code.google.com/p/go.tools/cmd/cover": stalePath,
+ "code.google.com/p/go.tools/cmd/godoc": stalePath,
+ "code.google.com/p/go.tools/cmd/vet": stalePath,
}
// expandScanner expands a scanner.List error into all the errors in the list.
@@ -380,6 +467,13 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
}
if p.Name == "main" {
+ // Report an error when the old code.google.com/p/go.tools paths are used.
+ if goTools[p.ImportPath] == stalePath {
+ newPath := strings.Replace(p.ImportPath, "code.google.com/p/go.", "golang.org/x/", 1)
+ e := fmt.Sprintf("the %v command has moved; use %v instead.", p.ImportPath, newPath)
+ p.Error = &PackageError{Err: e}
+ return p
+ }
_, elem := filepath.Split(p.Dir)
full := buildContext.GOOS + "_" + buildContext.GOARCH + "/" + elem
if buildContext.GOOS != toolGOOS || buildContext.GOARCH != toolGOARCH {
@@ -482,7 +576,7 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
// Build list of imported packages and full dependency list.
imports := make([]*Package, 0, len(p.Imports))
- deps := make(map[string]bool)
+ deps := make(map[string]*Package)
for i, path := range importPaths {
if path == "C" {
continue
@@ -502,10 +596,10 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
path = p1.ImportPath
importPaths[i] = path
}
- deps[path] = true
+ deps[path] = p1
imports = append(imports, p1)
- for _, dep := range p1.Deps {
- deps[dep] = true
+ for _, dep := range p1.deps {
+ deps[dep.ImportPath] = dep
}
if p1.Incomplete {
p.Incomplete = true
@@ -519,7 +613,7 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
}
sort.Strings(p.Deps)
for _, dep := range p.Deps {
- p1 := packageCache[dep]
+ p1 := deps[dep]
if p1 == nil {
panic("impossible: missing entry in package cache for " + dep + " imported by " + p.ImportPath)
}
@@ -535,6 +629,16 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
}
p.Target = p.target
+ // Check for C code compiled with Plan 9 C compiler.
+ // No longer allowed except in runtime and runtime/cgo, for now.
+ if len(p.CFiles) > 0 && !p.usesCgo() && (!p.Standard || p.ImportPath != "runtime") {
+ p.Error = &PackageError{
+ ImportStack: stk.copy(),
+ Err: fmt.Sprintf("C source files not allowed when not using cgo: %s", strings.Join(p.CFiles, " ")),
+ }
+ return p
+ }
+
// In the absence of errors lower in the dependency tree,
// check for case-insensitive collisions of import paths.
if len(p.DepsErrors) == 0 {
@@ -596,6 +700,12 @@ func computeStale(pkgs ...*Package) {
}
}
+// The runtime version string takes one of two forms:
+// "go1.X[.Y]" for Go releases, and "devel +hash" at tip.
+// Determine whether we are in a released copy by
+// inspecting the version.
+var isGoRelease = strings.HasPrefix(runtime.Version(), "go1")
+
// isStale reports whether package p needs to be rebuilt.
func isStale(p *Package, topRoot map[string]bool) bool {
if p.Standard && (p.ImportPath == "unsafe" || buildContext.Compiler == "gccgo") {
@@ -616,7 +726,16 @@ func isStale(p *Package, topRoot map[string]bool) bool {
return false
}
- if buildA || p.target == "" || p.Stale {
+ // If we are running a release copy of Go, do not rebuild the standard packages.
+ // They may not be writable anyway, but they are certainly not changing.
+ // This makes 'go build -a' skip the standard packages when using an official release.
+ // See issue 4106 and issue 8290.
+ pkgBuildA := buildA
+ if p.Standard && isGoRelease {
+ pkgBuildA = false
+ }
+
+ if pkgBuildA || p.target == "" || p.Stale {
return true
}
@@ -704,24 +823,13 @@ func loadPackage(arg string, stk *importStack) *Package {
arg = sub
}
}
- if strings.HasPrefix(arg, "cmd/") {
+ if strings.HasPrefix(arg, "cmd/") && !strings.Contains(arg[4:], "/") {
if p := cmdCache[arg]; p != nil {
return p
}
stk.push(arg)
defer stk.pop()
- if strings.Contains(arg[4:], "/") {
- p := &Package{
- Error: &PackageError{
- ImportStack: stk.copy(),
- Err: fmt.Sprintf("invalid import path: cmd/... is reserved for Go commands"),
- hard: true,
- },
- }
- return p
- }
-
bp, err := buildContext.ImportDir(filepath.Join(gorootSrc, arg), 0)
bp.ImportPath = arg
bp.Goroot = true
diff --git a/src/cmd/go/test.bash b/src/cmd/go/test.bash
index 0060ce218..e0f066f18 100755
--- a/src/cmd/go/test.bash
+++ b/src/cmd/go/test.bash
@@ -4,18 +4,22 @@
# license that can be found in the LICENSE file.
set -e
-go build -o testgo
+go build -tags testgo -o testgo
go() {
echo TEST ERROR: ran go, not testgo: go "$@" >&2
exit 2
}
started=false
+testdesc=""
+nl="
+"
TEST() {
if $started; then
stop
fi
echo TEST: "$@"
+ testdesc="$@"
started=true
ok=true
}
@@ -29,6 +33,7 @@ stop() {
echo PASS
else
echo FAIL
+ testfail="$testfail $testdesc$nl"
allok=false
fi
}
@@ -55,12 +60,63 @@ if ! grep -q "^$fn:" $d/err.out; then
fi
rm -r $d
+TEST 'program name in crash messages'
+linker=$(./testgo env GOCHAR)l
+d=$(TMPDIR=/var/tmp mktemp -d -t testgoXXX)
+./testgo build -ldflags -crash_for_testing $(./testgo env GOROOT)/test/helloworld.go 2>$d/err.out || true
+if ! grep -q "/tool/.*/$linker" $d/err.out; then
+ echo "missing linker name in error message"
+ cat $d/err.out
+ ok=false
+fi
+rm -r $d
+
+TEST broken tests without Test functions all fail
+d=$(mktemp -d -t testgoXXX)
+./testgo test ./testdata/src/badtest/... >$d/err 2>&1 || true
+if grep -q '^ok' $d/err; then
+ echo test passed unexpectedly:
+ grep '^ok' $d/err
+ ok=false
+elif ! grep -q 'FAIL.*badtest/badexec' $d/err || ! grep -q 'FAIL.*badtest/badsyntax' $d/err || ! grep -q 'FAIL.*badtest/badvar' $d/err; then
+ echo test did not run everything
+ cat $d/err
+ ok=false
+fi
+rm -rf $d
+
+TEST 'go build -a in dev branch'
+./testgo install math || ok=false # should be up to date already but just in case
+d=$(TMPDIR=/var/tmp mktemp -d -t testgoXXX)
+if ! TESTGO_IS_GO_RELEASE=0 ./testgo build -v -a math 2>$d/err.out; then
+ cat $d/err.out
+ ok=false
+elif ! grep -q runtime $d/err.out; then
+ echo "testgo build -a math in dev branch DID NOT build runtime, but should have"
+ cat $d/err.out
+ ok=false
+fi
+rm -r $d
+
+TEST 'go build -a in release branch'
+./testgo install math || ok=false # should be up to date already but just in case
+d=$(TMPDIR=/var/tmp mktemp -d -t testgoXXX)
+if ! TESTGO_IS_GO_RELEASE=1 ./testgo build -v -a math 2>$d/err.out; then
+ cat $d/err.out
+ ok=false
+elif grep -q runtime $d/err.out; then
+ echo "testgo build -a math in dev branch DID build runtime, but should NOT have"
+ cat $d/err.out
+ ok=false
+fi
+rm -r $d
+
# Test local (./) imports.
testlocal() {
local="$1"
TEST local imports $2 '(easy)'
- ./testgo build -o hello "testdata/$local/easy.go"
- ./hello >hello.out
+ ./testgo build -o hello "testdata/$local/easy.go" || ok=false
+ ./hello >hello.out || ok=false
if ! grep -q '^easysub\.Hello' hello.out; then
echo "testdata/$local/easy.go did not generate expected output"
cat hello.out
@@ -68,8 +124,8 @@ testlocal() {
fi
TEST local imports $2 '(easysub)'
- ./testgo build -o hello "testdata/$local/easysub/main.go"
- ./hello >hello.out
+ ./testgo build -o hello "testdata/$local/easysub/main.go" || ok=false
+ ./hello >hello.out || ok=false
if ! grep -q '^easysub\.Hello' hello.out; then
echo "testdata/$local/easysub/main.go did not generate expected output"
cat hello.out
@@ -77,8 +133,8 @@ testlocal() {
fi
TEST local imports $2 '(hard)'
- ./testgo build -o hello "testdata/$local/hard.go"
- ./hello >hello.out
+ ./testgo build -o hello "testdata/$local/hard.go" || ok=false
+ ./hello >hello.out || ok=false
if ! grep -q '^sub\.Hello' hello.out || ! grep -q '^subsub\.Hello' hello.out ; then
echo "testdata/$local/hard.go did not generate expected output"
cat hello.out
@@ -105,6 +161,132 @@ cp -R testdata/local "testdata/$bad"
testlocal "$bad" 'with bad characters in path'
rm -rf "testdata/$bad"
+TEST 'internal packages in $GOROOT are respected'
+if ./testgo build -v ./testdata/testinternal >testdata/std.out 2>&1; then
+ echo "go build ./testdata/testinternal succeeded incorrectly"
+ ok=false
+elif ! grep 'use of internal package not allowed' testdata/std.out >/dev/null; then
+ echo "wrong error message for testdata/testinternal"
+ cat std.out
+ ok=false
+fi
+
+TEST 'internal packages outside $GOROOT are not respected'
+if ! ./testgo build -v ./testdata/testinternal2; then
+ echo "go build ./testdata/testinternal2 failed"
+ ok=false
+fi
+
+# Test that 'go get -u' reports moved packages.
+testmove() {
+ vcs=$1
+ url=$2
+ base=$3
+ config=$4
+
+ TEST go get -u notices $vcs package that moved
+ d=$(mktemp -d -t testgoXXX)
+ mkdir -p $d/src
+ if ! GOPATH=$d ./testgo get -d $url; then
+ echo 'go get -d $url failed'
+ ok=false
+ elif ! GOPATH=$d ./testgo get -d -u $url; then
+ echo 'go get -d -u $url failed'
+ ok=false
+ else
+ set +e
+ case "$vcs" in
+ svn)
+ # SVN doesn't believe in text files so we can't just edit the config.
+ # Check out a different repo into the wrong place.
+ rm -rf $d/src/code.google.com/p/rsc-svn
+ GOPATH=$d ./testgo get -d -u code.google.com/p/rsc-svn2/trunk
+ mv $d/src/code.google.com/p/rsc-svn2 $d/src/code.google.com/p/rsc-svn
+ ;;
+ *)
+ echo '1,$s;'"$base"';'"$base"'XXX;
+w
+q' | ed $d/src/$config >/dev/null 2>&1
+ esac
+ set -e
+
+ if GOPATH=$d ./testgo get -d -u $url 2>$d/err; then
+ echo "go get -d -u $url succeeded with wrong remote repo"
+ cat $d/err
+ ok=false
+ elif ! grep 'should be from' $d/err >/dev/null; then
+ echo "go get -d -u $url failed for wrong reason"
+ cat $d/err
+ ok=false
+ fi
+
+ if GOPATH=$d ./testgo get -d -f -u $url 2>$d/err; then
+ echo "go get -d -u $url succeeded with wrong remote repo"
+ cat $d/err
+ ok=false
+ elif ! egrep -i 'validating server certificate|not found' $d/err >/dev/null; then
+ echo "go get -d -f -u $url failed for wrong reason"
+ cat $d/err
+ ok=false
+ fi
+ fi
+ rm -rf $d
+}
+
+testmove hg rsc.io/x86/x86asm x86 rsc.io/x86/.hg/hgrc
+testmove git rsc.io/pdf pdf rsc.io/pdf/.git/config
+testmove svn code.google.com/p/rsc-svn/trunk - -
+
+export GOPATH=$(pwd)/testdata/importcom
+TEST 'import comment - match'
+if ! ./testgo build ./testdata/importcom/works.go; then
+ echo 'go build ./testdata/importcom/works.go failed'
+ ok=false
+fi
+TEST 'import comment - mismatch'
+if ./testgo build ./testdata/importcom/wrongplace.go 2>testdata/err; then
+ echo 'go build ./testdata/importcom/wrongplace.go suceeded'
+ ok=false
+elif ! grep 'wrongplace expects import "my/x"' testdata/err >/dev/null; then
+ echo 'go build did not mention incorrect import:'
+ cat testdata/err
+ ok=false
+fi
+TEST 'import comment - syntax error'
+if ./testgo build ./testdata/importcom/bad.go 2>testdata/err; then
+ echo 'go build ./testdata/importcom/bad.go suceeded'
+ ok=false
+elif ! grep 'cannot parse import comment' testdata/err >/dev/null; then
+ echo 'go build did not mention syntax error:'
+ cat testdata/err
+ ok=false
+fi
+TEST 'import comment - conflict'
+if ./testgo build ./testdata/importcom/conflict.go 2>testdata/err; then
+ echo 'go build ./testdata/importcom/conflict.go suceeded'
+ ok=false
+elif ! grep 'found import comments' testdata/err >/dev/null; then
+ echo 'go build did not mention comment conflict:'
+ cat testdata/err
+ ok=false
+fi
+rm -f ./testdata/err
+unset GOPATH
+
+export GOPATH=$(pwd)/testdata/src
+TEST disallowed C source files
+export GOPATH=$(pwd)/testdata
+if ./testgo build badc 2>testdata/err; then
+ echo 'go build badc succeeded'
+ ok=false
+elif ! grep 'C source files not allowed' testdata/err >/dev/null; then
+ echo 'go test did not say C source files not allowed:'
+ cat testdata/err
+ ok=false
+fi
+rm -f ./testdata/err
+unset GOPATH
+
TEST error message for syntax error in test go file says FAIL
export GOPATH=$(pwd)/testdata
if ./testgo test syntaxerror 2>testdata/err; then
@@ -251,20 +433,20 @@ TEST godoc installs into GOBIN
d=$(mktemp -d -t testgoXXX)
export GOPATH=$d
mkdir $d/gobin
-GOBIN=$d/gobin ./testgo get code.google.com/p/go.tools/cmd/godoc
+GOBIN=$d/gobin ./testgo get golang.org/x/tools/cmd/godoc || ok=false
if [ ! -x $d/gobin/godoc ]; then
echo did not install godoc to '$GOBIN'
- GOBIN=$d/gobin ./testgo list -f 'Target: {{.Target}}' code.google.com/p/go.tools/cmd/godoc
+ GOBIN=$d/gobin ./testgo list -f 'Target: {{.Target}}' golang.org/x/tools/cmd/godoc || true
ok=false
fi
TEST godoc installs into GOROOT
GOROOT=$(./testgo env GOROOT)
rm -f $GOROOT/bin/godoc
-./testgo install code.google.com/p/go.tools/cmd/godoc
+./testgo install golang.org/x/tools/cmd/godoc || ok=false
if [ ! -x $GOROOT/bin/godoc ]; then
echo did not install godoc to '$GOROOT/bin'
- ./testgo list -f 'Target: {{.Target}}' code.google.com/p/go.tools/cmd/godoc
+ ./testgo list -f 'Target: {{.Target}}' golang.org/x/tools/cmd/godoc || true
ok=false
fi
@@ -272,36 +454,36 @@ TEST cmd/fix installs into tool
GOOS=$(./testgo env GOOS)
GOARCH=$(./testgo env GOARCH)
rm -f $GOROOT/pkg/tool/${GOOS}_${GOARCH}/fix
-./testgo install cmd/fix
+./testgo install cmd/fix || ok=false
if [ ! -x $GOROOT/pkg/tool/${GOOS}_${GOARCH}/fix ]; then
echo 'did not install cmd/fix to $GOROOT/pkg/tool'
- GOBIN=$d/gobin ./testgo list -f 'Target: {{.Target}}' cmd/fix
+ GOBIN=$d/gobin ./testgo list -f 'Target: {{.Target}}' cmd/fix || true
ok=false
fi
rm -f $GOROOT/pkg/tool/${GOOS}_${GOARCH}/fix
-GOBIN=$d/gobin ./testgo install cmd/fix
+GOBIN=$d/gobin ./testgo install cmd/fix || ok=false
if [ ! -x $GOROOT/pkg/tool/${GOOS}_${GOARCH}/fix ]; then
echo 'did not install cmd/fix to $GOROOT/pkg/tool with $GOBIN set'
- GOBIN=$d/gobin ./testgo list -f 'Target: {{.Target}}' cmd/fix
+ GOBIN=$d/gobin ./testgo list -f 'Target: {{.Target}}' cmd/fix || true
ok=false
fi
TEST gopath program installs into GOBIN
mkdir $d/src/progname
echo 'package main; func main() {}' >$d/src/progname/p.go
-GOBIN=$d/gobin ./testgo install progname
+GOBIN=$d/gobin ./testgo install progname || ok=false
if [ ! -x $d/gobin/progname ]; then
echo 'did not install progname to $GOBIN/progname'
- ./testgo list -f 'Target: {{.Target}}' cmd/api
+ ./testgo list -f 'Target: {{.Target}}' cmd/api || true
ok=false
fi
rm -f $d/gobin/progname $d/bin/progname
TEST gopath program installs into GOPATH/bin
-./testgo install progname
+./testgo install progname || ok=false
if [ ! -x $d/bin/progname ]; then
echo 'did not install progname to $GOPATH/bin/progname'
- ./testgo list -f 'Target: {{.Target}}' progname
+ ./testgo list -f 'Target: {{.Target}}' progname || true
ok=false
fi
@@ -330,7 +512,7 @@ fi
# ensure that output of 'go list' is consistent between runs
TEST go list is consistent
-./testgo list std > test_std.list
+./testgo list std > test_std.list || ok=false
if ! ./testgo list std | cmp -s test_std.list - ; then
echo "go list std ordering is inconsistent"
ok=false
@@ -378,9 +560,9 @@ fi
# Test that without GOPATH set, go get should fail
TEST without GOPATH, go get fails
d=$(mktemp -d -t testgoXXX)
-mkdir -p $d/src/pkg
-if GOPATH= GOROOT=$d ./testgo get -d code.google.com/p/go.codereview/cmd/hgpatch ; then
- echo 'go get code.google.com/p/go.codereview/cmd/hgpatch should not succeed with $GOPATH unset'
+mkdir -p $d/src
+if GOPATH= GOROOT=$d ./testgo get -d golang.org/x/codereview/cmd/hgpatch ; then
+ echo 'go get golang.org/x/codereview/cmd/hgpatch should not succeed with $GOPATH unset'
ok=false
fi
rm -rf $d
@@ -388,9 +570,9 @@ rm -rf $d
# Test that with GOPATH=$GOROOT, go get should fail
TEST with GOPATH=GOROOT, go get fails
d=$(mktemp -d -t testgoXXX)
-mkdir -p $d/src/pkg
-if GOPATH=$d GOROOT=$d ./testgo get -d code.google.com/p/go.codereview/cmd/hgpatch ; then
- echo 'go get code.google.com/p/go.codereview/cmd/hgpatch should not succeed with GOPATH=$GOROOT'
+mkdir -p $d/src
+if GOPATH=$d GOROOT=$d ./testgo get -d golang.org/x/codereview/cmd/hgpatch ; then
+ echo 'go get golang.org/x/codereview/cmd/hgpatch should not succeed with GOPATH=$GOROOT'
ok=false
fi
rm -rf $d
@@ -404,7 +586,7 @@ func main() {
println(extern)
}
EOF
-./testgo run -ldflags '-X main.extern "hello world"' $d/main.go 2>hello.out
+./testgo run -ldflags '-X main.extern "hello world"' $d/main.go 2>hello.out || ok=false
if ! grep -q '^hello world' hello.out; then
echo "ldflags -X main.extern 'hello world' failed. Output:"
cat hello.out
@@ -420,6 +602,30 @@ if [ ! -x strings.test ]; then
fi
rm -f strings.prof strings.test
+TEST go test -cpuprofile -o controls binary location
+./testgo test -cpuprofile strings.prof -o mystrings.test strings || ok=false
+if [ ! -x mystrings.test ]; then
+ echo "go test -cpuprofile -o mystrings.test did not create mystrings.test"
+ ok=false
+fi
+rm -f strings.prof mystrings.test
+
+TEST go test -c -o controls binary location
+./testgo test -c -o mystrings.test strings || ok=false
+if [ ! -x mystrings.test ]; then
+ echo "go test -c -o mystrings.test did not create mystrings.test"
+ ok=false
+fi
+rm -f mystrings.test
+
+TEST go test -o writes binary
+./testgo test -o mystrings.test strings || ok=false
+if [ ! -x mystrings.test ]; then
+ echo "go test -o mystrings.test did not create mystrings.test"
+ ok=false
+fi
+rm -f mystrings.test
+
TEST symlinks do not confuse go list '(issue 4568)'
old=$(pwd)
tmp=$(cd /tmp && pwd -P)
@@ -522,37 +728,56 @@ elif ! grep "case-insensitive file name collision" $d/out >/dev/null; then
fi
TEST go get cover
-./testgo get code.google.com/p/go.tools/cmd/cover || ok=false
+./testgo get golang.org/x/tools/cmd/cover || ok=false
unset GOPATH
rm -rf $d
+TEST go get -t "code.google.com/p/go-get-issue-8181/{a,b}"
+d=$(TMPDIR=/var/tmp mktemp -d -t testgoXXX)
+export GOPATH=$d
+if ./testgo get -t code.google.com/p/go-get-issue-8181/{a,b}; then
+ ./testgo list ... | grep go.tools/godoc > /dev/null || ok=false
+else
+ ok=false
+fi
+unset GOPATH
+rm -rf $d
+
TEST shadowing logic
export GOPATH=$(pwd)/testdata/shadow/root1:$(pwd)/testdata/shadow/root2
# The math in root1 is not "math" because the standard math is.
+set +e
cdir=$(./testgo list -f '({{.ImportPath}}) ({{.ConflictDir}})' ./testdata/shadow/root1/src/math)
-if [ "$cdir" != "(_$(pwd)/testdata/shadow/root1/src/math) ($GOROOT/src/pkg/math)" ]; then
+set -e
+if [ "$cdir" != "(_$(pwd)/testdata/shadow/root1/src/math) ($GOROOT/src/math)" ]; then
echo shadowed math is not shadowed: "$cdir"
ok=false
fi
# The foo in root1 is "foo".
+set +e
cdir=$(./testgo list -f '({{.ImportPath}}) ({{.ConflictDir}})' ./testdata/shadow/root1/src/foo)
+set -e
if [ "$cdir" != "(foo) ()" ]; then
echo unshadowed foo is shadowed: "$cdir"
ok=false
fi
# The foo in root2 is not "foo" because the foo in root1 got there first.
+set +e
cdir=$(./testgo list -f '({{.ImportPath}}) ({{.ConflictDir}})' ./testdata/shadow/root2/src/foo)
+set -e
if [ "$cdir" != "(_$(pwd)/testdata/shadow/root2/src/foo) ($(pwd)/testdata/shadow/root1/src/foo)" ]; then
echo shadowed foo is not shadowed: "$cdir"
ok=false
fi
# The error for go install should mention the conflicting directory.
-err=$(! ./testgo install ./testdata/shadow/root2/src/foo 2>&1)
+set +e
+err=$(./testgo install ./testdata/shadow/root2/src/foo 2>&1)
+set -e
if [ "$err" != "go install: no install location for $(pwd)/testdata/shadow/root2/src/foo: hidden by $(pwd)/testdata/shadow/root1/src/foo" ]; then
echo wrong shadowed install error: "$err"
ok=false
@@ -741,30 +966,46 @@ echo '
package foo
func F() {}
' >$d/src/x/y/foo/foo.go
+checkbar() {
+ desc="$1"
+ sleep 1
+ touch $d/src/x/y/foo/foo.go
+ if ! ./testgo build -v -i x/y/bar &> $d/err; then
+ echo build -i "$1" failed
+ cat $d/err
+ ok=false
+ elif ! grep x/y/foo $d/err >/dev/null; then
+ echo first build -i "$1" did not build x/y/foo
+ cat $d/err
+ ok=false
+ fi
+ if ! ./testgo build -v -i x/y/bar &> $d/err; then
+ echo second build -i "$1" failed
+ cat $d/err
+ ok=false
+ elif grep x/y/foo $d/err >/dev/null; then
+ echo second build -i "$1" built x/y/foo
+ cat $d/err
+ ok=false
+ fi
+}
+
echo '
package bar
import "x/y/foo"
func F() { foo.F() }
' >$d/src/x/y/bar/bar.go
-if ! ./testgo build -v -i x/y/bar &> $d/err; then
- echo build -i failed
- cat $d/err
- ok=false
-elif ! grep x/y/foo $d/err >/dev/null; then
- echo first build -i did not build x/y/foo
- cat $d/err
- ok=false
-fi
-if ! ./testgo build -v -i x/y/bar &> $d/err; then
- echo second build -i failed
- cat $d/err
- ok=false
-elif grep x/y/foo $d/err >/dev/null; then
- echo second build -i built x/y/foo
- cat $d/err
- ok=false
-fi
-rm -rf $d
+checkbar pkg
+
+TEST build -i installs dependencies for command
+echo '
+package main
+import "x/y/foo"
+func main() { foo.F() }
+' >$d/src/x/y/bar/bar.go
+checkbar cmd
+
+rm -rf $d bar
unset GOPATH
TEST 'go build in test-only directory fails with a good error'
@@ -799,13 +1040,74 @@ fi
TEST 'go test xtestonly works'
export GOPATH=$(pwd)/testdata
-./testgo clean -i xtestonly
+./testgo clean -i xtestonly || ok=false
if ! ./testgo test xtestonly >/dev/null; then
echo "go test xtestonly failed"
ok=false
fi
unset GOPATH
+TEST 'go test builds an xtest containing only non-runnable examples'
+if ! ./testgo test -v ./testdata/norunexample > testdata/std.out; then
+ echo "go test ./testdata/norunexample failed"
+ ok=false
+elif ! grep 'File with non-runnable example was built.' testdata/std.out > /dev/null; then
+ echo "file with non-runnable example was not built"
+ ok=false
+fi
+
+TEST 'go generate handles simple command'
+if ! ./testgo generate ./testdata/generate/test1.go > testdata/std.out; then
+ echo "go test ./testdata/generate/test1.go failed to run"
+ ok=false
+elif ! grep 'Success' testdata/std.out > /dev/null; then
+ echo "go test ./testdata/generate/test1.go generated wrong output"
+ ok=false
+fi
+
+TEST 'go generate handles command alias'
+if ! ./testgo generate ./testdata/generate/test2.go > testdata/std.out; then
+ echo "go test ./testdata/generate/test2.go failed to run"
+ ok=false
+elif ! grep 'Now is the time for all good men' testdata/std.out > /dev/null; then
+ echo "go test ./testdata/generate/test2.go generated wrong output"
+ ok=false
+fi
+
+TEST 'go generate variable substitution'
+if ! ./testgo generate ./testdata/generate/test3.go > testdata/std.out; then
+ echo "go test ./testdata/generate/test3.go failed to run"
+ ok=false
+elif ! grep "$GOARCH test3.go p xyzp/test3.go/123" testdata/std.out > /dev/null; then
+ echo "go test ./testdata/generate/test3.go generated wrong output"
+ ok=false
+fi
+
+TEST go get works with vanity wildcards
+d=$(mktemp -d -t testgoXXX)
+export GOPATH=$d
+if ! ./testgo get -u rsc.io/pdf/...; then
+ ok=false
+elif [ ! -x $d/bin/pdfpasswd ]; then
+ echo did not build rsc.io/pdf/pdfpasswd
+ ok=false
+fi
+unset GOPATH
+rm -rf $d
+
+TEST go vet with external tests
+d=$(mktemp -d -t testgoXXX)
+export GOPATH=$(pwd)/testdata
+if ./testgo vet vetpkg >$d/err 2>&1; then
+ echo "go vet vetpkg passes incorrectly"
+ ok=false
+elif ! grep -q 'missing argument for Printf' $d/err; then
+ echo "go vet vetpkg did not find missing argument for Printf"
+ cat $d/err
+ ok=false
+fi
+unset GOPATH
+rm -rf $d
# clean up
if $started; then stop; fi
@@ -815,6 +1117,7 @@ rm -f testgo
if $allok; then
echo PASS
else
- echo FAIL
+ echo FAIL:
+ echo "$testfail"
exit 1
fi
diff --git a/src/cmd/go/test.go b/src/cmd/go/test.go
index 5935c98db..c81e40639 100644
--- a/src/cmd/go/test.go
+++ b/src/cmd/go/test.go
@@ -6,6 +6,7 @@ package main
import (
"bytes"
+ "errors"
"fmt"
"go/ast"
"go/build"
@@ -48,7 +49,7 @@ It prints a summary of the test results in the format:
followed by detailed output for each failed package.
'Go test' recompiles each package along with any files with names matching
-the file pattern "*_test.go".
+the file pattern "*_test.go".
Files whose names begin with "_" (including "_test.go") or "." are ignored.
These additional files can contain test functions, benchmark functions, and
example functions. See 'go help testfunc' for more.
@@ -65,16 +66,23 @@ non-test installation.
In addition to the build flags, the flags handled by 'go test' itself are:
- -c Compile the test binary to pkg.test but do not run it.
- (Where pkg is the last element of the package's import path.)
+ -c
+ Compile the test binary to pkg.test but do not run it
+ (where pkg is the last element of the package's import path).
+ The file name can be changed with the -o flag.
+
+ -exec xprog
+ Run the test binary using xprog. The behavior is the same as
+ in 'go run'. See 'go help run' for details.
-i
Install packages that are dependencies of the test.
Do not run the test.
- -exec xprog
- Run the test binary using xprog. The behavior is the same as
- in 'go run'. See 'go help run' for details.
+ -o file
+ Compile the test binary to the named file.
+ The test still runs (unless -c or -i is specified).
+
The test binary also accepts flags that control execution of the test; these
flags are also accessible by 'go test'. See 'go help testflag' for details.
@@ -122,6 +130,7 @@ control the execution of any test:
-blockprofile block.out
Write a goroutine blocking profile to the specified file
when all tests are complete.
+ Writes test binary as -c would.
-blockprofilerate n
Control the detail provided in goroutine blocking profiles by
@@ -153,8 +162,7 @@ control the execution of any test:
Sets -cover.
-coverprofile cover.out
- Write a coverage profile to the specified file after all tests
- have passed.
+ Write a coverage profile to the file after all tests have passed.
Sets -cover.
-cpu 1,2,4
@@ -164,10 +172,11 @@ control the execution of any test:
-cpuprofile cpu.out
Write a CPU profile to the specified file before exiting.
+ Writes test binary as -c would.
-memprofile mem.out
- Write a memory profile to the specified file after all tests
- have passed.
+ Write a memory profile to the file after all tests have passed.
+ Writes test binary as -c would.
-memprofilerate n
Enable more precise (and expensive) memory profiles by setting
@@ -274,10 +283,10 @@ var (
testCoverMode string // -covermode flag
testCoverPaths []string // -coverpkg flag
testCoverPkgs []*Package // -coverpkg flag
+ testO string // -o flag
testProfile bool // some profiling flag
testNeedBinary bool // profile needs to keep binary around
testV bool // -v flag
- testFiles []string // -file flag(s) TODO: not respected
testTimeout string // -timeout flag
testArgs []string
testBench bool
@@ -291,6 +300,7 @@ var testMainDeps = map[string]bool{
// Dependencies for testmain.
"testing": true,
"regexp": true,
+ "os": true,
}
func runTest(cmd *Command, args []string) {
@@ -308,6 +318,9 @@ func runTest(cmd *Command, args []string) {
if testC && len(pkgs) != 1 {
fatalf("cannot use -c flag with multiple packages")
}
+ if testO != "" && len(pkgs) != 1 {
+ fatalf("cannot use -o flag with multiple packages")
+ }
if testProfile && len(pkgs) != 1 {
fatalf("cannot use test profile flag with multiple packages")
}
@@ -522,6 +535,13 @@ func contains(x []string, s string) bool {
return false
}
+var windowsBadWords = []string{
+ "install",
+ "patch",
+ "setup",
+ "update",
+}
+
func (b *builder) test(p *Package) (buildAction, runAction, printAction *action, err error) {
if len(p.TestGoFiles)+len(p.XTestGoFiles) == 0 {
build := b.action(modeBuild, modeBuild, p)
@@ -687,7 +707,7 @@ func (b *builder) test(p *Package) (buildAction, runAction, printAction *action,
omitDWARF: !testC && !testNeedBinary,
}
- // The generated main also imports testing and regexp.
+ // The generated main also imports testing, regexp, and os.
stk.push("testmain")
for dep := range testMainDeps {
if dep == ptest.ImportPath {
@@ -723,11 +743,13 @@ func (b *builder) test(p *Package) (buildAction, runAction, printAction *action,
if err != nil {
return nil, nil, nil, err
}
- if t.NeedTest || ptest.coverMode != "" {
+ if len(ptest.GoFiles) > 0 {
pmain.imports = append(pmain.imports, ptest)
+ t.ImportTest = true
}
- if t.NeedXtest {
+ if pxtest != nil {
pmain.imports = append(pmain.imports, pxtest)
+ t.ImportXtest = true
}
if ptest != p && localCover {
@@ -779,17 +801,54 @@ func (b *builder) test(p *Package) (buildAction, runAction, printAction *action,
a.objdir = testDir + string(filepath.Separator)
a.objpkg = filepath.Join(testDir, "main.a")
a.target = filepath.Join(testDir, testBinary) + exeSuffix
- pmainAction := a
+ if goos == "windows" {
+ // There are many reserved words on Windows that,
+ // if used in the name of an executable, cause Windows
+ // to try to ask for extra permissions.
+ // The word list includes setup, install, update, and patch,
+ // but it does not appear to be defined anywhere.
+ // We have run into this trying to run the
+ // go.codereview/patch tests.
+ // For package names containing those words, use test.test.exe
+ // instead of pkgname.test.exe.
+ // Note that this file name is only used in the Go command's
+ // temporary directory. If the -c or other flags are
+ // given, the code below will still use pkgname.test.exe.
+ // There are two user-visible effects of this change.
+ // First, you can actually run 'go test' in directories that
+ // have names that Windows thinks are installer-like,
+ // without getting a dialog box asking for more permissions.
+ // Second, in the Windows process listing during go test,
+ // the test shows up as test.test.exe, not pkgname.test.exe.
+ // That second one is a drawback, but it seems a small
+ // price to pay for the test running at all.
+ // If maintaining the list of bad words is too onerous,
+ // we could just do this always on Windows.
+ for _, bad := range windowsBadWords {
+ if strings.Contains(testBinary, bad) {
+ a.target = filepath.Join(testDir, "test.test") + exeSuffix
+ break
+ }
+ }
+ }
+ buildAction = a
if testC || testNeedBinary {
// -c or profiling flag: create action to copy binary to ./test.out.
- runAction = &action{
+ target := filepath.Join(cwd, testBinary+exeSuffix)
+ if testO != "" {
+ target = testO
+ if !filepath.IsAbs(target) {
+ target = filepath.Join(cwd, target)
+ }
+ }
+ buildAction = &action{
f: (*builder).install,
- deps: []*action{pmainAction},
+ deps: []*action{buildAction},
p: pmain,
- target: filepath.Join(cwd, testBinary+exeSuffix),
+ target: target,
}
- pmainAction = runAction // in case we are running the test
+ runAction = buildAction // make sure runAction != nil even if not running test
}
if testC {
printAction = &action{p: p, deps: []*action{runAction}} // nop
@@ -797,7 +856,7 @@ func (b *builder) test(p *Package) (buildAction, runAction, printAction *action,
// run test
runAction = &action{
f: (*builder).runTest,
- deps: []*action{pmainAction},
+ deps: []*action{buildAction},
p: p,
ignoreFail: true,
}
@@ -813,7 +872,7 @@ func (b *builder) test(p *Package) (buildAction, runAction, printAction *action,
}
}
- return pmainAction, runAction, printAction, nil
+ return buildAction, runAction, printAction, nil
}
func testImportStack(top string, p *Package, target string) []string {
@@ -1057,6 +1116,31 @@ func (b *builder) notest(a *action) error {
return nil
}
+// isTestMain tells whether fn is a TestMain(m *testing.M) function.
+func isTestMain(fn *ast.FuncDecl) bool {
+ if fn.Name.String() != "TestMain" ||
+ fn.Type.Results != nil && len(fn.Type.Results.List) > 0 ||
+ fn.Type.Params == nil ||
+ len(fn.Type.Params.List) != 1 ||
+ len(fn.Type.Params.List[0].Names) > 1 {
+ return false
+ }
+ ptr, ok := fn.Type.Params.List[0].Type.(*ast.StarExpr)
+ if !ok {
+ return false
+ }
+ // We can't easily check that the type is *testing.M
+ // because we don't know how testing has been imported,
+ // but at least check that it's *M or *something.M.
+ if name, ok := ptr.X.(*ast.Ident); ok && name.Name == "M" {
+ return true
+ }
+ if sel, ok := ptr.X.(*ast.SelectorExpr); ok && sel.Sel.Name == "M" {
+ return true
+ }
+ return false
+}
+
// isTest tells whether name looks like a test (or benchmark, according to prefix).
// It is a Test (say) if there is a character after Test that is not a lower-case letter.
// We don't want TesticularCancer.
@@ -1082,12 +1166,12 @@ func loadTestFuncs(ptest *Package) (*testFuncs, error) {
Package: ptest,
}
for _, file := range ptest.TestGoFiles {
- if err := t.load(filepath.Join(ptest.Dir, file), "_test", &t.NeedTest); err != nil {
+ if err := t.load(filepath.Join(ptest.Dir, file), "_test", &t.ImportTest, &t.NeedTest); err != nil {
return nil, err
}
}
for _, file := range ptest.XTestGoFiles {
- if err := t.load(filepath.Join(ptest.Dir, file), "_xtest", &t.NeedXtest); err != nil {
+ if err := t.load(filepath.Join(ptest.Dir, file), "_xtest", &t.ImportXtest, &t.NeedXtest); err != nil {
return nil, err
}
}
@@ -1110,13 +1194,16 @@ func writeTestmain(out string, t *testFuncs) error {
}
type testFuncs struct {
- Tests []testFunc
- Benchmarks []testFunc
- Examples []testFunc
- Package *Package
- NeedTest bool
- NeedXtest bool
- Cover []coverInfo
+ Tests []testFunc
+ Benchmarks []testFunc
+ Examples []testFunc
+ TestMain *testFunc
+ Package *Package
+ ImportTest bool
+ NeedTest bool
+ ImportXtest bool
+ NeedXtest bool
+ Cover []coverInfo
}
func (t *testFuncs) CoverMode() string {
@@ -1151,7 +1238,7 @@ type testFunc struct {
var testFileSet = token.NewFileSet()
-func (t *testFuncs) load(filename, pkg string, seen *bool) error {
+func (t *testFuncs) load(filename, pkg string, doImport, seen *bool) error {
f, err := parser.ParseFile(testFileSet, filename, nil, parser.ParseComments)
if err != nil {
return expandScanner(err)
@@ -1166,17 +1253,24 @@ func (t *testFuncs) load(filename, pkg string, seen *bool) error {
}
name := n.Name.String()
switch {
+ case isTestMain(n):
+ if t.TestMain != nil {
+ return errors.New("multiple definitions of TestMain")
+ }
+ t.TestMain = &testFunc{pkg, name, ""}
+ *doImport, *seen = true, true
case isTest(name, "Test"):
t.Tests = append(t.Tests, testFunc{pkg, name, ""})
- *seen = true
+ *doImport, *seen = true, true
case isTest(name, "Benchmark"):
t.Benchmarks = append(t.Benchmarks, testFunc{pkg, name, ""})
- *seen = true
+ *doImport, *seen = true, true
}
}
ex := doc.Examples(f)
sort.Sort(byOrder(ex))
for _, e := range ex {
+ *doImport = true // import test file whether executed or not
if e.Output == "" && !e.EmptyOutput {
// Don't run examples with no output.
continue
@@ -1197,14 +1291,17 @@ var testmainTmpl = template.Must(template.New("main").Parse(`
package main
import (
+{{if not .TestMain}}
+ "os"
+{{end}}
"regexp"
"testing"
-{{if .NeedTest}}
- _test {{.Package.ImportPath | printf "%q"}}
+{{if .ImportTest}}
+ {{if .NeedTest}}_test{{else}}_{{end}} {{.Package.ImportPath | printf "%q"}}
{{end}}
-{{if .NeedXtest}}
- _xtest {{.Package.ImportPath | printf "%s_test" | printf "%q"}}
+{{if .ImportXtest}}
+ {{if .NeedXtest}}_xtest{{else}}_{{end}} {{.Package.ImportPath | printf "%s_test" | printf "%q"}}
{{end}}
{{range $i, $p := .Cover}}
_cover{{$i}} {{$p.Package.ImportPath | printf "%q"}}
@@ -1291,7 +1388,12 @@ func main() {
CoveredPackages: {{printf "%q" .Covered}},
})
{{end}}
- testing.Main(matchString, tests, benchmarks, examples)
+ m := testing.MainStart(matchString, tests, benchmarks, examples)
+{{with .TestMain}}
+ {{.Package}}.{{.Name}}(m)
+{{else}}
+ os.Exit(m.Run())
+{{end}}
}
`))
diff --git a/src/cmd/go/testdata/generate/test1.go b/src/cmd/go/testdata/generate/test1.go
new file mode 100644
index 000000000..1f05734f0
--- /dev/null
+++ b/src/cmd/go/testdata/generate/test1.go
@@ -0,0 +1,13 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Simple test for go generate.
+
+// We include a build tag that go generate should ignore.
+
+// +build ignore
+
+//go:generate echo Success
+
+package p
diff --git a/src/cmd/go/testdata/generate/test2.go b/src/cmd/go/testdata/generate/test2.go
new file mode 100644
index 000000000..ef1a3d951
--- /dev/null
+++ b/src/cmd/go/testdata/generate/test2.go
@@ -0,0 +1,10 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test that go generate handles command aliases.
+
+//go:generate -command run echo Now is the time
+//go:generate run for all good men
+
+package p
diff --git a/src/cmd/go/testdata/generate/test3.go b/src/cmd/go/testdata/generate/test3.go
new file mode 100644
index 000000000..41ffb7ea8
--- /dev/null
+++ b/src/cmd/go/testdata/generate/test3.go
@@ -0,0 +1,9 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test go generate variable substitution.
+
+//go:generate echo $GOARCH $GOFILE $GOPACKAGE xyz$GOPACKAGE/$GOFILE/123
+
+package p
diff --git a/src/cmd/go/testdata/importcom/bad.go b/src/cmd/go/testdata/importcom/bad.go
new file mode 100644
index 000000000..e104c2e99
--- /dev/null
+++ b/src/cmd/go/testdata/importcom/bad.go
@@ -0,0 +1,3 @@
+package p
+
+import "bad"
diff --git a/src/cmd/go/testdata/importcom/conflict.go b/src/cmd/go/testdata/importcom/conflict.go
new file mode 100644
index 000000000..995556c51
--- /dev/null
+++ b/src/cmd/go/testdata/importcom/conflict.go
@@ -0,0 +1,3 @@
+package p
+
+import "conflict"
diff --git a/src/cmd/go/testdata/importcom/src/bad/bad.go b/src/cmd/go/testdata/importcom/src/bad/bad.go
new file mode 100644
index 000000000..bc51fd3fd
--- /dev/null
+++ b/src/cmd/go/testdata/importcom/src/bad/bad.go
@@ -0,0 +1 @@
+package bad // import
diff --git a/src/cmd/go/testdata/importcom/src/conflict/a.go b/src/cmd/go/testdata/importcom/src/conflict/a.go
new file mode 100644
index 000000000..2d6770351
--- /dev/null
+++ b/src/cmd/go/testdata/importcom/src/conflict/a.go
@@ -0,0 +1 @@
+package conflict // import "a"
diff --git a/src/cmd/go/testdata/importcom/src/conflict/b.go b/src/cmd/go/testdata/importcom/src/conflict/b.go
new file mode 100644
index 000000000..8fcfb3c8b
--- /dev/null
+++ b/src/cmd/go/testdata/importcom/src/conflict/b.go
@@ -0,0 +1 @@
+package conflict /* import "b" */
diff --git a/src/cmd/go/testdata/importcom/src/works/x/x.go b/src/cmd/go/testdata/importcom/src/works/x/x.go
new file mode 100644
index 000000000..044c6eca8
--- /dev/null
+++ b/src/cmd/go/testdata/importcom/src/works/x/x.go
@@ -0,0 +1 @@
+package x // import "works/x"
diff --git a/src/cmd/go/testdata/importcom/src/works/x/x1.go b/src/cmd/go/testdata/importcom/src/works/x/x1.go
new file mode 100644
index 000000000..2449b29df
--- /dev/null
+++ b/src/cmd/go/testdata/importcom/src/works/x/x1.go
@@ -0,0 +1 @@
+package x // important! not an import comment
diff --git a/src/cmd/go/testdata/importcom/src/wrongplace/x.go b/src/cmd/go/testdata/importcom/src/wrongplace/x.go
new file mode 100644
index 000000000..b89849da7
--- /dev/null
+++ b/src/cmd/go/testdata/importcom/src/wrongplace/x.go
@@ -0,0 +1 @@
+package x // import "my/x"
diff --git a/src/cmd/go/testdata/importcom/works.go b/src/cmd/go/testdata/importcom/works.go
new file mode 100644
index 000000000..31b55d08a
--- /dev/null
+++ b/src/cmd/go/testdata/importcom/works.go
@@ -0,0 +1,3 @@
+package p
+
+import _ "works/x"
diff --git a/src/cmd/go/testdata/importcom/wrongplace.go b/src/cmd/go/testdata/importcom/wrongplace.go
new file mode 100644
index 000000000..e2535e01a
--- /dev/null
+++ b/src/cmd/go/testdata/importcom/wrongplace.go
@@ -0,0 +1,3 @@
+package p
+
+import "wrongplace"
diff --git a/src/cmd/go/testdata/norunexample/example_test.go b/src/cmd/go/testdata/norunexample/example_test.go
new file mode 100644
index 000000000..e158305a6
--- /dev/null
+++ b/src/cmd/go/testdata/norunexample/example_test.go
@@ -0,0 +1,11 @@
+package pkg_test
+
+import "os"
+
+func init() {
+ os.Stdout.Write([]byte("File with non-runnable example was built.\n"))
+}
+
+func Example_test() {
+ // This test will not be run, it has no "Output:" comment.
+}
diff --git a/src/cmd/go/testdata/norunexample/test_test.go b/src/cmd/go/testdata/norunexample/test_test.go
new file mode 100644
index 000000000..d2e919838
--- /dev/null
+++ b/src/cmd/go/testdata/norunexample/test_test.go
@@ -0,0 +1,10 @@
+package pkg
+
+import (
+ "os"
+ "testing"
+)
+
+func TestBuilt(t *testing.T) {
+ os.Stdout.Write([]byte("A normal test was executed.\n"))
+}
diff --git a/src/cmd/go/testdata/src/badc/x.c b/src/cmd/go/testdata/src/badc/x.c
new file mode 100644
index 000000000..f6cbf6924
--- /dev/null
+++ b/src/cmd/go/testdata/src/badc/x.c
@@ -0,0 +1 @@
+// C code!
diff --git a/src/cmd/go/testdata/src/badc/x.go b/src/cmd/go/testdata/src/badc/x.go
new file mode 100644
index 000000000..bfa1de28b
--- /dev/null
+++ b/src/cmd/go/testdata/src/badc/x.go
@@ -0,0 +1 @@
+package badc
diff --git a/src/cmd/go/testdata/src/badtest/badexec/x_test.go b/src/cmd/go/testdata/src/badtest/badexec/x_test.go
new file mode 100644
index 000000000..12f505171
--- /dev/null
+++ b/src/cmd/go/testdata/src/badtest/badexec/x_test.go
@@ -0,0 +1,5 @@
+package badexec
+
+func init() {
+ panic("badexec")
+}
diff --git a/src/cmd/go/testdata/src/badtest/badsyntax/x.go b/src/cmd/go/testdata/src/badtest/badsyntax/x.go
new file mode 100644
index 000000000..c8a5407a5
--- /dev/null
+++ b/src/cmd/go/testdata/src/badtest/badsyntax/x.go
@@ -0,0 +1 @@
+package badsyntax
diff --git a/src/cmd/go/testdata/src/badtest/badsyntax/x_test.go b/src/cmd/go/testdata/src/badtest/badsyntax/x_test.go
new file mode 100644
index 000000000..5be10745d
--- /dev/null
+++ b/src/cmd/go/testdata/src/badtest/badsyntax/x_test.go
@@ -0,0 +1,3 @@
+package badsyntax
+
+func func func func func!
diff --git a/src/cmd/go/testdata/src/badtest/badvar/x.go b/src/cmd/go/testdata/src/badtest/badvar/x.go
new file mode 100644
index 000000000..fdd46c4c7
--- /dev/null
+++ b/src/cmd/go/testdata/src/badtest/badvar/x.go
@@ -0,0 +1 @@
+package badvar
diff --git a/src/cmd/go/testdata/src/badtest/badvar/x_test.go b/src/cmd/go/testdata/src/badtest/badvar/x_test.go
new file mode 100644
index 000000000..c67df01c5
--- /dev/null
+++ b/src/cmd/go/testdata/src/badtest/badvar/x_test.go
@@ -0,0 +1,5 @@
+package badvar_test
+
+func f() {
+ _ = notdefined
+}
diff --git a/src/cmd/go/testdata/src/vetpkg/a_test.go b/src/cmd/go/testdata/src/vetpkg/a_test.go
new file mode 100644
index 000000000..9b64e8e1a
--- /dev/null
+++ b/src/cmd/go/testdata/src/vetpkg/a_test.go
@@ -0,0 +1 @@
+package p_test
diff --git a/src/cmd/go/testdata/src/vetpkg/b.go b/src/cmd/go/testdata/src/vetpkg/b.go
new file mode 100644
index 000000000..99e18f63d
--- /dev/null
+++ b/src/cmd/go/testdata/src/vetpkg/b.go
@@ -0,0 +1,7 @@
+package p
+
+import "fmt"
+
+func f() {
+ fmt.Printf("%d")
+}
diff --git a/src/cmd/go/testdata/testinternal/p.go b/src/cmd/go/testdata/testinternal/p.go
new file mode 100644
index 000000000..e3558a53b
--- /dev/null
+++ b/src/cmd/go/testdata/testinternal/p.go
@@ -0,0 +1,3 @@
+package p
+
+import _ "net/http/internal"
diff --git a/src/cmd/go/testdata/testinternal2/p.go b/src/cmd/go/testdata/testinternal2/p.go
new file mode 100644
index 000000000..c594f5c5e
--- /dev/null
+++ b/src/cmd/go/testdata/testinternal2/p.go
@@ -0,0 +1,3 @@
+package p
+
+import _ "./x/y/z/internal/w"
diff --git a/src/cmd/go/testdata/testinternal2/x/y/z/internal/w/w.go b/src/cmd/go/testdata/testinternal2/x/y/z/internal/w/w.go
new file mode 100644
index 000000000..a796c0b5f
--- /dev/null
+++ b/src/cmd/go/testdata/testinternal2/x/y/z/internal/w/w.go
@@ -0,0 +1 @@
+package w
diff --git a/src/cmd/go/testflag.go b/src/cmd/go/testflag.go
index 73f311e5f..6da74b996 100644
--- a/src/cmd/go/testflag.go
+++ b/src/cmd/go/testflag.go
@@ -65,9 +65,9 @@ type testFlagSpec struct {
var testFlagDefn = []*testFlagSpec{
// local.
{name: "c", boolVar: &testC},
- {name: "file", multiOK: true},
{name: "cover", boolVar: &testCover},
{name: "coverpkg"},
+ {name: "o"},
// build flags.
{name: "a", boolVar: &buildA},
@@ -153,6 +153,9 @@ func testFlags(args []string) (packageNames, passToTest []string) {
// bool flags.
case "a", "c", "i", "n", "x", "v", "race", "cover", "work":
setBoolFlag(f.boolVar, value)
+ case "o":
+ testO = value
+ testNeedBinary = true
case "p":
setIntFlag(&buildP, value)
case "exec":
@@ -184,8 +187,6 @@ func testFlags(args []string) (packageNames, passToTest []string) {
buildContext.BuildTags = strings.Fields(value)
case "compiler":
buildCompiler{}.Set(value)
- case "file":
- testFiles = append(testFiles, value)
case "bench":
// record that we saw the flag; don't care about the value
testBench = true
diff --git a/src/cmd/go/testgo.go b/src/cmd/go/testgo.go
new file mode 100644
index 000000000..01923f74b
--- /dev/null
+++ b/src/cmd/go/testgo.go
@@ -0,0 +1,21 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This file contains extra hooks for testing the go command.
+// It is compiled into the Go binary only when building the
+// test copy; it does not get compiled into the standard go
+// command, so these testing hooks are not present in the
+// go command that everyone uses.
+
+// +build testgo
+
+package main
+
+import "os"
+
+func init() {
+ if v := os.Getenv("TESTGO_IS_GO_RELEASE"); v != "" {
+ isGoRelease = v == "1"
+ }
+}
diff --git a/src/cmd/go/tool.go b/src/cmd/go/tool.go
index 6d26f7a4b..3f11c3e3d 100644
--- a/src/cmd/go/tool.go
+++ b/src/cmd/go/tool.go
@@ -47,13 +47,13 @@ const toolWindowsExtension = ".exe"
func tool(toolName string) string {
toolPath := filepath.Join(toolDir, toolName)
- if toolIsWindows && toolName != "pprof" {
+ if toolIsWindows {
toolPath += toolWindowsExtension
}
// Give a nice message if there is no tool with that name.
if _, err := os.Stat(toolPath); err != nil {
if isInGoToolsRepo(toolName) {
- fmt.Fprintf(os.Stderr, "go tool: no such tool %q; to install:\n\tgo get code.google.com/p/go.tools/cmd/%s\n", toolName, toolName)
+ fmt.Fprintf(os.Stderr, "go tool: no such tool %q; to install:\n\tgo get golang.org/x/tools/cmd/%s\n", toolName, toolName)
} else {
fmt.Fprintf(os.Stderr, "go tool: no such tool %q\n", toolName)
}
@@ -91,16 +91,6 @@ func runTool(cmd *Command, args []string) {
if toolPath == "" {
return
}
- if toolIsWindows && toolName == "pprof" {
- args = append([]string{"perl", toolPath}, args[1:]...)
- var err error
- toolPath, err = exec.LookPath("perl")
- if err != nil {
- fmt.Fprintf(os.Stderr, "go tool: perl not found\n")
- setExitStatus(3)
- return
- }
- }
if toolN {
fmt.Printf("%s %s\n", toolPath, strings.Join(args[1:], " "))
return
diff --git a/src/cmd/go/vcs.go b/src/cmd/go/vcs.go
index 8f0bae0b7..1cac61338 100644
--- a/src/cmd/go/vcs.go
+++ b/src/cmd/go/vcs.go
@@ -33,6 +33,9 @@ type vcsCmd struct {
scheme []string
pingCmd string
+
+ remoteRepo func(v *vcsCmd, rootDir string) (remoteRepo string, err error)
+ resolveRepo func(v *vcsCmd, rootDir, remoteRepo string) (realRepo string, err error)
}
// A tagCmd describes a command to list available tags
@@ -81,8 +84,17 @@ var vcsHg = &vcsCmd{
tagSyncCmd: "update -r {tag}",
tagSyncDefault: "update default",
- scheme: []string{"https", "http", "ssh"},
- pingCmd: "identify {scheme}://{repo}",
+ scheme: []string{"https", "http", "ssh"},
+ pingCmd: "identify {scheme}://{repo}",
+ remoteRepo: hgRemoteRepo,
+}
+
+func hgRemoteRepo(vcsHg *vcsCmd, rootDir string) (remoteRepo string, err error) {
+ out, err := vcsHg.runOutput(rootDir, "paths default")
+ if err != nil {
+ return "", err
+ }
+ return strings.TrimSpace(string(out)), nil
}
// vcsGit describes how to use Git.
@@ -104,8 +116,38 @@ var vcsGit = &vcsCmd{
tagSyncCmd: "checkout {tag}",
tagSyncDefault: "checkout master",
- scheme: []string{"git", "https", "http", "git+ssh"},
- pingCmd: "ls-remote {scheme}://{repo}",
+ scheme: []string{"git", "https", "http", "git+ssh"},
+ pingCmd: "ls-remote {scheme}://{repo}",
+ remoteRepo: gitRemoteRepo,
+}
+
+func gitRemoteRepo(vcsGit *vcsCmd, rootDir string) (remoteRepo string, err error) {
+ outb, err := vcsGit.runOutput(rootDir, "remote -v")
+ if err != nil {
+ return "", err
+ }
+ out := string(outb)
+
+ // Expect:
+ // origin https://github.com/rsc/pdf (fetch)
+ // origin https://github.com/rsc/pdf (push)
+ // use first line only.
+
+ if !strings.HasPrefix(out, "origin\t") {
+ return "", fmt.Errorf("unable to parse output of git remote -v")
+ }
+ out = strings.TrimPrefix(out, "origin\t")
+ i := strings.Index(out, "\n")
+ if i < 0 {
+ return "", fmt.Errorf("unable to parse output of git remote -v")
+ }
+ out = out[:i]
+ i = strings.LastIndex(out, " ")
+ if i < 0 {
+ return "", fmt.Errorf("unable to parse output of git remote -v")
+ }
+ out = out[:i]
+ return strings.TrimSpace(string(out)), nil
}
// vcsBzr describes how to use Bazaar.
@@ -123,8 +165,51 @@ var vcsBzr = &vcsCmd{
tagSyncCmd: "update -r {tag}",
tagSyncDefault: "update -r revno:-1",
- scheme: []string{"https", "http", "bzr", "bzr+ssh"},
- pingCmd: "info {scheme}://{repo}",
+ scheme: []string{"https", "http", "bzr", "bzr+ssh"},
+ pingCmd: "info {scheme}://{repo}",
+ remoteRepo: bzrRemoteRepo,
+ resolveRepo: bzrResolveRepo,
+}
+
+func bzrRemoteRepo(vcsBzr *vcsCmd, rootDir string) (remoteRepo string, err error) {
+ outb, err := vcsBzr.runOutput(rootDir, "config parent_location")
+ if err != nil {
+ return "", err
+ }
+ return strings.TrimSpace(string(outb)), nil
+}
+
+func bzrResolveRepo(vcsBzr *vcsCmd, rootDir, remoteRepo string) (realRepo string, err error) {
+ outb, err := vcsBzr.runOutput(rootDir, "info "+remoteRepo)
+ if err != nil {
+ return "", err
+ }
+ out := string(outb)
+
+ // Expect:
+ // ...
+ // (branch root|repository branch): <URL>
+ // ...
+
+ found := false
+ for _, prefix := range []string{"\n branch root: ", "\n repository branch: "} {
+ i := strings.Index(out, prefix)
+ if i >= 0 {
+ out = out[i+len(prefix):]
+ found = true
+ break
+ }
+ }
+ if !found {
+ return "", fmt.Errorf("unable to parse output of bzr info")
+ }
+
+ i := strings.Index(out, "\n")
+ if i < 0 {
+ return "", fmt.Errorf("unable to parse output of bzr info")
+ }
+ out = out[:i]
+ return strings.TrimSpace(string(out)), nil
}
// vcsSvn describes how to use Subversion.
@@ -138,8 +223,34 @@ var vcsSvn = &vcsCmd{
// There is no tag command in subversion.
// The branch information is all in the path names.
- scheme: []string{"https", "http", "svn", "svn+ssh"},
- pingCmd: "info {scheme}://{repo}",
+ scheme: []string{"https", "http", "svn", "svn+ssh"},
+ pingCmd: "info {scheme}://{repo}",
+ remoteRepo: svnRemoteRepo,
+}
+
+func svnRemoteRepo(vcsSvn *vcsCmd, rootDir string) (remoteRepo string, err error) {
+ outb, err := vcsSvn.runOutput(rootDir, "info")
+ if err != nil {
+ return "", err
+ }
+ out := string(outb)
+
+ // Expect:
+ // ...
+ // Repository Root: <URL>
+ // ...
+
+ i := strings.Index(out, "\nRepository Root: ")
+ if i < 0 {
+ return "", fmt.Errorf("unable to parse output of svn info")
+ }
+ out = out[i+len("\nRepository Root: "):]
+ i = strings.Index(out, "\n")
+ if i < 0 {
+ return "", fmt.Errorf("unable to parse output of svn info")
+ }
+ out = out[:i]
+ return strings.TrimSpace(string(out)), nil
}
func (v *vcsCmd) String() string {
@@ -361,7 +472,14 @@ var httpPrefixRE = regexp.MustCompile(`^https?:`)
func repoRootForImportPath(importPath string) (*repoRoot, error) {
rr, err := repoRootForImportPathStatic(importPath, "")
if err == errUnknownSite {
- rr, err = repoRootForImportDynamic(importPath)
+ // If there are wildcards, look up the thing before the wildcard,
+ // hoping it applies to the wildcarded parts too.
+ // This makes 'go get rsc.io/pdf/...' work in a fresh GOPATH.
+ lookup := strings.TrimSuffix(importPath, "/...")
+ if i := strings.Index(lookup, "/.../"); i >= 0 {
+ lookup = lookup[:i]
+ }
+ rr, err = repoRootForImportDynamic(lookup)
// repoRootForImportDynamic returns error detail
// that is irrelevant if the user didn't intend to use a
@@ -465,11 +583,11 @@ func repoRootForImportPathStatic(importPath, scheme string) (*repoRoot, error) {
func repoRootForImportDynamic(importPath string) (*repoRoot, error) {
slash := strings.Index(importPath, "/")
if slash < 0 {
- return nil, errors.New("import path doesn't contain a slash")
+ return nil, errors.New("import path does not contain a slash")
}
host := importPath[:slash]
if !strings.Contains(host, ".") {
- return nil, errors.New("import path doesn't contain a hostname")
+ return nil, errors.New("import path does not begin with hostname")
}
urlStr, body, err := httpsOrHTTP(importPath)
if err != nil {
@@ -613,6 +731,15 @@ var vcsPaths = []*vcsPath{
check: launchpadVCS,
},
+ // IBM DevOps Services (JazzHub)
+ {
+ prefix: "hub.jazz.net/git",
+ re: `^(?P<root>hub.jazz.net/git/[a-z0-9]+/[A-Za-z0-9_.\-]+)(/[A-Za-z0-9_.\-]+)*$`,
+ vcs: "git",
+ repo: "https://{root}",
+ check: noVCSSuffix,
+ },
+
// General syntax for any server.
{
re: `^(?P<root>(?P<repo>([a-z0-9.\-]+\.)+[a-z0-9.\-]+(:[0-9]+)?/[A-Za-z0-9_.\-/]*?)\.(?P<vcs>bzr|git|hg|svn))(/[A-Za-z0-9_.\-]+)*$`,
diff --git a/src/cmd/go/vcs_test.go b/src/cmd/go/vcs_test.go
new file mode 100644
index 000000000..14d681ba6
--- /dev/null
+++ b/src/cmd/go/vcs_test.go
@@ -0,0 +1,124 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+ "runtime"
+ "testing"
+)
+
+// Test that RepoRootForImportPath creates the correct RepoRoot for a given importPath.
+// TODO(cmang): Add tests for SVN and BZR.
+func TestRepoRootForImportPath(t *testing.T) {
+ if testing.Short() {
+ t.Skip("skipping test to avoid external network")
+ }
+ switch runtime.GOOS {
+ case "nacl", "android":
+ t.Skipf("no networking available on %s", runtime.GOOS)
+ }
+ tests := []struct {
+ path string
+ want *repoRoot
+ }{
+ {
+ "code.google.com/p/go",
+ &repoRoot{
+ vcs: vcsHg,
+ repo: "https://code.google.com/p/go",
+ },
+ },
+ /*{
+ "code.google.com/r/go",
+ &repoRoot{
+ vcs: vcsHg,
+ repo: "https://code.google.com/r/go",
+ },
+ },*/
+ {
+ "github.com/golang/groupcache",
+ &repoRoot{
+ vcs: vcsGit,
+ repo: "https://github.com/golang/groupcache",
+ },
+ },
+ // IBM DevOps Services tests
+ {
+ "hub.jazz.net/git/user1/pkgname",
+ &repoRoot{
+ vcs: vcsGit,
+ repo: "https://hub.jazz.net/git/user1/pkgname",
+ },
+ },
+ {
+ "hub.jazz.net/git/user1/pkgname/submodule/submodule/submodule",
+ &repoRoot{
+ vcs: vcsGit,
+ repo: "https://hub.jazz.net/git/user1/pkgname",
+ },
+ },
+ {
+ "hub.jazz.net",
+ nil,
+ },
+ {
+ "hub2.jazz.net",
+ nil,
+ },
+ {
+ "hub.jazz.net/someotherprefix",
+ nil,
+ },
+ {
+ "hub.jazz.net/someotherprefix/user1/pkgname",
+ nil,
+ },
+ // Spaces are not valid in user names or package names
+ {
+ "hub.jazz.net/git/User 1/pkgname",
+ nil,
+ },
+ {
+ "hub.jazz.net/git/user1/pkg name",
+ nil,
+ },
+ // Dots are not valid in user names
+ {
+ "hub.jazz.net/git/user.1/pkgname",
+ nil,
+ },
+ {
+ "hub.jazz.net/git/user/pkg.name",
+ &repoRoot{
+ vcs: vcsGit,
+ repo: "https://hub.jazz.net/git/user/pkg.name",
+ },
+ },
+ // User names cannot have uppercase letters
+ {
+ "hub.jazz.net/git/USER/pkgname",
+ nil,
+ },
+ }
+
+ for _, test := range tests {
+ got, err := repoRootForImportPath(test.path)
+ want := test.want
+
+ if want == nil {
+ if err == nil {
+ t.Errorf("RepoRootForImport(%q): Error expected but not received", test.path)
+ }
+ continue
+ }
+ if err != nil {
+ t.Errorf("RepoRootForImport(%q): %v", test.path, err)
+ continue
+ }
+ if got.vcs.name != want.vcs.name || got.repo != want.repo {
+ t.Errorf("RepoRootForImport(%q) = VCS(%s) Repo(%s), want VCS(%s) Repo(%s)", test.path, got.vcs, got.repo, want.vcs, want.repo)
+ }
+ }
+}
diff --git a/src/cmd/go/vet.go b/src/cmd/go/vet.go
index ffb431837..02ff54b2a 100644
--- a/src/cmd/go/vet.go
+++ b/src/cmd/go/vet.go
@@ -4,6 +4,8 @@
package main
+import "path/filepath"
+
func init() {
addBuildFlagsNX(cmdVet)
}
@@ -15,7 +17,7 @@ var cmdVet = &Command{
Long: `
Vet runs the Go vet command on the packages named by the import paths.
-For more about vet, see 'godoc code.google.com/p/go.tools/cmd/vet'.
+For more about vet, see 'godoc golang.org/x/tools/cmd/vet'.
For more about specifying packages, see 'go help packages'.
To run the vet tool with specific options, run 'go tool vet'.
@@ -28,10 +30,21 @@ See also: go fmt, go fix.
}
func runVet(cmd *Command, args []string) {
- for _, pkg := range packages(args) {
- // Use pkg.gofiles instead of pkg.Dir so that
- // the command only applies to this package,
- // not to packages in subdirectories.
- run(tool("vet"), relPaths(stringList(pkg.gofiles, pkg.sfiles)))
+ for _, p := range packages(args) {
+ // Vet expects to be given a set of files all from the same package.
+ // Run once for package p and once for package p_test.
+ if len(p.GoFiles)+len(p.CgoFiles)+len(p.TestGoFiles) > 0 {
+ runVetFiles(p, stringList(p.GoFiles, p.CgoFiles, p.TestGoFiles, p.SFiles))
+ }
+ if len(p.XTestGoFiles) > 0 {
+ runVetFiles(p, stringList(p.XTestGoFiles))
+ }
+ }
+}
+
+func runVetFiles(p *Package, files []string) {
+ for i := range files {
+ files[i] = filepath.Join(p.Dir, files[i])
}
+ run(tool("vet"), relPaths(files))
}
diff --git a/src/cmd/gofmt/doc.go b/src/cmd/gofmt/doc.go
index 8f73ef5b9..3fc043954 100644
--- a/src/cmd/gofmt/doc.go
+++ b/src/cmd/gofmt/doc.go
@@ -67,7 +67,7 @@ To remove the parentheses:
To convert the package tree from explicit slice upper bounds to implicit ones:
- gofmt -r 'α[β:len(α)] -> α[β:]' -w $GOROOT/src/pkg
+ gofmt -r 'α[β:len(α)] -> α[β:]' -w $GOROOT/src
The simplify command
diff --git a/src/cmd/gofmt/gofmt.go b/src/cmd/gofmt/gofmt.go
index 576cae522..81da21ff1 100644
--- a/src/cmd/gofmt/gofmt.go
+++ b/src/cmd/gofmt/gofmt.go
@@ -87,13 +87,13 @@ func processFile(filename string, in io.Reader, out io.Writer, stdin bool) error
return err
}
- file, adjust, err := parse(fileSet, filename, src, stdin)
+ file, sourceAdj, indentAdj, err := parse(fileSet, filename, src, stdin)
if err != nil {
return err
}
if rewrite != nil {
- if adjust == nil {
+ if sourceAdj == nil {
file = rewrite(file)
} else {
fmt.Fprintf(os.Stderr, "warning: rewrite ignored for incomplete programs\n")
@@ -106,15 +106,10 @@ func processFile(filename string, in io.Reader, out io.Writer, stdin bool) error
simplify(file)
}
- var buf bytes.Buffer
- err = (&printer.Config{Mode: printerMode, Tabwidth: tabWidth}).Fprint(&buf, fileSet, file)
+ res, err := format(fileSet, file, sourceAdj, indentAdj, src, printer.Config{Mode: printerMode, Tabwidth: tabWidth})
if err != nil {
return err
}
- res := buf.Bytes()
- if adjust != nil {
- res = adjust(src, res)
- }
if !bytes.Equal(src, res) {
// formatting has changed
@@ -122,7 +117,7 @@ func processFile(filename string, in io.Reader, out io.Writer, stdin bool) error
fmt.Fprintln(out, filename)
}
if *write {
- err = ioutil.WriteFile(filename, res, 0)
+ err = ioutil.WriteFile(filename, res, 0644)
if err != nil {
return err
}
@@ -186,6 +181,11 @@ func gofmtMain() {
initRewrite()
if flag.NArg() == 0 {
+ if *write {
+ fmt.Fprintln(os.Stderr, "error: cannot use -w with standard input")
+ exitCode = 2
+ return
+ }
if err := processFile("<standard input>", os.Stdin, os.Stdout, true); err != nil {
report(err)
}
@@ -235,19 +235,29 @@ func diff(b1, b2 []byte) (data []byte, err error) {
}
-// parse parses src, which was read from filename,
-// as a Go source file or statement list.
-func parse(fset *token.FileSet, filename string, src []byte, stdin bool) (*ast.File, func(orig, src []byte) []byte, error) {
+// ----------------------------------------------------------------------------
+// Support functions
+//
+// The functions parse, format, and isSpace below are identical to the
+// respective functions in src/go/format/format.go - keep them in sync!
+//
+// TODO(gri) Factor out this functionality, eventually.
+
+// parse parses src, which was read from the named file,
+// as a Go source file, declaration, or statement list.
+func parse(fset *token.FileSet, filename string, src []byte, fragmentOk bool) (
+ file *ast.File,
+ sourceAdj func(src []byte, indent int) []byte,
+ indentAdj int,
+ err error,
+) {
// Try as whole source file.
- file, err := parser.ParseFile(fset, filename, src, parserMode)
- if err == nil {
- return file, nil, nil
- }
- // If the error is that the source file didn't begin with a
- // package line and this is standard input, fall through to
+ file, err = parser.ParseFile(fset, filename, src, parserMode)
+ // If there's no error, return. If the error is that the source file didn't begin with a
+ // package line and source fragments are ok, fall through to
// try as a source fragment. Stop and return on any other error.
- if !stdin || !strings.Contains(err.Error(), "expected 'package'") {
- return nil, nil, err
+ if err == nil || !fragmentOk || !strings.Contains(err.Error(), "expected 'package'") {
+ return
}
// If this is a declaration list, make it a source file
@@ -257,19 +267,19 @@ func parse(fset *token.FileSet, filename string, src []byte, stdin bool) (*ast.F
psrc := append([]byte("package p;"), src...)
file, err = parser.ParseFile(fset, filename, psrc, parserMode)
if err == nil {
- adjust := func(orig, src []byte) []byte {
+ sourceAdj = func(src []byte, indent int) []byte {
// Remove the package clause.
// Gofmt has turned the ; into a \n.
- src = src[len("package p\n"):]
- return matchSpace(orig, src)
+ src = src[indent+len("package p\n"):]
+ return bytes.TrimSpace(src)
}
- return file, adjust, nil
+ return
}
// If the error is that the source file didn't begin with a
// declaration, fall through to try as a statement list.
// Stop and return on any other error.
if !strings.Contains(err.Error(), "expected declaration") {
- return nil, nil, err
+ return
}
// If this is a statement list, make it a source file
@@ -277,68 +287,101 @@ func parse(fset *token.FileSet, filename string, src []byte, stdin bool) (*ast.F
// into a function body. This handles expressions too.
// Insert using a ;, not a newline, so that the line numbers
// in fsrc match the ones in src.
- fsrc := append(append([]byte("package p; func _() {"), src...), '}')
+ fsrc := append(append([]byte("package p; func _() {"), src...), '\n', '}')
file, err = parser.ParseFile(fset, filename, fsrc, parserMode)
if err == nil {
- adjust := func(orig, src []byte) []byte {
+ sourceAdj = func(src []byte, indent int) []byte {
+ // Cap adjusted indent to zero.
+ if indent < 0 {
+ indent = 0
+ }
// Remove the wrapping.
// Gofmt has turned the ; into a \n\n.
- src = src[len("package p\n\nfunc _() {"):]
- src = src[:len(src)-len("}\n")]
- // Gofmt has also indented the function body one level.
- // Remove that indent.
- src = bytes.Replace(src, []byte("\n\t"), []byte("\n"), -1)
- return matchSpace(orig, src)
+ // There will be two non-blank lines with indent, hence 2*indent.
+ src = src[2*indent+len("package p\n\nfunc _() {"):]
+ src = src[:len(src)-(indent+len("\n}\n"))]
+ return bytes.TrimSpace(src)
}
- return file, adjust, nil
+ // Gofmt has also indented the function body one level.
+ // Adjust that with indentAdj.
+ indentAdj = -1
}
- // Failed, and out of options.
- return nil, nil, err
+ // Succeeded, or out of options.
+ return
}
-func cutSpace(b []byte) (before, middle, after []byte) {
- i := 0
- for i < len(b) && (b[i] == ' ' || b[i] == '\t' || b[i] == '\n') {
- i++
- }
- j := len(b)
- for j > 0 && (b[j-1] == ' ' || b[j-1] == '\t' || b[j-1] == '\n') {
- j--
- }
- if i <= j {
- return b[:i], b[i:j], b[j:]
+// format formats the given package file originally obtained from src
+// and adjusts the result based on the original source via sourceAdj
+// and indentAdj.
+func format(
+ fset *token.FileSet,
+ file *ast.File,
+ sourceAdj func(src []byte, indent int) []byte,
+ indentAdj int,
+ src []byte,
+ cfg printer.Config,
+) ([]byte, error) {
+ if sourceAdj == nil {
+ // Complete source file.
+ var buf bytes.Buffer
+ err := cfg.Fprint(&buf, fset, file)
+ if err != nil {
+ return nil, err
+ }
+ return buf.Bytes(), nil
}
- return nil, nil, b[j:]
-}
-// matchSpace reformats src to use the same space context as orig.
-// 1) If orig begins with blank lines, matchSpace inserts them at the beginning of src.
-// 2) matchSpace copies the indentation of the first non-blank line in orig
-// to every non-blank line in src.
-// 3) matchSpace copies the trailing space from orig and uses it in place
-// of src's trailing space.
-func matchSpace(orig []byte, src []byte) []byte {
- before, _, after := cutSpace(orig)
- i := bytes.LastIndex(before, []byte{'\n'})
- before, indent := before[:i+1], before[i+1:]
-
- _, src, _ = cutSpace(src)
-
- var b bytes.Buffer
- b.Write(before)
- for len(src) > 0 {
- line := src
- if i := bytes.IndexByte(line, '\n'); i >= 0 {
- line, src = line[:i+1], line[i+1:]
- } else {
- src = nil
+ // Partial source file.
+ // Determine and prepend leading space.
+ i, j := 0, 0
+ for j < len(src) && isSpace(src[j]) {
+ if src[j] == '\n' {
+ i = j + 1 // byte offset of last line in leading space
}
- if len(line) > 0 && line[0] != '\n' { // not blank
- b.Write(indent)
+ j++
+ }
+ var res []byte
+ res = append(res, src[:i]...)
+
+ // Determine and prepend indentation of first code line.
+ // Spaces are ignored unless there are no tabs,
+ // in which case spaces count as one tab.
+ indent := 0
+ hasSpace := false
+ for _, b := range src[i:j] {
+ switch b {
+ case ' ':
+ hasSpace = true
+ case '\t':
+ indent++
}
- b.Write(line)
}
- b.Write(after)
- return b.Bytes()
+ if indent == 0 && hasSpace {
+ indent = 1
+ }
+ for i := 0; i < indent; i++ {
+ res = append(res, '\t')
+ }
+
+ // Format the source.
+ // Write it without any leading and trailing space.
+ cfg.Indent = indent + indentAdj
+ var buf bytes.Buffer
+ err := cfg.Fprint(&buf, fset, file)
+ if err != nil {
+ return nil, err
+ }
+ res = append(res, sourceAdj(buf.Bytes(), cfg.Indent)...)
+
+ // Determine and append trailing space.
+ i = len(src)
+ for i > 0 && isSpace(src[i-1]) {
+ i--
+ }
+ return append(res, src[i:]...), nil
+}
+
+func isSpace(b byte) bool {
+ return b == ' ' || b == '\t' || b == '\n' || b == '\r'
}
diff --git a/src/cmd/gofmt/gofmt_test.go b/src/cmd/gofmt/gofmt_test.go
index b9335b8f3..d1edb7bcc 100644
--- a/src/cmd/gofmt/gofmt_test.go
+++ b/src/cmd/gofmt/gofmt_test.go
@@ -6,18 +6,60 @@ package main
import (
"bytes"
+ "flag"
"io/ioutil"
+ "os"
"path/filepath"
"strings"
"testing"
+ "text/scanner"
)
-func runTest(t *testing.T, in, out, flags string) {
+var update = flag.Bool("update", false, "update .golden files")
+
+// gofmtFlags looks for a comment of the form
+//
+// //gofmt flags
+//
+// within the first maxLines lines of the given file,
+// and returns the flags string, if any. Otherwise it
+// returns the empty string.
+func gofmtFlags(filename string, maxLines int) string {
+ f, err := os.Open(filename)
+ if err != nil {
+ return "" // ignore errors - they will be found later
+ }
+ defer f.Close()
+
+ // initialize scanner
+ var s scanner.Scanner
+ s.Init(f)
+ s.Error = func(*scanner.Scanner, string) {} // ignore errors
+ s.Mode = scanner.GoTokens &^ scanner.SkipComments // want comments
+
+ // look for //gofmt comment
+ for s.Line <= maxLines {
+ switch s.Scan() {
+ case scanner.Comment:
+ const prefix = "//gofmt "
+ if t := s.TokenText(); strings.HasPrefix(t, prefix) {
+ return strings.TrimSpace(t[len(prefix):])
+ }
+ case scanner.EOF:
+ return ""
+ }
+
+ }
+
+ return ""
+}
+
+func runTest(t *testing.T, in, out string) {
// process flags
*simplifyAST = false
*rewriteRule = ""
stdin := false
- for _, flag := range strings.Split(flags, " ") {
+ for _, flag := range strings.Split(gofmtFlags(in, 20), " ") {
elts := strings.SplitN(flag, "=", 2)
name := elts[0]
value := ""
@@ -56,6 +98,17 @@ func runTest(t *testing.T, in, out, flags string) {
}
if got := buf.Bytes(); !bytes.Equal(got, expected) {
+ if *update {
+ if in != out {
+ if err := ioutil.WriteFile(out, got, 0666); err != nil {
+ t.Error(err)
+ }
+ return
+ }
+ // in == out: don't accidentally destroy input
+ t.Errorf("WARNING: -update did not rewrite input file %s", in)
+ }
+
t.Errorf("(gofmt %s) != %s (see %s.gofmt)", in, out, in)
d, err := diff(expected, got)
if err == nil {
@@ -67,51 +120,37 @@ func runTest(t *testing.T, in, out, flags string) {
}
}
-var tests = []struct {
- in, flags string
-}{
- {"gofmt.go", ""},
- {"gofmt_test.go", ""},
- {"testdata/composites.input", "-s"},
- {"testdata/slices1.input", "-s"},
- {"testdata/slices2.input", "-s"},
- {"testdata/old.input", ""},
- {"testdata/rewrite1.input", "-r=Foo->Bar"},
- {"testdata/rewrite2.input", "-r=int->bool"},
- {"testdata/rewrite3.input", "-r=x->x"},
- {"testdata/rewrite4.input", "-r=(x)->x"},
- {"testdata/rewrite5.input", "-r=x+x->2*x"},
- {"testdata/rewrite6.input", "-r=fun(x)->Fun(x)"},
- {"testdata/rewrite7.input", "-r=fun(x...)->Fun(x)"},
- {"testdata/rewrite8.input", "-r=interface{}->int"},
- {"testdata/stdin*.input", "-stdin"},
- {"testdata/comments.input", ""},
- {"testdata/import.input", ""},
- {"testdata/crlf.input", ""}, // test case for issue 3961; see also TestCRLF
- {"testdata/typeswitch.input", ""}, // test case for issue 4470
-}
-
+// TestRewrite processes testdata/*.input files and compares them to the
+// corresponding testdata/*.golden files. The gofmt flags used to process
+// a file must be provided via a comment of the form
+//
+// //gofmt flags
+//
+// in the processed file within the first 20 lines, if any.
func TestRewrite(t *testing.T) {
- for _, test := range tests {
- match, err := filepath.Glob(test.in)
- if err != nil {
- t.Error(err)
- continue
+ // determine input files
+ match, err := filepath.Glob("testdata/*.input")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ // add larger examples
+ match = append(match, "gofmt.go", "gofmt_test.go")
+
+ for _, in := range match {
+ out := in // for files where input and output are identical
+ if strings.HasSuffix(in, ".input") {
+ out = in[:len(in)-len(".input")] + ".golden"
}
- for _, in := range match {
- out := in
- if strings.HasSuffix(in, ".input") {
- out = in[:len(in)-len(".input")] + ".golden"
- }
- runTest(t, in, out, test.flags)
- if in != out {
- // Check idempotence.
- runTest(t, out, out, test.flags)
- }
+ runTest(t, in, out)
+ if in != out {
+ // Check idempotence.
+ runTest(t, out, out)
}
}
}
+// Test case for issue 3961.
func TestCRLF(t *testing.T) {
const input = "testdata/crlf.input" // must contain CR/LF's
const golden = "testdata/crlf.golden" // must not contain any CR's
diff --git a/src/cmd/gofmt/long_test.go b/src/cmd/gofmt/long_test.go
index 108278b33..237b86021 100644
--- a/src/cmd/gofmt/long_test.go
+++ b/src/cmd/gofmt/long_test.go
@@ -32,7 +32,7 @@ var (
)
func gofmt(fset *token.FileSet, filename string, src *bytes.Buffer) error {
- f, _, err := parse(fset, filename, src.Bytes(), false)
+ f, _, _, err := parse(fset, filename, src.Bytes(), false)
if err != nil {
return err
}
@@ -60,7 +60,7 @@ func testFile(t *testing.T, b1, b2 *bytes.Buffer, filename string) {
// exclude files w/ syntax errors (typically test cases)
fset := token.NewFileSet()
- if _, _, err = parse(fset, filename, b1.Bytes(), false); err != nil {
+ if _, _, _, err = parse(fset, filename, b1.Bytes(), false); err != nil {
if *verbose {
fmt.Fprintf(os.Stderr, "ignoring %s\n", err)
}
diff --git a/src/cmd/gofmt/rewrite.go b/src/cmd/gofmt/rewrite.go
index fb6c6fc81..d267cfcc1 100644
--- a/src/cmd/gofmt/rewrite.go
+++ b/src/cmd/gofmt/rewrite.go
@@ -226,9 +226,6 @@ func match(m map[string]reflect.Value, pattern, val reflect.Value) bool {
return true
case reflect.Struct:
- if p.NumField() != v.NumField() {
- return false
- }
for i := 0; i < p.NumField(); i++ {
if !match(m, p.Field(i), v.Field(i)) {
return false
diff --git a/src/cmd/gofmt/simplify.go b/src/cmd/gofmt/simplify.go
index 45d000d67..69f7bf23c 100644
--- a/src/cmd/gofmt/simplify.go
+++ b/src/cmd/gofmt/simplify.go
@@ -68,9 +68,10 @@ func (s *simplifier) Visit(node ast.Node) ast.Visitor {
// a slice expression of the form: s[a:len(s)]
// can be simplified to: s[a:]
// if s is "simple enough" (for now we only accept identifiers)
- if s.hasDotImport {
- // if dot imports are present, we cannot be certain that an
- // unresolved "len" identifier refers to the predefined len()
+ if n.Max != nil || s.hasDotImport {
+ // - 3-index slices always require the 2nd and 3rd index
+ // - if dot imports are present, we cannot be certain that an
+ // unresolved "len" identifier refers to the predefined len()
break
}
if s, _ := n.X.(*ast.Ident); s != nil && s.Obj != nil {
@@ -96,16 +97,26 @@ func (s *simplifier) Visit(node ast.Node) ast.Visitor {
// x, y := b[:n], b[n:]
case *ast.RangeStmt:
- // a range of the form: for x, _ = range v {...}
+ // - a range of the form: for x, _ = range v {...}
// can be simplified to: for x = range v {...}
- if ident, _ := n.Value.(*ast.Ident); ident != nil && ident.Name == "_" {
+ // - a range of the form: for _ = range v {...}
+ // can be simplified to: for range v {...}
+ if isBlank(n.Value) {
n.Value = nil
}
+ if isBlank(n.Key) && n.Value == nil {
+ n.Key = nil
+ }
}
return s
}
+func isBlank(x ast.Expr) bool {
+ ident, ok := x.(*ast.Ident)
+ return ok && ident.Name == "_"
+}
+
func simplify(f *ast.File) {
var s simplifier
@@ -117,5 +128,34 @@ func simplify(f *ast.File) {
}
}
+ // remove empty declarations such as "const ()", etc
+ removeEmptyDeclGroups(f)
+
ast.Walk(&s, f)
}
+
+func removeEmptyDeclGroups(f *ast.File) {
+ i := 0
+ for _, d := range f.Decls {
+ if g, ok := d.(*ast.GenDecl); !ok || !isEmpty(f, g) {
+ f.Decls[i] = d
+ i++
+ }
+ }
+ f.Decls = f.Decls[:i]
+}
+
+func isEmpty(f *ast.File, g *ast.GenDecl) bool {
+ if g.Doc != nil || g.Specs != nil {
+ return false
+ }
+
+ for _, c := range f.Comments {
+ // if there is a comment in the declaration, it is not considered empty
+ if g.Pos() <= c.Pos() && c.End() <= g.End() {
+ return false
+ }
+ }
+
+ return true
+}
diff --git a/src/cmd/gofmt/testdata/composites.golden b/src/cmd/gofmt/testdata/composites.golden
index b2825e732..fc9c98e62 100644
--- a/src/cmd/gofmt/testdata/composites.golden
+++ b/src/cmd/gofmt/testdata/composites.golden
@@ -1,3 +1,5 @@
+//gofmt -s
+
package P
type T struct {
diff --git a/src/cmd/gofmt/testdata/composites.input b/src/cmd/gofmt/testdata/composites.input
index 7210dafc9..fc7598af9 100644
--- a/src/cmd/gofmt/testdata/composites.input
+++ b/src/cmd/gofmt/testdata/composites.input
@@ -1,3 +1,5 @@
+//gofmt -s
+
package P
type T struct {
diff --git a/src/cmd/gofmt/testdata/crlf.golden b/src/cmd/gofmt/testdata/crlf.golden
index 57679f770..193dbacc7 100644
--- a/src/cmd/gofmt/testdata/crlf.golden
+++ b/src/cmd/gofmt/testdata/crlf.golden
@@ -2,6 +2,7 @@
Source containing CR/LF line endings.
The gofmt'ed output must only have LF
line endings.
+ Test case for issue 3961.
*/
package main
diff --git a/src/cmd/gofmt/testdata/crlf.input b/src/cmd/gofmt/testdata/crlf.input
index 61a1aa0b4..ae7e14dbf 100644
--- a/src/cmd/gofmt/testdata/crlf.input
+++ b/src/cmd/gofmt/testdata/crlf.input
@@ -2,6 +2,7 @@
Source containing CR/LF line endings.
The gofmt'ed output must only have LF
line endings.
+ Test case for issue 3961.
*/
package main
diff --git a/src/cmd/gofmt/testdata/emptydecl.golden b/src/cmd/gofmt/testdata/emptydecl.golden
new file mode 100644
index 000000000..33d6435e0
--- /dev/null
+++ b/src/cmd/gofmt/testdata/emptydecl.golden
@@ -0,0 +1,14 @@
+//gofmt -s
+
+// Test case for issue 7631.
+
+package main
+
+// Keep this declaration
+var ()
+
+const (
+// Keep this declaration
+)
+
+func main() {}
diff --git a/src/cmd/gofmt/testdata/emptydecl.input b/src/cmd/gofmt/testdata/emptydecl.input
new file mode 100644
index 000000000..4948a61f0
--- /dev/null
+++ b/src/cmd/gofmt/testdata/emptydecl.input
@@ -0,0 +1,16 @@
+//gofmt -s
+
+// Test case for issue 7631.
+
+package main
+
+// Keep this declaration
+var ()
+
+const (
+// Keep this declaration
+)
+
+type ()
+
+func main() {} \ No newline at end of file
diff --git a/src/cmd/gofmt/testdata/ranges.golden b/src/cmd/gofmt/testdata/ranges.golden
new file mode 100644
index 000000000..506b3a035
--- /dev/null
+++ b/src/cmd/gofmt/testdata/ranges.golden
@@ -0,0 +1,30 @@
+//gofmt -s
+
+// Test cases for range simplification.
+package p
+
+func _() {
+ for a, b = range x {
+ }
+ for a = range x {
+ }
+ for _, b = range x {
+ }
+ for range x {
+ }
+
+ for a = range x {
+ }
+ for range x {
+ }
+
+ for a, b := range x {
+ }
+ for a := range x {
+ }
+ for _, b := range x {
+ }
+
+ for a := range x {
+ }
+}
diff --git a/src/cmd/gofmt/testdata/ranges.input b/src/cmd/gofmt/testdata/ranges.input
new file mode 100644
index 000000000..df5f8333c
--- /dev/null
+++ b/src/cmd/gofmt/testdata/ranges.input
@@ -0,0 +1,20 @@
+//gofmt -s
+
+// Test cases for range simplification.
+package p
+
+func _() {
+ for a, b = range x {}
+ for a, _ = range x {}
+ for _, b = range x {}
+ for _, _ = range x {}
+
+ for a = range x {}
+ for _ = range x {}
+
+ for a, b := range x {}
+ for a, _ := range x {}
+ for _, b := range x {}
+
+ for a := range x {}
+}
diff --git a/src/cmd/gofmt/testdata/rewrite1.golden b/src/cmd/gofmt/testdata/rewrite1.golden
index d9beb3705..3ee5373a7 100644
--- a/src/cmd/gofmt/testdata/rewrite1.golden
+++ b/src/cmd/gofmt/testdata/rewrite1.golden
@@ -1,3 +1,5 @@
+//gofmt -r=Foo->Bar
+
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite1.input b/src/cmd/gofmt/testdata/rewrite1.input
index bdb894320..a84c8f781 100644
--- a/src/cmd/gofmt/testdata/rewrite1.input
+++ b/src/cmd/gofmt/testdata/rewrite1.input
@@ -1,3 +1,5 @@
+//gofmt -r=Foo->Bar
+
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite2.golden b/src/cmd/gofmt/testdata/rewrite2.golden
index 64c67ffa6..f980e0353 100644
--- a/src/cmd/gofmt/testdata/rewrite2.golden
+++ b/src/cmd/gofmt/testdata/rewrite2.golden
@@ -1,3 +1,5 @@
+//gofmt -r=int->bool
+
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite2.input b/src/cmd/gofmt/testdata/rewrite2.input
index 21171447a..489be4e07 100644
--- a/src/cmd/gofmt/testdata/rewrite2.input
+++ b/src/cmd/gofmt/testdata/rewrite2.input
@@ -1,3 +1,5 @@
+//gofmt -r=int->bool
+
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite3.golden b/src/cmd/gofmt/testdata/rewrite3.golden
index 0d16d1601..261a220c6 100644
--- a/src/cmd/gofmt/testdata/rewrite3.golden
+++ b/src/cmd/gofmt/testdata/rewrite3.golden
@@ -1,3 +1,5 @@
+//gofmt -r=x->x
+
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite3.input b/src/cmd/gofmt/testdata/rewrite3.input
index 0d16d1601..261a220c6 100644
--- a/src/cmd/gofmt/testdata/rewrite3.input
+++ b/src/cmd/gofmt/testdata/rewrite3.input
@@ -1,3 +1,5 @@
+//gofmt -r=x->x
+
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite4.golden b/src/cmd/gofmt/testdata/rewrite4.golden
index 8dfc81a07..b05547b4b 100644
--- a/src/cmd/gofmt/testdata/rewrite4.golden
+++ b/src/cmd/gofmt/testdata/rewrite4.golden
@@ -1,3 +1,5 @@
+//gofmt -r=(x)->x
+
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite4.input b/src/cmd/gofmt/testdata/rewrite4.input
index 164cc0451..081709920 100644
--- a/src/cmd/gofmt/testdata/rewrite4.input
+++ b/src/cmd/gofmt/testdata/rewrite4.input
@@ -1,3 +1,5 @@
+//gofmt -r=(x)->x
+
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite5.golden b/src/cmd/gofmt/testdata/rewrite5.golden
index 5a448a63d..9beb34aee 100644
--- a/src/cmd/gofmt/testdata/rewrite5.golden
+++ b/src/cmd/gofmt/testdata/rewrite5.golden
@@ -1,3 +1,5 @@
+//gofmt -r=x+x->2*x
+
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite5.input b/src/cmd/gofmt/testdata/rewrite5.input
index 0d759e69b..d7a6122d0 100644
--- a/src/cmd/gofmt/testdata/rewrite5.input
+++ b/src/cmd/gofmt/testdata/rewrite5.input
@@ -1,3 +1,5 @@
+//gofmt -r=x+x->2*x
+
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite6.golden b/src/cmd/gofmt/testdata/rewrite6.golden
index e565dbdd9..48ec9aa0d 100644
--- a/src/cmd/gofmt/testdata/rewrite6.golden
+++ b/src/cmd/gofmt/testdata/rewrite6.golden
@@ -1,3 +1,5 @@
+//gofmt -r=fun(x)->Fun(x)
+
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite6.input b/src/cmd/gofmt/testdata/rewrite6.input
index 8c088b3e8..b085a84fe 100644
--- a/src/cmd/gofmt/testdata/rewrite6.input
+++ b/src/cmd/gofmt/testdata/rewrite6.input
@@ -1,3 +1,5 @@
+//gofmt -r=fun(x)->Fun(x)
+
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite7.golden b/src/cmd/gofmt/testdata/rewrite7.golden
index 29babad9f..8386a0b2a 100644
--- a/src/cmd/gofmt/testdata/rewrite7.golden
+++ b/src/cmd/gofmt/testdata/rewrite7.golden
@@ -1,3 +1,5 @@
+//gofmt -r=fun(x...)->Fun(x)
+
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite7.input b/src/cmd/gofmt/testdata/rewrite7.input
index 073e2a3e6..c1984708e 100644
--- a/src/cmd/gofmt/testdata/rewrite7.input
+++ b/src/cmd/gofmt/testdata/rewrite7.input
@@ -1,3 +1,5 @@
+//gofmt -r=fun(x...)->Fun(x)
+
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite8.golden b/src/cmd/gofmt/testdata/rewrite8.golden
index cfc452b03..62f0419df 100644
--- a/src/cmd/gofmt/testdata/rewrite8.golden
+++ b/src/cmd/gofmt/testdata/rewrite8.golden
@@ -1,3 +1,5 @@
+//gofmt -r=interface{}->int
+
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/rewrite8.input b/src/cmd/gofmt/testdata/rewrite8.input
index 235efa91c..7964c5c75 100644
--- a/src/cmd/gofmt/testdata/rewrite8.input
+++ b/src/cmd/gofmt/testdata/rewrite8.input
@@ -1,3 +1,5 @@
+//gofmt -r=interface{}->int
+
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/src/cmd/gofmt/testdata/slices1.golden b/src/cmd/gofmt/testdata/slices1.golden
index 61e074f68..04bc16f21 100644
--- a/src/cmd/gofmt/testdata/slices1.golden
+++ b/src/cmd/gofmt/testdata/slices1.golden
@@ -1,3 +1,5 @@
+//gofmt -s
+
// Test cases for slice expression simplification.
package p
@@ -15,6 +17,7 @@ var (
_ = a[3:(len(a))]
_ = a[len(a) : len(a)-1]
_ = a[0:len(b)]
+ _ = a[2:len(a):len(a)]
_ = a[:]
_ = a[:10]
@@ -22,6 +25,7 @@ var (
_ = a[:(len(a))]
_ = a[:len(a)-1]
_ = a[:len(b)]
+ _ = a[:len(a):len(a)]
_ = s[0:]
_ = s[1:10]
@@ -29,6 +33,7 @@ var (
_ = s[3:(len(s))]
_ = s[len(a) : len(s)-1]
_ = s[0:len(b)]
+ _ = s[2:len(s):len(s)]
_ = s[:]
_ = s[:10]
@@ -36,6 +41,7 @@ var (
_ = s[:(len(s))]
_ = s[:len(s)-1]
_ = s[:len(b)]
+ _ = s[:len(s):len(s)]
_ = t.s[0:]
_ = t.s[1:10]
@@ -43,6 +49,7 @@ var (
_ = t.s[3:(len(t.s))]
_ = t.s[len(a) : len(t.s)-1]
_ = t.s[0:len(b)]
+ _ = t.s[2:len(t.s):len(t.s)]
_ = t.s[:]
_ = t.s[:10]
@@ -50,6 +57,7 @@ var (
_ = t.s[:(len(t.s))]
_ = t.s[:len(t.s)-1]
_ = t.s[:len(b)]
+ _ = t.s[:len(t.s):len(t.s)]
)
func _() {
diff --git a/src/cmd/gofmt/testdata/slices1.input b/src/cmd/gofmt/testdata/slices1.input
index 4d2cbfff4..1f25c43cc 100644
--- a/src/cmd/gofmt/testdata/slices1.input
+++ b/src/cmd/gofmt/testdata/slices1.input
@@ -1,3 +1,5 @@
+//gofmt -s
+
// Test cases for slice expression simplification.
package p
@@ -15,6 +17,7 @@ var (
_ = a[3:(len(a))]
_ = a[len(a) : len(a)-1]
_ = a[0:len(b)]
+ _ = a[2:len(a):len(a)]
_ = a[:]
_ = a[:10]
@@ -22,6 +25,7 @@ var (
_ = a[:(len(a))]
_ = a[:len(a)-1]
_ = a[:len(b)]
+ _ = a[:len(a):len(a)]
_ = s[0:]
_ = s[1:10]
@@ -29,6 +33,7 @@ var (
_ = s[3:(len(s))]
_ = s[len(a) : len(s)-1]
_ = s[0:len(b)]
+ _ = s[2:len(s):len(s)]
_ = s[:]
_ = s[:10]
@@ -36,6 +41,7 @@ var (
_ = s[:(len(s))]
_ = s[:len(s)-1]
_ = s[:len(b)]
+ _ = s[:len(s):len(s)]
_ = t.s[0:]
_ = t.s[1:10]
@@ -43,6 +49,7 @@ var (
_ = t.s[3:(len(t.s))]
_ = t.s[len(a) : len(t.s)-1]
_ = t.s[0:len(b)]
+ _ = t.s[2:len(t.s):len(t.s)]
_ = t.s[:]
_ = t.s[:10]
@@ -50,6 +57,7 @@ var (
_ = t.s[:(len(t.s))]
_ = t.s[:len(t.s)-1]
_ = t.s[:len(b)]
+ _ = t.s[:len(t.s):len(t.s)]
)
func _() {
diff --git a/src/cmd/gofmt/testdata/slices2.golden b/src/cmd/gofmt/testdata/slices2.golden
index 433788e1e..ab657004e 100644
--- a/src/cmd/gofmt/testdata/slices2.golden
+++ b/src/cmd/gofmt/testdata/slices2.golden
@@ -1,3 +1,5 @@
+//gofmt -s
+
// Test cases for slice expression simplification.
// Because of a dot import, these slices must remain untouched.
package p
diff --git a/src/cmd/gofmt/testdata/slices2.input b/src/cmd/gofmt/testdata/slices2.input
index 433788e1e..ab657004e 100644
--- a/src/cmd/gofmt/testdata/slices2.input
+++ b/src/cmd/gofmt/testdata/slices2.input
@@ -1,3 +1,5 @@
+//gofmt -s
+
// Test cases for slice expression simplification.
// Because of a dot import, these slices must remain untouched.
package p
diff --git a/src/cmd/gofmt/testdata/stdin1.golden b/src/cmd/gofmt/testdata/stdin1.golden
index ff8b0b7ab..9e4dcd20f 100644
--- a/src/cmd/gofmt/testdata/stdin1.golden
+++ b/src/cmd/gofmt/testdata/stdin1.golden
@@ -1,3 +1,5 @@
+ //gofmt -stdin
+
if x {
y
}
diff --git a/src/cmd/gofmt/testdata/stdin1.golden.gofmt b/src/cmd/gofmt/testdata/stdin1.golden.gofmt
deleted file mode 100644
index 1f888877d..000000000
--- a/src/cmd/gofmt/testdata/stdin1.golden.gofmt
+++ /dev/null
@@ -1,3 +0,0 @@
- if x {
- y
-}
diff --git a/src/cmd/gofmt/testdata/stdin1.input b/src/cmd/gofmt/testdata/stdin1.input
index ff8b0b7ab..9e4dcd20f 100644
--- a/src/cmd/gofmt/testdata/stdin1.input
+++ b/src/cmd/gofmt/testdata/stdin1.input
@@ -1,3 +1,5 @@
+ //gofmt -stdin
+
if x {
y
}
diff --git a/src/cmd/gofmt/testdata/stdin1.input.gofmt b/src/cmd/gofmt/testdata/stdin1.input.gofmt
deleted file mode 100644
index 1f888877d..000000000
--- a/src/cmd/gofmt/testdata/stdin1.input.gofmt
+++ /dev/null
@@ -1,3 +0,0 @@
- if x {
- y
-}
diff --git a/src/cmd/gofmt/testdata/stdin2.golden b/src/cmd/gofmt/testdata/stdin2.golden
index 7eb1b54fe..57df35540 100644
--- a/src/cmd/gofmt/testdata/stdin2.golden
+++ b/src/cmd/gofmt/testdata/stdin2.golden
@@ -1,4 +1,4 @@
-
+//gofmt -stdin
var x int
diff --git a/src/cmd/gofmt/testdata/stdin2.golden.gofmt b/src/cmd/gofmt/testdata/stdin2.golden.gofmt
deleted file mode 100644
index 85e800300..000000000
--- a/src/cmd/gofmt/testdata/stdin2.golden.gofmt
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-var x int
-
-func f() {
- y := z
-}
-
-
diff --git a/src/cmd/gofmt/testdata/stdin2.input b/src/cmd/gofmt/testdata/stdin2.input
index 99defd2d1..69d6bdd68 100644
--- a/src/cmd/gofmt/testdata/stdin2.input
+++ b/src/cmd/gofmt/testdata/stdin2.input
@@ -1,4 +1,4 @@
-
+//gofmt -stdin
var x int
diff --git a/src/cmd/gofmt/testdata/stdin2.input.gofmt b/src/cmd/gofmt/testdata/stdin2.input.gofmt
deleted file mode 100644
index 7eb1b54fe..000000000
--- a/src/cmd/gofmt/testdata/stdin2.input.gofmt
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-var x int
-
-func f() {
- y := z
- /* this is a comment */
- // this is a comment too
-}
-
-
diff --git a/src/cmd/gofmt/testdata/stdin3.golden b/src/cmd/gofmt/testdata/stdin3.golden
index 1bf2f5a48..d6da0e417 100644
--- a/src/cmd/gofmt/testdata/stdin3.golden
+++ b/src/cmd/gofmt/testdata/stdin3.golden
@@ -1,3 +1,4 @@
+ //gofmt -stdin
/* note: no newline at end of file */
for i := 0; i < 10; i++ {
diff --git a/src/cmd/gofmt/testdata/stdin3.golden.gofmt b/src/cmd/gofmt/testdata/stdin3.golden.gofmt
deleted file mode 100644
index b4d1d4663..000000000
--- a/src/cmd/gofmt/testdata/stdin3.golden.gofmt
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- /* note: no newline at end of file */
- for i := 0; i < 10; i++ {
- s += i
- }
- \ No newline at end of file
diff --git a/src/cmd/gofmt/testdata/stdin3.input b/src/cmd/gofmt/testdata/stdin3.input
index d963bd0d2..ab46c1063 100644
--- a/src/cmd/gofmt/testdata/stdin3.input
+++ b/src/cmd/gofmt/testdata/stdin3.input
@@ -1,3 +1,4 @@
+ //gofmt -stdin
/* note: no newline at end of file */
for i := 0; i < 10; i++ { s += i }
diff --git a/src/cmd/gofmt/testdata/stdin3.input.gofmt b/src/cmd/gofmt/testdata/stdin3.input.gofmt
deleted file mode 100644
index b4d1d4663..000000000
--- a/src/cmd/gofmt/testdata/stdin3.input.gofmt
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- /* note: no newline at end of file */
- for i := 0; i < 10; i++ {
- s += i
- }
- \ No newline at end of file
diff --git a/src/cmd/gofmt/testdata/stdin4.golden b/src/cmd/gofmt/testdata/stdin4.golden
index 5f7343551..0c7acace5 100644
--- a/src/cmd/gofmt/testdata/stdin4.golden
+++ b/src/cmd/gofmt/testdata/stdin4.golden
@@ -1,3 +1,5 @@
+ //gofmt -stdin
+
// comment
i := 0
diff --git a/src/cmd/gofmt/testdata/stdin4.golden.gofmt b/src/cmd/gofmt/testdata/stdin4.golden.gofmt
deleted file mode 100644
index 5f7343551..000000000
--- a/src/cmd/gofmt/testdata/stdin4.golden.gofmt
+++ /dev/null
@@ -1,3 +0,0 @@
- // comment
-
- i := 0
diff --git a/src/cmd/gofmt/testdata/stdin4.input b/src/cmd/gofmt/testdata/stdin4.input
index f02a54fb1..1fc73f31e 100644
--- a/src/cmd/gofmt/testdata/stdin4.input
+++ b/src/cmd/gofmt/testdata/stdin4.input
@@ -1,3 +1,5 @@
+ //gofmt -stdin
+
// comment
i := 0
diff --git a/src/cmd/gofmt/testdata/stdin4.input.gofmt b/src/cmd/gofmt/testdata/stdin4.input.gofmt
deleted file mode 100644
index 5f7343551..000000000
--- a/src/cmd/gofmt/testdata/stdin4.input.gofmt
+++ /dev/null
@@ -1,3 +0,0 @@
- // comment
-
- i := 0
diff --git a/src/cmd/gofmt/testdata/stdin5.golden b/src/cmd/gofmt/testdata/stdin5.golden
new file mode 100644
index 000000000..31ce6b248
--- /dev/null
+++ b/src/cmd/gofmt/testdata/stdin5.golden
@@ -0,0 +1,3 @@
+//gofmt -stdin
+
+i := 5 // Line comment without newline. \ No newline at end of file
diff --git a/src/cmd/gofmt/testdata/stdin5.input b/src/cmd/gofmt/testdata/stdin5.input
new file mode 100644
index 000000000..0a7c97d18
--- /dev/null
+++ b/src/cmd/gofmt/testdata/stdin5.input
@@ -0,0 +1,3 @@
+//gofmt -stdin
+
+i :=5// Line comment without newline. \ No newline at end of file
diff --git a/src/cmd/gofmt/testdata/stdin6.golden b/src/cmd/gofmt/testdata/stdin6.golden
new file mode 100644
index 000000000..ffcea8011
--- /dev/null
+++ b/src/cmd/gofmt/testdata/stdin6.golden
@@ -0,0 +1,19 @@
+ //gofmt -stdin
+
+ if err != nil {
+ source := strings.NewReader(`line 1.
+line 2.
+`)
+ return source
+ }
+
+ f := func(hat, tail string) {
+
+ fmt.Println(hat+`
+foo
+
+
+`+tail,
+ "more",
+ "and more")
+ }
diff --git a/src/cmd/gofmt/testdata/stdin6.input b/src/cmd/gofmt/testdata/stdin6.input
new file mode 100644
index 000000000..78330020c
--- /dev/null
+++ b/src/cmd/gofmt/testdata/stdin6.input
@@ -0,0 +1,21 @@
+ //gofmt -stdin
+
+ if err != nil {
+ source := strings.NewReader(`line 1.
+line 2.
+`)
+ return source
+ }
+
+ f:=func( hat, tail string){
+
+
+
+ fmt. Println ( hat+ `
+foo
+
+
+`+ tail ,
+ "more" ,
+ "and more" )
+ }
diff --git a/src/cmd/gofmt/testdata/stdin7.golden b/src/cmd/gofmt/testdata/stdin7.golden
new file mode 100644
index 000000000..bbac7133c
--- /dev/null
+++ b/src/cmd/gofmt/testdata/stdin7.golden
@@ -0,0 +1,19 @@
+ //gofmt -stdin
+
+ if err != nil {
+ source := strings.NewReader(`line 1.
+line 2.
+`)
+ return source
+ }
+
+ f := func(hat, tail string) {
+
+ fmt.Println(hat+`
+ foo
+
+
+ `+tail,
+ "more",
+ "and more")
+ }
diff --git a/src/cmd/gofmt/testdata/stdin7.input b/src/cmd/gofmt/testdata/stdin7.input
new file mode 100644
index 000000000..fd772a3c4
--- /dev/null
+++ b/src/cmd/gofmt/testdata/stdin7.input
@@ -0,0 +1,21 @@
+ //gofmt -stdin
+
+ if err != nil {
+ source := strings.NewReader(`line 1.
+line 2.
+`)
+ return source
+ }
+
+ f:=func( hat, tail string){
+
+
+
+ fmt. Println ( hat+ `
+ foo
+
+
+ `+ tail ,
+ "more" ,
+ "and more" )
+ }
diff --git a/src/cmd/nm/debug_goobj.go b/src/cmd/internal/goobj/read.go
index 9a067e2b9..79a83e59a 100644
--- a/src/cmd/nm/debug_goobj.go
+++ b/src/cmd/internal/goobj/read.go
@@ -1,8 +1,3 @@
-// DO NOT EDIT. Generated by code.google.com/p/rsc/cmd/bundle
-// bundle -p main -x goobj_ debug/goobj
-
-/* read.go */
-
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -12,8 +7,7 @@
// TODO(rsc): Decide where this package should live. (golang.org/issue/6932)
// TODO(rsc): Decide the appropriate integer types for various fields.
// TODO(rsc): Write tests. (File format still up in the air a little.)
-
-package main
+package goobj
import (
"bufio"
@@ -26,7 +20,7 @@ import (
)
// A SymKind describes the kind of memory represented by a symbol.
-type goobj_SymKind int
+type SymKind int
// This list is taken from include/link.h.
@@ -34,108 +28,108 @@ type goobj_SymKind int
// TODO(rsc): Give idiomatic Go names.
// TODO(rsc): Reduce the number of symbol types in the object files.
const (
- _ goobj_SymKind = iota
+ _ SymKind = iota
// readonly, executable
- goobj_STEXT
- goobj_SELFRXSECT
+ STEXT
+ SELFRXSECT
// readonly, non-executable
- goobj_STYPE
- goobj_SSTRING
- goobj_SGOSTRING
- goobj_SGOFUNC
- goobj_SRODATA
- goobj_SFUNCTAB
- goobj_STYPELINK
- goobj_SSYMTAB // TODO: move to unmapped section
- goobj_SPCLNTAB
- goobj_SELFROSECT
+ STYPE
+ SSTRING
+ SGOSTRING
+ SGOFUNC
+ SRODATA
+ SFUNCTAB
+ STYPELINK
+ SSYMTAB // TODO: move to unmapped section
+ SPCLNTAB
+ SELFROSECT
// writable, non-executable
- goobj_SMACHOPLT
- goobj_SELFSECT
- goobj_SMACHO // Mach-O __nl_symbol_ptr
- goobj_SMACHOGOT
- goobj_SNOPTRDATA
- goobj_SINITARR
- goobj_SDATA
- goobj_SWINDOWS
- goobj_SBSS
- goobj_SNOPTRBSS
- goobj_STLSBSS
+ SMACHOPLT
+ SELFSECT
+ SMACHO // Mach-O __nl_symbol_ptr
+ SMACHOGOT
+ SNOPTRDATA
+ SINITARR
+ SDATA
+ SWINDOWS
+ SBSS
+ SNOPTRBSS
+ STLSBSS
// not mapped
- goobj_SXREF
- goobj_SMACHOSYMSTR
- goobj_SMACHOSYMTAB
- goobj_SMACHOINDIRECTPLT
- goobj_SMACHOINDIRECTGOT
- goobj_SFILE
- goobj_SFILEPATH
- goobj_SCONST
- goobj_SDYNIMPORT
- goobj_SHOSTOBJ
+ SXREF
+ SMACHOSYMSTR
+ SMACHOSYMTAB
+ SMACHOINDIRECTPLT
+ SMACHOINDIRECTGOT
+ SFILE
+ SFILEPATH
+ SCONST
+ SDYNIMPORT
+ SHOSTOBJ
)
-var goobj_symKindStrings = []string{
- goobj_SBSS: "SBSS",
- goobj_SCONST: "SCONST",
- goobj_SDATA: "SDATA",
- goobj_SDYNIMPORT: "SDYNIMPORT",
- goobj_SELFROSECT: "SELFROSECT",
- goobj_SELFRXSECT: "SELFRXSECT",
- goobj_SELFSECT: "SELFSECT",
- goobj_SFILE: "SFILE",
- goobj_SFILEPATH: "SFILEPATH",
- goobj_SFUNCTAB: "SFUNCTAB",
- goobj_SGOFUNC: "SGOFUNC",
- goobj_SGOSTRING: "SGOSTRING",
- goobj_SHOSTOBJ: "SHOSTOBJ",
- goobj_SINITARR: "SINITARR",
- goobj_SMACHO: "SMACHO",
- goobj_SMACHOGOT: "SMACHOGOT",
- goobj_SMACHOINDIRECTGOT: "SMACHOINDIRECTGOT",
- goobj_SMACHOINDIRECTPLT: "SMACHOINDIRECTPLT",
- goobj_SMACHOPLT: "SMACHOPLT",
- goobj_SMACHOSYMSTR: "SMACHOSYMSTR",
- goobj_SMACHOSYMTAB: "SMACHOSYMTAB",
- goobj_SNOPTRBSS: "SNOPTRBSS",
- goobj_SNOPTRDATA: "SNOPTRDATA",
- goobj_SPCLNTAB: "SPCLNTAB",
- goobj_SRODATA: "SRODATA",
- goobj_SSTRING: "SSTRING",
- goobj_SSYMTAB: "SSYMTAB",
- goobj_STEXT: "STEXT",
- goobj_STLSBSS: "STLSBSS",
- goobj_STYPE: "STYPE",
- goobj_STYPELINK: "STYPELINK",
- goobj_SWINDOWS: "SWINDOWS",
- goobj_SXREF: "SXREF",
+var symKindStrings = []string{
+ SBSS: "SBSS",
+ SCONST: "SCONST",
+ SDATA: "SDATA",
+ SDYNIMPORT: "SDYNIMPORT",
+ SELFROSECT: "SELFROSECT",
+ SELFRXSECT: "SELFRXSECT",
+ SELFSECT: "SELFSECT",
+ SFILE: "SFILE",
+ SFILEPATH: "SFILEPATH",
+ SFUNCTAB: "SFUNCTAB",
+ SGOFUNC: "SGOFUNC",
+ SGOSTRING: "SGOSTRING",
+ SHOSTOBJ: "SHOSTOBJ",
+ SINITARR: "SINITARR",
+ SMACHO: "SMACHO",
+ SMACHOGOT: "SMACHOGOT",
+ SMACHOINDIRECTGOT: "SMACHOINDIRECTGOT",
+ SMACHOINDIRECTPLT: "SMACHOINDIRECTPLT",
+ SMACHOPLT: "SMACHOPLT",
+ SMACHOSYMSTR: "SMACHOSYMSTR",
+ SMACHOSYMTAB: "SMACHOSYMTAB",
+ SNOPTRBSS: "SNOPTRBSS",
+ SNOPTRDATA: "SNOPTRDATA",
+ SPCLNTAB: "SPCLNTAB",
+ SRODATA: "SRODATA",
+ SSTRING: "SSTRING",
+ SSYMTAB: "SSYMTAB",
+ STEXT: "STEXT",
+ STLSBSS: "STLSBSS",
+ STYPE: "STYPE",
+ STYPELINK: "STYPELINK",
+ SWINDOWS: "SWINDOWS",
+ SXREF: "SXREF",
}
-func (k goobj_SymKind) String() string {
- if k < 0 || int(k) >= len(goobj_symKindStrings) {
+func (k SymKind) String() string {
+ if k < 0 || int(k) >= len(symKindStrings) {
return fmt.Sprintf("SymKind(%d)", k)
}
- return goobj_symKindStrings[k]
+ return symKindStrings[k]
}
// A Sym is a named symbol in an object file.
-type goobj_Sym struct {
- goobj_SymID // symbol identifier (name and version)
- Kind goobj_SymKind // kind of symbol
- DupOK bool // are duplicate definitions okay?
- Size int // size of corresponding data
- Type goobj_SymID // symbol for Go type information
- Data goobj_Data // memory image of symbol
- Reloc []goobj_Reloc // relocations to apply to Data
- Func *goobj_Func // additional data for functions
+type Sym struct {
+ SymID // symbol identifier (name and version)
+ Kind SymKind // kind of symbol
+ DupOK bool // are duplicate definitions okay?
+ Size int // size of corresponding data
+ Type SymID // symbol for Go type information
+ Data Data // memory image of symbol
+ Reloc []Reloc // relocations to apply to Data
+ Func *Func // additional data for functions
}
// A SymID - the combination of Name and Version - uniquely identifies
// a symbol within a package.
-type goobj_SymID struct {
+type SymID struct {
// Name is the name of a symbol.
Name string
@@ -147,7 +141,7 @@ type goobj_SymID struct {
Version int
}
-func (s goobj_SymID) String() string {
+func (s SymID) String() string {
if s.Version == 0 {
return s.Name
}
@@ -157,20 +151,20 @@ func (s goobj_SymID) String() string {
// A Data is a reference to data stored in an object file.
// It records the offset and size of the data, so that a client can
// read the data only if necessary.
-type goobj_Data struct {
+type Data struct {
Offset int64
Size int64
}
// A Reloc describes a relocation applied to a memory image to refer
// to an address within a particular symbol.
-type goobj_Reloc struct {
+type Reloc struct {
// The bytes at [Offset, Offset+Size) within the memory image
// should be updated to refer to the address Add bytes after the start
// of the symbol Sym.
Offset int
Size int
- Sym goobj_SymID
+ Sym SymID
Add int
// The Type records the form of address expected in the bytes
@@ -181,7 +175,7 @@ type goobj_Reloc struct {
// A Var describes a variable in a function stack frame: a declared
// local variable, an input argument, or an output result.
-type goobj_Var struct {
+type Var struct {
// The combination of Name, Kind, and Offset uniquely
// identifies a variable in a function stack frame.
// Using fewer of these - in particular, using only Name - does not.
@@ -189,57 +183,57 @@ type goobj_Var struct {
Kind int // TODO(rsc): Define meaning.
Offset int // Frame offset. TODO(rsc): Define meaning.
- Type goobj_SymID // Go type for variable.
+ Type SymID // Go type for variable.
}
// Func contains additional per-symbol information specific to functions.
-type goobj_Func struct {
- Args int // size in bytes of argument frame: inputs and outputs
- Frame int // size in bytes of local variable frame
- Leaf bool // function omits save of link register (ARM)
- NoSplit bool // function omits stack split prologue
- Var []goobj_Var // detail about local variables
- PCSP goobj_Data // PC → SP offset map
- PCFile goobj_Data // PC → file number map (index into File)
- PCLine goobj_Data // PC → line number map
- PCData []goobj_Data // PC → runtime support data map
- FuncData []goobj_FuncData // non-PC-specific runtime support data
- File []string // paths indexed by PCFile
+type Func struct {
+ Args int // size in bytes of argument frame: inputs and outputs
+ Frame int // size in bytes of local variable frame
+ Leaf bool // function omits save of link register (ARM)
+ NoSplit bool // function omits stack split prologue
+ Var []Var // detail about local variables
+ PCSP Data // PC → SP offset map
+ PCFile Data // PC → file number map (index into File)
+ PCLine Data // PC → line number map
+ PCData []Data // PC → runtime support data map
+ FuncData []FuncData // non-PC-specific runtime support data
+ File []string // paths indexed by PCFile
}
// TODO: Add PCData []byte and PCDataIter (similar to liblink).
// A FuncData is a single function-specific data value.
-type goobj_FuncData struct {
- Sym goobj_SymID // symbol holding data
- Offset int64 // offset into symbol for funcdata pointer
+type FuncData struct {
+ Sym SymID // symbol holding data
+ Offset int64 // offset into symbol for funcdata pointer
}
// A Package is a parsed Go object file or archive defining a Go package.
-type goobj_Package struct {
- ImportPath string // import path denoting this package
- Imports []string // packages imported by this package
- Syms []*goobj_Sym // symbols defined by this package
- MaxVersion int // maximum Version in any SymID in Syms
+type Package struct {
+ ImportPath string // import path denoting this package
+ Imports []string // packages imported by this package
+ Syms []*Sym // symbols defined by this package
+ MaxVersion int // maximum Version in any SymID in Syms
}
var (
- goobj_archiveHeader = []byte("!<arch>\n")
- goobj_archiveMagic = []byte("`\n")
- goobj_goobjHeader = []byte("go objec") // truncated to size of archiveHeader
+ archiveHeader = []byte("!<arch>\n")
+ archiveMagic = []byte("`\n")
+ goobjHeader = []byte("go objec") // truncated to size of archiveHeader
- goobj_errCorruptArchive = errors.New("corrupt archive")
- goobj_errTruncatedArchive = errors.New("truncated archive")
- goobj_errNotArchive = errors.New("unrecognized archive format")
+ errCorruptArchive = errors.New("corrupt archive")
+ errTruncatedArchive = errors.New("truncated archive")
+ errNotArchive = errors.New("unrecognized archive format")
- goobj_errCorruptObject = errors.New("corrupt object file")
- goobj_errTruncatedObject = errors.New("truncated object file")
- goobj_errNotObject = errors.New("unrecognized object file format")
+ errCorruptObject = errors.New("corrupt object file")
+ errTruncatedObject = errors.New("truncated object file")
+ errNotObject = errors.New("unrecognized object file format")
)
// An objReader is an object file reader.
-type goobj_objReader struct {
- p *goobj_Package
+type objReader struct {
+ p *Package
b *bufio.Reader
f io.ReadSeeker
err error
@@ -257,7 +251,7 @@ type goobj_objReader struct {
//
// See ../../../cmd/ld/lib.c:/^pathtoprefix and
// ../../../cmd/gc/subr.c:/^pathtoprefix.
-func goobj_importPathToPrefix(s string) string {
+func importPathToPrefix(s string) string {
// find index of last slash, if any, or else -1.
// used for determining whether an index is after the last slash.
slash := strings.LastIndex(s, "/")
@@ -290,21 +284,21 @@ func goobj_importPathToPrefix(s string) string {
}
// init initializes r to read package p from f.
-func (r *goobj_objReader) init(f io.ReadSeeker, p *goobj_Package) {
+func (r *objReader) init(f io.ReadSeeker, p *Package) {
r.f = f
r.p = p
r.offset, _ = f.Seek(0, 1)
r.limit, _ = f.Seek(0, 2)
f.Seek(r.offset, 0)
r.b = bufio.NewReader(f)
- r.pkgprefix = goobj_importPathToPrefix(p.ImportPath) + "."
+ r.pkgprefix = importPathToPrefix(p.ImportPath) + "."
}
// error records that an error occurred.
// It returns only the first error, so that an error
// caused by an earlier error does not discard information
// about the earlier error.
-func (r *goobj_objReader) error(err error) error {
+func (r *objReader) error(err error) error {
if r.err == nil {
if err == io.EOF {
err = io.ErrUnexpectedEOF
@@ -320,7 +314,7 @@ func (r *goobj_objReader) error(err error) error {
// A sequence of 0 bytes will eventually terminate any
// parsing state in the object file. In particular, it ends the
// reading of a varint.
-func (r *goobj_objReader) readByte() byte {
+func (r *objReader) readByte() byte {
if r.err != nil {
return 0
}
@@ -345,7 +339,7 @@ func (r *goobj_objReader) readByte() byte {
// If an error occurs, read returns the error but also
// records it, so it is safe for callers to ignore the result
// as long as delaying the report is not a problem.
-func (r *goobj_objReader) readFull(b []byte) error {
+func (r *objReader) readFull(b []byte) error {
if r.err != nil {
return r.err
}
@@ -361,12 +355,12 @@ func (r *goobj_objReader) readFull(b []byte) error {
}
// readInt reads a zigzag varint from the input file.
-func (r *goobj_objReader) readInt() int {
+func (r *objReader) readInt() int {
var u uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
- r.error(goobj_errCorruptObject)
+ r.error(errCorruptObject)
return 0
}
c := r.readByte()
@@ -378,14 +372,14 @@ func (r *goobj_objReader) readInt() int {
v := int64(u>>1) ^ (int64(u) << 63 >> 63)
if int64(int(v)) != v {
- r.error(goobj_errCorruptObject) // TODO
+ r.error(errCorruptObject) // TODO
return 0
}
return int(v)
}
// readString reads a length-delimited string from the input file.
-func (r *goobj_objReader) readString() string {
+func (r *objReader) readString() string {
n := r.readInt()
buf := make([]byte, n)
r.readFull(buf)
@@ -393,7 +387,7 @@ func (r *goobj_objReader) readString() string {
}
// readSymID reads a SymID from the input file.
-func (r *goobj_objReader) readSymID() goobj_SymID {
+func (r *objReader) readSymID() SymID {
name, vers := r.readString(), r.readInt()
// In a symbol name in an object file, "". denotes the
@@ -409,19 +403,19 @@ func (r *goobj_objReader) readSymID() goobj_SymID {
vers = r.p.MaxVersion
}
- return goobj_SymID{name, vers}
+ return SymID{name, vers}
}
// readData reads a data reference from the input file.
-func (r *goobj_objReader) readData() goobj_Data {
+func (r *objReader) readData() Data {
n := r.readInt()
- d := goobj_Data{Offset: r.offset, Size: int64(n)}
+ d := Data{Offset: r.offset, Size: int64(n)}
r.skip(int64(n))
return d
}
// skip skips n bytes in the input.
-func (r *goobj_objReader) skip(n int64) {
+func (r *objReader) skip(n int64) {
if n < 0 {
r.error(fmt.Errorf("debug/goobj: internal error: misuse of skip"))
}
@@ -450,14 +444,14 @@ func (r *goobj_objReader) skip(n int64) {
// Parse parses an object file or archive from r,
// assuming that its import path is pkgpath.
-func goobj_Parse(r io.ReadSeeker, pkgpath string) (*goobj_Package, error) {
+func Parse(r io.ReadSeeker, pkgpath string) (*Package, error) {
if pkgpath == "" {
pkgpath = `""`
}
- p := new(goobj_Package)
+ p := new(Package)
p.ImportPath = pkgpath
- var rd goobj_objReader
+ var rd objReader
rd.init(r, p)
err := rd.readFull(rd.tmp[:8])
if err != nil {
@@ -469,14 +463,14 @@ func goobj_Parse(r io.ReadSeeker, pkgpath string) (*goobj_Package, error) {
switch {
default:
- return nil, goobj_errNotObject
+ return nil, errNotObject
- case bytes.Equal(rd.tmp[:8], goobj_archiveHeader):
+ case bytes.Equal(rd.tmp[:8], archiveHeader):
if err := rd.parseArchive(); err != nil {
return nil, err
}
- case bytes.Equal(rd.tmp[:8], goobj_goobjHeader):
- if err := rd.parseObject(goobj_goobjHeader); err != nil {
+ case bytes.Equal(rd.tmp[:8], goobjHeader):
+ if err := rd.parseObject(goobjHeader); err != nil {
return nil, err
}
}
@@ -486,7 +480,7 @@ func goobj_Parse(r io.ReadSeeker, pkgpath string) (*goobj_Package, error) {
// trimSpace removes trailing spaces from b and returns the corresponding string.
// This effectively parses the form used in archive headers.
-func goobj_trimSpace(b []byte) string {
+func trimSpace(b []byte) string {
return string(bytes.TrimRight(b, " "))
}
@@ -494,7 +488,7 @@ func goobj_trimSpace(b []byte) string {
// TODO(rsc): Need to skip non-Go object files.
// TODO(rsc): Maybe record table of contents in r.p so that
// linker can avoid having code to parse archives too.
-func (r *goobj_objReader) parseArchive() error {
+func (r *objReader) parseArchive() error {
for r.offset < r.limit {
if err := r.readFull(r.tmp[:60]); err != nil {
return err
@@ -518,20 +512,20 @@ func (r *goobj_objReader) parseArchive() error {
// The file data that follows is padded to an even number of bytes:
// if size is odd, an extra padding byte is inserted betw the next header.
if len(data) < 60 {
- return goobj_errTruncatedArchive
+ return errTruncatedArchive
}
- if !bytes.Equal(data[58:60], goobj_archiveMagic) {
- return goobj_errCorruptArchive
+ if !bytes.Equal(data[58:60], archiveMagic) {
+ return errCorruptArchive
}
- name := goobj_trimSpace(data[0:16])
- size, err := strconv.ParseInt(goobj_trimSpace(data[48:58]), 10, 64)
+ name := trimSpace(data[0:16])
+ size, err := strconv.ParseInt(trimSpace(data[48:58]), 10, 64)
if err != nil {
- return goobj_errCorruptArchive
+ return errCorruptArchive
}
data = data[60:]
fsize := size + size&1
if fsize < 0 || fsize < size {
- return goobj_errCorruptArchive
+ return errCorruptArchive
}
switch name {
case "__.SYMDEF", "__.GOSYMDEF", "__.PKGDEF":
@@ -559,7 +553,7 @@ func (r *goobj_objReader) parseArchive() error {
// and then the part we want to parse begins.
// The format of that part is defined in a comment at the top
// of src/liblink/objfile.c.
-func (r *goobj_objReader) parseObject(prefix []byte) error {
+func (r *objReader) parseObject(prefix []byte) error {
// TODO(rsc): Maybe use prefix and the initial input to
// record the header line from the file, which would
// give the architecture and other version information.
@@ -569,7 +563,7 @@ func (r *goobj_objReader) parseObject(prefix []byte) error {
for {
c1, c2, c3 = c2, c3, r.readByte()
if c3 == 0 { // NUL or EOF, either is bad
- return goobj_errCorruptObject
+ return errCorruptObject
}
if c1 == '\n' && c2 == '!' && c3 == '\n' {
break
@@ -578,12 +572,12 @@ func (r *goobj_objReader) parseObject(prefix []byte) error {
r.readFull(r.tmp[:8])
if !bytes.Equal(r.tmp[:8], []byte("\x00\x00go13ld")) {
- return r.error(goobj_errCorruptObject)
+ return r.error(errCorruptObject)
}
b := r.readByte()
if b != 1 {
- return r.error(goobj_errCorruptObject)
+ return r.error(errCorruptObject)
}
// Direct package dependencies.
@@ -599,20 +593,21 @@ func (r *goobj_objReader) parseObject(prefix []byte) error {
for {
if b := r.readByte(); b != 0xfe {
if b != 0xff {
- return r.error(goobj_errCorruptObject)
+ return r.error(errCorruptObject)
}
break
}
typ := r.readInt()
- s := &goobj_Sym{goobj_SymID: r.readSymID()}
+ s := &Sym{SymID: r.readSymID()}
r.p.Syms = append(r.p.Syms, s)
- s.Kind = goobj_SymKind(typ)
- s.DupOK = r.readInt() != 0
+ s.Kind = SymKind(typ)
+ flags := r.readInt()
+ s.DupOK = flags&1 != 0
s.Size = r.readInt()
s.Type = r.readSymID()
s.Data = r.readData()
- s.Reloc = make([]goobj_Reloc, r.readInt())
+ s.Reloc = make([]Reloc, r.readInt())
for i := range s.Reloc {
rel := &s.Reloc[i]
rel.Offset = r.readInt()
@@ -624,14 +619,15 @@ func (r *goobj_objReader) parseObject(prefix []byte) error {
r.readSymID() // Xsym - ignored
}
- if s.Kind == goobj_STEXT {
- f := new(goobj_Func)
+ if s.Kind == STEXT {
+ f := new(Func)
s.Func = f
f.Args = r.readInt()
f.Frame = r.readInt()
- f.Leaf = r.readInt() != 0
+ flags := r.readInt()
+ f.Leaf = flags&1 != 0
f.NoSplit = r.readInt() != 0
- f.Var = make([]goobj_Var, r.readInt())
+ f.Var = make([]Var, r.readInt())
for i := range f.Var {
v := &f.Var[i]
v.Name = r.readSymID().Name
@@ -643,11 +639,11 @@ func (r *goobj_objReader) parseObject(prefix []byte) error {
f.PCSP = r.readData()
f.PCFile = r.readData()
f.PCLine = r.readData()
- f.PCData = make([]goobj_Data, r.readInt())
+ f.PCData = make([]Data, r.readInt())
for i := range f.PCData {
f.PCData[i] = r.readData()
}
- f.FuncData = make([]goobj_FuncData, r.readInt())
+ f.FuncData = make([]FuncData, r.readInt())
for i := range f.FuncData {
f.FuncData[i].Sym = r.readSymID()
}
@@ -663,7 +659,7 @@ func (r *goobj_objReader) parseObject(prefix []byte) error {
r.readFull(r.tmp[:7])
if !bytes.Equal(r.tmp[:7], []byte("\xffgo13ld")) {
- return r.error(goobj_errCorruptObject)
+ return r.error(errCorruptObject)
}
return nil
diff --git a/src/cmd/internal/goobj/read_test.go b/src/cmd/internal/goobj/read_test.go
new file mode 100644
index 000000000..cc991e5d9
--- /dev/null
+++ b/src/cmd/internal/goobj/read_test.go
@@ -0,0 +1,28 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package goobj
+
+import "testing"
+
+var importPathToPrefixTests = []struct {
+ in string
+ out string
+}{
+ {"runtime", "runtime"},
+ {"sync/atomic", "sync/atomic"},
+ {"golang.org/x/tools/godoc", "golang.org/x/tools/godoc"},
+ {"foo.bar/baz.quux", "foo.bar/baz%2equux"},
+ {"", ""},
+ {"%foo%bar", "%25foo%25bar"},
+ {"\x01\x00\x7F☺", "%01%00%7f%e2%98%ba"},
+}
+
+func TestImportPathToPrefix(t *testing.T) {
+ for _, tt := range importPathToPrefixTests {
+ if out := importPathToPrefix(tt.in); out != tt.out {
+ t.Errorf("importPathToPrefix(%q) = %q, want %q", tt.in, out, tt.out)
+ }
+ }
+}
diff --git a/src/cmd/internal/objfile/disasm.go b/src/cmd/internal/objfile/disasm.go
new file mode 100644
index 000000000..1a339c321
--- /dev/null
+++ b/src/cmd/internal/objfile/disasm.go
@@ -0,0 +1,248 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package objfile
+
+import (
+ "bufio"
+ "debug/gosym"
+ "encoding/binary"
+ "fmt"
+ "io"
+ "regexp"
+ "sort"
+ "strings"
+ "text/tabwriter"
+
+ "cmd/internal/rsc.io/arm/armasm"
+ "cmd/internal/rsc.io/x86/x86asm"
+)
+
+// Disasm is a disassembler for a given File.
+type Disasm struct {
+ syms []Sym //symbols in file, sorted by address
+ pcln *gosym.Table // pcln table
+ text []byte // bytes of text segment (actual instructions)
+ textStart uint64 // start PC of text
+ textEnd uint64 // end PC of text
+ goarch string // GOARCH string
+ disasm disasmFunc // disassembler function for goarch
+ byteOrder binary.ByteOrder // byte order for goarch
+}
+
+// Disasm returns a disassembler for the file f.
+func (f *File) Disasm() (*Disasm, error) {
+ syms, err := f.Symbols()
+ if err != nil {
+ return nil, err
+ }
+
+ pcln, err := f.PCLineTable()
+ if err != nil {
+ return nil, err
+ }
+
+ textStart, textBytes, err := f.Text()
+ if err != nil {
+ return nil, err
+ }
+
+ goarch := f.GOARCH()
+ disasm := disasms[goarch]
+ byteOrder := byteOrders[goarch]
+ if disasm == nil || byteOrder == nil {
+ return nil, fmt.Errorf("unsupported architecture")
+ }
+
+ // Filter out section symbols, overwriting syms in place.
+ keep := syms[:0]
+ for _, sym := range syms {
+ switch sym.Name {
+ case "runtime.text", "text", "_text", "runtime.etext", "etext", "_etext":
+ // drop
+ default:
+ keep = append(keep, sym)
+ }
+ }
+ syms = keep
+ d := &Disasm{
+ syms: syms,
+ pcln: pcln,
+ text: textBytes,
+ textStart: textStart,
+ textEnd: textStart + uint64(len(textBytes)),
+ goarch: goarch,
+ disasm: disasm,
+ byteOrder: byteOrder,
+ }
+
+ return d, nil
+}
+
+// lookup finds the symbol name containing addr.
+func (d *Disasm) lookup(addr uint64) (name string, base uint64) {
+ i := sort.Search(len(d.syms), func(i int) bool { return addr < d.syms[i].Addr })
+ if i > 0 {
+ s := d.syms[i-1]
+ if s.Addr != 0 && s.Addr <= addr && addr < s.Addr+uint64(s.Size) {
+ return s.Name, s.Addr
+ }
+ }
+ return "", 0
+}
+
+// base returns the final element in the path.
+// It works on both Windows and Unix paths,
+// regardless of host operating system.
+func base(path string) string {
+ path = path[strings.LastIndex(path, "/")+1:]
+ path = path[strings.LastIndex(path, `\`)+1:]
+ return path
+}
+
+// Print prints a disassembly of the file to w.
+// If filter is non-nil, the disassembly only includes functions with names matching filter.
+// The disassembly only includes functions that overlap the range [start, end).
+func (d *Disasm) Print(w io.Writer, filter *regexp.Regexp, start, end uint64) {
+ if start < d.textStart {
+ start = d.textStart
+ }
+ if end > d.textEnd {
+ end = d.textEnd
+ }
+ printed := false
+ bw := bufio.NewWriter(w)
+ for _, sym := range d.syms {
+ symStart := sym.Addr
+ symEnd := sym.Addr + uint64(sym.Size)
+ if sym.Code != 'T' && sym.Code != 't' ||
+ symStart < d.textStart ||
+ symEnd <= start || end <= symStart ||
+ filter != nil && !filter.MatchString(sym.Name) {
+ continue
+ }
+ if printed {
+ fmt.Fprintf(bw, "\n")
+ }
+ printed = true
+
+ file, _, _ := d.pcln.PCToLine(sym.Addr)
+ fmt.Fprintf(bw, "TEXT %s(SB) %s\n", sym.Name, file)
+
+ tw := tabwriter.NewWriter(bw, 1, 8, 1, '\t', 0)
+ if symEnd > end {
+ symEnd = end
+ }
+ code := d.text[:end-d.textStart]
+ d.Decode(symStart, symEnd, func(pc, size uint64, file string, line int, text string) {
+ i := pc - d.textStart
+ fmt.Fprintf(tw, "\t%s:%d\t%#x\t", base(file), line, pc)
+ if size%4 != 0 || d.goarch == "386" || d.goarch == "amd64" {
+ // Print instruction as bytes.
+ fmt.Fprintf(tw, "%x", code[i:i+size])
+ } else {
+ // Print instruction as 32-bit words.
+ for j := uint64(0); j < size; j += 4 {
+ if j > 0 {
+ fmt.Fprintf(tw, " ")
+ }
+ fmt.Fprintf(tw, "%08x", d.byteOrder.Uint32(code[i+j:]))
+ }
+ }
+ fmt.Fprintf(tw, "\t%s\n", text)
+ })
+ tw.Flush()
+ }
+ bw.Flush()
+}
+
+// Decode disassembles the text segment range [start, end), calling f for each instruction.
+func (d *Disasm) Decode(start, end uint64, f func(pc, size uint64, file string, line int, text string)) {
+ if start < d.textStart {
+ start = d.textStart
+ }
+ if end > d.textEnd {
+ end = d.textEnd
+ }
+ code := d.text[:end-d.textStart]
+ lookup := d.lookup
+ for pc := start; pc < end; {
+ i := pc - d.textStart
+ text, size := d.disasm(code[i:], pc, lookup)
+ file, line, _ := d.pcln.PCToLine(pc)
+ f(pc, uint64(size), file, line, text)
+ pc += uint64(size)
+ }
+}
+
+type lookupFunc func(addr uint64) (sym string, base uint64)
+type disasmFunc func(code []byte, pc uint64, lookup lookupFunc) (text string, size int)
+
+func disasm_386(code []byte, pc uint64, lookup lookupFunc) (string, int) {
+ return disasm_x86(code, pc, lookup, 32)
+}
+
+func disasm_amd64(code []byte, pc uint64, lookup lookupFunc) (string, int) {
+ return disasm_x86(code, pc, lookup, 64)
+}
+
+func disasm_x86(code []byte, pc uint64, lookup lookupFunc, arch int) (string, int) {
+ inst, err := x86asm.Decode(code, 64)
+ var text string
+ size := inst.Len
+ if err != nil || size == 0 || inst.Op == 0 {
+ size = 1
+ text = "?"
+ } else {
+ text = x86asm.Plan9Syntax(inst, pc, lookup)
+ }
+ return text, size
+}
+
+type textReader struct {
+ code []byte
+ pc uint64
+}
+
+func (r textReader) ReadAt(data []byte, off int64) (n int, err error) {
+ if off < 0 || uint64(off) < r.pc {
+ return 0, io.EOF
+ }
+ d := uint64(off) - r.pc
+ if d >= uint64(len(r.code)) {
+ return 0, io.EOF
+ }
+ n = copy(data, r.code[d:])
+ if n < len(data) {
+ err = io.ErrUnexpectedEOF
+ }
+ return
+}
+
+func disasm_arm(code []byte, pc uint64, lookup lookupFunc) (string, int) {
+ inst, err := armasm.Decode(code, armasm.ModeARM)
+ var text string
+ size := inst.Len
+ if err != nil || size == 0 || inst.Op == 0 {
+ size = 4
+ text = "?"
+ } else {
+ text = armasm.Plan9Syntax(inst, pc, lookup, textReader{code, pc})
+ }
+ return text, size
+}
+
+var disasms = map[string]disasmFunc{
+ "386": disasm_386,
+ "amd64": disasm_amd64,
+ "arm": disasm_arm,
+}
+
+var byteOrders = map[string]binary.ByteOrder{
+ "386": binary.LittleEndian,
+ "amd64": binary.LittleEndian,
+ "arm": binary.LittleEndian,
+ "power64": binary.BigEndian,
+ "power64le": binary.LittleEndian,
+}
diff --git a/src/cmd/internal/objfile/elf.go b/src/cmd/internal/objfile/elf.go
new file mode 100644
index 000000000..17755b84d
--- /dev/null
+++ b/src/cmd/internal/objfile/elf.go
@@ -0,0 +1,104 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Parsing of ELF executables (Linux, FreeBSD, and so on).
+
+package objfile
+
+import (
+ "debug/elf"
+ "fmt"
+ "os"
+)
+
+type elfFile struct {
+ elf *elf.File
+}
+
+func openElf(r *os.File) (rawFile, error) {
+ f, err := elf.NewFile(r)
+ if err != nil {
+ return nil, err
+ }
+ return &elfFile{f}, nil
+}
+
+func (f *elfFile) symbols() ([]Sym, error) {
+ elfSyms, err := f.elf.Symbols()
+ if err != nil {
+ return nil, err
+ }
+
+ var syms []Sym
+ for _, s := range elfSyms {
+ sym := Sym{Addr: s.Value, Name: s.Name, Size: int64(s.Size), Code: '?'}
+ switch s.Section {
+ case elf.SHN_UNDEF:
+ sym.Code = 'U'
+ case elf.SHN_COMMON:
+ sym.Code = 'B'
+ default:
+ i := int(s.Section)
+ if i < 0 || i >= len(f.elf.Sections) {
+ break
+ }
+ sect := f.elf.Sections[i]
+ switch sect.Flags & (elf.SHF_WRITE | elf.SHF_ALLOC | elf.SHF_EXECINSTR) {
+ case elf.SHF_ALLOC | elf.SHF_EXECINSTR:
+ sym.Code = 'T'
+ case elf.SHF_ALLOC:
+ sym.Code = 'R'
+ case elf.SHF_ALLOC | elf.SHF_WRITE:
+ sym.Code = 'D'
+ }
+ }
+ if elf.ST_BIND(s.Info) == elf.STB_LOCAL {
+ sym.Code += 'a' - 'A'
+ }
+ syms = append(syms, sym)
+ }
+
+ return syms, nil
+}
+
+func (f *elfFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
+ if sect := f.elf.Section(".text"); sect != nil {
+ textStart = sect.Addr
+ }
+ if sect := f.elf.Section(".gosymtab"); sect != nil {
+ if symtab, err = sect.Data(); err != nil {
+ return 0, nil, nil, err
+ }
+ }
+ if sect := f.elf.Section(".gopclntab"); sect != nil {
+ if pclntab, err = sect.Data(); err != nil {
+ return 0, nil, nil, err
+ }
+ }
+ return textStart, symtab, pclntab, nil
+}
+
+func (f *elfFile) text() (textStart uint64, text []byte, err error) {
+ sect := f.elf.Section(".text")
+ if sect == nil {
+ return 0, nil, fmt.Errorf("text section not found")
+ }
+ textStart = sect.Addr
+ text, err = sect.Data()
+ return
+}
+
+func (f *elfFile) goarch() string {
+ switch f.elf.Machine {
+ case elf.EM_386:
+ return "386"
+ case elf.EM_X86_64:
+ return "amd64"
+ case elf.EM_ARM:
+ return "arm"
+ case elf.EM_PPC64:
+ return "power64"
+ }
+ return ""
+}
diff --git a/src/cmd/internal/objfile/goobj.go b/src/cmd/internal/objfile/goobj.go
new file mode 100644
index 000000000..6b1607a17
--- /dev/null
+++ b/src/cmd/internal/objfile/goobj.go
@@ -0,0 +1,93 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Parsing of Go intermediate object files and archives.
+
+package objfile
+
+import (
+ "cmd/internal/goobj"
+ "fmt"
+ "os"
+)
+
+type goobjFile struct {
+ goobj *goobj.Package
+}
+
+func openGoobj(r *os.File) (rawFile, error) {
+ f, err := goobj.Parse(r, `""`)
+ if err != nil {
+ return nil, err
+ }
+ return &goobjFile{f}, nil
+}
+
+func goobjName(id goobj.SymID) string {
+ if id.Version == 0 {
+ return id.Name
+ }
+ return fmt.Sprintf("%s<%d>", id.Name, id.Version)
+}
+
+func (f *goobjFile) symbols() ([]Sym, error) {
+ seen := make(map[goobj.SymID]bool)
+
+ var syms []Sym
+ for _, s := range f.goobj.Syms {
+ seen[s.SymID] = true
+ sym := Sym{Addr: uint64(s.Data.Offset), Name: goobjName(s.SymID), Size: int64(s.Size), Type: s.Type.Name, Code: '?'}
+ switch s.Kind {
+ case goobj.STEXT, goobj.SELFRXSECT:
+ sym.Code = 'T'
+ case goobj.STYPE, goobj.SSTRING, goobj.SGOSTRING, goobj.SGOFUNC, goobj.SRODATA, goobj.SFUNCTAB, goobj.STYPELINK, goobj.SSYMTAB, goobj.SPCLNTAB, goobj.SELFROSECT:
+ sym.Code = 'R'
+ case goobj.SMACHOPLT, goobj.SELFSECT, goobj.SMACHO, goobj.SMACHOGOT, goobj.SNOPTRDATA, goobj.SINITARR, goobj.SDATA, goobj.SWINDOWS:
+ sym.Code = 'D'
+ case goobj.SBSS, goobj.SNOPTRBSS, goobj.STLSBSS:
+ sym.Code = 'B'
+ case goobj.SXREF, goobj.SMACHOSYMSTR, goobj.SMACHOSYMTAB, goobj.SMACHOINDIRECTPLT, goobj.SMACHOINDIRECTGOT, goobj.SFILE, goobj.SFILEPATH, goobj.SCONST, goobj.SDYNIMPORT, goobj.SHOSTOBJ:
+ sym.Code = 'X' // should not see
+ }
+ if s.Version != 0 {
+ sym.Code += 'a' - 'A'
+ }
+ syms = append(syms, sym)
+ }
+
+ for _, s := range f.goobj.Syms {
+ for _, r := range s.Reloc {
+ if !seen[r.Sym] {
+ seen[r.Sym] = true
+ sym := Sym{Name: goobjName(r.Sym), Code: 'U'}
+ if s.Version != 0 {
+ // should not happen but handle anyway
+ sym.Code = 'u'
+ }
+ syms = append(syms, sym)
+ }
+ }
+ }
+
+ return syms, nil
+}
+
+// pcln does not make sense for Go object files, because each
+// symbol has its own individual pcln table, so there is no global
+// space of addresses to map.
+func (f *goobjFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
+ return 0, nil, nil, fmt.Errorf("pcln not available in go object file")
+}
+
+// text does not make sense for Go object files, because
+// each function has a separate section.
+func (f *goobjFile) text() (textStart uint64, text []byte, err error) {
+ return 0, nil, fmt.Errorf("text not available in go object file")
+}
+
+// goarch makes sense but is not exposed in debug/goobj's API,
+// and we don't need it yet for any users of internal/objfile.
+func (f *goobjFile) goarch() string {
+ return "GOARCH unimplemented for debug/goobj files"
+}
diff --git a/src/cmd/internal/objfile/macho.go b/src/cmd/internal/objfile/macho.go
new file mode 100644
index 000000000..7dd84a339
--- /dev/null
+++ b/src/cmd/internal/objfile/macho.go
@@ -0,0 +1,116 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Parsing of Mach-O executables (OS X).
+
+package objfile
+
+import (
+ "debug/macho"
+ "fmt"
+ "os"
+ "sort"
+)
+
+type machoFile struct {
+ macho *macho.File
+}
+
+func openMacho(r *os.File) (rawFile, error) {
+ f, err := macho.NewFile(r)
+ if err != nil {
+ return nil, err
+ }
+ return &machoFile{f}, nil
+}
+
+func (f *machoFile) symbols() ([]Sym, error) {
+ if f.macho.Symtab == nil {
+ return nil, fmt.Errorf("missing symbol table")
+ }
+
+ // Build sorted list of addresses of all symbols.
+ // We infer the size of a symbol by looking at where the next symbol begins.
+ var addrs []uint64
+ for _, s := range f.macho.Symtab.Syms {
+ addrs = append(addrs, s.Value)
+ }
+ sort.Sort(uint64s(addrs))
+
+ var syms []Sym
+ for _, s := range f.macho.Symtab.Syms {
+ sym := Sym{Name: s.Name, Addr: s.Value, Code: '?'}
+ i := sort.Search(len(addrs), func(x int) bool { return addrs[x] > s.Value })
+ if i < len(addrs) {
+ sym.Size = int64(addrs[i] - s.Value)
+ }
+ if s.Sect == 0 {
+ sym.Code = 'U'
+ } else if int(s.Sect) <= len(f.macho.Sections) {
+ sect := f.macho.Sections[s.Sect-1]
+ switch sect.Seg {
+ case "__TEXT":
+ sym.Code = 'R'
+ case "__DATA":
+ sym.Code = 'D'
+ }
+ switch sect.Seg + " " + sect.Name {
+ case "__TEXT __text":
+ sym.Code = 'T'
+ case "__DATA __bss", "__DATA __noptrbss":
+ sym.Code = 'B'
+ }
+ }
+ syms = append(syms, sym)
+ }
+
+ return syms, nil
+}
+
+func (f *machoFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
+ if sect := f.macho.Section("__text"); sect != nil {
+ textStart = sect.Addr
+ }
+ if sect := f.macho.Section("__gosymtab"); sect != nil {
+ if symtab, err = sect.Data(); err != nil {
+ return 0, nil, nil, err
+ }
+ }
+ if sect := f.macho.Section("__gopclntab"); sect != nil {
+ if pclntab, err = sect.Data(); err != nil {
+ return 0, nil, nil, err
+ }
+ }
+ return textStart, symtab, pclntab, nil
+}
+
+func (f *machoFile) text() (textStart uint64, text []byte, err error) {
+ sect := f.macho.Section("__text")
+ if sect == nil {
+ return 0, nil, fmt.Errorf("text section not found")
+ }
+ textStart = sect.Addr
+ text, err = sect.Data()
+ return
+}
+
+func (f *machoFile) goarch() string {
+ switch f.macho.Cpu {
+ case macho.Cpu386:
+ return "386"
+ case macho.CpuAmd64:
+ return "amd64"
+ case macho.CpuArm:
+ return "arm"
+ case macho.CpuPpc64:
+ return "power64"
+ }
+ return ""
+}
+
+type uint64s []uint64
+
+func (x uint64s) Len() int { return len(x) }
+func (x uint64s) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
+func (x uint64s) Less(i, j int) bool { return x[i] < x[j] }
diff --git a/src/cmd/internal/objfile/objfile.go b/src/cmd/internal/objfile/objfile.go
new file mode 100644
index 000000000..9227ef387
--- /dev/null
+++ b/src/cmd/internal/objfile/objfile.go
@@ -0,0 +1,94 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package objfile implements portable access to OS-specific executable files.
+package objfile
+
+import (
+ "debug/gosym"
+ "fmt"
+ "os"
+ "sort"
+)
+
+type rawFile interface {
+ symbols() (syms []Sym, err error)
+ pcln() (textStart uint64, symtab, pclntab []byte, err error)
+ text() (textStart uint64, text []byte, err error)
+ goarch() string
+}
+
+// A File is an opened executable file.
+type File struct {
+ r *os.File
+ raw rawFile
+}
+
+// A Sym is a symbol defined in an executable file.
+type Sym struct {
+ Name string // symbol name
+ Addr uint64 // virtual address of symbol
+ Size int64 // size in bytes
+ Code rune // nm code (T for text, D for data, and so on)
+ Type string // XXX?
+}
+
+var openers = []func(*os.File) (rawFile, error){
+ openElf,
+ openGoobj,
+ openMacho,
+ openPE,
+ openPlan9,
+}
+
+// Open opens the named file.
+// The caller must call f.Close when the file is no longer needed.
+func Open(name string) (*File, error) {
+ r, err := os.Open(name)
+ if err != nil {
+ return nil, err
+ }
+ for _, try := range openers {
+ if raw, err := try(r); err == nil {
+ return &File{r, raw}, nil
+ }
+ }
+ r.Close()
+ return nil, fmt.Errorf("open %s: unrecognized object file", name)
+}
+
+func (f *File) Close() error {
+ return f.r.Close()
+}
+
+func (f *File) Symbols() ([]Sym, error) {
+ syms, err := f.raw.symbols()
+ if err != nil {
+ return nil, err
+ }
+ sort.Sort(byAddr(syms))
+ return syms, nil
+}
+
+type byAddr []Sym
+
+func (x byAddr) Less(i, j int) bool { return x[i].Addr < x[j].Addr }
+func (x byAddr) Len() int { return len(x) }
+func (x byAddr) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
+
+func (f *File) PCLineTable() (*gosym.Table, error) {
+ textStart, symtab, pclntab, err := f.raw.pcln()
+ if err != nil {
+ return nil, err
+ }
+ return gosym.NewTable(symtab, gosym.NewLineTable(pclntab, textStart))
+}
+
+func (f *File) Text() (uint64, []byte, error) {
+ return f.raw.text()
+}
+
+func (f *File) GOARCH() string {
+ return f.raw.goarch()
+}
diff --git a/src/cmd/internal/objfile/pe.go b/src/cmd/internal/objfile/pe.go
new file mode 100644
index 000000000..67e59c226
--- /dev/null
+++ b/src/cmd/internal/objfile/pe.go
@@ -0,0 +1,201 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Parsing of PE executables (Microsoft Windows).
+
+package objfile
+
+import (
+ "debug/pe"
+ "fmt"
+ "os"
+ "sort"
+)
+
+type peFile struct {
+ pe *pe.File
+}
+
+func openPE(r *os.File) (rawFile, error) {
+ f, err := pe.NewFile(r)
+ if err != nil {
+ return nil, err
+ }
+ switch f.OptionalHeader.(type) {
+ case *pe.OptionalHeader32, *pe.OptionalHeader64:
+ // ok
+ default:
+ return nil, fmt.Errorf("unrecognized PE format")
+ }
+ return &peFile{f}, nil
+}
+
+func (f *peFile) symbols() ([]Sym, error) {
+ // Build sorted list of addresses of all symbols.
+ // We infer the size of a symbol by looking at where the next symbol begins.
+ var addrs []uint64
+
+ var imageBase uint64
+ switch oh := f.pe.OptionalHeader.(type) {
+ case *pe.OptionalHeader32:
+ imageBase = uint64(oh.ImageBase)
+ case *pe.OptionalHeader64:
+ imageBase = oh.ImageBase
+ }
+
+ var syms []Sym
+ for _, s := range f.pe.Symbols {
+ const (
+ N_UNDEF = 0 // An undefined (extern) symbol
+ N_ABS = -1 // An absolute symbol (e_value is a constant, not an address)
+ N_DEBUG = -2 // A debugging symbol
+ )
+ sym := Sym{Name: s.Name, Addr: uint64(s.Value), Code: '?'}
+ switch s.SectionNumber {
+ case N_UNDEF:
+ sym.Code = 'U'
+ case N_ABS:
+ sym.Code = 'C'
+ case N_DEBUG:
+ sym.Code = '?'
+ default:
+ if s.SectionNumber < 0 || len(f.pe.Sections) < int(s.SectionNumber) {
+ return nil, fmt.Errorf("invalid section number in symbol table")
+ }
+ sect := f.pe.Sections[s.SectionNumber-1]
+ const (
+ text = 0x20
+ data = 0x40
+ bss = 0x80
+ permX = 0x20000000
+ permR = 0x40000000
+ permW = 0x80000000
+ )
+ ch := sect.Characteristics
+ switch {
+ case ch&text != 0:
+ sym.Code = 'T'
+ case ch&data != 0:
+ if ch&permW == 0 {
+ sym.Code = 'R'
+ } else {
+ sym.Code = 'D'
+ }
+ case ch&bss != 0:
+ sym.Code = 'B'
+ }
+ sym.Addr += imageBase + uint64(sect.VirtualAddress)
+ }
+ syms = append(syms, sym)
+ addrs = append(addrs, sym.Addr)
+ }
+
+ sort.Sort(uint64s(addrs))
+ for i := range syms {
+ j := sort.Search(len(addrs), func(x int) bool { return addrs[x] > syms[i].Addr })
+ if j < len(addrs) {
+ syms[i].Size = int64(addrs[j] - syms[i].Addr)
+ }
+ }
+
+ return syms, nil
+}
+
+func (f *peFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
+ var imageBase uint64
+ switch oh := f.pe.OptionalHeader.(type) {
+ case *pe.OptionalHeader32:
+ imageBase = uint64(oh.ImageBase)
+ case *pe.OptionalHeader64:
+ imageBase = oh.ImageBase
+ default:
+ return 0, nil, nil, fmt.Errorf("pe file format not recognized")
+ }
+ if sect := f.pe.Section(".text"); sect != nil {
+ textStart = imageBase + uint64(sect.VirtualAddress)
+ }
+ if pclntab, err = loadPETable(f.pe, "runtime.pclntab", "runtime.epclntab"); err != nil {
+ // We didn't find the symbols, so look for the names used in 1.3 and earlier.
+ // TODO: Remove code looking for the old symbols when we no longer care about 1.3.
+ var err2 error
+ if pclntab, err2 = loadPETable(f.pe, "pclntab", "epclntab"); err2 != nil {
+ return 0, nil, nil, err
+ }
+ }
+ if symtab, err = loadPETable(f.pe, "runtime.symtab", "runtime.esymtab"); err != nil {
+ // Same as above.
+ var err2 error
+ if symtab, err2 = loadPETable(f.pe, "symtab", "esymtab"); err2 != nil {
+ return 0, nil, nil, err
+ }
+ }
+ return textStart, symtab, pclntab, nil
+}
+
+func (f *peFile) text() (textStart uint64, text []byte, err error) {
+ var imageBase uint64
+ switch oh := f.pe.OptionalHeader.(type) {
+ case *pe.OptionalHeader32:
+ imageBase = uint64(oh.ImageBase)
+ case *pe.OptionalHeader64:
+ imageBase = oh.ImageBase
+ default:
+ return 0, nil, fmt.Errorf("pe file format not recognized")
+ }
+ sect := f.pe.Section(".text")
+ if sect == nil {
+ return 0, nil, fmt.Errorf("text section not found")
+ }
+ textStart = imageBase + uint64(sect.VirtualAddress)
+ text, err = sect.Data()
+ return
+}
+
+func findPESymbol(f *pe.File, name string) (*pe.Symbol, error) {
+ for _, s := range f.Symbols {
+ if s.Name != name {
+ continue
+ }
+ if s.SectionNumber <= 0 {
+ return nil, fmt.Errorf("symbol %s: invalid section number %d", name, s.SectionNumber)
+ }
+ if len(f.Sections) < int(s.SectionNumber) {
+ return nil, fmt.Errorf("symbol %s: section number %d is larger than max %d", name, s.SectionNumber, len(f.Sections))
+ }
+ return s, nil
+ }
+ return nil, fmt.Errorf("no %s symbol found", name)
+}
+
+func loadPETable(f *pe.File, sname, ename string) ([]byte, error) {
+ ssym, err := findPESymbol(f, sname)
+ if err != nil {
+ return nil, err
+ }
+ esym, err := findPESymbol(f, ename)
+ if err != nil {
+ return nil, err
+ }
+ if ssym.SectionNumber != esym.SectionNumber {
+ return nil, fmt.Errorf("%s and %s symbols must be in the same section", sname, ename)
+ }
+ sect := f.Sections[ssym.SectionNumber-1]
+ data, err := sect.Data()
+ if err != nil {
+ return nil, err
+ }
+ return data[ssym.Value:esym.Value], nil
+}
+
+func (f *peFile) goarch() string {
+ // Not sure how to get the info we want from PE header.
+ // Look in symbol table for telltale rt0 symbol.
+ if _, err := findPESymbol(f.pe, "_rt0_386_windows"); err == nil {
+ return "386"
+ }
+ if _, err := findPESymbol(f.pe, "_rt0_amd64_windows"); err == nil {
+ return "amd64"
+ }
+ return ""
+}
diff --git a/src/cmd/internal/objfile/plan9obj.go b/src/cmd/internal/objfile/plan9obj.go
new file mode 100644
index 000000000..eb6cba5eb
--- /dev/null
+++ b/src/cmd/internal/objfile/plan9obj.go
@@ -0,0 +1,146 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Parsing of Plan 9 a.out executables.
+
+package objfile
+
+import (
+ "debug/plan9obj"
+ "fmt"
+ "os"
+ "sort"
+)
+
+var validSymType = map[rune]bool{
+ 'T': true,
+ 't': true,
+ 'D': true,
+ 'd': true,
+ 'B': true,
+ 'b': true,
+}
+
+type plan9File struct {
+ plan9 *plan9obj.File
+}
+
+func openPlan9(r *os.File) (rawFile, error) {
+ f, err := plan9obj.NewFile(r)
+ if err != nil {
+ return nil, err
+ }
+ return &plan9File{f}, nil
+}
+
+func (f *plan9File) symbols() ([]Sym, error) {
+ plan9Syms, err := f.plan9.Symbols()
+ if err != nil {
+ return nil, err
+ }
+
+ // Build sorted list of addresses of all symbols.
+ // We infer the size of a symbol by looking at where the next symbol begins.
+ var addrs []uint64
+ for _, s := range plan9Syms {
+ if !validSymType[s.Type] {
+ continue
+ }
+ addrs = append(addrs, s.Value)
+ }
+ sort.Sort(uint64s(addrs))
+
+ var syms []Sym
+
+ for _, s := range plan9Syms {
+ if !validSymType[s.Type] {
+ continue
+ }
+ sym := Sym{Addr: s.Value, Name: s.Name, Code: rune(s.Type)}
+ i := sort.Search(len(addrs), func(x int) bool { return addrs[x] > s.Value })
+ if i < len(addrs) {
+ sym.Size = int64(addrs[i] - s.Value)
+ }
+ syms = append(syms, sym)
+ }
+
+ return syms, nil
+}
+
+func (f *plan9File) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
+ textStart = f.plan9.LoadAddress + f.plan9.HdrSize
+ if pclntab, err = loadPlan9Table(f.plan9, "runtime.pclntab", "runtime.epclntab"); err != nil {
+ // We didn't find the symbols, so look for the names used in 1.3 and earlier.
+ // TODO: Remove code looking for the old symbols when we no longer care about 1.3.
+ var err2 error
+ if pclntab, err2 = loadPlan9Table(f.plan9, "pclntab", "epclntab"); err2 != nil {
+ return 0, nil, nil, err
+ }
+ }
+ if symtab, err = loadPlan9Table(f.plan9, "runtime.symtab", "runtime.esymtab"); err != nil {
+ // Same as above.
+ var err2 error
+ if symtab, err2 = loadPlan9Table(f.plan9, "symtab", "esymtab"); err2 != nil {
+ return 0, nil, nil, err
+ }
+ }
+ return textStart, symtab, pclntab, nil
+}
+
+func (f *plan9File) text() (textStart uint64, text []byte, err error) {
+ sect := f.plan9.Section("text")
+ if sect == nil {
+ return 0, nil, fmt.Errorf("text section not found")
+ }
+ textStart = f.plan9.LoadAddress + f.plan9.HdrSize
+ text, err = sect.Data()
+ return
+}
+
+func findPlan9Symbol(f *plan9obj.File, name string) (*plan9obj.Sym, error) {
+ syms, err := f.Symbols()
+ if err != nil {
+ return nil, err
+ }
+ for _, s := range syms {
+ if s.Name != name {
+ continue
+ }
+ return &s, nil
+ }
+ return nil, fmt.Errorf("no %s symbol found", name)
+}
+
+func loadPlan9Table(f *plan9obj.File, sname, ename string) ([]byte, error) {
+ ssym, err := findPlan9Symbol(f, sname)
+ if err != nil {
+ return nil, err
+ }
+ esym, err := findPlan9Symbol(f, ename)
+ if err != nil {
+ return nil, err
+ }
+ sect := f.Section("text")
+ if sect == nil {
+ return nil, err
+ }
+ data, err := sect.Data()
+ if err != nil {
+ return nil, err
+ }
+ textStart := f.LoadAddress + f.HdrSize
+ return data[ssym.Value-textStart : esym.Value-textStart], nil
+}
+
+func (f *plan9File) goarch() string {
+ switch f.plan9.Magic {
+ case plan9obj.Magic386:
+ return "386"
+ case plan9obj.MagicAMD64:
+ return "amd64"
+ case plan9obj.MagicARM:
+ return "arm"
+ }
+ return ""
+}
diff --git a/src/cmd/internal/rsc.io/arm/armasm/Makefile b/src/cmd/internal/rsc.io/arm/armasm/Makefile
new file mode 100644
index 000000000..a3f57001f
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/Makefile
@@ -0,0 +1,2 @@
+tables.go: ../armmap/map.go ../arm.csv
+ go run ../armmap/map.go -fmt=decoder ../arm.csv >_tables.go && gofmt _tables.go >tables.go && rm _tables.go
diff --git a/src/cmd/internal/rsc.io/arm/armasm/decode.go b/src/cmd/internal/rsc.io/arm/armasm/decode.go
new file mode 100644
index 000000000..6b4d73841
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/decode.go
@@ -0,0 +1,567 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package armasm
+
+import (
+ "encoding/binary"
+ "fmt"
+)
+
+// An instFormat describes the format of an instruction encoding.
+// An instruction with 32-bit value x matches the format if x&mask == value
+// and the condition matches.
+// The condition matches if x>>28 == 0xF && value>>28==0xF
+// or if x>>28 != 0xF and value>>28 == 0.
+// If x matches the format, then the rest of the fields describe how to interpret x.
+// The opBits describe bits that should be extracted from x and added to the opcode.
+// For example opBits = 0x1234 means that the value
+// (2 bits at offset 1) followed by (4 bits at offset 3)
+// should be added to op.
+// Finally the args describe how to decode the instruction arguments.
+// args is stored as a fixed-size array; if there are fewer than len(args) arguments,
+// args[i] == 0 marks the end of the argument list.
+type instFormat struct {
+ mask uint32
+ value uint32
+ priority int8
+ op Op
+ opBits uint64
+ args instArgs
+}
+
+type instArgs [4]instArg
+
+var (
+ errMode = fmt.Errorf("unsupported execution mode")
+ errShort = fmt.Errorf("truncated instruction")
+ errUnknown = fmt.Errorf("unknown instruction")
+)
+
+var decoderCover []bool
+
+// Decode decodes the leading bytes in src as a single instruction.
+func Decode(src []byte, mode Mode) (inst Inst, err error) {
+ if mode != ModeARM {
+ return Inst{}, errMode
+ }
+ if len(src) < 4 {
+ return Inst{}, errShort
+ }
+
+ if decoderCover == nil {
+ decoderCover = make([]bool, len(instFormats))
+ }
+
+ x := binary.LittleEndian.Uint32(src)
+
+ // The instFormat table contains both conditional and unconditional instructions.
+ // Considering only the top 4 bits, the conditional instructions use mask=0, value=0,
+ // while the unconditional instructions use mask=f, value=f.
+ // Prepare a version of x with the condition cleared to 0 in conditional instructions
+ // and then assume mask=f during matching.
+ const condMask = 0xf0000000
+ xNoCond := x
+ if x&condMask != condMask {
+ xNoCond &^= condMask
+ }
+ var priority int8
+Search:
+ for i := range instFormats {
+ f := &instFormats[i]
+ if xNoCond&(f.mask|condMask) != f.value || f.priority <= priority {
+ continue
+ }
+ delta := uint32(0)
+ deltaShift := uint(0)
+ for opBits := f.opBits; opBits != 0; opBits >>= 16 {
+ n := uint(opBits & 0xFF)
+ off := uint((opBits >> 8) & 0xFF)
+ delta |= (x >> off) & (1<<n - 1) << deltaShift
+ deltaShift += n
+ }
+ op := f.op + Op(delta)
+
+ // Special case: BKPT encodes with condition but cannot have one.
+ if op&^15 == BKPT_EQ && op != BKPT {
+ continue Search
+ }
+
+ var args Args
+ for j, aop := range f.args {
+ if aop == 0 {
+ break
+ }
+ arg := decodeArg(aop, x)
+ if arg == nil { // cannot decode argument
+ continue Search
+ }
+ args[j] = arg
+ }
+
+ decoderCover[i] = true
+
+ inst = Inst{
+ Op: op,
+ Args: args,
+ Enc: x,
+ Len: 4,
+ }
+ priority = f.priority
+ continue Search
+ }
+ if inst.Op != 0 {
+ return inst, nil
+ }
+ return Inst{}, errUnknown
+}
+
+// An instArg describes the encoding of a single argument.
+// In the names used for arguments, _p_ means +, _m_ means -,
+// _pm_ means ± (usually keyed by the U bit).
+// The _W suffix indicates a general addressing mode based on the P and W bits.
+// The _offset and _postindex suffixes force the given addressing mode.
+// The rest should be somewhat self-explanatory, at least given
+// the decodeArg function.
+type instArg uint8
+
+const (
+ _ instArg = iota
+ arg_APSR
+ arg_FPSCR
+ arg_Dn_half
+ arg_R1_0
+ arg_R1_12
+ arg_R2_0
+ arg_R2_12
+ arg_R_0
+ arg_R_12
+ arg_R_12_nzcv
+ arg_R_16
+ arg_R_16_WB
+ arg_R_8
+ arg_R_rotate
+ arg_R_shift_R
+ arg_R_shift_imm
+ arg_SP
+ arg_Sd
+ arg_Sd_Dd
+ arg_Dd_Sd
+ arg_Sm
+ arg_Sm_Dm
+ arg_Sn
+ arg_Sn_Dn
+ arg_const
+ arg_endian
+ arg_fbits
+ arg_fp_0
+ arg_imm24
+ arg_imm5
+ arg_imm5_32
+ arg_imm5_nz
+ arg_imm_12at8_4at0
+ arg_imm_4at16_12at0
+ arg_imm_vfp
+ arg_label24
+ arg_label24H
+ arg_label_m_12
+ arg_label_p_12
+ arg_label_pm_12
+ arg_label_pm_4_4
+ arg_lsb_width
+ arg_mem_R
+ arg_mem_R_pm_R_W
+ arg_mem_R_pm_R_postindex
+ arg_mem_R_pm_R_shift_imm_W
+ arg_mem_R_pm_R_shift_imm_offset
+ arg_mem_R_pm_R_shift_imm_postindex
+ arg_mem_R_pm_imm12_W
+ arg_mem_R_pm_imm12_offset
+ arg_mem_R_pm_imm12_postindex
+ arg_mem_R_pm_imm8_W
+ arg_mem_R_pm_imm8_postindex
+ arg_mem_R_pm_imm8at0_offset
+ arg_option
+ arg_registers
+ arg_registers1
+ arg_registers2
+ arg_satimm4
+ arg_satimm5
+ arg_satimm4m1
+ arg_satimm5m1
+ arg_widthm1
+)
+
+// decodeArg decodes the arg described by aop from the instruction bits x.
+// It returns nil if x cannot be decoded according to aop.
+func decodeArg(aop instArg, x uint32) Arg {
+ switch aop {
+ default:
+ return nil
+
+ case arg_APSR:
+ return APSR
+ case arg_FPSCR:
+ return FPSCR
+
+ case arg_R_0:
+ return Reg(x & (1<<4 - 1))
+ case arg_R_8:
+ return Reg((x >> 8) & (1<<4 - 1))
+ case arg_R_12:
+ return Reg((x >> 12) & (1<<4 - 1))
+ case arg_R_16:
+ return Reg((x >> 16) & (1<<4 - 1))
+
+ case arg_R_12_nzcv:
+ r := Reg((x >> 12) & (1<<4 - 1))
+ if r == R15 {
+ return APSR_nzcv
+ }
+ return r
+
+ case arg_R_16_WB:
+ mode := AddrLDM
+ if (x>>21)&1 != 0 {
+ mode = AddrLDM_WB
+ }
+ return Mem{Base: Reg((x >> 16) & (1<<4 - 1)), Mode: mode}
+
+ case arg_R_rotate:
+ Rm := Reg(x & (1<<4 - 1))
+ typ, count := decodeShift(x)
+ // ROR #0 here means ROR #0, but decodeShift rewrites to RRX #1.
+ if typ == RotateRightExt {
+ return Reg(Rm)
+ }
+ return RegShift{Rm, typ, uint8(count)}
+
+ case arg_R_shift_R:
+ Rm := Reg(x & (1<<4 - 1))
+ Rs := Reg((x >> 8) & (1<<4 - 1))
+ typ := Shift((x >> 5) & (1<<2 - 1))
+ return RegShiftReg{Rm, typ, Rs}
+
+ case arg_R_shift_imm:
+ Rm := Reg(x & (1<<4 - 1))
+ typ, count := decodeShift(x)
+ if typ == ShiftLeft && count == 0 {
+ return Reg(Rm)
+ }
+ return RegShift{Rm, typ, uint8(count)}
+
+ case arg_R1_0:
+ return Reg((x & (1<<4 - 1)))
+ case arg_R1_12:
+ return Reg(((x >> 12) & (1<<4 - 1)))
+ case arg_R2_0:
+ return Reg((x & (1<<4 - 1)) | 1)
+ case arg_R2_12:
+ return Reg(((x >> 12) & (1<<4 - 1)) | 1)
+
+ case arg_SP:
+ return SP
+
+ case arg_Sd_Dd:
+ v := (x >> 12) & (1<<4 - 1)
+ vx := (x >> 22) & 1
+ sz := (x >> 8) & 1
+ if sz != 0 {
+ return D0 + Reg(vx<<4+v)
+ } else {
+ return S0 + Reg(v<<1+vx)
+ }
+
+ case arg_Dd_Sd:
+ return decodeArg(arg_Sd_Dd, x^(1<<8))
+
+ case arg_Sd:
+ v := (x >> 12) & (1<<4 - 1)
+ vx := (x >> 22) & 1
+ return S0 + Reg(v<<1+vx)
+
+ case arg_Sm_Dm:
+ v := (x >> 0) & (1<<4 - 1)
+ vx := (x >> 5) & 1
+ sz := (x >> 8) & 1
+ if sz != 0 {
+ return D0 + Reg(vx<<4+v)
+ } else {
+ return S0 + Reg(v<<1+vx)
+ }
+
+ case arg_Sm:
+ v := (x >> 0) & (1<<4 - 1)
+ vx := (x >> 5) & 1
+ return S0 + Reg(v<<1+vx)
+
+ case arg_Dn_half:
+ v := (x >> 16) & (1<<4 - 1)
+ vx := (x >> 7) & 1
+ return RegX{D0 + Reg(vx<<4+v), int((x >> 21) & 1)}
+
+ case arg_Sn_Dn:
+ v := (x >> 16) & (1<<4 - 1)
+ vx := (x >> 7) & 1
+ sz := (x >> 8) & 1
+ if sz != 0 {
+ return D0 + Reg(vx<<4+v)
+ } else {
+ return S0 + Reg(v<<1+vx)
+ }
+
+ case arg_Sn:
+ v := (x >> 16) & (1<<4 - 1)
+ vx := (x >> 7) & 1
+ return S0 + Reg(v<<1+vx)
+
+ case arg_const:
+ v := x & (1<<8 - 1)
+ rot := (x >> 8) & (1<<4 - 1) * 2
+ if rot > 0 && v&3 == 0 {
+ // could rotate less
+ return ImmAlt{uint8(v), uint8(rot)}
+ }
+ if rot >= 24 && ((v<<(32-rot))&0xFF)>>(32-rot) == v {
+ // could wrap around to rot==0.
+ return ImmAlt{uint8(v), uint8(rot)}
+ }
+ return Imm(v>>rot | v<<(32-rot))
+
+ case arg_endian:
+ return Endian((x >> 9) & 1)
+
+ case arg_fbits:
+ return Imm((16 << ((x >> 7) & 1)) - ((x&(1<<4-1))<<1 | (x>>5)&1))
+
+ case arg_fp_0:
+ return Imm(0)
+
+ case arg_imm24:
+ return Imm(x & (1<<24 - 1))
+
+ case arg_imm5:
+ return Imm((x >> 7) & (1<<5 - 1))
+
+ case arg_imm5_32:
+ x = (x >> 7) & (1<<5 - 1)
+ if x == 0 {
+ x = 32
+ }
+ return Imm(x)
+
+ case arg_imm5_nz:
+ x = (x >> 7) & (1<<5 - 1)
+ if x == 0 {
+ return nil
+ }
+ return Imm(x)
+
+ case arg_imm_4at16_12at0:
+ return Imm((x>>16)&(1<<4-1)<<12 | x&(1<<12-1))
+
+ case arg_imm_12at8_4at0:
+ return Imm((x>>8)&(1<<12-1)<<4 | x&(1<<4-1))
+
+ case arg_imm_vfp:
+ x = (x>>16)&(1<<4-1)<<4 | x&(1<<4-1)
+ return Imm(x)
+
+ case arg_label24:
+ imm := (x & (1<<24 - 1)) << 2
+ return PCRel(int32(imm<<6) >> 6)
+
+ case arg_label24H:
+ h := (x >> 24) & 1
+ imm := (x&(1<<24-1))<<2 | h<<1
+ return PCRel(int32(imm<<6) >> 6)
+
+ case arg_label_m_12:
+ d := int32(x & (1<<12 - 1))
+ return Mem{Base: PC, Mode: AddrOffset, Offset: int16(-d)}
+
+ case arg_label_p_12:
+ d := int32(x & (1<<12 - 1))
+ return Mem{Base: PC, Mode: AddrOffset, Offset: int16(d)}
+
+ case arg_label_pm_12:
+ d := int32(x & (1<<12 - 1))
+ u := (x >> 23) & 1
+ if u == 0 {
+ d = -d
+ }
+ return Mem{Base: PC, Mode: AddrOffset, Offset: int16(d)}
+
+ case arg_label_pm_4_4:
+ d := int32((x>>8)&(1<<4-1)<<4 | x&(1<<4-1))
+ u := (x >> 23) & 1
+ if u == 0 {
+ d = -d
+ }
+ return PCRel(d)
+
+ case arg_lsb_width:
+ lsb := (x >> 7) & (1<<5 - 1)
+ msb := (x >> 16) & (1<<5 - 1)
+ if msb < lsb || msb >= 32 {
+ return nil
+ }
+ return Imm(msb + 1 - lsb)
+
+ case arg_mem_R:
+ Rn := Reg((x >> 16) & (1<<4 - 1))
+ return Mem{Base: Rn, Mode: AddrOffset}
+
+ case arg_mem_R_pm_R_postindex:
+ // Treat [<Rn>],+/-<Rm> like [<Rn>,+/-<Rm>{,<shift>}]{!}
+ // by forcing shift bits to <<0 and P=0, W=0 (postindex=true).
+ return decodeArg(arg_mem_R_pm_R_shift_imm_W, x&^((1<<7-1)<<5|1<<24|1<<21))
+
+ case arg_mem_R_pm_R_W:
+ // Treat [<Rn>,+/-<Rm>]{!} like [<Rn>,+/-<Rm>{,<shift>}]{!}
+ // by forcing shift bits to <<0.
+ return decodeArg(arg_mem_R_pm_R_shift_imm_W, x&^((1<<7-1)<<5))
+
+ case arg_mem_R_pm_R_shift_imm_offset:
+ // Treat [<Rn>],+/-<Rm>{,<shift>} like [<Rn>,+/-<Rm>{,<shift>}]{!}
+ // by forcing P=1, W=0 (index=false, wback=false).
+ return decodeArg(arg_mem_R_pm_R_shift_imm_W, x&^(1<<21)|1<<24)
+
+ case arg_mem_R_pm_R_shift_imm_postindex:
+ // Treat [<Rn>],+/-<Rm>{,<shift>} like [<Rn>,+/-<Rm>{,<shift>}]{!}
+ // by forcing P=0, W=0 (postindex=true).
+ return decodeArg(arg_mem_R_pm_R_shift_imm_W, x&^(1<<24|1<<21))
+
+ case arg_mem_R_pm_R_shift_imm_W:
+ Rn := Reg((x >> 16) & (1<<4 - 1))
+ Rm := Reg(x & (1<<4 - 1))
+ typ, count := decodeShift(x)
+ u := (x >> 23) & 1
+ w := (x >> 21) & 1
+ p := (x >> 24) & 1
+ if p == 0 && w == 1 {
+ return nil
+ }
+ sign := int8(+1)
+ if u == 0 {
+ sign = -1
+ }
+ mode := AddrMode(uint8(p<<1) | uint8(w^1))
+ return Mem{Base: Rn, Mode: mode, Sign: sign, Index: Rm, Shift: typ, Count: count}
+
+ case arg_mem_R_pm_imm12_offset:
+ // Treat [<Rn>,#+/-<imm12>] like [<Rn>{,#+/-<imm12>}]{!}
+ // by forcing P=1, W=0 (index=false, wback=false).
+ return decodeArg(arg_mem_R_pm_imm12_W, x&^(1<<21)|1<<24)
+
+ case arg_mem_R_pm_imm12_postindex:
+ // Treat [<Rn>],#+/-<imm12> like [<Rn>{,#+/-<imm12>}]{!}
+ // by forcing P=0, W=0 (postindex=true).
+ return decodeArg(arg_mem_R_pm_imm12_W, x&^(1<<24|1<<21))
+
+ case arg_mem_R_pm_imm12_W:
+ Rn := Reg((x >> 16) & (1<<4 - 1))
+ u := (x >> 23) & 1
+ w := (x >> 21) & 1
+ p := (x >> 24) & 1
+ if p == 0 && w == 1 {
+ return nil
+ }
+ sign := int8(+1)
+ if u == 0 {
+ sign = -1
+ }
+ imm := int16(x & (1<<12 - 1))
+ mode := AddrMode(uint8(p<<1) | uint8(w^1))
+ return Mem{Base: Rn, Mode: mode, Offset: int16(sign) * imm}
+
+ case arg_mem_R_pm_imm8_postindex:
+ // Treat [<Rn>],#+/-<imm8> like [<Rn>{,#+/-<imm8>}]{!}
+ // by forcing P=0, W=0 (postindex=true).
+ return decodeArg(arg_mem_R_pm_imm8_W, x&^(1<<24|1<<21))
+
+ case arg_mem_R_pm_imm8_W:
+ Rn := Reg((x >> 16) & (1<<4 - 1))
+ u := (x >> 23) & 1
+ w := (x >> 21) & 1
+ p := (x >> 24) & 1
+ if p == 0 && w == 1 {
+ return nil
+ }
+ sign := int8(+1)
+ if u == 0 {
+ sign = -1
+ }
+ imm := int16((x>>8)&(1<<4-1)<<4 | x&(1<<4-1))
+ mode := AddrMode(uint8(p<<1) | uint8(w^1))
+ return Mem{Base: Rn, Mode: mode, Offset: int16(sign) * imm}
+
+ case arg_mem_R_pm_imm8at0_offset:
+ Rn := Reg((x >> 16) & (1<<4 - 1))
+ u := (x >> 23) & 1
+ sign := int8(+1)
+ if u == 0 {
+ sign = -1
+ }
+ imm := int16(x&(1<<8-1)) << 2
+ return Mem{Base: Rn, Mode: AddrOffset, Offset: int16(sign) * imm}
+
+ case arg_option:
+ return Imm(x & (1<<4 - 1))
+
+ case arg_registers:
+ return RegList(x & (1<<16 - 1))
+
+ case arg_registers2:
+ x &= 1<<16 - 1
+ n := 0
+ for i := 0; i < 16; i++ {
+ if x>>uint(i)&1 != 0 {
+ n++
+ }
+ }
+ if n < 2 {
+ return nil
+ }
+ return RegList(x)
+
+ case arg_registers1:
+ Rt := (x >> 12) & (1<<4 - 1)
+ return RegList(1 << Rt)
+
+ case arg_satimm4:
+ return Imm((x >> 16) & (1<<4 - 1))
+
+ case arg_satimm5:
+ return Imm((x >> 16) & (1<<5 - 1))
+
+ case arg_satimm4m1:
+ return Imm((x>>16)&(1<<4-1) + 1)
+
+ case arg_satimm5m1:
+ return Imm((x>>16)&(1<<5-1) + 1)
+
+ case arg_widthm1:
+ return Imm((x>>16)&(1<<5-1) + 1)
+
+ }
+}
+
+// decodeShift decodes the shift-by-immediate encoded in x.
+func decodeShift(x uint32) (Shift, uint8) {
+ count := (x >> 7) & (1<<5 - 1)
+ typ := Shift((x >> 5) & (1<<2 - 1))
+ switch typ {
+ case ShiftRight, ShiftRightSigned:
+ if count == 0 {
+ count = 32
+ }
+ case RotateRight:
+ if count == 0 {
+ typ = RotateRightExt
+ count = 1
+ }
+ }
+ return typ, uint8(count)
+}
diff --git a/src/cmd/internal/rsc.io/arm/armasm/decode_test.go b/src/cmd/internal/rsc.io/arm/armasm/decode_test.go
new file mode 100644
index 000000000..25a345a88
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/decode_test.go
@@ -0,0 +1,69 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package armasm
+
+import (
+ "encoding/hex"
+ "io/ioutil"
+ "strconv"
+ "strings"
+ "testing"
+)
+
+func TestDecode(t *testing.T) {
+ data, err := ioutil.ReadFile("testdata/decode.txt")
+ if err != nil {
+ t.Fatal(err)
+ }
+ all := string(data)
+ for strings.Contains(all, "\t\t") {
+ all = strings.Replace(all, "\t\t", "\t", -1)
+ }
+ for _, line := range strings.Split(all, "\n") {
+ line = strings.TrimSpace(line)
+ if line == "" || strings.HasPrefix(line, "#") {
+ continue
+ }
+ f := strings.SplitN(line, "\t", 4)
+ i := strings.Index(f[0], "|")
+ if i < 0 {
+ t.Errorf("parsing %q: missing | separator", f[0])
+ continue
+ }
+ if i%2 != 0 {
+ t.Errorf("parsing %q: misaligned | separator", f[0])
+ }
+ size := i / 2
+ code, err := hex.DecodeString(f[0][:i] + f[0][i+1:])
+ if err != nil {
+ t.Errorf("parsing %q: %v", f[0], err)
+ continue
+ }
+ mode, err := strconv.Atoi(f[1])
+ if err != nil {
+ t.Errorf("invalid mode %q in: %s", f[1], line)
+ continue
+ }
+ syntax, asm := f[2], f[3]
+ inst, err := Decode(code, Mode(mode))
+ var out string
+ if err != nil {
+ out = "error: " + err.Error()
+ } else {
+ switch syntax {
+ case "gnu":
+ out = GNUSyntax(inst)
+ case "plan9":
+ out = Plan9Syntax(inst, 0, nil, nil)
+ default:
+ t.Errorf("unknown syntax %q", syntax)
+ continue
+ }
+ }
+ if out != asm || inst.Len != size {
+ t.Errorf("Decode(%s) [%s] = %s, %d, want %s, %d", f[0], syntax, out, inst.Len, asm, size)
+ }
+ }
+}
diff --git a/src/cmd/internal/rsc.io/arm/armasm/ext_test.go b/src/cmd/internal/rsc.io/arm/armasm/ext_test.go
new file mode 100644
index 000000000..b0bd85597
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/ext_test.go
@@ -0,0 +1,614 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Support for testing against external disassembler program.
+// Copied and simplified from rsc.io/x86/x86asm/ext_test.go.
+
+package armasm
+
+import (
+ "bufio"
+ "bytes"
+ "encoding/hex"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "log"
+ "math/rand"
+ "os"
+ "os/exec"
+ "regexp"
+ "runtime"
+ "strings"
+ "testing"
+ "time"
+)
+
+var (
+ printTests = flag.Bool("printtests", false, "print test cases that exercise new code paths")
+ dumpTest = flag.Bool("dump", false, "dump all encodings")
+ mismatch = flag.Bool("mismatch", false, "log allowed mismatches")
+ longTest = flag.Bool("long", false, "long test")
+ keep = flag.Bool("keep", false, "keep object files around")
+ debug = false
+)
+
+// A ExtInst represents a single decoded instruction parsed
+// from an external disassembler's output.
+type ExtInst struct {
+ addr uint32
+ enc [4]byte
+ nenc int
+ text string
+}
+
+func (r ExtInst) String() string {
+ return fmt.Sprintf("%#x: % x: %s", r.addr, r.enc, r.text)
+}
+
+// An ExtDis is a connection between an external disassembler and a test.
+type ExtDis struct {
+ Arch Mode
+ Dec chan ExtInst
+ File *os.File
+ Size int
+ KeepFile bool
+ Cmd *exec.Cmd
+}
+
+// Run runs the given command - the external disassembler - and returns
+// a buffered reader of its standard output.
+func (ext *ExtDis) Run(cmd ...string) (*bufio.Reader, error) {
+ if *keep {
+ log.Printf("%s\n", strings.Join(cmd, " "))
+ }
+ ext.Cmd = exec.Command(cmd[0], cmd[1:]...)
+ out, err := ext.Cmd.StdoutPipe()
+ if err != nil {
+ return nil, fmt.Errorf("stdoutpipe: %v", err)
+ }
+ if err := ext.Cmd.Start(); err != nil {
+ return nil, fmt.Errorf("exec: %v", err)
+ }
+
+ b := bufio.NewReaderSize(out, 1<<20)
+ return b, nil
+}
+
+// Wait waits for the command started with Run to exit.
+func (ext *ExtDis) Wait() error {
+ return ext.Cmd.Wait()
+}
+
+// testExtDis tests a set of byte sequences against an external disassembler.
+// The disassembler is expected to produce the given syntax and be run
+// in the given architecture mode (16, 32, or 64-bit).
+// The extdis function must start the external disassembler
+// and then parse its output, sending the parsed instructions on ext.Dec.
+// The generate function calls its argument f once for each byte sequence
+// to be tested. The generate function itself will be called twice, and it must
+// make the same sequence of calls to f each time.
+// When a disassembly does not match the internal decoding,
+// allowedMismatch determines whether this mismatch should be
+// allowed, or else considered an error.
+func testExtDis(
+ t *testing.T,
+ syntax string,
+ arch Mode,
+ extdis func(ext *ExtDis) error,
+ generate func(f func([]byte)),
+ allowedMismatch func(text string, size int, inst *Inst, dec ExtInst) bool,
+) {
+ start := time.Now()
+ ext := &ExtDis{
+ Dec: make(chan ExtInst),
+ Arch: arch,
+ }
+ errc := make(chan error)
+
+ // First pass: write instructions to input file for external disassembler.
+ file, f, size, err := writeInst(generate)
+ if err != nil {
+ t.Fatal(err)
+ }
+ ext.Size = size
+ ext.File = f
+ defer func() {
+ f.Close()
+ if !*keep {
+ os.Remove(file)
+ }
+ }()
+
+ // Second pass: compare disassembly against our decodings.
+ var (
+ totalTests = 0
+ totalSkips = 0
+ totalErrors = 0
+
+ errors = make([]string, 0, 100) // sampled errors, at most cap
+ )
+ go func() {
+ errc <- extdis(ext)
+ }()
+ generate(func(enc []byte) {
+ dec, ok := <-ext.Dec
+ if !ok {
+ t.Errorf("decoding stream ended early")
+ return
+ }
+ inst, text := disasm(syntax, arch, pad(enc))
+ totalTests++
+ if *dumpTest {
+ fmt.Printf("%x -> %s [%d]\n", enc[:len(enc)], dec.text, dec.nenc)
+ }
+ if text != dec.text || inst.Len != dec.nenc {
+ suffix := ""
+ if allowedMismatch(text, size, &inst, dec) {
+ totalSkips++
+ if !*mismatch {
+ return
+ }
+ suffix += " (allowed mismatch)"
+ }
+ totalErrors++
+ if len(errors) >= cap(errors) {
+ j := rand.Intn(totalErrors)
+ if j >= cap(errors) {
+ return
+ }
+ errors = append(errors[:j], errors[j+1:]...)
+ }
+ errors = append(errors, fmt.Sprintf("decode(%x) = %q, %d, want %q, %d%s", enc, text, inst.Len, dec.text, dec.nenc, suffix))
+ }
+ })
+
+ if *mismatch {
+ totalErrors -= totalSkips
+ }
+
+ for _, b := range errors {
+ t.Log(b)
+ }
+
+ if totalErrors > 0 {
+ t.Fail()
+ }
+ t.Logf("%d test cases, %d expected mismatches, %d failures; %.0f cases/second", totalTests, totalSkips, totalErrors, float64(totalTests)/time.Since(start).Seconds())
+
+ if err := <-errc; err != nil {
+ t.Fatal("external disassembler: %v", err)
+ }
+
+}
+
+const start = 0x8000 // start address of text
+
+// writeInst writes the generated byte sequences to a new file
+// starting at offset start. That file is intended to be the input to
+// the external disassembler.
+func writeInst(generate func(func([]byte))) (file string, f *os.File, size int, err error) {
+ f, err = ioutil.TempFile("", "armasm")
+ if err != nil {
+ return
+ }
+
+ file = f.Name()
+
+ f.Seek(start, 0)
+ w := bufio.NewWriter(f)
+ defer w.Flush()
+ size = 0
+ generate(func(x []byte) {
+ if len(x) > 4 {
+ x = x[:4]
+ }
+ if debug {
+ fmt.Printf("%#x: %x%x\n", start+size, x, zeros[len(x):])
+ }
+ w.Write(x)
+ w.Write(zeros[len(x):])
+ size += len(zeros)
+ })
+ return file, f, size, nil
+}
+
+var zeros = []byte{0, 0, 0, 0}
+
+// pad pads the code sequenc with pops.
+func pad(enc []byte) []byte {
+ if len(enc) < 4 {
+ enc = append(enc[:len(enc):len(enc)], zeros[:4-len(enc)]...)
+ }
+ return enc
+}
+
+// disasm returns the decoded instruction and text
+// for the given source bytes, using the given syntax and mode.
+func disasm(syntax string, mode Mode, src []byte) (inst Inst, text string) {
+ // If printTests is set, we record the coverage value
+ // before and after, and we write out the inputs for which
+ // coverage went up, in the format expected in testdata/decode.text.
+ // This produces a fairly small set of test cases that exercise nearly
+ // all the code.
+ var cover float64
+ if *printTests {
+ cover -= coverage()
+ }
+
+ inst, err := Decode(src, mode)
+ if err != nil {
+ text = "error: " + err.Error()
+ } else {
+ text = inst.String()
+ switch syntax {
+ //case "arm":
+ // text = ARMSyntax(inst)
+ case "gnu":
+ text = GNUSyntax(inst)
+ //case "plan9":
+ // text = Plan9Syntax(inst, 0, nil)
+ default:
+ text = "error: unknown syntax " + syntax
+ }
+ }
+
+ if *printTests {
+ cover += coverage()
+ if cover > 0 {
+ max := len(src)
+ if max > 4 && inst.Len <= 4 {
+ max = 4
+ }
+ fmt.Printf("%x|%x\t%d\t%s\t%s\n", src[:inst.Len], src[inst.Len:max], mode, syntax, text)
+ }
+ }
+
+ return
+}
+
+// coverage returns a floating point number denoting the
+// test coverage until now. The number increases when new code paths are exercised,
+// both in the Go program and in the decoder byte code.
+func coverage() float64 {
+ /*
+ testing.Coverage is not in the main distribution.
+ The implementation, which must go in package testing, is:
+
+ // Coverage reports the current code coverage as a fraction in the range [0, 1].
+ func Coverage() float64 {
+ var n, d int64
+ for _, counters := range cover.Counters {
+ for _, c := range counters {
+ if c > 0 {
+ n++
+ }
+ d++
+ }
+ }
+ if d == 0 {
+ return 0
+ }
+ return float64(n) / float64(d)
+ }
+ */
+
+ var f float64
+ f += testing.Coverage()
+ f += decodeCoverage()
+ return f
+}
+
+func decodeCoverage() float64 {
+ n := 0
+ for _, t := range decoderCover {
+ if t {
+ n++
+ }
+ }
+ return float64(1+n) / float64(1+len(decoderCover))
+}
+
+// Helpers for writing disassembler output parsers.
+
+// hasPrefix reports whether any of the space-separated words in the text s
+// begins with any of the given prefixes.
+func hasPrefix(s string, prefixes ...string) bool {
+ for _, prefix := range prefixes {
+ for s := s; s != ""; {
+ if strings.HasPrefix(s, prefix) {
+ return true
+ }
+ i := strings.Index(s, " ")
+ if i < 0 {
+ break
+ }
+ s = s[i+1:]
+ }
+ }
+ return false
+}
+
+// contains reports whether the text s contains any of the given substrings.
+func contains(s string, substrings ...string) bool {
+ for _, sub := range substrings {
+ if strings.Contains(s, sub) {
+ return true
+ }
+ }
+ return false
+}
+
+// isHex reports whether b is a hexadecimal character (0-9A-Fa-f).
+func isHex(b byte) bool { return b == '0' || unhex[b] > 0 }
+
+// parseHex parses the hexadecimal byte dump in hex,
+// appending the parsed bytes to raw and returning the updated slice.
+// The returned bool signals whether any invalid hex was found.
+// Spaces and tabs between bytes are okay but any other non-hex is not.
+func parseHex(hex []byte, raw []byte) ([]byte, bool) {
+ hex = trimSpace(hex)
+ for j := 0; j < len(hex); {
+ for hex[j] == ' ' || hex[j] == '\t' {
+ j++
+ }
+ if j >= len(hex) {
+ break
+ }
+ if j+2 > len(hex) || !isHex(hex[j]) || !isHex(hex[j+1]) {
+ return nil, false
+ }
+ raw = append(raw, unhex[hex[j]]<<4|unhex[hex[j+1]])
+ j += 2
+ }
+ return raw, true
+}
+
+var unhex = [256]byte{
+ '0': 0,
+ '1': 1,
+ '2': 2,
+ '3': 3,
+ '4': 4,
+ '5': 5,
+ '6': 6,
+ '7': 7,
+ '8': 8,
+ '9': 9,
+ 'A': 10,
+ 'B': 11,
+ 'C': 12,
+ 'D': 13,
+ 'E': 14,
+ 'F': 15,
+ 'a': 10,
+ 'b': 11,
+ 'c': 12,
+ 'd': 13,
+ 'e': 14,
+ 'f': 15,
+}
+
+// index is like bytes.Index(s, []byte(t)) but avoids the allocation.
+func index(s []byte, t string) int {
+ i := 0
+ for {
+ j := bytes.IndexByte(s[i:], t[0])
+ if j < 0 {
+ return -1
+ }
+ i = i + j
+ if i+len(t) > len(s) {
+ return -1
+ }
+ for k := 1; k < len(t); k++ {
+ if s[i+k] != t[k] {
+ goto nomatch
+ }
+ }
+ return i
+ nomatch:
+ i++
+ }
+}
+
+// fixSpace rewrites runs of spaces, tabs, and newline characters into single spaces in s.
+// If s must be rewritten, it is rewritten in place.
+func fixSpace(s []byte) []byte {
+ s = trimSpace(s)
+ for i := 0; i < len(s); i++ {
+ if s[i] == '\t' || s[i] == '\n' || i > 0 && s[i] == ' ' && s[i-1] == ' ' {
+ goto Fix
+ }
+ }
+ return s
+
+Fix:
+ b := s
+ w := 0
+ for i := 0; i < len(s); i++ {
+ c := s[i]
+ if c == '\t' || c == '\n' {
+ c = ' '
+ }
+ if c == ' ' && w > 0 && b[w-1] == ' ' {
+ continue
+ }
+ b[w] = c
+ w++
+ }
+ if w > 0 && b[w-1] == ' ' {
+ w--
+ }
+ return b[:w]
+}
+
+// trimSpace trims leading and trailing space from s, returning a subslice of s.
+func trimSpace(s []byte) []byte {
+ j := len(s)
+ for j > 0 && (s[j-1] == ' ' || s[j-1] == '\t' || s[j-1] == '\n') {
+ j--
+ }
+ i := 0
+ for i < j && (s[i] == ' ' || s[i] == '\t') {
+ i++
+ }
+ return s[i:j]
+}
+
+// pcrel matches instructions using relative addressing mode.
+var (
+ pcrel = regexp.MustCompile(`^((?:.* )?(?:b|bl)x?(?:eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le)?) 0x([0-9a-f]+)$`)
+)
+
+// Generators.
+//
+// The test cases are described as functions that invoke a callback repeatedly,
+// with a new input sequence each time. These helpers make writing those
+// a little easier.
+
+// condCases generates conditional instructions.
+func condCases(t *testing.T) func(func([]byte)) {
+ return func(try func([]byte)) {
+ // All the strides are relatively prime to 2 and therefore to 2²⁸,
+ // so we will not repeat any instructions until we have tried all 2²⁸.
+ // Using a stride other than 1 is meant to visit the instructions in a
+ // pseudorandom order, which gives better variety in the set of
+ // test cases chosen by -printtests.
+ stride := uint32(10007)
+ n := 1 << 28 / 7
+ if testing.Short() {
+ stride = 100003
+ n = 1 << 28 / 1001
+ } else if *longTest {
+ stride = 200000033
+ n = 1 << 28
+ }
+ x := uint32(0)
+ for i := 0; i < n; i++ {
+ enc := (x%15)<<28 | x&(1<<28-1)
+ try([]byte{byte(enc), byte(enc >> 8), byte(enc >> 16), byte(enc >> 24)})
+ x += stride
+ }
+ }
+}
+
+// uncondCases generates unconditional instructions.
+func uncondCases(t *testing.T) func(func([]byte)) {
+ return func(try func([]byte)) {
+ condCases(t)(func(enc []byte) {
+ enc[3] |= 0xF0
+ try(enc)
+ })
+ }
+}
+
+func countBits(x uint32) int {
+ n := 0
+ for ; x != 0; x >>= 1 {
+ n += int(x & 1)
+ }
+ return n
+}
+
+func expandBits(x, m uint32) uint32 {
+ var out uint32
+ for i := uint(0); i < 32; i++ {
+ out >>= 1
+ if m&1 != 0 {
+ out |= (x & 1) << 31
+ x >>= 1
+ }
+ m >>= 1
+ }
+ return out
+}
+
+func tryCondMask(mask, val uint32, try func([]byte)) {
+ n := countBits(^mask)
+ bits := uint32(0)
+ for i := 0; i < 1<<uint(n); i++ {
+ bits += 848251 // arbitrary prime
+ x := val | expandBits(bits, ^mask) | uint32(i)%15<<28
+ try([]byte{byte(x), byte(x >> 8), byte(x >> 16), byte(x >> 24)})
+ }
+}
+
+// vfpCases generates VFP instructions.
+func vfpCases(t *testing.T) func(func([]byte)) {
+ const (
+ vfpmask uint32 = 0xFF00FE10
+ vfp uint32 = 0x0E009A00
+ )
+ return func(try func([]byte)) {
+ tryCondMask(0xff00fe10, 0x0e009a00, try) // standard VFP instruction space
+ tryCondMask(0xffc00f7f, 0x0e000b10, try) // VFP MOV core reg to/from float64 half
+ tryCondMask(0xffe00f7f, 0x0e000a10, try) // VFP MOV core reg to/from float32
+ tryCondMask(0xffef0fff, 0x0ee10a10, try) // VFP MOV core reg to/from cond codes
+ }
+}
+
+// hexCases generates the cases written in hexadecimal in the encoded string.
+// Spaces in 'encoded' separate entire test cases, not individual bytes.
+func hexCases(t *testing.T, encoded string) func(func([]byte)) {
+ return func(try func([]byte)) {
+ for _, x := range strings.Fields(encoded) {
+ src, err := hex.DecodeString(x)
+ if err != nil {
+ t.Errorf("parsing %q: %v", x, err)
+ }
+ try(src)
+ }
+ }
+}
+
+// testdataCases generates the test cases recorded in testdata/decode.txt.
+// It only uses the inputs; it ignores the answers recorded in that file.
+func testdataCases(t *testing.T) func(func([]byte)) {
+ var codes [][]byte
+ data, err := ioutil.ReadFile("testdata/decode.txt")
+ if err != nil {
+ t.Fatal(err)
+ }
+ for _, line := range strings.Split(string(data), "\n") {
+ line = strings.TrimSpace(line)
+ if line == "" || strings.HasPrefix(line, "#") {
+ continue
+ }
+ f := strings.Fields(line)[0]
+ i := strings.Index(f, "|")
+ if i < 0 {
+ t.Errorf("parsing %q: missing | separator", f)
+ continue
+ }
+ if i%2 != 0 {
+ t.Errorf("parsing %q: misaligned | separator", f)
+ }
+ code, err := hex.DecodeString(f[:i] + f[i+1:])
+ if err != nil {
+ t.Errorf("parsing %q: %v", f, err)
+ continue
+ }
+ codes = append(codes, code)
+ }
+
+ return func(try func([]byte)) {
+ for _, code := range codes {
+ try(code)
+ }
+ }
+}
+
+func caller(skip int) string {
+ pc, _, _, _ := runtime.Caller(skip)
+ f := runtime.FuncForPC(pc)
+ name := "?"
+ if f != nil {
+ name = f.Name()
+ if i := strings.LastIndex(name, "."); i >= 0 {
+ name = name[i+1:]
+ }
+ }
+ return name
+}
diff --git a/src/cmd/internal/rsc.io/arm/armasm/gnu.go b/src/cmd/internal/rsc.io/arm/armasm/gnu.go
new file mode 100644
index 000000000..1a97a5a84
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/gnu.go
@@ -0,0 +1,164 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package armasm
+
+import (
+ "bytes"
+ "fmt"
+ "strings"
+)
+
+var saveDot = strings.NewReplacer(
+ ".F16", "_dot_F16",
+ ".F32", "_dot_F32",
+ ".F64", "_dot_F64",
+ ".S32", "_dot_S32",
+ ".U32", "_dot_U32",
+ ".FXS", "_dot_S",
+ ".FXU", "_dot_U",
+ ".32", "_dot_32",
+)
+
+// GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.
+// This form typically matches the syntax defined in the ARM Reference Manual.
+func GNUSyntax(inst Inst) string {
+ var buf bytes.Buffer
+ op := inst.Op.String()
+ op = saveDot.Replace(op)
+ op = strings.Replace(op, ".", "", -1)
+ op = strings.Replace(op, "_dot_", ".", -1)
+ op = strings.ToLower(op)
+ buf.WriteString(op)
+ sep := " "
+ for i, arg := range inst.Args {
+ if arg == nil {
+ break
+ }
+ text := gnuArg(&inst, i, arg)
+ if text == "" {
+ continue
+ }
+ buf.WriteString(sep)
+ sep = ", "
+ buf.WriteString(text)
+ }
+ return buf.String()
+}
+
+func gnuArg(inst *Inst, argIndex int, arg Arg) string {
+ switch inst.Op &^ 15 {
+ case LDRD_EQ, LDREXD_EQ, STRD_EQ:
+ if argIndex == 1 {
+ // second argument in consecutive pair not printed
+ return ""
+ }
+ case STREXD_EQ:
+ if argIndex == 2 {
+ // second argument in consecutive pair not printed
+ return ""
+ }
+ }
+
+ switch arg := arg.(type) {
+ case Imm:
+ switch inst.Op &^ 15 {
+ case BKPT_EQ:
+ return fmt.Sprintf("%#04x", uint32(arg))
+ case SVC_EQ:
+ return fmt.Sprintf("%#08x", uint32(arg))
+ }
+ return fmt.Sprintf("#%d", int32(arg))
+
+ case ImmAlt:
+ return fmt.Sprintf("#%d, %d", arg.Val, arg.Rot)
+
+ case Mem:
+ R := gnuArg(inst, -1, arg.Base)
+ X := ""
+ if arg.Sign != 0 {
+ X = ""
+ if arg.Sign < 0 {
+ X = "-"
+ }
+ X += gnuArg(inst, -1, arg.Index)
+ if arg.Shift == ShiftLeft && arg.Count == 0 {
+ // nothing
+ } else if arg.Shift == RotateRightExt {
+ X += ", rrx"
+ } else {
+ X += fmt.Sprintf(", %s #%d", strings.ToLower(arg.Shift.String()), arg.Count)
+ }
+ } else {
+ X = fmt.Sprintf("#%d", arg.Offset)
+ }
+
+ switch arg.Mode {
+ case AddrOffset:
+ if X == "#0" {
+ return fmt.Sprintf("[%s]", R)
+ }
+ return fmt.Sprintf("[%s, %s]", R, X)
+ case AddrPreIndex:
+ return fmt.Sprintf("[%s, %s]!", R, X)
+ case AddrPostIndex:
+ return fmt.Sprintf("[%s], %s", R, X)
+ case AddrLDM:
+ if X == "#0" {
+ return R
+ }
+ case AddrLDM_WB:
+ if X == "#0" {
+ return R + "!"
+ }
+ }
+ return fmt.Sprintf("[%s Mode(%d) %s]", R, int(arg.Mode), X)
+
+ case PCRel:
+ return fmt.Sprintf(".%+#x", int32(arg)+4)
+
+ case Reg:
+ switch inst.Op &^ 15 {
+ case LDREX_EQ:
+ if argIndex == 0 {
+ return fmt.Sprintf("r%d", int32(arg))
+ }
+ }
+ switch arg {
+ case R10:
+ return "sl"
+ case R11:
+ return "fp"
+ case R12:
+ return "ip"
+ }
+
+ case RegList:
+ var buf bytes.Buffer
+ fmt.Fprintf(&buf, "{")
+ sep := ""
+ for i := 0; i < 16; i++ {
+ if arg&(1<<uint(i)) != 0 {
+ fmt.Fprintf(&buf, "%s%s", sep, gnuArg(inst, -1, Reg(i)))
+ sep = ", "
+ }
+ }
+ fmt.Fprintf(&buf, "}")
+ return buf.String()
+
+ case RegShift:
+ if arg.Shift == ShiftLeft && arg.Count == 0 {
+ return gnuArg(inst, -1, arg.Reg)
+ }
+ if arg.Shift == RotateRightExt {
+ return gnuArg(inst, -1, arg.Reg) + ", rrx"
+ }
+ return fmt.Sprintf("%s, %s #%d", gnuArg(inst, -1, arg.Reg), strings.ToLower(arg.Shift.String()), arg.Count)
+
+ case RegShiftReg:
+ return fmt.Sprintf("%s, %s %s", gnuArg(inst, -1, arg.Reg), strings.ToLower(arg.Shift.String()), gnuArg(inst, -1, arg.RegCount))
+
+ }
+ return strings.ToLower(arg.String())
+}
diff --git a/src/cmd/internal/rsc.io/arm/armasm/inst.go b/src/cmd/internal/rsc.io/arm/armasm/inst.go
new file mode 100644
index 000000000..60d633bdb
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/inst.go
@@ -0,0 +1,438 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package armasm
+
+import (
+ "bytes"
+ "fmt"
+)
+
+// A Mode is an instruction execution mode.
+type Mode int
+
+const (
+ _ Mode = iota
+ ModeARM
+ ModeThumb
+)
+
+func (m Mode) String() string {
+ switch m {
+ case ModeARM:
+ return "ARM"
+ case ModeThumb:
+ return "Thumb"
+ }
+ return fmt.Sprintf("Mode(%d)", int(m))
+}
+
+// An Op is an ARM opcode.
+type Op uint16
+
+// NOTE: The actual Op values are defined in tables.go.
+// They are chosen to simplify instruction decoding and
+// are not a dense packing from 0 to N, although the
+// density is high, probably at least 90%.
+
+func (op Op) String() string {
+ if op >= Op(len(opstr)) || opstr[op] == "" {
+ return fmt.Sprintf("Op(%d)", int(op))
+ }
+ return opstr[op]
+}
+
+// An Inst is a single instruction.
+type Inst struct {
+ Op Op // Opcode mnemonic
+ Enc uint32 // Raw encoding bits.
+ Len int // Length of encoding in bytes.
+ Args Args // Instruction arguments, in ARM manual order.
+}
+
+func (i Inst) String() string {
+ var buf bytes.Buffer
+ buf.WriteString(i.Op.String())
+ for j, arg := range i.Args {
+ if arg == nil {
+ break
+ }
+ if j == 0 {
+ buf.WriteString(" ")
+ } else {
+ buf.WriteString(", ")
+ }
+ buf.WriteString(arg.String())
+ }
+ return buf.String()
+}
+
+// An Args holds the instruction arguments.
+// If an instruction has fewer than 4 arguments,
+// the final elements in the array are nil.
+type Args [4]Arg
+
+// An Arg is a single instruction argument, one of these types:
+// Endian, Imm, Mem, PCRel, Reg, RegList, RegShift, RegShiftReg.
+type Arg interface {
+ IsArg()
+ String() string
+}
+
+type Float32Imm float32
+
+func (Float32Imm) IsArg() {}
+
+func (f Float32Imm) String() string {
+ return fmt.Sprintf("#%v", float32(f))
+}
+
+type Float64Imm float32
+
+func (Float64Imm) IsArg() {}
+
+func (f Float64Imm) String() string {
+ return fmt.Sprintf("#%v", float64(f))
+}
+
+// An Imm is an integer constant.
+type Imm uint32
+
+func (Imm) IsArg() {}
+
+func (i Imm) String() string {
+ return fmt.Sprintf("#%#x", uint32(i))
+}
+
+// A ImmAlt is an alternate encoding of an integer constant.
+type ImmAlt struct {
+ Val uint8
+ Rot uint8
+}
+
+func (ImmAlt) IsArg() {}
+
+func (i ImmAlt) Imm() Imm {
+ v := uint32(i.Val)
+ r := uint(i.Rot)
+ return Imm(v>>r | v<<(32-r))
+}
+
+func (i ImmAlt) String() string {
+ return fmt.Sprintf("#%#x, %d", i.Val, i.Rot)
+}
+
+// A Label is a text (code) address.
+type Label uint32
+
+func (Label) IsArg() {}
+
+func (i Label) String() string {
+ return fmt.Sprintf("%#x", uint32(i))
+}
+
+// A Reg is a single register.
+// The zero value denotes R0, not the absence of a register.
+type Reg uint8
+
+const (
+ R0 Reg = iota
+ R1
+ R2
+ R3
+ R4
+ R5
+ R6
+ R7
+ R8
+ R9
+ R10
+ R11
+ R12
+ R13
+ R14
+ R15
+
+ S0
+ S1
+ S2
+ S3
+ S4
+ S5
+ S6
+ S7
+ S8
+ S9
+ S10
+ S11
+ S12
+ S13
+ S14
+ S15
+ S16
+ S17
+ S18
+ S19
+ S20
+ S21
+ S22
+ S23
+ S24
+ S25
+ S26
+ S27
+ S28
+ S29
+ S30
+ S31
+
+ D0
+ D1
+ D2
+ D3
+ D4
+ D5
+ D6
+ D7
+ D8
+ D9
+ D10
+ D11
+ D12
+ D13
+ D14
+ D15
+ D16
+ D17
+ D18
+ D19
+ D20
+ D21
+ D22
+ D23
+ D24
+ D25
+ D26
+ D27
+ D28
+ D29
+ D30
+ D31
+
+ APSR
+ APSR_nzcv
+ FPSCR
+
+ SP = R13
+ LR = R14
+ PC = R15
+)
+
+func (Reg) IsArg() {}
+
+func (r Reg) String() string {
+ switch r {
+ case APSR:
+ return "APSR"
+ case APSR_nzcv:
+ return "APSR_nzcv"
+ case FPSCR:
+ return "FPSCR"
+ case SP:
+ return "SP"
+ case PC:
+ return "PC"
+ case LR:
+ return "LR"
+ }
+ if R0 <= r && r <= R15 {
+ return fmt.Sprintf("R%d", int(r-R0))
+ }
+ if S0 <= r && r <= S31 {
+ return fmt.Sprintf("S%d", int(r-S0))
+ }
+ if D0 <= r && r <= D31 {
+ return fmt.Sprintf("D%d", int(r-D0))
+ }
+ return fmt.Sprintf("Reg(%d)", int(r))
+}
+
+// A RegX represents a fraction of a multi-value register.
+// The Index field specifies the index number,
+// but the size of the fraction is not specified.
+// It must be inferred from the instruction and the register type.
+// For example, in a VMOV instruction, RegX{D5, 1} represents
+// the top 32 bits of the 64-bit D5 register.
+type RegX struct {
+ Reg Reg
+ Index int
+}
+
+func (RegX) IsArg() {}
+
+func (r RegX) String() string {
+ return fmt.Sprintf("%s[%d]", r.Reg, r.Index)
+}
+
+// A RegList is a register list.
+// Bits at indexes x = 0 through 15 indicate whether the corresponding Rx register is in the list.
+type RegList uint16
+
+func (RegList) IsArg() {}
+
+func (r RegList) String() string {
+ var buf bytes.Buffer
+ fmt.Fprintf(&buf, "{")
+ sep := ""
+ for i := 0; i < 16; i++ {
+ if r&(1<<uint(i)) != 0 {
+ fmt.Fprintf(&buf, "%s%s", sep, Reg(i).String())
+ sep = ","
+ }
+ }
+ fmt.Fprintf(&buf, "}")
+ return buf.String()
+}
+
+// An Endian is the argument to the SETEND instruction.
+type Endian uint8
+
+const (
+ LittleEndian Endian = 0
+ BigEndian Endian = 1
+)
+
+func (Endian) IsArg() {}
+
+func (e Endian) String() string {
+ if e != 0 {
+ return "BE"
+ }
+ return "LE"
+}
+
+// A Shift describes an ARM shift operation.
+type Shift uint8
+
+const (
+ ShiftLeft Shift = 0 // left shift
+ ShiftRight Shift = 1 // logical (unsigned) right shift
+ ShiftRightSigned Shift = 2 // arithmetic (signed) right shift
+ RotateRight Shift = 3 // right rotate
+ RotateRightExt Shift = 4 // right rotate through carry (Count will always be 1)
+)
+
+var shiftName = [...]string{
+ "LSL", "LSR", "ASR", "ROR", "RRX",
+}
+
+func (s Shift) String() string {
+ if s < 5 {
+ return shiftName[s]
+ }
+ return fmt.Sprintf("Shift(%d)", int(s))
+}
+
+// A RegShift is a register shifted by a constant.
+type RegShift struct {
+ Reg Reg
+ Shift Shift
+ Count uint8
+}
+
+func (RegShift) IsArg() {}
+
+func (r RegShift) String() string {
+ return fmt.Sprintf("%s %s #%d", r.Reg, r.Shift, r.Count)
+}
+
+// A RegShiftReg is a register shifted by a register.
+type RegShiftReg struct {
+ Reg Reg
+ Shift Shift
+ RegCount Reg
+}
+
+func (RegShiftReg) IsArg() {}
+
+func (r RegShiftReg) String() string {
+ return fmt.Sprintf("%s %s %s", r.Reg, r.Shift, r.RegCount)
+}
+
+// A PCRel describes a memory address (usually a code label)
+// as a distance relative to the program counter.
+// TODO(rsc): Define which program counter (PC+4? PC+8? PC?).
+type PCRel int32
+
+func (PCRel) IsArg() {}
+
+func (r PCRel) String() string {
+ return fmt.Sprintf("PC%+#x", int32(r))
+}
+
+// An AddrMode is an ARM addressing mode.
+type AddrMode uint8
+
+const (
+ _ AddrMode = iota
+ AddrPostIndex // [R], X – use address R, set R = R + X
+ AddrPreIndex // [R, X]! – use address R + X, set R = R + X
+ AddrOffset // [R, X] – use address R + X
+ AddrLDM // R – [R] but formats as R, for LDM/STM only
+ AddrLDM_WB // R! - [R], X where X is instruction-specific amount, for LDM/STM only
+)
+
+// A Mem is a memory reference made up of a base R and index expression X.
+// The effective memory address is R or R+X depending on AddrMode.
+// The index expression is X = Sign*(Index Shift Count) + Offset,
+// but in any instruction either Sign = 0 or Offset = 0.
+type Mem struct {
+ Base Reg
+ Mode AddrMode
+ Sign int8
+ Index Reg
+ Shift Shift
+ Count uint8
+ Offset int16
+}
+
+func (Mem) IsArg() {}
+
+func (m Mem) String() string {
+ R := m.Base.String()
+ X := ""
+ if m.Sign != 0 {
+ X = "+"
+ if m.Sign < 0 {
+ X = "-"
+ }
+ X += m.Index.String()
+ if m.Shift != ShiftLeft || m.Count != 0 {
+ X += fmt.Sprintf(", %s #%d", m.Shift, m.Count)
+ }
+ } else {
+ X = fmt.Sprintf("#%d", m.Offset)
+ }
+
+ switch m.Mode {
+ case AddrOffset:
+ if X == "#0" {
+ return fmt.Sprintf("[%s]", R)
+ }
+ return fmt.Sprintf("[%s, %s]", R, X)
+ case AddrPreIndex:
+ return fmt.Sprintf("[%s, %s]!", R, X)
+ case AddrPostIndex:
+ return fmt.Sprintf("[%s], %s", R, X)
+ case AddrLDM:
+ if X == "#0" {
+ return R
+ }
+ case AddrLDM_WB:
+ if X == "#0" {
+ return R + "!"
+ }
+ }
+ return fmt.Sprintf("[%s Mode(%d) %s]", R, int(m.Mode), X)
+}
diff --git a/src/cmd/internal/rsc.io/arm/armasm/objdump_test.go b/src/cmd/internal/rsc.io/arm/armasm/objdump_test.go
new file mode 100644
index 000000000..00a00e7dd
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/objdump_test.go
@@ -0,0 +1,258 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package armasm
+
+import (
+ "encoding/binary"
+ "strings"
+ "testing"
+)
+
+func TestObjdumpARMTestdata(t *testing.T) { testObjdumpARM(t, testdataCases(t)) }
+func TestObjdumpARMManual(t *testing.T) { testObjdumpARM(t, hexCases(t, objdumpManualTests)) }
+func TestObjdumpARMCond(t *testing.T) { testObjdumpARM(t, condCases(t)) }
+func TestObjdumpARMUncond(t *testing.T) { testObjdumpARM(t, uncondCases(t)) }
+func TestObjdumpARMVFP(t *testing.T) { testObjdumpARM(t, vfpCases(t)) }
+
+// objdumpManualTests holds test cases that will be run by TestObjdumpARMManual.
+// If you are debugging a few cases that turned up in a longer run, it can be useful
+// to list them here and then use -run=Manual, particularly with tracing enabled.
+// Note that these are byte sequences, so they must be reversed from the usual
+// word presentation.
+var objdumpManualTests = `
+00000000
+`
+
+// allowedMismatchObjdump reports whether the mismatch between text and dec
+// should be allowed by the test.
+func allowedMismatchObjdump(text string, size int, inst *Inst, dec ExtInst) bool {
+ if hasPrefix(text, "error:") {
+ if hasPrefix(dec.text, unsupported...) || strings.Contains(dec.text, "invalid:") || strings.HasSuffix(dec.text, "^") || strings.Contains(dec.text, "f16.f64") || strings.Contains(dec.text, "f64.f16") {
+ return true
+ }
+ // word 4320F02C: libopcodes says 'nopmi {44}'.
+ if hasPrefix(dec.text, "nop") && strings.Contains(dec.text, "{") {
+ return true
+ }
+ }
+
+ if hasPrefix(dec.text, "error:") && text == "undef" && inst.Enc == 0xf7fabcfd {
+ return true
+ }
+
+ // word 00f02053: libopcodes says 'noppl {0}'.
+ if hasPrefix(dec.text, "nop") && hasPrefix(text, "nop") && dec.text == text+" {0}" {
+ return true
+ }
+
+ // word F57FF04F. we say 'dsb #15', libopcodes says 'dsb sy'.
+ if hasPrefix(text, "dsb") && hasPrefix(dec.text, "dsb") {
+ return true
+ }
+ // word F57FF06F. we say 'isb #15', libopcodes says 'isb sy'.
+ if hasPrefix(text, "isb") && hasPrefix(dec.text, "isb") {
+ return true
+ }
+ // word F57FF053. we say 'dmb #3', libopcodes says 'dmb osh'.
+ if hasPrefix(text, "dmb") && hasPrefix(dec.text, "dmb") {
+ return true
+ }
+
+ // word 992D0000. push/stmdb with no registers (undefined).
+ // we say 'stmdbls sp!, {}', libopcodes says 'pushls {}'.
+ if hasPrefix(text, "stmdb") && hasPrefix(dec.text, "push") && strings.Contains(text, "{}") && strings.Contains(dec.text, "{}") {
+ return true
+ }
+
+ // word 28BD0000. pop/ldm with no registers (undefined).
+ // we say 'ldmcs sp!, {}', libopcodes says 'popcs {}'.
+ if hasPrefix(text, "ldm") && hasPrefix(dec.text, "pop") && strings.Contains(text, "{}") && strings.Contains(dec.text, "{}") {
+ return true
+ }
+
+ // word 014640F0.
+ // libopcodes emits #-0 for negative zero; we don't.
+ if strings.Replace(dec.text, "#-0", "#0", -1) == text || strings.Replace(dec.text, ", #-0", "", -1) == text {
+ return true
+ }
+
+ // word 91EF90F0. we say 'strdls r9, [pc, #0]!' but libopcodes says 'strdls r9, [pc]'.
+ // word D16F60F0. we say 'strdle r6, [pc, #0]!' but libopcodes says 'strdle r6, [pc, #-0]'.
+ if strings.Replace(text, ", #0]!", "]", -1) == strings.Replace(dec.text, ", #-0]", "]", -1) {
+ return true
+ }
+
+ // word 510F4000. we say apsr, libopcodes says CPSR.
+ if strings.Replace(dec.text, "CPSR", "apsr", -1) == text {
+ return true
+ }
+
+ // word 06A4B059.
+ // for ssat and usat, libopcodes decodes asr #0 as asr #0 but the manual seems to say it should be asr #32.
+ // There is never an asr #0.
+ if strings.Replace(dec.text, ", asr #0", ", asr #32", -1) == text {
+ return true
+ }
+
+ if len(dec.enc) >= 4 {
+ raw := binary.LittleEndian.Uint32(dec.enc[:4])
+
+ // word 21FFF0B5.
+ // the manual is clear that this is pre-indexed mode (with !) but libopcodes generates post-index (without !).
+ if raw&0x01200000 == 0x01200000 && strings.Replace(text, "!", "", -1) == dec.text {
+ return true
+ }
+
+ // word C100543E: libopcodes says tst, but no evidence for that.
+ if strings.HasPrefix(dec.text, "tst") && raw&0x0ff00000 != 0x03100000 && raw&0x0ff00000 != 0x01100000 {
+ return true
+ }
+
+ // word C3203CE8: libopcodes says teq, but no evidence for that.
+ if strings.HasPrefix(dec.text, "teq") && raw&0x0ff00000 != 0x03300000 && raw&0x0ff00000 != 0x01300000 {
+ return true
+ }
+
+ // word D14C552E: libopcodes says cmp but no evidence for that.
+ if strings.HasPrefix(dec.text, "cmp") && raw&0x0ff00000 != 0x03500000 && raw&0x0ff00000 != 0x01500000 {
+ return true
+ }
+
+ // word 2166AA4A: libopcodes says cmn but no evidence for that.
+ if strings.HasPrefix(dec.text, "cmn") && raw&0x0ff00000 != 0x03700000 && raw&0x0ff00000 != 0x01700000 {
+ return true
+ }
+
+ // word E70AEEEF: libopcodes says str but no evidence for that.
+ if strings.HasPrefix(dec.text, "str") && len(dec.text) >= 5 && (dec.text[3] == ' ' || dec.text[5] == ' ') && raw&0x0e500018 != 0x06000000 && raw&0x0e500000 != 0x0400000 {
+ return true
+ }
+
+ // word B0AF48F4: libopcodes says strd but P=0,W=1 which is unpredictable.
+ if hasPrefix(dec.text, "ldr", "str") && raw&0x01200000 == 0x00200000 {
+ return true
+ }
+
+ // word B6CC1C76: libopcodes inexplicably says 'uxtab16lt r1, ip, r6, ROR #24' instead of 'uxtab16lt r1, ip, r6, ror #24'
+ if strings.ToLower(dec.text) == text {
+ return true
+ }
+
+ // word F410FDA1: libopcodes says PLDW but the manual is clear that PLDW is F5/F7, not F4.
+ // word F7D0FB17: libopcodes says PLDW but the manual is clear that PLDW has 0x10 clear
+ if hasPrefix(dec.text, "pld") && raw&0xfd000010 != 0xf5000000 {
+ return true
+ }
+
+ // word F650FE14: libopcodes says PLI but the manual is clear that PLI has 0x10 clear
+ if hasPrefix(dec.text, "pli") && raw&0xff000010 != 0xf6000000 {
+ return true
+ }
+ }
+
+ return false
+}
+
+// Instructions known to libopcodes (or xed) but not to us.
+// Most of these are floating point coprocessor instructions.
+var unsupported = strings.Fields(`
+ abs
+ acs
+ adf
+ aes
+ asn
+ atn
+ cdp
+ cf
+ cmf
+ cnf
+ cos
+ cps
+ crc32
+ dvf
+ eret
+ exp
+ fadd
+ fcmp
+ fcpy
+ fcvt
+ fdiv
+ fdv
+ fix
+ fld
+ flt
+ fmac
+ fmd
+ fml
+ fmr
+ fms
+ fmul
+ fmx
+ fneg
+ fnm
+ frd
+ fsit
+ fsq
+ fst
+ fsu
+ fto
+ fui
+ hlt
+ hvc
+ lda
+ ldc
+ ldf
+ lfm
+ lgn
+ log
+ mar
+ mcr
+ mcrr
+ mia
+ mnf
+ mra
+ mrc
+ mrrc
+ mrs
+ msr
+ msr
+ muf
+ mvf
+ nrm
+ pol
+ pow
+ rdf
+ rfc
+ rfe
+ rfs
+ rmf
+ rnd
+ rpw
+ rsf
+ sdiv
+ sev
+ sfm
+ sha1
+ sha256
+ sin
+ smc
+ sqt
+ srs
+ stc
+ stf
+ stl
+ suf
+ tan
+ udf
+ udiv
+ urd
+ vfma
+ vfms
+ vfnma
+ vfnms
+ vrint
+ wfc
+ wfs
+`)
diff --git a/src/cmd/internal/rsc.io/arm/armasm/objdumpext_test.go b/src/cmd/internal/rsc.io/arm/armasm/objdumpext_test.go
new file mode 100644
index 000000000..d88c67fc0
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/objdumpext_test.go
@@ -0,0 +1,260 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Copied and simplified from rsc.io/x86/x86asm/objdumpext_test.go.
+
+package armasm
+
+import (
+ "bytes"
+ "debug/elf"
+ "encoding/binary"
+ "fmt"
+ "io"
+ "log"
+ "os"
+ "strconv"
+ "strings"
+ "testing"
+)
+
+const objdumpPath = "/usr/local/bin/arm-linux-elf-objdump"
+
+func testObjdumpARM(t *testing.T, generate func(func([]byte))) {
+ testObjdumpArch(t, generate, ModeARM)
+}
+
+func testObjdumpArch(t *testing.T, generate func(func([]byte)), arch Mode) {
+ if testing.Short() {
+ t.Skip("skipping objdump test in short mode")
+ }
+
+ if _, err := os.Stat(objdumpPath); err != nil {
+ t.Fatal(err)
+ }
+
+ testExtDis(t, "gnu", arch, objdump, generate, allowedMismatchObjdump)
+}
+
+func objdump(ext *ExtDis) error {
+ // File already written with instructions; add ELF header.
+ if ext.Arch == ModeARM {
+ if err := writeELF32(ext.File, ext.Size); err != nil {
+ return err
+ }
+ } else {
+ panic("unknown arch")
+ }
+
+ b, err := ext.Run(objdumpPath, "-d", "-z", ext.File.Name())
+ if err != nil {
+ return err
+ }
+
+ var (
+ nmatch int
+ reading bool
+ next uint32 = start
+ addr uint32
+ encbuf [4]byte
+ enc []byte
+ text string
+ )
+ flush := func() {
+ if addr == next {
+ if m := pcrel.FindStringSubmatch(text); m != nil {
+ targ, _ := strconv.ParseUint(m[2], 16, 64)
+ text = fmt.Sprintf("%s .%+#x", m[1], int32(uint32(targ)-addr-uint32(len(enc))))
+ }
+ if strings.HasPrefix(text, "stmia") {
+ text = "stm" + text[5:]
+ }
+ if strings.HasPrefix(text, "stmfd") {
+ text = "stmdb" + text[5:]
+ }
+ if strings.HasPrefix(text, "ldmfd") {
+ text = "ldm" + text[5:]
+ }
+ text = strings.Replace(text, "#0.0", "#0", -1)
+ if text == "undefined" && len(enc) == 4 {
+ text = "error: unknown instruction"
+ enc = nil
+ }
+ if len(enc) == 4 {
+ // prints as word but we want to record bytes
+ enc[0], enc[3] = enc[3], enc[0]
+ enc[1], enc[2] = enc[2], enc[1]
+ }
+ ext.Dec <- ExtInst{addr, encbuf, len(enc), text}
+ encbuf = [4]byte{}
+ enc = nil
+ next += 4
+ }
+ }
+ var textangle = []byte("<.text>:")
+ for {
+ line, err := b.ReadSlice('\n')
+ if err != nil {
+ if err == io.EOF {
+ break
+ }
+ return fmt.Errorf("reading objdump output: %v", err)
+ }
+ if bytes.Contains(line, textangle) {
+ reading = true
+ continue
+ }
+ if !reading {
+ continue
+ }
+ if debug {
+ os.Stdout.Write(line)
+ }
+ if enc1 := parseContinuation(line, encbuf[:len(enc)]); enc1 != nil {
+ enc = enc1
+ continue
+ }
+ flush()
+ nmatch++
+ addr, enc, text = parseLine(line, encbuf[:0])
+ if addr > next {
+ return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line)
+ }
+ }
+ flush()
+ if next != start+uint32(ext.Size) {
+ return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size)
+ }
+ if err := ext.Wait(); err != nil {
+ return fmt.Errorf("exec: %v", err)
+ }
+
+ return nil
+}
+
+var (
+ undefined = []byte("<UNDEFINED>")
+ unpredictable = []byte("<UNPREDICTABLE>")
+ illegalShifter = []byte("<illegal shifter operand>")
+)
+
+func parseLine(line []byte, encstart []byte) (addr uint32, enc []byte, text string) {
+ oline := line
+ i := index(line, ":\t")
+ if i < 0 {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ x, err := strconv.ParseUint(string(trimSpace(line[:i])), 16, 32)
+ if err != nil {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ addr = uint32(x)
+ line = line[i+2:]
+ i = bytes.IndexByte(line, '\t')
+ if i < 0 {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ enc, ok := parseHex(line[:i], encstart)
+ if !ok {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ line = trimSpace(line[i:])
+ if bytes.Contains(line, undefined) {
+ text = "undefined"
+ return
+ }
+ if bytes.Contains(line, illegalShifter) {
+ text = "undefined"
+ return
+ }
+ if false && bytes.Contains(line, unpredictable) {
+ text = "unpredictable"
+ return
+ }
+ if i := bytes.IndexByte(line, ';'); i >= 0 {
+ line = trimSpace(line[:i])
+ }
+ text = string(fixSpace(line))
+ return
+}
+
+func parseContinuation(line []byte, enc []byte) []byte {
+ i := index(line, ":\t")
+ if i < 0 {
+ return nil
+ }
+ line = line[i+1:]
+ enc, _ = parseHex(line, enc)
+ return enc
+}
+
+// writeELF32 writes an ELF32 header to the file,
+// describing a text segment that starts at start
+// and extends for size bytes.
+func writeELF32(f *os.File, size int) error {
+ f.Seek(0, 0)
+ var hdr elf.Header32
+ var prog elf.Prog32
+ var sect elf.Section32
+ var buf bytes.Buffer
+ binary.Write(&buf, binary.LittleEndian, &hdr)
+ off1 := buf.Len()
+ binary.Write(&buf, binary.LittleEndian, &prog)
+ off2 := buf.Len()
+ binary.Write(&buf, binary.LittleEndian, &sect)
+ off3 := buf.Len()
+ buf.Reset()
+ data := byte(elf.ELFDATA2LSB)
+ hdr = elf.Header32{
+ Ident: [16]byte{0x7F, 'E', 'L', 'F', 1, data, 1},
+ Type: 2,
+ Machine: uint16(elf.EM_ARM),
+ Version: 1,
+ Entry: start,
+ Phoff: uint32(off1),
+ Shoff: uint32(off2),
+ Flags: 0x05000002,
+ Ehsize: uint16(off1),
+ Phentsize: uint16(off2 - off1),
+ Phnum: 1,
+ Shentsize: uint16(off3 - off2),
+ Shnum: 3,
+ Shstrndx: 2,
+ }
+ binary.Write(&buf, binary.LittleEndian, &hdr)
+ prog = elf.Prog32{
+ Type: 1,
+ Off: start,
+ Vaddr: start,
+ Paddr: start,
+ Filesz: uint32(size),
+ Memsz: uint32(size),
+ Flags: 5,
+ Align: start,
+ }
+ binary.Write(&buf, binary.LittleEndian, &prog)
+ binary.Write(&buf, binary.LittleEndian, &sect) // NULL section
+ sect = elf.Section32{
+ Name: 1,
+ Type: uint32(elf.SHT_PROGBITS),
+ Addr: start,
+ Off: start,
+ Size: uint32(size),
+ Flags: uint32(elf.SHF_ALLOC | elf.SHF_EXECINSTR),
+ Addralign: 4,
+ }
+ binary.Write(&buf, binary.LittleEndian, &sect) // .text
+ sect = elf.Section32{
+ Name: uint32(len("\x00.text\x00")),
+ Type: uint32(elf.SHT_STRTAB),
+ Addr: 0,
+ Off: uint32(off2 + (off3-off2)*3),
+ Size: uint32(len("\x00.text\x00.shstrtab\x00")),
+ Addralign: 1,
+ }
+ binary.Write(&buf, binary.LittleEndian, &sect)
+ buf.WriteString("\x00.text\x00.shstrtab\x00")
+ f.Write(buf.Bytes())
+ return nil
+}
diff --git a/src/cmd/internal/rsc.io/arm/armasm/plan9x.go b/src/cmd/internal/rsc.io/arm/armasm/plan9x.go
new file mode 100644
index 000000000..952c5190b
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/plan9x.go
@@ -0,0 +1,211 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package armasm
+
+import (
+ "bytes"
+ "encoding/binary"
+ "fmt"
+ "io"
+ "strings"
+)
+
+// Plan9Syntax returns the Go assembler syntax for the instruction.
+// The syntax was originally defined by Plan 9.
+// The pc is the program counter of the instruction, used for expanding
+// PC-relative addresses into absolute ones.
+// The symname function queries the symbol table for the program
+// being disassembled. Given a target address it returns the name and base
+// address of the symbol containing the target, if any; otherwise it returns "", 0.
+// The reader r should read from the text segment using text addresses
+// as offsets; it is used to display pc-relative loads as constant loads.
+func Plan9Syntax(inst Inst, pc uint64, symname func(uint64) (string, uint64), text io.ReaderAt) string {
+ if symname == nil {
+ symname = func(uint64) (string, uint64) { return "", 0 }
+ }
+
+ var args []string
+ for _, a := range inst.Args {
+ if a == nil {
+ break
+ }
+ args = append(args, plan9Arg(&inst, pc, symname, a))
+ }
+
+ op := inst.Op.String()
+
+ switch inst.Op &^ 15 {
+ case LDR_EQ, LDRB_EQ, LDRH_EQ:
+ // Check for RET
+ reg, _ := inst.Args[0].(Reg)
+ mem, _ := inst.Args[1].(Mem)
+ if inst.Op&^15 == LDR_EQ && reg == R15 && mem.Base == SP && mem.Sign == 0 && mem.Mode == AddrPostIndex {
+ return fmt.Sprintf("RET%s #%d", op[3:], mem.Offset)
+ }
+
+ // Check for PC-relative load.
+ if mem.Base == PC && mem.Sign == 0 && mem.Mode == AddrOffset && text != nil {
+ addr := uint32(pc) + 8 + uint32(mem.Offset)
+ buf := make([]byte, 4)
+ switch inst.Op &^ 15 {
+ case LDRB_EQ:
+ if _, err := text.ReadAt(buf[:1], int64(addr)); err != nil {
+ break
+ }
+ args[1] = fmt.Sprintf("$%#x", buf[0])
+
+ case LDRH_EQ:
+ if _, err := text.ReadAt(buf[:2], int64(addr)); err != nil {
+ break
+ }
+ args[1] = fmt.Sprintf("$%#x", binary.LittleEndian.Uint16(buf))
+
+ case LDR_EQ:
+ if _, err := text.ReadAt(buf, int64(addr)); err != nil {
+ break
+ }
+ x := binary.LittleEndian.Uint32(buf)
+ if s, base := symname(uint64(x)); s != "" && uint64(x) == base {
+ args[1] = fmt.Sprintf("$%s(SB)", s)
+ } else {
+ args[1] = fmt.Sprintf("$%#x", x)
+ }
+ }
+ }
+ }
+
+ // Move addressing mode into opcode suffix.
+ suffix := ""
+ switch inst.Op &^ 15 {
+ case LDR_EQ, LDRB_EQ, LDRH_EQ, STR_EQ, STRB_EQ, STRH_EQ:
+ mem, _ := inst.Args[1].(Mem)
+ switch mem.Mode {
+ case AddrOffset, AddrLDM:
+ // no suffix
+ case AddrPreIndex, AddrLDM_WB:
+ suffix = ".W"
+ case AddrPostIndex:
+ suffix = ".P"
+ }
+ off := ""
+ if mem.Offset != 0 {
+ off = fmt.Sprintf("%#x", mem.Offset)
+ }
+ base := fmt.Sprintf("(R%d)", int(mem.Base))
+ index := ""
+ if mem.Sign != 0 {
+ sign := ""
+ if mem.Sign < 0 {
+ sign = ""
+ }
+ shift := ""
+ if mem.Count != 0 {
+ shift = fmt.Sprintf("%s%d", plan9Shift[mem.Shift], mem.Count)
+ }
+ index = fmt.Sprintf("(%sR%d%s)", sign, int(mem.Index), shift)
+ }
+ args[1] = off + base + index
+ }
+
+ // Reverse args, placing dest last.
+ for i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {
+ args[i], args[j] = args[j], args[i]
+ }
+
+ switch inst.Op &^ 15 {
+ case MOV_EQ:
+ op = "MOVW" + op[3:]
+
+ case LDR_EQ:
+ op = "MOVW" + op[3:] + suffix
+ case LDRB_EQ:
+ op = "MOVB" + op[4:] + suffix
+ case LDRH_EQ:
+ op = "MOVH" + op[4:] + suffix
+
+ case STR_EQ:
+ op = "MOVW" + op[3:] + suffix
+ args[0], args[1] = args[1], args[0]
+ case STRB_EQ:
+ op = "MOVB" + op[4:] + suffix
+ args[0], args[1] = args[1], args[0]
+ case STRH_EQ:
+ op = "MOVH" + op[4:] + suffix
+ args[0], args[1] = args[1], args[0]
+ }
+
+ if args != nil {
+ op += " " + strings.Join(args, ", ")
+ }
+
+ return op
+}
+
+// assembler syntax for the various shifts.
+// @x> is a lie; the assembler uses @> 0
+// instead of @x> 1, but i wanted to be clear that it
+// was a different operation (rotate right extended, not rotate right).
+var plan9Shift = []string{"<<", ">>", "->", "@>", "@x>"}
+
+func plan9Arg(inst *Inst, pc uint64, symname func(uint64) (string, uint64), arg Arg) string {
+ switch a := arg.(type) {
+ case Endian:
+
+ case Imm:
+ return fmt.Sprintf("$%d", int(a))
+
+ case Mem:
+
+ case PCRel:
+ addr := uint32(pc) + 8 + uint32(a)
+ if s, base := symname(uint64(addr)); s != "" && uint64(addr) == base {
+ return fmt.Sprintf("%s(SB)", s)
+ }
+ return fmt.Sprintf("%#x", addr)
+
+ case Reg:
+ if a < 16 {
+ return fmt.Sprintf("R%d", int(a))
+ }
+
+ case RegList:
+ var buf bytes.Buffer
+ start := -2
+ end := -2
+ fmt.Fprintf(&buf, "[")
+ flush := func() {
+ if start >= 0 {
+ if buf.Len() > 1 {
+ fmt.Fprintf(&buf, ",")
+ }
+ if start == end {
+ fmt.Fprintf(&buf, "R%d", start)
+ } else {
+ fmt.Fprintf(&buf, "R%d-R%d", start, end)
+ }
+ }
+ }
+ for i := 0; i < 16; i++ {
+ if a&(1<<uint(i)) != 0 {
+ if i == end+1 {
+ end++
+ continue
+ }
+ start = i
+ end = i
+ }
+ }
+ flush()
+ fmt.Fprintf(&buf, "]")
+ return buf.String()
+
+ case RegShift:
+ return fmt.Sprintf("R%d%s$%d", int(a.Reg), plan9Shift[a.Shift], int(a.Count))
+
+ case RegShiftReg:
+ return fmt.Sprintf("R%d%sR%d", int(a.Reg), plan9Shift[a.Shift], int(a.RegCount))
+ }
+ return strings.ToUpper(arg.String())
+}
diff --git a/src/cmd/internal/rsc.io/arm/armasm/tables.go b/src/cmd/internal/rsc.io/arm/armasm/tables.go
new file mode 100644
index 000000000..58f51fe1f
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/tables.go
@@ -0,0 +1,9448 @@
+package armasm
+
+const (
+ _ Op = iota
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ ADC_EQ
+ ADC_NE
+ ADC_CS
+ ADC_CC
+ ADC_MI
+ ADC_PL
+ ADC_VS
+ ADC_VC
+ ADC_HI
+ ADC_LS
+ ADC_GE
+ ADC_LT
+ ADC_GT
+ ADC_LE
+ ADC
+ ADC_ZZ
+ ADC_S_EQ
+ ADC_S_NE
+ ADC_S_CS
+ ADC_S_CC
+ ADC_S_MI
+ ADC_S_PL
+ ADC_S_VS
+ ADC_S_VC
+ ADC_S_HI
+ ADC_S_LS
+ ADC_S_GE
+ ADC_S_LT
+ ADC_S_GT
+ ADC_S_LE
+ ADC_S
+ ADC_S_ZZ
+ ADD_EQ
+ ADD_NE
+ ADD_CS
+ ADD_CC
+ ADD_MI
+ ADD_PL
+ ADD_VS
+ ADD_VC
+ ADD_HI
+ ADD_LS
+ ADD_GE
+ ADD_LT
+ ADD_GT
+ ADD_LE
+ ADD
+ ADD_ZZ
+ ADD_S_EQ
+ ADD_S_NE
+ ADD_S_CS
+ ADD_S_CC
+ ADD_S_MI
+ ADD_S_PL
+ ADD_S_VS
+ ADD_S_VC
+ ADD_S_HI
+ ADD_S_LS
+ ADD_S_GE
+ ADD_S_LT
+ ADD_S_GT
+ ADD_S_LE
+ ADD_S
+ ADD_S_ZZ
+ AND_EQ
+ AND_NE
+ AND_CS
+ AND_CC
+ AND_MI
+ AND_PL
+ AND_VS
+ AND_VC
+ AND_HI
+ AND_LS
+ AND_GE
+ AND_LT
+ AND_GT
+ AND_LE
+ AND
+ AND_ZZ
+ AND_S_EQ
+ AND_S_NE
+ AND_S_CS
+ AND_S_CC
+ AND_S_MI
+ AND_S_PL
+ AND_S_VS
+ AND_S_VC
+ AND_S_HI
+ AND_S_LS
+ AND_S_GE
+ AND_S_LT
+ AND_S_GT
+ AND_S_LE
+ AND_S
+ AND_S_ZZ
+ ASR_EQ
+ ASR_NE
+ ASR_CS
+ ASR_CC
+ ASR_MI
+ ASR_PL
+ ASR_VS
+ ASR_VC
+ ASR_HI
+ ASR_LS
+ ASR_GE
+ ASR_LT
+ ASR_GT
+ ASR_LE
+ ASR
+ ASR_ZZ
+ ASR_S_EQ
+ ASR_S_NE
+ ASR_S_CS
+ ASR_S_CC
+ ASR_S_MI
+ ASR_S_PL
+ ASR_S_VS
+ ASR_S_VC
+ ASR_S_HI
+ ASR_S_LS
+ ASR_S_GE
+ ASR_S_LT
+ ASR_S_GT
+ ASR_S_LE
+ ASR_S
+ ASR_S_ZZ
+ B_EQ
+ B_NE
+ B_CS
+ B_CC
+ B_MI
+ B_PL
+ B_VS
+ B_VC
+ B_HI
+ B_LS
+ B_GE
+ B_LT
+ B_GT
+ B_LE
+ B
+ B_ZZ
+ BFC_EQ
+ BFC_NE
+ BFC_CS
+ BFC_CC
+ BFC_MI
+ BFC_PL
+ BFC_VS
+ BFC_VC
+ BFC_HI
+ BFC_LS
+ BFC_GE
+ BFC_LT
+ BFC_GT
+ BFC_LE
+ BFC
+ BFC_ZZ
+ BFI_EQ
+ BFI_NE
+ BFI_CS
+ BFI_CC
+ BFI_MI
+ BFI_PL
+ BFI_VS
+ BFI_VC
+ BFI_HI
+ BFI_LS
+ BFI_GE
+ BFI_LT
+ BFI_GT
+ BFI_LE
+ BFI
+ BFI_ZZ
+ BIC_EQ
+ BIC_NE
+ BIC_CS
+ BIC_CC
+ BIC_MI
+ BIC_PL
+ BIC_VS
+ BIC_VC
+ BIC_HI
+ BIC_LS
+ BIC_GE
+ BIC_LT
+ BIC_GT
+ BIC_LE
+ BIC
+ BIC_ZZ
+ BIC_S_EQ
+ BIC_S_NE
+ BIC_S_CS
+ BIC_S_CC
+ BIC_S_MI
+ BIC_S_PL
+ BIC_S_VS
+ BIC_S_VC
+ BIC_S_HI
+ BIC_S_LS
+ BIC_S_GE
+ BIC_S_LT
+ BIC_S_GT
+ BIC_S_LE
+ BIC_S
+ BIC_S_ZZ
+ BKPT_EQ
+ BKPT_NE
+ BKPT_CS
+ BKPT_CC
+ BKPT_MI
+ BKPT_PL
+ BKPT_VS
+ BKPT_VC
+ BKPT_HI
+ BKPT_LS
+ BKPT_GE
+ BKPT_LT
+ BKPT_GT
+ BKPT_LE
+ BKPT
+ BKPT_ZZ
+ BL_EQ
+ BL_NE
+ BL_CS
+ BL_CC
+ BL_MI
+ BL_PL
+ BL_VS
+ BL_VC
+ BL_HI
+ BL_LS
+ BL_GE
+ BL_LT
+ BL_GT
+ BL_LE
+ BL
+ BL_ZZ
+ BLX_EQ
+ BLX_NE
+ BLX_CS
+ BLX_CC
+ BLX_MI
+ BLX_PL
+ BLX_VS
+ BLX_VC
+ BLX_HI
+ BLX_LS
+ BLX_GE
+ BLX_LT
+ BLX_GT
+ BLX_LE
+ BLX
+ BLX_ZZ
+ BX_EQ
+ BX_NE
+ BX_CS
+ BX_CC
+ BX_MI
+ BX_PL
+ BX_VS
+ BX_VC
+ BX_HI
+ BX_LS
+ BX_GE
+ BX_LT
+ BX_GT
+ BX_LE
+ BX
+ BX_ZZ
+ BXJ_EQ
+ BXJ_NE
+ BXJ_CS
+ BXJ_CC
+ BXJ_MI
+ BXJ_PL
+ BXJ_VS
+ BXJ_VC
+ BXJ_HI
+ BXJ_LS
+ BXJ_GE
+ BXJ_LT
+ BXJ_GT
+ BXJ_LE
+ BXJ
+ BXJ_ZZ
+ CLREX
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ CLZ_EQ
+ CLZ_NE
+ CLZ_CS
+ CLZ_CC
+ CLZ_MI
+ CLZ_PL
+ CLZ_VS
+ CLZ_VC
+ CLZ_HI
+ CLZ_LS
+ CLZ_GE
+ CLZ_LT
+ CLZ_GT
+ CLZ_LE
+ CLZ
+ CLZ_ZZ
+ CMN_EQ
+ CMN_NE
+ CMN_CS
+ CMN_CC
+ CMN_MI
+ CMN_PL
+ CMN_VS
+ CMN_VC
+ CMN_HI
+ CMN_LS
+ CMN_GE
+ CMN_LT
+ CMN_GT
+ CMN_LE
+ CMN
+ CMN_ZZ
+ CMP_EQ
+ CMP_NE
+ CMP_CS
+ CMP_CC
+ CMP_MI
+ CMP_PL
+ CMP_VS
+ CMP_VC
+ CMP_HI
+ CMP_LS
+ CMP_GE
+ CMP_LT
+ CMP_GT
+ CMP_LE
+ CMP
+ CMP_ZZ
+ DBG_EQ
+ DBG_NE
+ DBG_CS
+ DBG_CC
+ DBG_MI
+ DBG_PL
+ DBG_VS
+ DBG_VC
+ DBG_HI
+ DBG_LS
+ DBG_GE
+ DBG_LT
+ DBG_GT
+ DBG_LE
+ DBG
+ DBG_ZZ
+ DMB
+ DSB
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ EOR_EQ
+ EOR_NE
+ EOR_CS
+ EOR_CC
+ EOR_MI
+ EOR_PL
+ EOR_VS
+ EOR_VC
+ EOR_HI
+ EOR_LS
+ EOR_GE
+ EOR_LT
+ EOR_GT
+ EOR_LE
+ EOR
+ EOR_ZZ
+ EOR_S_EQ
+ EOR_S_NE
+ EOR_S_CS
+ EOR_S_CC
+ EOR_S_MI
+ EOR_S_PL
+ EOR_S_VS
+ EOR_S_VC
+ EOR_S_HI
+ EOR_S_LS
+ EOR_S_GE
+ EOR_S_LT
+ EOR_S_GT
+ EOR_S_LE
+ EOR_S
+ EOR_S_ZZ
+ ISB
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ LDM_EQ
+ LDM_NE
+ LDM_CS
+ LDM_CC
+ LDM_MI
+ LDM_PL
+ LDM_VS
+ LDM_VC
+ LDM_HI
+ LDM_LS
+ LDM_GE
+ LDM_LT
+ LDM_GT
+ LDM_LE
+ LDM
+ LDM_ZZ
+ LDMDA_EQ
+ LDMDA_NE
+ LDMDA_CS
+ LDMDA_CC
+ LDMDA_MI
+ LDMDA_PL
+ LDMDA_VS
+ LDMDA_VC
+ LDMDA_HI
+ LDMDA_LS
+ LDMDA_GE
+ LDMDA_LT
+ LDMDA_GT
+ LDMDA_LE
+ LDMDA
+ LDMDA_ZZ
+ LDMDB_EQ
+ LDMDB_NE
+ LDMDB_CS
+ LDMDB_CC
+ LDMDB_MI
+ LDMDB_PL
+ LDMDB_VS
+ LDMDB_VC
+ LDMDB_HI
+ LDMDB_LS
+ LDMDB_GE
+ LDMDB_LT
+ LDMDB_GT
+ LDMDB_LE
+ LDMDB
+ LDMDB_ZZ
+ LDMIB_EQ
+ LDMIB_NE
+ LDMIB_CS
+ LDMIB_CC
+ LDMIB_MI
+ LDMIB_PL
+ LDMIB_VS
+ LDMIB_VC
+ LDMIB_HI
+ LDMIB_LS
+ LDMIB_GE
+ LDMIB_LT
+ LDMIB_GT
+ LDMIB_LE
+ LDMIB
+ LDMIB_ZZ
+ LDR_EQ
+ LDR_NE
+ LDR_CS
+ LDR_CC
+ LDR_MI
+ LDR_PL
+ LDR_VS
+ LDR_VC
+ LDR_HI
+ LDR_LS
+ LDR_GE
+ LDR_LT
+ LDR_GT
+ LDR_LE
+ LDR
+ LDR_ZZ
+ LDRB_EQ
+ LDRB_NE
+ LDRB_CS
+ LDRB_CC
+ LDRB_MI
+ LDRB_PL
+ LDRB_VS
+ LDRB_VC
+ LDRB_HI
+ LDRB_LS
+ LDRB_GE
+ LDRB_LT
+ LDRB_GT
+ LDRB_LE
+ LDRB
+ LDRB_ZZ
+ LDRBT_EQ
+ LDRBT_NE
+ LDRBT_CS
+ LDRBT_CC
+ LDRBT_MI
+ LDRBT_PL
+ LDRBT_VS
+ LDRBT_VC
+ LDRBT_HI
+ LDRBT_LS
+ LDRBT_GE
+ LDRBT_LT
+ LDRBT_GT
+ LDRBT_LE
+ LDRBT
+ LDRBT_ZZ
+ LDRD_EQ
+ LDRD_NE
+ LDRD_CS
+ LDRD_CC
+ LDRD_MI
+ LDRD_PL
+ LDRD_VS
+ LDRD_VC
+ LDRD_HI
+ LDRD_LS
+ LDRD_GE
+ LDRD_LT
+ LDRD_GT
+ LDRD_LE
+ LDRD
+ LDRD_ZZ
+ LDREX_EQ
+ LDREX_NE
+ LDREX_CS
+ LDREX_CC
+ LDREX_MI
+ LDREX_PL
+ LDREX_VS
+ LDREX_VC
+ LDREX_HI
+ LDREX_LS
+ LDREX_GE
+ LDREX_LT
+ LDREX_GT
+ LDREX_LE
+ LDREX
+ LDREX_ZZ
+ LDREXB_EQ
+ LDREXB_NE
+ LDREXB_CS
+ LDREXB_CC
+ LDREXB_MI
+ LDREXB_PL
+ LDREXB_VS
+ LDREXB_VC
+ LDREXB_HI
+ LDREXB_LS
+ LDREXB_GE
+ LDREXB_LT
+ LDREXB_GT
+ LDREXB_LE
+ LDREXB
+ LDREXB_ZZ
+ LDREXD_EQ
+ LDREXD_NE
+ LDREXD_CS
+ LDREXD_CC
+ LDREXD_MI
+ LDREXD_PL
+ LDREXD_VS
+ LDREXD_VC
+ LDREXD_HI
+ LDREXD_LS
+ LDREXD_GE
+ LDREXD_LT
+ LDREXD_GT
+ LDREXD_LE
+ LDREXD
+ LDREXD_ZZ
+ LDREXH_EQ
+ LDREXH_NE
+ LDREXH_CS
+ LDREXH_CC
+ LDREXH_MI
+ LDREXH_PL
+ LDREXH_VS
+ LDREXH_VC
+ LDREXH_HI
+ LDREXH_LS
+ LDREXH_GE
+ LDREXH_LT
+ LDREXH_GT
+ LDREXH_LE
+ LDREXH
+ LDREXH_ZZ
+ LDRH_EQ
+ LDRH_NE
+ LDRH_CS
+ LDRH_CC
+ LDRH_MI
+ LDRH_PL
+ LDRH_VS
+ LDRH_VC
+ LDRH_HI
+ LDRH_LS
+ LDRH_GE
+ LDRH_LT
+ LDRH_GT
+ LDRH_LE
+ LDRH
+ LDRH_ZZ
+ LDRHT_EQ
+ LDRHT_NE
+ LDRHT_CS
+ LDRHT_CC
+ LDRHT_MI
+ LDRHT_PL
+ LDRHT_VS
+ LDRHT_VC
+ LDRHT_HI
+ LDRHT_LS
+ LDRHT_GE
+ LDRHT_LT
+ LDRHT_GT
+ LDRHT_LE
+ LDRHT
+ LDRHT_ZZ
+ LDRSB_EQ
+ LDRSB_NE
+ LDRSB_CS
+ LDRSB_CC
+ LDRSB_MI
+ LDRSB_PL
+ LDRSB_VS
+ LDRSB_VC
+ LDRSB_HI
+ LDRSB_LS
+ LDRSB_GE
+ LDRSB_LT
+ LDRSB_GT
+ LDRSB_LE
+ LDRSB
+ LDRSB_ZZ
+ LDRSBT_EQ
+ LDRSBT_NE
+ LDRSBT_CS
+ LDRSBT_CC
+ LDRSBT_MI
+ LDRSBT_PL
+ LDRSBT_VS
+ LDRSBT_VC
+ LDRSBT_HI
+ LDRSBT_LS
+ LDRSBT_GE
+ LDRSBT_LT
+ LDRSBT_GT
+ LDRSBT_LE
+ LDRSBT
+ LDRSBT_ZZ
+ LDRSH_EQ
+ LDRSH_NE
+ LDRSH_CS
+ LDRSH_CC
+ LDRSH_MI
+ LDRSH_PL
+ LDRSH_VS
+ LDRSH_VC
+ LDRSH_HI
+ LDRSH_LS
+ LDRSH_GE
+ LDRSH_LT
+ LDRSH_GT
+ LDRSH_LE
+ LDRSH
+ LDRSH_ZZ
+ LDRSHT_EQ
+ LDRSHT_NE
+ LDRSHT_CS
+ LDRSHT_CC
+ LDRSHT_MI
+ LDRSHT_PL
+ LDRSHT_VS
+ LDRSHT_VC
+ LDRSHT_HI
+ LDRSHT_LS
+ LDRSHT_GE
+ LDRSHT_LT
+ LDRSHT_GT
+ LDRSHT_LE
+ LDRSHT
+ LDRSHT_ZZ
+ LDRT_EQ
+ LDRT_NE
+ LDRT_CS
+ LDRT_CC
+ LDRT_MI
+ LDRT_PL
+ LDRT_VS
+ LDRT_VC
+ LDRT_HI
+ LDRT_LS
+ LDRT_GE
+ LDRT_LT
+ LDRT_GT
+ LDRT_LE
+ LDRT
+ LDRT_ZZ
+ LSL_EQ
+ LSL_NE
+ LSL_CS
+ LSL_CC
+ LSL_MI
+ LSL_PL
+ LSL_VS
+ LSL_VC
+ LSL_HI
+ LSL_LS
+ LSL_GE
+ LSL_LT
+ LSL_GT
+ LSL_LE
+ LSL
+ LSL_ZZ
+ LSL_S_EQ
+ LSL_S_NE
+ LSL_S_CS
+ LSL_S_CC
+ LSL_S_MI
+ LSL_S_PL
+ LSL_S_VS
+ LSL_S_VC
+ LSL_S_HI
+ LSL_S_LS
+ LSL_S_GE
+ LSL_S_LT
+ LSL_S_GT
+ LSL_S_LE
+ LSL_S
+ LSL_S_ZZ
+ LSR_EQ
+ LSR_NE
+ LSR_CS
+ LSR_CC
+ LSR_MI
+ LSR_PL
+ LSR_VS
+ LSR_VC
+ LSR_HI
+ LSR_LS
+ LSR_GE
+ LSR_LT
+ LSR_GT
+ LSR_LE
+ LSR
+ LSR_ZZ
+ LSR_S_EQ
+ LSR_S_NE
+ LSR_S_CS
+ LSR_S_CC
+ LSR_S_MI
+ LSR_S_PL
+ LSR_S_VS
+ LSR_S_VC
+ LSR_S_HI
+ LSR_S_LS
+ LSR_S_GE
+ LSR_S_LT
+ LSR_S_GT
+ LSR_S_LE
+ LSR_S
+ LSR_S_ZZ
+ MLA_EQ
+ MLA_NE
+ MLA_CS
+ MLA_CC
+ MLA_MI
+ MLA_PL
+ MLA_VS
+ MLA_VC
+ MLA_HI
+ MLA_LS
+ MLA_GE
+ MLA_LT
+ MLA_GT
+ MLA_LE
+ MLA
+ MLA_ZZ
+ MLA_S_EQ
+ MLA_S_NE
+ MLA_S_CS
+ MLA_S_CC
+ MLA_S_MI
+ MLA_S_PL
+ MLA_S_VS
+ MLA_S_VC
+ MLA_S_HI
+ MLA_S_LS
+ MLA_S_GE
+ MLA_S_LT
+ MLA_S_GT
+ MLA_S_LE
+ MLA_S
+ MLA_S_ZZ
+ MLS_EQ
+ MLS_NE
+ MLS_CS
+ MLS_CC
+ MLS_MI
+ MLS_PL
+ MLS_VS
+ MLS_VC
+ MLS_HI
+ MLS_LS
+ MLS_GE
+ MLS_LT
+ MLS_GT
+ MLS_LE
+ MLS
+ MLS_ZZ
+ MOV_EQ
+ MOV_NE
+ MOV_CS
+ MOV_CC
+ MOV_MI
+ MOV_PL
+ MOV_VS
+ MOV_VC
+ MOV_HI
+ MOV_LS
+ MOV_GE
+ MOV_LT
+ MOV_GT
+ MOV_LE
+ MOV
+ MOV_ZZ
+ MOV_S_EQ
+ MOV_S_NE
+ MOV_S_CS
+ MOV_S_CC
+ MOV_S_MI
+ MOV_S_PL
+ MOV_S_VS
+ MOV_S_VC
+ MOV_S_HI
+ MOV_S_LS
+ MOV_S_GE
+ MOV_S_LT
+ MOV_S_GT
+ MOV_S_LE
+ MOV_S
+ MOV_S_ZZ
+ MOVT_EQ
+ MOVT_NE
+ MOVT_CS
+ MOVT_CC
+ MOVT_MI
+ MOVT_PL
+ MOVT_VS
+ MOVT_VC
+ MOVT_HI
+ MOVT_LS
+ MOVT_GE
+ MOVT_LT
+ MOVT_GT
+ MOVT_LE
+ MOVT
+ MOVT_ZZ
+ MOVW_EQ
+ MOVW_NE
+ MOVW_CS
+ MOVW_CC
+ MOVW_MI
+ MOVW_PL
+ MOVW_VS
+ MOVW_VC
+ MOVW_HI
+ MOVW_LS
+ MOVW_GE
+ MOVW_LT
+ MOVW_GT
+ MOVW_LE
+ MOVW
+ MOVW_ZZ
+ MRS_EQ
+ MRS_NE
+ MRS_CS
+ MRS_CC
+ MRS_MI
+ MRS_PL
+ MRS_VS
+ MRS_VC
+ MRS_HI
+ MRS_LS
+ MRS_GE
+ MRS_LT
+ MRS_GT
+ MRS_LE
+ MRS
+ MRS_ZZ
+ MUL_EQ
+ MUL_NE
+ MUL_CS
+ MUL_CC
+ MUL_MI
+ MUL_PL
+ MUL_VS
+ MUL_VC
+ MUL_HI
+ MUL_LS
+ MUL_GE
+ MUL_LT
+ MUL_GT
+ MUL_LE
+ MUL
+ MUL_ZZ
+ MUL_S_EQ
+ MUL_S_NE
+ MUL_S_CS
+ MUL_S_CC
+ MUL_S_MI
+ MUL_S_PL
+ MUL_S_VS
+ MUL_S_VC
+ MUL_S_HI
+ MUL_S_LS
+ MUL_S_GE
+ MUL_S_LT
+ MUL_S_GT
+ MUL_S_LE
+ MUL_S
+ MUL_S_ZZ
+ MVN_EQ
+ MVN_NE
+ MVN_CS
+ MVN_CC
+ MVN_MI
+ MVN_PL
+ MVN_VS
+ MVN_VC
+ MVN_HI
+ MVN_LS
+ MVN_GE
+ MVN_LT
+ MVN_GT
+ MVN_LE
+ MVN
+ MVN_ZZ
+ MVN_S_EQ
+ MVN_S_NE
+ MVN_S_CS
+ MVN_S_CC
+ MVN_S_MI
+ MVN_S_PL
+ MVN_S_VS
+ MVN_S_VC
+ MVN_S_HI
+ MVN_S_LS
+ MVN_S_GE
+ MVN_S_LT
+ MVN_S_GT
+ MVN_S_LE
+ MVN_S
+ MVN_S_ZZ
+ NOP_EQ
+ NOP_NE
+ NOP_CS
+ NOP_CC
+ NOP_MI
+ NOP_PL
+ NOP_VS
+ NOP_VC
+ NOP_HI
+ NOP_LS
+ NOP_GE
+ NOP_LT
+ NOP_GT
+ NOP_LE
+ NOP
+ NOP_ZZ
+ ORR_EQ
+ ORR_NE
+ ORR_CS
+ ORR_CC
+ ORR_MI
+ ORR_PL
+ ORR_VS
+ ORR_VC
+ ORR_HI
+ ORR_LS
+ ORR_GE
+ ORR_LT
+ ORR_GT
+ ORR_LE
+ ORR
+ ORR_ZZ
+ ORR_S_EQ
+ ORR_S_NE
+ ORR_S_CS
+ ORR_S_CC
+ ORR_S_MI
+ ORR_S_PL
+ ORR_S_VS
+ ORR_S_VC
+ ORR_S_HI
+ ORR_S_LS
+ ORR_S_GE
+ ORR_S_LT
+ ORR_S_GT
+ ORR_S_LE
+ ORR_S
+ ORR_S_ZZ
+ PKHBT_EQ
+ PKHBT_NE
+ PKHBT_CS
+ PKHBT_CC
+ PKHBT_MI
+ PKHBT_PL
+ PKHBT_VS
+ PKHBT_VC
+ PKHBT_HI
+ PKHBT_LS
+ PKHBT_GE
+ PKHBT_LT
+ PKHBT_GT
+ PKHBT_LE
+ PKHBT
+ PKHBT_ZZ
+ PKHTB_EQ
+ PKHTB_NE
+ PKHTB_CS
+ PKHTB_CC
+ PKHTB_MI
+ PKHTB_PL
+ PKHTB_VS
+ PKHTB_VC
+ PKHTB_HI
+ PKHTB_LS
+ PKHTB_GE
+ PKHTB_LT
+ PKHTB_GT
+ PKHTB_LE
+ PKHTB
+ PKHTB_ZZ
+ PLD_W
+ PLD
+ PLI
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ POP_EQ
+ POP_NE
+ POP_CS
+ POP_CC
+ POP_MI
+ POP_PL
+ POP_VS
+ POP_VC
+ POP_HI
+ POP_LS
+ POP_GE
+ POP_LT
+ POP_GT
+ POP_LE
+ POP
+ POP_ZZ
+ PUSH_EQ
+ PUSH_NE
+ PUSH_CS
+ PUSH_CC
+ PUSH_MI
+ PUSH_PL
+ PUSH_VS
+ PUSH_VC
+ PUSH_HI
+ PUSH_LS
+ PUSH_GE
+ PUSH_LT
+ PUSH_GT
+ PUSH_LE
+ PUSH
+ PUSH_ZZ
+ QADD_EQ
+ QADD_NE
+ QADD_CS
+ QADD_CC
+ QADD_MI
+ QADD_PL
+ QADD_VS
+ QADD_VC
+ QADD_HI
+ QADD_LS
+ QADD_GE
+ QADD_LT
+ QADD_GT
+ QADD_LE
+ QADD
+ QADD_ZZ
+ QADD16_EQ
+ QADD16_NE
+ QADD16_CS
+ QADD16_CC
+ QADD16_MI
+ QADD16_PL
+ QADD16_VS
+ QADD16_VC
+ QADD16_HI
+ QADD16_LS
+ QADD16_GE
+ QADD16_LT
+ QADD16_GT
+ QADD16_LE
+ QADD16
+ QADD16_ZZ
+ QADD8_EQ
+ QADD8_NE
+ QADD8_CS
+ QADD8_CC
+ QADD8_MI
+ QADD8_PL
+ QADD8_VS
+ QADD8_VC
+ QADD8_HI
+ QADD8_LS
+ QADD8_GE
+ QADD8_LT
+ QADD8_GT
+ QADD8_LE
+ QADD8
+ QADD8_ZZ
+ QASX_EQ
+ QASX_NE
+ QASX_CS
+ QASX_CC
+ QASX_MI
+ QASX_PL
+ QASX_VS
+ QASX_VC
+ QASX_HI
+ QASX_LS
+ QASX_GE
+ QASX_LT
+ QASX_GT
+ QASX_LE
+ QASX
+ QASX_ZZ
+ QDADD_EQ
+ QDADD_NE
+ QDADD_CS
+ QDADD_CC
+ QDADD_MI
+ QDADD_PL
+ QDADD_VS
+ QDADD_VC
+ QDADD_HI
+ QDADD_LS
+ QDADD_GE
+ QDADD_LT
+ QDADD_GT
+ QDADD_LE
+ QDADD
+ QDADD_ZZ
+ QDSUB_EQ
+ QDSUB_NE
+ QDSUB_CS
+ QDSUB_CC
+ QDSUB_MI
+ QDSUB_PL
+ QDSUB_VS
+ QDSUB_VC
+ QDSUB_HI
+ QDSUB_LS
+ QDSUB_GE
+ QDSUB_LT
+ QDSUB_GT
+ QDSUB_LE
+ QDSUB
+ QDSUB_ZZ
+ QSAX_EQ
+ QSAX_NE
+ QSAX_CS
+ QSAX_CC
+ QSAX_MI
+ QSAX_PL
+ QSAX_VS
+ QSAX_VC
+ QSAX_HI
+ QSAX_LS
+ QSAX_GE
+ QSAX_LT
+ QSAX_GT
+ QSAX_LE
+ QSAX
+ QSAX_ZZ
+ QSUB_EQ
+ QSUB_NE
+ QSUB_CS
+ QSUB_CC
+ QSUB_MI
+ QSUB_PL
+ QSUB_VS
+ QSUB_VC
+ QSUB_HI
+ QSUB_LS
+ QSUB_GE
+ QSUB_LT
+ QSUB_GT
+ QSUB_LE
+ QSUB
+ QSUB_ZZ
+ QSUB16_EQ
+ QSUB16_NE
+ QSUB16_CS
+ QSUB16_CC
+ QSUB16_MI
+ QSUB16_PL
+ QSUB16_VS
+ QSUB16_VC
+ QSUB16_HI
+ QSUB16_LS
+ QSUB16_GE
+ QSUB16_LT
+ QSUB16_GT
+ QSUB16_LE
+ QSUB16
+ QSUB16_ZZ
+ QSUB8_EQ
+ QSUB8_NE
+ QSUB8_CS
+ QSUB8_CC
+ QSUB8_MI
+ QSUB8_PL
+ QSUB8_VS
+ QSUB8_VC
+ QSUB8_HI
+ QSUB8_LS
+ QSUB8_GE
+ QSUB8_LT
+ QSUB8_GT
+ QSUB8_LE
+ QSUB8
+ QSUB8_ZZ
+ RBIT_EQ
+ RBIT_NE
+ RBIT_CS
+ RBIT_CC
+ RBIT_MI
+ RBIT_PL
+ RBIT_VS
+ RBIT_VC
+ RBIT_HI
+ RBIT_LS
+ RBIT_GE
+ RBIT_LT
+ RBIT_GT
+ RBIT_LE
+ RBIT
+ RBIT_ZZ
+ REV_EQ
+ REV_NE
+ REV_CS
+ REV_CC
+ REV_MI
+ REV_PL
+ REV_VS
+ REV_VC
+ REV_HI
+ REV_LS
+ REV_GE
+ REV_LT
+ REV_GT
+ REV_LE
+ REV
+ REV_ZZ
+ REV16_EQ
+ REV16_NE
+ REV16_CS
+ REV16_CC
+ REV16_MI
+ REV16_PL
+ REV16_VS
+ REV16_VC
+ REV16_HI
+ REV16_LS
+ REV16_GE
+ REV16_LT
+ REV16_GT
+ REV16_LE
+ REV16
+ REV16_ZZ
+ REVSH_EQ
+ REVSH_NE
+ REVSH_CS
+ REVSH_CC
+ REVSH_MI
+ REVSH_PL
+ REVSH_VS
+ REVSH_VC
+ REVSH_HI
+ REVSH_LS
+ REVSH_GE
+ REVSH_LT
+ REVSH_GT
+ REVSH_LE
+ REVSH
+ REVSH_ZZ
+ ROR_EQ
+ ROR_NE
+ ROR_CS
+ ROR_CC
+ ROR_MI
+ ROR_PL
+ ROR_VS
+ ROR_VC
+ ROR_HI
+ ROR_LS
+ ROR_GE
+ ROR_LT
+ ROR_GT
+ ROR_LE
+ ROR
+ ROR_ZZ
+ ROR_S_EQ
+ ROR_S_NE
+ ROR_S_CS
+ ROR_S_CC
+ ROR_S_MI
+ ROR_S_PL
+ ROR_S_VS
+ ROR_S_VC
+ ROR_S_HI
+ ROR_S_LS
+ ROR_S_GE
+ ROR_S_LT
+ ROR_S_GT
+ ROR_S_LE
+ ROR_S
+ ROR_S_ZZ
+ RRX_EQ
+ RRX_NE
+ RRX_CS
+ RRX_CC
+ RRX_MI
+ RRX_PL
+ RRX_VS
+ RRX_VC
+ RRX_HI
+ RRX_LS
+ RRX_GE
+ RRX_LT
+ RRX_GT
+ RRX_LE
+ RRX
+ RRX_ZZ
+ RRX_S_EQ
+ RRX_S_NE
+ RRX_S_CS
+ RRX_S_CC
+ RRX_S_MI
+ RRX_S_PL
+ RRX_S_VS
+ RRX_S_VC
+ RRX_S_HI
+ RRX_S_LS
+ RRX_S_GE
+ RRX_S_LT
+ RRX_S_GT
+ RRX_S_LE
+ RRX_S
+ RRX_S_ZZ
+ RSB_EQ
+ RSB_NE
+ RSB_CS
+ RSB_CC
+ RSB_MI
+ RSB_PL
+ RSB_VS
+ RSB_VC
+ RSB_HI
+ RSB_LS
+ RSB_GE
+ RSB_LT
+ RSB_GT
+ RSB_LE
+ RSB
+ RSB_ZZ
+ RSB_S_EQ
+ RSB_S_NE
+ RSB_S_CS
+ RSB_S_CC
+ RSB_S_MI
+ RSB_S_PL
+ RSB_S_VS
+ RSB_S_VC
+ RSB_S_HI
+ RSB_S_LS
+ RSB_S_GE
+ RSB_S_LT
+ RSB_S_GT
+ RSB_S_LE
+ RSB_S
+ RSB_S_ZZ
+ RSC_EQ
+ RSC_NE
+ RSC_CS
+ RSC_CC
+ RSC_MI
+ RSC_PL
+ RSC_VS
+ RSC_VC
+ RSC_HI
+ RSC_LS
+ RSC_GE
+ RSC_LT
+ RSC_GT
+ RSC_LE
+ RSC
+ RSC_ZZ
+ RSC_S_EQ
+ RSC_S_NE
+ RSC_S_CS
+ RSC_S_CC
+ RSC_S_MI
+ RSC_S_PL
+ RSC_S_VS
+ RSC_S_VC
+ RSC_S_HI
+ RSC_S_LS
+ RSC_S_GE
+ RSC_S_LT
+ RSC_S_GT
+ RSC_S_LE
+ RSC_S
+ RSC_S_ZZ
+ SADD16_EQ
+ SADD16_NE
+ SADD16_CS
+ SADD16_CC
+ SADD16_MI
+ SADD16_PL
+ SADD16_VS
+ SADD16_VC
+ SADD16_HI
+ SADD16_LS
+ SADD16_GE
+ SADD16_LT
+ SADD16_GT
+ SADD16_LE
+ SADD16
+ SADD16_ZZ
+ SADD8_EQ
+ SADD8_NE
+ SADD8_CS
+ SADD8_CC
+ SADD8_MI
+ SADD8_PL
+ SADD8_VS
+ SADD8_VC
+ SADD8_HI
+ SADD8_LS
+ SADD8_GE
+ SADD8_LT
+ SADD8_GT
+ SADD8_LE
+ SADD8
+ SADD8_ZZ
+ SASX_EQ
+ SASX_NE
+ SASX_CS
+ SASX_CC
+ SASX_MI
+ SASX_PL
+ SASX_VS
+ SASX_VC
+ SASX_HI
+ SASX_LS
+ SASX_GE
+ SASX_LT
+ SASX_GT
+ SASX_LE
+ SASX
+ SASX_ZZ
+ SBC_EQ
+ SBC_NE
+ SBC_CS
+ SBC_CC
+ SBC_MI
+ SBC_PL
+ SBC_VS
+ SBC_VC
+ SBC_HI
+ SBC_LS
+ SBC_GE
+ SBC_LT
+ SBC_GT
+ SBC_LE
+ SBC
+ SBC_ZZ
+ SBC_S_EQ
+ SBC_S_NE
+ SBC_S_CS
+ SBC_S_CC
+ SBC_S_MI
+ SBC_S_PL
+ SBC_S_VS
+ SBC_S_VC
+ SBC_S_HI
+ SBC_S_LS
+ SBC_S_GE
+ SBC_S_LT
+ SBC_S_GT
+ SBC_S_LE
+ SBC_S
+ SBC_S_ZZ
+ SBFX_EQ
+ SBFX_NE
+ SBFX_CS
+ SBFX_CC
+ SBFX_MI
+ SBFX_PL
+ SBFX_VS
+ SBFX_VC
+ SBFX_HI
+ SBFX_LS
+ SBFX_GE
+ SBFX_LT
+ SBFX_GT
+ SBFX_LE
+ SBFX
+ SBFX_ZZ
+ SEL_EQ
+ SEL_NE
+ SEL_CS
+ SEL_CC
+ SEL_MI
+ SEL_PL
+ SEL_VS
+ SEL_VC
+ SEL_HI
+ SEL_LS
+ SEL_GE
+ SEL_LT
+ SEL_GT
+ SEL_LE
+ SEL
+ SEL_ZZ
+ SETEND
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ SEV_EQ
+ SEV_NE
+ SEV_CS
+ SEV_CC
+ SEV_MI
+ SEV_PL
+ SEV_VS
+ SEV_VC
+ SEV_HI
+ SEV_LS
+ SEV_GE
+ SEV_LT
+ SEV_GT
+ SEV_LE
+ SEV
+ SEV_ZZ
+ SHADD16_EQ
+ SHADD16_NE
+ SHADD16_CS
+ SHADD16_CC
+ SHADD16_MI
+ SHADD16_PL
+ SHADD16_VS
+ SHADD16_VC
+ SHADD16_HI
+ SHADD16_LS
+ SHADD16_GE
+ SHADD16_LT
+ SHADD16_GT
+ SHADD16_LE
+ SHADD16
+ SHADD16_ZZ
+ SHADD8_EQ
+ SHADD8_NE
+ SHADD8_CS
+ SHADD8_CC
+ SHADD8_MI
+ SHADD8_PL
+ SHADD8_VS
+ SHADD8_VC
+ SHADD8_HI
+ SHADD8_LS
+ SHADD8_GE
+ SHADD8_LT
+ SHADD8_GT
+ SHADD8_LE
+ SHADD8
+ SHADD8_ZZ
+ SHASX_EQ
+ SHASX_NE
+ SHASX_CS
+ SHASX_CC
+ SHASX_MI
+ SHASX_PL
+ SHASX_VS
+ SHASX_VC
+ SHASX_HI
+ SHASX_LS
+ SHASX_GE
+ SHASX_LT
+ SHASX_GT
+ SHASX_LE
+ SHASX
+ SHASX_ZZ
+ SHSAX_EQ
+ SHSAX_NE
+ SHSAX_CS
+ SHSAX_CC
+ SHSAX_MI
+ SHSAX_PL
+ SHSAX_VS
+ SHSAX_VC
+ SHSAX_HI
+ SHSAX_LS
+ SHSAX_GE
+ SHSAX_LT
+ SHSAX_GT
+ SHSAX_LE
+ SHSAX
+ SHSAX_ZZ
+ SHSUB16_EQ
+ SHSUB16_NE
+ SHSUB16_CS
+ SHSUB16_CC
+ SHSUB16_MI
+ SHSUB16_PL
+ SHSUB16_VS
+ SHSUB16_VC
+ SHSUB16_HI
+ SHSUB16_LS
+ SHSUB16_GE
+ SHSUB16_LT
+ SHSUB16_GT
+ SHSUB16_LE
+ SHSUB16
+ SHSUB16_ZZ
+ SHSUB8_EQ
+ SHSUB8_NE
+ SHSUB8_CS
+ SHSUB8_CC
+ SHSUB8_MI
+ SHSUB8_PL
+ SHSUB8_VS
+ SHSUB8_VC
+ SHSUB8_HI
+ SHSUB8_LS
+ SHSUB8_GE
+ SHSUB8_LT
+ SHSUB8_GT
+ SHSUB8_LE
+ SHSUB8
+ SHSUB8_ZZ
+ SMLABB_EQ
+ SMLABB_NE
+ SMLABB_CS
+ SMLABB_CC
+ SMLABB_MI
+ SMLABB_PL
+ SMLABB_VS
+ SMLABB_VC
+ SMLABB_HI
+ SMLABB_LS
+ SMLABB_GE
+ SMLABB_LT
+ SMLABB_GT
+ SMLABB_LE
+ SMLABB
+ SMLABB_ZZ
+ SMLABT_EQ
+ SMLABT_NE
+ SMLABT_CS
+ SMLABT_CC
+ SMLABT_MI
+ SMLABT_PL
+ SMLABT_VS
+ SMLABT_VC
+ SMLABT_HI
+ SMLABT_LS
+ SMLABT_GE
+ SMLABT_LT
+ SMLABT_GT
+ SMLABT_LE
+ SMLABT
+ SMLABT_ZZ
+ SMLATB_EQ
+ SMLATB_NE
+ SMLATB_CS
+ SMLATB_CC
+ SMLATB_MI
+ SMLATB_PL
+ SMLATB_VS
+ SMLATB_VC
+ SMLATB_HI
+ SMLATB_LS
+ SMLATB_GE
+ SMLATB_LT
+ SMLATB_GT
+ SMLATB_LE
+ SMLATB
+ SMLATB_ZZ
+ SMLATT_EQ
+ SMLATT_NE
+ SMLATT_CS
+ SMLATT_CC
+ SMLATT_MI
+ SMLATT_PL
+ SMLATT_VS
+ SMLATT_VC
+ SMLATT_HI
+ SMLATT_LS
+ SMLATT_GE
+ SMLATT_LT
+ SMLATT_GT
+ SMLATT_LE
+ SMLATT
+ SMLATT_ZZ
+ SMLAD_EQ
+ SMLAD_NE
+ SMLAD_CS
+ SMLAD_CC
+ SMLAD_MI
+ SMLAD_PL
+ SMLAD_VS
+ SMLAD_VC
+ SMLAD_HI
+ SMLAD_LS
+ SMLAD_GE
+ SMLAD_LT
+ SMLAD_GT
+ SMLAD_LE
+ SMLAD
+ SMLAD_ZZ
+ SMLAD_X_EQ
+ SMLAD_X_NE
+ SMLAD_X_CS
+ SMLAD_X_CC
+ SMLAD_X_MI
+ SMLAD_X_PL
+ SMLAD_X_VS
+ SMLAD_X_VC
+ SMLAD_X_HI
+ SMLAD_X_LS
+ SMLAD_X_GE
+ SMLAD_X_LT
+ SMLAD_X_GT
+ SMLAD_X_LE
+ SMLAD_X
+ SMLAD_X_ZZ
+ SMLAL_EQ
+ SMLAL_NE
+ SMLAL_CS
+ SMLAL_CC
+ SMLAL_MI
+ SMLAL_PL
+ SMLAL_VS
+ SMLAL_VC
+ SMLAL_HI
+ SMLAL_LS
+ SMLAL_GE
+ SMLAL_LT
+ SMLAL_GT
+ SMLAL_LE
+ SMLAL
+ SMLAL_ZZ
+ SMLAL_S_EQ
+ SMLAL_S_NE
+ SMLAL_S_CS
+ SMLAL_S_CC
+ SMLAL_S_MI
+ SMLAL_S_PL
+ SMLAL_S_VS
+ SMLAL_S_VC
+ SMLAL_S_HI
+ SMLAL_S_LS
+ SMLAL_S_GE
+ SMLAL_S_LT
+ SMLAL_S_GT
+ SMLAL_S_LE
+ SMLAL_S
+ SMLAL_S_ZZ
+ SMLALBB_EQ
+ SMLALBB_NE
+ SMLALBB_CS
+ SMLALBB_CC
+ SMLALBB_MI
+ SMLALBB_PL
+ SMLALBB_VS
+ SMLALBB_VC
+ SMLALBB_HI
+ SMLALBB_LS
+ SMLALBB_GE
+ SMLALBB_LT
+ SMLALBB_GT
+ SMLALBB_LE
+ SMLALBB
+ SMLALBB_ZZ
+ SMLALBT_EQ
+ SMLALBT_NE
+ SMLALBT_CS
+ SMLALBT_CC
+ SMLALBT_MI
+ SMLALBT_PL
+ SMLALBT_VS
+ SMLALBT_VC
+ SMLALBT_HI
+ SMLALBT_LS
+ SMLALBT_GE
+ SMLALBT_LT
+ SMLALBT_GT
+ SMLALBT_LE
+ SMLALBT
+ SMLALBT_ZZ
+ SMLALTB_EQ
+ SMLALTB_NE
+ SMLALTB_CS
+ SMLALTB_CC
+ SMLALTB_MI
+ SMLALTB_PL
+ SMLALTB_VS
+ SMLALTB_VC
+ SMLALTB_HI
+ SMLALTB_LS
+ SMLALTB_GE
+ SMLALTB_LT
+ SMLALTB_GT
+ SMLALTB_LE
+ SMLALTB
+ SMLALTB_ZZ
+ SMLALTT_EQ
+ SMLALTT_NE
+ SMLALTT_CS
+ SMLALTT_CC
+ SMLALTT_MI
+ SMLALTT_PL
+ SMLALTT_VS
+ SMLALTT_VC
+ SMLALTT_HI
+ SMLALTT_LS
+ SMLALTT_GE
+ SMLALTT_LT
+ SMLALTT_GT
+ SMLALTT_LE
+ SMLALTT
+ SMLALTT_ZZ
+ SMLALD_EQ
+ SMLALD_NE
+ SMLALD_CS
+ SMLALD_CC
+ SMLALD_MI
+ SMLALD_PL
+ SMLALD_VS
+ SMLALD_VC
+ SMLALD_HI
+ SMLALD_LS
+ SMLALD_GE
+ SMLALD_LT
+ SMLALD_GT
+ SMLALD_LE
+ SMLALD
+ SMLALD_ZZ
+ SMLALD_X_EQ
+ SMLALD_X_NE
+ SMLALD_X_CS
+ SMLALD_X_CC
+ SMLALD_X_MI
+ SMLALD_X_PL
+ SMLALD_X_VS
+ SMLALD_X_VC
+ SMLALD_X_HI
+ SMLALD_X_LS
+ SMLALD_X_GE
+ SMLALD_X_LT
+ SMLALD_X_GT
+ SMLALD_X_LE
+ SMLALD_X
+ SMLALD_X_ZZ
+ SMLAWB_EQ
+ SMLAWB_NE
+ SMLAWB_CS
+ SMLAWB_CC
+ SMLAWB_MI
+ SMLAWB_PL
+ SMLAWB_VS
+ SMLAWB_VC
+ SMLAWB_HI
+ SMLAWB_LS
+ SMLAWB_GE
+ SMLAWB_LT
+ SMLAWB_GT
+ SMLAWB_LE
+ SMLAWB
+ SMLAWB_ZZ
+ SMLAWT_EQ
+ SMLAWT_NE
+ SMLAWT_CS
+ SMLAWT_CC
+ SMLAWT_MI
+ SMLAWT_PL
+ SMLAWT_VS
+ SMLAWT_VC
+ SMLAWT_HI
+ SMLAWT_LS
+ SMLAWT_GE
+ SMLAWT_LT
+ SMLAWT_GT
+ SMLAWT_LE
+ SMLAWT
+ SMLAWT_ZZ
+ SMLSD_EQ
+ SMLSD_NE
+ SMLSD_CS
+ SMLSD_CC
+ SMLSD_MI
+ SMLSD_PL
+ SMLSD_VS
+ SMLSD_VC
+ SMLSD_HI
+ SMLSD_LS
+ SMLSD_GE
+ SMLSD_LT
+ SMLSD_GT
+ SMLSD_LE
+ SMLSD
+ SMLSD_ZZ
+ SMLSD_X_EQ
+ SMLSD_X_NE
+ SMLSD_X_CS
+ SMLSD_X_CC
+ SMLSD_X_MI
+ SMLSD_X_PL
+ SMLSD_X_VS
+ SMLSD_X_VC
+ SMLSD_X_HI
+ SMLSD_X_LS
+ SMLSD_X_GE
+ SMLSD_X_LT
+ SMLSD_X_GT
+ SMLSD_X_LE
+ SMLSD_X
+ SMLSD_X_ZZ
+ SMLSLD_EQ
+ SMLSLD_NE
+ SMLSLD_CS
+ SMLSLD_CC
+ SMLSLD_MI
+ SMLSLD_PL
+ SMLSLD_VS
+ SMLSLD_VC
+ SMLSLD_HI
+ SMLSLD_LS
+ SMLSLD_GE
+ SMLSLD_LT
+ SMLSLD_GT
+ SMLSLD_LE
+ SMLSLD
+ SMLSLD_ZZ
+ SMLSLD_X_EQ
+ SMLSLD_X_NE
+ SMLSLD_X_CS
+ SMLSLD_X_CC
+ SMLSLD_X_MI
+ SMLSLD_X_PL
+ SMLSLD_X_VS
+ SMLSLD_X_VC
+ SMLSLD_X_HI
+ SMLSLD_X_LS
+ SMLSLD_X_GE
+ SMLSLD_X_LT
+ SMLSLD_X_GT
+ SMLSLD_X_LE
+ SMLSLD_X
+ SMLSLD_X_ZZ
+ SMMLA_EQ
+ SMMLA_NE
+ SMMLA_CS
+ SMMLA_CC
+ SMMLA_MI
+ SMMLA_PL
+ SMMLA_VS
+ SMMLA_VC
+ SMMLA_HI
+ SMMLA_LS
+ SMMLA_GE
+ SMMLA_LT
+ SMMLA_GT
+ SMMLA_LE
+ SMMLA
+ SMMLA_ZZ
+ SMMLA_R_EQ
+ SMMLA_R_NE
+ SMMLA_R_CS
+ SMMLA_R_CC
+ SMMLA_R_MI
+ SMMLA_R_PL
+ SMMLA_R_VS
+ SMMLA_R_VC
+ SMMLA_R_HI
+ SMMLA_R_LS
+ SMMLA_R_GE
+ SMMLA_R_LT
+ SMMLA_R_GT
+ SMMLA_R_LE
+ SMMLA_R
+ SMMLA_R_ZZ
+ SMMLS_EQ
+ SMMLS_NE
+ SMMLS_CS
+ SMMLS_CC
+ SMMLS_MI
+ SMMLS_PL
+ SMMLS_VS
+ SMMLS_VC
+ SMMLS_HI
+ SMMLS_LS
+ SMMLS_GE
+ SMMLS_LT
+ SMMLS_GT
+ SMMLS_LE
+ SMMLS
+ SMMLS_ZZ
+ SMMLS_R_EQ
+ SMMLS_R_NE
+ SMMLS_R_CS
+ SMMLS_R_CC
+ SMMLS_R_MI
+ SMMLS_R_PL
+ SMMLS_R_VS
+ SMMLS_R_VC
+ SMMLS_R_HI
+ SMMLS_R_LS
+ SMMLS_R_GE
+ SMMLS_R_LT
+ SMMLS_R_GT
+ SMMLS_R_LE
+ SMMLS_R
+ SMMLS_R_ZZ
+ SMMUL_EQ
+ SMMUL_NE
+ SMMUL_CS
+ SMMUL_CC
+ SMMUL_MI
+ SMMUL_PL
+ SMMUL_VS
+ SMMUL_VC
+ SMMUL_HI
+ SMMUL_LS
+ SMMUL_GE
+ SMMUL_LT
+ SMMUL_GT
+ SMMUL_LE
+ SMMUL
+ SMMUL_ZZ
+ SMMUL_R_EQ
+ SMMUL_R_NE
+ SMMUL_R_CS
+ SMMUL_R_CC
+ SMMUL_R_MI
+ SMMUL_R_PL
+ SMMUL_R_VS
+ SMMUL_R_VC
+ SMMUL_R_HI
+ SMMUL_R_LS
+ SMMUL_R_GE
+ SMMUL_R_LT
+ SMMUL_R_GT
+ SMMUL_R_LE
+ SMMUL_R
+ SMMUL_R_ZZ
+ SMUAD_EQ
+ SMUAD_NE
+ SMUAD_CS
+ SMUAD_CC
+ SMUAD_MI
+ SMUAD_PL
+ SMUAD_VS
+ SMUAD_VC
+ SMUAD_HI
+ SMUAD_LS
+ SMUAD_GE
+ SMUAD_LT
+ SMUAD_GT
+ SMUAD_LE
+ SMUAD
+ SMUAD_ZZ
+ SMUAD_X_EQ
+ SMUAD_X_NE
+ SMUAD_X_CS
+ SMUAD_X_CC
+ SMUAD_X_MI
+ SMUAD_X_PL
+ SMUAD_X_VS
+ SMUAD_X_VC
+ SMUAD_X_HI
+ SMUAD_X_LS
+ SMUAD_X_GE
+ SMUAD_X_LT
+ SMUAD_X_GT
+ SMUAD_X_LE
+ SMUAD_X
+ SMUAD_X_ZZ
+ SMULBB_EQ
+ SMULBB_NE
+ SMULBB_CS
+ SMULBB_CC
+ SMULBB_MI
+ SMULBB_PL
+ SMULBB_VS
+ SMULBB_VC
+ SMULBB_HI
+ SMULBB_LS
+ SMULBB_GE
+ SMULBB_LT
+ SMULBB_GT
+ SMULBB_LE
+ SMULBB
+ SMULBB_ZZ
+ SMULBT_EQ
+ SMULBT_NE
+ SMULBT_CS
+ SMULBT_CC
+ SMULBT_MI
+ SMULBT_PL
+ SMULBT_VS
+ SMULBT_VC
+ SMULBT_HI
+ SMULBT_LS
+ SMULBT_GE
+ SMULBT_LT
+ SMULBT_GT
+ SMULBT_LE
+ SMULBT
+ SMULBT_ZZ
+ SMULTB_EQ
+ SMULTB_NE
+ SMULTB_CS
+ SMULTB_CC
+ SMULTB_MI
+ SMULTB_PL
+ SMULTB_VS
+ SMULTB_VC
+ SMULTB_HI
+ SMULTB_LS
+ SMULTB_GE
+ SMULTB_LT
+ SMULTB_GT
+ SMULTB_LE
+ SMULTB
+ SMULTB_ZZ
+ SMULTT_EQ
+ SMULTT_NE
+ SMULTT_CS
+ SMULTT_CC
+ SMULTT_MI
+ SMULTT_PL
+ SMULTT_VS
+ SMULTT_VC
+ SMULTT_HI
+ SMULTT_LS
+ SMULTT_GE
+ SMULTT_LT
+ SMULTT_GT
+ SMULTT_LE
+ SMULTT
+ SMULTT_ZZ
+ SMULL_EQ
+ SMULL_NE
+ SMULL_CS
+ SMULL_CC
+ SMULL_MI
+ SMULL_PL
+ SMULL_VS
+ SMULL_VC
+ SMULL_HI
+ SMULL_LS
+ SMULL_GE
+ SMULL_LT
+ SMULL_GT
+ SMULL_LE
+ SMULL
+ SMULL_ZZ
+ SMULL_S_EQ
+ SMULL_S_NE
+ SMULL_S_CS
+ SMULL_S_CC
+ SMULL_S_MI
+ SMULL_S_PL
+ SMULL_S_VS
+ SMULL_S_VC
+ SMULL_S_HI
+ SMULL_S_LS
+ SMULL_S_GE
+ SMULL_S_LT
+ SMULL_S_GT
+ SMULL_S_LE
+ SMULL_S
+ SMULL_S_ZZ
+ SMULWB_EQ
+ SMULWB_NE
+ SMULWB_CS
+ SMULWB_CC
+ SMULWB_MI
+ SMULWB_PL
+ SMULWB_VS
+ SMULWB_VC
+ SMULWB_HI
+ SMULWB_LS
+ SMULWB_GE
+ SMULWB_LT
+ SMULWB_GT
+ SMULWB_LE
+ SMULWB
+ SMULWB_ZZ
+ SMULWT_EQ
+ SMULWT_NE
+ SMULWT_CS
+ SMULWT_CC
+ SMULWT_MI
+ SMULWT_PL
+ SMULWT_VS
+ SMULWT_VC
+ SMULWT_HI
+ SMULWT_LS
+ SMULWT_GE
+ SMULWT_LT
+ SMULWT_GT
+ SMULWT_LE
+ SMULWT
+ SMULWT_ZZ
+ SMUSD_EQ
+ SMUSD_NE
+ SMUSD_CS
+ SMUSD_CC
+ SMUSD_MI
+ SMUSD_PL
+ SMUSD_VS
+ SMUSD_VC
+ SMUSD_HI
+ SMUSD_LS
+ SMUSD_GE
+ SMUSD_LT
+ SMUSD_GT
+ SMUSD_LE
+ SMUSD
+ SMUSD_ZZ
+ SMUSD_X_EQ
+ SMUSD_X_NE
+ SMUSD_X_CS
+ SMUSD_X_CC
+ SMUSD_X_MI
+ SMUSD_X_PL
+ SMUSD_X_VS
+ SMUSD_X_VC
+ SMUSD_X_HI
+ SMUSD_X_LS
+ SMUSD_X_GE
+ SMUSD_X_LT
+ SMUSD_X_GT
+ SMUSD_X_LE
+ SMUSD_X
+ SMUSD_X_ZZ
+ SSAT_EQ
+ SSAT_NE
+ SSAT_CS
+ SSAT_CC
+ SSAT_MI
+ SSAT_PL
+ SSAT_VS
+ SSAT_VC
+ SSAT_HI
+ SSAT_LS
+ SSAT_GE
+ SSAT_LT
+ SSAT_GT
+ SSAT_LE
+ SSAT
+ SSAT_ZZ
+ SSAT16_EQ
+ SSAT16_NE
+ SSAT16_CS
+ SSAT16_CC
+ SSAT16_MI
+ SSAT16_PL
+ SSAT16_VS
+ SSAT16_VC
+ SSAT16_HI
+ SSAT16_LS
+ SSAT16_GE
+ SSAT16_LT
+ SSAT16_GT
+ SSAT16_LE
+ SSAT16
+ SSAT16_ZZ
+ SSAX_EQ
+ SSAX_NE
+ SSAX_CS
+ SSAX_CC
+ SSAX_MI
+ SSAX_PL
+ SSAX_VS
+ SSAX_VC
+ SSAX_HI
+ SSAX_LS
+ SSAX_GE
+ SSAX_LT
+ SSAX_GT
+ SSAX_LE
+ SSAX
+ SSAX_ZZ
+ SSUB16_EQ
+ SSUB16_NE
+ SSUB16_CS
+ SSUB16_CC
+ SSUB16_MI
+ SSUB16_PL
+ SSUB16_VS
+ SSUB16_VC
+ SSUB16_HI
+ SSUB16_LS
+ SSUB16_GE
+ SSUB16_LT
+ SSUB16_GT
+ SSUB16_LE
+ SSUB16
+ SSUB16_ZZ
+ SSUB8_EQ
+ SSUB8_NE
+ SSUB8_CS
+ SSUB8_CC
+ SSUB8_MI
+ SSUB8_PL
+ SSUB8_VS
+ SSUB8_VC
+ SSUB8_HI
+ SSUB8_LS
+ SSUB8_GE
+ SSUB8_LT
+ SSUB8_GT
+ SSUB8_LE
+ SSUB8
+ SSUB8_ZZ
+ STM_EQ
+ STM_NE
+ STM_CS
+ STM_CC
+ STM_MI
+ STM_PL
+ STM_VS
+ STM_VC
+ STM_HI
+ STM_LS
+ STM_GE
+ STM_LT
+ STM_GT
+ STM_LE
+ STM
+ STM_ZZ
+ STMDA_EQ
+ STMDA_NE
+ STMDA_CS
+ STMDA_CC
+ STMDA_MI
+ STMDA_PL
+ STMDA_VS
+ STMDA_VC
+ STMDA_HI
+ STMDA_LS
+ STMDA_GE
+ STMDA_LT
+ STMDA_GT
+ STMDA_LE
+ STMDA
+ STMDA_ZZ
+ STMDB_EQ
+ STMDB_NE
+ STMDB_CS
+ STMDB_CC
+ STMDB_MI
+ STMDB_PL
+ STMDB_VS
+ STMDB_VC
+ STMDB_HI
+ STMDB_LS
+ STMDB_GE
+ STMDB_LT
+ STMDB_GT
+ STMDB_LE
+ STMDB
+ STMDB_ZZ
+ STMIB_EQ
+ STMIB_NE
+ STMIB_CS
+ STMIB_CC
+ STMIB_MI
+ STMIB_PL
+ STMIB_VS
+ STMIB_VC
+ STMIB_HI
+ STMIB_LS
+ STMIB_GE
+ STMIB_LT
+ STMIB_GT
+ STMIB_LE
+ STMIB
+ STMIB_ZZ
+ STR_EQ
+ STR_NE
+ STR_CS
+ STR_CC
+ STR_MI
+ STR_PL
+ STR_VS
+ STR_VC
+ STR_HI
+ STR_LS
+ STR_GE
+ STR_LT
+ STR_GT
+ STR_LE
+ STR
+ STR_ZZ
+ STRB_EQ
+ STRB_NE
+ STRB_CS
+ STRB_CC
+ STRB_MI
+ STRB_PL
+ STRB_VS
+ STRB_VC
+ STRB_HI
+ STRB_LS
+ STRB_GE
+ STRB_LT
+ STRB_GT
+ STRB_LE
+ STRB
+ STRB_ZZ
+ STRBT_EQ
+ STRBT_NE
+ STRBT_CS
+ STRBT_CC
+ STRBT_MI
+ STRBT_PL
+ STRBT_VS
+ STRBT_VC
+ STRBT_HI
+ STRBT_LS
+ STRBT_GE
+ STRBT_LT
+ STRBT_GT
+ STRBT_LE
+ STRBT
+ STRBT_ZZ
+ STRD_EQ
+ STRD_NE
+ STRD_CS
+ STRD_CC
+ STRD_MI
+ STRD_PL
+ STRD_VS
+ STRD_VC
+ STRD_HI
+ STRD_LS
+ STRD_GE
+ STRD_LT
+ STRD_GT
+ STRD_LE
+ STRD
+ STRD_ZZ
+ STREX_EQ
+ STREX_NE
+ STREX_CS
+ STREX_CC
+ STREX_MI
+ STREX_PL
+ STREX_VS
+ STREX_VC
+ STREX_HI
+ STREX_LS
+ STREX_GE
+ STREX_LT
+ STREX_GT
+ STREX_LE
+ STREX
+ STREX_ZZ
+ STREXB_EQ
+ STREXB_NE
+ STREXB_CS
+ STREXB_CC
+ STREXB_MI
+ STREXB_PL
+ STREXB_VS
+ STREXB_VC
+ STREXB_HI
+ STREXB_LS
+ STREXB_GE
+ STREXB_LT
+ STREXB_GT
+ STREXB_LE
+ STREXB
+ STREXB_ZZ
+ STREXD_EQ
+ STREXD_NE
+ STREXD_CS
+ STREXD_CC
+ STREXD_MI
+ STREXD_PL
+ STREXD_VS
+ STREXD_VC
+ STREXD_HI
+ STREXD_LS
+ STREXD_GE
+ STREXD_LT
+ STREXD_GT
+ STREXD_LE
+ STREXD
+ STREXD_ZZ
+ STREXH_EQ
+ STREXH_NE
+ STREXH_CS
+ STREXH_CC
+ STREXH_MI
+ STREXH_PL
+ STREXH_VS
+ STREXH_VC
+ STREXH_HI
+ STREXH_LS
+ STREXH_GE
+ STREXH_LT
+ STREXH_GT
+ STREXH_LE
+ STREXH
+ STREXH_ZZ
+ STRH_EQ
+ STRH_NE
+ STRH_CS
+ STRH_CC
+ STRH_MI
+ STRH_PL
+ STRH_VS
+ STRH_VC
+ STRH_HI
+ STRH_LS
+ STRH_GE
+ STRH_LT
+ STRH_GT
+ STRH_LE
+ STRH
+ STRH_ZZ
+ STRHT_EQ
+ STRHT_NE
+ STRHT_CS
+ STRHT_CC
+ STRHT_MI
+ STRHT_PL
+ STRHT_VS
+ STRHT_VC
+ STRHT_HI
+ STRHT_LS
+ STRHT_GE
+ STRHT_LT
+ STRHT_GT
+ STRHT_LE
+ STRHT
+ STRHT_ZZ
+ STRT_EQ
+ STRT_NE
+ STRT_CS
+ STRT_CC
+ STRT_MI
+ STRT_PL
+ STRT_VS
+ STRT_VC
+ STRT_HI
+ STRT_LS
+ STRT_GE
+ STRT_LT
+ STRT_GT
+ STRT_LE
+ STRT
+ STRT_ZZ
+ SUB_EQ
+ SUB_NE
+ SUB_CS
+ SUB_CC
+ SUB_MI
+ SUB_PL
+ SUB_VS
+ SUB_VC
+ SUB_HI
+ SUB_LS
+ SUB_GE
+ SUB_LT
+ SUB_GT
+ SUB_LE
+ SUB
+ SUB_ZZ
+ SUB_S_EQ
+ SUB_S_NE
+ SUB_S_CS
+ SUB_S_CC
+ SUB_S_MI
+ SUB_S_PL
+ SUB_S_VS
+ SUB_S_VC
+ SUB_S_HI
+ SUB_S_LS
+ SUB_S_GE
+ SUB_S_LT
+ SUB_S_GT
+ SUB_S_LE
+ SUB_S
+ SUB_S_ZZ
+ SVC_EQ
+ SVC_NE
+ SVC_CS
+ SVC_CC
+ SVC_MI
+ SVC_PL
+ SVC_VS
+ SVC_VC
+ SVC_HI
+ SVC_LS
+ SVC_GE
+ SVC_LT
+ SVC_GT
+ SVC_LE
+ SVC
+ SVC_ZZ
+ SWP_EQ
+ SWP_NE
+ SWP_CS
+ SWP_CC
+ SWP_MI
+ SWP_PL
+ SWP_VS
+ SWP_VC
+ SWP_HI
+ SWP_LS
+ SWP_GE
+ SWP_LT
+ SWP_GT
+ SWP_LE
+ SWP
+ SWP_ZZ
+ SWP_B_EQ
+ SWP_B_NE
+ SWP_B_CS
+ SWP_B_CC
+ SWP_B_MI
+ SWP_B_PL
+ SWP_B_VS
+ SWP_B_VC
+ SWP_B_HI
+ SWP_B_LS
+ SWP_B_GE
+ SWP_B_LT
+ SWP_B_GT
+ SWP_B_LE
+ SWP_B
+ SWP_B_ZZ
+ SXTAB_EQ
+ SXTAB_NE
+ SXTAB_CS
+ SXTAB_CC
+ SXTAB_MI
+ SXTAB_PL
+ SXTAB_VS
+ SXTAB_VC
+ SXTAB_HI
+ SXTAB_LS
+ SXTAB_GE
+ SXTAB_LT
+ SXTAB_GT
+ SXTAB_LE
+ SXTAB
+ SXTAB_ZZ
+ SXTAB16_EQ
+ SXTAB16_NE
+ SXTAB16_CS
+ SXTAB16_CC
+ SXTAB16_MI
+ SXTAB16_PL
+ SXTAB16_VS
+ SXTAB16_VC
+ SXTAB16_HI
+ SXTAB16_LS
+ SXTAB16_GE
+ SXTAB16_LT
+ SXTAB16_GT
+ SXTAB16_LE
+ SXTAB16
+ SXTAB16_ZZ
+ SXTAH_EQ
+ SXTAH_NE
+ SXTAH_CS
+ SXTAH_CC
+ SXTAH_MI
+ SXTAH_PL
+ SXTAH_VS
+ SXTAH_VC
+ SXTAH_HI
+ SXTAH_LS
+ SXTAH_GE
+ SXTAH_LT
+ SXTAH_GT
+ SXTAH_LE
+ SXTAH
+ SXTAH_ZZ
+ SXTB_EQ
+ SXTB_NE
+ SXTB_CS
+ SXTB_CC
+ SXTB_MI
+ SXTB_PL
+ SXTB_VS
+ SXTB_VC
+ SXTB_HI
+ SXTB_LS
+ SXTB_GE
+ SXTB_LT
+ SXTB_GT
+ SXTB_LE
+ SXTB
+ SXTB_ZZ
+ SXTB16_EQ
+ SXTB16_NE
+ SXTB16_CS
+ SXTB16_CC
+ SXTB16_MI
+ SXTB16_PL
+ SXTB16_VS
+ SXTB16_VC
+ SXTB16_HI
+ SXTB16_LS
+ SXTB16_GE
+ SXTB16_LT
+ SXTB16_GT
+ SXTB16_LE
+ SXTB16
+ SXTB16_ZZ
+ SXTH_EQ
+ SXTH_NE
+ SXTH_CS
+ SXTH_CC
+ SXTH_MI
+ SXTH_PL
+ SXTH_VS
+ SXTH_VC
+ SXTH_HI
+ SXTH_LS
+ SXTH_GE
+ SXTH_LT
+ SXTH_GT
+ SXTH_LE
+ SXTH
+ SXTH_ZZ
+ TEQ_EQ
+ TEQ_NE
+ TEQ_CS
+ TEQ_CC
+ TEQ_MI
+ TEQ_PL
+ TEQ_VS
+ TEQ_VC
+ TEQ_HI
+ TEQ_LS
+ TEQ_GE
+ TEQ_LT
+ TEQ_GT
+ TEQ_LE
+ TEQ
+ TEQ_ZZ
+ TST_EQ
+ TST_NE
+ TST_CS
+ TST_CC
+ TST_MI
+ TST_PL
+ TST_VS
+ TST_VC
+ TST_HI
+ TST_LS
+ TST_GE
+ TST_LT
+ TST_GT
+ TST_LE
+ TST
+ TST_ZZ
+ UADD16_EQ
+ UADD16_NE
+ UADD16_CS
+ UADD16_CC
+ UADD16_MI
+ UADD16_PL
+ UADD16_VS
+ UADD16_VC
+ UADD16_HI
+ UADD16_LS
+ UADD16_GE
+ UADD16_LT
+ UADD16_GT
+ UADD16_LE
+ UADD16
+ UADD16_ZZ
+ UADD8_EQ
+ UADD8_NE
+ UADD8_CS
+ UADD8_CC
+ UADD8_MI
+ UADD8_PL
+ UADD8_VS
+ UADD8_VC
+ UADD8_HI
+ UADD8_LS
+ UADD8_GE
+ UADD8_LT
+ UADD8_GT
+ UADD8_LE
+ UADD8
+ UADD8_ZZ
+ UASX_EQ
+ UASX_NE
+ UASX_CS
+ UASX_CC
+ UASX_MI
+ UASX_PL
+ UASX_VS
+ UASX_VC
+ UASX_HI
+ UASX_LS
+ UASX_GE
+ UASX_LT
+ UASX_GT
+ UASX_LE
+ UASX
+ UASX_ZZ
+ UBFX_EQ
+ UBFX_NE
+ UBFX_CS
+ UBFX_CC
+ UBFX_MI
+ UBFX_PL
+ UBFX_VS
+ UBFX_VC
+ UBFX_HI
+ UBFX_LS
+ UBFX_GE
+ UBFX_LT
+ UBFX_GT
+ UBFX_LE
+ UBFX
+ UBFX_ZZ
+ UHADD16_EQ
+ UHADD16_NE
+ UHADD16_CS
+ UHADD16_CC
+ UHADD16_MI
+ UHADD16_PL
+ UHADD16_VS
+ UHADD16_VC
+ UHADD16_HI
+ UHADD16_LS
+ UHADD16_GE
+ UHADD16_LT
+ UHADD16_GT
+ UHADD16_LE
+ UHADD16
+ UHADD16_ZZ
+ UHADD8_EQ
+ UHADD8_NE
+ UHADD8_CS
+ UHADD8_CC
+ UHADD8_MI
+ UHADD8_PL
+ UHADD8_VS
+ UHADD8_VC
+ UHADD8_HI
+ UHADD8_LS
+ UHADD8_GE
+ UHADD8_LT
+ UHADD8_GT
+ UHADD8_LE
+ UHADD8
+ UHADD8_ZZ
+ UHASX_EQ
+ UHASX_NE
+ UHASX_CS
+ UHASX_CC
+ UHASX_MI
+ UHASX_PL
+ UHASX_VS
+ UHASX_VC
+ UHASX_HI
+ UHASX_LS
+ UHASX_GE
+ UHASX_LT
+ UHASX_GT
+ UHASX_LE
+ UHASX
+ UHASX_ZZ
+ UHSAX_EQ
+ UHSAX_NE
+ UHSAX_CS
+ UHSAX_CC
+ UHSAX_MI
+ UHSAX_PL
+ UHSAX_VS
+ UHSAX_VC
+ UHSAX_HI
+ UHSAX_LS
+ UHSAX_GE
+ UHSAX_LT
+ UHSAX_GT
+ UHSAX_LE
+ UHSAX
+ UHSAX_ZZ
+ UHSUB16_EQ
+ UHSUB16_NE
+ UHSUB16_CS
+ UHSUB16_CC
+ UHSUB16_MI
+ UHSUB16_PL
+ UHSUB16_VS
+ UHSUB16_VC
+ UHSUB16_HI
+ UHSUB16_LS
+ UHSUB16_GE
+ UHSUB16_LT
+ UHSUB16_GT
+ UHSUB16_LE
+ UHSUB16
+ UHSUB16_ZZ
+ UHSUB8_EQ
+ UHSUB8_NE
+ UHSUB8_CS
+ UHSUB8_CC
+ UHSUB8_MI
+ UHSUB8_PL
+ UHSUB8_VS
+ UHSUB8_VC
+ UHSUB8_HI
+ UHSUB8_LS
+ UHSUB8_GE
+ UHSUB8_LT
+ UHSUB8_GT
+ UHSUB8_LE
+ UHSUB8
+ UHSUB8_ZZ
+ UMAAL_EQ
+ UMAAL_NE
+ UMAAL_CS
+ UMAAL_CC
+ UMAAL_MI
+ UMAAL_PL
+ UMAAL_VS
+ UMAAL_VC
+ UMAAL_HI
+ UMAAL_LS
+ UMAAL_GE
+ UMAAL_LT
+ UMAAL_GT
+ UMAAL_LE
+ UMAAL
+ UMAAL_ZZ
+ UMLAL_EQ
+ UMLAL_NE
+ UMLAL_CS
+ UMLAL_CC
+ UMLAL_MI
+ UMLAL_PL
+ UMLAL_VS
+ UMLAL_VC
+ UMLAL_HI
+ UMLAL_LS
+ UMLAL_GE
+ UMLAL_LT
+ UMLAL_GT
+ UMLAL_LE
+ UMLAL
+ UMLAL_ZZ
+ UMLAL_S_EQ
+ UMLAL_S_NE
+ UMLAL_S_CS
+ UMLAL_S_CC
+ UMLAL_S_MI
+ UMLAL_S_PL
+ UMLAL_S_VS
+ UMLAL_S_VC
+ UMLAL_S_HI
+ UMLAL_S_LS
+ UMLAL_S_GE
+ UMLAL_S_LT
+ UMLAL_S_GT
+ UMLAL_S_LE
+ UMLAL_S
+ UMLAL_S_ZZ
+ UMULL_EQ
+ UMULL_NE
+ UMULL_CS
+ UMULL_CC
+ UMULL_MI
+ UMULL_PL
+ UMULL_VS
+ UMULL_VC
+ UMULL_HI
+ UMULL_LS
+ UMULL_GE
+ UMULL_LT
+ UMULL_GT
+ UMULL_LE
+ UMULL
+ UMULL_ZZ
+ UMULL_S_EQ
+ UMULL_S_NE
+ UMULL_S_CS
+ UMULL_S_CC
+ UMULL_S_MI
+ UMULL_S_PL
+ UMULL_S_VS
+ UMULL_S_VC
+ UMULL_S_HI
+ UMULL_S_LS
+ UMULL_S_GE
+ UMULL_S_LT
+ UMULL_S_GT
+ UMULL_S_LE
+ UMULL_S
+ UMULL_S_ZZ
+ UNDEF
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ _
+ UQADD16_EQ
+ UQADD16_NE
+ UQADD16_CS
+ UQADD16_CC
+ UQADD16_MI
+ UQADD16_PL
+ UQADD16_VS
+ UQADD16_VC
+ UQADD16_HI
+ UQADD16_LS
+ UQADD16_GE
+ UQADD16_LT
+ UQADD16_GT
+ UQADD16_LE
+ UQADD16
+ UQADD16_ZZ
+ UQADD8_EQ
+ UQADD8_NE
+ UQADD8_CS
+ UQADD8_CC
+ UQADD8_MI
+ UQADD8_PL
+ UQADD8_VS
+ UQADD8_VC
+ UQADD8_HI
+ UQADD8_LS
+ UQADD8_GE
+ UQADD8_LT
+ UQADD8_GT
+ UQADD8_LE
+ UQADD8
+ UQADD8_ZZ
+ UQASX_EQ
+ UQASX_NE
+ UQASX_CS
+ UQASX_CC
+ UQASX_MI
+ UQASX_PL
+ UQASX_VS
+ UQASX_VC
+ UQASX_HI
+ UQASX_LS
+ UQASX_GE
+ UQASX_LT
+ UQASX_GT
+ UQASX_LE
+ UQASX
+ UQASX_ZZ
+ UQSAX_EQ
+ UQSAX_NE
+ UQSAX_CS
+ UQSAX_CC
+ UQSAX_MI
+ UQSAX_PL
+ UQSAX_VS
+ UQSAX_VC
+ UQSAX_HI
+ UQSAX_LS
+ UQSAX_GE
+ UQSAX_LT
+ UQSAX_GT
+ UQSAX_LE
+ UQSAX
+ UQSAX_ZZ
+ UQSUB16_EQ
+ UQSUB16_NE
+ UQSUB16_CS
+ UQSUB16_CC
+ UQSUB16_MI
+ UQSUB16_PL
+ UQSUB16_VS
+ UQSUB16_VC
+ UQSUB16_HI
+ UQSUB16_LS
+ UQSUB16_GE
+ UQSUB16_LT
+ UQSUB16_GT
+ UQSUB16_LE
+ UQSUB16
+ UQSUB16_ZZ
+ UQSUB8_EQ
+ UQSUB8_NE
+ UQSUB8_CS
+ UQSUB8_CC
+ UQSUB8_MI
+ UQSUB8_PL
+ UQSUB8_VS
+ UQSUB8_VC
+ UQSUB8_HI
+ UQSUB8_LS
+ UQSUB8_GE
+ UQSUB8_LT
+ UQSUB8_GT
+ UQSUB8_LE
+ UQSUB8
+ UQSUB8_ZZ
+ USAD8_EQ
+ USAD8_NE
+ USAD8_CS
+ USAD8_CC
+ USAD8_MI
+ USAD8_PL
+ USAD8_VS
+ USAD8_VC
+ USAD8_HI
+ USAD8_LS
+ USAD8_GE
+ USAD8_LT
+ USAD8_GT
+ USAD8_LE
+ USAD8
+ USAD8_ZZ
+ USADA8_EQ
+ USADA8_NE
+ USADA8_CS
+ USADA8_CC
+ USADA8_MI
+ USADA8_PL
+ USADA8_VS
+ USADA8_VC
+ USADA8_HI
+ USADA8_LS
+ USADA8_GE
+ USADA8_LT
+ USADA8_GT
+ USADA8_LE
+ USADA8
+ USADA8_ZZ
+ USAT_EQ
+ USAT_NE
+ USAT_CS
+ USAT_CC
+ USAT_MI
+ USAT_PL
+ USAT_VS
+ USAT_VC
+ USAT_HI
+ USAT_LS
+ USAT_GE
+ USAT_LT
+ USAT_GT
+ USAT_LE
+ USAT
+ USAT_ZZ
+ USAT16_EQ
+ USAT16_NE
+ USAT16_CS
+ USAT16_CC
+ USAT16_MI
+ USAT16_PL
+ USAT16_VS
+ USAT16_VC
+ USAT16_HI
+ USAT16_LS
+ USAT16_GE
+ USAT16_LT
+ USAT16_GT
+ USAT16_LE
+ USAT16
+ USAT16_ZZ
+ USAX_EQ
+ USAX_NE
+ USAX_CS
+ USAX_CC
+ USAX_MI
+ USAX_PL
+ USAX_VS
+ USAX_VC
+ USAX_HI
+ USAX_LS
+ USAX_GE
+ USAX_LT
+ USAX_GT
+ USAX_LE
+ USAX
+ USAX_ZZ
+ USUB16_EQ
+ USUB16_NE
+ USUB16_CS
+ USUB16_CC
+ USUB16_MI
+ USUB16_PL
+ USUB16_VS
+ USUB16_VC
+ USUB16_HI
+ USUB16_LS
+ USUB16_GE
+ USUB16_LT
+ USUB16_GT
+ USUB16_LE
+ USUB16
+ USUB16_ZZ
+ USUB8_EQ
+ USUB8_NE
+ USUB8_CS
+ USUB8_CC
+ USUB8_MI
+ USUB8_PL
+ USUB8_VS
+ USUB8_VC
+ USUB8_HI
+ USUB8_LS
+ USUB8_GE
+ USUB8_LT
+ USUB8_GT
+ USUB8_LE
+ USUB8
+ USUB8_ZZ
+ UXTAB_EQ
+ UXTAB_NE
+ UXTAB_CS
+ UXTAB_CC
+ UXTAB_MI
+ UXTAB_PL
+ UXTAB_VS
+ UXTAB_VC
+ UXTAB_HI
+ UXTAB_LS
+ UXTAB_GE
+ UXTAB_LT
+ UXTAB_GT
+ UXTAB_LE
+ UXTAB
+ UXTAB_ZZ
+ UXTAB16_EQ
+ UXTAB16_NE
+ UXTAB16_CS
+ UXTAB16_CC
+ UXTAB16_MI
+ UXTAB16_PL
+ UXTAB16_VS
+ UXTAB16_VC
+ UXTAB16_HI
+ UXTAB16_LS
+ UXTAB16_GE
+ UXTAB16_LT
+ UXTAB16_GT
+ UXTAB16_LE
+ UXTAB16
+ UXTAB16_ZZ
+ UXTAH_EQ
+ UXTAH_NE
+ UXTAH_CS
+ UXTAH_CC
+ UXTAH_MI
+ UXTAH_PL
+ UXTAH_VS
+ UXTAH_VC
+ UXTAH_HI
+ UXTAH_LS
+ UXTAH_GE
+ UXTAH_LT
+ UXTAH_GT
+ UXTAH_LE
+ UXTAH
+ UXTAH_ZZ
+ UXTB_EQ
+ UXTB_NE
+ UXTB_CS
+ UXTB_CC
+ UXTB_MI
+ UXTB_PL
+ UXTB_VS
+ UXTB_VC
+ UXTB_HI
+ UXTB_LS
+ UXTB_GE
+ UXTB_LT
+ UXTB_GT
+ UXTB_LE
+ UXTB
+ UXTB_ZZ
+ UXTB16_EQ
+ UXTB16_NE
+ UXTB16_CS
+ UXTB16_CC
+ UXTB16_MI
+ UXTB16_PL
+ UXTB16_VS
+ UXTB16_VC
+ UXTB16_HI
+ UXTB16_LS
+ UXTB16_GE
+ UXTB16_LT
+ UXTB16_GT
+ UXTB16_LE
+ UXTB16
+ UXTB16_ZZ
+ UXTH_EQ
+ UXTH_NE
+ UXTH_CS
+ UXTH_CC
+ UXTH_MI
+ UXTH_PL
+ UXTH_VS
+ UXTH_VC
+ UXTH_HI
+ UXTH_LS
+ UXTH_GE
+ UXTH_LT
+ UXTH_GT
+ UXTH_LE
+ UXTH
+ UXTH_ZZ
+ VABS_EQ_F32
+ VABS_NE_F32
+ VABS_CS_F32
+ VABS_CC_F32
+ VABS_MI_F32
+ VABS_PL_F32
+ VABS_VS_F32
+ VABS_VC_F32
+ VABS_HI_F32
+ VABS_LS_F32
+ VABS_GE_F32
+ VABS_LT_F32
+ VABS_GT_F32
+ VABS_LE_F32
+ VABS_F32
+ VABS_ZZ_F32
+ VABS_EQ_F64
+ VABS_NE_F64
+ VABS_CS_F64
+ VABS_CC_F64
+ VABS_MI_F64
+ VABS_PL_F64
+ VABS_VS_F64
+ VABS_VC_F64
+ VABS_HI_F64
+ VABS_LS_F64
+ VABS_GE_F64
+ VABS_LT_F64
+ VABS_GT_F64
+ VABS_LE_F64
+ VABS_F64
+ VABS_ZZ_F64
+ VADD_EQ_F32
+ VADD_NE_F32
+ VADD_CS_F32
+ VADD_CC_F32
+ VADD_MI_F32
+ VADD_PL_F32
+ VADD_VS_F32
+ VADD_VC_F32
+ VADD_HI_F32
+ VADD_LS_F32
+ VADD_GE_F32
+ VADD_LT_F32
+ VADD_GT_F32
+ VADD_LE_F32
+ VADD_F32
+ VADD_ZZ_F32
+ VADD_EQ_F64
+ VADD_NE_F64
+ VADD_CS_F64
+ VADD_CC_F64
+ VADD_MI_F64
+ VADD_PL_F64
+ VADD_VS_F64
+ VADD_VC_F64
+ VADD_HI_F64
+ VADD_LS_F64
+ VADD_GE_F64
+ VADD_LT_F64
+ VADD_GT_F64
+ VADD_LE_F64
+ VADD_F64
+ VADD_ZZ_F64
+ VCMP_EQ_F32
+ VCMP_NE_F32
+ VCMP_CS_F32
+ VCMP_CC_F32
+ VCMP_MI_F32
+ VCMP_PL_F32
+ VCMP_VS_F32
+ VCMP_VC_F32
+ VCMP_HI_F32
+ VCMP_LS_F32
+ VCMP_GE_F32
+ VCMP_LT_F32
+ VCMP_GT_F32
+ VCMP_LE_F32
+ VCMP_F32
+ VCMP_ZZ_F32
+ VCMP_EQ_F64
+ VCMP_NE_F64
+ VCMP_CS_F64
+ VCMP_CC_F64
+ VCMP_MI_F64
+ VCMP_PL_F64
+ VCMP_VS_F64
+ VCMP_VC_F64
+ VCMP_HI_F64
+ VCMP_LS_F64
+ VCMP_GE_F64
+ VCMP_LT_F64
+ VCMP_GT_F64
+ VCMP_LE_F64
+ VCMP_F64
+ VCMP_ZZ_F64
+ VCMP_E_EQ_F32
+ VCMP_E_NE_F32
+ VCMP_E_CS_F32
+ VCMP_E_CC_F32
+ VCMP_E_MI_F32
+ VCMP_E_PL_F32
+ VCMP_E_VS_F32
+ VCMP_E_VC_F32
+ VCMP_E_HI_F32
+ VCMP_E_LS_F32
+ VCMP_E_GE_F32
+ VCMP_E_LT_F32
+ VCMP_E_GT_F32
+ VCMP_E_LE_F32
+ VCMP_E_F32
+ VCMP_E_ZZ_F32
+ VCMP_E_EQ_F64
+ VCMP_E_NE_F64
+ VCMP_E_CS_F64
+ VCMP_E_CC_F64
+ VCMP_E_MI_F64
+ VCMP_E_PL_F64
+ VCMP_E_VS_F64
+ VCMP_E_VC_F64
+ VCMP_E_HI_F64
+ VCMP_E_LS_F64
+ VCMP_E_GE_F64
+ VCMP_E_LT_F64
+ VCMP_E_GT_F64
+ VCMP_E_LE_F64
+ VCMP_E_F64
+ VCMP_E_ZZ_F64
+ VCVT_EQ_F32_FXS16
+ VCVT_NE_F32_FXS16
+ VCVT_CS_F32_FXS16
+ VCVT_CC_F32_FXS16
+ VCVT_MI_F32_FXS16
+ VCVT_PL_F32_FXS16
+ VCVT_VS_F32_FXS16
+ VCVT_VC_F32_FXS16
+ VCVT_HI_F32_FXS16
+ VCVT_LS_F32_FXS16
+ VCVT_GE_F32_FXS16
+ VCVT_LT_F32_FXS16
+ VCVT_GT_F32_FXS16
+ VCVT_LE_F32_FXS16
+ VCVT_F32_FXS16
+ VCVT_ZZ_F32_FXS16
+ VCVT_EQ_F32_FXS32
+ VCVT_NE_F32_FXS32
+ VCVT_CS_F32_FXS32
+ VCVT_CC_F32_FXS32
+ VCVT_MI_F32_FXS32
+ VCVT_PL_F32_FXS32
+ VCVT_VS_F32_FXS32
+ VCVT_VC_F32_FXS32
+ VCVT_HI_F32_FXS32
+ VCVT_LS_F32_FXS32
+ VCVT_GE_F32_FXS32
+ VCVT_LT_F32_FXS32
+ VCVT_GT_F32_FXS32
+ VCVT_LE_F32_FXS32
+ VCVT_F32_FXS32
+ VCVT_ZZ_F32_FXS32
+ VCVT_EQ_F32_FXU16
+ VCVT_NE_F32_FXU16
+ VCVT_CS_F32_FXU16
+ VCVT_CC_F32_FXU16
+ VCVT_MI_F32_FXU16
+ VCVT_PL_F32_FXU16
+ VCVT_VS_F32_FXU16
+ VCVT_VC_F32_FXU16
+ VCVT_HI_F32_FXU16
+ VCVT_LS_F32_FXU16
+ VCVT_GE_F32_FXU16
+ VCVT_LT_F32_FXU16
+ VCVT_GT_F32_FXU16
+ VCVT_LE_F32_FXU16
+ VCVT_F32_FXU16
+ VCVT_ZZ_F32_FXU16
+ VCVT_EQ_F32_FXU32
+ VCVT_NE_F32_FXU32
+ VCVT_CS_F32_FXU32
+ VCVT_CC_F32_FXU32
+ VCVT_MI_F32_FXU32
+ VCVT_PL_F32_FXU32
+ VCVT_VS_F32_FXU32
+ VCVT_VC_F32_FXU32
+ VCVT_HI_F32_FXU32
+ VCVT_LS_F32_FXU32
+ VCVT_GE_F32_FXU32
+ VCVT_LT_F32_FXU32
+ VCVT_GT_F32_FXU32
+ VCVT_LE_F32_FXU32
+ VCVT_F32_FXU32
+ VCVT_ZZ_F32_FXU32
+ VCVT_EQ_F64_FXS16
+ VCVT_NE_F64_FXS16
+ VCVT_CS_F64_FXS16
+ VCVT_CC_F64_FXS16
+ VCVT_MI_F64_FXS16
+ VCVT_PL_F64_FXS16
+ VCVT_VS_F64_FXS16
+ VCVT_VC_F64_FXS16
+ VCVT_HI_F64_FXS16
+ VCVT_LS_F64_FXS16
+ VCVT_GE_F64_FXS16
+ VCVT_LT_F64_FXS16
+ VCVT_GT_F64_FXS16
+ VCVT_LE_F64_FXS16
+ VCVT_F64_FXS16
+ VCVT_ZZ_F64_FXS16
+ VCVT_EQ_F64_FXS32
+ VCVT_NE_F64_FXS32
+ VCVT_CS_F64_FXS32
+ VCVT_CC_F64_FXS32
+ VCVT_MI_F64_FXS32
+ VCVT_PL_F64_FXS32
+ VCVT_VS_F64_FXS32
+ VCVT_VC_F64_FXS32
+ VCVT_HI_F64_FXS32
+ VCVT_LS_F64_FXS32
+ VCVT_GE_F64_FXS32
+ VCVT_LT_F64_FXS32
+ VCVT_GT_F64_FXS32
+ VCVT_LE_F64_FXS32
+ VCVT_F64_FXS32
+ VCVT_ZZ_F64_FXS32
+ VCVT_EQ_F64_FXU16
+ VCVT_NE_F64_FXU16
+ VCVT_CS_F64_FXU16
+ VCVT_CC_F64_FXU16
+ VCVT_MI_F64_FXU16
+ VCVT_PL_F64_FXU16
+ VCVT_VS_F64_FXU16
+ VCVT_VC_F64_FXU16
+ VCVT_HI_F64_FXU16
+ VCVT_LS_F64_FXU16
+ VCVT_GE_F64_FXU16
+ VCVT_LT_F64_FXU16
+ VCVT_GT_F64_FXU16
+ VCVT_LE_F64_FXU16
+ VCVT_F64_FXU16
+ VCVT_ZZ_F64_FXU16
+ VCVT_EQ_F64_FXU32
+ VCVT_NE_F64_FXU32
+ VCVT_CS_F64_FXU32
+ VCVT_CC_F64_FXU32
+ VCVT_MI_F64_FXU32
+ VCVT_PL_F64_FXU32
+ VCVT_VS_F64_FXU32
+ VCVT_VC_F64_FXU32
+ VCVT_HI_F64_FXU32
+ VCVT_LS_F64_FXU32
+ VCVT_GE_F64_FXU32
+ VCVT_LT_F64_FXU32
+ VCVT_GT_F64_FXU32
+ VCVT_LE_F64_FXU32
+ VCVT_F64_FXU32
+ VCVT_ZZ_F64_FXU32
+ VCVT_EQ_F32_U32
+ VCVT_NE_F32_U32
+ VCVT_CS_F32_U32
+ VCVT_CC_F32_U32
+ VCVT_MI_F32_U32
+ VCVT_PL_F32_U32
+ VCVT_VS_F32_U32
+ VCVT_VC_F32_U32
+ VCVT_HI_F32_U32
+ VCVT_LS_F32_U32
+ VCVT_GE_F32_U32
+ VCVT_LT_F32_U32
+ VCVT_GT_F32_U32
+ VCVT_LE_F32_U32
+ VCVT_F32_U32
+ VCVT_ZZ_F32_U32
+ VCVT_EQ_F32_S32
+ VCVT_NE_F32_S32
+ VCVT_CS_F32_S32
+ VCVT_CC_F32_S32
+ VCVT_MI_F32_S32
+ VCVT_PL_F32_S32
+ VCVT_VS_F32_S32
+ VCVT_VC_F32_S32
+ VCVT_HI_F32_S32
+ VCVT_LS_F32_S32
+ VCVT_GE_F32_S32
+ VCVT_LT_F32_S32
+ VCVT_GT_F32_S32
+ VCVT_LE_F32_S32
+ VCVT_F32_S32
+ VCVT_ZZ_F32_S32
+ VCVT_EQ_F64_U32
+ VCVT_NE_F64_U32
+ VCVT_CS_F64_U32
+ VCVT_CC_F64_U32
+ VCVT_MI_F64_U32
+ VCVT_PL_F64_U32
+ VCVT_VS_F64_U32
+ VCVT_VC_F64_U32
+ VCVT_HI_F64_U32
+ VCVT_LS_F64_U32
+ VCVT_GE_F64_U32
+ VCVT_LT_F64_U32
+ VCVT_GT_F64_U32
+ VCVT_LE_F64_U32
+ VCVT_F64_U32
+ VCVT_ZZ_F64_U32
+ VCVT_EQ_F64_S32
+ VCVT_NE_F64_S32
+ VCVT_CS_F64_S32
+ VCVT_CC_F64_S32
+ VCVT_MI_F64_S32
+ VCVT_PL_F64_S32
+ VCVT_VS_F64_S32
+ VCVT_VC_F64_S32
+ VCVT_HI_F64_S32
+ VCVT_LS_F64_S32
+ VCVT_GE_F64_S32
+ VCVT_LT_F64_S32
+ VCVT_GT_F64_S32
+ VCVT_LE_F64_S32
+ VCVT_F64_S32
+ VCVT_ZZ_F64_S32
+ VCVT_EQ_F64_F32
+ VCVT_NE_F64_F32
+ VCVT_CS_F64_F32
+ VCVT_CC_F64_F32
+ VCVT_MI_F64_F32
+ VCVT_PL_F64_F32
+ VCVT_VS_F64_F32
+ VCVT_VC_F64_F32
+ VCVT_HI_F64_F32
+ VCVT_LS_F64_F32
+ VCVT_GE_F64_F32
+ VCVT_LT_F64_F32
+ VCVT_GT_F64_F32
+ VCVT_LE_F64_F32
+ VCVT_F64_F32
+ VCVT_ZZ_F64_F32
+ VCVT_EQ_F32_F64
+ VCVT_NE_F32_F64
+ VCVT_CS_F32_F64
+ VCVT_CC_F32_F64
+ VCVT_MI_F32_F64
+ VCVT_PL_F32_F64
+ VCVT_VS_F32_F64
+ VCVT_VC_F32_F64
+ VCVT_HI_F32_F64
+ VCVT_LS_F32_F64
+ VCVT_GE_F32_F64
+ VCVT_LT_F32_F64
+ VCVT_GT_F32_F64
+ VCVT_LE_F32_F64
+ VCVT_F32_F64
+ VCVT_ZZ_F32_F64
+ VCVT_EQ_FXS16_F32
+ VCVT_NE_FXS16_F32
+ VCVT_CS_FXS16_F32
+ VCVT_CC_FXS16_F32
+ VCVT_MI_FXS16_F32
+ VCVT_PL_FXS16_F32
+ VCVT_VS_FXS16_F32
+ VCVT_VC_FXS16_F32
+ VCVT_HI_FXS16_F32
+ VCVT_LS_FXS16_F32
+ VCVT_GE_FXS16_F32
+ VCVT_LT_FXS16_F32
+ VCVT_GT_FXS16_F32
+ VCVT_LE_FXS16_F32
+ VCVT_FXS16_F32
+ VCVT_ZZ_FXS16_F32
+ VCVT_EQ_FXS16_F64
+ VCVT_NE_FXS16_F64
+ VCVT_CS_FXS16_F64
+ VCVT_CC_FXS16_F64
+ VCVT_MI_FXS16_F64
+ VCVT_PL_FXS16_F64
+ VCVT_VS_FXS16_F64
+ VCVT_VC_FXS16_F64
+ VCVT_HI_FXS16_F64
+ VCVT_LS_FXS16_F64
+ VCVT_GE_FXS16_F64
+ VCVT_LT_FXS16_F64
+ VCVT_GT_FXS16_F64
+ VCVT_LE_FXS16_F64
+ VCVT_FXS16_F64
+ VCVT_ZZ_FXS16_F64
+ VCVT_EQ_FXS32_F32
+ VCVT_NE_FXS32_F32
+ VCVT_CS_FXS32_F32
+ VCVT_CC_FXS32_F32
+ VCVT_MI_FXS32_F32
+ VCVT_PL_FXS32_F32
+ VCVT_VS_FXS32_F32
+ VCVT_VC_FXS32_F32
+ VCVT_HI_FXS32_F32
+ VCVT_LS_FXS32_F32
+ VCVT_GE_FXS32_F32
+ VCVT_LT_FXS32_F32
+ VCVT_GT_FXS32_F32
+ VCVT_LE_FXS32_F32
+ VCVT_FXS32_F32
+ VCVT_ZZ_FXS32_F32
+ VCVT_EQ_FXS32_F64
+ VCVT_NE_FXS32_F64
+ VCVT_CS_FXS32_F64
+ VCVT_CC_FXS32_F64
+ VCVT_MI_FXS32_F64
+ VCVT_PL_FXS32_F64
+ VCVT_VS_FXS32_F64
+ VCVT_VC_FXS32_F64
+ VCVT_HI_FXS32_F64
+ VCVT_LS_FXS32_F64
+ VCVT_GE_FXS32_F64
+ VCVT_LT_FXS32_F64
+ VCVT_GT_FXS32_F64
+ VCVT_LE_FXS32_F64
+ VCVT_FXS32_F64
+ VCVT_ZZ_FXS32_F64
+ VCVT_EQ_FXU16_F32
+ VCVT_NE_FXU16_F32
+ VCVT_CS_FXU16_F32
+ VCVT_CC_FXU16_F32
+ VCVT_MI_FXU16_F32
+ VCVT_PL_FXU16_F32
+ VCVT_VS_FXU16_F32
+ VCVT_VC_FXU16_F32
+ VCVT_HI_FXU16_F32
+ VCVT_LS_FXU16_F32
+ VCVT_GE_FXU16_F32
+ VCVT_LT_FXU16_F32
+ VCVT_GT_FXU16_F32
+ VCVT_LE_FXU16_F32
+ VCVT_FXU16_F32
+ VCVT_ZZ_FXU16_F32
+ VCVT_EQ_FXU16_F64
+ VCVT_NE_FXU16_F64
+ VCVT_CS_FXU16_F64
+ VCVT_CC_FXU16_F64
+ VCVT_MI_FXU16_F64
+ VCVT_PL_FXU16_F64
+ VCVT_VS_FXU16_F64
+ VCVT_VC_FXU16_F64
+ VCVT_HI_FXU16_F64
+ VCVT_LS_FXU16_F64
+ VCVT_GE_FXU16_F64
+ VCVT_LT_FXU16_F64
+ VCVT_GT_FXU16_F64
+ VCVT_LE_FXU16_F64
+ VCVT_FXU16_F64
+ VCVT_ZZ_FXU16_F64
+ VCVT_EQ_FXU32_F32
+ VCVT_NE_FXU32_F32
+ VCVT_CS_FXU32_F32
+ VCVT_CC_FXU32_F32
+ VCVT_MI_FXU32_F32
+ VCVT_PL_FXU32_F32
+ VCVT_VS_FXU32_F32
+ VCVT_VC_FXU32_F32
+ VCVT_HI_FXU32_F32
+ VCVT_LS_FXU32_F32
+ VCVT_GE_FXU32_F32
+ VCVT_LT_FXU32_F32
+ VCVT_GT_FXU32_F32
+ VCVT_LE_FXU32_F32
+ VCVT_FXU32_F32
+ VCVT_ZZ_FXU32_F32
+ VCVT_EQ_FXU32_F64
+ VCVT_NE_FXU32_F64
+ VCVT_CS_FXU32_F64
+ VCVT_CC_FXU32_F64
+ VCVT_MI_FXU32_F64
+ VCVT_PL_FXU32_F64
+ VCVT_VS_FXU32_F64
+ VCVT_VC_FXU32_F64
+ VCVT_HI_FXU32_F64
+ VCVT_LS_FXU32_F64
+ VCVT_GE_FXU32_F64
+ VCVT_LT_FXU32_F64
+ VCVT_GT_FXU32_F64
+ VCVT_LE_FXU32_F64
+ VCVT_FXU32_F64
+ VCVT_ZZ_FXU32_F64
+ VCVTB_EQ_F32_F16
+ VCVTB_NE_F32_F16
+ VCVTB_CS_F32_F16
+ VCVTB_CC_F32_F16
+ VCVTB_MI_F32_F16
+ VCVTB_PL_F32_F16
+ VCVTB_VS_F32_F16
+ VCVTB_VC_F32_F16
+ VCVTB_HI_F32_F16
+ VCVTB_LS_F32_F16
+ VCVTB_GE_F32_F16
+ VCVTB_LT_F32_F16
+ VCVTB_GT_F32_F16
+ VCVTB_LE_F32_F16
+ VCVTB_F32_F16
+ VCVTB_ZZ_F32_F16
+ VCVTB_EQ_F16_F32
+ VCVTB_NE_F16_F32
+ VCVTB_CS_F16_F32
+ VCVTB_CC_F16_F32
+ VCVTB_MI_F16_F32
+ VCVTB_PL_F16_F32
+ VCVTB_VS_F16_F32
+ VCVTB_VC_F16_F32
+ VCVTB_HI_F16_F32
+ VCVTB_LS_F16_F32
+ VCVTB_GE_F16_F32
+ VCVTB_LT_F16_F32
+ VCVTB_GT_F16_F32
+ VCVTB_LE_F16_F32
+ VCVTB_F16_F32
+ VCVTB_ZZ_F16_F32
+ VCVTT_EQ_F32_F16
+ VCVTT_NE_F32_F16
+ VCVTT_CS_F32_F16
+ VCVTT_CC_F32_F16
+ VCVTT_MI_F32_F16
+ VCVTT_PL_F32_F16
+ VCVTT_VS_F32_F16
+ VCVTT_VC_F32_F16
+ VCVTT_HI_F32_F16
+ VCVTT_LS_F32_F16
+ VCVTT_GE_F32_F16
+ VCVTT_LT_F32_F16
+ VCVTT_GT_F32_F16
+ VCVTT_LE_F32_F16
+ VCVTT_F32_F16
+ VCVTT_ZZ_F32_F16
+ VCVTT_EQ_F16_F32
+ VCVTT_NE_F16_F32
+ VCVTT_CS_F16_F32
+ VCVTT_CC_F16_F32
+ VCVTT_MI_F16_F32
+ VCVTT_PL_F16_F32
+ VCVTT_VS_F16_F32
+ VCVTT_VC_F16_F32
+ VCVTT_HI_F16_F32
+ VCVTT_LS_F16_F32
+ VCVTT_GE_F16_F32
+ VCVTT_LT_F16_F32
+ VCVTT_GT_F16_F32
+ VCVTT_LE_F16_F32
+ VCVTT_F16_F32
+ VCVTT_ZZ_F16_F32
+ VCVTR_EQ_U32_F32
+ VCVTR_NE_U32_F32
+ VCVTR_CS_U32_F32
+ VCVTR_CC_U32_F32
+ VCVTR_MI_U32_F32
+ VCVTR_PL_U32_F32
+ VCVTR_VS_U32_F32
+ VCVTR_VC_U32_F32
+ VCVTR_HI_U32_F32
+ VCVTR_LS_U32_F32
+ VCVTR_GE_U32_F32
+ VCVTR_LT_U32_F32
+ VCVTR_GT_U32_F32
+ VCVTR_LE_U32_F32
+ VCVTR_U32_F32
+ VCVTR_ZZ_U32_F32
+ VCVTR_EQ_U32_F64
+ VCVTR_NE_U32_F64
+ VCVTR_CS_U32_F64
+ VCVTR_CC_U32_F64
+ VCVTR_MI_U32_F64
+ VCVTR_PL_U32_F64
+ VCVTR_VS_U32_F64
+ VCVTR_VC_U32_F64
+ VCVTR_HI_U32_F64
+ VCVTR_LS_U32_F64
+ VCVTR_GE_U32_F64
+ VCVTR_LT_U32_F64
+ VCVTR_GT_U32_F64
+ VCVTR_LE_U32_F64
+ VCVTR_U32_F64
+ VCVTR_ZZ_U32_F64
+ VCVTR_EQ_S32_F32
+ VCVTR_NE_S32_F32
+ VCVTR_CS_S32_F32
+ VCVTR_CC_S32_F32
+ VCVTR_MI_S32_F32
+ VCVTR_PL_S32_F32
+ VCVTR_VS_S32_F32
+ VCVTR_VC_S32_F32
+ VCVTR_HI_S32_F32
+ VCVTR_LS_S32_F32
+ VCVTR_GE_S32_F32
+ VCVTR_LT_S32_F32
+ VCVTR_GT_S32_F32
+ VCVTR_LE_S32_F32
+ VCVTR_S32_F32
+ VCVTR_ZZ_S32_F32
+ VCVTR_EQ_S32_F64
+ VCVTR_NE_S32_F64
+ VCVTR_CS_S32_F64
+ VCVTR_CC_S32_F64
+ VCVTR_MI_S32_F64
+ VCVTR_PL_S32_F64
+ VCVTR_VS_S32_F64
+ VCVTR_VC_S32_F64
+ VCVTR_HI_S32_F64
+ VCVTR_LS_S32_F64
+ VCVTR_GE_S32_F64
+ VCVTR_LT_S32_F64
+ VCVTR_GT_S32_F64
+ VCVTR_LE_S32_F64
+ VCVTR_S32_F64
+ VCVTR_ZZ_S32_F64
+ VCVT_EQ_U32_F32
+ VCVT_NE_U32_F32
+ VCVT_CS_U32_F32
+ VCVT_CC_U32_F32
+ VCVT_MI_U32_F32
+ VCVT_PL_U32_F32
+ VCVT_VS_U32_F32
+ VCVT_VC_U32_F32
+ VCVT_HI_U32_F32
+ VCVT_LS_U32_F32
+ VCVT_GE_U32_F32
+ VCVT_LT_U32_F32
+ VCVT_GT_U32_F32
+ VCVT_LE_U32_F32
+ VCVT_U32_F32
+ VCVT_ZZ_U32_F32
+ VCVT_EQ_U32_F64
+ VCVT_NE_U32_F64
+ VCVT_CS_U32_F64
+ VCVT_CC_U32_F64
+ VCVT_MI_U32_F64
+ VCVT_PL_U32_F64
+ VCVT_VS_U32_F64
+ VCVT_VC_U32_F64
+ VCVT_HI_U32_F64
+ VCVT_LS_U32_F64
+ VCVT_GE_U32_F64
+ VCVT_LT_U32_F64
+ VCVT_GT_U32_F64
+ VCVT_LE_U32_F64
+ VCVT_U32_F64
+ VCVT_ZZ_U32_F64
+ VCVT_EQ_S32_F32
+ VCVT_NE_S32_F32
+ VCVT_CS_S32_F32
+ VCVT_CC_S32_F32
+ VCVT_MI_S32_F32
+ VCVT_PL_S32_F32
+ VCVT_VS_S32_F32
+ VCVT_VC_S32_F32
+ VCVT_HI_S32_F32
+ VCVT_LS_S32_F32
+ VCVT_GE_S32_F32
+ VCVT_LT_S32_F32
+ VCVT_GT_S32_F32
+ VCVT_LE_S32_F32
+ VCVT_S32_F32
+ VCVT_ZZ_S32_F32
+ VCVT_EQ_S32_F64
+ VCVT_NE_S32_F64
+ VCVT_CS_S32_F64
+ VCVT_CC_S32_F64
+ VCVT_MI_S32_F64
+ VCVT_PL_S32_F64
+ VCVT_VS_S32_F64
+ VCVT_VC_S32_F64
+ VCVT_HI_S32_F64
+ VCVT_LS_S32_F64
+ VCVT_GE_S32_F64
+ VCVT_LT_S32_F64
+ VCVT_GT_S32_F64
+ VCVT_LE_S32_F64
+ VCVT_S32_F64
+ VCVT_ZZ_S32_F64
+ VDIV_EQ_F32
+ VDIV_NE_F32
+ VDIV_CS_F32
+ VDIV_CC_F32
+ VDIV_MI_F32
+ VDIV_PL_F32
+ VDIV_VS_F32
+ VDIV_VC_F32
+ VDIV_HI_F32
+ VDIV_LS_F32
+ VDIV_GE_F32
+ VDIV_LT_F32
+ VDIV_GT_F32
+ VDIV_LE_F32
+ VDIV_F32
+ VDIV_ZZ_F32
+ VDIV_EQ_F64
+ VDIV_NE_F64
+ VDIV_CS_F64
+ VDIV_CC_F64
+ VDIV_MI_F64
+ VDIV_PL_F64
+ VDIV_VS_F64
+ VDIV_VC_F64
+ VDIV_HI_F64
+ VDIV_LS_F64
+ VDIV_GE_F64
+ VDIV_LT_F64
+ VDIV_GT_F64
+ VDIV_LE_F64
+ VDIV_F64
+ VDIV_ZZ_F64
+ VLDR_EQ
+ VLDR_NE
+ VLDR_CS
+ VLDR_CC
+ VLDR_MI
+ VLDR_PL
+ VLDR_VS
+ VLDR_VC
+ VLDR_HI
+ VLDR_LS
+ VLDR_GE
+ VLDR_LT
+ VLDR_GT
+ VLDR_LE
+ VLDR
+ VLDR_ZZ
+ VMLA_EQ_F32
+ VMLA_NE_F32
+ VMLA_CS_F32
+ VMLA_CC_F32
+ VMLA_MI_F32
+ VMLA_PL_F32
+ VMLA_VS_F32
+ VMLA_VC_F32
+ VMLA_HI_F32
+ VMLA_LS_F32
+ VMLA_GE_F32
+ VMLA_LT_F32
+ VMLA_GT_F32
+ VMLA_LE_F32
+ VMLA_F32
+ VMLA_ZZ_F32
+ VMLA_EQ_F64
+ VMLA_NE_F64
+ VMLA_CS_F64
+ VMLA_CC_F64
+ VMLA_MI_F64
+ VMLA_PL_F64
+ VMLA_VS_F64
+ VMLA_VC_F64
+ VMLA_HI_F64
+ VMLA_LS_F64
+ VMLA_GE_F64
+ VMLA_LT_F64
+ VMLA_GT_F64
+ VMLA_LE_F64
+ VMLA_F64
+ VMLA_ZZ_F64
+ VMLS_EQ_F32
+ VMLS_NE_F32
+ VMLS_CS_F32
+ VMLS_CC_F32
+ VMLS_MI_F32
+ VMLS_PL_F32
+ VMLS_VS_F32
+ VMLS_VC_F32
+ VMLS_HI_F32
+ VMLS_LS_F32
+ VMLS_GE_F32
+ VMLS_LT_F32
+ VMLS_GT_F32
+ VMLS_LE_F32
+ VMLS_F32
+ VMLS_ZZ_F32
+ VMLS_EQ_F64
+ VMLS_NE_F64
+ VMLS_CS_F64
+ VMLS_CC_F64
+ VMLS_MI_F64
+ VMLS_PL_F64
+ VMLS_VS_F64
+ VMLS_VC_F64
+ VMLS_HI_F64
+ VMLS_LS_F64
+ VMLS_GE_F64
+ VMLS_LT_F64
+ VMLS_GT_F64
+ VMLS_LE_F64
+ VMLS_F64
+ VMLS_ZZ_F64
+ VMOV_EQ
+ VMOV_NE
+ VMOV_CS
+ VMOV_CC
+ VMOV_MI
+ VMOV_PL
+ VMOV_VS
+ VMOV_VC
+ VMOV_HI
+ VMOV_LS
+ VMOV_GE
+ VMOV_LT
+ VMOV_GT
+ VMOV_LE
+ VMOV
+ VMOV_ZZ
+ VMOV_EQ_32
+ VMOV_NE_32
+ VMOV_CS_32
+ VMOV_CC_32
+ VMOV_MI_32
+ VMOV_PL_32
+ VMOV_VS_32
+ VMOV_VC_32
+ VMOV_HI_32
+ VMOV_LS_32
+ VMOV_GE_32
+ VMOV_LT_32
+ VMOV_GT_32
+ VMOV_LE_32
+ VMOV_32
+ VMOV_ZZ_32
+ VMOV_EQ_F32
+ VMOV_NE_F32
+ VMOV_CS_F32
+ VMOV_CC_F32
+ VMOV_MI_F32
+ VMOV_PL_F32
+ VMOV_VS_F32
+ VMOV_VC_F32
+ VMOV_HI_F32
+ VMOV_LS_F32
+ VMOV_GE_F32
+ VMOV_LT_F32
+ VMOV_GT_F32
+ VMOV_LE_F32
+ VMOV_F32
+ VMOV_ZZ_F32
+ VMOV_EQ_F64
+ VMOV_NE_F64
+ VMOV_CS_F64
+ VMOV_CC_F64
+ VMOV_MI_F64
+ VMOV_PL_F64
+ VMOV_VS_F64
+ VMOV_VC_F64
+ VMOV_HI_F64
+ VMOV_LS_F64
+ VMOV_GE_F64
+ VMOV_LT_F64
+ VMOV_GT_F64
+ VMOV_LE_F64
+ VMOV_F64
+ VMOV_ZZ_F64
+ VMRS_EQ
+ VMRS_NE
+ VMRS_CS
+ VMRS_CC
+ VMRS_MI
+ VMRS_PL
+ VMRS_VS
+ VMRS_VC
+ VMRS_HI
+ VMRS_LS
+ VMRS_GE
+ VMRS_LT
+ VMRS_GT
+ VMRS_LE
+ VMRS
+ VMRS_ZZ
+ VMSR_EQ
+ VMSR_NE
+ VMSR_CS
+ VMSR_CC
+ VMSR_MI
+ VMSR_PL
+ VMSR_VS
+ VMSR_VC
+ VMSR_HI
+ VMSR_LS
+ VMSR_GE
+ VMSR_LT
+ VMSR_GT
+ VMSR_LE
+ VMSR
+ VMSR_ZZ
+ VMUL_EQ_F32
+ VMUL_NE_F32
+ VMUL_CS_F32
+ VMUL_CC_F32
+ VMUL_MI_F32
+ VMUL_PL_F32
+ VMUL_VS_F32
+ VMUL_VC_F32
+ VMUL_HI_F32
+ VMUL_LS_F32
+ VMUL_GE_F32
+ VMUL_LT_F32
+ VMUL_GT_F32
+ VMUL_LE_F32
+ VMUL_F32
+ VMUL_ZZ_F32
+ VMUL_EQ_F64
+ VMUL_NE_F64
+ VMUL_CS_F64
+ VMUL_CC_F64
+ VMUL_MI_F64
+ VMUL_PL_F64
+ VMUL_VS_F64
+ VMUL_VC_F64
+ VMUL_HI_F64
+ VMUL_LS_F64
+ VMUL_GE_F64
+ VMUL_LT_F64
+ VMUL_GT_F64
+ VMUL_LE_F64
+ VMUL_F64
+ VMUL_ZZ_F64
+ VNEG_EQ_F32
+ VNEG_NE_F32
+ VNEG_CS_F32
+ VNEG_CC_F32
+ VNEG_MI_F32
+ VNEG_PL_F32
+ VNEG_VS_F32
+ VNEG_VC_F32
+ VNEG_HI_F32
+ VNEG_LS_F32
+ VNEG_GE_F32
+ VNEG_LT_F32
+ VNEG_GT_F32
+ VNEG_LE_F32
+ VNEG_F32
+ VNEG_ZZ_F32
+ VNEG_EQ_F64
+ VNEG_NE_F64
+ VNEG_CS_F64
+ VNEG_CC_F64
+ VNEG_MI_F64
+ VNEG_PL_F64
+ VNEG_VS_F64
+ VNEG_VC_F64
+ VNEG_HI_F64
+ VNEG_LS_F64
+ VNEG_GE_F64
+ VNEG_LT_F64
+ VNEG_GT_F64
+ VNEG_LE_F64
+ VNEG_F64
+ VNEG_ZZ_F64
+ VNMLS_EQ_F32
+ VNMLS_NE_F32
+ VNMLS_CS_F32
+ VNMLS_CC_F32
+ VNMLS_MI_F32
+ VNMLS_PL_F32
+ VNMLS_VS_F32
+ VNMLS_VC_F32
+ VNMLS_HI_F32
+ VNMLS_LS_F32
+ VNMLS_GE_F32
+ VNMLS_LT_F32
+ VNMLS_GT_F32
+ VNMLS_LE_F32
+ VNMLS_F32
+ VNMLS_ZZ_F32
+ VNMLS_EQ_F64
+ VNMLS_NE_F64
+ VNMLS_CS_F64
+ VNMLS_CC_F64
+ VNMLS_MI_F64
+ VNMLS_PL_F64
+ VNMLS_VS_F64
+ VNMLS_VC_F64
+ VNMLS_HI_F64
+ VNMLS_LS_F64
+ VNMLS_GE_F64
+ VNMLS_LT_F64
+ VNMLS_GT_F64
+ VNMLS_LE_F64
+ VNMLS_F64
+ VNMLS_ZZ_F64
+ VNMLA_EQ_F32
+ VNMLA_NE_F32
+ VNMLA_CS_F32
+ VNMLA_CC_F32
+ VNMLA_MI_F32
+ VNMLA_PL_F32
+ VNMLA_VS_F32
+ VNMLA_VC_F32
+ VNMLA_HI_F32
+ VNMLA_LS_F32
+ VNMLA_GE_F32
+ VNMLA_LT_F32
+ VNMLA_GT_F32
+ VNMLA_LE_F32
+ VNMLA_F32
+ VNMLA_ZZ_F32
+ VNMLA_EQ_F64
+ VNMLA_NE_F64
+ VNMLA_CS_F64
+ VNMLA_CC_F64
+ VNMLA_MI_F64
+ VNMLA_PL_F64
+ VNMLA_VS_F64
+ VNMLA_VC_F64
+ VNMLA_HI_F64
+ VNMLA_LS_F64
+ VNMLA_GE_F64
+ VNMLA_LT_F64
+ VNMLA_GT_F64
+ VNMLA_LE_F64
+ VNMLA_F64
+ VNMLA_ZZ_F64
+ VNMUL_EQ_F32
+ VNMUL_NE_F32
+ VNMUL_CS_F32
+ VNMUL_CC_F32
+ VNMUL_MI_F32
+ VNMUL_PL_F32
+ VNMUL_VS_F32
+ VNMUL_VC_F32
+ VNMUL_HI_F32
+ VNMUL_LS_F32
+ VNMUL_GE_F32
+ VNMUL_LT_F32
+ VNMUL_GT_F32
+ VNMUL_LE_F32
+ VNMUL_F32
+ VNMUL_ZZ_F32
+ VNMUL_EQ_F64
+ VNMUL_NE_F64
+ VNMUL_CS_F64
+ VNMUL_CC_F64
+ VNMUL_MI_F64
+ VNMUL_PL_F64
+ VNMUL_VS_F64
+ VNMUL_VC_F64
+ VNMUL_HI_F64
+ VNMUL_LS_F64
+ VNMUL_GE_F64
+ VNMUL_LT_F64
+ VNMUL_GT_F64
+ VNMUL_LE_F64
+ VNMUL_F64
+ VNMUL_ZZ_F64
+ VSQRT_EQ_F32
+ VSQRT_NE_F32
+ VSQRT_CS_F32
+ VSQRT_CC_F32
+ VSQRT_MI_F32
+ VSQRT_PL_F32
+ VSQRT_VS_F32
+ VSQRT_VC_F32
+ VSQRT_HI_F32
+ VSQRT_LS_F32
+ VSQRT_GE_F32
+ VSQRT_LT_F32
+ VSQRT_GT_F32
+ VSQRT_LE_F32
+ VSQRT_F32
+ VSQRT_ZZ_F32
+ VSQRT_EQ_F64
+ VSQRT_NE_F64
+ VSQRT_CS_F64
+ VSQRT_CC_F64
+ VSQRT_MI_F64
+ VSQRT_PL_F64
+ VSQRT_VS_F64
+ VSQRT_VC_F64
+ VSQRT_HI_F64
+ VSQRT_LS_F64
+ VSQRT_GE_F64
+ VSQRT_LT_F64
+ VSQRT_GT_F64
+ VSQRT_LE_F64
+ VSQRT_F64
+ VSQRT_ZZ_F64
+ VSTR_EQ
+ VSTR_NE
+ VSTR_CS
+ VSTR_CC
+ VSTR_MI
+ VSTR_PL
+ VSTR_VS
+ VSTR_VC
+ VSTR_HI
+ VSTR_LS
+ VSTR_GE
+ VSTR_LT
+ VSTR_GT
+ VSTR_LE
+ VSTR
+ VSTR_ZZ
+ VSUB_EQ_F32
+ VSUB_NE_F32
+ VSUB_CS_F32
+ VSUB_CC_F32
+ VSUB_MI_F32
+ VSUB_PL_F32
+ VSUB_VS_F32
+ VSUB_VC_F32
+ VSUB_HI_F32
+ VSUB_LS_F32
+ VSUB_GE_F32
+ VSUB_LT_F32
+ VSUB_GT_F32
+ VSUB_LE_F32
+ VSUB_F32
+ VSUB_ZZ_F32
+ VSUB_EQ_F64
+ VSUB_NE_F64
+ VSUB_CS_F64
+ VSUB_CC_F64
+ VSUB_MI_F64
+ VSUB_PL_F64
+ VSUB_VS_F64
+ VSUB_VC_F64
+ VSUB_HI_F64
+ VSUB_LS_F64
+ VSUB_GE_F64
+ VSUB_LT_F64
+ VSUB_GT_F64
+ VSUB_LE_F64
+ VSUB_F64
+ VSUB_ZZ_F64
+ WFE_EQ
+ WFE_NE
+ WFE_CS
+ WFE_CC
+ WFE_MI
+ WFE_PL
+ WFE_VS
+ WFE_VC
+ WFE_HI
+ WFE_LS
+ WFE_GE
+ WFE_LT
+ WFE_GT
+ WFE_LE
+ WFE
+ WFE_ZZ
+ WFI_EQ
+ WFI_NE
+ WFI_CS
+ WFI_CC
+ WFI_MI
+ WFI_PL
+ WFI_VS
+ WFI_VC
+ WFI_HI
+ WFI_LS
+ WFI_GE
+ WFI_LT
+ WFI_GT
+ WFI_LE
+ WFI
+ WFI_ZZ
+ YIELD_EQ
+ YIELD_NE
+ YIELD_CS
+ YIELD_CC
+ YIELD_MI
+ YIELD_PL
+ YIELD_VS
+ YIELD_VC
+ YIELD_HI
+ YIELD_LS
+ YIELD_GE
+ YIELD_LT
+ YIELD_GT
+ YIELD_LE
+ YIELD
+ YIELD_ZZ
+)
+
+var opstr = [...]string{
+ ADC_EQ: "ADC.EQ",
+ ADC_NE: "ADC.NE",
+ ADC_CS: "ADC.CS",
+ ADC_CC: "ADC.CC",
+ ADC_MI: "ADC.MI",
+ ADC_PL: "ADC.PL",
+ ADC_VS: "ADC.VS",
+ ADC_VC: "ADC.VC",
+ ADC_HI: "ADC.HI",
+ ADC_LS: "ADC.LS",
+ ADC_GE: "ADC.GE",
+ ADC_LT: "ADC.LT",
+ ADC_GT: "ADC.GT",
+ ADC_LE: "ADC.LE",
+ ADC: "ADC",
+ ADC_ZZ: "ADC.ZZ",
+ ADC_S_EQ: "ADC.S.EQ",
+ ADC_S_NE: "ADC.S.NE",
+ ADC_S_CS: "ADC.S.CS",
+ ADC_S_CC: "ADC.S.CC",
+ ADC_S_MI: "ADC.S.MI",
+ ADC_S_PL: "ADC.S.PL",
+ ADC_S_VS: "ADC.S.VS",
+ ADC_S_VC: "ADC.S.VC",
+ ADC_S_HI: "ADC.S.HI",
+ ADC_S_LS: "ADC.S.LS",
+ ADC_S_GE: "ADC.S.GE",
+ ADC_S_LT: "ADC.S.LT",
+ ADC_S_GT: "ADC.S.GT",
+ ADC_S_LE: "ADC.S.LE",
+ ADC_S: "ADC.S",
+ ADC_S_ZZ: "ADC.S.ZZ",
+ ADD_EQ: "ADD.EQ",
+ ADD_NE: "ADD.NE",
+ ADD_CS: "ADD.CS",
+ ADD_CC: "ADD.CC",
+ ADD_MI: "ADD.MI",
+ ADD_PL: "ADD.PL",
+ ADD_VS: "ADD.VS",
+ ADD_VC: "ADD.VC",
+ ADD_HI: "ADD.HI",
+ ADD_LS: "ADD.LS",
+ ADD_GE: "ADD.GE",
+ ADD_LT: "ADD.LT",
+ ADD_GT: "ADD.GT",
+ ADD_LE: "ADD.LE",
+ ADD: "ADD",
+ ADD_ZZ: "ADD.ZZ",
+ ADD_S_EQ: "ADD.S.EQ",
+ ADD_S_NE: "ADD.S.NE",
+ ADD_S_CS: "ADD.S.CS",
+ ADD_S_CC: "ADD.S.CC",
+ ADD_S_MI: "ADD.S.MI",
+ ADD_S_PL: "ADD.S.PL",
+ ADD_S_VS: "ADD.S.VS",
+ ADD_S_VC: "ADD.S.VC",
+ ADD_S_HI: "ADD.S.HI",
+ ADD_S_LS: "ADD.S.LS",
+ ADD_S_GE: "ADD.S.GE",
+ ADD_S_LT: "ADD.S.LT",
+ ADD_S_GT: "ADD.S.GT",
+ ADD_S_LE: "ADD.S.LE",
+ ADD_S: "ADD.S",
+ ADD_S_ZZ: "ADD.S.ZZ",
+ AND_EQ: "AND.EQ",
+ AND_NE: "AND.NE",
+ AND_CS: "AND.CS",
+ AND_CC: "AND.CC",
+ AND_MI: "AND.MI",
+ AND_PL: "AND.PL",
+ AND_VS: "AND.VS",
+ AND_VC: "AND.VC",
+ AND_HI: "AND.HI",
+ AND_LS: "AND.LS",
+ AND_GE: "AND.GE",
+ AND_LT: "AND.LT",
+ AND_GT: "AND.GT",
+ AND_LE: "AND.LE",
+ AND: "AND",
+ AND_ZZ: "AND.ZZ",
+ AND_S_EQ: "AND.S.EQ",
+ AND_S_NE: "AND.S.NE",
+ AND_S_CS: "AND.S.CS",
+ AND_S_CC: "AND.S.CC",
+ AND_S_MI: "AND.S.MI",
+ AND_S_PL: "AND.S.PL",
+ AND_S_VS: "AND.S.VS",
+ AND_S_VC: "AND.S.VC",
+ AND_S_HI: "AND.S.HI",
+ AND_S_LS: "AND.S.LS",
+ AND_S_GE: "AND.S.GE",
+ AND_S_LT: "AND.S.LT",
+ AND_S_GT: "AND.S.GT",
+ AND_S_LE: "AND.S.LE",
+ AND_S: "AND.S",
+ AND_S_ZZ: "AND.S.ZZ",
+ ASR_EQ: "ASR.EQ",
+ ASR_NE: "ASR.NE",
+ ASR_CS: "ASR.CS",
+ ASR_CC: "ASR.CC",
+ ASR_MI: "ASR.MI",
+ ASR_PL: "ASR.PL",
+ ASR_VS: "ASR.VS",
+ ASR_VC: "ASR.VC",
+ ASR_HI: "ASR.HI",
+ ASR_LS: "ASR.LS",
+ ASR_GE: "ASR.GE",
+ ASR_LT: "ASR.LT",
+ ASR_GT: "ASR.GT",
+ ASR_LE: "ASR.LE",
+ ASR: "ASR",
+ ASR_ZZ: "ASR.ZZ",
+ ASR_S_EQ: "ASR.S.EQ",
+ ASR_S_NE: "ASR.S.NE",
+ ASR_S_CS: "ASR.S.CS",
+ ASR_S_CC: "ASR.S.CC",
+ ASR_S_MI: "ASR.S.MI",
+ ASR_S_PL: "ASR.S.PL",
+ ASR_S_VS: "ASR.S.VS",
+ ASR_S_VC: "ASR.S.VC",
+ ASR_S_HI: "ASR.S.HI",
+ ASR_S_LS: "ASR.S.LS",
+ ASR_S_GE: "ASR.S.GE",
+ ASR_S_LT: "ASR.S.LT",
+ ASR_S_GT: "ASR.S.GT",
+ ASR_S_LE: "ASR.S.LE",
+ ASR_S: "ASR.S",
+ ASR_S_ZZ: "ASR.S.ZZ",
+ B_EQ: "B.EQ",
+ B_NE: "B.NE",
+ B_CS: "B.CS",
+ B_CC: "B.CC",
+ B_MI: "B.MI",
+ B_PL: "B.PL",
+ B_VS: "B.VS",
+ B_VC: "B.VC",
+ B_HI: "B.HI",
+ B_LS: "B.LS",
+ B_GE: "B.GE",
+ B_LT: "B.LT",
+ B_GT: "B.GT",
+ B_LE: "B.LE",
+ B: "B",
+ B_ZZ: "B.ZZ",
+ BFC_EQ: "BFC.EQ",
+ BFC_NE: "BFC.NE",
+ BFC_CS: "BFC.CS",
+ BFC_CC: "BFC.CC",
+ BFC_MI: "BFC.MI",
+ BFC_PL: "BFC.PL",
+ BFC_VS: "BFC.VS",
+ BFC_VC: "BFC.VC",
+ BFC_HI: "BFC.HI",
+ BFC_LS: "BFC.LS",
+ BFC_GE: "BFC.GE",
+ BFC_LT: "BFC.LT",
+ BFC_GT: "BFC.GT",
+ BFC_LE: "BFC.LE",
+ BFC: "BFC",
+ BFC_ZZ: "BFC.ZZ",
+ BFI_EQ: "BFI.EQ",
+ BFI_NE: "BFI.NE",
+ BFI_CS: "BFI.CS",
+ BFI_CC: "BFI.CC",
+ BFI_MI: "BFI.MI",
+ BFI_PL: "BFI.PL",
+ BFI_VS: "BFI.VS",
+ BFI_VC: "BFI.VC",
+ BFI_HI: "BFI.HI",
+ BFI_LS: "BFI.LS",
+ BFI_GE: "BFI.GE",
+ BFI_LT: "BFI.LT",
+ BFI_GT: "BFI.GT",
+ BFI_LE: "BFI.LE",
+ BFI: "BFI",
+ BFI_ZZ: "BFI.ZZ",
+ BIC_EQ: "BIC.EQ",
+ BIC_NE: "BIC.NE",
+ BIC_CS: "BIC.CS",
+ BIC_CC: "BIC.CC",
+ BIC_MI: "BIC.MI",
+ BIC_PL: "BIC.PL",
+ BIC_VS: "BIC.VS",
+ BIC_VC: "BIC.VC",
+ BIC_HI: "BIC.HI",
+ BIC_LS: "BIC.LS",
+ BIC_GE: "BIC.GE",
+ BIC_LT: "BIC.LT",
+ BIC_GT: "BIC.GT",
+ BIC_LE: "BIC.LE",
+ BIC: "BIC",
+ BIC_ZZ: "BIC.ZZ",
+ BIC_S_EQ: "BIC.S.EQ",
+ BIC_S_NE: "BIC.S.NE",
+ BIC_S_CS: "BIC.S.CS",
+ BIC_S_CC: "BIC.S.CC",
+ BIC_S_MI: "BIC.S.MI",
+ BIC_S_PL: "BIC.S.PL",
+ BIC_S_VS: "BIC.S.VS",
+ BIC_S_VC: "BIC.S.VC",
+ BIC_S_HI: "BIC.S.HI",
+ BIC_S_LS: "BIC.S.LS",
+ BIC_S_GE: "BIC.S.GE",
+ BIC_S_LT: "BIC.S.LT",
+ BIC_S_GT: "BIC.S.GT",
+ BIC_S_LE: "BIC.S.LE",
+ BIC_S: "BIC.S",
+ BIC_S_ZZ: "BIC.S.ZZ",
+ BKPT_EQ: "BKPT.EQ",
+ BKPT_NE: "BKPT.NE",
+ BKPT_CS: "BKPT.CS",
+ BKPT_CC: "BKPT.CC",
+ BKPT_MI: "BKPT.MI",
+ BKPT_PL: "BKPT.PL",
+ BKPT_VS: "BKPT.VS",
+ BKPT_VC: "BKPT.VC",
+ BKPT_HI: "BKPT.HI",
+ BKPT_LS: "BKPT.LS",
+ BKPT_GE: "BKPT.GE",
+ BKPT_LT: "BKPT.LT",
+ BKPT_GT: "BKPT.GT",
+ BKPT_LE: "BKPT.LE",
+ BKPT: "BKPT",
+ BKPT_ZZ: "BKPT.ZZ",
+ BL_EQ: "BL.EQ",
+ BL_NE: "BL.NE",
+ BL_CS: "BL.CS",
+ BL_CC: "BL.CC",
+ BL_MI: "BL.MI",
+ BL_PL: "BL.PL",
+ BL_VS: "BL.VS",
+ BL_VC: "BL.VC",
+ BL_HI: "BL.HI",
+ BL_LS: "BL.LS",
+ BL_GE: "BL.GE",
+ BL_LT: "BL.LT",
+ BL_GT: "BL.GT",
+ BL_LE: "BL.LE",
+ BL: "BL",
+ BL_ZZ: "BL.ZZ",
+ BLX_EQ: "BLX.EQ",
+ BLX_NE: "BLX.NE",
+ BLX_CS: "BLX.CS",
+ BLX_CC: "BLX.CC",
+ BLX_MI: "BLX.MI",
+ BLX_PL: "BLX.PL",
+ BLX_VS: "BLX.VS",
+ BLX_VC: "BLX.VC",
+ BLX_HI: "BLX.HI",
+ BLX_LS: "BLX.LS",
+ BLX_GE: "BLX.GE",
+ BLX_LT: "BLX.LT",
+ BLX_GT: "BLX.GT",
+ BLX_LE: "BLX.LE",
+ BLX: "BLX",
+ BLX_ZZ: "BLX.ZZ",
+ BX_EQ: "BX.EQ",
+ BX_NE: "BX.NE",
+ BX_CS: "BX.CS",
+ BX_CC: "BX.CC",
+ BX_MI: "BX.MI",
+ BX_PL: "BX.PL",
+ BX_VS: "BX.VS",
+ BX_VC: "BX.VC",
+ BX_HI: "BX.HI",
+ BX_LS: "BX.LS",
+ BX_GE: "BX.GE",
+ BX_LT: "BX.LT",
+ BX_GT: "BX.GT",
+ BX_LE: "BX.LE",
+ BX: "BX",
+ BX_ZZ: "BX.ZZ",
+ BXJ_EQ: "BXJ.EQ",
+ BXJ_NE: "BXJ.NE",
+ BXJ_CS: "BXJ.CS",
+ BXJ_CC: "BXJ.CC",
+ BXJ_MI: "BXJ.MI",
+ BXJ_PL: "BXJ.PL",
+ BXJ_VS: "BXJ.VS",
+ BXJ_VC: "BXJ.VC",
+ BXJ_HI: "BXJ.HI",
+ BXJ_LS: "BXJ.LS",
+ BXJ_GE: "BXJ.GE",
+ BXJ_LT: "BXJ.LT",
+ BXJ_GT: "BXJ.GT",
+ BXJ_LE: "BXJ.LE",
+ BXJ: "BXJ",
+ BXJ_ZZ: "BXJ.ZZ",
+ CLREX: "CLREX",
+ CLZ_EQ: "CLZ.EQ",
+ CLZ_NE: "CLZ.NE",
+ CLZ_CS: "CLZ.CS",
+ CLZ_CC: "CLZ.CC",
+ CLZ_MI: "CLZ.MI",
+ CLZ_PL: "CLZ.PL",
+ CLZ_VS: "CLZ.VS",
+ CLZ_VC: "CLZ.VC",
+ CLZ_HI: "CLZ.HI",
+ CLZ_LS: "CLZ.LS",
+ CLZ_GE: "CLZ.GE",
+ CLZ_LT: "CLZ.LT",
+ CLZ_GT: "CLZ.GT",
+ CLZ_LE: "CLZ.LE",
+ CLZ: "CLZ",
+ CLZ_ZZ: "CLZ.ZZ",
+ CMN_EQ: "CMN.EQ",
+ CMN_NE: "CMN.NE",
+ CMN_CS: "CMN.CS",
+ CMN_CC: "CMN.CC",
+ CMN_MI: "CMN.MI",
+ CMN_PL: "CMN.PL",
+ CMN_VS: "CMN.VS",
+ CMN_VC: "CMN.VC",
+ CMN_HI: "CMN.HI",
+ CMN_LS: "CMN.LS",
+ CMN_GE: "CMN.GE",
+ CMN_LT: "CMN.LT",
+ CMN_GT: "CMN.GT",
+ CMN_LE: "CMN.LE",
+ CMN: "CMN",
+ CMN_ZZ: "CMN.ZZ",
+ CMP_EQ: "CMP.EQ",
+ CMP_NE: "CMP.NE",
+ CMP_CS: "CMP.CS",
+ CMP_CC: "CMP.CC",
+ CMP_MI: "CMP.MI",
+ CMP_PL: "CMP.PL",
+ CMP_VS: "CMP.VS",
+ CMP_VC: "CMP.VC",
+ CMP_HI: "CMP.HI",
+ CMP_LS: "CMP.LS",
+ CMP_GE: "CMP.GE",
+ CMP_LT: "CMP.LT",
+ CMP_GT: "CMP.GT",
+ CMP_LE: "CMP.LE",
+ CMP: "CMP",
+ CMP_ZZ: "CMP.ZZ",
+ DBG_EQ: "DBG.EQ",
+ DBG_NE: "DBG.NE",
+ DBG_CS: "DBG.CS",
+ DBG_CC: "DBG.CC",
+ DBG_MI: "DBG.MI",
+ DBG_PL: "DBG.PL",
+ DBG_VS: "DBG.VS",
+ DBG_VC: "DBG.VC",
+ DBG_HI: "DBG.HI",
+ DBG_LS: "DBG.LS",
+ DBG_GE: "DBG.GE",
+ DBG_LT: "DBG.LT",
+ DBG_GT: "DBG.GT",
+ DBG_LE: "DBG.LE",
+ DBG: "DBG",
+ DBG_ZZ: "DBG.ZZ",
+ DMB: "DMB",
+ DSB: "DSB",
+ EOR_EQ: "EOR.EQ",
+ EOR_NE: "EOR.NE",
+ EOR_CS: "EOR.CS",
+ EOR_CC: "EOR.CC",
+ EOR_MI: "EOR.MI",
+ EOR_PL: "EOR.PL",
+ EOR_VS: "EOR.VS",
+ EOR_VC: "EOR.VC",
+ EOR_HI: "EOR.HI",
+ EOR_LS: "EOR.LS",
+ EOR_GE: "EOR.GE",
+ EOR_LT: "EOR.LT",
+ EOR_GT: "EOR.GT",
+ EOR_LE: "EOR.LE",
+ EOR: "EOR",
+ EOR_ZZ: "EOR.ZZ",
+ EOR_S_EQ: "EOR.S.EQ",
+ EOR_S_NE: "EOR.S.NE",
+ EOR_S_CS: "EOR.S.CS",
+ EOR_S_CC: "EOR.S.CC",
+ EOR_S_MI: "EOR.S.MI",
+ EOR_S_PL: "EOR.S.PL",
+ EOR_S_VS: "EOR.S.VS",
+ EOR_S_VC: "EOR.S.VC",
+ EOR_S_HI: "EOR.S.HI",
+ EOR_S_LS: "EOR.S.LS",
+ EOR_S_GE: "EOR.S.GE",
+ EOR_S_LT: "EOR.S.LT",
+ EOR_S_GT: "EOR.S.GT",
+ EOR_S_LE: "EOR.S.LE",
+ EOR_S: "EOR.S",
+ EOR_S_ZZ: "EOR.S.ZZ",
+ ISB: "ISB",
+ LDM_EQ: "LDM.EQ",
+ LDM_NE: "LDM.NE",
+ LDM_CS: "LDM.CS",
+ LDM_CC: "LDM.CC",
+ LDM_MI: "LDM.MI",
+ LDM_PL: "LDM.PL",
+ LDM_VS: "LDM.VS",
+ LDM_VC: "LDM.VC",
+ LDM_HI: "LDM.HI",
+ LDM_LS: "LDM.LS",
+ LDM_GE: "LDM.GE",
+ LDM_LT: "LDM.LT",
+ LDM_GT: "LDM.GT",
+ LDM_LE: "LDM.LE",
+ LDM: "LDM",
+ LDM_ZZ: "LDM.ZZ",
+ LDMDA_EQ: "LDMDA.EQ",
+ LDMDA_NE: "LDMDA.NE",
+ LDMDA_CS: "LDMDA.CS",
+ LDMDA_CC: "LDMDA.CC",
+ LDMDA_MI: "LDMDA.MI",
+ LDMDA_PL: "LDMDA.PL",
+ LDMDA_VS: "LDMDA.VS",
+ LDMDA_VC: "LDMDA.VC",
+ LDMDA_HI: "LDMDA.HI",
+ LDMDA_LS: "LDMDA.LS",
+ LDMDA_GE: "LDMDA.GE",
+ LDMDA_LT: "LDMDA.LT",
+ LDMDA_GT: "LDMDA.GT",
+ LDMDA_LE: "LDMDA.LE",
+ LDMDA: "LDMDA",
+ LDMDA_ZZ: "LDMDA.ZZ",
+ LDMDB_EQ: "LDMDB.EQ",
+ LDMDB_NE: "LDMDB.NE",
+ LDMDB_CS: "LDMDB.CS",
+ LDMDB_CC: "LDMDB.CC",
+ LDMDB_MI: "LDMDB.MI",
+ LDMDB_PL: "LDMDB.PL",
+ LDMDB_VS: "LDMDB.VS",
+ LDMDB_VC: "LDMDB.VC",
+ LDMDB_HI: "LDMDB.HI",
+ LDMDB_LS: "LDMDB.LS",
+ LDMDB_GE: "LDMDB.GE",
+ LDMDB_LT: "LDMDB.LT",
+ LDMDB_GT: "LDMDB.GT",
+ LDMDB_LE: "LDMDB.LE",
+ LDMDB: "LDMDB",
+ LDMDB_ZZ: "LDMDB.ZZ",
+ LDMIB_EQ: "LDMIB.EQ",
+ LDMIB_NE: "LDMIB.NE",
+ LDMIB_CS: "LDMIB.CS",
+ LDMIB_CC: "LDMIB.CC",
+ LDMIB_MI: "LDMIB.MI",
+ LDMIB_PL: "LDMIB.PL",
+ LDMIB_VS: "LDMIB.VS",
+ LDMIB_VC: "LDMIB.VC",
+ LDMIB_HI: "LDMIB.HI",
+ LDMIB_LS: "LDMIB.LS",
+ LDMIB_GE: "LDMIB.GE",
+ LDMIB_LT: "LDMIB.LT",
+ LDMIB_GT: "LDMIB.GT",
+ LDMIB_LE: "LDMIB.LE",
+ LDMIB: "LDMIB",
+ LDMIB_ZZ: "LDMIB.ZZ",
+ LDR_EQ: "LDR.EQ",
+ LDR_NE: "LDR.NE",
+ LDR_CS: "LDR.CS",
+ LDR_CC: "LDR.CC",
+ LDR_MI: "LDR.MI",
+ LDR_PL: "LDR.PL",
+ LDR_VS: "LDR.VS",
+ LDR_VC: "LDR.VC",
+ LDR_HI: "LDR.HI",
+ LDR_LS: "LDR.LS",
+ LDR_GE: "LDR.GE",
+ LDR_LT: "LDR.LT",
+ LDR_GT: "LDR.GT",
+ LDR_LE: "LDR.LE",
+ LDR: "LDR",
+ LDR_ZZ: "LDR.ZZ",
+ LDRB_EQ: "LDRB.EQ",
+ LDRB_NE: "LDRB.NE",
+ LDRB_CS: "LDRB.CS",
+ LDRB_CC: "LDRB.CC",
+ LDRB_MI: "LDRB.MI",
+ LDRB_PL: "LDRB.PL",
+ LDRB_VS: "LDRB.VS",
+ LDRB_VC: "LDRB.VC",
+ LDRB_HI: "LDRB.HI",
+ LDRB_LS: "LDRB.LS",
+ LDRB_GE: "LDRB.GE",
+ LDRB_LT: "LDRB.LT",
+ LDRB_GT: "LDRB.GT",
+ LDRB_LE: "LDRB.LE",
+ LDRB: "LDRB",
+ LDRB_ZZ: "LDRB.ZZ",
+ LDRBT_EQ: "LDRBT.EQ",
+ LDRBT_NE: "LDRBT.NE",
+ LDRBT_CS: "LDRBT.CS",
+ LDRBT_CC: "LDRBT.CC",
+ LDRBT_MI: "LDRBT.MI",
+ LDRBT_PL: "LDRBT.PL",
+ LDRBT_VS: "LDRBT.VS",
+ LDRBT_VC: "LDRBT.VC",
+ LDRBT_HI: "LDRBT.HI",
+ LDRBT_LS: "LDRBT.LS",
+ LDRBT_GE: "LDRBT.GE",
+ LDRBT_LT: "LDRBT.LT",
+ LDRBT_GT: "LDRBT.GT",
+ LDRBT_LE: "LDRBT.LE",
+ LDRBT: "LDRBT",
+ LDRBT_ZZ: "LDRBT.ZZ",
+ LDRD_EQ: "LDRD.EQ",
+ LDRD_NE: "LDRD.NE",
+ LDRD_CS: "LDRD.CS",
+ LDRD_CC: "LDRD.CC",
+ LDRD_MI: "LDRD.MI",
+ LDRD_PL: "LDRD.PL",
+ LDRD_VS: "LDRD.VS",
+ LDRD_VC: "LDRD.VC",
+ LDRD_HI: "LDRD.HI",
+ LDRD_LS: "LDRD.LS",
+ LDRD_GE: "LDRD.GE",
+ LDRD_LT: "LDRD.LT",
+ LDRD_GT: "LDRD.GT",
+ LDRD_LE: "LDRD.LE",
+ LDRD: "LDRD",
+ LDRD_ZZ: "LDRD.ZZ",
+ LDREX_EQ: "LDREX.EQ",
+ LDREX_NE: "LDREX.NE",
+ LDREX_CS: "LDREX.CS",
+ LDREX_CC: "LDREX.CC",
+ LDREX_MI: "LDREX.MI",
+ LDREX_PL: "LDREX.PL",
+ LDREX_VS: "LDREX.VS",
+ LDREX_VC: "LDREX.VC",
+ LDREX_HI: "LDREX.HI",
+ LDREX_LS: "LDREX.LS",
+ LDREX_GE: "LDREX.GE",
+ LDREX_LT: "LDREX.LT",
+ LDREX_GT: "LDREX.GT",
+ LDREX_LE: "LDREX.LE",
+ LDREX: "LDREX",
+ LDREX_ZZ: "LDREX.ZZ",
+ LDREXB_EQ: "LDREXB.EQ",
+ LDREXB_NE: "LDREXB.NE",
+ LDREXB_CS: "LDREXB.CS",
+ LDREXB_CC: "LDREXB.CC",
+ LDREXB_MI: "LDREXB.MI",
+ LDREXB_PL: "LDREXB.PL",
+ LDREXB_VS: "LDREXB.VS",
+ LDREXB_VC: "LDREXB.VC",
+ LDREXB_HI: "LDREXB.HI",
+ LDREXB_LS: "LDREXB.LS",
+ LDREXB_GE: "LDREXB.GE",
+ LDREXB_LT: "LDREXB.LT",
+ LDREXB_GT: "LDREXB.GT",
+ LDREXB_LE: "LDREXB.LE",
+ LDREXB: "LDREXB",
+ LDREXB_ZZ: "LDREXB.ZZ",
+ LDREXD_EQ: "LDREXD.EQ",
+ LDREXD_NE: "LDREXD.NE",
+ LDREXD_CS: "LDREXD.CS",
+ LDREXD_CC: "LDREXD.CC",
+ LDREXD_MI: "LDREXD.MI",
+ LDREXD_PL: "LDREXD.PL",
+ LDREXD_VS: "LDREXD.VS",
+ LDREXD_VC: "LDREXD.VC",
+ LDREXD_HI: "LDREXD.HI",
+ LDREXD_LS: "LDREXD.LS",
+ LDREXD_GE: "LDREXD.GE",
+ LDREXD_LT: "LDREXD.LT",
+ LDREXD_GT: "LDREXD.GT",
+ LDREXD_LE: "LDREXD.LE",
+ LDREXD: "LDREXD",
+ LDREXD_ZZ: "LDREXD.ZZ",
+ LDREXH_EQ: "LDREXH.EQ",
+ LDREXH_NE: "LDREXH.NE",
+ LDREXH_CS: "LDREXH.CS",
+ LDREXH_CC: "LDREXH.CC",
+ LDREXH_MI: "LDREXH.MI",
+ LDREXH_PL: "LDREXH.PL",
+ LDREXH_VS: "LDREXH.VS",
+ LDREXH_VC: "LDREXH.VC",
+ LDREXH_HI: "LDREXH.HI",
+ LDREXH_LS: "LDREXH.LS",
+ LDREXH_GE: "LDREXH.GE",
+ LDREXH_LT: "LDREXH.LT",
+ LDREXH_GT: "LDREXH.GT",
+ LDREXH_LE: "LDREXH.LE",
+ LDREXH: "LDREXH",
+ LDREXH_ZZ: "LDREXH.ZZ",
+ LDRH_EQ: "LDRH.EQ",
+ LDRH_NE: "LDRH.NE",
+ LDRH_CS: "LDRH.CS",
+ LDRH_CC: "LDRH.CC",
+ LDRH_MI: "LDRH.MI",
+ LDRH_PL: "LDRH.PL",
+ LDRH_VS: "LDRH.VS",
+ LDRH_VC: "LDRH.VC",
+ LDRH_HI: "LDRH.HI",
+ LDRH_LS: "LDRH.LS",
+ LDRH_GE: "LDRH.GE",
+ LDRH_LT: "LDRH.LT",
+ LDRH_GT: "LDRH.GT",
+ LDRH_LE: "LDRH.LE",
+ LDRH: "LDRH",
+ LDRH_ZZ: "LDRH.ZZ",
+ LDRHT_EQ: "LDRHT.EQ",
+ LDRHT_NE: "LDRHT.NE",
+ LDRHT_CS: "LDRHT.CS",
+ LDRHT_CC: "LDRHT.CC",
+ LDRHT_MI: "LDRHT.MI",
+ LDRHT_PL: "LDRHT.PL",
+ LDRHT_VS: "LDRHT.VS",
+ LDRHT_VC: "LDRHT.VC",
+ LDRHT_HI: "LDRHT.HI",
+ LDRHT_LS: "LDRHT.LS",
+ LDRHT_GE: "LDRHT.GE",
+ LDRHT_LT: "LDRHT.LT",
+ LDRHT_GT: "LDRHT.GT",
+ LDRHT_LE: "LDRHT.LE",
+ LDRHT: "LDRHT",
+ LDRHT_ZZ: "LDRHT.ZZ",
+ LDRSB_EQ: "LDRSB.EQ",
+ LDRSB_NE: "LDRSB.NE",
+ LDRSB_CS: "LDRSB.CS",
+ LDRSB_CC: "LDRSB.CC",
+ LDRSB_MI: "LDRSB.MI",
+ LDRSB_PL: "LDRSB.PL",
+ LDRSB_VS: "LDRSB.VS",
+ LDRSB_VC: "LDRSB.VC",
+ LDRSB_HI: "LDRSB.HI",
+ LDRSB_LS: "LDRSB.LS",
+ LDRSB_GE: "LDRSB.GE",
+ LDRSB_LT: "LDRSB.LT",
+ LDRSB_GT: "LDRSB.GT",
+ LDRSB_LE: "LDRSB.LE",
+ LDRSB: "LDRSB",
+ LDRSB_ZZ: "LDRSB.ZZ",
+ LDRSBT_EQ: "LDRSBT.EQ",
+ LDRSBT_NE: "LDRSBT.NE",
+ LDRSBT_CS: "LDRSBT.CS",
+ LDRSBT_CC: "LDRSBT.CC",
+ LDRSBT_MI: "LDRSBT.MI",
+ LDRSBT_PL: "LDRSBT.PL",
+ LDRSBT_VS: "LDRSBT.VS",
+ LDRSBT_VC: "LDRSBT.VC",
+ LDRSBT_HI: "LDRSBT.HI",
+ LDRSBT_LS: "LDRSBT.LS",
+ LDRSBT_GE: "LDRSBT.GE",
+ LDRSBT_LT: "LDRSBT.LT",
+ LDRSBT_GT: "LDRSBT.GT",
+ LDRSBT_LE: "LDRSBT.LE",
+ LDRSBT: "LDRSBT",
+ LDRSBT_ZZ: "LDRSBT.ZZ",
+ LDRSH_EQ: "LDRSH.EQ",
+ LDRSH_NE: "LDRSH.NE",
+ LDRSH_CS: "LDRSH.CS",
+ LDRSH_CC: "LDRSH.CC",
+ LDRSH_MI: "LDRSH.MI",
+ LDRSH_PL: "LDRSH.PL",
+ LDRSH_VS: "LDRSH.VS",
+ LDRSH_VC: "LDRSH.VC",
+ LDRSH_HI: "LDRSH.HI",
+ LDRSH_LS: "LDRSH.LS",
+ LDRSH_GE: "LDRSH.GE",
+ LDRSH_LT: "LDRSH.LT",
+ LDRSH_GT: "LDRSH.GT",
+ LDRSH_LE: "LDRSH.LE",
+ LDRSH: "LDRSH",
+ LDRSH_ZZ: "LDRSH.ZZ",
+ LDRSHT_EQ: "LDRSHT.EQ",
+ LDRSHT_NE: "LDRSHT.NE",
+ LDRSHT_CS: "LDRSHT.CS",
+ LDRSHT_CC: "LDRSHT.CC",
+ LDRSHT_MI: "LDRSHT.MI",
+ LDRSHT_PL: "LDRSHT.PL",
+ LDRSHT_VS: "LDRSHT.VS",
+ LDRSHT_VC: "LDRSHT.VC",
+ LDRSHT_HI: "LDRSHT.HI",
+ LDRSHT_LS: "LDRSHT.LS",
+ LDRSHT_GE: "LDRSHT.GE",
+ LDRSHT_LT: "LDRSHT.LT",
+ LDRSHT_GT: "LDRSHT.GT",
+ LDRSHT_LE: "LDRSHT.LE",
+ LDRSHT: "LDRSHT",
+ LDRSHT_ZZ: "LDRSHT.ZZ",
+ LDRT_EQ: "LDRT.EQ",
+ LDRT_NE: "LDRT.NE",
+ LDRT_CS: "LDRT.CS",
+ LDRT_CC: "LDRT.CC",
+ LDRT_MI: "LDRT.MI",
+ LDRT_PL: "LDRT.PL",
+ LDRT_VS: "LDRT.VS",
+ LDRT_VC: "LDRT.VC",
+ LDRT_HI: "LDRT.HI",
+ LDRT_LS: "LDRT.LS",
+ LDRT_GE: "LDRT.GE",
+ LDRT_LT: "LDRT.LT",
+ LDRT_GT: "LDRT.GT",
+ LDRT_LE: "LDRT.LE",
+ LDRT: "LDRT",
+ LDRT_ZZ: "LDRT.ZZ",
+ LSL_EQ: "LSL.EQ",
+ LSL_NE: "LSL.NE",
+ LSL_CS: "LSL.CS",
+ LSL_CC: "LSL.CC",
+ LSL_MI: "LSL.MI",
+ LSL_PL: "LSL.PL",
+ LSL_VS: "LSL.VS",
+ LSL_VC: "LSL.VC",
+ LSL_HI: "LSL.HI",
+ LSL_LS: "LSL.LS",
+ LSL_GE: "LSL.GE",
+ LSL_LT: "LSL.LT",
+ LSL_GT: "LSL.GT",
+ LSL_LE: "LSL.LE",
+ LSL: "LSL",
+ LSL_ZZ: "LSL.ZZ",
+ LSL_S_EQ: "LSL.S.EQ",
+ LSL_S_NE: "LSL.S.NE",
+ LSL_S_CS: "LSL.S.CS",
+ LSL_S_CC: "LSL.S.CC",
+ LSL_S_MI: "LSL.S.MI",
+ LSL_S_PL: "LSL.S.PL",
+ LSL_S_VS: "LSL.S.VS",
+ LSL_S_VC: "LSL.S.VC",
+ LSL_S_HI: "LSL.S.HI",
+ LSL_S_LS: "LSL.S.LS",
+ LSL_S_GE: "LSL.S.GE",
+ LSL_S_LT: "LSL.S.LT",
+ LSL_S_GT: "LSL.S.GT",
+ LSL_S_LE: "LSL.S.LE",
+ LSL_S: "LSL.S",
+ LSL_S_ZZ: "LSL.S.ZZ",
+ LSR_EQ: "LSR.EQ",
+ LSR_NE: "LSR.NE",
+ LSR_CS: "LSR.CS",
+ LSR_CC: "LSR.CC",
+ LSR_MI: "LSR.MI",
+ LSR_PL: "LSR.PL",
+ LSR_VS: "LSR.VS",
+ LSR_VC: "LSR.VC",
+ LSR_HI: "LSR.HI",
+ LSR_LS: "LSR.LS",
+ LSR_GE: "LSR.GE",
+ LSR_LT: "LSR.LT",
+ LSR_GT: "LSR.GT",
+ LSR_LE: "LSR.LE",
+ LSR: "LSR",
+ LSR_ZZ: "LSR.ZZ",
+ LSR_S_EQ: "LSR.S.EQ",
+ LSR_S_NE: "LSR.S.NE",
+ LSR_S_CS: "LSR.S.CS",
+ LSR_S_CC: "LSR.S.CC",
+ LSR_S_MI: "LSR.S.MI",
+ LSR_S_PL: "LSR.S.PL",
+ LSR_S_VS: "LSR.S.VS",
+ LSR_S_VC: "LSR.S.VC",
+ LSR_S_HI: "LSR.S.HI",
+ LSR_S_LS: "LSR.S.LS",
+ LSR_S_GE: "LSR.S.GE",
+ LSR_S_LT: "LSR.S.LT",
+ LSR_S_GT: "LSR.S.GT",
+ LSR_S_LE: "LSR.S.LE",
+ LSR_S: "LSR.S",
+ LSR_S_ZZ: "LSR.S.ZZ",
+ MLA_EQ: "MLA.EQ",
+ MLA_NE: "MLA.NE",
+ MLA_CS: "MLA.CS",
+ MLA_CC: "MLA.CC",
+ MLA_MI: "MLA.MI",
+ MLA_PL: "MLA.PL",
+ MLA_VS: "MLA.VS",
+ MLA_VC: "MLA.VC",
+ MLA_HI: "MLA.HI",
+ MLA_LS: "MLA.LS",
+ MLA_GE: "MLA.GE",
+ MLA_LT: "MLA.LT",
+ MLA_GT: "MLA.GT",
+ MLA_LE: "MLA.LE",
+ MLA: "MLA",
+ MLA_ZZ: "MLA.ZZ",
+ MLA_S_EQ: "MLA.S.EQ",
+ MLA_S_NE: "MLA.S.NE",
+ MLA_S_CS: "MLA.S.CS",
+ MLA_S_CC: "MLA.S.CC",
+ MLA_S_MI: "MLA.S.MI",
+ MLA_S_PL: "MLA.S.PL",
+ MLA_S_VS: "MLA.S.VS",
+ MLA_S_VC: "MLA.S.VC",
+ MLA_S_HI: "MLA.S.HI",
+ MLA_S_LS: "MLA.S.LS",
+ MLA_S_GE: "MLA.S.GE",
+ MLA_S_LT: "MLA.S.LT",
+ MLA_S_GT: "MLA.S.GT",
+ MLA_S_LE: "MLA.S.LE",
+ MLA_S: "MLA.S",
+ MLA_S_ZZ: "MLA.S.ZZ",
+ MLS_EQ: "MLS.EQ",
+ MLS_NE: "MLS.NE",
+ MLS_CS: "MLS.CS",
+ MLS_CC: "MLS.CC",
+ MLS_MI: "MLS.MI",
+ MLS_PL: "MLS.PL",
+ MLS_VS: "MLS.VS",
+ MLS_VC: "MLS.VC",
+ MLS_HI: "MLS.HI",
+ MLS_LS: "MLS.LS",
+ MLS_GE: "MLS.GE",
+ MLS_LT: "MLS.LT",
+ MLS_GT: "MLS.GT",
+ MLS_LE: "MLS.LE",
+ MLS: "MLS",
+ MLS_ZZ: "MLS.ZZ",
+ MOV_EQ: "MOV.EQ",
+ MOV_NE: "MOV.NE",
+ MOV_CS: "MOV.CS",
+ MOV_CC: "MOV.CC",
+ MOV_MI: "MOV.MI",
+ MOV_PL: "MOV.PL",
+ MOV_VS: "MOV.VS",
+ MOV_VC: "MOV.VC",
+ MOV_HI: "MOV.HI",
+ MOV_LS: "MOV.LS",
+ MOV_GE: "MOV.GE",
+ MOV_LT: "MOV.LT",
+ MOV_GT: "MOV.GT",
+ MOV_LE: "MOV.LE",
+ MOV: "MOV",
+ MOV_ZZ: "MOV.ZZ",
+ MOV_S_EQ: "MOV.S.EQ",
+ MOV_S_NE: "MOV.S.NE",
+ MOV_S_CS: "MOV.S.CS",
+ MOV_S_CC: "MOV.S.CC",
+ MOV_S_MI: "MOV.S.MI",
+ MOV_S_PL: "MOV.S.PL",
+ MOV_S_VS: "MOV.S.VS",
+ MOV_S_VC: "MOV.S.VC",
+ MOV_S_HI: "MOV.S.HI",
+ MOV_S_LS: "MOV.S.LS",
+ MOV_S_GE: "MOV.S.GE",
+ MOV_S_LT: "MOV.S.LT",
+ MOV_S_GT: "MOV.S.GT",
+ MOV_S_LE: "MOV.S.LE",
+ MOV_S: "MOV.S",
+ MOV_S_ZZ: "MOV.S.ZZ",
+ MOVT_EQ: "MOVT.EQ",
+ MOVT_NE: "MOVT.NE",
+ MOVT_CS: "MOVT.CS",
+ MOVT_CC: "MOVT.CC",
+ MOVT_MI: "MOVT.MI",
+ MOVT_PL: "MOVT.PL",
+ MOVT_VS: "MOVT.VS",
+ MOVT_VC: "MOVT.VC",
+ MOVT_HI: "MOVT.HI",
+ MOVT_LS: "MOVT.LS",
+ MOVT_GE: "MOVT.GE",
+ MOVT_LT: "MOVT.LT",
+ MOVT_GT: "MOVT.GT",
+ MOVT_LE: "MOVT.LE",
+ MOVT: "MOVT",
+ MOVT_ZZ: "MOVT.ZZ",
+ MOVW_EQ: "MOVW.EQ",
+ MOVW_NE: "MOVW.NE",
+ MOVW_CS: "MOVW.CS",
+ MOVW_CC: "MOVW.CC",
+ MOVW_MI: "MOVW.MI",
+ MOVW_PL: "MOVW.PL",
+ MOVW_VS: "MOVW.VS",
+ MOVW_VC: "MOVW.VC",
+ MOVW_HI: "MOVW.HI",
+ MOVW_LS: "MOVW.LS",
+ MOVW_GE: "MOVW.GE",
+ MOVW_LT: "MOVW.LT",
+ MOVW_GT: "MOVW.GT",
+ MOVW_LE: "MOVW.LE",
+ MOVW: "MOVW",
+ MOVW_ZZ: "MOVW.ZZ",
+ MRS_EQ: "MRS.EQ",
+ MRS_NE: "MRS.NE",
+ MRS_CS: "MRS.CS",
+ MRS_CC: "MRS.CC",
+ MRS_MI: "MRS.MI",
+ MRS_PL: "MRS.PL",
+ MRS_VS: "MRS.VS",
+ MRS_VC: "MRS.VC",
+ MRS_HI: "MRS.HI",
+ MRS_LS: "MRS.LS",
+ MRS_GE: "MRS.GE",
+ MRS_LT: "MRS.LT",
+ MRS_GT: "MRS.GT",
+ MRS_LE: "MRS.LE",
+ MRS: "MRS",
+ MRS_ZZ: "MRS.ZZ",
+ MUL_EQ: "MUL.EQ",
+ MUL_NE: "MUL.NE",
+ MUL_CS: "MUL.CS",
+ MUL_CC: "MUL.CC",
+ MUL_MI: "MUL.MI",
+ MUL_PL: "MUL.PL",
+ MUL_VS: "MUL.VS",
+ MUL_VC: "MUL.VC",
+ MUL_HI: "MUL.HI",
+ MUL_LS: "MUL.LS",
+ MUL_GE: "MUL.GE",
+ MUL_LT: "MUL.LT",
+ MUL_GT: "MUL.GT",
+ MUL_LE: "MUL.LE",
+ MUL: "MUL",
+ MUL_ZZ: "MUL.ZZ",
+ MUL_S_EQ: "MUL.S.EQ",
+ MUL_S_NE: "MUL.S.NE",
+ MUL_S_CS: "MUL.S.CS",
+ MUL_S_CC: "MUL.S.CC",
+ MUL_S_MI: "MUL.S.MI",
+ MUL_S_PL: "MUL.S.PL",
+ MUL_S_VS: "MUL.S.VS",
+ MUL_S_VC: "MUL.S.VC",
+ MUL_S_HI: "MUL.S.HI",
+ MUL_S_LS: "MUL.S.LS",
+ MUL_S_GE: "MUL.S.GE",
+ MUL_S_LT: "MUL.S.LT",
+ MUL_S_GT: "MUL.S.GT",
+ MUL_S_LE: "MUL.S.LE",
+ MUL_S: "MUL.S",
+ MUL_S_ZZ: "MUL.S.ZZ",
+ MVN_EQ: "MVN.EQ",
+ MVN_NE: "MVN.NE",
+ MVN_CS: "MVN.CS",
+ MVN_CC: "MVN.CC",
+ MVN_MI: "MVN.MI",
+ MVN_PL: "MVN.PL",
+ MVN_VS: "MVN.VS",
+ MVN_VC: "MVN.VC",
+ MVN_HI: "MVN.HI",
+ MVN_LS: "MVN.LS",
+ MVN_GE: "MVN.GE",
+ MVN_LT: "MVN.LT",
+ MVN_GT: "MVN.GT",
+ MVN_LE: "MVN.LE",
+ MVN: "MVN",
+ MVN_ZZ: "MVN.ZZ",
+ MVN_S_EQ: "MVN.S.EQ",
+ MVN_S_NE: "MVN.S.NE",
+ MVN_S_CS: "MVN.S.CS",
+ MVN_S_CC: "MVN.S.CC",
+ MVN_S_MI: "MVN.S.MI",
+ MVN_S_PL: "MVN.S.PL",
+ MVN_S_VS: "MVN.S.VS",
+ MVN_S_VC: "MVN.S.VC",
+ MVN_S_HI: "MVN.S.HI",
+ MVN_S_LS: "MVN.S.LS",
+ MVN_S_GE: "MVN.S.GE",
+ MVN_S_LT: "MVN.S.LT",
+ MVN_S_GT: "MVN.S.GT",
+ MVN_S_LE: "MVN.S.LE",
+ MVN_S: "MVN.S",
+ MVN_S_ZZ: "MVN.S.ZZ",
+ NOP_EQ: "NOP.EQ",
+ NOP_NE: "NOP.NE",
+ NOP_CS: "NOP.CS",
+ NOP_CC: "NOP.CC",
+ NOP_MI: "NOP.MI",
+ NOP_PL: "NOP.PL",
+ NOP_VS: "NOP.VS",
+ NOP_VC: "NOP.VC",
+ NOP_HI: "NOP.HI",
+ NOP_LS: "NOP.LS",
+ NOP_GE: "NOP.GE",
+ NOP_LT: "NOP.LT",
+ NOP_GT: "NOP.GT",
+ NOP_LE: "NOP.LE",
+ NOP: "NOP",
+ NOP_ZZ: "NOP.ZZ",
+ ORR_EQ: "ORR.EQ",
+ ORR_NE: "ORR.NE",
+ ORR_CS: "ORR.CS",
+ ORR_CC: "ORR.CC",
+ ORR_MI: "ORR.MI",
+ ORR_PL: "ORR.PL",
+ ORR_VS: "ORR.VS",
+ ORR_VC: "ORR.VC",
+ ORR_HI: "ORR.HI",
+ ORR_LS: "ORR.LS",
+ ORR_GE: "ORR.GE",
+ ORR_LT: "ORR.LT",
+ ORR_GT: "ORR.GT",
+ ORR_LE: "ORR.LE",
+ ORR: "ORR",
+ ORR_ZZ: "ORR.ZZ",
+ ORR_S_EQ: "ORR.S.EQ",
+ ORR_S_NE: "ORR.S.NE",
+ ORR_S_CS: "ORR.S.CS",
+ ORR_S_CC: "ORR.S.CC",
+ ORR_S_MI: "ORR.S.MI",
+ ORR_S_PL: "ORR.S.PL",
+ ORR_S_VS: "ORR.S.VS",
+ ORR_S_VC: "ORR.S.VC",
+ ORR_S_HI: "ORR.S.HI",
+ ORR_S_LS: "ORR.S.LS",
+ ORR_S_GE: "ORR.S.GE",
+ ORR_S_LT: "ORR.S.LT",
+ ORR_S_GT: "ORR.S.GT",
+ ORR_S_LE: "ORR.S.LE",
+ ORR_S: "ORR.S",
+ ORR_S_ZZ: "ORR.S.ZZ",
+ PKHBT_EQ: "PKHBT.EQ",
+ PKHBT_NE: "PKHBT.NE",
+ PKHBT_CS: "PKHBT.CS",
+ PKHBT_CC: "PKHBT.CC",
+ PKHBT_MI: "PKHBT.MI",
+ PKHBT_PL: "PKHBT.PL",
+ PKHBT_VS: "PKHBT.VS",
+ PKHBT_VC: "PKHBT.VC",
+ PKHBT_HI: "PKHBT.HI",
+ PKHBT_LS: "PKHBT.LS",
+ PKHBT_GE: "PKHBT.GE",
+ PKHBT_LT: "PKHBT.LT",
+ PKHBT_GT: "PKHBT.GT",
+ PKHBT_LE: "PKHBT.LE",
+ PKHBT: "PKHBT",
+ PKHBT_ZZ: "PKHBT.ZZ",
+ PKHTB_EQ: "PKHTB.EQ",
+ PKHTB_NE: "PKHTB.NE",
+ PKHTB_CS: "PKHTB.CS",
+ PKHTB_CC: "PKHTB.CC",
+ PKHTB_MI: "PKHTB.MI",
+ PKHTB_PL: "PKHTB.PL",
+ PKHTB_VS: "PKHTB.VS",
+ PKHTB_VC: "PKHTB.VC",
+ PKHTB_HI: "PKHTB.HI",
+ PKHTB_LS: "PKHTB.LS",
+ PKHTB_GE: "PKHTB.GE",
+ PKHTB_LT: "PKHTB.LT",
+ PKHTB_GT: "PKHTB.GT",
+ PKHTB_LE: "PKHTB.LE",
+ PKHTB: "PKHTB",
+ PKHTB_ZZ: "PKHTB.ZZ",
+ PLD_W: "PLD.W",
+ PLD: "PLD",
+ PLI: "PLI",
+ POP_EQ: "POP.EQ",
+ POP_NE: "POP.NE",
+ POP_CS: "POP.CS",
+ POP_CC: "POP.CC",
+ POP_MI: "POP.MI",
+ POP_PL: "POP.PL",
+ POP_VS: "POP.VS",
+ POP_VC: "POP.VC",
+ POP_HI: "POP.HI",
+ POP_LS: "POP.LS",
+ POP_GE: "POP.GE",
+ POP_LT: "POP.LT",
+ POP_GT: "POP.GT",
+ POP_LE: "POP.LE",
+ POP: "POP",
+ POP_ZZ: "POP.ZZ",
+ PUSH_EQ: "PUSH.EQ",
+ PUSH_NE: "PUSH.NE",
+ PUSH_CS: "PUSH.CS",
+ PUSH_CC: "PUSH.CC",
+ PUSH_MI: "PUSH.MI",
+ PUSH_PL: "PUSH.PL",
+ PUSH_VS: "PUSH.VS",
+ PUSH_VC: "PUSH.VC",
+ PUSH_HI: "PUSH.HI",
+ PUSH_LS: "PUSH.LS",
+ PUSH_GE: "PUSH.GE",
+ PUSH_LT: "PUSH.LT",
+ PUSH_GT: "PUSH.GT",
+ PUSH_LE: "PUSH.LE",
+ PUSH: "PUSH",
+ PUSH_ZZ: "PUSH.ZZ",
+ QADD_EQ: "QADD.EQ",
+ QADD_NE: "QADD.NE",
+ QADD_CS: "QADD.CS",
+ QADD_CC: "QADD.CC",
+ QADD_MI: "QADD.MI",
+ QADD_PL: "QADD.PL",
+ QADD_VS: "QADD.VS",
+ QADD_VC: "QADD.VC",
+ QADD_HI: "QADD.HI",
+ QADD_LS: "QADD.LS",
+ QADD_GE: "QADD.GE",
+ QADD_LT: "QADD.LT",
+ QADD_GT: "QADD.GT",
+ QADD_LE: "QADD.LE",
+ QADD: "QADD",
+ QADD_ZZ: "QADD.ZZ",
+ QADD16_EQ: "QADD16.EQ",
+ QADD16_NE: "QADD16.NE",
+ QADD16_CS: "QADD16.CS",
+ QADD16_CC: "QADD16.CC",
+ QADD16_MI: "QADD16.MI",
+ QADD16_PL: "QADD16.PL",
+ QADD16_VS: "QADD16.VS",
+ QADD16_VC: "QADD16.VC",
+ QADD16_HI: "QADD16.HI",
+ QADD16_LS: "QADD16.LS",
+ QADD16_GE: "QADD16.GE",
+ QADD16_LT: "QADD16.LT",
+ QADD16_GT: "QADD16.GT",
+ QADD16_LE: "QADD16.LE",
+ QADD16: "QADD16",
+ QADD16_ZZ: "QADD16.ZZ",
+ QADD8_EQ: "QADD8.EQ",
+ QADD8_NE: "QADD8.NE",
+ QADD8_CS: "QADD8.CS",
+ QADD8_CC: "QADD8.CC",
+ QADD8_MI: "QADD8.MI",
+ QADD8_PL: "QADD8.PL",
+ QADD8_VS: "QADD8.VS",
+ QADD8_VC: "QADD8.VC",
+ QADD8_HI: "QADD8.HI",
+ QADD8_LS: "QADD8.LS",
+ QADD8_GE: "QADD8.GE",
+ QADD8_LT: "QADD8.LT",
+ QADD8_GT: "QADD8.GT",
+ QADD8_LE: "QADD8.LE",
+ QADD8: "QADD8",
+ QADD8_ZZ: "QADD8.ZZ",
+ QASX_EQ: "QASX.EQ",
+ QASX_NE: "QASX.NE",
+ QASX_CS: "QASX.CS",
+ QASX_CC: "QASX.CC",
+ QASX_MI: "QASX.MI",
+ QASX_PL: "QASX.PL",
+ QASX_VS: "QASX.VS",
+ QASX_VC: "QASX.VC",
+ QASX_HI: "QASX.HI",
+ QASX_LS: "QASX.LS",
+ QASX_GE: "QASX.GE",
+ QASX_LT: "QASX.LT",
+ QASX_GT: "QASX.GT",
+ QASX_LE: "QASX.LE",
+ QASX: "QASX",
+ QASX_ZZ: "QASX.ZZ",
+ QDADD_EQ: "QDADD.EQ",
+ QDADD_NE: "QDADD.NE",
+ QDADD_CS: "QDADD.CS",
+ QDADD_CC: "QDADD.CC",
+ QDADD_MI: "QDADD.MI",
+ QDADD_PL: "QDADD.PL",
+ QDADD_VS: "QDADD.VS",
+ QDADD_VC: "QDADD.VC",
+ QDADD_HI: "QDADD.HI",
+ QDADD_LS: "QDADD.LS",
+ QDADD_GE: "QDADD.GE",
+ QDADD_LT: "QDADD.LT",
+ QDADD_GT: "QDADD.GT",
+ QDADD_LE: "QDADD.LE",
+ QDADD: "QDADD",
+ QDADD_ZZ: "QDADD.ZZ",
+ QDSUB_EQ: "QDSUB.EQ",
+ QDSUB_NE: "QDSUB.NE",
+ QDSUB_CS: "QDSUB.CS",
+ QDSUB_CC: "QDSUB.CC",
+ QDSUB_MI: "QDSUB.MI",
+ QDSUB_PL: "QDSUB.PL",
+ QDSUB_VS: "QDSUB.VS",
+ QDSUB_VC: "QDSUB.VC",
+ QDSUB_HI: "QDSUB.HI",
+ QDSUB_LS: "QDSUB.LS",
+ QDSUB_GE: "QDSUB.GE",
+ QDSUB_LT: "QDSUB.LT",
+ QDSUB_GT: "QDSUB.GT",
+ QDSUB_LE: "QDSUB.LE",
+ QDSUB: "QDSUB",
+ QDSUB_ZZ: "QDSUB.ZZ",
+ QSAX_EQ: "QSAX.EQ",
+ QSAX_NE: "QSAX.NE",
+ QSAX_CS: "QSAX.CS",
+ QSAX_CC: "QSAX.CC",
+ QSAX_MI: "QSAX.MI",
+ QSAX_PL: "QSAX.PL",
+ QSAX_VS: "QSAX.VS",
+ QSAX_VC: "QSAX.VC",
+ QSAX_HI: "QSAX.HI",
+ QSAX_LS: "QSAX.LS",
+ QSAX_GE: "QSAX.GE",
+ QSAX_LT: "QSAX.LT",
+ QSAX_GT: "QSAX.GT",
+ QSAX_LE: "QSAX.LE",
+ QSAX: "QSAX",
+ QSAX_ZZ: "QSAX.ZZ",
+ QSUB_EQ: "QSUB.EQ",
+ QSUB_NE: "QSUB.NE",
+ QSUB_CS: "QSUB.CS",
+ QSUB_CC: "QSUB.CC",
+ QSUB_MI: "QSUB.MI",
+ QSUB_PL: "QSUB.PL",
+ QSUB_VS: "QSUB.VS",
+ QSUB_VC: "QSUB.VC",
+ QSUB_HI: "QSUB.HI",
+ QSUB_LS: "QSUB.LS",
+ QSUB_GE: "QSUB.GE",
+ QSUB_LT: "QSUB.LT",
+ QSUB_GT: "QSUB.GT",
+ QSUB_LE: "QSUB.LE",
+ QSUB: "QSUB",
+ QSUB_ZZ: "QSUB.ZZ",
+ QSUB16_EQ: "QSUB16.EQ",
+ QSUB16_NE: "QSUB16.NE",
+ QSUB16_CS: "QSUB16.CS",
+ QSUB16_CC: "QSUB16.CC",
+ QSUB16_MI: "QSUB16.MI",
+ QSUB16_PL: "QSUB16.PL",
+ QSUB16_VS: "QSUB16.VS",
+ QSUB16_VC: "QSUB16.VC",
+ QSUB16_HI: "QSUB16.HI",
+ QSUB16_LS: "QSUB16.LS",
+ QSUB16_GE: "QSUB16.GE",
+ QSUB16_LT: "QSUB16.LT",
+ QSUB16_GT: "QSUB16.GT",
+ QSUB16_LE: "QSUB16.LE",
+ QSUB16: "QSUB16",
+ QSUB16_ZZ: "QSUB16.ZZ",
+ QSUB8_EQ: "QSUB8.EQ",
+ QSUB8_NE: "QSUB8.NE",
+ QSUB8_CS: "QSUB8.CS",
+ QSUB8_CC: "QSUB8.CC",
+ QSUB8_MI: "QSUB8.MI",
+ QSUB8_PL: "QSUB8.PL",
+ QSUB8_VS: "QSUB8.VS",
+ QSUB8_VC: "QSUB8.VC",
+ QSUB8_HI: "QSUB8.HI",
+ QSUB8_LS: "QSUB8.LS",
+ QSUB8_GE: "QSUB8.GE",
+ QSUB8_LT: "QSUB8.LT",
+ QSUB8_GT: "QSUB8.GT",
+ QSUB8_LE: "QSUB8.LE",
+ QSUB8: "QSUB8",
+ QSUB8_ZZ: "QSUB8.ZZ",
+ RBIT_EQ: "RBIT.EQ",
+ RBIT_NE: "RBIT.NE",
+ RBIT_CS: "RBIT.CS",
+ RBIT_CC: "RBIT.CC",
+ RBIT_MI: "RBIT.MI",
+ RBIT_PL: "RBIT.PL",
+ RBIT_VS: "RBIT.VS",
+ RBIT_VC: "RBIT.VC",
+ RBIT_HI: "RBIT.HI",
+ RBIT_LS: "RBIT.LS",
+ RBIT_GE: "RBIT.GE",
+ RBIT_LT: "RBIT.LT",
+ RBIT_GT: "RBIT.GT",
+ RBIT_LE: "RBIT.LE",
+ RBIT: "RBIT",
+ RBIT_ZZ: "RBIT.ZZ",
+ REV_EQ: "REV.EQ",
+ REV_NE: "REV.NE",
+ REV_CS: "REV.CS",
+ REV_CC: "REV.CC",
+ REV_MI: "REV.MI",
+ REV_PL: "REV.PL",
+ REV_VS: "REV.VS",
+ REV_VC: "REV.VC",
+ REV_HI: "REV.HI",
+ REV_LS: "REV.LS",
+ REV_GE: "REV.GE",
+ REV_LT: "REV.LT",
+ REV_GT: "REV.GT",
+ REV_LE: "REV.LE",
+ REV: "REV",
+ REV_ZZ: "REV.ZZ",
+ REV16_EQ: "REV16.EQ",
+ REV16_NE: "REV16.NE",
+ REV16_CS: "REV16.CS",
+ REV16_CC: "REV16.CC",
+ REV16_MI: "REV16.MI",
+ REV16_PL: "REV16.PL",
+ REV16_VS: "REV16.VS",
+ REV16_VC: "REV16.VC",
+ REV16_HI: "REV16.HI",
+ REV16_LS: "REV16.LS",
+ REV16_GE: "REV16.GE",
+ REV16_LT: "REV16.LT",
+ REV16_GT: "REV16.GT",
+ REV16_LE: "REV16.LE",
+ REV16: "REV16",
+ REV16_ZZ: "REV16.ZZ",
+ REVSH_EQ: "REVSH.EQ",
+ REVSH_NE: "REVSH.NE",
+ REVSH_CS: "REVSH.CS",
+ REVSH_CC: "REVSH.CC",
+ REVSH_MI: "REVSH.MI",
+ REVSH_PL: "REVSH.PL",
+ REVSH_VS: "REVSH.VS",
+ REVSH_VC: "REVSH.VC",
+ REVSH_HI: "REVSH.HI",
+ REVSH_LS: "REVSH.LS",
+ REVSH_GE: "REVSH.GE",
+ REVSH_LT: "REVSH.LT",
+ REVSH_GT: "REVSH.GT",
+ REVSH_LE: "REVSH.LE",
+ REVSH: "REVSH",
+ REVSH_ZZ: "REVSH.ZZ",
+ ROR_EQ: "ROR.EQ",
+ ROR_NE: "ROR.NE",
+ ROR_CS: "ROR.CS",
+ ROR_CC: "ROR.CC",
+ ROR_MI: "ROR.MI",
+ ROR_PL: "ROR.PL",
+ ROR_VS: "ROR.VS",
+ ROR_VC: "ROR.VC",
+ ROR_HI: "ROR.HI",
+ ROR_LS: "ROR.LS",
+ ROR_GE: "ROR.GE",
+ ROR_LT: "ROR.LT",
+ ROR_GT: "ROR.GT",
+ ROR_LE: "ROR.LE",
+ ROR: "ROR",
+ ROR_ZZ: "ROR.ZZ",
+ ROR_S_EQ: "ROR.S.EQ",
+ ROR_S_NE: "ROR.S.NE",
+ ROR_S_CS: "ROR.S.CS",
+ ROR_S_CC: "ROR.S.CC",
+ ROR_S_MI: "ROR.S.MI",
+ ROR_S_PL: "ROR.S.PL",
+ ROR_S_VS: "ROR.S.VS",
+ ROR_S_VC: "ROR.S.VC",
+ ROR_S_HI: "ROR.S.HI",
+ ROR_S_LS: "ROR.S.LS",
+ ROR_S_GE: "ROR.S.GE",
+ ROR_S_LT: "ROR.S.LT",
+ ROR_S_GT: "ROR.S.GT",
+ ROR_S_LE: "ROR.S.LE",
+ ROR_S: "ROR.S",
+ ROR_S_ZZ: "ROR.S.ZZ",
+ RRX_EQ: "RRX.EQ",
+ RRX_NE: "RRX.NE",
+ RRX_CS: "RRX.CS",
+ RRX_CC: "RRX.CC",
+ RRX_MI: "RRX.MI",
+ RRX_PL: "RRX.PL",
+ RRX_VS: "RRX.VS",
+ RRX_VC: "RRX.VC",
+ RRX_HI: "RRX.HI",
+ RRX_LS: "RRX.LS",
+ RRX_GE: "RRX.GE",
+ RRX_LT: "RRX.LT",
+ RRX_GT: "RRX.GT",
+ RRX_LE: "RRX.LE",
+ RRX: "RRX",
+ RRX_ZZ: "RRX.ZZ",
+ RRX_S_EQ: "RRX.S.EQ",
+ RRX_S_NE: "RRX.S.NE",
+ RRX_S_CS: "RRX.S.CS",
+ RRX_S_CC: "RRX.S.CC",
+ RRX_S_MI: "RRX.S.MI",
+ RRX_S_PL: "RRX.S.PL",
+ RRX_S_VS: "RRX.S.VS",
+ RRX_S_VC: "RRX.S.VC",
+ RRX_S_HI: "RRX.S.HI",
+ RRX_S_LS: "RRX.S.LS",
+ RRX_S_GE: "RRX.S.GE",
+ RRX_S_LT: "RRX.S.LT",
+ RRX_S_GT: "RRX.S.GT",
+ RRX_S_LE: "RRX.S.LE",
+ RRX_S: "RRX.S",
+ RRX_S_ZZ: "RRX.S.ZZ",
+ RSB_EQ: "RSB.EQ",
+ RSB_NE: "RSB.NE",
+ RSB_CS: "RSB.CS",
+ RSB_CC: "RSB.CC",
+ RSB_MI: "RSB.MI",
+ RSB_PL: "RSB.PL",
+ RSB_VS: "RSB.VS",
+ RSB_VC: "RSB.VC",
+ RSB_HI: "RSB.HI",
+ RSB_LS: "RSB.LS",
+ RSB_GE: "RSB.GE",
+ RSB_LT: "RSB.LT",
+ RSB_GT: "RSB.GT",
+ RSB_LE: "RSB.LE",
+ RSB: "RSB",
+ RSB_ZZ: "RSB.ZZ",
+ RSB_S_EQ: "RSB.S.EQ",
+ RSB_S_NE: "RSB.S.NE",
+ RSB_S_CS: "RSB.S.CS",
+ RSB_S_CC: "RSB.S.CC",
+ RSB_S_MI: "RSB.S.MI",
+ RSB_S_PL: "RSB.S.PL",
+ RSB_S_VS: "RSB.S.VS",
+ RSB_S_VC: "RSB.S.VC",
+ RSB_S_HI: "RSB.S.HI",
+ RSB_S_LS: "RSB.S.LS",
+ RSB_S_GE: "RSB.S.GE",
+ RSB_S_LT: "RSB.S.LT",
+ RSB_S_GT: "RSB.S.GT",
+ RSB_S_LE: "RSB.S.LE",
+ RSB_S: "RSB.S",
+ RSB_S_ZZ: "RSB.S.ZZ",
+ RSC_EQ: "RSC.EQ",
+ RSC_NE: "RSC.NE",
+ RSC_CS: "RSC.CS",
+ RSC_CC: "RSC.CC",
+ RSC_MI: "RSC.MI",
+ RSC_PL: "RSC.PL",
+ RSC_VS: "RSC.VS",
+ RSC_VC: "RSC.VC",
+ RSC_HI: "RSC.HI",
+ RSC_LS: "RSC.LS",
+ RSC_GE: "RSC.GE",
+ RSC_LT: "RSC.LT",
+ RSC_GT: "RSC.GT",
+ RSC_LE: "RSC.LE",
+ RSC: "RSC",
+ RSC_ZZ: "RSC.ZZ",
+ RSC_S_EQ: "RSC.S.EQ",
+ RSC_S_NE: "RSC.S.NE",
+ RSC_S_CS: "RSC.S.CS",
+ RSC_S_CC: "RSC.S.CC",
+ RSC_S_MI: "RSC.S.MI",
+ RSC_S_PL: "RSC.S.PL",
+ RSC_S_VS: "RSC.S.VS",
+ RSC_S_VC: "RSC.S.VC",
+ RSC_S_HI: "RSC.S.HI",
+ RSC_S_LS: "RSC.S.LS",
+ RSC_S_GE: "RSC.S.GE",
+ RSC_S_LT: "RSC.S.LT",
+ RSC_S_GT: "RSC.S.GT",
+ RSC_S_LE: "RSC.S.LE",
+ RSC_S: "RSC.S",
+ RSC_S_ZZ: "RSC.S.ZZ",
+ SADD16_EQ: "SADD16.EQ",
+ SADD16_NE: "SADD16.NE",
+ SADD16_CS: "SADD16.CS",
+ SADD16_CC: "SADD16.CC",
+ SADD16_MI: "SADD16.MI",
+ SADD16_PL: "SADD16.PL",
+ SADD16_VS: "SADD16.VS",
+ SADD16_VC: "SADD16.VC",
+ SADD16_HI: "SADD16.HI",
+ SADD16_LS: "SADD16.LS",
+ SADD16_GE: "SADD16.GE",
+ SADD16_LT: "SADD16.LT",
+ SADD16_GT: "SADD16.GT",
+ SADD16_LE: "SADD16.LE",
+ SADD16: "SADD16",
+ SADD16_ZZ: "SADD16.ZZ",
+ SADD8_EQ: "SADD8.EQ",
+ SADD8_NE: "SADD8.NE",
+ SADD8_CS: "SADD8.CS",
+ SADD8_CC: "SADD8.CC",
+ SADD8_MI: "SADD8.MI",
+ SADD8_PL: "SADD8.PL",
+ SADD8_VS: "SADD8.VS",
+ SADD8_VC: "SADD8.VC",
+ SADD8_HI: "SADD8.HI",
+ SADD8_LS: "SADD8.LS",
+ SADD8_GE: "SADD8.GE",
+ SADD8_LT: "SADD8.LT",
+ SADD8_GT: "SADD8.GT",
+ SADD8_LE: "SADD8.LE",
+ SADD8: "SADD8",
+ SADD8_ZZ: "SADD8.ZZ",
+ SASX_EQ: "SASX.EQ",
+ SASX_NE: "SASX.NE",
+ SASX_CS: "SASX.CS",
+ SASX_CC: "SASX.CC",
+ SASX_MI: "SASX.MI",
+ SASX_PL: "SASX.PL",
+ SASX_VS: "SASX.VS",
+ SASX_VC: "SASX.VC",
+ SASX_HI: "SASX.HI",
+ SASX_LS: "SASX.LS",
+ SASX_GE: "SASX.GE",
+ SASX_LT: "SASX.LT",
+ SASX_GT: "SASX.GT",
+ SASX_LE: "SASX.LE",
+ SASX: "SASX",
+ SASX_ZZ: "SASX.ZZ",
+ SBC_EQ: "SBC.EQ",
+ SBC_NE: "SBC.NE",
+ SBC_CS: "SBC.CS",
+ SBC_CC: "SBC.CC",
+ SBC_MI: "SBC.MI",
+ SBC_PL: "SBC.PL",
+ SBC_VS: "SBC.VS",
+ SBC_VC: "SBC.VC",
+ SBC_HI: "SBC.HI",
+ SBC_LS: "SBC.LS",
+ SBC_GE: "SBC.GE",
+ SBC_LT: "SBC.LT",
+ SBC_GT: "SBC.GT",
+ SBC_LE: "SBC.LE",
+ SBC: "SBC",
+ SBC_ZZ: "SBC.ZZ",
+ SBC_S_EQ: "SBC.S.EQ",
+ SBC_S_NE: "SBC.S.NE",
+ SBC_S_CS: "SBC.S.CS",
+ SBC_S_CC: "SBC.S.CC",
+ SBC_S_MI: "SBC.S.MI",
+ SBC_S_PL: "SBC.S.PL",
+ SBC_S_VS: "SBC.S.VS",
+ SBC_S_VC: "SBC.S.VC",
+ SBC_S_HI: "SBC.S.HI",
+ SBC_S_LS: "SBC.S.LS",
+ SBC_S_GE: "SBC.S.GE",
+ SBC_S_LT: "SBC.S.LT",
+ SBC_S_GT: "SBC.S.GT",
+ SBC_S_LE: "SBC.S.LE",
+ SBC_S: "SBC.S",
+ SBC_S_ZZ: "SBC.S.ZZ",
+ SBFX_EQ: "SBFX.EQ",
+ SBFX_NE: "SBFX.NE",
+ SBFX_CS: "SBFX.CS",
+ SBFX_CC: "SBFX.CC",
+ SBFX_MI: "SBFX.MI",
+ SBFX_PL: "SBFX.PL",
+ SBFX_VS: "SBFX.VS",
+ SBFX_VC: "SBFX.VC",
+ SBFX_HI: "SBFX.HI",
+ SBFX_LS: "SBFX.LS",
+ SBFX_GE: "SBFX.GE",
+ SBFX_LT: "SBFX.LT",
+ SBFX_GT: "SBFX.GT",
+ SBFX_LE: "SBFX.LE",
+ SBFX: "SBFX",
+ SBFX_ZZ: "SBFX.ZZ",
+ SEL_EQ: "SEL.EQ",
+ SEL_NE: "SEL.NE",
+ SEL_CS: "SEL.CS",
+ SEL_CC: "SEL.CC",
+ SEL_MI: "SEL.MI",
+ SEL_PL: "SEL.PL",
+ SEL_VS: "SEL.VS",
+ SEL_VC: "SEL.VC",
+ SEL_HI: "SEL.HI",
+ SEL_LS: "SEL.LS",
+ SEL_GE: "SEL.GE",
+ SEL_LT: "SEL.LT",
+ SEL_GT: "SEL.GT",
+ SEL_LE: "SEL.LE",
+ SEL: "SEL",
+ SEL_ZZ: "SEL.ZZ",
+ SETEND: "SETEND",
+ SEV_EQ: "SEV.EQ",
+ SEV_NE: "SEV.NE",
+ SEV_CS: "SEV.CS",
+ SEV_CC: "SEV.CC",
+ SEV_MI: "SEV.MI",
+ SEV_PL: "SEV.PL",
+ SEV_VS: "SEV.VS",
+ SEV_VC: "SEV.VC",
+ SEV_HI: "SEV.HI",
+ SEV_LS: "SEV.LS",
+ SEV_GE: "SEV.GE",
+ SEV_LT: "SEV.LT",
+ SEV_GT: "SEV.GT",
+ SEV_LE: "SEV.LE",
+ SEV: "SEV",
+ SEV_ZZ: "SEV.ZZ",
+ SHADD16_EQ: "SHADD16.EQ",
+ SHADD16_NE: "SHADD16.NE",
+ SHADD16_CS: "SHADD16.CS",
+ SHADD16_CC: "SHADD16.CC",
+ SHADD16_MI: "SHADD16.MI",
+ SHADD16_PL: "SHADD16.PL",
+ SHADD16_VS: "SHADD16.VS",
+ SHADD16_VC: "SHADD16.VC",
+ SHADD16_HI: "SHADD16.HI",
+ SHADD16_LS: "SHADD16.LS",
+ SHADD16_GE: "SHADD16.GE",
+ SHADD16_LT: "SHADD16.LT",
+ SHADD16_GT: "SHADD16.GT",
+ SHADD16_LE: "SHADD16.LE",
+ SHADD16: "SHADD16",
+ SHADD16_ZZ: "SHADD16.ZZ",
+ SHADD8_EQ: "SHADD8.EQ",
+ SHADD8_NE: "SHADD8.NE",
+ SHADD8_CS: "SHADD8.CS",
+ SHADD8_CC: "SHADD8.CC",
+ SHADD8_MI: "SHADD8.MI",
+ SHADD8_PL: "SHADD8.PL",
+ SHADD8_VS: "SHADD8.VS",
+ SHADD8_VC: "SHADD8.VC",
+ SHADD8_HI: "SHADD8.HI",
+ SHADD8_LS: "SHADD8.LS",
+ SHADD8_GE: "SHADD8.GE",
+ SHADD8_LT: "SHADD8.LT",
+ SHADD8_GT: "SHADD8.GT",
+ SHADD8_LE: "SHADD8.LE",
+ SHADD8: "SHADD8",
+ SHADD8_ZZ: "SHADD8.ZZ",
+ SHASX_EQ: "SHASX.EQ",
+ SHASX_NE: "SHASX.NE",
+ SHASX_CS: "SHASX.CS",
+ SHASX_CC: "SHASX.CC",
+ SHASX_MI: "SHASX.MI",
+ SHASX_PL: "SHASX.PL",
+ SHASX_VS: "SHASX.VS",
+ SHASX_VC: "SHASX.VC",
+ SHASX_HI: "SHASX.HI",
+ SHASX_LS: "SHASX.LS",
+ SHASX_GE: "SHASX.GE",
+ SHASX_LT: "SHASX.LT",
+ SHASX_GT: "SHASX.GT",
+ SHASX_LE: "SHASX.LE",
+ SHASX: "SHASX",
+ SHASX_ZZ: "SHASX.ZZ",
+ SHSAX_EQ: "SHSAX.EQ",
+ SHSAX_NE: "SHSAX.NE",
+ SHSAX_CS: "SHSAX.CS",
+ SHSAX_CC: "SHSAX.CC",
+ SHSAX_MI: "SHSAX.MI",
+ SHSAX_PL: "SHSAX.PL",
+ SHSAX_VS: "SHSAX.VS",
+ SHSAX_VC: "SHSAX.VC",
+ SHSAX_HI: "SHSAX.HI",
+ SHSAX_LS: "SHSAX.LS",
+ SHSAX_GE: "SHSAX.GE",
+ SHSAX_LT: "SHSAX.LT",
+ SHSAX_GT: "SHSAX.GT",
+ SHSAX_LE: "SHSAX.LE",
+ SHSAX: "SHSAX",
+ SHSAX_ZZ: "SHSAX.ZZ",
+ SHSUB16_EQ: "SHSUB16.EQ",
+ SHSUB16_NE: "SHSUB16.NE",
+ SHSUB16_CS: "SHSUB16.CS",
+ SHSUB16_CC: "SHSUB16.CC",
+ SHSUB16_MI: "SHSUB16.MI",
+ SHSUB16_PL: "SHSUB16.PL",
+ SHSUB16_VS: "SHSUB16.VS",
+ SHSUB16_VC: "SHSUB16.VC",
+ SHSUB16_HI: "SHSUB16.HI",
+ SHSUB16_LS: "SHSUB16.LS",
+ SHSUB16_GE: "SHSUB16.GE",
+ SHSUB16_LT: "SHSUB16.LT",
+ SHSUB16_GT: "SHSUB16.GT",
+ SHSUB16_LE: "SHSUB16.LE",
+ SHSUB16: "SHSUB16",
+ SHSUB16_ZZ: "SHSUB16.ZZ",
+ SHSUB8_EQ: "SHSUB8.EQ",
+ SHSUB8_NE: "SHSUB8.NE",
+ SHSUB8_CS: "SHSUB8.CS",
+ SHSUB8_CC: "SHSUB8.CC",
+ SHSUB8_MI: "SHSUB8.MI",
+ SHSUB8_PL: "SHSUB8.PL",
+ SHSUB8_VS: "SHSUB8.VS",
+ SHSUB8_VC: "SHSUB8.VC",
+ SHSUB8_HI: "SHSUB8.HI",
+ SHSUB8_LS: "SHSUB8.LS",
+ SHSUB8_GE: "SHSUB8.GE",
+ SHSUB8_LT: "SHSUB8.LT",
+ SHSUB8_GT: "SHSUB8.GT",
+ SHSUB8_LE: "SHSUB8.LE",
+ SHSUB8: "SHSUB8",
+ SHSUB8_ZZ: "SHSUB8.ZZ",
+ SMLABB_EQ: "SMLABB.EQ",
+ SMLABB_NE: "SMLABB.NE",
+ SMLABB_CS: "SMLABB.CS",
+ SMLABB_CC: "SMLABB.CC",
+ SMLABB_MI: "SMLABB.MI",
+ SMLABB_PL: "SMLABB.PL",
+ SMLABB_VS: "SMLABB.VS",
+ SMLABB_VC: "SMLABB.VC",
+ SMLABB_HI: "SMLABB.HI",
+ SMLABB_LS: "SMLABB.LS",
+ SMLABB_GE: "SMLABB.GE",
+ SMLABB_LT: "SMLABB.LT",
+ SMLABB_GT: "SMLABB.GT",
+ SMLABB_LE: "SMLABB.LE",
+ SMLABB: "SMLABB",
+ SMLABB_ZZ: "SMLABB.ZZ",
+ SMLABT_EQ: "SMLABT.EQ",
+ SMLABT_NE: "SMLABT.NE",
+ SMLABT_CS: "SMLABT.CS",
+ SMLABT_CC: "SMLABT.CC",
+ SMLABT_MI: "SMLABT.MI",
+ SMLABT_PL: "SMLABT.PL",
+ SMLABT_VS: "SMLABT.VS",
+ SMLABT_VC: "SMLABT.VC",
+ SMLABT_HI: "SMLABT.HI",
+ SMLABT_LS: "SMLABT.LS",
+ SMLABT_GE: "SMLABT.GE",
+ SMLABT_LT: "SMLABT.LT",
+ SMLABT_GT: "SMLABT.GT",
+ SMLABT_LE: "SMLABT.LE",
+ SMLABT: "SMLABT",
+ SMLABT_ZZ: "SMLABT.ZZ",
+ SMLATB_EQ: "SMLATB.EQ",
+ SMLATB_NE: "SMLATB.NE",
+ SMLATB_CS: "SMLATB.CS",
+ SMLATB_CC: "SMLATB.CC",
+ SMLATB_MI: "SMLATB.MI",
+ SMLATB_PL: "SMLATB.PL",
+ SMLATB_VS: "SMLATB.VS",
+ SMLATB_VC: "SMLATB.VC",
+ SMLATB_HI: "SMLATB.HI",
+ SMLATB_LS: "SMLATB.LS",
+ SMLATB_GE: "SMLATB.GE",
+ SMLATB_LT: "SMLATB.LT",
+ SMLATB_GT: "SMLATB.GT",
+ SMLATB_LE: "SMLATB.LE",
+ SMLATB: "SMLATB",
+ SMLATB_ZZ: "SMLATB.ZZ",
+ SMLATT_EQ: "SMLATT.EQ",
+ SMLATT_NE: "SMLATT.NE",
+ SMLATT_CS: "SMLATT.CS",
+ SMLATT_CC: "SMLATT.CC",
+ SMLATT_MI: "SMLATT.MI",
+ SMLATT_PL: "SMLATT.PL",
+ SMLATT_VS: "SMLATT.VS",
+ SMLATT_VC: "SMLATT.VC",
+ SMLATT_HI: "SMLATT.HI",
+ SMLATT_LS: "SMLATT.LS",
+ SMLATT_GE: "SMLATT.GE",
+ SMLATT_LT: "SMLATT.LT",
+ SMLATT_GT: "SMLATT.GT",
+ SMLATT_LE: "SMLATT.LE",
+ SMLATT: "SMLATT",
+ SMLATT_ZZ: "SMLATT.ZZ",
+ SMLAD_EQ: "SMLAD.EQ",
+ SMLAD_NE: "SMLAD.NE",
+ SMLAD_CS: "SMLAD.CS",
+ SMLAD_CC: "SMLAD.CC",
+ SMLAD_MI: "SMLAD.MI",
+ SMLAD_PL: "SMLAD.PL",
+ SMLAD_VS: "SMLAD.VS",
+ SMLAD_VC: "SMLAD.VC",
+ SMLAD_HI: "SMLAD.HI",
+ SMLAD_LS: "SMLAD.LS",
+ SMLAD_GE: "SMLAD.GE",
+ SMLAD_LT: "SMLAD.LT",
+ SMLAD_GT: "SMLAD.GT",
+ SMLAD_LE: "SMLAD.LE",
+ SMLAD: "SMLAD",
+ SMLAD_ZZ: "SMLAD.ZZ",
+ SMLAD_X_EQ: "SMLAD.X.EQ",
+ SMLAD_X_NE: "SMLAD.X.NE",
+ SMLAD_X_CS: "SMLAD.X.CS",
+ SMLAD_X_CC: "SMLAD.X.CC",
+ SMLAD_X_MI: "SMLAD.X.MI",
+ SMLAD_X_PL: "SMLAD.X.PL",
+ SMLAD_X_VS: "SMLAD.X.VS",
+ SMLAD_X_VC: "SMLAD.X.VC",
+ SMLAD_X_HI: "SMLAD.X.HI",
+ SMLAD_X_LS: "SMLAD.X.LS",
+ SMLAD_X_GE: "SMLAD.X.GE",
+ SMLAD_X_LT: "SMLAD.X.LT",
+ SMLAD_X_GT: "SMLAD.X.GT",
+ SMLAD_X_LE: "SMLAD.X.LE",
+ SMLAD_X: "SMLAD.X",
+ SMLAD_X_ZZ: "SMLAD.X.ZZ",
+ SMLAL_EQ: "SMLAL.EQ",
+ SMLAL_NE: "SMLAL.NE",
+ SMLAL_CS: "SMLAL.CS",
+ SMLAL_CC: "SMLAL.CC",
+ SMLAL_MI: "SMLAL.MI",
+ SMLAL_PL: "SMLAL.PL",
+ SMLAL_VS: "SMLAL.VS",
+ SMLAL_VC: "SMLAL.VC",
+ SMLAL_HI: "SMLAL.HI",
+ SMLAL_LS: "SMLAL.LS",
+ SMLAL_GE: "SMLAL.GE",
+ SMLAL_LT: "SMLAL.LT",
+ SMLAL_GT: "SMLAL.GT",
+ SMLAL_LE: "SMLAL.LE",
+ SMLAL: "SMLAL",
+ SMLAL_ZZ: "SMLAL.ZZ",
+ SMLAL_S_EQ: "SMLAL.S.EQ",
+ SMLAL_S_NE: "SMLAL.S.NE",
+ SMLAL_S_CS: "SMLAL.S.CS",
+ SMLAL_S_CC: "SMLAL.S.CC",
+ SMLAL_S_MI: "SMLAL.S.MI",
+ SMLAL_S_PL: "SMLAL.S.PL",
+ SMLAL_S_VS: "SMLAL.S.VS",
+ SMLAL_S_VC: "SMLAL.S.VC",
+ SMLAL_S_HI: "SMLAL.S.HI",
+ SMLAL_S_LS: "SMLAL.S.LS",
+ SMLAL_S_GE: "SMLAL.S.GE",
+ SMLAL_S_LT: "SMLAL.S.LT",
+ SMLAL_S_GT: "SMLAL.S.GT",
+ SMLAL_S_LE: "SMLAL.S.LE",
+ SMLAL_S: "SMLAL.S",
+ SMLAL_S_ZZ: "SMLAL.S.ZZ",
+ SMLALBB_EQ: "SMLALBB.EQ",
+ SMLALBB_NE: "SMLALBB.NE",
+ SMLALBB_CS: "SMLALBB.CS",
+ SMLALBB_CC: "SMLALBB.CC",
+ SMLALBB_MI: "SMLALBB.MI",
+ SMLALBB_PL: "SMLALBB.PL",
+ SMLALBB_VS: "SMLALBB.VS",
+ SMLALBB_VC: "SMLALBB.VC",
+ SMLALBB_HI: "SMLALBB.HI",
+ SMLALBB_LS: "SMLALBB.LS",
+ SMLALBB_GE: "SMLALBB.GE",
+ SMLALBB_LT: "SMLALBB.LT",
+ SMLALBB_GT: "SMLALBB.GT",
+ SMLALBB_LE: "SMLALBB.LE",
+ SMLALBB: "SMLALBB",
+ SMLALBB_ZZ: "SMLALBB.ZZ",
+ SMLALBT_EQ: "SMLALBT.EQ",
+ SMLALBT_NE: "SMLALBT.NE",
+ SMLALBT_CS: "SMLALBT.CS",
+ SMLALBT_CC: "SMLALBT.CC",
+ SMLALBT_MI: "SMLALBT.MI",
+ SMLALBT_PL: "SMLALBT.PL",
+ SMLALBT_VS: "SMLALBT.VS",
+ SMLALBT_VC: "SMLALBT.VC",
+ SMLALBT_HI: "SMLALBT.HI",
+ SMLALBT_LS: "SMLALBT.LS",
+ SMLALBT_GE: "SMLALBT.GE",
+ SMLALBT_LT: "SMLALBT.LT",
+ SMLALBT_GT: "SMLALBT.GT",
+ SMLALBT_LE: "SMLALBT.LE",
+ SMLALBT: "SMLALBT",
+ SMLALBT_ZZ: "SMLALBT.ZZ",
+ SMLALTB_EQ: "SMLALTB.EQ",
+ SMLALTB_NE: "SMLALTB.NE",
+ SMLALTB_CS: "SMLALTB.CS",
+ SMLALTB_CC: "SMLALTB.CC",
+ SMLALTB_MI: "SMLALTB.MI",
+ SMLALTB_PL: "SMLALTB.PL",
+ SMLALTB_VS: "SMLALTB.VS",
+ SMLALTB_VC: "SMLALTB.VC",
+ SMLALTB_HI: "SMLALTB.HI",
+ SMLALTB_LS: "SMLALTB.LS",
+ SMLALTB_GE: "SMLALTB.GE",
+ SMLALTB_LT: "SMLALTB.LT",
+ SMLALTB_GT: "SMLALTB.GT",
+ SMLALTB_LE: "SMLALTB.LE",
+ SMLALTB: "SMLALTB",
+ SMLALTB_ZZ: "SMLALTB.ZZ",
+ SMLALTT_EQ: "SMLALTT.EQ",
+ SMLALTT_NE: "SMLALTT.NE",
+ SMLALTT_CS: "SMLALTT.CS",
+ SMLALTT_CC: "SMLALTT.CC",
+ SMLALTT_MI: "SMLALTT.MI",
+ SMLALTT_PL: "SMLALTT.PL",
+ SMLALTT_VS: "SMLALTT.VS",
+ SMLALTT_VC: "SMLALTT.VC",
+ SMLALTT_HI: "SMLALTT.HI",
+ SMLALTT_LS: "SMLALTT.LS",
+ SMLALTT_GE: "SMLALTT.GE",
+ SMLALTT_LT: "SMLALTT.LT",
+ SMLALTT_GT: "SMLALTT.GT",
+ SMLALTT_LE: "SMLALTT.LE",
+ SMLALTT: "SMLALTT",
+ SMLALTT_ZZ: "SMLALTT.ZZ",
+ SMLALD_EQ: "SMLALD.EQ",
+ SMLALD_NE: "SMLALD.NE",
+ SMLALD_CS: "SMLALD.CS",
+ SMLALD_CC: "SMLALD.CC",
+ SMLALD_MI: "SMLALD.MI",
+ SMLALD_PL: "SMLALD.PL",
+ SMLALD_VS: "SMLALD.VS",
+ SMLALD_VC: "SMLALD.VC",
+ SMLALD_HI: "SMLALD.HI",
+ SMLALD_LS: "SMLALD.LS",
+ SMLALD_GE: "SMLALD.GE",
+ SMLALD_LT: "SMLALD.LT",
+ SMLALD_GT: "SMLALD.GT",
+ SMLALD_LE: "SMLALD.LE",
+ SMLALD: "SMLALD",
+ SMLALD_ZZ: "SMLALD.ZZ",
+ SMLALD_X_EQ: "SMLALD.X.EQ",
+ SMLALD_X_NE: "SMLALD.X.NE",
+ SMLALD_X_CS: "SMLALD.X.CS",
+ SMLALD_X_CC: "SMLALD.X.CC",
+ SMLALD_X_MI: "SMLALD.X.MI",
+ SMLALD_X_PL: "SMLALD.X.PL",
+ SMLALD_X_VS: "SMLALD.X.VS",
+ SMLALD_X_VC: "SMLALD.X.VC",
+ SMLALD_X_HI: "SMLALD.X.HI",
+ SMLALD_X_LS: "SMLALD.X.LS",
+ SMLALD_X_GE: "SMLALD.X.GE",
+ SMLALD_X_LT: "SMLALD.X.LT",
+ SMLALD_X_GT: "SMLALD.X.GT",
+ SMLALD_X_LE: "SMLALD.X.LE",
+ SMLALD_X: "SMLALD.X",
+ SMLALD_X_ZZ: "SMLALD.X.ZZ",
+ SMLAWB_EQ: "SMLAWB.EQ",
+ SMLAWB_NE: "SMLAWB.NE",
+ SMLAWB_CS: "SMLAWB.CS",
+ SMLAWB_CC: "SMLAWB.CC",
+ SMLAWB_MI: "SMLAWB.MI",
+ SMLAWB_PL: "SMLAWB.PL",
+ SMLAWB_VS: "SMLAWB.VS",
+ SMLAWB_VC: "SMLAWB.VC",
+ SMLAWB_HI: "SMLAWB.HI",
+ SMLAWB_LS: "SMLAWB.LS",
+ SMLAWB_GE: "SMLAWB.GE",
+ SMLAWB_LT: "SMLAWB.LT",
+ SMLAWB_GT: "SMLAWB.GT",
+ SMLAWB_LE: "SMLAWB.LE",
+ SMLAWB: "SMLAWB",
+ SMLAWB_ZZ: "SMLAWB.ZZ",
+ SMLAWT_EQ: "SMLAWT.EQ",
+ SMLAWT_NE: "SMLAWT.NE",
+ SMLAWT_CS: "SMLAWT.CS",
+ SMLAWT_CC: "SMLAWT.CC",
+ SMLAWT_MI: "SMLAWT.MI",
+ SMLAWT_PL: "SMLAWT.PL",
+ SMLAWT_VS: "SMLAWT.VS",
+ SMLAWT_VC: "SMLAWT.VC",
+ SMLAWT_HI: "SMLAWT.HI",
+ SMLAWT_LS: "SMLAWT.LS",
+ SMLAWT_GE: "SMLAWT.GE",
+ SMLAWT_LT: "SMLAWT.LT",
+ SMLAWT_GT: "SMLAWT.GT",
+ SMLAWT_LE: "SMLAWT.LE",
+ SMLAWT: "SMLAWT",
+ SMLAWT_ZZ: "SMLAWT.ZZ",
+ SMLSD_EQ: "SMLSD.EQ",
+ SMLSD_NE: "SMLSD.NE",
+ SMLSD_CS: "SMLSD.CS",
+ SMLSD_CC: "SMLSD.CC",
+ SMLSD_MI: "SMLSD.MI",
+ SMLSD_PL: "SMLSD.PL",
+ SMLSD_VS: "SMLSD.VS",
+ SMLSD_VC: "SMLSD.VC",
+ SMLSD_HI: "SMLSD.HI",
+ SMLSD_LS: "SMLSD.LS",
+ SMLSD_GE: "SMLSD.GE",
+ SMLSD_LT: "SMLSD.LT",
+ SMLSD_GT: "SMLSD.GT",
+ SMLSD_LE: "SMLSD.LE",
+ SMLSD: "SMLSD",
+ SMLSD_ZZ: "SMLSD.ZZ",
+ SMLSD_X_EQ: "SMLSD.X.EQ",
+ SMLSD_X_NE: "SMLSD.X.NE",
+ SMLSD_X_CS: "SMLSD.X.CS",
+ SMLSD_X_CC: "SMLSD.X.CC",
+ SMLSD_X_MI: "SMLSD.X.MI",
+ SMLSD_X_PL: "SMLSD.X.PL",
+ SMLSD_X_VS: "SMLSD.X.VS",
+ SMLSD_X_VC: "SMLSD.X.VC",
+ SMLSD_X_HI: "SMLSD.X.HI",
+ SMLSD_X_LS: "SMLSD.X.LS",
+ SMLSD_X_GE: "SMLSD.X.GE",
+ SMLSD_X_LT: "SMLSD.X.LT",
+ SMLSD_X_GT: "SMLSD.X.GT",
+ SMLSD_X_LE: "SMLSD.X.LE",
+ SMLSD_X: "SMLSD.X",
+ SMLSD_X_ZZ: "SMLSD.X.ZZ",
+ SMLSLD_EQ: "SMLSLD.EQ",
+ SMLSLD_NE: "SMLSLD.NE",
+ SMLSLD_CS: "SMLSLD.CS",
+ SMLSLD_CC: "SMLSLD.CC",
+ SMLSLD_MI: "SMLSLD.MI",
+ SMLSLD_PL: "SMLSLD.PL",
+ SMLSLD_VS: "SMLSLD.VS",
+ SMLSLD_VC: "SMLSLD.VC",
+ SMLSLD_HI: "SMLSLD.HI",
+ SMLSLD_LS: "SMLSLD.LS",
+ SMLSLD_GE: "SMLSLD.GE",
+ SMLSLD_LT: "SMLSLD.LT",
+ SMLSLD_GT: "SMLSLD.GT",
+ SMLSLD_LE: "SMLSLD.LE",
+ SMLSLD: "SMLSLD",
+ SMLSLD_ZZ: "SMLSLD.ZZ",
+ SMLSLD_X_EQ: "SMLSLD.X.EQ",
+ SMLSLD_X_NE: "SMLSLD.X.NE",
+ SMLSLD_X_CS: "SMLSLD.X.CS",
+ SMLSLD_X_CC: "SMLSLD.X.CC",
+ SMLSLD_X_MI: "SMLSLD.X.MI",
+ SMLSLD_X_PL: "SMLSLD.X.PL",
+ SMLSLD_X_VS: "SMLSLD.X.VS",
+ SMLSLD_X_VC: "SMLSLD.X.VC",
+ SMLSLD_X_HI: "SMLSLD.X.HI",
+ SMLSLD_X_LS: "SMLSLD.X.LS",
+ SMLSLD_X_GE: "SMLSLD.X.GE",
+ SMLSLD_X_LT: "SMLSLD.X.LT",
+ SMLSLD_X_GT: "SMLSLD.X.GT",
+ SMLSLD_X_LE: "SMLSLD.X.LE",
+ SMLSLD_X: "SMLSLD.X",
+ SMLSLD_X_ZZ: "SMLSLD.X.ZZ",
+ SMMLA_EQ: "SMMLA.EQ",
+ SMMLA_NE: "SMMLA.NE",
+ SMMLA_CS: "SMMLA.CS",
+ SMMLA_CC: "SMMLA.CC",
+ SMMLA_MI: "SMMLA.MI",
+ SMMLA_PL: "SMMLA.PL",
+ SMMLA_VS: "SMMLA.VS",
+ SMMLA_VC: "SMMLA.VC",
+ SMMLA_HI: "SMMLA.HI",
+ SMMLA_LS: "SMMLA.LS",
+ SMMLA_GE: "SMMLA.GE",
+ SMMLA_LT: "SMMLA.LT",
+ SMMLA_GT: "SMMLA.GT",
+ SMMLA_LE: "SMMLA.LE",
+ SMMLA: "SMMLA",
+ SMMLA_ZZ: "SMMLA.ZZ",
+ SMMLA_R_EQ: "SMMLA.R.EQ",
+ SMMLA_R_NE: "SMMLA.R.NE",
+ SMMLA_R_CS: "SMMLA.R.CS",
+ SMMLA_R_CC: "SMMLA.R.CC",
+ SMMLA_R_MI: "SMMLA.R.MI",
+ SMMLA_R_PL: "SMMLA.R.PL",
+ SMMLA_R_VS: "SMMLA.R.VS",
+ SMMLA_R_VC: "SMMLA.R.VC",
+ SMMLA_R_HI: "SMMLA.R.HI",
+ SMMLA_R_LS: "SMMLA.R.LS",
+ SMMLA_R_GE: "SMMLA.R.GE",
+ SMMLA_R_LT: "SMMLA.R.LT",
+ SMMLA_R_GT: "SMMLA.R.GT",
+ SMMLA_R_LE: "SMMLA.R.LE",
+ SMMLA_R: "SMMLA.R",
+ SMMLA_R_ZZ: "SMMLA.R.ZZ",
+ SMMLS_EQ: "SMMLS.EQ",
+ SMMLS_NE: "SMMLS.NE",
+ SMMLS_CS: "SMMLS.CS",
+ SMMLS_CC: "SMMLS.CC",
+ SMMLS_MI: "SMMLS.MI",
+ SMMLS_PL: "SMMLS.PL",
+ SMMLS_VS: "SMMLS.VS",
+ SMMLS_VC: "SMMLS.VC",
+ SMMLS_HI: "SMMLS.HI",
+ SMMLS_LS: "SMMLS.LS",
+ SMMLS_GE: "SMMLS.GE",
+ SMMLS_LT: "SMMLS.LT",
+ SMMLS_GT: "SMMLS.GT",
+ SMMLS_LE: "SMMLS.LE",
+ SMMLS: "SMMLS",
+ SMMLS_ZZ: "SMMLS.ZZ",
+ SMMLS_R_EQ: "SMMLS.R.EQ",
+ SMMLS_R_NE: "SMMLS.R.NE",
+ SMMLS_R_CS: "SMMLS.R.CS",
+ SMMLS_R_CC: "SMMLS.R.CC",
+ SMMLS_R_MI: "SMMLS.R.MI",
+ SMMLS_R_PL: "SMMLS.R.PL",
+ SMMLS_R_VS: "SMMLS.R.VS",
+ SMMLS_R_VC: "SMMLS.R.VC",
+ SMMLS_R_HI: "SMMLS.R.HI",
+ SMMLS_R_LS: "SMMLS.R.LS",
+ SMMLS_R_GE: "SMMLS.R.GE",
+ SMMLS_R_LT: "SMMLS.R.LT",
+ SMMLS_R_GT: "SMMLS.R.GT",
+ SMMLS_R_LE: "SMMLS.R.LE",
+ SMMLS_R: "SMMLS.R",
+ SMMLS_R_ZZ: "SMMLS.R.ZZ",
+ SMMUL_EQ: "SMMUL.EQ",
+ SMMUL_NE: "SMMUL.NE",
+ SMMUL_CS: "SMMUL.CS",
+ SMMUL_CC: "SMMUL.CC",
+ SMMUL_MI: "SMMUL.MI",
+ SMMUL_PL: "SMMUL.PL",
+ SMMUL_VS: "SMMUL.VS",
+ SMMUL_VC: "SMMUL.VC",
+ SMMUL_HI: "SMMUL.HI",
+ SMMUL_LS: "SMMUL.LS",
+ SMMUL_GE: "SMMUL.GE",
+ SMMUL_LT: "SMMUL.LT",
+ SMMUL_GT: "SMMUL.GT",
+ SMMUL_LE: "SMMUL.LE",
+ SMMUL: "SMMUL",
+ SMMUL_ZZ: "SMMUL.ZZ",
+ SMMUL_R_EQ: "SMMUL.R.EQ",
+ SMMUL_R_NE: "SMMUL.R.NE",
+ SMMUL_R_CS: "SMMUL.R.CS",
+ SMMUL_R_CC: "SMMUL.R.CC",
+ SMMUL_R_MI: "SMMUL.R.MI",
+ SMMUL_R_PL: "SMMUL.R.PL",
+ SMMUL_R_VS: "SMMUL.R.VS",
+ SMMUL_R_VC: "SMMUL.R.VC",
+ SMMUL_R_HI: "SMMUL.R.HI",
+ SMMUL_R_LS: "SMMUL.R.LS",
+ SMMUL_R_GE: "SMMUL.R.GE",
+ SMMUL_R_LT: "SMMUL.R.LT",
+ SMMUL_R_GT: "SMMUL.R.GT",
+ SMMUL_R_LE: "SMMUL.R.LE",
+ SMMUL_R: "SMMUL.R",
+ SMMUL_R_ZZ: "SMMUL.R.ZZ",
+ SMUAD_EQ: "SMUAD.EQ",
+ SMUAD_NE: "SMUAD.NE",
+ SMUAD_CS: "SMUAD.CS",
+ SMUAD_CC: "SMUAD.CC",
+ SMUAD_MI: "SMUAD.MI",
+ SMUAD_PL: "SMUAD.PL",
+ SMUAD_VS: "SMUAD.VS",
+ SMUAD_VC: "SMUAD.VC",
+ SMUAD_HI: "SMUAD.HI",
+ SMUAD_LS: "SMUAD.LS",
+ SMUAD_GE: "SMUAD.GE",
+ SMUAD_LT: "SMUAD.LT",
+ SMUAD_GT: "SMUAD.GT",
+ SMUAD_LE: "SMUAD.LE",
+ SMUAD: "SMUAD",
+ SMUAD_ZZ: "SMUAD.ZZ",
+ SMUAD_X_EQ: "SMUAD.X.EQ",
+ SMUAD_X_NE: "SMUAD.X.NE",
+ SMUAD_X_CS: "SMUAD.X.CS",
+ SMUAD_X_CC: "SMUAD.X.CC",
+ SMUAD_X_MI: "SMUAD.X.MI",
+ SMUAD_X_PL: "SMUAD.X.PL",
+ SMUAD_X_VS: "SMUAD.X.VS",
+ SMUAD_X_VC: "SMUAD.X.VC",
+ SMUAD_X_HI: "SMUAD.X.HI",
+ SMUAD_X_LS: "SMUAD.X.LS",
+ SMUAD_X_GE: "SMUAD.X.GE",
+ SMUAD_X_LT: "SMUAD.X.LT",
+ SMUAD_X_GT: "SMUAD.X.GT",
+ SMUAD_X_LE: "SMUAD.X.LE",
+ SMUAD_X: "SMUAD.X",
+ SMUAD_X_ZZ: "SMUAD.X.ZZ",
+ SMULBB_EQ: "SMULBB.EQ",
+ SMULBB_NE: "SMULBB.NE",
+ SMULBB_CS: "SMULBB.CS",
+ SMULBB_CC: "SMULBB.CC",
+ SMULBB_MI: "SMULBB.MI",
+ SMULBB_PL: "SMULBB.PL",
+ SMULBB_VS: "SMULBB.VS",
+ SMULBB_VC: "SMULBB.VC",
+ SMULBB_HI: "SMULBB.HI",
+ SMULBB_LS: "SMULBB.LS",
+ SMULBB_GE: "SMULBB.GE",
+ SMULBB_LT: "SMULBB.LT",
+ SMULBB_GT: "SMULBB.GT",
+ SMULBB_LE: "SMULBB.LE",
+ SMULBB: "SMULBB",
+ SMULBB_ZZ: "SMULBB.ZZ",
+ SMULBT_EQ: "SMULBT.EQ",
+ SMULBT_NE: "SMULBT.NE",
+ SMULBT_CS: "SMULBT.CS",
+ SMULBT_CC: "SMULBT.CC",
+ SMULBT_MI: "SMULBT.MI",
+ SMULBT_PL: "SMULBT.PL",
+ SMULBT_VS: "SMULBT.VS",
+ SMULBT_VC: "SMULBT.VC",
+ SMULBT_HI: "SMULBT.HI",
+ SMULBT_LS: "SMULBT.LS",
+ SMULBT_GE: "SMULBT.GE",
+ SMULBT_LT: "SMULBT.LT",
+ SMULBT_GT: "SMULBT.GT",
+ SMULBT_LE: "SMULBT.LE",
+ SMULBT: "SMULBT",
+ SMULBT_ZZ: "SMULBT.ZZ",
+ SMULTB_EQ: "SMULTB.EQ",
+ SMULTB_NE: "SMULTB.NE",
+ SMULTB_CS: "SMULTB.CS",
+ SMULTB_CC: "SMULTB.CC",
+ SMULTB_MI: "SMULTB.MI",
+ SMULTB_PL: "SMULTB.PL",
+ SMULTB_VS: "SMULTB.VS",
+ SMULTB_VC: "SMULTB.VC",
+ SMULTB_HI: "SMULTB.HI",
+ SMULTB_LS: "SMULTB.LS",
+ SMULTB_GE: "SMULTB.GE",
+ SMULTB_LT: "SMULTB.LT",
+ SMULTB_GT: "SMULTB.GT",
+ SMULTB_LE: "SMULTB.LE",
+ SMULTB: "SMULTB",
+ SMULTB_ZZ: "SMULTB.ZZ",
+ SMULTT_EQ: "SMULTT.EQ",
+ SMULTT_NE: "SMULTT.NE",
+ SMULTT_CS: "SMULTT.CS",
+ SMULTT_CC: "SMULTT.CC",
+ SMULTT_MI: "SMULTT.MI",
+ SMULTT_PL: "SMULTT.PL",
+ SMULTT_VS: "SMULTT.VS",
+ SMULTT_VC: "SMULTT.VC",
+ SMULTT_HI: "SMULTT.HI",
+ SMULTT_LS: "SMULTT.LS",
+ SMULTT_GE: "SMULTT.GE",
+ SMULTT_LT: "SMULTT.LT",
+ SMULTT_GT: "SMULTT.GT",
+ SMULTT_LE: "SMULTT.LE",
+ SMULTT: "SMULTT",
+ SMULTT_ZZ: "SMULTT.ZZ",
+ SMULL_EQ: "SMULL.EQ",
+ SMULL_NE: "SMULL.NE",
+ SMULL_CS: "SMULL.CS",
+ SMULL_CC: "SMULL.CC",
+ SMULL_MI: "SMULL.MI",
+ SMULL_PL: "SMULL.PL",
+ SMULL_VS: "SMULL.VS",
+ SMULL_VC: "SMULL.VC",
+ SMULL_HI: "SMULL.HI",
+ SMULL_LS: "SMULL.LS",
+ SMULL_GE: "SMULL.GE",
+ SMULL_LT: "SMULL.LT",
+ SMULL_GT: "SMULL.GT",
+ SMULL_LE: "SMULL.LE",
+ SMULL: "SMULL",
+ SMULL_ZZ: "SMULL.ZZ",
+ SMULL_S_EQ: "SMULL.S.EQ",
+ SMULL_S_NE: "SMULL.S.NE",
+ SMULL_S_CS: "SMULL.S.CS",
+ SMULL_S_CC: "SMULL.S.CC",
+ SMULL_S_MI: "SMULL.S.MI",
+ SMULL_S_PL: "SMULL.S.PL",
+ SMULL_S_VS: "SMULL.S.VS",
+ SMULL_S_VC: "SMULL.S.VC",
+ SMULL_S_HI: "SMULL.S.HI",
+ SMULL_S_LS: "SMULL.S.LS",
+ SMULL_S_GE: "SMULL.S.GE",
+ SMULL_S_LT: "SMULL.S.LT",
+ SMULL_S_GT: "SMULL.S.GT",
+ SMULL_S_LE: "SMULL.S.LE",
+ SMULL_S: "SMULL.S",
+ SMULL_S_ZZ: "SMULL.S.ZZ",
+ SMULWB_EQ: "SMULWB.EQ",
+ SMULWB_NE: "SMULWB.NE",
+ SMULWB_CS: "SMULWB.CS",
+ SMULWB_CC: "SMULWB.CC",
+ SMULWB_MI: "SMULWB.MI",
+ SMULWB_PL: "SMULWB.PL",
+ SMULWB_VS: "SMULWB.VS",
+ SMULWB_VC: "SMULWB.VC",
+ SMULWB_HI: "SMULWB.HI",
+ SMULWB_LS: "SMULWB.LS",
+ SMULWB_GE: "SMULWB.GE",
+ SMULWB_LT: "SMULWB.LT",
+ SMULWB_GT: "SMULWB.GT",
+ SMULWB_LE: "SMULWB.LE",
+ SMULWB: "SMULWB",
+ SMULWB_ZZ: "SMULWB.ZZ",
+ SMULWT_EQ: "SMULWT.EQ",
+ SMULWT_NE: "SMULWT.NE",
+ SMULWT_CS: "SMULWT.CS",
+ SMULWT_CC: "SMULWT.CC",
+ SMULWT_MI: "SMULWT.MI",
+ SMULWT_PL: "SMULWT.PL",
+ SMULWT_VS: "SMULWT.VS",
+ SMULWT_VC: "SMULWT.VC",
+ SMULWT_HI: "SMULWT.HI",
+ SMULWT_LS: "SMULWT.LS",
+ SMULWT_GE: "SMULWT.GE",
+ SMULWT_LT: "SMULWT.LT",
+ SMULWT_GT: "SMULWT.GT",
+ SMULWT_LE: "SMULWT.LE",
+ SMULWT: "SMULWT",
+ SMULWT_ZZ: "SMULWT.ZZ",
+ SMUSD_EQ: "SMUSD.EQ",
+ SMUSD_NE: "SMUSD.NE",
+ SMUSD_CS: "SMUSD.CS",
+ SMUSD_CC: "SMUSD.CC",
+ SMUSD_MI: "SMUSD.MI",
+ SMUSD_PL: "SMUSD.PL",
+ SMUSD_VS: "SMUSD.VS",
+ SMUSD_VC: "SMUSD.VC",
+ SMUSD_HI: "SMUSD.HI",
+ SMUSD_LS: "SMUSD.LS",
+ SMUSD_GE: "SMUSD.GE",
+ SMUSD_LT: "SMUSD.LT",
+ SMUSD_GT: "SMUSD.GT",
+ SMUSD_LE: "SMUSD.LE",
+ SMUSD: "SMUSD",
+ SMUSD_ZZ: "SMUSD.ZZ",
+ SMUSD_X_EQ: "SMUSD.X.EQ",
+ SMUSD_X_NE: "SMUSD.X.NE",
+ SMUSD_X_CS: "SMUSD.X.CS",
+ SMUSD_X_CC: "SMUSD.X.CC",
+ SMUSD_X_MI: "SMUSD.X.MI",
+ SMUSD_X_PL: "SMUSD.X.PL",
+ SMUSD_X_VS: "SMUSD.X.VS",
+ SMUSD_X_VC: "SMUSD.X.VC",
+ SMUSD_X_HI: "SMUSD.X.HI",
+ SMUSD_X_LS: "SMUSD.X.LS",
+ SMUSD_X_GE: "SMUSD.X.GE",
+ SMUSD_X_LT: "SMUSD.X.LT",
+ SMUSD_X_GT: "SMUSD.X.GT",
+ SMUSD_X_LE: "SMUSD.X.LE",
+ SMUSD_X: "SMUSD.X",
+ SMUSD_X_ZZ: "SMUSD.X.ZZ",
+ SSAT_EQ: "SSAT.EQ",
+ SSAT_NE: "SSAT.NE",
+ SSAT_CS: "SSAT.CS",
+ SSAT_CC: "SSAT.CC",
+ SSAT_MI: "SSAT.MI",
+ SSAT_PL: "SSAT.PL",
+ SSAT_VS: "SSAT.VS",
+ SSAT_VC: "SSAT.VC",
+ SSAT_HI: "SSAT.HI",
+ SSAT_LS: "SSAT.LS",
+ SSAT_GE: "SSAT.GE",
+ SSAT_LT: "SSAT.LT",
+ SSAT_GT: "SSAT.GT",
+ SSAT_LE: "SSAT.LE",
+ SSAT: "SSAT",
+ SSAT_ZZ: "SSAT.ZZ",
+ SSAT16_EQ: "SSAT16.EQ",
+ SSAT16_NE: "SSAT16.NE",
+ SSAT16_CS: "SSAT16.CS",
+ SSAT16_CC: "SSAT16.CC",
+ SSAT16_MI: "SSAT16.MI",
+ SSAT16_PL: "SSAT16.PL",
+ SSAT16_VS: "SSAT16.VS",
+ SSAT16_VC: "SSAT16.VC",
+ SSAT16_HI: "SSAT16.HI",
+ SSAT16_LS: "SSAT16.LS",
+ SSAT16_GE: "SSAT16.GE",
+ SSAT16_LT: "SSAT16.LT",
+ SSAT16_GT: "SSAT16.GT",
+ SSAT16_LE: "SSAT16.LE",
+ SSAT16: "SSAT16",
+ SSAT16_ZZ: "SSAT16.ZZ",
+ SSAX_EQ: "SSAX.EQ",
+ SSAX_NE: "SSAX.NE",
+ SSAX_CS: "SSAX.CS",
+ SSAX_CC: "SSAX.CC",
+ SSAX_MI: "SSAX.MI",
+ SSAX_PL: "SSAX.PL",
+ SSAX_VS: "SSAX.VS",
+ SSAX_VC: "SSAX.VC",
+ SSAX_HI: "SSAX.HI",
+ SSAX_LS: "SSAX.LS",
+ SSAX_GE: "SSAX.GE",
+ SSAX_LT: "SSAX.LT",
+ SSAX_GT: "SSAX.GT",
+ SSAX_LE: "SSAX.LE",
+ SSAX: "SSAX",
+ SSAX_ZZ: "SSAX.ZZ",
+ SSUB16_EQ: "SSUB16.EQ",
+ SSUB16_NE: "SSUB16.NE",
+ SSUB16_CS: "SSUB16.CS",
+ SSUB16_CC: "SSUB16.CC",
+ SSUB16_MI: "SSUB16.MI",
+ SSUB16_PL: "SSUB16.PL",
+ SSUB16_VS: "SSUB16.VS",
+ SSUB16_VC: "SSUB16.VC",
+ SSUB16_HI: "SSUB16.HI",
+ SSUB16_LS: "SSUB16.LS",
+ SSUB16_GE: "SSUB16.GE",
+ SSUB16_LT: "SSUB16.LT",
+ SSUB16_GT: "SSUB16.GT",
+ SSUB16_LE: "SSUB16.LE",
+ SSUB16: "SSUB16",
+ SSUB16_ZZ: "SSUB16.ZZ",
+ SSUB8_EQ: "SSUB8.EQ",
+ SSUB8_NE: "SSUB8.NE",
+ SSUB8_CS: "SSUB8.CS",
+ SSUB8_CC: "SSUB8.CC",
+ SSUB8_MI: "SSUB8.MI",
+ SSUB8_PL: "SSUB8.PL",
+ SSUB8_VS: "SSUB8.VS",
+ SSUB8_VC: "SSUB8.VC",
+ SSUB8_HI: "SSUB8.HI",
+ SSUB8_LS: "SSUB8.LS",
+ SSUB8_GE: "SSUB8.GE",
+ SSUB8_LT: "SSUB8.LT",
+ SSUB8_GT: "SSUB8.GT",
+ SSUB8_LE: "SSUB8.LE",
+ SSUB8: "SSUB8",
+ SSUB8_ZZ: "SSUB8.ZZ",
+ STM_EQ: "STM.EQ",
+ STM_NE: "STM.NE",
+ STM_CS: "STM.CS",
+ STM_CC: "STM.CC",
+ STM_MI: "STM.MI",
+ STM_PL: "STM.PL",
+ STM_VS: "STM.VS",
+ STM_VC: "STM.VC",
+ STM_HI: "STM.HI",
+ STM_LS: "STM.LS",
+ STM_GE: "STM.GE",
+ STM_LT: "STM.LT",
+ STM_GT: "STM.GT",
+ STM_LE: "STM.LE",
+ STM: "STM",
+ STM_ZZ: "STM.ZZ",
+ STMDA_EQ: "STMDA.EQ",
+ STMDA_NE: "STMDA.NE",
+ STMDA_CS: "STMDA.CS",
+ STMDA_CC: "STMDA.CC",
+ STMDA_MI: "STMDA.MI",
+ STMDA_PL: "STMDA.PL",
+ STMDA_VS: "STMDA.VS",
+ STMDA_VC: "STMDA.VC",
+ STMDA_HI: "STMDA.HI",
+ STMDA_LS: "STMDA.LS",
+ STMDA_GE: "STMDA.GE",
+ STMDA_LT: "STMDA.LT",
+ STMDA_GT: "STMDA.GT",
+ STMDA_LE: "STMDA.LE",
+ STMDA: "STMDA",
+ STMDA_ZZ: "STMDA.ZZ",
+ STMDB_EQ: "STMDB.EQ",
+ STMDB_NE: "STMDB.NE",
+ STMDB_CS: "STMDB.CS",
+ STMDB_CC: "STMDB.CC",
+ STMDB_MI: "STMDB.MI",
+ STMDB_PL: "STMDB.PL",
+ STMDB_VS: "STMDB.VS",
+ STMDB_VC: "STMDB.VC",
+ STMDB_HI: "STMDB.HI",
+ STMDB_LS: "STMDB.LS",
+ STMDB_GE: "STMDB.GE",
+ STMDB_LT: "STMDB.LT",
+ STMDB_GT: "STMDB.GT",
+ STMDB_LE: "STMDB.LE",
+ STMDB: "STMDB",
+ STMDB_ZZ: "STMDB.ZZ",
+ STMIB_EQ: "STMIB.EQ",
+ STMIB_NE: "STMIB.NE",
+ STMIB_CS: "STMIB.CS",
+ STMIB_CC: "STMIB.CC",
+ STMIB_MI: "STMIB.MI",
+ STMIB_PL: "STMIB.PL",
+ STMIB_VS: "STMIB.VS",
+ STMIB_VC: "STMIB.VC",
+ STMIB_HI: "STMIB.HI",
+ STMIB_LS: "STMIB.LS",
+ STMIB_GE: "STMIB.GE",
+ STMIB_LT: "STMIB.LT",
+ STMIB_GT: "STMIB.GT",
+ STMIB_LE: "STMIB.LE",
+ STMIB: "STMIB",
+ STMIB_ZZ: "STMIB.ZZ",
+ STR_EQ: "STR.EQ",
+ STR_NE: "STR.NE",
+ STR_CS: "STR.CS",
+ STR_CC: "STR.CC",
+ STR_MI: "STR.MI",
+ STR_PL: "STR.PL",
+ STR_VS: "STR.VS",
+ STR_VC: "STR.VC",
+ STR_HI: "STR.HI",
+ STR_LS: "STR.LS",
+ STR_GE: "STR.GE",
+ STR_LT: "STR.LT",
+ STR_GT: "STR.GT",
+ STR_LE: "STR.LE",
+ STR: "STR",
+ STR_ZZ: "STR.ZZ",
+ STRB_EQ: "STRB.EQ",
+ STRB_NE: "STRB.NE",
+ STRB_CS: "STRB.CS",
+ STRB_CC: "STRB.CC",
+ STRB_MI: "STRB.MI",
+ STRB_PL: "STRB.PL",
+ STRB_VS: "STRB.VS",
+ STRB_VC: "STRB.VC",
+ STRB_HI: "STRB.HI",
+ STRB_LS: "STRB.LS",
+ STRB_GE: "STRB.GE",
+ STRB_LT: "STRB.LT",
+ STRB_GT: "STRB.GT",
+ STRB_LE: "STRB.LE",
+ STRB: "STRB",
+ STRB_ZZ: "STRB.ZZ",
+ STRBT_EQ: "STRBT.EQ",
+ STRBT_NE: "STRBT.NE",
+ STRBT_CS: "STRBT.CS",
+ STRBT_CC: "STRBT.CC",
+ STRBT_MI: "STRBT.MI",
+ STRBT_PL: "STRBT.PL",
+ STRBT_VS: "STRBT.VS",
+ STRBT_VC: "STRBT.VC",
+ STRBT_HI: "STRBT.HI",
+ STRBT_LS: "STRBT.LS",
+ STRBT_GE: "STRBT.GE",
+ STRBT_LT: "STRBT.LT",
+ STRBT_GT: "STRBT.GT",
+ STRBT_LE: "STRBT.LE",
+ STRBT: "STRBT",
+ STRBT_ZZ: "STRBT.ZZ",
+ STRD_EQ: "STRD.EQ",
+ STRD_NE: "STRD.NE",
+ STRD_CS: "STRD.CS",
+ STRD_CC: "STRD.CC",
+ STRD_MI: "STRD.MI",
+ STRD_PL: "STRD.PL",
+ STRD_VS: "STRD.VS",
+ STRD_VC: "STRD.VC",
+ STRD_HI: "STRD.HI",
+ STRD_LS: "STRD.LS",
+ STRD_GE: "STRD.GE",
+ STRD_LT: "STRD.LT",
+ STRD_GT: "STRD.GT",
+ STRD_LE: "STRD.LE",
+ STRD: "STRD",
+ STRD_ZZ: "STRD.ZZ",
+ STREX_EQ: "STREX.EQ",
+ STREX_NE: "STREX.NE",
+ STREX_CS: "STREX.CS",
+ STREX_CC: "STREX.CC",
+ STREX_MI: "STREX.MI",
+ STREX_PL: "STREX.PL",
+ STREX_VS: "STREX.VS",
+ STREX_VC: "STREX.VC",
+ STREX_HI: "STREX.HI",
+ STREX_LS: "STREX.LS",
+ STREX_GE: "STREX.GE",
+ STREX_LT: "STREX.LT",
+ STREX_GT: "STREX.GT",
+ STREX_LE: "STREX.LE",
+ STREX: "STREX",
+ STREX_ZZ: "STREX.ZZ",
+ STREXB_EQ: "STREXB.EQ",
+ STREXB_NE: "STREXB.NE",
+ STREXB_CS: "STREXB.CS",
+ STREXB_CC: "STREXB.CC",
+ STREXB_MI: "STREXB.MI",
+ STREXB_PL: "STREXB.PL",
+ STREXB_VS: "STREXB.VS",
+ STREXB_VC: "STREXB.VC",
+ STREXB_HI: "STREXB.HI",
+ STREXB_LS: "STREXB.LS",
+ STREXB_GE: "STREXB.GE",
+ STREXB_LT: "STREXB.LT",
+ STREXB_GT: "STREXB.GT",
+ STREXB_LE: "STREXB.LE",
+ STREXB: "STREXB",
+ STREXB_ZZ: "STREXB.ZZ",
+ STREXD_EQ: "STREXD.EQ",
+ STREXD_NE: "STREXD.NE",
+ STREXD_CS: "STREXD.CS",
+ STREXD_CC: "STREXD.CC",
+ STREXD_MI: "STREXD.MI",
+ STREXD_PL: "STREXD.PL",
+ STREXD_VS: "STREXD.VS",
+ STREXD_VC: "STREXD.VC",
+ STREXD_HI: "STREXD.HI",
+ STREXD_LS: "STREXD.LS",
+ STREXD_GE: "STREXD.GE",
+ STREXD_LT: "STREXD.LT",
+ STREXD_GT: "STREXD.GT",
+ STREXD_LE: "STREXD.LE",
+ STREXD: "STREXD",
+ STREXD_ZZ: "STREXD.ZZ",
+ STREXH_EQ: "STREXH.EQ",
+ STREXH_NE: "STREXH.NE",
+ STREXH_CS: "STREXH.CS",
+ STREXH_CC: "STREXH.CC",
+ STREXH_MI: "STREXH.MI",
+ STREXH_PL: "STREXH.PL",
+ STREXH_VS: "STREXH.VS",
+ STREXH_VC: "STREXH.VC",
+ STREXH_HI: "STREXH.HI",
+ STREXH_LS: "STREXH.LS",
+ STREXH_GE: "STREXH.GE",
+ STREXH_LT: "STREXH.LT",
+ STREXH_GT: "STREXH.GT",
+ STREXH_LE: "STREXH.LE",
+ STREXH: "STREXH",
+ STREXH_ZZ: "STREXH.ZZ",
+ STRH_EQ: "STRH.EQ",
+ STRH_NE: "STRH.NE",
+ STRH_CS: "STRH.CS",
+ STRH_CC: "STRH.CC",
+ STRH_MI: "STRH.MI",
+ STRH_PL: "STRH.PL",
+ STRH_VS: "STRH.VS",
+ STRH_VC: "STRH.VC",
+ STRH_HI: "STRH.HI",
+ STRH_LS: "STRH.LS",
+ STRH_GE: "STRH.GE",
+ STRH_LT: "STRH.LT",
+ STRH_GT: "STRH.GT",
+ STRH_LE: "STRH.LE",
+ STRH: "STRH",
+ STRH_ZZ: "STRH.ZZ",
+ STRHT_EQ: "STRHT.EQ",
+ STRHT_NE: "STRHT.NE",
+ STRHT_CS: "STRHT.CS",
+ STRHT_CC: "STRHT.CC",
+ STRHT_MI: "STRHT.MI",
+ STRHT_PL: "STRHT.PL",
+ STRHT_VS: "STRHT.VS",
+ STRHT_VC: "STRHT.VC",
+ STRHT_HI: "STRHT.HI",
+ STRHT_LS: "STRHT.LS",
+ STRHT_GE: "STRHT.GE",
+ STRHT_LT: "STRHT.LT",
+ STRHT_GT: "STRHT.GT",
+ STRHT_LE: "STRHT.LE",
+ STRHT: "STRHT",
+ STRHT_ZZ: "STRHT.ZZ",
+ STRT_EQ: "STRT.EQ",
+ STRT_NE: "STRT.NE",
+ STRT_CS: "STRT.CS",
+ STRT_CC: "STRT.CC",
+ STRT_MI: "STRT.MI",
+ STRT_PL: "STRT.PL",
+ STRT_VS: "STRT.VS",
+ STRT_VC: "STRT.VC",
+ STRT_HI: "STRT.HI",
+ STRT_LS: "STRT.LS",
+ STRT_GE: "STRT.GE",
+ STRT_LT: "STRT.LT",
+ STRT_GT: "STRT.GT",
+ STRT_LE: "STRT.LE",
+ STRT: "STRT",
+ STRT_ZZ: "STRT.ZZ",
+ SUB_EQ: "SUB.EQ",
+ SUB_NE: "SUB.NE",
+ SUB_CS: "SUB.CS",
+ SUB_CC: "SUB.CC",
+ SUB_MI: "SUB.MI",
+ SUB_PL: "SUB.PL",
+ SUB_VS: "SUB.VS",
+ SUB_VC: "SUB.VC",
+ SUB_HI: "SUB.HI",
+ SUB_LS: "SUB.LS",
+ SUB_GE: "SUB.GE",
+ SUB_LT: "SUB.LT",
+ SUB_GT: "SUB.GT",
+ SUB_LE: "SUB.LE",
+ SUB: "SUB",
+ SUB_ZZ: "SUB.ZZ",
+ SUB_S_EQ: "SUB.S.EQ",
+ SUB_S_NE: "SUB.S.NE",
+ SUB_S_CS: "SUB.S.CS",
+ SUB_S_CC: "SUB.S.CC",
+ SUB_S_MI: "SUB.S.MI",
+ SUB_S_PL: "SUB.S.PL",
+ SUB_S_VS: "SUB.S.VS",
+ SUB_S_VC: "SUB.S.VC",
+ SUB_S_HI: "SUB.S.HI",
+ SUB_S_LS: "SUB.S.LS",
+ SUB_S_GE: "SUB.S.GE",
+ SUB_S_LT: "SUB.S.LT",
+ SUB_S_GT: "SUB.S.GT",
+ SUB_S_LE: "SUB.S.LE",
+ SUB_S: "SUB.S",
+ SUB_S_ZZ: "SUB.S.ZZ",
+ SVC_EQ: "SVC.EQ",
+ SVC_NE: "SVC.NE",
+ SVC_CS: "SVC.CS",
+ SVC_CC: "SVC.CC",
+ SVC_MI: "SVC.MI",
+ SVC_PL: "SVC.PL",
+ SVC_VS: "SVC.VS",
+ SVC_VC: "SVC.VC",
+ SVC_HI: "SVC.HI",
+ SVC_LS: "SVC.LS",
+ SVC_GE: "SVC.GE",
+ SVC_LT: "SVC.LT",
+ SVC_GT: "SVC.GT",
+ SVC_LE: "SVC.LE",
+ SVC: "SVC",
+ SVC_ZZ: "SVC.ZZ",
+ SWP_EQ: "SWP.EQ",
+ SWP_NE: "SWP.NE",
+ SWP_CS: "SWP.CS",
+ SWP_CC: "SWP.CC",
+ SWP_MI: "SWP.MI",
+ SWP_PL: "SWP.PL",
+ SWP_VS: "SWP.VS",
+ SWP_VC: "SWP.VC",
+ SWP_HI: "SWP.HI",
+ SWP_LS: "SWP.LS",
+ SWP_GE: "SWP.GE",
+ SWP_LT: "SWP.LT",
+ SWP_GT: "SWP.GT",
+ SWP_LE: "SWP.LE",
+ SWP: "SWP",
+ SWP_ZZ: "SWP.ZZ",
+ SWP_B_EQ: "SWP.B.EQ",
+ SWP_B_NE: "SWP.B.NE",
+ SWP_B_CS: "SWP.B.CS",
+ SWP_B_CC: "SWP.B.CC",
+ SWP_B_MI: "SWP.B.MI",
+ SWP_B_PL: "SWP.B.PL",
+ SWP_B_VS: "SWP.B.VS",
+ SWP_B_VC: "SWP.B.VC",
+ SWP_B_HI: "SWP.B.HI",
+ SWP_B_LS: "SWP.B.LS",
+ SWP_B_GE: "SWP.B.GE",
+ SWP_B_LT: "SWP.B.LT",
+ SWP_B_GT: "SWP.B.GT",
+ SWP_B_LE: "SWP.B.LE",
+ SWP_B: "SWP.B",
+ SWP_B_ZZ: "SWP.B.ZZ",
+ SXTAB_EQ: "SXTAB.EQ",
+ SXTAB_NE: "SXTAB.NE",
+ SXTAB_CS: "SXTAB.CS",
+ SXTAB_CC: "SXTAB.CC",
+ SXTAB_MI: "SXTAB.MI",
+ SXTAB_PL: "SXTAB.PL",
+ SXTAB_VS: "SXTAB.VS",
+ SXTAB_VC: "SXTAB.VC",
+ SXTAB_HI: "SXTAB.HI",
+ SXTAB_LS: "SXTAB.LS",
+ SXTAB_GE: "SXTAB.GE",
+ SXTAB_LT: "SXTAB.LT",
+ SXTAB_GT: "SXTAB.GT",
+ SXTAB_LE: "SXTAB.LE",
+ SXTAB: "SXTAB",
+ SXTAB_ZZ: "SXTAB.ZZ",
+ SXTAB16_EQ: "SXTAB16.EQ",
+ SXTAB16_NE: "SXTAB16.NE",
+ SXTAB16_CS: "SXTAB16.CS",
+ SXTAB16_CC: "SXTAB16.CC",
+ SXTAB16_MI: "SXTAB16.MI",
+ SXTAB16_PL: "SXTAB16.PL",
+ SXTAB16_VS: "SXTAB16.VS",
+ SXTAB16_VC: "SXTAB16.VC",
+ SXTAB16_HI: "SXTAB16.HI",
+ SXTAB16_LS: "SXTAB16.LS",
+ SXTAB16_GE: "SXTAB16.GE",
+ SXTAB16_LT: "SXTAB16.LT",
+ SXTAB16_GT: "SXTAB16.GT",
+ SXTAB16_LE: "SXTAB16.LE",
+ SXTAB16: "SXTAB16",
+ SXTAB16_ZZ: "SXTAB16.ZZ",
+ SXTAH_EQ: "SXTAH.EQ",
+ SXTAH_NE: "SXTAH.NE",
+ SXTAH_CS: "SXTAH.CS",
+ SXTAH_CC: "SXTAH.CC",
+ SXTAH_MI: "SXTAH.MI",
+ SXTAH_PL: "SXTAH.PL",
+ SXTAH_VS: "SXTAH.VS",
+ SXTAH_VC: "SXTAH.VC",
+ SXTAH_HI: "SXTAH.HI",
+ SXTAH_LS: "SXTAH.LS",
+ SXTAH_GE: "SXTAH.GE",
+ SXTAH_LT: "SXTAH.LT",
+ SXTAH_GT: "SXTAH.GT",
+ SXTAH_LE: "SXTAH.LE",
+ SXTAH: "SXTAH",
+ SXTAH_ZZ: "SXTAH.ZZ",
+ SXTB_EQ: "SXTB.EQ",
+ SXTB_NE: "SXTB.NE",
+ SXTB_CS: "SXTB.CS",
+ SXTB_CC: "SXTB.CC",
+ SXTB_MI: "SXTB.MI",
+ SXTB_PL: "SXTB.PL",
+ SXTB_VS: "SXTB.VS",
+ SXTB_VC: "SXTB.VC",
+ SXTB_HI: "SXTB.HI",
+ SXTB_LS: "SXTB.LS",
+ SXTB_GE: "SXTB.GE",
+ SXTB_LT: "SXTB.LT",
+ SXTB_GT: "SXTB.GT",
+ SXTB_LE: "SXTB.LE",
+ SXTB: "SXTB",
+ SXTB_ZZ: "SXTB.ZZ",
+ SXTB16_EQ: "SXTB16.EQ",
+ SXTB16_NE: "SXTB16.NE",
+ SXTB16_CS: "SXTB16.CS",
+ SXTB16_CC: "SXTB16.CC",
+ SXTB16_MI: "SXTB16.MI",
+ SXTB16_PL: "SXTB16.PL",
+ SXTB16_VS: "SXTB16.VS",
+ SXTB16_VC: "SXTB16.VC",
+ SXTB16_HI: "SXTB16.HI",
+ SXTB16_LS: "SXTB16.LS",
+ SXTB16_GE: "SXTB16.GE",
+ SXTB16_LT: "SXTB16.LT",
+ SXTB16_GT: "SXTB16.GT",
+ SXTB16_LE: "SXTB16.LE",
+ SXTB16: "SXTB16",
+ SXTB16_ZZ: "SXTB16.ZZ",
+ SXTH_EQ: "SXTH.EQ",
+ SXTH_NE: "SXTH.NE",
+ SXTH_CS: "SXTH.CS",
+ SXTH_CC: "SXTH.CC",
+ SXTH_MI: "SXTH.MI",
+ SXTH_PL: "SXTH.PL",
+ SXTH_VS: "SXTH.VS",
+ SXTH_VC: "SXTH.VC",
+ SXTH_HI: "SXTH.HI",
+ SXTH_LS: "SXTH.LS",
+ SXTH_GE: "SXTH.GE",
+ SXTH_LT: "SXTH.LT",
+ SXTH_GT: "SXTH.GT",
+ SXTH_LE: "SXTH.LE",
+ SXTH: "SXTH",
+ SXTH_ZZ: "SXTH.ZZ",
+ TEQ_EQ: "TEQ.EQ",
+ TEQ_NE: "TEQ.NE",
+ TEQ_CS: "TEQ.CS",
+ TEQ_CC: "TEQ.CC",
+ TEQ_MI: "TEQ.MI",
+ TEQ_PL: "TEQ.PL",
+ TEQ_VS: "TEQ.VS",
+ TEQ_VC: "TEQ.VC",
+ TEQ_HI: "TEQ.HI",
+ TEQ_LS: "TEQ.LS",
+ TEQ_GE: "TEQ.GE",
+ TEQ_LT: "TEQ.LT",
+ TEQ_GT: "TEQ.GT",
+ TEQ_LE: "TEQ.LE",
+ TEQ: "TEQ",
+ TEQ_ZZ: "TEQ.ZZ",
+ TST_EQ: "TST.EQ",
+ TST_NE: "TST.NE",
+ TST_CS: "TST.CS",
+ TST_CC: "TST.CC",
+ TST_MI: "TST.MI",
+ TST_PL: "TST.PL",
+ TST_VS: "TST.VS",
+ TST_VC: "TST.VC",
+ TST_HI: "TST.HI",
+ TST_LS: "TST.LS",
+ TST_GE: "TST.GE",
+ TST_LT: "TST.LT",
+ TST_GT: "TST.GT",
+ TST_LE: "TST.LE",
+ TST: "TST",
+ TST_ZZ: "TST.ZZ",
+ UADD16_EQ: "UADD16.EQ",
+ UADD16_NE: "UADD16.NE",
+ UADD16_CS: "UADD16.CS",
+ UADD16_CC: "UADD16.CC",
+ UADD16_MI: "UADD16.MI",
+ UADD16_PL: "UADD16.PL",
+ UADD16_VS: "UADD16.VS",
+ UADD16_VC: "UADD16.VC",
+ UADD16_HI: "UADD16.HI",
+ UADD16_LS: "UADD16.LS",
+ UADD16_GE: "UADD16.GE",
+ UADD16_LT: "UADD16.LT",
+ UADD16_GT: "UADD16.GT",
+ UADD16_LE: "UADD16.LE",
+ UADD16: "UADD16",
+ UADD16_ZZ: "UADD16.ZZ",
+ UADD8_EQ: "UADD8.EQ",
+ UADD8_NE: "UADD8.NE",
+ UADD8_CS: "UADD8.CS",
+ UADD8_CC: "UADD8.CC",
+ UADD8_MI: "UADD8.MI",
+ UADD8_PL: "UADD8.PL",
+ UADD8_VS: "UADD8.VS",
+ UADD8_VC: "UADD8.VC",
+ UADD8_HI: "UADD8.HI",
+ UADD8_LS: "UADD8.LS",
+ UADD8_GE: "UADD8.GE",
+ UADD8_LT: "UADD8.LT",
+ UADD8_GT: "UADD8.GT",
+ UADD8_LE: "UADD8.LE",
+ UADD8: "UADD8",
+ UADD8_ZZ: "UADD8.ZZ",
+ UASX_EQ: "UASX.EQ",
+ UASX_NE: "UASX.NE",
+ UASX_CS: "UASX.CS",
+ UASX_CC: "UASX.CC",
+ UASX_MI: "UASX.MI",
+ UASX_PL: "UASX.PL",
+ UASX_VS: "UASX.VS",
+ UASX_VC: "UASX.VC",
+ UASX_HI: "UASX.HI",
+ UASX_LS: "UASX.LS",
+ UASX_GE: "UASX.GE",
+ UASX_LT: "UASX.LT",
+ UASX_GT: "UASX.GT",
+ UASX_LE: "UASX.LE",
+ UASX: "UASX",
+ UASX_ZZ: "UASX.ZZ",
+ UBFX_EQ: "UBFX.EQ",
+ UBFX_NE: "UBFX.NE",
+ UBFX_CS: "UBFX.CS",
+ UBFX_CC: "UBFX.CC",
+ UBFX_MI: "UBFX.MI",
+ UBFX_PL: "UBFX.PL",
+ UBFX_VS: "UBFX.VS",
+ UBFX_VC: "UBFX.VC",
+ UBFX_HI: "UBFX.HI",
+ UBFX_LS: "UBFX.LS",
+ UBFX_GE: "UBFX.GE",
+ UBFX_LT: "UBFX.LT",
+ UBFX_GT: "UBFX.GT",
+ UBFX_LE: "UBFX.LE",
+ UBFX: "UBFX",
+ UBFX_ZZ: "UBFX.ZZ",
+ UHADD16_EQ: "UHADD16.EQ",
+ UHADD16_NE: "UHADD16.NE",
+ UHADD16_CS: "UHADD16.CS",
+ UHADD16_CC: "UHADD16.CC",
+ UHADD16_MI: "UHADD16.MI",
+ UHADD16_PL: "UHADD16.PL",
+ UHADD16_VS: "UHADD16.VS",
+ UHADD16_VC: "UHADD16.VC",
+ UHADD16_HI: "UHADD16.HI",
+ UHADD16_LS: "UHADD16.LS",
+ UHADD16_GE: "UHADD16.GE",
+ UHADD16_LT: "UHADD16.LT",
+ UHADD16_GT: "UHADD16.GT",
+ UHADD16_LE: "UHADD16.LE",
+ UHADD16: "UHADD16",
+ UHADD16_ZZ: "UHADD16.ZZ",
+ UHADD8_EQ: "UHADD8.EQ",
+ UHADD8_NE: "UHADD8.NE",
+ UHADD8_CS: "UHADD8.CS",
+ UHADD8_CC: "UHADD8.CC",
+ UHADD8_MI: "UHADD8.MI",
+ UHADD8_PL: "UHADD8.PL",
+ UHADD8_VS: "UHADD8.VS",
+ UHADD8_VC: "UHADD8.VC",
+ UHADD8_HI: "UHADD8.HI",
+ UHADD8_LS: "UHADD8.LS",
+ UHADD8_GE: "UHADD8.GE",
+ UHADD8_LT: "UHADD8.LT",
+ UHADD8_GT: "UHADD8.GT",
+ UHADD8_LE: "UHADD8.LE",
+ UHADD8: "UHADD8",
+ UHADD8_ZZ: "UHADD8.ZZ",
+ UHASX_EQ: "UHASX.EQ",
+ UHASX_NE: "UHASX.NE",
+ UHASX_CS: "UHASX.CS",
+ UHASX_CC: "UHASX.CC",
+ UHASX_MI: "UHASX.MI",
+ UHASX_PL: "UHASX.PL",
+ UHASX_VS: "UHASX.VS",
+ UHASX_VC: "UHASX.VC",
+ UHASX_HI: "UHASX.HI",
+ UHASX_LS: "UHASX.LS",
+ UHASX_GE: "UHASX.GE",
+ UHASX_LT: "UHASX.LT",
+ UHASX_GT: "UHASX.GT",
+ UHASX_LE: "UHASX.LE",
+ UHASX: "UHASX",
+ UHASX_ZZ: "UHASX.ZZ",
+ UHSAX_EQ: "UHSAX.EQ",
+ UHSAX_NE: "UHSAX.NE",
+ UHSAX_CS: "UHSAX.CS",
+ UHSAX_CC: "UHSAX.CC",
+ UHSAX_MI: "UHSAX.MI",
+ UHSAX_PL: "UHSAX.PL",
+ UHSAX_VS: "UHSAX.VS",
+ UHSAX_VC: "UHSAX.VC",
+ UHSAX_HI: "UHSAX.HI",
+ UHSAX_LS: "UHSAX.LS",
+ UHSAX_GE: "UHSAX.GE",
+ UHSAX_LT: "UHSAX.LT",
+ UHSAX_GT: "UHSAX.GT",
+ UHSAX_LE: "UHSAX.LE",
+ UHSAX: "UHSAX",
+ UHSAX_ZZ: "UHSAX.ZZ",
+ UHSUB16_EQ: "UHSUB16.EQ",
+ UHSUB16_NE: "UHSUB16.NE",
+ UHSUB16_CS: "UHSUB16.CS",
+ UHSUB16_CC: "UHSUB16.CC",
+ UHSUB16_MI: "UHSUB16.MI",
+ UHSUB16_PL: "UHSUB16.PL",
+ UHSUB16_VS: "UHSUB16.VS",
+ UHSUB16_VC: "UHSUB16.VC",
+ UHSUB16_HI: "UHSUB16.HI",
+ UHSUB16_LS: "UHSUB16.LS",
+ UHSUB16_GE: "UHSUB16.GE",
+ UHSUB16_LT: "UHSUB16.LT",
+ UHSUB16_GT: "UHSUB16.GT",
+ UHSUB16_LE: "UHSUB16.LE",
+ UHSUB16: "UHSUB16",
+ UHSUB16_ZZ: "UHSUB16.ZZ",
+ UHSUB8_EQ: "UHSUB8.EQ",
+ UHSUB8_NE: "UHSUB8.NE",
+ UHSUB8_CS: "UHSUB8.CS",
+ UHSUB8_CC: "UHSUB8.CC",
+ UHSUB8_MI: "UHSUB8.MI",
+ UHSUB8_PL: "UHSUB8.PL",
+ UHSUB8_VS: "UHSUB8.VS",
+ UHSUB8_VC: "UHSUB8.VC",
+ UHSUB8_HI: "UHSUB8.HI",
+ UHSUB8_LS: "UHSUB8.LS",
+ UHSUB8_GE: "UHSUB8.GE",
+ UHSUB8_LT: "UHSUB8.LT",
+ UHSUB8_GT: "UHSUB8.GT",
+ UHSUB8_LE: "UHSUB8.LE",
+ UHSUB8: "UHSUB8",
+ UHSUB8_ZZ: "UHSUB8.ZZ",
+ UMAAL_EQ: "UMAAL.EQ",
+ UMAAL_NE: "UMAAL.NE",
+ UMAAL_CS: "UMAAL.CS",
+ UMAAL_CC: "UMAAL.CC",
+ UMAAL_MI: "UMAAL.MI",
+ UMAAL_PL: "UMAAL.PL",
+ UMAAL_VS: "UMAAL.VS",
+ UMAAL_VC: "UMAAL.VC",
+ UMAAL_HI: "UMAAL.HI",
+ UMAAL_LS: "UMAAL.LS",
+ UMAAL_GE: "UMAAL.GE",
+ UMAAL_LT: "UMAAL.LT",
+ UMAAL_GT: "UMAAL.GT",
+ UMAAL_LE: "UMAAL.LE",
+ UMAAL: "UMAAL",
+ UMAAL_ZZ: "UMAAL.ZZ",
+ UMLAL_EQ: "UMLAL.EQ",
+ UMLAL_NE: "UMLAL.NE",
+ UMLAL_CS: "UMLAL.CS",
+ UMLAL_CC: "UMLAL.CC",
+ UMLAL_MI: "UMLAL.MI",
+ UMLAL_PL: "UMLAL.PL",
+ UMLAL_VS: "UMLAL.VS",
+ UMLAL_VC: "UMLAL.VC",
+ UMLAL_HI: "UMLAL.HI",
+ UMLAL_LS: "UMLAL.LS",
+ UMLAL_GE: "UMLAL.GE",
+ UMLAL_LT: "UMLAL.LT",
+ UMLAL_GT: "UMLAL.GT",
+ UMLAL_LE: "UMLAL.LE",
+ UMLAL: "UMLAL",
+ UMLAL_ZZ: "UMLAL.ZZ",
+ UMLAL_S_EQ: "UMLAL.S.EQ",
+ UMLAL_S_NE: "UMLAL.S.NE",
+ UMLAL_S_CS: "UMLAL.S.CS",
+ UMLAL_S_CC: "UMLAL.S.CC",
+ UMLAL_S_MI: "UMLAL.S.MI",
+ UMLAL_S_PL: "UMLAL.S.PL",
+ UMLAL_S_VS: "UMLAL.S.VS",
+ UMLAL_S_VC: "UMLAL.S.VC",
+ UMLAL_S_HI: "UMLAL.S.HI",
+ UMLAL_S_LS: "UMLAL.S.LS",
+ UMLAL_S_GE: "UMLAL.S.GE",
+ UMLAL_S_LT: "UMLAL.S.LT",
+ UMLAL_S_GT: "UMLAL.S.GT",
+ UMLAL_S_LE: "UMLAL.S.LE",
+ UMLAL_S: "UMLAL.S",
+ UMLAL_S_ZZ: "UMLAL.S.ZZ",
+ UMULL_EQ: "UMULL.EQ",
+ UMULL_NE: "UMULL.NE",
+ UMULL_CS: "UMULL.CS",
+ UMULL_CC: "UMULL.CC",
+ UMULL_MI: "UMULL.MI",
+ UMULL_PL: "UMULL.PL",
+ UMULL_VS: "UMULL.VS",
+ UMULL_VC: "UMULL.VC",
+ UMULL_HI: "UMULL.HI",
+ UMULL_LS: "UMULL.LS",
+ UMULL_GE: "UMULL.GE",
+ UMULL_LT: "UMULL.LT",
+ UMULL_GT: "UMULL.GT",
+ UMULL_LE: "UMULL.LE",
+ UMULL: "UMULL",
+ UMULL_ZZ: "UMULL.ZZ",
+ UMULL_S_EQ: "UMULL.S.EQ",
+ UMULL_S_NE: "UMULL.S.NE",
+ UMULL_S_CS: "UMULL.S.CS",
+ UMULL_S_CC: "UMULL.S.CC",
+ UMULL_S_MI: "UMULL.S.MI",
+ UMULL_S_PL: "UMULL.S.PL",
+ UMULL_S_VS: "UMULL.S.VS",
+ UMULL_S_VC: "UMULL.S.VC",
+ UMULL_S_HI: "UMULL.S.HI",
+ UMULL_S_LS: "UMULL.S.LS",
+ UMULL_S_GE: "UMULL.S.GE",
+ UMULL_S_LT: "UMULL.S.LT",
+ UMULL_S_GT: "UMULL.S.GT",
+ UMULL_S_LE: "UMULL.S.LE",
+ UMULL_S: "UMULL.S",
+ UMULL_S_ZZ: "UMULL.S.ZZ",
+ UNDEF: "UNDEF",
+ UQADD16_EQ: "UQADD16.EQ",
+ UQADD16_NE: "UQADD16.NE",
+ UQADD16_CS: "UQADD16.CS",
+ UQADD16_CC: "UQADD16.CC",
+ UQADD16_MI: "UQADD16.MI",
+ UQADD16_PL: "UQADD16.PL",
+ UQADD16_VS: "UQADD16.VS",
+ UQADD16_VC: "UQADD16.VC",
+ UQADD16_HI: "UQADD16.HI",
+ UQADD16_LS: "UQADD16.LS",
+ UQADD16_GE: "UQADD16.GE",
+ UQADD16_LT: "UQADD16.LT",
+ UQADD16_GT: "UQADD16.GT",
+ UQADD16_LE: "UQADD16.LE",
+ UQADD16: "UQADD16",
+ UQADD16_ZZ: "UQADD16.ZZ",
+ UQADD8_EQ: "UQADD8.EQ",
+ UQADD8_NE: "UQADD8.NE",
+ UQADD8_CS: "UQADD8.CS",
+ UQADD8_CC: "UQADD8.CC",
+ UQADD8_MI: "UQADD8.MI",
+ UQADD8_PL: "UQADD8.PL",
+ UQADD8_VS: "UQADD8.VS",
+ UQADD8_VC: "UQADD8.VC",
+ UQADD8_HI: "UQADD8.HI",
+ UQADD8_LS: "UQADD8.LS",
+ UQADD8_GE: "UQADD8.GE",
+ UQADD8_LT: "UQADD8.LT",
+ UQADD8_GT: "UQADD8.GT",
+ UQADD8_LE: "UQADD8.LE",
+ UQADD8: "UQADD8",
+ UQADD8_ZZ: "UQADD8.ZZ",
+ UQASX_EQ: "UQASX.EQ",
+ UQASX_NE: "UQASX.NE",
+ UQASX_CS: "UQASX.CS",
+ UQASX_CC: "UQASX.CC",
+ UQASX_MI: "UQASX.MI",
+ UQASX_PL: "UQASX.PL",
+ UQASX_VS: "UQASX.VS",
+ UQASX_VC: "UQASX.VC",
+ UQASX_HI: "UQASX.HI",
+ UQASX_LS: "UQASX.LS",
+ UQASX_GE: "UQASX.GE",
+ UQASX_LT: "UQASX.LT",
+ UQASX_GT: "UQASX.GT",
+ UQASX_LE: "UQASX.LE",
+ UQASX: "UQASX",
+ UQASX_ZZ: "UQASX.ZZ",
+ UQSAX_EQ: "UQSAX.EQ",
+ UQSAX_NE: "UQSAX.NE",
+ UQSAX_CS: "UQSAX.CS",
+ UQSAX_CC: "UQSAX.CC",
+ UQSAX_MI: "UQSAX.MI",
+ UQSAX_PL: "UQSAX.PL",
+ UQSAX_VS: "UQSAX.VS",
+ UQSAX_VC: "UQSAX.VC",
+ UQSAX_HI: "UQSAX.HI",
+ UQSAX_LS: "UQSAX.LS",
+ UQSAX_GE: "UQSAX.GE",
+ UQSAX_LT: "UQSAX.LT",
+ UQSAX_GT: "UQSAX.GT",
+ UQSAX_LE: "UQSAX.LE",
+ UQSAX: "UQSAX",
+ UQSAX_ZZ: "UQSAX.ZZ",
+ UQSUB16_EQ: "UQSUB16.EQ",
+ UQSUB16_NE: "UQSUB16.NE",
+ UQSUB16_CS: "UQSUB16.CS",
+ UQSUB16_CC: "UQSUB16.CC",
+ UQSUB16_MI: "UQSUB16.MI",
+ UQSUB16_PL: "UQSUB16.PL",
+ UQSUB16_VS: "UQSUB16.VS",
+ UQSUB16_VC: "UQSUB16.VC",
+ UQSUB16_HI: "UQSUB16.HI",
+ UQSUB16_LS: "UQSUB16.LS",
+ UQSUB16_GE: "UQSUB16.GE",
+ UQSUB16_LT: "UQSUB16.LT",
+ UQSUB16_GT: "UQSUB16.GT",
+ UQSUB16_LE: "UQSUB16.LE",
+ UQSUB16: "UQSUB16",
+ UQSUB16_ZZ: "UQSUB16.ZZ",
+ UQSUB8_EQ: "UQSUB8.EQ",
+ UQSUB8_NE: "UQSUB8.NE",
+ UQSUB8_CS: "UQSUB8.CS",
+ UQSUB8_CC: "UQSUB8.CC",
+ UQSUB8_MI: "UQSUB8.MI",
+ UQSUB8_PL: "UQSUB8.PL",
+ UQSUB8_VS: "UQSUB8.VS",
+ UQSUB8_VC: "UQSUB8.VC",
+ UQSUB8_HI: "UQSUB8.HI",
+ UQSUB8_LS: "UQSUB8.LS",
+ UQSUB8_GE: "UQSUB8.GE",
+ UQSUB8_LT: "UQSUB8.LT",
+ UQSUB8_GT: "UQSUB8.GT",
+ UQSUB8_LE: "UQSUB8.LE",
+ UQSUB8: "UQSUB8",
+ UQSUB8_ZZ: "UQSUB8.ZZ",
+ USAD8_EQ: "USAD8.EQ",
+ USAD8_NE: "USAD8.NE",
+ USAD8_CS: "USAD8.CS",
+ USAD8_CC: "USAD8.CC",
+ USAD8_MI: "USAD8.MI",
+ USAD8_PL: "USAD8.PL",
+ USAD8_VS: "USAD8.VS",
+ USAD8_VC: "USAD8.VC",
+ USAD8_HI: "USAD8.HI",
+ USAD8_LS: "USAD8.LS",
+ USAD8_GE: "USAD8.GE",
+ USAD8_LT: "USAD8.LT",
+ USAD8_GT: "USAD8.GT",
+ USAD8_LE: "USAD8.LE",
+ USAD8: "USAD8",
+ USAD8_ZZ: "USAD8.ZZ",
+ USADA8_EQ: "USADA8.EQ",
+ USADA8_NE: "USADA8.NE",
+ USADA8_CS: "USADA8.CS",
+ USADA8_CC: "USADA8.CC",
+ USADA8_MI: "USADA8.MI",
+ USADA8_PL: "USADA8.PL",
+ USADA8_VS: "USADA8.VS",
+ USADA8_VC: "USADA8.VC",
+ USADA8_HI: "USADA8.HI",
+ USADA8_LS: "USADA8.LS",
+ USADA8_GE: "USADA8.GE",
+ USADA8_LT: "USADA8.LT",
+ USADA8_GT: "USADA8.GT",
+ USADA8_LE: "USADA8.LE",
+ USADA8: "USADA8",
+ USADA8_ZZ: "USADA8.ZZ",
+ USAT_EQ: "USAT.EQ",
+ USAT_NE: "USAT.NE",
+ USAT_CS: "USAT.CS",
+ USAT_CC: "USAT.CC",
+ USAT_MI: "USAT.MI",
+ USAT_PL: "USAT.PL",
+ USAT_VS: "USAT.VS",
+ USAT_VC: "USAT.VC",
+ USAT_HI: "USAT.HI",
+ USAT_LS: "USAT.LS",
+ USAT_GE: "USAT.GE",
+ USAT_LT: "USAT.LT",
+ USAT_GT: "USAT.GT",
+ USAT_LE: "USAT.LE",
+ USAT: "USAT",
+ USAT_ZZ: "USAT.ZZ",
+ USAT16_EQ: "USAT16.EQ",
+ USAT16_NE: "USAT16.NE",
+ USAT16_CS: "USAT16.CS",
+ USAT16_CC: "USAT16.CC",
+ USAT16_MI: "USAT16.MI",
+ USAT16_PL: "USAT16.PL",
+ USAT16_VS: "USAT16.VS",
+ USAT16_VC: "USAT16.VC",
+ USAT16_HI: "USAT16.HI",
+ USAT16_LS: "USAT16.LS",
+ USAT16_GE: "USAT16.GE",
+ USAT16_LT: "USAT16.LT",
+ USAT16_GT: "USAT16.GT",
+ USAT16_LE: "USAT16.LE",
+ USAT16: "USAT16",
+ USAT16_ZZ: "USAT16.ZZ",
+ USAX_EQ: "USAX.EQ",
+ USAX_NE: "USAX.NE",
+ USAX_CS: "USAX.CS",
+ USAX_CC: "USAX.CC",
+ USAX_MI: "USAX.MI",
+ USAX_PL: "USAX.PL",
+ USAX_VS: "USAX.VS",
+ USAX_VC: "USAX.VC",
+ USAX_HI: "USAX.HI",
+ USAX_LS: "USAX.LS",
+ USAX_GE: "USAX.GE",
+ USAX_LT: "USAX.LT",
+ USAX_GT: "USAX.GT",
+ USAX_LE: "USAX.LE",
+ USAX: "USAX",
+ USAX_ZZ: "USAX.ZZ",
+ USUB16_EQ: "USUB16.EQ",
+ USUB16_NE: "USUB16.NE",
+ USUB16_CS: "USUB16.CS",
+ USUB16_CC: "USUB16.CC",
+ USUB16_MI: "USUB16.MI",
+ USUB16_PL: "USUB16.PL",
+ USUB16_VS: "USUB16.VS",
+ USUB16_VC: "USUB16.VC",
+ USUB16_HI: "USUB16.HI",
+ USUB16_LS: "USUB16.LS",
+ USUB16_GE: "USUB16.GE",
+ USUB16_LT: "USUB16.LT",
+ USUB16_GT: "USUB16.GT",
+ USUB16_LE: "USUB16.LE",
+ USUB16: "USUB16",
+ USUB16_ZZ: "USUB16.ZZ",
+ USUB8_EQ: "USUB8.EQ",
+ USUB8_NE: "USUB8.NE",
+ USUB8_CS: "USUB8.CS",
+ USUB8_CC: "USUB8.CC",
+ USUB8_MI: "USUB8.MI",
+ USUB8_PL: "USUB8.PL",
+ USUB8_VS: "USUB8.VS",
+ USUB8_VC: "USUB8.VC",
+ USUB8_HI: "USUB8.HI",
+ USUB8_LS: "USUB8.LS",
+ USUB8_GE: "USUB8.GE",
+ USUB8_LT: "USUB8.LT",
+ USUB8_GT: "USUB8.GT",
+ USUB8_LE: "USUB8.LE",
+ USUB8: "USUB8",
+ USUB8_ZZ: "USUB8.ZZ",
+ UXTAB_EQ: "UXTAB.EQ",
+ UXTAB_NE: "UXTAB.NE",
+ UXTAB_CS: "UXTAB.CS",
+ UXTAB_CC: "UXTAB.CC",
+ UXTAB_MI: "UXTAB.MI",
+ UXTAB_PL: "UXTAB.PL",
+ UXTAB_VS: "UXTAB.VS",
+ UXTAB_VC: "UXTAB.VC",
+ UXTAB_HI: "UXTAB.HI",
+ UXTAB_LS: "UXTAB.LS",
+ UXTAB_GE: "UXTAB.GE",
+ UXTAB_LT: "UXTAB.LT",
+ UXTAB_GT: "UXTAB.GT",
+ UXTAB_LE: "UXTAB.LE",
+ UXTAB: "UXTAB",
+ UXTAB_ZZ: "UXTAB.ZZ",
+ UXTAB16_EQ: "UXTAB16.EQ",
+ UXTAB16_NE: "UXTAB16.NE",
+ UXTAB16_CS: "UXTAB16.CS",
+ UXTAB16_CC: "UXTAB16.CC",
+ UXTAB16_MI: "UXTAB16.MI",
+ UXTAB16_PL: "UXTAB16.PL",
+ UXTAB16_VS: "UXTAB16.VS",
+ UXTAB16_VC: "UXTAB16.VC",
+ UXTAB16_HI: "UXTAB16.HI",
+ UXTAB16_LS: "UXTAB16.LS",
+ UXTAB16_GE: "UXTAB16.GE",
+ UXTAB16_LT: "UXTAB16.LT",
+ UXTAB16_GT: "UXTAB16.GT",
+ UXTAB16_LE: "UXTAB16.LE",
+ UXTAB16: "UXTAB16",
+ UXTAB16_ZZ: "UXTAB16.ZZ",
+ UXTAH_EQ: "UXTAH.EQ",
+ UXTAH_NE: "UXTAH.NE",
+ UXTAH_CS: "UXTAH.CS",
+ UXTAH_CC: "UXTAH.CC",
+ UXTAH_MI: "UXTAH.MI",
+ UXTAH_PL: "UXTAH.PL",
+ UXTAH_VS: "UXTAH.VS",
+ UXTAH_VC: "UXTAH.VC",
+ UXTAH_HI: "UXTAH.HI",
+ UXTAH_LS: "UXTAH.LS",
+ UXTAH_GE: "UXTAH.GE",
+ UXTAH_LT: "UXTAH.LT",
+ UXTAH_GT: "UXTAH.GT",
+ UXTAH_LE: "UXTAH.LE",
+ UXTAH: "UXTAH",
+ UXTAH_ZZ: "UXTAH.ZZ",
+ UXTB_EQ: "UXTB.EQ",
+ UXTB_NE: "UXTB.NE",
+ UXTB_CS: "UXTB.CS",
+ UXTB_CC: "UXTB.CC",
+ UXTB_MI: "UXTB.MI",
+ UXTB_PL: "UXTB.PL",
+ UXTB_VS: "UXTB.VS",
+ UXTB_VC: "UXTB.VC",
+ UXTB_HI: "UXTB.HI",
+ UXTB_LS: "UXTB.LS",
+ UXTB_GE: "UXTB.GE",
+ UXTB_LT: "UXTB.LT",
+ UXTB_GT: "UXTB.GT",
+ UXTB_LE: "UXTB.LE",
+ UXTB: "UXTB",
+ UXTB_ZZ: "UXTB.ZZ",
+ UXTB16_EQ: "UXTB16.EQ",
+ UXTB16_NE: "UXTB16.NE",
+ UXTB16_CS: "UXTB16.CS",
+ UXTB16_CC: "UXTB16.CC",
+ UXTB16_MI: "UXTB16.MI",
+ UXTB16_PL: "UXTB16.PL",
+ UXTB16_VS: "UXTB16.VS",
+ UXTB16_VC: "UXTB16.VC",
+ UXTB16_HI: "UXTB16.HI",
+ UXTB16_LS: "UXTB16.LS",
+ UXTB16_GE: "UXTB16.GE",
+ UXTB16_LT: "UXTB16.LT",
+ UXTB16_GT: "UXTB16.GT",
+ UXTB16_LE: "UXTB16.LE",
+ UXTB16: "UXTB16",
+ UXTB16_ZZ: "UXTB16.ZZ",
+ UXTH_EQ: "UXTH.EQ",
+ UXTH_NE: "UXTH.NE",
+ UXTH_CS: "UXTH.CS",
+ UXTH_CC: "UXTH.CC",
+ UXTH_MI: "UXTH.MI",
+ UXTH_PL: "UXTH.PL",
+ UXTH_VS: "UXTH.VS",
+ UXTH_VC: "UXTH.VC",
+ UXTH_HI: "UXTH.HI",
+ UXTH_LS: "UXTH.LS",
+ UXTH_GE: "UXTH.GE",
+ UXTH_LT: "UXTH.LT",
+ UXTH_GT: "UXTH.GT",
+ UXTH_LE: "UXTH.LE",
+ UXTH: "UXTH",
+ UXTH_ZZ: "UXTH.ZZ",
+ VABS_EQ_F32: "VABS.EQ.F32",
+ VABS_NE_F32: "VABS.NE.F32",
+ VABS_CS_F32: "VABS.CS.F32",
+ VABS_CC_F32: "VABS.CC.F32",
+ VABS_MI_F32: "VABS.MI.F32",
+ VABS_PL_F32: "VABS.PL.F32",
+ VABS_VS_F32: "VABS.VS.F32",
+ VABS_VC_F32: "VABS.VC.F32",
+ VABS_HI_F32: "VABS.HI.F32",
+ VABS_LS_F32: "VABS.LS.F32",
+ VABS_GE_F32: "VABS.GE.F32",
+ VABS_LT_F32: "VABS.LT.F32",
+ VABS_GT_F32: "VABS.GT.F32",
+ VABS_LE_F32: "VABS.LE.F32",
+ VABS_F32: "VABS.F32",
+ VABS_ZZ_F32: "VABS.ZZ.F32",
+ VABS_EQ_F64: "VABS.EQ.F64",
+ VABS_NE_F64: "VABS.NE.F64",
+ VABS_CS_F64: "VABS.CS.F64",
+ VABS_CC_F64: "VABS.CC.F64",
+ VABS_MI_F64: "VABS.MI.F64",
+ VABS_PL_F64: "VABS.PL.F64",
+ VABS_VS_F64: "VABS.VS.F64",
+ VABS_VC_F64: "VABS.VC.F64",
+ VABS_HI_F64: "VABS.HI.F64",
+ VABS_LS_F64: "VABS.LS.F64",
+ VABS_GE_F64: "VABS.GE.F64",
+ VABS_LT_F64: "VABS.LT.F64",
+ VABS_GT_F64: "VABS.GT.F64",
+ VABS_LE_F64: "VABS.LE.F64",
+ VABS_F64: "VABS.F64",
+ VABS_ZZ_F64: "VABS.ZZ.F64",
+ VADD_EQ_F32: "VADD.EQ.F32",
+ VADD_NE_F32: "VADD.NE.F32",
+ VADD_CS_F32: "VADD.CS.F32",
+ VADD_CC_F32: "VADD.CC.F32",
+ VADD_MI_F32: "VADD.MI.F32",
+ VADD_PL_F32: "VADD.PL.F32",
+ VADD_VS_F32: "VADD.VS.F32",
+ VADD_VC_F32: "VADD.VC.F32",
+ VADD_HI_F32: "VADD.HI.F32",
+ VADD_LS_F32: "VADD.LS.F32",
+ VADD_GE_F32: "VADD.GE.F32",
+ VADD_LT_F32: "VADD.LT.F32",
+ VADD_GT_F32: "VADD.GT.F32",
+ VADD_LE_F32: "VADD.LE.F32",
+ VADD_F32: "VADD.F32",
+ VADD_ZZ_F32: "VADD.ZZ.F32",
+ VADD_EQ_F64: "VADD.EQ.F64",
+ VADD_NE_F64: "VADD.NE.F64",
+ VADD_CS_F64: "VADD.CS.F64",
+ VADD_CC_F64: "VADD.CC.F64",
+ VADD_MI_F64: "VADD.MI.F64",
+ VADD_PL_F64: "VADD.PL.F64",
+ VADD_VS_F64: "VADD.VS.F64",
+ VADD_VC_F64: "VADD.VC.F64",
+ VADD_HI_F64: "VADD.HI.F64",
+ VADD_LS_F64: "VADD.LS.F64",
+ VADD_GE_F64: "VADD.GE.F64",
+ VADD_LT_F64: "VADD.LT.F64",
+ VADD_GT_F64: "VADD.GT.F64",
+ VADD_LE_F64: "VADD.LE.F64",
+ VADD_F64: "VADD.F64",
+ VADD_ZZ_F64: "VADD.ZZ.F64",
+ VCMP_EQ_F32: "VCMP.EQ.F32",
+ VCMP_NE_F32: "VCMP.NE.F32",
+ VCMP_CS_F32: "VCMP.CS.F32",
+ VCMP_CC_F32: "VCMP.CC.F32",
+ VCMP_MI_F32: "VCMP.MI.F32",
+ VCMP_PL_F32: "VCMP.PL.F32",
+ VCMP_VS_F32: "VCMP.VS.F32",
+ VCMP_VC_F32: "VCMP.VC.F32",
+ VCMP_HI_F32: "VCMP.HI.F32",
+ VCMP_LS_F32: "VCMP.LS.F32",
+ VCMP_GE_F32: "VCMP.GE.F32",
+ VCMP_LT_F32: "VCMP.LT.F32",
+ VCMP_GT_F32: "VCMP.GT.F32",
+ VCMP_LE_F32: "VCMP.LE.F32",
+ VCMP_F32: "VCMP.F32",
+ VCMP_ZZ_F32: "VCMP.ZZ.F32",
+ VCMP_EQ_F64: "VCMP.EQ.F64",
+ VCMP_NE_F64: "VCMP.NE.F64",
+ VCMP_CS_F64: "VCMP.CS.F64",
+ VCMP_CC_F64: "VCMP.CC.F64",
+ VCMP_MI_F64: "VCMP.MI.F64",
+ VCMP_PL_F64: "VCMP.PL.F64",
+ VCMP_VS_F64: "VCMP.VS.F64",
+ VCMP_VC_F64: "VCMP.VC.F64",
+ VCMP_HI_F64: "VCMP.HI.F64",
+ VCMP_LS_F64: "VCMP.LS.F64",
+ VCMP_GE_F64: "VCMP.GE.F64",
+ VCMP_LT_F64: "VCMP.LT.F64",
+ VCMP_GT_F64: "VCMP.GT.F64",
+ VCMP_LE_F64: "VCMP.LE.F64",
+ VCMP_F64: "VCMP.F64",
+ VCMP_ZZ_F64: "VCMP.ZZ.F64",
+ VCMP_E_EQ_F32: "VCMP.E.EQ.F32",
+ VCMP_E_NE_F32: "VCMP.E.NE.F32",
+ VCMP_E_CS_F32: "VCMP.E.CS.F32",
+ VCMP_E_CC_F32: "VCMP.E.CC.F32",
+ VCMP_E_MI_F32: "VCMP.E.MI.F32",
+ VCMP_E_PL_F32: "VCMP.E.PL.F32",
+ VCMP_E_VS_F32: "VCMP.E.VS.F32",
+ VCMP_E_VC_F32: "VCMP.E.VC.F32",
+ VCMP_E_HI_F32: "VCMP.E.HI.F32",
+ VCMP_E_LS_F32: "VCMP.E.LS.F32",
+ VCMP_E_GE_F32: "VCMP.E.GE.F32",
+ VCMP_E_LT_F32: "VCMP.E.LT.F32",
+ VCMP_E_GT_F32: "VCMP.E.GT.F32",
+ VCMP_E_LE_F32: "VCMP.E.LE.F32",
+ VCMP_E_F32: "VCMP.E.F32",
+ VCMP_E_ZZ_F32: "VCMP.E.ZZ.F32",
+ VCMP_E_EQ_F64: "VCMP.E.EQ.F64",
+ VCMP_E_NE_F64: "VCMP.E.NE.F64",
+ VCMP_E_CS_F64: "VCMP.E.CS.F64",
+ VCMP_E_CC_F64: "VCMP.E.CC.F64",
+ VCMP_E_MI_F64: "VCMP.E.MI.F64",
+ VCMP_E_PL_F64: "VCMP.E.PL.F64",
+ VCMP_E_VS_F64: "VCMP.E.VS.F64",
+ VCMP_E_VC_F64: "VCMP.E.VC.F64",
+ VCMP_E_HI_F64: "VCMP.E.HI.F64",
+ VCMP_E_LS_F64: "VCMP.E.LS.F64",
+ VCMP_E_GE_F64: "VCMP.E.GE.F64",
+ VCMP_E_LT_F64: "VCMP.E.LT.F64",
+ VCMP_E_GT_F64: "VCMP.E.GT.F64",
+ VCMP_E_LE_F64: "VCMP.E.LE.F64",
+ VCMP_E_F64: "VCMP.E.F64",
+ VCMP_E_ZZ_F64: "VCMP.E.ZZ.F64",
+ VCVT_EQ_F32_FXS16: "VCVT.EQ.F32.FXS16",
+ VCVT_NE_F32_FXS16: "VCVT.NE.F32.FXS16",
+ VCVT_CS_F32_FXS16: "VCVT.CS.F32.FXS16",
+ VCVT_CC_F32_FXS16: "VCVT.CC.F32.FXS16",
+ VCVT_MI_F32_FXS16: "VCVT.MI.F32.FXS16",
+ VCVT_PL_F32_FXS16: "VCVT.PL.F32.FXS16",
+ VCVT_VS_F32_FXS16: "VCVT.VS.F32.FXS16",
+ VCVT_VC_F32_FXS16: "VCVT.VC.F32.FXS16",
+ VCVT_HI_F32_FXS16: "VCVT.HI.F32.FXS16",
+ VCVT_LS_F32_FXS16: "VCVT.LS.F32.FXS16",
+ VCVT_GE_F32_FXS16: "VCVT.GE.F32.FXS16",
+ VCVT_LT_F32_FXS16: "VCVT.LT.F32.FXS16",
+ VCVT_GT_F32_FXS16: "VCVT.GT.F32.FXS16",
+ VCVT_LE_F32_FXS16: "VCVT.LE.F32.FXS16",
+ VCVT_F32_FXS16: "VCVT.F32.FXS16",
+ VCVT_ZZ_F32_FXS16: "VCVT.ZZ.F32.FXS16",
+ VCVT_EQ_F32_FXS32: "VCVT.EQ.F32.FXS32",
+ VCVT_NE_F32_FXS32: "VCVT.NE.F32.FXS32",
+ VCVT_CS_F32_FXS32: "VCVT.CS.F32.FXS32",
+ VCVT_CC_F32_FXS32: "VCVT.CC.F32.FXS32",
+ VCVT_MI_F32_FXS32: "VCVT.MI.F32.FXS32",
+ VCVT_PL_F32_FXS32: "VCVT.PL.F32.FXS32",
+ VCVT_VS_F32_FXS32: "VCVT.VS.F32.FXS32",
+ VCVT_VC_F32_FXS32: "VCVT.VC.F32.FXS32",
+ VCVT_HI_F32_FXS32: "VCVT.HI.F32.FXS32",
+ VCVT_LS_F32_FXS32: "VCVT.LS.F32.FXS32",
+ VCVT_GE_F32_FXS32: "VCVT.GE.F32.FXS32",
+ VCVT_LT_F32_FXS32: "VCVT.LT.F32.FXS32",
+ VCVT_GT_F32_FXS32: "VCVT.GT.F32.FXS32",
+ VCVT_LE_F32_FXS32: "VCVT.LE.F32.FXS32",
+ VCVT_F32_FXS32: "VCVT.F32.FXS32",
+ VCVT_ZZ_F32_FXS32: "VCVT.ZZ.F32.FXS32",
+ VCVT_EQ_F32_FXU16: "VCVT.EQ.F32.FXU16",
+ VCVT_NE_F32_FXU16: "VCVT.NE.F32.FXU16",
+ VCVT_CS_F32_FXU16: "VCVT.CS.F32.FXU16",
+ VCVT_CC_F32_FXU16: "VCVT.CC.F32.FXU16",
+ VCVT_MI_F32_FXU16: "VCVT.MI.F32.FXU16",
+ VCVT_PL_F32_FXU16: "VCVT.PL.F32.FXU16",
+ VCVT_VS_F32_FXU16: "VCVT.VS.F32.FXU16",
+ VCVT_VC_F32_FXU16: "VCVT.VC.F32.FXU16",
+ VCVT_HI_F32_FXU16: "VCVT.HI.F32.FXU16",
+ VCVT_LS_F32_FXU16: "VCVT.LS.F32.FXU16",
+ VCVT_GE_F32_FXU16: "VCVT.GE.F32.FXU16",
+ VCVT_LT_F32_FXU16: "VCVT.LT.F32.FXU16",
+ VCVT_GT_F32_FXU16: "VCVT.GT.F32.FXU16",
+ VCVT_LE_F32_FXU16: "VCVT.LE.F32.FXU16",
+ VCVT_F32_FXU16: "VCVT.F32.FXU16",
+ VCVT_ZZ_F32_FXU16: "VCVT.ZZ.F32.FXU16",
+ VCVT_EQ_F32_FXU32: "VCVT.EQ.F32.FXU32",
+ VCVT_NE_F32_FXU32: "VCVT.NE.F32.FXU32",
+ VCVT_CS_F32_FXU32: "VCVT.CS.F32.FXU32",
+ VCVT_CC_F32_FXU32: "VCVT.CC.F32.FXU32",
+ VCVT_MI_F32_FXU32: "VCVT.MI.F32.FXU32",
+ VCVT_PL_F32_FXU32: "VCVT.PL.F32.FXU32",
+ VCVT_VS_F32_FXU32: "VCVT.VS.F32.FXU32",
+ VCVT_VC_F32_FXU32: "VCVT.VC.F32.FXU32",
+ VCVT_HI_F32_FXU32: "VCVT.HI.F32.FXU32",
+ VCVT_LS_F32_FXU32: "VCVT.LS.F32.FXU32",
+ VCVT_GE_F32_FXU32: "VCVT.GE.F32.FXU32",
+ VCVT_LT_F32_FXU32: "VCVT.LT.F32.FXU32",
+ VCVT_GT_F32_FXU32: "VCVT.GT.F32.FXU32",
+ VCVT_LE_F32_FXU32: "VCVT.LE.F32.FXU32",
+ VCVT_F32_FXU32: "VCVT.F32.FXU32",
+ VCVT_ZZ_F32_FXU32: "VCVT.ZZ.F32.FXU32",
+ VCVT_EQ_F64_FXS16: "VCVT.EQ.F64.FXS16",
+ VCVT_NE_F64_FXS16: "VCVT.NE.F64.FXS16",
+ VCVT_CS_F64_FXS16: "VCVT.CS.F64.FXS16",
+ VCVT_CC_F64_FXS16: "VCVT.CC.F64.FXS16",
+ VCVT_MI_F64_FXS16: "VCVT.MI.F64.FXS16",
+ VCVT_PL_F64_FXS16: "VCVT.PL.F64.FXS16",
+ VCVT_VS_F64_FXS16: "VCVT.VS.F64.FXS16",
+ VCVT_VC_F64_FXS16: "VCVT.VC.F64.FXS16",
+ VCVT_HI_F64_FXS16: "VCVT.HI.F64.FXS16",
+ VCVT_LS_F64_FXS16: "VCVT.LS.F64.FXS16",
+ VCVT_GE_F64_FXS16: "VCVT.GE.F64.FXS16",
+ VCVT_LT_F64_FXS16: "VCVT.LT.F64.FXS16",
+ VCVT_GT_F64_FXS16: "VCVT.GT.F64.FXS16",
+ VCVT_LE_F64_FXS16: "VCVT.LE.F64.FXS16",
+ VCVT_F64_FXS16: "VCVT.F64.FXS16",
+ VCVT_ZZ_F64_FXS16: "VCVT.ZZ.F64.FXS16",
+ VCVT_EQ_F64_FXS32: "VCVT.EQ.F64.FXS32",
+ VCVT_NE_F64_FXS32: "VCVT.NE.F64.FXS32",
+ VCVT_CS_F64_FXS32: "VCVT.CS.F64.FXS32",
+ VCVT_CC_F64_FXS32: "VCVT.CC.F64.FXS32",
+ VCVT_MI_F64_FXS32: "VCVT.MI.F64.FXS32",
+ VCVT_PL_F64_FXS32: "VCVT.PL.F64.FXS32",
+ VCVT_VS_F64_FXS32: "VCVT.VS.F64.FXS32",
+ VCVT_VC_F64_FXS32: "VCVT.VC.F64.FXS32",
+ VCVT_HI_F64_FXS32: "VCVT.HI.F64.FXS32",
+ VCVT_LS_F64_FXS32: "VCVT.LS.F64.FXS32",
+ VCVT_GE_F64_FXS32: "VCVT.GE.F64.FXS32",
+ VCVT_LT_F64_FXS32: "VCVT.LT.F64.FXS32",
+ VCVT_GT_F64_FXS32: "VCVT.GT.F64.FXS32",
+ VCVT_LE_F64_FXS32: "VCVT.LE.F64.FXS32",
+ VCVT_F64_FXS32: "VCVT.F64.FXS32",
+ VCVT_ZZ_F64_FXS32: "VCVT.ZZ.F64.FXS32",
+ VCVT_EQ_F64_FXU16: "VCVT.EQ.F64.FXU16",
+ VCVT_NE_F64_FXU16: "VCVT.NE.F64.FXU16",
+ VCVT_CS_F64_FXU16: "VCVT.CS.F64.FXU16",
+ VCVT_CC_F64_FXU16: "VCVT.CC.F64.FXU16",
+ VCVT_MI_F64_FXU16: "VCVT.MI.F64.FXU16",
+ VCVT_PL_F64_FXU16: "VCVT.PL.F64.FXU16",
+ VCVT_VS_F64_FXU16: "VCVT.VS.F64.FXU16",
+ VCVT_VC_F64_FXU16: "VCVT.VC.F64.FXU16",
+ VCVT_HI_F64_FXU16: "VCVT.HI.F64.FXU16",
+ VCVT_LS_F64_FXU16: "VCVT.LS.F64.FXU16",
+ VCVT_GE_F64_FXU16: "VCVT.GE.F64.FXU16",
+ VCVT_LT_F64_FXU16: "VCVT.LT.F64.FXU16",
+ VCVT_GT_F64_FXU16: "VCVT.GT.F64.FXU16",
+ VCVT_LE_F64_FXU16: "VCVT.LE.F64.FXU16",
+ VCVT_F64_FXU16: "VCVT.F64.FXU16",
+ VCVT_ZZ_F64_FXU16: "VCVT.ZZ.F64.FXU16",
+ VCVT_EQ_F64_FXU32: "VCVT.EQ.F64.FXU32",
+ VCVT_NE_F64_FXU32: "VCVT.NE.F64.FXU32",
+ VCVT_CS_F64_FXU32: "VCVT.CS.F64.FXU32",
+ VCVT_CC_F64_FXU32: "VCVT.CC.F64.FXU32",
+ VCVT_MI_F64_FXU32: "VCVT.MI.F64.FXU32",
+ VCVT_PL_F64_FXU32: "VCVT.PL.F64.FXU32",
+ VCVT_VS_F64_FXU32: "VCVT.VS.F64.FXU32",
+ VCVT_VC_F64_FXU32: "VCVT.VC.F64.FXU32",
+ VCVT_HI_F64_FXU32: "VCVT.HI.F64.FXU32",
+ VCVT_LS_F64_FXU32: "VCVT.LS.F64.FXU32",
+ VCVT_GE_F64_FXU32: "VCVT.GE.F64.FXU32",
+ VCVT_LT_F64_FXU32: "VCVT.LT.F64.FXU32",
+ VCVT_GT_F64_FXU32: "VCVT.GT.F64.FXU32",
+ VCVT_LE_F64_FXU32: "VCVT.LE.F64.FXU32",
+ VCVT_F64_FXU32: "VCVT.F64.FXU32",
+ VCVT_ZZ_F64_FXU32: "VCVT.ZZ.F64.FXU32",
+ VCVT_EQ_F32_U32: "VCVT.EQ.F32.U32",
+ VCVT_NE_F32_U32: "VCVT.NE.F32.U32",
+ VCVT_CS_F32_U32: "VCVT.CS.F32.U32",
+ VCVT_CC_F32_U32: "VCVT.CC.F32.U32",
+ VCVT_MI_F32_U32: "VCVT.MI.F32.U32",
+ VCVT_PL_F32_U32: "VCVT.PL.F32.U32",
+ VCVT_VS_F32_U32: "VCVT.VS.F32.U32",
+ VCVT_VC_F32_U32: "VCVT.VC.F32.U32",
+ VCVT_HI_F32_U32: "VCVT.HI.F32.U32",
+ VCVT_LS_F32_U32: "VCVT.LS.F32.U32",
+ VCVT_GE_F32_U32: "VCVT.GE.F32.U32",
+ VCVT_LT_F32_U32: "VCVT.LT.F32.U32",
+ VCVT_GT_F32_U32: "VCVT.GT.F32.U32",
+ VCVT_LE_F32_U32: "VCVT.LE.F32.U32",
+ VCVT_F32_U32: "VCVT.F32.U32",
+ VCVT_ZZ_F32_U32: "VCVT.ZZ.F32.U32",
+ VCVT_EQ_F32_S32: "VCVT.EQ.F32.S32",
+ VCVT_NE_F32_S32: "VCVT.NE.F32.S32",
+ VCVT_CS_F32_S32: "VCVT.CS.F32.S32",
+ VCVT_CC_F32_S32: "VCVT.CC.F32.S32",
+ VCVT_MI_F32_S32: "VCVT.MI.F32.S32",
+ VCVT_PL_F32_S32: "VCVT.PL.F32.S32",
+ VCVT_VS_F32_S32: "VCVT.VS.F32.S32",
+ VCVT_VC_F32_S32: "VCVT.VC.F32.S32",
+ VCVT_HI_F32_S32: "VCVT.HI.F32.S32",
+ VCVT_LS_F32_S32: "VCVT.LS.F32.S32",
+ VCVT_GE_F32_S32: "VCVT.GE.F32.S32",
+ VCVT_LT_F32_S32: "VCVT.LT.F32.S32",
+ VCVT_GT_F32_S32: "VCVT.GT.F32.S32",
+ VCVT_LE_F32_S32: "VCVT.LE.F32.S32",
+ VCVT_F32_S32: "VCVT.F32.S32",
+ VCVT_ZZ_F32_S32: "VCVT.ZZ.F32.S32",
+ VCVT_EQ_F64_U32: "VCVT.EQ.F64.U32",
+ VCVT_NE_F64_U32: "VCVT.NE.F64.U32",
+ VCVT_CS_F64_U32: "VCVT.CS.F64.U32",
+ VCVT_CC_F64_U32: "VCVT.CC.F64.U32",
+ VCVT_MI_F64_U32: "VCVT.MI.F64.U32",
+ VCVT_PL_F64_U32: "VCVT.PL.F64.U32",
+ VCVT_VS_F64_U32: "VCVT.VS.F64.U32",
+ VCVT_VC_F64_U32: "VCVT.VC.F64.U32",
+ VCVT_HI_F64_U32: "VCVT.HI.F64.U32",
+ VCVT_LS_F64_U32: "VCVT.LS.F64.U32",
+ VCVT_GE_F64_U32: "VCVT.GE.F64.U32",
+ VCVT_LT_F64_U32: "VCVT.LT.F64.U32",
+ VCVT_GT_F64_U32: "VCVT.GT.F64.U32",
+ VCVT_LE_F64_U32: "VCVT.LE.F64.U32",
+ VCVT_F64_U32: "VCVT.F64.U32",
+ VCVT_ZZ_F64_U32: "VCVT.ZZ.F64.U32",
+ VCVT_EQ_F64_S32: "VCVT.EQ.F64.S32",
+ VCVT_NE_F64_S32: "VCVT.NE.F64.S32",
+ VCVT_CS_F64_S32: "VCVT.CS.F64.S32",
+ VCVT_CC_F64_S32: "VCVT.CC.F64.S32",
+ VCVT_MI_F64_S32: "VCVT.MI.F64.S32",
+ VCVT_PL_F64_S32: "VCVT.PL.F64.S32",
+ VCVT_VS_F64_S32: "VCVT.VS.F64.S32",
+ VCVT_VC_F64_S32: "VCVT.VC.F64.S32",
+ VCVT_HI_F64_S32: "VCVT.HI.F64.S32",
+ VCVT_LS_F64_S32: "VCVT.LS.F64.S32",
+ VCVT_GE_F64_S32: "VCVT.GE.F64.S32",
+ VCVT_LT_F64_S32: "VCVT.LT.F64.S32",
+ VCVT_GT_F64_S32: "VCVT.GT.F64.S32",
+ VCVT_LE_F64_S32: "VCVT.LE.F64.S32",
+ VCVT_F64_S32: "VCVT.F64.S32",
+ VCVT_ZZ_F64_S32: "VCVT.ZZ.F64.S32",
+ VCVT_EQ_F64_F32: "VCVT.EQ.F64.F32",
+ VCVT_NE_F64_F32: "VCVT.NE.F64.F32",
+ VCVT_CS_F64_F32: "VCVT.CS.F64.F32",
+ VCVT_CC_F64_F32: "VCVT.CC.F64.F32",
+ VCVT_MI_F64_F32: "VCVT.MI.F64.F32",
+ VCVT_PL_F64_F32: "VCVT.PL.F64.F32",
+ VCVT_VS_F64_F32: "VCVT.VS.F64.F32",
+ VCVT_VC_F64_F32: "VCVT.VC.F64.F32",
+ VCVT_HI_F64_F32: "VCVT.HI.F64.F32",
+ VCVT_LS_F64_F32: "VCVT.LS.F64.F32",
+ VCVT_GE_F64_F32: "VCVT.GE.F64.F32",
+ VCVT_LT_F64_F32: "VCVT.LT.F64.F32",
+ VCVT_GT_F64_F32: "VCVT.GT.F64.F32",
+ VCVT_LE_F64_F32: "VCVT.LE.F64.F32",
+ VCVT_F64_F32: "VCVT.F64.F32",
+ VCVT_ZZ_F64_F32: "VCVT.ZZ.F64.F32",
+ VCVT_EQ_F32_F64: "VCVT.EQ.F32.F64",
+ VCVT_NE_F32_F64: "VCVT.NE.F32.F64",
+ VCVT_CS_F32_F64: "VCVT.CS.F32.F64",
+ VCVT_CC_F32_F64: "VCVT.CC.F32.F64",
+ VCVT_MI_F32_F64: "VCVT.MI.F32.F64",
+ VCVT_PL_F32_F64: "VCVT.PL.F32.F64",
+ VCVT_VS_F32_F64: "VCVT.VS.F32.F64",
+ VCVT_VC_F32_F64: "VCVT.VC.F32.F64",
+ VCVT_HI_F32_F64: "VCVT.HI.F32.F64",
+ VCVT_LS_F32_F64: "VCVT.LS.F32.F64",
+ VCVT_GE_F32_F64: "VCVT.GE.F32.F64",
+ VCVT_LT_F32_F64: "VCVT.LT.F32.F64",
+ VCVT_GT_F32_F64: "VCVT.GT.F32.F64",
+ VCVT_LE_F32_F64: "VCVT.LE.F32.F64",
+ VCVT_F32_F64: "VCVT.F32.F64",
+ VCVT_ZZ_F32_F64: "VCVT.ZZ.F32.F64",
+ VCVT_EQ_FXS16_F32: "VCVT.EQ.FXS16.F32",
+ VCVT_NE_FXS16_F32: "VCVT.NE.FXS16.F32",
+ VCVT_CS_FXS16_F32: "VCVT.CS.FXS16.F32",
+ VCVT_CC_FXS16_F32: "VCVT.CC.FXS16.F32",
+ VCVT_MI_FXS16_F32: "VCVT.MI.FXS16.F32",
+ VCVT_PL_FXS16_F32: "VCVT.PL.FXS16.F32",
+ VCVT_VS_FXS16_F32: "VCVT.VS.FXS16.F32",
+ VCVT_VC_FXS16_F32: "VCVT.VC.FXS16.F32",
+ VCVT_HI_FXS16_F32: "VCVT.HI.FXS16.F32",
+ VCVT_LS_FXS16_F32: "VCVT.LS.FXS16.F32",
+ VCVT_GE_FXS16_F32: "VCVT.GE.FXS16.F32",
+ VCVT_LT_FXS16_F32: "VCVT.LT.FXS16.F32",
+ VCVT_GT_FXS16_F32: "VCVT.GT.FXS16.F32",
+ VCVT_LE_FXS16_F32: "VCVT.LE.FXS16.F32",
+ VCVT_FXS16_F32: "VCVT.FXS16.F32",
+ VCVT_ZZ_FXS16_F32: "VCVT.ZZ.FXS16.F32",
+ VCVT_EQ_FXS16_F64: "VCVT.EQ.FXS16.F64",
+ VCVT_NE_FXS16_F64: "VCVT.NE.FXS16.F64",
+ VCVT_CS_FXS16_F64: "VCVT.CS.FXS16.F64",
+ VCVT_CC_FXS16_F64: "VCVT.CC.FXS16.F64",
+ VCVT_MI_FXS16_F64: "VCVT.MI.FXS16.F64",
+ VCVT_PL_FXS16_F64: "VCVT.PL.FXS16.F64",
+ VCVT_VS_FXS16_F64: "VCVT.VS.FXS16.F64",
+ VCVT_VC_FXS16_F64: "VCVT.VC.FXS16.F64",
+ VCVT_HI_FXS16_F64: "VCVT.HI.FXS16.F64",
+ VCVT_LS_FXS16_F64: "VCVT.LS.FXS16.F64",
+ VCVT_GE_FXS16_F64: "VCVT.GE.FXS16.F64",
+ VCVT_LT_FXS16_F64: "VCVT.LT.FXS16.F64",
+ VCVT_GT_FXS16_F64: "VCVT.GT.FXS16.F64",
+ VCVT_LE_FXS16_F64: "VCVT.LE.FXS16.F64",
+ VCVT_FXS16_F64: "VCVT.FXS16.F64",
+ VCVT_ZZ_FXS16_F64: "VCVT.ZZ.FXS16.F64",
+ VCVT_EQ_FXS32_F32: "VCVT.EQ.FXS32.F32",
+ VCVT_NE_FXS32_F32: "VCVT.NE.FXS32.F32",
+ VCVT_CS_FXS32_F32: "VCVT.CS.FXS32.F32",
+ VCVT_CC_FXS32_F32: "VCVT.CC.FXS32.F32",
+ VCVT_MI_FXS32_F32: "VCVT.MI.FXS32.F32",
+ VCVT_PL_FXS32_F32: "VCVT.PL.FXS32.F32",
+ VCVT_VS_FXS32_F32: "VCVT.VS.FXS32.F32",
+ VCVT_VC_FXS32_F32: "VCVT.VC.FXS32.F32",
+ VCVT_HI_FXS32_F32: "VCVT.HI.FXS32.F32",
+ VCVT_LS_FXS32_F32: "VCVT.LS.FXS32.F32",
+ VCVT_GE_FXS32_F32: "VCVT.GE.FXS32.F32",
+ VCVT_LT_FXS32_F32: "VCVT.LT.FXS32.F32",
+ VCVT_GT_FXS32_F32: "VCVT.GT.FXS32.F32",
+ VCVT_LE_FXS32_F32: "VCVT.LE.FXS32.F32",
+ VCVT_FXS32_F32: "VCVT.FXS32.F32",
+ VCVT_ZZ_FXS32_F32: "VCVT.ZZ.FXS32.F32",
+ VCVT_EQ_FXS32_F64: "VCVT.EQ.FXS32.F64",
+ VCVT_NE_FXS32_F64: "VCVT.NE.FXS32.F64",
+ VCVT_CS_FXS32_F64: "VCVT.CS.FXS32.F64",
+ VCVT_CC_FXS32_F64: "VCVT.CC.FXS32.F64",
+ VCVT_MI_FXS32_F64: "VCVT.MI.FXS32.F64",
+ VCVT_PL_FXS32_F64: "VCVT.PL.FXS32.F64",
+ VCVT_VS_FXS32_F64: "VCVT.VS.FXS32.F64",
+ VCVT_VC_FXS32_F64: "VCVT.VC.FXS32.F64",
+ VCVT_HI_FXS32_F64: "VCVT.HI.FXS32.F64",
+ VCVT_LS_FXS32_F64: "VCVT.LS.FXS32.F64",
+ VCVT_GE_FXS32_F64: "VCVT.GE.FXS32.F64",
+ VCVT_LT_FXS32_F64: "VCVT.LT.FXS32.F64",
+ VCVT_GT_FXS32_F64: "VCVT.GT.FXS32.F64",
+ VCVT_LE_FXS32_F64: "VCVT.LE.FXS32.F64",
+ VCVT_FXS32_F64: "VCVT.FXS32.F64",
+ VCVT_ZZ_FXS32_F64: "VCVT.ZZ.FXS32.F64",
+ VCVT_EQ_FXU16_F32: "VCVT.EQ.FXU16.F32",
+ VCVT_NE_FXU16_F32: "VCVT.NE.FXU16.F32",
+ VCVT_CS_FXU16_F32: "VCVT.CS.FXU16.F32",
+ VCVT_CC_FXU16_F32: "VCVT.CC.FXU16.F32",
+ VCVT_MI_FXU16_F32: "VCVT.MI.FXU16.F32",
+ VCVT_PL_FXU16_F32: "VCVT.PL.FXU16.F32",
+ VCVT_VS_FXU16_F32: "VCVT.VS.FXU16.F32",
+ VCVT_VC_FXU16_F32: "VCVT.VC.FXU16.F32",
+ VCVT_HI_FXU16_F32: "VCVT.HI.FXU16.F32",
+ VCVT_LS_FXU16_F32: "VCVT.LS.FXU16.F32",
+ VCVT_GE_FXU16_F32: "VCVT.GE.FXU16.F32",
+ VCVT_LT_FXU16_F32: "VCVT.LT.FXU16.F32",
+ VCVT_GT_FXU16_F32: "VCVT.GT.FXU16.F32",
+ VCVT_LE_FXU16_F32: "VCVT.LE.FXU16.F32",
+ VCVT_FXU16_F32: "VCVT.FXU16.F32",
+ VCVT_ZZ_FXU16_F32: "VCVT.ZZ.FXU16.F32",
+ VCVT_EQ_FXU16_F64: "VCVT.EQ.FXU16.F64",
+ VCVT_NE_FXU16_F64: "VCVT.NE.FXU16.F64",
+ VCVT_CS_FXU16_F64: "VCVT.CS.FXU16.F64",
+ VCVT_CC_FXU16_F64: "VCVT.CC.FXU16.F64",
+ VCVT_MI_FXU16_F64: "VCVT.MI.FXU16.F64",
+ VCVT_PL_FXU16_F64: "VCVT.PL.FXU16.F64",
+ VCVT_VS_FXU16_F64: "VCVT.VS.FXU16.F64",
+ VCVT_VC_FXU16_F64: "VCVT.VC.FXU16.F64",
+ VCVT_HI_FXU16_F64: "VCVT.HI.FXU16.F64",
+ VCVT_LS_FXU16_F64: "VCVT.LS.FXU16.F64",
+ VCVT_GE_FXU16_F64: "VCVT.GE.FXU16.F64",
+ VCVT_LT_FXU16_F64: "VCVT.LT.FXU16.F64",
+ VCVT_GT_FXU16_F64: "VCVT.GT.FXU16.F64",
+ VCVT_LE_FXU16_F64: "VCVT.LE.FXU16.F64",
+ VCVT_FXU16_F64: "VCVT.FXU16.F64",
+ VCVT_ZZ_FXU16_F64: "VCVT.ZZ.FXU16.F64",
+ VCVT_EQ_FXU32_F32: "VCVT.EQ.FXU32.F32",
+ VCVT_NE_FXU32_F32: "VCVT.NE.FXU32.F32",
+ VCVT_CS_FXU32_F32: "VCVT.CS.FXU32.F32",
+ VCVT_CC_FXU32_F32: "VCVT.CC.FXU32.F32",
+ VCVT_MI_FXU32_F32: "VCVT.MI.FXU32.F32",
+ VCVT_PL_FXU32_F32: "VCVT.PL.FXU32.F32",
+ VCVT_VS_FXU32_F32: "VCVT.VS.FXU32.F32",
+ VCVT_VC_FXU32_F32: "VCVT.VC.FXU32.F32",
+ VCVT_HI_FXU32_F32: "VCVT.HI.FXU32.F32",
+ VCVT_LS_FXU32_F32: "VCVT.LS.FXU32.F32",
+ VCVT_GE_FXU32_F32: "VCVT.GE.FXU32.F32",
+ VCVT_LT_FXU32_F32: "VCVT.LT.FXU32.F32",
+ VCVT_GT_FXU32_F32: "VCVT.GT.FXU32.F32",
+ VCVT_LE_FXU32_F32: "VCVT.LE.FXU32.F32",
+ VCVT_FXU32_F32: "VCVT.FXU32.F32",
+ VCVT_ZZ_FXU32_F32: "VCVT.ZZ.FXU32.F32",
+ VCVT_EQ_FXU32_F64: "VCVT.EQ.FXU32.F64",
+ VCVT_NE_FXU32_F64: "VCVT.NE.FXU32.F64",
+ VCVT_CS_FXU32_F64: "VCVT.CS.FXU32.F64",
+ VCVT_CC_FXU32_F64: "VCVT.CC.FXU32.F64",
+ VCVT_MI_FXU32_F64: "VCVT.MI.FXU32.F64",
+ VCVT_PL_FXU32_F64: "VCVT.PL.FXU32.F64",
+ VCVT_VS_FXU32_F64: "VCVT.VS.FXU32.F64",
+ VCVT_VC_FXU32_F64: "VCVT.VC.FXU32.F64",
+ VCVT_HI_FXU32_F64: "VCVT.HI.FXU32.F64",
+ VCVT_LS_FXU32_F64: "VCVT.LS.FXU32.F64",
+ VCVT_GE_FXU32_F64: "VCVT.GE.FXU32.F64",
+ VCVT_LT_FXU32_F64: "VCVT.LT.FXU32.F64",
+ VCVT_GT_FXU32_F64: "VCVT.GT.FXU32.F64",
+ VCVT_LE_FXU32_F64: "VCVT.LE.FXU32.F64",
+ VCVT_FXU32_F64: "VCVT.FXU32.F64",
+ VCVT_ZZ_FXU32_F64: "VCVT.ZZ.FXU32.F64",
+ VCVTB_EQ_F32_F16: "VCVTB.EQ.F32.F16",
+ VCVTB_NE_F32_F16: "VCVTB.NE.F32.F16",
+ VCVTB_CS_F32_F16: "VCVTB.CS.F32.F16",
+ VCVTB_CC_F32_F16: "VCVTB.CC.F32.F16",
+ VCVTB_MI_F32_F16: "VCVTB.MI.F32.F16",
+ VCVTB_PL_F32_F16: "VCVTB.PL.F32.F16",
+ VCVTB_VS_F32_F16: "VCVTB.VS.F32.F16",
+ VCVTB_VC_F32_F16: "VCVTB.VC.F32.F16",
+ VCVTB_HI_F32_F16: "VCVTB.HI.F32.F16",
+ VCVTB_LS_F32_F16: "VCVTB.LS.F32.F16",
+ VCVTB_GE_F32_F16: "VCVTB.GE.F32.F16",
+ VCVTB_LT_F32_F16: "VCVTB.LT.F32.F16",
+ VCVTB_GT_F32_F16: "VCVTB.GT.F32.F16",
+ VCVTB_LE_F32_F16: "VCVTB.LE.F32.F16",
+ VCVTB_F32_F16: "VCVTB.F32.F16",
+ VCVTB_ZZ_F32_F16: "VCVTB.ZZ.F32.F16",
+ VCVTB_EQ_F16_F32: "VCVTB.EQ.F16.F32",
+ VCVTB_NE_F16_F32: "VCVTB.NE.F16.F32",
+ VCVTB_CS_F16_F32: "VCVTB.CS.F16.F32",
+ VCVTB_CC_F16_F32: "VCVTB.CC.F16.F32",
+ VCVTB_MI_F16_F32: "VCVTB.MI.F16.F32",
+ VCVTB_PL_F16_F32: "VCVTB.PL.F16.F32",
+ VCVTB_VS_F16_F32: "VCVTB.VS.F16.F32",
+ VCVTB_VC_F16_F32: "VCVTB.VC.F16.F32",
+ VCVTB_HI_F16_F32: "VCVTB.HI.F16.F32",
+ VCVTB_LS_F16_F32: "VCVTB.LS.F16.F32",
+ VCVTB_GE_F16_F32: "VCVTB.GE.F16.F32",
+ VCVTB_LT_F16_F32: "VCVTB.LT.F16.F32",
+ VCVTB_GT_F16_F32: "VCVTB.GT.F16.F32",
+ VCVTB_LE_F16_F32: "VCVTB.LE.F16.F32",
+ VCVTB_F16_F32: "VCVTB.F16.F32",
+ VCVTB_ZZ_F16_F32: "VCVTB.ZZ.F16.F32",
+ VCVTT_EQ_F32_F16: "VCVTT.EQ.F32.F16",
+ VCVTT_NE_F32_F16: "VCVTT.NE.F32.F16",
+ VCVTT_CS_F32_F16: "VCVTT.CS.F32.F16",
+ VCVTT_CC_F32_F16: "VCVTT.CC.F32.F16",
+ VCVTT_MI_F32_F16: "VCVTT.MI.F32.F16",
+ VCVTT_PL_F32_F16: "VCVTT.PL.F32.F16",
+ VCVTT_VS_F32_F16: "VCVTT.VS.F32.F16",
+ VCVTT_VC_F32_F16: "VCVTT.VC.F32.F16",
+ VCVTT_HI_F32_F16: "VCVTT.HI.F32.F16",
+ VCVTT_LS_F32_F16: "VCVTT.LS.F32.F16",
+ VCVTT_GE_F32_F16: "VCVTT.GE.F32.F16",
+ VCVTT_LT_F32_F16: "VCVTT.LT.F32.F16",
+ VCVTT_GT_F32_F16: "VCVTT.GT.F32.F16",
+ VCVTT_LE_F32_F16: "VCVTT.LE.F32.F16",
+ VCVTT_F32_F16: "VCVTT.F32.F16",
+ VCVTT_ZZ_F32_F16: "VCVTT.ZZ.F32.F16",
+ VCVTT_EQ_F16_F32: "VCVTT.EQ.F16.F32",
+ VCVTT_NE_F16_F32: "VCVTT.NE.F16.F32",
+ VCVTT_CS_F16_F32: "VCVTT.CS.F16.F32",
+ VCVTT_CC_F16_F32: "VCVTT.CC.F16.F32",
+ VCVTT_MI_F16_F32: "VCVTT.MI.F16.F32",
+ VCVTT_PL_F16_F32: "VCVTT.PL.F16.F32",
+ VCVTT_VS_F16_F32: "VCVTT.VS.F16.F32",
+ VCVTT_VC_F16_F32: "VCVTT.VC.F16.F32",
+ VCVTT_HI_F16_F32: "VCVTT.HI.F16.F32",
+ VCVTT_LS_F16_F32: "VCVTT.LS.F16.F32",
+ VCVTT_GE_F16_F32: "VCVTT.GE.F16.F32",
+ VCVTT_LT_F16_F32: "VCVTT.LT.F16.F32",
+ VCVTT_GT_F16_F32: "VCVTT.GT.F16.F32",
+ VCVTT_LE_F16_F32: "VCVTT.LE.F16.F32",
+ VCVTT_F16_F32: "VCVTT.F16.F32",
+ VCVTT_ZZ_F16_F32: "VCVTT.ZZ.F16.F32",
+ VCVTR_EQ_U32_F32: "VCVTR.EQ.U32.F32",
+ VCVTR_NE_U32_F32: "VCVTR.NE.U32.F32",
+ VCVTR_CS_U32_F32: "VCVTR.CS.U32.F32",
+ VCVTR_CC_U32_F32: "VCVTR.CC.U32.F32",
+ VCVTR_MI_U32_F32: "VCVTR.MI.U32.F32",
+ VCVTR_PL_U32_F32: "VCVTR.PL.U32.F32",
+ VCVTR_VS_U32_F32: "VCVTR.VS.U32.F32",
+ VCVTR_VC_U32_F32: "VCVTR.VC.U32.F32",
+ VCVTR_HI_U32_F32: "VCVTR.HI.U32.F32",
+ VCVTR_LS_U32_F32: "VCVTR.LS.U32.F32",
+ VCVTR_GE_U32_F32: "VCVTR.GE.U32.F32",
+ VCVTR_LT_U32_F32: "VCVTR.LT.U32.F32",
+ VCVTR_GT_U32_F32: "VCVTR.GT.U32.F32",
+ VCVTR_LE_U32_F32: "VCVTR.LE.U32.F32",
+ VCVTR_U32_F32: "VCVTR.U32.F32",
+ VCVTR_ZZ_U32_F32: "VCVTR.ZZ.U32.F32",
+ VCVTR_EQ_U32_F64: "VCVTR.EQ.U32.F64",
+ VCVTR_NE_U32_F64: "VCVTR.NE.U32.F64",
+ VCVTR_CS_U32_F64: "VCVTR.CS.U32.F64",
+ VCVTR_CC_U32_F64: "VCVTR.CC.U32.F64",
+ VCVTR_MI_U32_F64: "VCVTR.MI.U32.F64",
+ VCVTR_PL_U32_F64: "VCVTR.PL.U32.F64",
+ VCVTR_VS_U32_F64: "VCVTR.VS.U32.F64",
+ VCVTR_VC_U32_F64: "VCVTR.VC.U32.F64",
+ VCVTR_HI_U32_F64: "VCVTR.HI.U32.F64",
+ VCVTR_LS_U32_F64: "VCVTR.LS.U32.F64",
+ VCVTR_GE_U32_F64: "VCVTR.GE.U32.F64",
+ VCVTR_LT_U32_F64: "VCVTR.LT.U32.F64",
+ VCVTR_GT_U32_F64: "VCVTR.GT.U32.F64",
+ VCVTR_LE_U32_F64: "VCVTR.LE.U32.F64",
+ VCVTR_U32_F64: "VCVTR.U32.F64",
+ VCVTR_ZZ_U32_F64: "VCVTR.ZZ.U32.F64",
+ VCVTR_EQ_S32_F32: "VCVTR.EQ.S32.F32",
+ VCVTR_NE_S32_F32: "VCVTR.NE.S32.F32",
+ VCVTR_CS_S32_F32: "VCVTR.CS.S32.F32",
+ VCVTR_CC_S32_F32: "VCVTR.CC.S32.F32",
+ VCVTR_MI_S32_F32: "VCVTR.MI.S32.F32",
+ VCVTR_PL_S32_F32: "VCVTR.PL.S32.F32",
+ VCVTR_VS_S32_F32: "VCVTR.VS.S32.F32",
+ VCVTR_VC_S32_F32: "VCVTR.VC.S32.F32",
+ VCVTR_HI_S32_F32: "VCVTR.HI.S32.F32",
+ VCVTR_LS_S32_F32: "VCVTR.LS.S32.F32",
+ VCVTR_GE_S32_F32: "VCVTR.GE.S32.F32",
+ VCVTR_LT_S32_F32: "VCVTR.LT.S32.F32",
+ VCVTR_GT_S32_F32: "VCVTR.GT.S32.F32",
+ VCVTR_LE_S32_F32: "VCVTR.LE.S32.F32",
+ VCVTR_S32_F32: "VCVTR.S32.F32",
+ VCVTR_ZZ_S32_F32: "VCVTR.ZZ.S32.F32",
+ VCVTR_EQ_S32_F64: "VCVTR.EQ.S32.F64",
+ VCVTR_NE_S32_F64: "VCVTR.NE.S32.F64",
+ VCVTR_CS_S32_F64: "VCVTR.CS.S32.F64",
+ VCVTR_CC_S32_F64: "VCVTR.CC.S32.F64",
+ VCVTR_MI_S32_F64: "VCVTR.MI.S32.F64",
+ VCVTR_PL_S32_F64: "VCVTR.PL.S32.F64",
+ VCVTR_VS_S32_F64: "VCVTR.VS.S32.F64",
+ VCVTR_VC_S32_F64: "VCVTR.VC.S32.F64",
+ VCVTR_HI_S32_F64: "VCVTR.HI.S32.F64",
+ VCVTR_LS_S32_F64: "VCVTR.LS.S32.F64",
+ VCVTR_GE_S32_F64: "VCVTR.GE.S32.F64",
+ VCVTR_LT_S32_F64: "VCVTR.LT.S32.F64",
+ VCVTR_GT_S32_F64: "VCVTR.GT.S32.F64",
+ VCVTR_LE_S32_F64: "VCVTR.LE.S32.F64",
+ VCVTR_S32_F64: "VCVTR.S32.F64",
+ VCVTR_ZZ_S32_F64: "VCVTR.ZZ.S32.F64",
+ VCVT_EQ_U32_F32: "VCVT.EQ.U32.F32",
+ VCVT_NE_U32_F32: "VCVT.NE.U32.F32",
+ VCVT_CS_U32_F32: "VCVT.CS.U32.F32",
+ VCVT_CC_U32_F32: "VCVT.CC.U32.F32",
+ VCVT_MI_U32_F32: "VCVT.MI.U32.F32",
+ VCVT_PL_U32_F32: "VCVT.PL.U32.F32",
+ VCVT_VS_U32_F32: "VCVT.VS.U32.F32",
+ VCVT_VC_U32_F32: "VCVT.VC.U32.F32",
+ VCVT_HI_U32_F32: "VCVT.HI.U32.F32",
+ VCVT_LS_U32_F32: "VCVT.LS.U32.F32",
+ VCVT_GE_U32_F32: "VCVT.GE.U32.F32",
+ VCVT_LT_U32_F32: "VCVT.LT.U32.F32",
+ VCVT_GT_U32_F32: "VCVT.GT.U32.F32",
+ VCVT_LE_U32_F32: "VCVT.LE.U32.F32",
+ VCVT_U32_F32: "VCVT.U32.F32",
+ VCVT_ZZ_U32_F32: "VCVT.ZZ.U32.F32",
+ VCVT_EQ_U32_F64: "VCVT.EQ.U32.F64",
+ VCVT_NE_U32_F64: "VCVT.NE.U32.F64",
+ VCVT_CS_U32_F64: "VCVT.CS.U32.F64",
+ VCVT_CC_U32_F64: "VCVT.CC.U32.F64",
+ VCVT_MI_U32_F64: "VCVT.MI.U32.F64",
+ VCVT_PL_U32_F64: "VCVT.PL.U32.F64",
+ VCVT_VS_U32_F64: "VCVT.VS.U32.F64",
+ VCVT_VC_U32_F64: "VCVT.VC.U32.F64",
+ VCVT_HI_U32_F64: "VCVT.HI.U32.F64",
+ VCVT_LS_U32_F64: "VCVT.LS.U32.F64",
+ VCVT_GE_U32_F64: "VCVT.GE.U32.F64",
+ VCVT_LT_U32_F64: "VCVT.LT.U32.F64",
+ VCVT_GT_U32_F64: "VCVT.GT.U32.F64",
+ VCVT_LE_U32_F64: "VCVT.LE.U32.F64",
+ VCVT_U32_F64: "VCVT.U32.F64",
+ VCVT_ZZ_U32_F64: "VCVT.ZZ.U32.F64",
+ VCVT_EQ_S32_F32: "VCVT.EQ.S32.F32",
+ VCVT_NE_S32_F32: "VCVT.NE.S32.F32",
+ VCVT_CS_S32_F32: "VCVT.CS.S32.F32",
+ VCVT_CC_S32_F32: "VCVT.CC.S32.F32",
+ VCVT_MI_S32_F32: "VCVT.MI.S32.F32",
+ VCVT_PL_S32_F32: "VCVT.PL.S32.F32",
+ VCVT_VS_S32_F32: "VCVT.VS.S32.F32",
+ VCVT_VC_S32_F32: "VCVT.VC.S32.F32",
+ VCVT_HI_S32_F32: "VCVT.HI.S32.F32",
+ VCVT_LS_S32_F32: "VCVT.LS.S32.F32",
+ VCVT_GE_S32_F32: "VCVT.GE.S32.F32",
+ VCVT_LT_S32_F32: "VCVT.LT.S32.F32",
+ VCVT_GT_S32_F32: "VCVT.GT.S32.F32",
+ VCVT_LE_S32_F32: "VCVT.LE.S32.F32",
+ VCVT_S32_F32: "VCVT.S32.F32",
+ VCVT_ZZ_S32_F32: "VCVT.ZZ.S32.F32",
+ VCVT_EQ_S32_F64: "VCVT.EQ.S32.F64",
+ VCVT_NE_S32_F64: "VCVT.NE.S32.F64",
+ VCVT_CS_S32_F64: "VCVT.CS.S32.F64",
+ VCVT_CC_S32_F64: "VCVT.CC.S32.F64",
+ VCVT_MI_S32_F64: "VCVT.MI.S32.F64",
+ VCVT_PL_S32_F64: "VCVT.PL.S32.F64",
+ VCVT_VS_S32_F64: "VCVT.VS.S32.F64",
+ VCVT_VC_S32_F64: "VCVT.VC.S32.F64",
+ VCVT_HI_S32_F64: "VCVT.HI.S32.F64",
+ VCVT_LS_S32_F64: "VCVT.LS.S32.F64",
+ VCVT_GE_S32_F64: "VCVT.GE.S32.F64",
+ VCVT_LT_S32_F64: "VCVT.LT.S32.F64",
+ VCVT_GT_S32_F64: "VCVT.GT.S32.F64",
+ VCVT_LE_S32_F64: "VCVT.LE.S32.F64",
+ VCVT_S32_F64: "VCVT.S32.F64",
+ VCVT_ZZ_S32_F64: "VCVT.ZZ.S32.F64",
+ VDIV_EQ_F32: "VDIV.EQ.F32",
+ VDIV_NE_F32: "VDIV.NE.F32",
+ VDIV_CS_F32: "VDIV.CS.F32",
+ VDIV_CC_F32: "VDIV.CC.F32",
+ VDIV_MI_F32: "VDIV.MI.F32",
+ VDIV_PL_F32: "VDIV.PL.F32",
+ VDIV_VS_F32: "VDIV.VS.F32",
+ VDIV_VC_F32: "VDIV.VC.F32",
+ VDIV_HI_F32: "VDIV.HI.F32",
+ VDIV_LS_F32: "VDIV.LS.F32",
+ VDIV_GE_F32: "VDIV.GE.F32",
+ VDIV_LT_F32: "VDIV.LT.F32",
+ VDIV_GT_F32: "VDIV.GT.F32",
+ VDIV_LE_F32: "VDIV.LE.F32",
+ VDIV_F32: "VDIV.F32",
+ VDIV_ZZ_F32: "VDIV.ZZ.F32",
+ VDIV_EQ_F64: "VDIV.EQ.F64",
+ VDIV_NE_F64: "VDIV.NE.F64",
+ VDIV_CS_F64: "VDIV.CS.F64",
+ VDIV_CC_F64: "VDIV.CC.F64",
+ VDIV_MI_F64: "VDIV.MI.F64",
+ VDIV_PL_F64: "VDIV.PL.F64",
+ VDIV_VS_F64: "VDIV.VS.F64",
+ VDIV_VC_F64: "VDIV.VC.F64",
+ VDIV_HI_F64: "VDIV.HI.F64",
+ VDIV_LS_F64: "VDIV.LS.F64",
+ VDIV_GE_F64: "VDIV.GE.F64",
+ VDIV_LT_F64: "VDIV.LT.F64",
+ VDIV_GT_F64: "VDIV.GT.F64",
+ VDIV_LE_F64: "VDIV.LE.F64",
+ VDIV_F64: "VDIV.F64",
+ VDIV_ZZ_F64: "VDIV.ZZ.F64",
+ VLDR_EQ: "VLDR.EQ",
+ VLDR_NE: "VLDR.NE",
+ VLDR_CS: "VLDR.CS",
+ VLDR_CC: "VLDR.CC",
+ VLDR_MI: "VLDR.MI",
+ VLDR_PL: "VLDR.PL",
+ VLDR_VS: "VLDR.VS",
+ VLDR_VC: "VLDR.VC",
+ VLDR_HI: "VLDR.HI",
+ VLDR_LS: "VLDR.LS",
+ VLDR_GE: "VLDR.GE",
+ VLDR_LT: "VLDR.LT",
+ VLDR_GT: "VLDR.GT",
+ VLDR_LE: "VLDR.LE",
+ VLDR: "VLDR",
+ VLDR_ZZ: "VLDR.ZZ",
+ VMLA_EQ_F32: "VMLA.EQ.F32",
+ VMLA_NE_F32: "VMLA.NE.F32",
+ VMLA_CS_F32: "VMLA.CS.F32",
+ VMLA_CC_F32: "VMLA.CC.F32",
+ VMLA_MI_F32: "VMLA.MI.F32",
+ VMLA_PL_F32: "VMLA.PL.F32",
+ VMLA_VS_F32: "VMLA.VS.F32",
+ VMLA_VC_F32: "VMLA.VC.F32",
+ VMLA_HI_F32: "VMLA.HI.F32",
+ VMLA_LS_F32: "VMLA.LS.F32",
+ VMLA_GE_F32: "VMLA.GE.F32",
+ VMLA_LT_F32: "VMLA.LT.F32",
+ VMLA_GT_F32: "VMLA.GT.F32",
+ VMLA_LE_F32: "VMLA.LE.F32",
+ VMLA_F32: "VMLA.F32",
+ VMLA_ZZ_F32: "VMLA.ZZ.F32",
+ VMLA_EQ_F64: "VMLA.EQ.F64",
+ VMLA_NE_F64: "VMLA.NE.F64",
+ VMLA_CS_F64: "VMLA.CS.F64",
+ VMLA_CC_F64: "VMLA.CC.F64",
+ VMLA_MI_F64: "VMLA.MI.F64",
+ VMLA_PL_F64: "VMLA.PL.F64",
+ VMLA_VS_F64: "VMLA.VS.F64",
+ VMLA_VC_F64: "VMLA.VC.F64",
+ VMLA_HI_F64: "VMLA.HI.F64",
+ VMLA_LS_F64: "VMLA.LS.F64",
+ VMLA_GE_F64: "VMLA.GE.F64",
+ VMLA_LT_F64: "VMLA.LT.F64",
+ VMLA_GT_F64: "VMLA.GT.F64",
+ VMLA_LE_F64: "VMLA.LE.F64",
+ VMLA_F64: "VMLA.F64",
+ VMLA_ZZ_F64: "VMLA.ZZ.F64",
+ VMLS_EQ_F32: "VMLS.EQ.F32",
+ VMLS_NE_F32: "VMLS.NE.F32",
+ VMLS_CS_F32: "VMLS.CS.F32",
+ VMLS_CC_F32: "VMLS.CC.F32",
+ VMLS_MI_F32: "VMLS.MI.F32",
+ VMLS_PL_F32: "VMLS.PL.F32",
+ VMLS_VS_F32: "VMLS.VS.F32",
+ VMLS_VC_F32: "VMLS.VC.F32",
+ VMLS_HI_F32: "VMLS.HI.F32",
+ VMLS_LS_F32: "VMLS.LS.F32",
+ VMLS_GE_F32: "VMLS.GE.F32",
+ VMLS_LT_F32: "VMLS.LT.F32",
+ VMLS_GT_F32: "VMLS.GT.F32",
+ VMLS_LE_F32: "VMLS.LE.F32",
+ VMLS_F32: "VMLS.F32",
+ VMLS_ZZ_F32: "VMLS.ZZ.F32",
+ VMLS_EQ_F64: "VMLS.EQ.F64",
+ VMLS_NE_F64: "VMLS.NE.F64",
+ VMLS_CS_F64: "VMLS.CS.F64",
+ VMLS_CC_F64: "VMLS.CC.F64",
+ VMLS_MI_F64: "VMLS.MI.F64",
+ VMLS_PL_F64: "VMLS.PL.F64",
+ VMLS_VS_F64: "VMLS.VS.F64",
+ VMLS_VC_F64: "VMLS.VC.F64",
+ VMLS_HI_F64: "VMLS.HI.F64",
+ VMLS_LS_F64: "VMLS.LS.F64",
+ VMLS_GE_F64: "VMLS.GE.F64",
+ VMLS_LT_F64: "VMLS.LT.F64",
+ VMLS_GT_F64: "VMLS.GT.F64",
+ VMLS_LE_F64: "VMLS.LE.F64",
+ VMLS_F64: "VMLS.F64",
+ VMLS_ZZ_F64: "VMLS.ZZ.F64",
+ VMOV_EQ: "VMOV.EQ",
+ VMOV_NE: "VMOV.NE",
+ VMOV_CS: "VMOV.CS",
+ VMOV_CC: "VMOV.CC",
+ VMOV_MI: "VMOV.MI",
+ VMOV_PL: "VMOV.PL",
+ VMOV_VS: "VMOV.VS",
+ VMOV_VC: "VMOV.VC",
+ VMOV_HI: "VMOV.HI",
+ VMOV_LS: "VMOV.LS",
+ VMOV_GE: "VMOV.GE",
+ VMOV_LT: "VMOV.LT",
+ VMOV_GT: "VMOV.GT",
+ VMOV_LE: "VMOV.LE",
+ VMOV: "VMOV",
+ VMOV_ZZ: "VMOV.ZZ",
+ VMOV_EQ_32: "VMOV.EQ.32",
+ VMOV_NE_32: "VMOV.NE.32",
+ VMOV_CS_32: "VMOV.CS.32",
+ VMOV_CC_32: "VMOV.CC.32",
+ VMOV_MI_32: "VMOV.MI.32",
+ VMOV_PL_32: "VMOV.PL.32",
+ VMOV_VS_32: "VMOV.VS.32",
+ VMOV_VC_32: "VMOV.VC.32",
+ VMOV_HI_32: "VMOV.HI.32",
+ VMOV_LS_32: "VMOV.LS.32",
+ VMOV_GE_32: "VMOV.GE.32",
+ VMOV_LT_32: "VMOV.LT.32",
+ VMOV_GT_32: "VMOV.GT.32",
+ VMOV_LE_32: "VMOV.LE.32",
+ VMOV_32: "VMOV.32",
+ VMOV_ZZ_32: "VMOV.ZZ.32",
+ VMOV_EQ_F32: "VMOV.EQ.F32",
+ VMOV_NE_F32: "VMOV.NE.F32",
+ VMOV_CS_F32: "VMOV.CS.F32",
+ VMOV_CC_F32: "VMOV.CC.F32",
+ VMOV_MI_F32: "VMOV.MI.F32",
+ VMOV_PL_F32: "VMOV.PL.F32",
+ VMOV_VS_F32: "VMOV.VS.F32",
+ VMOV_VC_F32: "VMOV.VC.F32",
+ VMOV_HI_F32: "VMOV.HI.F32",
+ VMOV_LS_F32: "VMOV.LS.F32",
+ VMOV_GE_F32: "VMOV.GE.F32",
+ VMOV_LT_F32: "VMOV.LT.F32",
+ VMOV_GT_F32: "VMOV.GT.F32",
+ VMOV_LE_F32: "VMOV.LE.F32",
+ VMOV_F32: "VMOV.F32",
+ VMOV_ZZ_F32: "VMOV.ZZ.F32",
+ VMOV_EQ_F64: "VMOV.EQ.F64",
+ VMOV_NE_F64: "VMOV.NE.F64",
+ VMOV_CS_F64: "VMOV.CS.F64",
+ VMOV_CC_F64: "VMOV.CC.F64",
+ VMOV_MI_F64: "VMOV.MI.F64",
+ VMOV_PL_F64: "VMOV.PL.F64",
+ VMOV_VS_F64: "VMOV.VS.F64",
+ VMOV_VC_F64: "VMOV.VC.F64",
+ VMOV_HI_F64: "VMOV.HI.F64",
+ VMOV_LS_F64: "VMOV.LS.F64",
+ VMOV_GE_F64: "VMOV.GE.F64",
+ VMOV_LT_F64: "VMOV.LT.F64",
+ VMOV_GT_F64: "VMOV.GT.F64",
+ VMOV_LE_F64: "VMOV.LE.F64",
+ VMOV_F64: "VMOV.F64",
+ VMOV_ZZ_F64: "VMOV.ZZ.F64",
+ VMRS_EQ: "VMRS.EQ",
+ VMRS_NE: "VMRS.NE",
+ VMRS_CS: "VMRS.CS",
+ VMRS_CC: "VMRS.CC",
+ VMRS_MI: "VMRS.MI",
+ VMRS_PL: "VMRS.PL",
+ VMRS_VS: "VMRS.VS",
+ VMRS_VC: "VMRS.VC",
+ VMRS_HI: "VMRS.HI",
+ VMRS_LS: "VMRS.LS",
+ VMRS_GE: "VMRS.GE",
+ VMRS_LT: "VMRS.LT",
+ VMRS_GT: "VMRS.GT",
+ VMRS_LE: "VMRS.LE",
+ VMRS: "VMRS",
+ VMRS_ZZ: "VMRS.ZZ",
+ VMSR_EQ: "VMSR.EQ",
+ VMSR_NE: "VMSR.NE",
+ VMSR_CS: "VMSR.CS",
+ VMSR_CC: "VMSR.CC",
+ VMSR_MI: "VMSR.MI",
+ VMSR_PL: "VMSR.PL",
+ VMSR_VS: "VMSR.VS",
+ VMSR_VC: "VMSR.VC",
+ VMSR_HI: "VMSR.HI",
+ VMSR_LS: "VMSR.LS",
+ VMSR_GE: "VMSR.GE",
+ VMSR_LT: "VMSR.LT",
+ VMSR_GT: "VMSR.GT",
+ VMSR_LE: "VMSR.LE",
+ VMSR: "VMSR",
+ VMSR_ZZ: "VMSR.ZZ",
+ VMUL_EQ_F32: "VMUL.EQ.F32",
+ VMUL_NE_F32: "VMUL.NE.F32",
+ VMUL_CS_F32: "VMUL.CS.F32",
+ VMUL_CC_F32: "VMUL.CC.F32",
+ VMUL_MI_F32: "VMUL.MI.F32",
+ VMUL_PL_F32: "VMUL.PL.F32",
+ VMUL_VS_F32: "VMUL.VS.F32",
+ VMUL_VC_F32: "VMUL.VC.F32",
+ VMUL_HI_F32: "VMUL.HI.F32",
+ VMUL_LS_F32: "VMUL.LS.F32",
+ VMUL_GE_F32: "VMUL.GE.F32",
+ VMUL_LT_F32: "VMUL.LT.F32",
+ VMUL_GT_F32: "VMUL.GT.F32",
+ VMUL_LE_F32: "VMUL.LE.F32",
+ VMUL_F32: "VMUL.F32",
+ VMUL_ZZ_F32: "VMUL.ZZ.F32",
+ VMUL_EQ_F64: "VMUL.EQ.F64",
+ VMUL_NE_F64: "VMUL.NE.F64",
+ VMUL_CS_F64: "VMUL.CS.F64",
+ VMUL_CC_F64: "VMUL.CC.F64",
+ VMUL_MI_F64: "VMUL.MI.F64",
+ VMUL_PL_F64: "VMUL.PL.F64",
+ VMUL_VS_F64: "VMUL.VS.F64",
+ VMUL_VC_F64: "VMUL.VC.F64",
+ VMUL_HI_F64: "VMUL.HI.F64",
+ VMUL_LS_F64: "VMUL.LS.F64",
+ VMUL_GE_F64: "VMUL.GE.F64",
+ VMUL_LT_F64: "VMUL.LT.F64",
+ VMUL_GT_F64: "VMUL.GT.F64",
+ VMUL_LE_F64: "VMUL.LE.F64",
+ VMUL_F64: "VMUL.F64",
+ VMUL_ZZ_F64: "VMUL.ZZ.F64",
+ VNEG_EQ_F32: "VNEG.EQ.F32",
+ VNEG_NE_F32: "VNEG.NE.F32",
+ VNEG_CS_F32: "VNEG.CS.F32",
+ VNEG_CC_F32: "VNEG.CC.F32",
+ VNEG_MI_F32: "VNEG.MI.F32",
+ VNEG_PL_F32: "VNEG.PL.F32",
+ VNEG_VS_F32: "VNEG.VS.F32",
+ VNEG_VC_F32: "VNEG.VC.F32",
+ VNEG_HI_F32: "VNEG.HI.F32",
+ VNEG_LS_F32: "VNEG.LS.F32",
+ VNEG_GE_F32: "VNEG.GE.F32",
+ VNEG_LT_F32: "VNEG.LT.F32",
+ VNEG_GT_F32: "VNEG.GT.F32",
+ VNEG_LE_F32: "VNEG.LE.F32",
+ VNEG_F32: "VNEG.F32",
+ VNEG_ZZ_F32: "VNEG.ZZ.F32",
+ VNEG_EQ_F64: "VNEG.EQ.F64",
+ VNEG_NE_F64: "VNEG.NE.F64",
+ VNEG_CS_F64: "VNEG.CS.F64",
+ VNEG_CC_F64: "VNEG.CC.F64",
+ VNEG_MI_F64: "VNEG.MI.F64",
+ VNEG_PL_F64: "VNEG.PL.F64",
+ VNEG_VS_F64: "VNEG.VS.F64",
+ VNEG_VC_F64: "VNEG.VC.F64",
+ VNEG_HI_F64: "VNEG.HI.F64",
+ VNEG_LS_F64: "VNEG.LS.F64",
+ VNEG_GE_F64: "VNEG.GE.F64",
+ VNEG_LT_F64: "VNEG.LT.F64",
+ VNEG_GT_F64: "VNEG.GT.F64",
+ VNEG_LE_F64: "VNEG.LE.F64",
+ VNEG_F64: "VNEG.F64",
+ VNEG_ZZ_F64: "VNEG.ZZ.F64",
+ VNMLS_EQ_F32: "VNMLS.EQ.F32",
+ VNMLS_NE_F32: "VNMLS.NE.F32",
+ VNMLS_CS_F32: "VNMLS.CS.F32",
+ VNMLS_CC_F32: "VNMLS.CC.F32",
+ VNMLS_MI_F32: "VNMLS.MI.F32",
+ VNMLS_PL_F32: "VNMLS.PL.F32",
+ VNMLS_VS_F32: "VNMLS.VS.F32",
+ VNMLS_VC_F32: "VNMLS.VC.F32",
+ VNMLS_HI_F32: "VNMLS.HI.F32",
+ VNMLS_LS_F32: "VNMLS.LS.F32",
+ VNMLS_GE_F32: "VNMLS.GE.F32",
+ VNMLS_LT_F32: "VNMLS.LT.F32",
+ VNMLS_GT_F32: "VNMLS.GT.F32",
+ VNMLS_LE_F32: "VNMLS.LE.F32",
+ VNMLS_F32: "VNMLS.F32",
+ VNMLS_ZZ_F32: "VNMLS.ZZ.F32",
+ VNMLS_EQ_F64: "VNMLS.EQ.F64",
+ VNMLS_NE_F64: "VNMLS.NE.F64",
+ VNMLS_CS_F64: "VNMLS.CS.F64",
+ VNMLS_CC_F64: "VNMLS.CC.F64",
+ VNMLS_MI_F64: "VNMLS.MI.F64",
+ VNMLS_PL_F64: "VNMLS.PL.F64",
+ VNMLS_VS_F64: "VNMLS.VS.F64",
+ VNMLS_VC_F64: "VNMLS.VC.F64",
+ VNMLS_HI_F64: "VNMLS.HI.F64",
+ VNMLS_LS_F64: "VNMLS.LS.F64",
+ VNMLS_GE_F64: "VNMLS.GE.F64",
+ VNMLS_LT_F64: "VNMLS.LT.F64",
+ VNMLS_GT_F64: "VNMLS.GT.F64",
+ VNMLS_LE_F64: "VNMLS.LE.F64",
+ VNMLS_F64: "VNMLS.F64",
+ VNMLS_ZZ_F64: "VNMLS.ZZ.F64",
+ VNMLA_EQ_F32: "VNMLA.EQ.F32",
+ VNMLA_NE_F32: "VNMLA.NE.F32",
+ VNMLA_CS_F32: "VNMLA.CS.F32",
+ VNMLA_CC_F32: "VNMLA.CC.F32",
+ VNMLA_MI_F32: "VNMLA.MI.F32",
+ VNMLA_PL_F32: "VNMLA.PL.F32",
+ VNMLA_VS_F32: "VNMLA.VS.F32",
+ VNMLA_VC_F32: "VNMLA.VC.F32",
+ VNMLA_HI_F32: "VNMLA.HI.F32",
+ VNMLA_LS_F32: "VNMLA.LS.F32",
+ VNMLA_GE_F32: "VNMLA.GE.F32",
+ VNMLA_LT_F32: "VNMLA.LT.F32",
+ VNMLA_GT_F32: "VNMLA.GT.F32",
+ VNMLA_LE_F32: "VNMLA.LE.F32",
+ VNMLA_F32: "VNMLA.F32",
+ VNMLA_ZZ_F32: "VNMLA.ZZ.F32",
+ VNMLA_EQ_F64: "VNMLA.EQ.F64",
+ VNMLA_NE_F64: "VNMLA.NE.F64",
+ VNMLA_CS_F64: "VNMLA.CS.F64",
+ VNMLA_CC_F64: "VNMLA.CC.F64",
+ VNMLA_MI_F64: "VNMLA.MI.F64",
+ VNMLA_PL_F64: "VNMLA.PL.F64",
+ VNMLA_VS_F64: "VNMLA.VS.F64",
+ VNMLA_VC_F64: "VNMLA.VC.F64",
+ VNMLA_HI_F64: "VNMLA.HI.F64",
+ VNMLA_LS_F64: "VNMLA.LS.F64",
+ VNMLA_GE_F64: "VNMLA.GE.F64",
+ VNMLA_LT_F64: "VNMLA.LT.F64",
+ VNMLA_GT_F64: "VNMLA.GT.F64",
+ VNMLA_LE_F64: "VNMLA.LE.F64",
+ VNMLA_F64: "VNMLA.F64",
+ VNMLA_ZZ_F64: "VNMLA.ZZ.F64",
+ VNMUL_EQ_F32: "VNMUL.EQ.F32",
+ VNMUL_NE_F32: "VNMUL.NE.F32",
+ VNMUL_CS_F32: "VNMUL.CS.F32",
+ VNMUL_CC_F32: "VNMUL.CC.F32",
+ VNMUL_MI_F32: "VNMUL.MI.F32",
+ VNMUL_PL_F32: "VNMUL.PL.F32",
+ VNMUL_VS_F32: "VNMUL.VS.F32",
+ VNMUL_VC_F32: "VNMUL.VC.F32",
+ VNMUL_HI_F32: "VNMUL.HI.F32",
+ VNMUL_LS_F32: "VNMUL.LS.F32",
+ VNMUL_GE_F32: "VNMUL.GE.F32",
+ VNMUL_LT_F32: "VNMUL.LT.F32",
+ VNMUL_GT_F32: "VNMUL.GT.F32",
+ VNMUL_LE_F32: "VNMUL.LE.F32",
+ VNMUL_F32: "VNMUL.F32",
+ VNMUL_ZZ_F32: "VNMUL.ZZ.F32",
+ VNMUL_EQ_F64: "VNMUL.EQ.F64",
+ VNMUL_NE_F64: "VNMUL.NE.F64",
+ VNMUL_CS_F64: "VNMUL.CS.F64",
+ VNMUL_CC_F64: "VNMUL.CC.F64",
+ VNMUL_MI_F64: "VNMUL.MI.F64",
+ VNMUL_PL_F64: "VNMUL.PL.F64",
+ VNMUL_VS_F64: "VNMUL.VS.F64",
+ VNMUL_VC_F64: "VNMUL.VC.F64",
+ VNMUL_HI_F64: "VNMUL.HI.F64",
+ VNMUL_LS_F64: "VNMUL.LS.F64",
+ VNMUL_GE_F64: "VNMUL.GE.F64",
+ VNMUL_LT_F64: "VNMUL.LT.F64",
+ VNMUL_GT_F64: "VNMUL.GT.F64",
+ VNMUL_LE_F64: "VNMUL.LE.F64",
+ VNMUL_F64: "VNMUL.F64",
+ VNMUL_ZZ_F64: "VNMUL.ZZ.F64",
+ VSQRT_EQ_F32: "VSQRT.EQ.F32",
+ VSQRT_NE_F32: "VSQRT.NE.F32",
+ VSQRT_CS_F32: "VSQRT.CS.F32",
+ VSQRT_CC_F32: "VSQRT.CC.F32",
+ VSQRT_MI_F32: "VSQRT.MI.F32",
+ VSQRT_PL_F32: "VSQRT.PL.F32",
+ VSQRT_VS_F32: "VSQRT.VS.F32",
+ VSQRT_VC_F32: "VSQRT.VC.F32",
+ VSQRT_HI_F32: "VSQRT.HI.F32",
+ VSQRT_LS_F32: "VSQRT.LS.F32",
+ VSQRT_GE_F32: "VSQRT.GE.F32",
+ VSQRT_LT_F32: "VSQRT.LT.F32",
+ VSQRT_GT_F32: "VSQRT.GT.F32",
+ VSQRT_LE_F32: "VSQRT.LE.F32",
+ VSQRT_F32: "VSQRT.F32",
+ VSQRT_ZZ_F32: "VSQRT.ZZ.F32",
+ VSQRT_EQ_F64: "VSQRT.EQ.F64",
+ VSQRT_NE_F64: "VSQRT.NE.F64",
+ VSQRT_CS_F64: "VSQRT.CS.F64",
+ VSQRT_CC_F64: "VSQRT.CC.F64",
+ VSQRT_MI_F64: "VSQRT.MI.F64",
+ VSQRT_PL_F64: "VSQRT.PL.F64",
+ VSQRT_VS_F64: "VSQRT.VS.F64",
+ VSQRT_VC_F64: "VSQRT.VC.F64",
+ VSQRT_HI_F64: "VSQRT.HI.F64",
+ VSQRT_LS_F64: "VSQRT.LS.F64",
+ VSQRT_GE_F64: "VSQRT.GE.F64",
+ VSQRT_LT_F64: "VSQRT.LT.F64",
+ VSQRT_GT_F64: "VSQRT.GT.F64",
+ VSQRT_LE_F64: "VSQRT.LE.F64",
+ VSQRT_F64: "VSQRT.F64",
+ VSQRT_ZZ_F64: "VSQRT.ZZ.F64",
+ VSTR_EQ: "VSTR.EQ",
+ VSTR_NE: "VSTR.NE",
+ VSTR_CS: "VSTR.CS",
+ VSTR_CC: "VSTR.CC",
+ VSTR_MI: "VSTR.MI",
+ VSTR_PL: "VSTR.PL",
+ VSTR_VS: "VSTR.VS",
+ VSTR_VC: "VSTR.VC",
+ VSTR_HI: "VSTR.HI",
+ VSTR_LS: "VSTR.LS",
+ VSTR_GE: "VSTR.GE",
+ VSTR_LT: "VSTR.LT",
+ VSTR_GT: "VSTR.GT",
+ VSTR_LE: "VSTR.LE",
+ VSTR: "VSTR",
+ VSTR_ZZ: "VSTR.ZZ",
+ VSUB_EQ_F32: "VSUB.EQ.F32",
+ VSUB_NE_F32: "VSUB.NE.F32",
+ VSUB_CS_F32: "VSUB.CS.F32",
+ VSUB_CC_F32: "VSUB.CC.F32",
+ VSUB_MI_F32: "VSUB.MI.F32",
+ VSUB_PL_F32: "VSUB.PL.F32",
+ VSUB_VS_F32: "VSUB.VS.F32",
+ VSUB_VC_F32: "VSUB.VC.F32",
+ VSUB_HI_F32: "VSUB.HI.F32",
+ VSUB_LS_F32: "VSUB.LS.F32",
+ VSUB_GE_F32: "VSUB.GE.F32",
+ VSUB_LT_F32: "VSUB.LT.F32",
+ VSUB_GT_F32: "VSUB.GT.F32",
+ VSUB_LE_F32: "VSUB.LE.F32",
+ VSUB_F32: "VSUB.F32",
+ VSUB_ZZ_F32: "VSUB.ZZ.F32",
+ VSUB_EQ_F64: "VSUB.EQ.F64",
+ VSUB_NE_F64: "VSUB.NE.F64",
+ VSUB_CS_F64: "VSUB.CS.F64",
+ VSUB_CC_F64: "VSUB.CC.F64",
+ VSUB_MI_F64: "VSUB.MI.F64",
+ VSUB_PL_F64: "VSUB.PL.F64",
+ VSUB_VS_F64: "VSUB.VS.F64",
+ VSUB_VC_F64: "VSUB.VC.F64",
+ VSUB_HI_F64: "VSUB.HI.F64",
+ VSUB_LS_F64: "VSUB.LS.F64",
+ VSUB_GE_F64: "VSUB.GE.F64",
+ VSUB_LT_F64: "VSUB.LT.F64",
+ VSUB_GT_F64: "VSUB.GT.F64",
+ VSUB_LE_F64: "VSUB.LE.F64",
+ VSUB_F64: "VSUB.F64",
+ VSUB_ZZ_F64: "VSUB.ZZ.F64",
+ WFE_EQ: "WFE.EQ",
+ WFE_NE: "WFE.NE",
+ WFE_CS: "WFE.CS",
+ WFE_CC: "WFE.CC",
+ WFE_MI: "WFE.MI",
+ WFE_PL: "WFE.PL",
+ WFE_VS: "WFE.VS",
+ WFE_VC: "WFE.VC",
+ WFE_HI: "WFE.HI",
+ WFE_LS: "WFE.LS",
+ WFE_GE: "WFE.GE",
+ WFE_LT: "WFE.LT",
+ WFE_GT: "WFE.GT",
+ WFE_LE: "WFE.LE",
+ WFE: "WFE",
+ WFE_ZZ: "WFE.ZZ",
+ WFI_EQ: "WFI.EQ",
+ WFI_NE: "WFI.NE",
+ WFI_CS: "WFI.CS",
+ WFI_CC: "WFI.CC",
+ WFI_MI: "WFI.MI",
+ WFI_PL: "WFI.PL",
+ WFI_VS: "WFI.VS",
+ WFI_VC: "WFI.VC",
+ WFI_HI: "WFI.HI",
+ WFI_LS: "WFI.LS",
+ WFI_GE: "WFI.GE",
+ WFI_LT: "WFI.LT",
+ WFI_GT: "WFI.GT",
+ WFI_LE: "WFI.LE",
+ WFI: "WFI",
+ WFI_ZZ: "WFI.ZZ",
+ YIELD_EQ: "YIELD.EQ",
+ YIELD_NE: "YIELD.NE",
+ YIELD_CS: "YIELD.CS",
+ YIELD_CC: "YIELD.CC",
+ YIELD_MI: "YIELD.MI",
+ YIELD_PL: "YIELD.PL",
+ YIELD_VS: "YIELD.VS",
+ YIELD_VC: "YIELD.VC",
+ YIELD_HI: "YIELD.HI",
+ YIELD_LS: "YIELD.LS",
+ YIELD_GE: "YIELD.GE",
+ YIELD_LT: "YIELD.LT",
+ YIELD_GT: "YIELD.GT",
+ YIELD_LE: "YIELD.LE",
+ YIELD: "YIELD",
+ YIELD_ZZ: "YIELD.ZZ",
+}
+
+var instFormats = [...]instFormat{
+ {0x0fe00000, 0x02a00000, 2, ADC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_const}}, // ADC{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|1|0|1|S|Rn:4|Rd:4|imm12:12
+ {0x0fe00090, 0x00a00010, 4, ADC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_R}}, // ADC{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|1|0|1|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00010, 0x00a00000, 2, ADC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // ADC{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|1|0|1|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0fe00000, 0x02800000, 2, ADD_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_const}}, // ADD{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|1|0|0|S|Rn:4|Rd:4|imm12:12
+ {0x0fe00090, 0x00800010, 4, ADD_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_R}}, // ADD{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|1|0|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00010, 0x00800000, 2, ADD_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // ADD{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|1|0|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0fef0000, 0x028d0000, 2, ADD_EQ, 0x14011c04, instArgs{arg_R_12, arg_SP, arg_const}}, // ADD{S}<c> <Rd>,SP,#<const> cond:4|0|0|1|0|1|0|0|S|1|1|0|1|Rd:4|imm12:12
+ {0x0fef0010, 0x008d0000, 2, ADD_EQ, 0x14011c04, instArgs{arg_R_12, arg_SP, arg_R_shift_imm}}, // ADD{S}<c> <Rd>,SP,<Rm>{,<shift>} cond:4|0|0|0|0|1|0|0|S|1|1|0|1|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0fe00000, 0x02000000, 2, AND_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_const}}, // AND{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|0|0|0|S|Rn:4|Rd:4|imm12:12
+ {0x0fe00090, 0x00000010, 4, AND_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_R}}, // AND{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|0|0|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00010, 0x00000000, 2, AND_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // AND{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|0|0|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0fef0070, 0x01a00040, 4, ASR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_0, arg_imm5_32}}, // ASR{S}<c> <Rd>,<Rm>,#<imm5_32> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|imm5:5|1|0|0|Rm:4
+ {0x0fef00f0, 0x01a00050, 4, ASR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_0, arg_R_8}}, // ASR{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|Rm:4|0|1|0|1|Rn:4
+ {0x0f000000, 0x0a000000, 4, B_EQ, 0x1c04, instArgs{arg_label24}}, // B<c> <label24> cond:4|1|0|1|0|imm24:24
+ {0x0fe0007f, 0x07c0001f, 4, BFC_EQ, 0x1c04, instArgs{arg_R_12, arg_imm5, arg_lsb_width}}, // BFC<c> <Rd>,#<lsb>,#<width> cond:4|0|1|1|1|1|1|0|msb:5|Rd:4|lsb:5|0|0|1|1|1|1|1
+ {0x0fe00070, 0x07c00010, 2, BFI_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_imm5, arg_lsb_width}}, // BFI<c> <Rd>,<Rn>,#<lsb>,#<width> cond:4|0|1|1|1|1|1|0|msb:5|Rd:4|lsb:5|0|0|1|Rn:4
+ {0x0fe00000, 0x03c00000, 2, BIC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_const}}, // BIC{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|1|1|1|0|S|Rn:4|Rd:4|imm12:12
+ {0x0fe00090, 0x01c00010, 4, BIC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_R}}, // BIC{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|1|1|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00010, 0x01c00000, 2, BIC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // BIC{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|1|1|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0ff000f0, 0x01200070, 4, BKPT_EQ, 0x1c04, instArgs{arg_imm_12at8_4at0}}, // BKPT<c> #<imm12+4> cond:4|0|0|0|1|0|0|1|0|imm12:12|0|1|1|1|imm4:4
+ {0x0f000000, 0x0b000000, 4, BL_EQ, 0x1c04, instArgs{arg_label24}}, // BL<c> <label24> cond:4|1|0|1|1|imm24:24
+ {0xfe000000, 0xfa000000, 4, BLX, 0x0, instArgs{arg_label24H}}, // BLX <label24H> 1|1|1|1|1|0|1|H|imm24:24
+ {0x0ffffff0, 0x012fff30, 4, BLX_EQ, 0x1c04, instArgs{arg_R_0}}, // BLX<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff000f0, 0x012fff30, 3, BLX_EQ, 0x1c04, instArgs{arg_R_0}}, // BLX<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ffffff0, 0x012fff10, 4, BX_EQ, 0x1c04, instArgs{arg_R_0}}, // BX<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff000f0, 0x012fff10, 3, BX_EQ, 0x1c04, instArgs{arg_R_0}}, // BX<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ffffff0, 0x012fff20, 4, BXJ_EQ, 0x1c04, instArgs{arg_R_0}}, // BXJ<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|1|0|Rm:4
+ {0x0ff000f0, 0x012fff20, 3, BXJ_EQ, 0x1c04, instArgs{arg_R_0}}, // BXJ<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|1|0|Rm:4
+ {0xffffffff, 0xf57ff01f, 4, CLREX, 0x0, instArgs{}}, // CLREX 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|1|(1)|(1)|(1)|(1)
+ {0xfff000f0, 0xf57ff01f, 3, CLREX, 0x0, instArgs{}}, // CLREX 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|1|(1)|(1)|(1)|(1)
+ {0x0fff0ff0, 0x016f0f10, 4, CLZ_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0}}, // CLZ<c> <Rd>,<Rm> cond:4|0|0|0|1|0|1|1|0|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff000f0, 0x016f0f10, 3, CLZ_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0}}, // CLZ<c> <Rd>,<Rm> cond:4|0|0|0|1|0|1|1|0|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff0f000, 0x03700000, 4, CMN_EQ, 0x1c04, instArgs{arg_R_16, arg_const}}, // CMN<c> <Rn>,#<const> cond:4|0|0|1|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
+ {0x0ff00000, 0x03700000, 3, CMN_EQ, 0x1c04, instArgs{arg_R_16, arg_const}}, // CMN<c> <Rn>,#<const> cond:4|0|0|1|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
+ {0x0ff0f090, 0x01700010, 4, CMN_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_R}}, // CMN<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
+ {0x0ff00090, 0x01700010, 3, CMN_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_R}}, // CMN<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
+ {0x0ff0f010, 0x01700000, 4, CMN_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_imm}}, // CMN<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
+ {0x0ff00010, 0x01700000, 3, CMN_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_imm}}, // CMN<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
+ {0x0ff0f000, 0x03500000, 4, CMP_EQ, 0x1c04, instArgs{arg_R_16, arg_const}}, // CMP<c> <Rn>,#<const> cond:4|0|0|1|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
+ {0x0ff00000, 0x03500000, 3, CMP_EQ, 0x1c04, instArgs{arg_R_16, arg_const}}, // CMP<c> <Rn>,#<const> cond:4|0|0|1|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
+ {0x0ff0f090, 0x01500010, 4, CMP_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_R}}, // CMP<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
+ {0x0ff00090, 0x01500010, 3, CMP_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_R}}, // CMP<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
+ {0x0ff0f010, 0x01500000, 4, CMP_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_imm}}, // CMP<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
+ {0x0ff00010, 0x01500000, 3, CMP_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_imm}}, // CMP<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
+ {0x0ffffff0, 0x0320f0f0, 4, DBG_EQ, 0x1c04, instArgs{arg_option}}, // DBG<c> #<option> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|1|1|1|1|option:4
+ {0x0fff00f0, 0x0320f0f0, 3, DBG_EQ, 0x1c04, instArgs{arg_option}}, // DBG<c> #<option> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|1|1|1|1|option:4
+ {0xfffffff0, 0xf57ff050, 4, DMB, 0x0, instArgs{arg_option}}, // DMB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|0|1|option:4
+ {0xfff000f0, 0xf57ff050, 3, DMB, 0x0, instArgs{arg_option}}, // DMB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|0|1|option:4
+ {0xfffffff0, 0xf57ff040, 4, DSB, 0x0, instArgs{arg_option}}, // DSB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|0|0|option:4
+ {0xfff000f0, 0xf57ff040, 3, DSB, 0x0, instArgs{arg_option}}, // DSB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|0|0|option:4
+ {0x0fe00000, 0x02200000, 2, EOR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_const}}, // EOR{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|0|0|1|S|Rn:4|Rd:4|imm12:12
+ {0x0fe00090, 0x00200010, 4, EOR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_R}}, // EOR{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|0|0|1|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00010, 0x00200000, 2, EOR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // EOR{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|0|0|1|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
+ {0xfffffff0, 0xf57ff060, 4, ISB, 0x0, instArgs{arg_option}}, // ISB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|1|0|option:4
+ {0xfff000f0, 0xf57ff060, 3, ISB, 0x0, instArgs{arg_option}}, // ISB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|1|0|option:4
+ {0x0fd00000, 0x08900000, 2, LDM_EQ, 0x1c04, instArgs{arg_R_16_WB, arg_registers}}, // LDM<c> <Rn>{!},<registers> cond:4|1|0|0|0|1|0|W|1|Rn:4|register_list:16
+ {0x0fd00000, 0x08100000, 4, LDMDA_EQ, 0x1c04, instArgs{arg_R_16_WB, arg_registers}}, // LDMDA<c> <Rn>{!},<registers> cond:4|1|0|0|0|0|0|W|1|Rn:4|register_list:16
+ {0x0fd00000, 0x09100000, 4, LDMDB_EQ, 0x1c04, instArgs{arg_R_16_WB, arg_registers}}, // LDMDB<c> <Rn>{!},<registers> cond:4|1|0|0|1|0|0|W|1|Rn:4|register_list:16
+ {0x0fd00000, 0x09900000, 4, LDMIB_EQ, 0x1c04, instArgs{arg_R_16_WB, arg_registers}}, // LDMIB<c> <Rn>{!},<registers> cond:4|1|0|0|1|1|0|W|1|Rn:4|register_list:16
+ {0x0f7f0000, 0x051f0000, 4, LDR_EQ, 0x1c04, instArgs{arg_R_12, arg_label_pm_12}}, // LDR<c> <Rt>,<label+/-12> cond:4|0|1|0|(1)|U|0|(0)|1|1|1|1|1|Rt:4|imm12:12
+ {0x0e5f0000, 0x051f0000, 3, LDR_EQ, 0x1c04, instArgs{arg_R_12, arg_label_pm_12}}, // LDR<c> <Rt>,<label+/-12> cond:4|0|1|0|(1)|U|0|(0)|1|1|1|1|1|Rt:4|imm12:12
+ {0x0e500010, 0x06100000, 2, LDR_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_shift_imm_W}}, // LDR<c> <Rt>,[<Rn>,+/-<Rm>{, <shift>}]{!} cond:4|0|1|1|P|U|0|W|1|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
+ {0x0e500000, 0x04100000, 2, LDR_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm12_W}}, // LDR<c> <Rt>,[<Rn>{,#+/-<imm12>}]{!} cond:4|0|1|0|P|U|0|W|1|Rn:4|Rt:4|imm12:12
+ {0x0f7f0000, 0x055f0000, 4, LDRB_EQ, 0x1c04, instArgs{arg_R_12, arg_label_pm_12}}, // LDRB<c> <Rt>,<label+/-12> cond:4|0|1|0|(1)|U|1|(0)|1|1|1|1|1|Rt:4|imm12:12
+ {0x0e5f0000, 0x055f0000, 3, LDRB_EQ, 0x1c04, instArgs{arg_R_12, arg_label_pm_12}}, // LDRB<c> <Rt>,<label+/-12> cond:4|0|1|0|(1)|U|1|(0)|1|1|1|1|1|Rt:4|imm12:12
+ {0x0e500010, 0x06500000, 2, LDRB_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_shift_imm_W}}, // LDRB<c> <Rt>,[<Rn>,+/-<Rm>{, <shift>}]{!} cond:4|0|1|1|P|U|1|W|1|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
+ {0x0e500000, 0x04500000, 2, LDRB_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm12_W}}, // LDRB<c> <Rt>,[<Rn>{,#+/-<imm12>}]{!} cond:4|0|1|0|P|U|1|W|1|Rn:4|Rt:4|imm12:12
+ {0x0f700000, 0x04700000, 4, LDRBT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm12_postindex}}, // LDRBT<c> <Rt>,[<Rn>],#+/-<imm12> cond:4|0|1|0|0|U|1|1|1|Rn:4|Rt:4|imm12:12
+ {0x0f700010, 0x06700000, 4, LDRBT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_shift_imm_postindex}}, // LDRBT<c> <Rt>,[<Rn>],+/-<Rm>{, <shift>} cond:4|0|1|1|0|U|1|1|1|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
+ {0x0e500ff0, 0x000000d0, 4, LDRD_EQ, 0x1c04, instArgs{arg_R1_12, arg_R2_12, arg_mem_R_pm_R_W}}, // LDRD<c> <Rt1>,<Rt2>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|0|Rn:4|Rt:4|(0)|(0)|(0)|(0)|1|1|0|1|Rm:4
+ {0x0e5000f0, 0x000000d0, 3, LDRD_EQ, 0x1c04, instArgs{arg_R1_12, arg_R2_12, arg_mem_R_pm_R_W}}, // LDRD<c> <Rt1>,<Rt2>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|0|Rn:4|Rt:4|(0)|(0)|(0)|(0)|1|1|0|1|Rm:4
+ {0x0e5000f0, 0x004000d0, 2, LDRD_EQ, 0x1c04, instArgs{arg_R1_12, arg_R2_12, arg_mem_R_pm_imm8_W}}, // LDRD<c> <Rt1>,<Rt2>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|0|Rn:4|Rt:4|imm4H:4|1|1|0|1|imm4L:4
+ {0x0ff00fff, 0x01900f9f, 4, LDREX_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R}}, // LDREX<c> <Rt>,[<Rn>] cond:4|0|0|0|1|1|0|0|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
+ {0x0ff000f0, 0x01900f9f, 3, LDREX_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R}}, // LDREX<c> <Rt>,[<Rn>] cond:4|0|0|0|1|1|0|0|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
+ {0x0ff00fff, 0x01d00f9f, 4, LDREXB_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R}}, // LDREXB<c> <Rt>, [<Rn>] cond:4|0|0|0|1|1|1|0|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
+ {0x0ff000f0, 0x01d00f9f, 3, LDREXB_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R}}, // LDREXB<c> <Rt>, [<Rn>] cond:4|0|0|0|1|1|1|0|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
+ {0x0ff00fff, 0x01b00f9f, 4, LDREXD_EQ, 0x1c04, instArgs{arg_R1_12, arg_R2_12, arg_mem_R}}, // LDREXD<c> <Rt1>,<Rt2>,[<Rn>] cond:4|0|0|0|1|1|0|1|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
+ {0x0ff000f0, 0x01b00f9f, 3, LDREXD_EQ, 0x1c04, instArgs{arg_R1_12, arg_R2_12, arg_mem_R}}, // LDREXD<c> <Rt1>,<Rt2>,[<Rn>] cond:4|0|0|0|1|1|0|1|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
+ {0x0ff00fff, 0x01f00f9f, 4, LDREXH_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R}}, // LDREXH<c> <Rt>, [<Rn>] cond:4|0|0|0|1|1|1|1|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
+ {0x0ff000f0, 0x01f00f9f, 3, LDREXH_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R}}, // LDREXH<c> <Rt>, [<Rn>] cond:4|0|0|0|1|1|1|1|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
+ {0x0e500ff0, 0x001000b0, 2, LDRH_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_W}}, // LDRH<c> <Rt>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|1|Rn:4|Rt:4|0|0|0|0|1|0|1|1|Rm:4
+ {0x0e5000f0, 0x005000b0, 2, LDRH_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm8_W}}, // LDRH<c> <Rt>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|1|Rn:4|Rt:4|imm4H:4|1|0|1|1|imm4L:4
+ {0x0f7000f0, 0x007000b0, 4, LDRHT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm8_postindex}}, // LDRHT<c> <Rt>, [<Rn>] {,#+/-<imm8>} cond:4|0|0|0|0|U|1|1|1|Rn:4|Rt:4|imm4H:4|1|0|1|1|imm4L:4
+ {0x0f700ff0, 0x003000b0, 4, LDRHT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_postindex}}, // LDRHT<c> <Rt>, [<Rn>], +/-<Rm> cond:4|0|0|0|0|U|0|1|1|Rn:4|Rt:4|0|0|0|0|1|0|1|1|Rm:4
+ {0x0e500ff0, 0x001000d0, 2, LDRSB_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_W}}, // LDRSB<c> <Rt>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|1|Rn:4|Rt:4|0|0|0|0|1|1|0|1|Rm:4
+ {0x0e5000f0, 0x005000d0, 2, LDRSB_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm8_W}}, // LDRSB<c> <Rt>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|1|Rn:4|Rt:4|imm4H:4|1|1|0|1|imm4L:4
+ {0x0f7000f0, 0x007000d0, 4, LDRSBT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm8_postindex}}, // LDRSBT<c> <Rt>, [<Rn>] {,#+/-<imm8>} cond:4|0|0|0|0|U|1|1|1|Rn:4|Rt:4|imm4H:4|1|1|0|1|imm4L:4
+ {0x0f700ff0, 0x003000d0, 4, LDRSBT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_postindex}}, // LDRSBT<c> <Rt>, [<Rn>], +/-<Rm> cond:4|0|0|0|0|U|0|1|1|Rn:4|Rt:4|0|0|0|0|1|1|0|1|Rm:4
+ {0x0e500ff0, 0x001000f0, 2, LDRSH_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_W}}, // LDRSH<c> <Rt>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|1|Rn:4|Rt:4|0|0|0|0|1|1|1|1|Rm:4
+ {0x0e5000f0, 0x005000f0, 2, LDRSH_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm8_W}}, // LDRSH<c> <Rt>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|1|Rn:4|Rt:4|imm4H:4|1|1|1|1|imm4L:4
+ {0x0f7000f0, 0x007000f0, 4, LDRSHT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm8_postindex}}, // LDRSHT<c> <Rt>, [<Rn>] {,#+/-<imm8>} cond:4|0|0|0|0|U|1|1|1|Rn:4|Rt:4|imm4H:4|1|1|1|1|imm4L:4
+ {0x0f700ff0, 0x003000f0, 4, LDRSHT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_postindex}}, // LDRSHT<c> <Rt>, [<Rn>], +/-<Rm> cond:4|0|0|0|0|U|0|1|1|Rn:4|Rt:4|0|0|0|0|1|1|1|1|Rm:4
+ {0x0f700000, 0x04300000, 4, LDRT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm12_postindex}}, // LDRT<c> <Rt>, [<Rn>] {,#+/-<imm12>} cond:4|0|1|0|0|U|0|1|1|Rn:4|Rt:4|imm12:12
+ {0x0f700010, 0x06300000, 4, LDRT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_shift_imm_postindex}}, // LDRT<c> <Rt>,[<Rn>],+/-<Rm>{, <shift>} cond:4|0|1|1|0|U|0|1|1|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
+ {0x0fef0070, 0x01a00000, 2, LSL_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_0, arg_imm5_nz}}, // LSL{S}<c> <Rd>,<Rm>,#<imm5_nz> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|imm5:5|0|0|0|Rm:4
+ {0x0fef00f0, 0x01a00010, 4, LSL_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_0, arg_R_8}}, // LSL{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|Rm:4|0|0|0|1|Rn:4
+ {0x0fef0070, 0x01a00020, 4, LSR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_0, arg_imm5_32}}, // LSR{S}<c> <Rd>,<Rm>,#<imm5_32> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|imm5:5|0|1|0|Rm:4
+ {0x0fef00f0, 0x01a00030, 4, LSR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_0, arg_R_8}}, // LSR{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|Rm:4|0|0|1|1|Rn:4
+ {0x0fe000f0, 0x00200090, 4, MLA_EQ, 0x14011c04, instArgs{arg_R_16, arg_R_0, arg_R_8, arg_R_12}}, // MLA{S}<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|0|0|0|0|0|1|S|Rd:4|Ra:4|Rm:4|1|0|0|1|Rn:4
+ {0x0ff000f0, 0x00600090, 4, MLS_EQ, 0x1c04, instArgs{arg_R_16, arg_R_0, arg_R_8, arg_R_12}}, // MLS<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|0|0|0|0|1|1|0|Rd:4|Ra:4|Rm:4|1|0|0|1|Rn:4
+ {0x0ff00000, 0x03400000, 4, MOVT_EQ, 0x1c04, instArgs{arg_R_12, arg_imm_4at16_12at0}}, // MOVT<c> <Rd>,#<imm12+4> cond:4|0|0|1|1|0|1|0|0|imm4:4|Rd:4|imm12:12
+ {0x0ff00000, 0x03000000, 4, MOVW_EQ, 0x1c04, instArgs{arg_R_12, arg_imm_4at16_12at0}}, // MOVW<c> <Rd>,#<imm12+4> cond:4|0|0|1|1|0|0|0|0|imm4:4|Rd:4|imm12:12
+ {0x0fef0000, 0x03a00000, 2, MOV_EQ, 0x14011c04, instArgs{arg_R_12, arg_const}}, // MOV{S}<c> <Rd>,#<const> cond:4|0|0|1|1|1|0|1|S|0|0|0|0|Rd:4|imm12:12
+ {0x0fef0ff0, 0x01a00000, 2, MOV_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_0}}, // MOV{S}<c> <Rd>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|0|0|0|0|0|0|0|0|Rm:4
+ {0x0fff0fff, 0x010f0000, 4, MRS_EQ, 0x1c04, instArgs{arg_R_12, arg_APSR}}, // MRS<c> <Rd>,APSR cond:4|0|0|0|1|0|0|0|0|(1)|(1)|(1)|(1)|Rd:4|(0)|(0)|(0)|(0)|0|0|0|0|(0)|(0)|(0)|(0)
+ {0x0ff000f0, 0x010f0000, 3, MRS_EQ, 0x1c04, instArgs{arg_R_12, arg_APSR}}, // MRS<c> <Rd>,APSR cond:4|0|0|0|1|0|0|0|0|(1)|(1)|(1)|(1)|Rd:4|(0)|(0)|(0)|(0)|0|0|0|0|(0)|(0)|(0)|(0)
+ {0x0fe0f0f0, 0x00000090, 4, MUL_EQ, 0x14011c04, instArgs{arg_R_16, arg_R_0, arg_R_8}}, // MUL{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|0|0|0|0|S|Rd:4|(0)|(0)|(0)|(0)|Rm:4|1|0|0|1|Rn:4
+ {0x0fe000f0, 0x00000090, 3, MUL_EQ, 0x14011c04, instArgs{arg_R_16, arg_R_0, arg_R_8}}, // MUL{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|0|0|0|0|S|Rd:4|(0)|(0)|(0)|(0)|Rm:4|1|0|0|1|Rn:4
+ {0x0fef0000, 0x03e00000, 2, MVN_EQ, 0x14011c04, instArgs{arg_R_12, arg_const}}, // MVN{S}<c> <Rd>,#<const> cond:4|0|0|1|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|imm12:12
+ {0x0fe00000, 0x03e00000, 1, MVN_EQ, 0x14011c04, instArgs{arg_R_12, arg_const}}, // MVN{S}<c> <Rd>,#<const> cond:4|0|0|1|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|imm12:12
+ {0x0fef0090, 0x01e00010, 4, MVN_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_shift_R}}, // MVN{S}<c> <Rd>,<Rm>,<type> <Rs> cond:4|0|0|0|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00090, 0x01e00010, 3, MVN_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_shift_R}}, // MVN{S}<c> <Rd>,<Rm>,<type> <Rs> cond:4|0|0|0|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fef0010, 0x01e00000, 2, MVN_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_shift_imm}}, // MVN{S}<c> <Rd>,<Rm>{,<shift>} cond:4|0|0|0|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0fe00010, 0x01e00000, 1, MVN_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_shift_imm}}, // MVN{S}<c> <Rd>,<Rm>{,<shift>} cond:4|0|0|0|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0fffffff, 0x0320f000, 4, NOP_EQ, 0x1c04, instArgs{}}, // NOP<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|0|0
+ {0x0fff00ff, 0x0320f000, 3, NOP_EQ, 0x1c04, instArgs{}}, // NOP<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|0|0
+ {0x0fe00000, 0x03800000, 2, ORR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_const}}, // ORR{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|1|1|0|0|S|Rn:4|Rd:4|imm12:12
+ {0x0fe00090, 0x01800010, 4, ORR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_R}}, // ORR{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|1|0|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00010, 0x01800000, 2, ORR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // ORR{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|1|0|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0ff00030, 0x06800010, 4, PKHBT_EQ, 0x6011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // PKH<BT,TB><c> <Rd>,<Rn>,<Rm>{,LSL #<imm5>} cond:4|0|1|1|0|1|0|0|0|Rn:4|Rd:4|imm5:5|tb|0|1|Rm:4
+ {0xff7ff000, 0xf55ff000, 4, PLD, 0x0, instArgs{arg_label_pm_12}}, // PLD <label+/-12> 1|1|1|1|0|1|0|1|U|(1)|0|1|1|1|1|1|(1)|(1)|(1)|(1)|imm12:12
+ {0xff3f0000, 0xf55ff000, 3, PLD, 0x0, instArgs{arg_label_pm_12}}, // PLD <label+/-12> 1|1|1|1|0|1|0|1|U|(1)|0|1|1|1|1|1|(1)|(1)|(1)|(1)|imm12:12
+ {0xff30f000, 0xf510f000, 2, PLD_W, 0x1601, instArgs{arg_mem_R_pm_imm12_offset}}, // PLD{W} [<Rn>,#+/-<imm12>] 1|1|1|1|0|1|0|1|U|R|0|1|Rn:4|(1)|(1)|(1)|(1)|imm12:12
+ {0xff300000, 0xf510f000, 1, PLD_W, 0x1601, instArgs{arg_mem_R_pm_imm12_offset}}, // PLD{W} [<Rn>,#+/-<imm12>] 1|1|1|1|0|1|0|1|U|R|0|1|Rn:4|(1)|(1)|(1)|(1)|imm12:12
+ {0xff30f010, 0xf710f000, 4, PLD_W, 0x1601, instArgs{arg_mem_R_pm_R_shift_imm_offset}}, // PLD{W} [<Rn>,+/-<Rm>{, <shift>}] 1|1|1|1|0|1|1|1|U|R|0|1|Rn:4|(1)|(1)|(1)|(1)|imm5:5|type:2|0|Rm:4
+ {0xff300010, 0xf710f000, 3, PLD_W, 0x1601, instArgs{arg_mem_R_pm_R_shift_imm_offset}}, // PLD{W} [<Rn>,+/-<Rm>{, <shift>}] 1|1|1|1|0|1|1|1|U|R|0|1|Rn:4|(1)|(1)|(1)|(1)|imm5:5|type:2|0|Rm:4
+ {0xff70f000, 0xf450f000, 4, PLI, 0x0, instArgs{arg_mem_R_pm_imm12_offset}}, // PLI [<Rn>,#+/-<imm12>] 1|1|1|1|0|1|0|0|U|1|0|1|Rn:4|(1)|(1)|(1)|(1)|imm12:12
+ {0xff700000, 0xf450f000, 3, PLI, 0x0, instArgs{arg_mem_R_pm_imm12_offset}}, // PLI [<Rn>,#+/-<imm12>] 1|1|1|1|0|1|0|0|U|1|0|1|Rn:4|(1)|(1)|(1)|(1)|imm12:12
+ {0xff70f010, 0xf650f000, 4, PLI, 0x0, instArgs{arg_mem_R_pm_R_shift_imm_offset}}, // PLI [<Rn>,+/-<Rm>{, <shift>}] 1|1|1|1|0|1|1|0|U|1|0|1|Rn:4|(1)|(1)|(1)|(1)|imm5:5|type:2|0|Rm:4
+ {0xff700010, 0xf650f000, 3, PLI, 0x0, instArgs{arg_mem_R_pm_R_shift_imm_offset}}, // PLI [<Rn>,+/-<Rm>{, <shift>}] 1|1|1|1|0|1|1|0|U|1|0|1|Rn:4|(1)|(1)|(1)|(1)|imm5:5|type:2|0|Rm:4
+ {0x0fff0000, 0x08bd0000, 4, POP_EQ, 0x1c04, instArgs{arg_registers2}}, // POP<c> <registers2> cond:4|1|0|0|0|1|0|1|1|1|1|0|1|register_list:16
+ {0x0fff0fff, 0x049d0004, 4, POP_EQ, 0x1c04, instArgs{arg_registers1}}, // POP<c> <registers1> cond:4|0|1|0|0|1|0|0|1|1|1|0|1|Rt:4|0|0|0|0|0|0|0|0|0|1|0|0
+ {0x0fff0000, 0x092d0000, 4, PUSH_EQ, 0x1c04, instArgs{arg_registers2}}, // PUSH<c> <registers2> cond:4|1|0|0|1|0|0|1|0|1|1|0|1|register_list:16
+ {0x0fff0fff, 0x052d0004, 4, PUSH_EQ, 0x1c04, instArgs{arg_registers1}}, // PUSH<c> <registers1> cond:4|0|1|0|1|0|0|1|0|1|1|0|1|Rt:4|0|0|0|0|0|0|0|0|0|1|0|0
+ {0x0ff00ff0, 0x06200f10, 4, QADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff000f0, 0x06200f10, 3, QADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06200f90, 4, QADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff000f0, 0x06200f90, 3, QADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff00ff0, 0x01000050, 4, QADD_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_R_16}}, // QADD<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|0|0|0|Rn:4|Rd:4|(0)|(0)|(0)|(0)|0|1|0|1|Rm:4
+ {0x0ff000f0, 0x01000050, 3, QADD_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_R_16}}, // QADD<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|0|0|0|Rn:4|Rd:4|(0)|(0)|(0)|(0)|0|1|0|1|Rm:4
+ {0x0ff00ff0, 0x06200f30, 4, QASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff000f0, 0x06200f30, 3, QASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff00ff0, 0x01400050, 4, QDADD_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_R_16}}, // QDADD<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|1|0|0|Rn:4|Rd:4|(0)|(0)|(0)|(0)|0|1|0|1|Rm:4
+ {0x0ff000f0, 0x01400050, 3, QDADD_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_R_16}}, // QDADD<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|1|0|0|Rn:4|Rd:4|(0)|(0)|(0)|(0)|0|1|0|1|Rm:4
+ {0x0ff00ff0, 0x01600050, 4, QDSUB_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_R_16}}, // QDSUB<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|1|1|0|Rn:4|Rd:4|0|0|0|0|0|1|0|1|Rm:4
+ {0x0ff00ff0, 0x06200f50, 4, QSAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff000f0, 0x06200f50, 3, QSAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff00ff0, 0x06200f70, 4, QSUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff000f0, 0x06200f70, 3, QSUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff00ff0, 0x06200ff0, 4, QSUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff000f0, 0x06200ff0, 3, QSUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // QSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff00ff0, 0x01200050, 4, QSUB_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_R_16}}, // QSUB<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|0|1|0|Rn:4|Rd:4|0|0|0|0|0|1|0|1|Rm:4
+ {0x0fff0ff0, 0x06ff0f30, 4, RBIT_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0}}, // RBIT<c> <Rd>,<Rm> cond:4|0|1|1|0|1|1|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff000f0, 0x06ff0f30, 3, RBIT_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0}}, // RBIT<c> <Rd>,<Rm> cond:4|0|1|1|0|1|1|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0fff0ff0, 0x06bf0fb0, 4, REV16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0}}, // REV16<c> <Rd>,<Rm> cond:4|0|1|1|0|1|0|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
+ {0x0ff000f0, 0x06bf0fb0, 3, REV16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0}}, // REV16<c> <Rd>,<Rm> cond:4|0|1|1|0|1|0|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
+ {0x0fff0ff0, 0x06bf0f30, 4, REV_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0}}, // REV<c> <Rd>,<Rm> cond:4|0|1|1|0|1|0|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff000f0, 0x06bf0f30, 3, REV_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0}}, // REV<c> <Rd>,<Rm> cond:4|0|1|1|0|1|0|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0fff0ff0, 0x06ff0fb0, 4, REVSH_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0}}, // REVSH<c> <Rd>,<Rm> cond:4|0|1|1|0|1|1|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
+ {0x0ff000f0, 0x06ff0fb0, 3, REVSH_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0}}, // REVSH<c> <Rd>,<Rm> cond:4|0|1|1|0|1|1|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
+ {0x0fef0070, 0x01a00060, 2, ROR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_0, arg_imm5}}, // ROR{S}<c> <Rd>,<Rm>,#<imm5> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|imm5:5|1|1|0|Rm:4
+ {0x0fef00f0, 0x01a00070, 4, ROR_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_0, arg_R_8}}, // ROR{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|Rm:4|0|1|1|1|Rn:4
+ {0x0fef0ff0, 0x01a00060, 4, RRX_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_0}}, // RRX{S}<c> <Rd>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|0|0|0|0|0|1|1|0|Rm:4
+ {0x0fe00000, 0x02600000, 2, RSB_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_const}}, // RSB{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|0|1|1|S|Rn:4|Rd:4|imm12:12
+ {0x0fe00090, 0x00600010, 4, RSB_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_R}}, // RSB{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|0|1|1|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00010, 0x00600000, 2, RSB_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // RSB{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|0|1|1|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0fe00000, 0x02e00000, 2, RSC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_const}}, // RSC{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|1|1|1|S|Rn:4|Rd:4|imm12:12
+ {0x0fe00090, 0x00e00010, 4, RSC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_R}}, // RSC{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|1|1|1|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00010, 0x00e00000, 2, RSC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // RSC{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|1|1|1|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0ff00ff0, 0x06100f10, 4, SADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff000f0, 0x06100f10, 3, SADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06100f90, 4, SADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff000f0, 0x06100f90, 3, SADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06100f30, 4, SASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff000f0, 0x06100f30, 3, SASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0fe00000, 0x02c00000, 2, SBC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_const}}, // SBC{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|1|1|0|S|Rn:4|Rd:4|imm12:12
+ {0x0fe00090, 0x00c00010, 4, SBC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_R}}, // SBC{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|1|1|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00010, 0x00c00000, 2, SBC_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // SBC{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|1|1|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0fe00070, 0x07a00050, 4, SBFX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_imm5, arg_widthm1}}, // SBFX<c> <Rd>,<Rn>,#<lsb>,#<widthm1> cond:4|0|1|1|1|1|0|1|widthm1:5|Rd:4|lsb:5|1|0|1|Rn:4
+ {0x0ff00ff0, 0x06800fb0, 4, SEL_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SEL<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|1|0|0|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
+ {0x0ff000f0, 0x06800fb0, 3, SEL_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SEL<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|1|0|0|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
+ {0xfffffdff, 0xf1010000, 4, SETEND, 0x0, instArgs{arg_endian}}, // SETEND <endian_specifier> 1|1|1|1|0|0|0|1|0|0|0|0|0|0|0|1|0|0|0|0|0|0|E|(0)|(0)|(0)|(0)|(0)|(0)|(0)|(0)|(0)
+ {0xfffffc00, 0xf1010000, 3, SETEND, 0x0, instArgs{arg_endian}}, // SETEND <endian_specifier> 1|1|1|1|0|0|0|1|0|0|0|0|0|0|0|1|0|0|0|0|0|0|E|(0)|(0)|(0)|(0)|(0)|(0)|(0)|(0)|(0)
+ {0x0fffffff, 0x0320f004, 4, SEV_EQ, 0x1c04, instArgs{}}, // SEV<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|1|0|0
+ {0x0fff00ff, 0x0320f004, 3, SEV_EQ, 0x1c04, instArgs{}}, // SEV<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|1|0|0
+ {0x0ff00ff0, 0x06300f10, 4, SHADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff000f0, 0x06300f10, 3, SHADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06300f90, 4, SHADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff000f0, 0x06300f90, 3, SHADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06300f30, 4, SHASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff000f0, 0x06300f30, 3, SHASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff00ff0, 0x06300f50, 4, SHSAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff000f0, 0x06300f50, 3, SHSAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff00ff0, 0x06300f70, 4, SHSUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff000f0, 0x06300f70, 3, SHSUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff00ff0, 0x06300ff0, 4, SHSUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff000f0, 0x06300ff0, 3, SHSUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SHSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff00090, 0x01000080, 4, SMLABB_EQ, 0x50106011c04, instArgs{arg_R_16, arg_R_0, arg_R_8, arg_R_12}}, // SMLA<x><y><c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|0|0|1|0|0|0|0|Rd:4|Ra:4|Rm:4|1|M|N|0|Rn:4
+ {0x0ff000d0, 0x07000010, 2, SMLAD_EQ, 0x5011c04, instArgs{arg_R_16, arg_R_0, arg_R_8, arg_R_12}}, // SMLAD{X}<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|1|1|1|0|0|0|0|Rd:4|Ra:4|Rm:4|0|0|M|1|Rn:4
+ {0x0ff00090, 0x01400080, 4, SMLALBB_EQ, 0x50106011c04, instArgs{arg_R_12, arg_R_16, arg_R_0, arg_R_8}}, // SMLAL<x><y><c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|1|0|1|0|0|RdHi:4|RdLo:4|Rm:4|1|M|N|0|Rn:4
+ {0x0ff000d0, 0x07400010, 4, SMLALD_EQ, 0x5011c04, instArgs{arg_R_12, arg_R_16, arg_R_0, arg_R_8}}, // SMLALD{X}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|1|1|1|0|1|0|0|RdHi:4|RdLo:4|Rm:4|0|0|M|1|Rn:4
+ {0x0fe000f0, 0x00e00090, 4, SMLAL_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_0, arg_R_8}}, // SMLAL{S}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|0|1|1|1|S|RdHi:4|RdLo:4|Rm:4|1|0|0|1|Rn:4
+ {0x0ff000b0, 0x01200080, 4, SMLAWB_EQ, 0x6011c04, instArgs{arg_R_16, arg_R_0, arg_R_8, arg_R_12}}, // SMLAW<y><c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|0|0|1|0|0|1|0|Rd:4|Ra:4|Rm:4|1|M|0|0|Rn:4
+ {0x0ff000d0, 0x07000050, 2, SMLSD_EQ, 0x5011c04, instArgs{arg_R_16, arg_R_0, arg_R_8, arg_R_12}}, // SMLSD{X}<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|1|1|1|0|0|0|0|Rd:4|Ra:4|Rm:4|0|1|M|1|Rn:4
+ {0x0ff000d0, 0x07400050, 4, SMLSLD_EQ, 0x5011c04, instArgs{arg_R_12, arg_R_16, arg_R_0, arg_R_8}}, // SMLSLD{X}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|1|1|1|0|1|0|0|RdHi:4|RdLo:4|Rm:4|0|1|M|1|Rn:4
+ {0x0ff000d0, 0x07500010, 2, SMMLA_EQ, 0x5011c04, instArgs{arg_R_16, arg_R_0, arg_R_8, arg_R_12}}, // SMMLA{R}<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|1|1|1|0|1|0|1|Rd:4|Ra:4|Rm:4|0|0|R|1|Rn:4
+ {0x0ff000d0, 0x075000d0, 4, SMMLS_EQ, 0x5011c04, instArgs{arg_R_16, arg_R_0, arg_R_8, arg_R_12}}, // SMMLS{R}<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|1|1|1|0|1|0|1|Rd:4|Ra:4|Rm:4|1|1|R|1|Rn:4
+ {0x0ff0f0d0, 0x0750f010, 4, SMMUL_EQ, 0x5011c04, instArgs{arg_R_16, arg_R_0, arg_R_8}}, // SMMUL{R}<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|1|0|1|0|1|Rd:4|1|1|1|1|Rm:4|0|0|R|1|Rn:4
+ {0x0ff0f0d0, 0x0700f010, 4, SMUAD_EQ, 0x5011c04, instArgs{arg_R_16, arg_R_0, arg_R_8}}, // SMUAD{X}<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|1|0|0|0|0|Rd:4|1|1|1|1|Rm:4|0|0|M|1|Rn:4
+ {0x0ff0f090, 0x01600080, 4, SMULBB_EQ, 0x50106011c04, instArgs{arg_R_16, arg_R_0, arg_R_8}}, // SMUL<x><y><c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|0|1|1|0|Rd:4|0|0|0|0|Rm:4|1|M|N|0|Rn:4
+ {0x0fe000f0, 0x00c00090, 4, SMULL_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_0, arg_R_8}}, // SMULL{S}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|0|1|1|0|S|RdHi:4|RdLo:4|Rm:4|1|0|0|1|Rn:4
+ {0x0ff0f0b0, 0x012000a0, 4, SMULWB_EQ, 0x6011c04, instArgs{arg_R_16, arg_R_0, arg_R_8}}, // SMULW<y><c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|0|0|1|0|Rd:4|0|0|0|0|Rm:4|1|M|1|0|Rn:4
+ {0x0ff0f0d0, 0x0700f050, 4, SMUSD_EQ, 0x5011c04, instArgs{arg_R_16, arg_R_0, arg_R_8}}, // SMUSD{X}<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|1|0|0|0|0|Rd:4|1|1|1|1|Rm:4|0|1|M|1|Rn:4
+ {0x0ff00ff0, 0x06a00f30, 4, SSAT16_EQ, 0x1c04, instArgs{arg_R_12, arg_satimm4m1, arg_R_0}}, // SSAT16<c> <Rd>,#<sat_imm4m1>,<Rn> cond:4|0|1|1|0|1|0|1|0|sat_imm:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rn:4
+ {0x0ff000f0, 0x06a00f30, 3, SSAT16_EQ, 0x1c04, instArgs{arg_R_12, arg_satimm4m1, arg_R_0}}, // SSAT16<c> <Rd>,#<sat_imm4m1>,<Rn> cond:4|0|1|1|0|1|0|1|0|sat_imm:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rn:4
+ {0x0fe00030, 0x06a00010, 4, SSAT_EQ, 0x1c04, instArgs{arg_R_12, arg_satimm5m1, arg_R_shift_imm}}, // SSAT<c> <Rd>,#<sat_imm5m1>,<Rn>{,<shift>} cond:4|0|1|1|0|1|0|1|sat_imm:5|Rd:4|imm5:5|sh|0|1|Rn:4
+ {0x0ff00ff0, 0x06100f50, 4, SSAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff000f0, 0x06100f50, 3, SSAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff00ff0, 0x06100f70, 4, SSUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff000f0, 0x06100f70, 3, SSUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff00ff0, 0x06100ff0, 4, SSUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff000f0, 0x06100ff0, 3, SSUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // SSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0fd00000, 0x08800000, 4, STM_EQ, 0x1c04, instArgs{arg_R_16_WB, arg_registers}}, // STM<c> <Rn>{!},<registers> cond:4|1|0|0|0|1|0|W|0|Rn:4|register_list:16
+ {0x0fd00000, 0x08000000, 4, STMDA_EQ, 0x1c04, instArgs{arg_R_16_WB, arg_registers}}, // STMDA<c> <Rn>{!},<registers> cond:4|1|0|0|0|0|0|W|0|Rn:4|register_list:16
+ {0x0fd00000, 0x09000000, 2, STMDB_EQ, 0x1c04, instArgs{arg_R_16_WB, arg_registers}}, // STMDB<c> <Rn>{!},<registers> cond:4|1|0|0|1|0|0|W|0|Rn:4|register_list:16
+ {0x0fd00000, 0x09800000, 4, STMIB_EQ, 0x1c04, instArgs{arg_R_16_WB, arg_registers}}, // STMIB<c> <Rn>{!},<registers> cond:4|1|0|0|1|1|0|W|0|Rn:4|register_list:16
+ {0x0e500018, 0x06000000, 2, STR_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_shift_imm_W}}, // STR<c> <Rt>,[<Rn>,+/-<Rm>{, <shift>}]{!} cond:4|0|1|1|P|U|0|W|0|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
+ {0x0e500000, 0x04000000, 2, STR_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm12_W}}, // STR<c> <Rt>,[<Rn>{,#+/-<imm12>}]{!} cond:4|0|1|0|P|U|0|W|0|Rn:4|Rt:4|imm12:12
+ {0x0e500010, 0x06400000, 2, STRB_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_shift_imm_W}}, // STRB<c> <Rt>,[<Rn>,+/-<Rm>{, <shift>}]{!} cond:4|0|1|1|P|U|1|W|0|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
+ {0x0e500000, 0x04400000, 2, STRB_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm12_W}}, // STRB<c> <Rt>,[<Rn>{,#+/-<imm12>}]{!} cond:4|0|1|0|P|U|1|W|0|Rn:4|Rt:4|imm12:12
+ {0x0f700000, 0x04600000, 4, STRBT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm12_postindex}}, // STRBT<c> <Rt>,[<Rn>],#+/-<imm12> cond:4|0|1|0|0|U|1|1|0|Rn:4|Rt:4|imm12:12
+ {0x0f700010, 0x06600000, 4, STRBT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_shift_imm_postindex}}, // STRBT<c> <Rt>,[<Rn>],+/-<Rm>{, <shift>} cond:4|0|1|1|0|U|1|1|0|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
+ {0x0e500ff0, 0x000000f0, 4, STRD_EQ, 0x1c04, instArgs{arg_R1_12, arg_R2_12, arg_mem_R_pm_R_W}}, // STRD<c> <Rt1>,<Rt2>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|0|Rn:4|Rt:4|(0)|(0)|(0)|(0)|1|1|1|1|Rm:4
+ {0x0e5000f0, 0x000000f0, 3, STRD_EQ, 0x1c04, instArgs{arg_R1_12, arg_R2_12, arg_mem_R_pm_R_W}}, // STRD<c> <Rt1>,<Rt2>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|0|Rn:4|Rt:4|(0)|(0)|(0)|(0)|1|1|1|1|Rm:4
+ {0x0e5000f0, 0x004000f0, 4, STRD_EQ, 0x1c04, instArgs{arg_R1_12, arg_R2_12, arg_mem_R_pm_imm8_W}}, // STRD<c> <Rt1>,<Rt2>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|0|Rn:4|Rt:4|imm4H:4|1|1|1|1|imm4L:4
+ {0x0ff00ff0, 0x01800f90, 4, STREX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_mem_R}}, // STREX<c> <Rd>,<Rt>,[<Rn>] cond:4|0|0|0|1|1|0|0|0|Rn:4|Rd:4|1|1|1|1|1|0|0|1|Rt:4
+ {0x0ff00ff0, 0x01c00f90, 4, STREXB_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_mem_R}}, // STREXB<c> <Rd>,<Rt>,[<Rn>] cond:4|0|0|0|1|1|1|0|0|Rn:4|Rd:4|1|1|1|1|1|0|0|1|Rt:4
+ {0x0ff00ff0, 0x01a00f90, 4, STREXD_EQ, 0x1c04, instArgs{arg_R_12, arg_R1_0, arg_R2_0, arg_mem_R}}, // STREXD<c> <Rd>,<Rt1>,<Rt2>,[<Rn>] cond:4|0|0|0|1|1|0|1|0|Rn:4|Rd:4|1|1|1|1|1|0|0|1|Rt:4
+ {0x0ff00ff0, 0x01e00f90, 4, STREXH_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_mem_R}}, // STREXH<c> <Rd>,<Rt>,[<Rn>] cond:4|0|0|0|1|1|1|1|0|Rn:4|Rd:4|1|1|1|1|1|0|0|1|Rt:4
+ {0x0e500ff0, 0x000000b0, 2, STRH_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_W}}, // STRH<c> <Rt>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|0|Rn:4|Rt:4|0|0|0|0|1|0|1|1|Rm:4
+ {0x0e5000f0, 0x004000b0, 2, STRH_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm8_W}}, // STRH<c> <Rt>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|0|Rn:4|Rt:4|imm4H:4|1|0|1|1|imm4L:4
+ {0x0f7000f0, 0x006000b0, 4, STRHT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm8_postindex}}, // STRHT<c> <Rt>, [<Rn>] {,#+/-<imm8>} cond:4|0|0|0|0|U|1|1|0|Rn:4|Rt:4|imm4H:4|1|0|1|1|imm4L:4
+ {0x0f700ff0, 0x002000b0, 4, STRHT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_postindex}}, // STRHT<c> <Rt>, [<Rn>], +/-<Rm> cond:4|0|0|0|0|U|0|1|0|Rn:4|Rt:4|0|0|0|0|1|0|1|1|Rm:4
+ {0x0f700000, 0x04200000, 4, STRT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_imm12_postindex}}, // STRT<c> <Rt>, [<Rn>] {,#+/-<imm12>} cond:4|0|1|0|0|U|0|1|0|Rn:4|Rt:4|imm12:12
+ {0x0f700010, 0x06200000, 4, STRT_EQ, 0x1c04, instArgs{arg_R_12, arg_mem_R_pm_R_shift_imm_postindex}}, // STRT<c> <Rt>,[<Rn>],+/-<Rm>{, <shift>} cond:4|0|1|1|0|U|0|1|0|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
+ {0x0fe00000, 0x02400000, 2, SUB_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_const}}, // SUB{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|0|1|0|S|Rn:4|Rd:4|imm12:12
+ {0x0fe00090, 0x00400010, 4, SUB_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_R}}, // SUB{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|0|1|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
+ {0x0fe00010, 0x00400000, 2, SUB_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_shift_imm}}, // SUB{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|0|1|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0fef0000, 0x024d0000, 2, SUB_EQ, 0x14011c04, instArgs{arg_R_12, arg_SP, arg_const}}, // SUB{S}<c> <Rd>,SP,#<const> cond:4|0|0|1|0|0|1|0|S|1|1|0|1|Rd:4|imm12:12
+ {0x0fef0010, 0x004d0000, 2, SUB_EQ, 0x14011c04, instArgs{arg_R_12, arg_SP, arg_R_shift_imm}}, // SUB{S}<c> <Rd>,SP,<Rm>{,<shift>} cond:4|0|0|0|0|0|1|0|S|1|1|0|1|Rd:4|imm5:5|type:2|0|Rm:4
+ {0x0f000000, 0x0f000000, 4, SVC_EQ, 0x1c04, instArgs{arg_imm24}}, // SVC<c> #<imm24> cond:4|1|1|1|1|imm24:24
+ {0x0fb00ff0, 0x01000090, 4, SWP_EQ, 0x16011c04, instArgs{arg_R_12, arg_R_0, arg_mem_R}}, // SWP{B}<c> <Rt>,<Rm>,[<Rn>] cond:4|0|0|0|1|0|B|0|0|Rn:4|Rt:4|0|0|0|0|1|0|0|1|Rm:4
+ {0x0ff003f0, 0x06800070, 2, SXTAB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_rotate}}, // SXTAB16<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|0|0|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0ff003f0, 0x06a00070, 2, SXTAB_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_rotate}}, // SXTAB<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|1|0|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0ff003f0, 0x06b00070, 2, SXTAH_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_rotate}}, // SXTAH<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|1|1|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0fff03f0, 0x068f0070, 4, SXTB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_rotate}}, // SXTB16<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|0|0|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0fff03f0, 0x06af0070, 4, SXTB_EQ, 0x1c04, instArgs{arg_R_12, arg_R_rotate}}, // SXTB<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|1|0|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0fff03f0, 0x06bf0070, 4, SXTH_EQ, 0x1c04, instArgs{arg_R_12, arg_R_rotate}}, // SXTH<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|1|1|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0ff0f000, 0x03300000, 4, TEQ_EQ, 0x1c04, instArgs{arg_R_16, arg_const}}, // TEQ<c> <Rn>,#<const> cond:4|0|0|1|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
+ {0x0ff00000, 0x03300000, 3, TEQ_EQ, 0x1c04, instArgs{arg_R_16, arg_const}}, // TEQ<c> <Rn>,#<const> cond:4|0|0|1|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
+ {0x0ff0f090, 0x01300010, 4, TEQ_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_R}}, // TEQ<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
+ {0x0ff00090, 0x01300010, 3, TEQ_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_R}}, // TEQ<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
+ {0x0ff0f010, 0x01300000, 4, TEQ_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_imm}}, // TEQ<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
+ {0x0ff00010, 0x01300000, 3, TEQ_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_imm}}, // TEQ<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
+ {0x0ff0f000, 0x03100000, 4, TST_EQ, 0x1c04, instArgs{arg_R_16, arg_const}}, // TST<c> <Rn>,#<const> cond:4|0|0|1|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
+ {0x0ff00000, 0x03100000, 3, TST_EQ, 0x1c04, instArgs{arg_R_16, arg_const}}, // TST<c> <Rn>,#<const> cond:4|0|0|1|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
+ {0x0ff0f090, 0x01100010, 4, TST_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_R}}, // TST<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
+ {0x0ff00090, 0x01100010, 3, TST_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_R}}, // TST<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
+ {0x0ff0f010, 0x01100000, 4, TST_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_imm}}, // TST<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
+ {0x0ff00010, 0x01100000, 3, TST_EQ, 0x1c04, instArgs{arg_R_16, arg_R_shift_imm}}, // TST<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
+ {0x0ff00ff0, 0x06500f10, 4, UADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff000f0, 0x06500f10, 3, UADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06500f90, 4, UADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff000f0, 0x06500f90, 3, UADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06500f30, 4, UASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff000f0, 0x06500f30, 3, UASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0fe00070, 0x07e00050, 4, UBFX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_0, arg_imm5, arg_widthm1}}, // UBFX<c> <Rd>,<Rn>,#<lsb>,#<widthm1> cond:4|0|1|1|1|1|1|1|widthm1:5|Rd:4|lsb:5|1|0|1|Rn:4
+ {0x0ff00ff0, 0x06700f10, 4, UHADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff000f0, 0x06700f10, 3, UHADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06700f90, 4, UHADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff000f0, 0x06700f90, 3, UHADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06700f30, 4, UHASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff000f0, 0x06700f30, 3, UHASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff00ff0, 0x06700f50, 4, UHSAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff000f0, 0x06700f50, 3, UHSAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff00ff0, 0x06700f70, 4, UHSUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff000f0, 0x06700f70, 3, UHSUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff00ff0, 0x06700ff0, 4, UHSUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff000f0, 0x06700ff0, 3, UHSUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UHSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff000f0, 0x00400090, 4, UMAAL_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0, arg_R_8}}, // UMAAL<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|0|0|1|0|0|RdHi:4|RdLo:4|Rm:4|1|0|0|1|Rn:4
+ {0x0fe000f0, 0x00a00090, 4, UMLAL_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_0, arg_R_8}}, // UMLAL{S}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|0|1|0|1|S|RdHi:4|RdLo:4|Rm:4|1|0|0|1|Rn:4
+ {0x0fe000f0, 0x00800090, 4, UMULL_EQ, 0x14011c04, instArgs{arg_R_12, arg_R_16, arg_R_0, arg_R_8}}, // UMULL{S}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|0|1|0|0|S|RdHi:4|RdLo:4|Rm:4|1|0|0|1|Rn:4
+ {0x0ff00ff0, 0x06600f10, 4, UQADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff000f0, 0x06600f10, 3, UQADD16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06600f90, 4, UQADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff000f0, 0x06600f90, 3, UQADD8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
+ {0x0ff00ff0, 0x06600f30, 4, UQASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff000f0, 0x06600f30, 3, UQASX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
+ {0x0ff00ff0, 0x06600f50, 4, UQSAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff000f0, 0x06600f50, 3, UQSAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff00ff0, 0x06600f70, 4, UQSUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff000f0, 0x06600f70, 3, UQSUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff00ff0, 0x06600ff0, 4, UQSUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff000f0, 0x06600ff0, 3, UQSUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // UQSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff0f0f0, 0x0780f010, 4, USAD8_EQ, 0x1c04, instArgs{arg_R_16, arg_R_0, arg_R_8}}, // USAD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|1|1|0|0|0|Rd:4|1|1|1|1|Rm:4|0|0|0|1|Rn:4
+ {0x0ff000f0, 0x07800010, 2, USADA8_EQ, 0x1c04, instArgs{arg_R_16, arg_R_0, arg_R_8, arg_R_12}}, // USADA8<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|1|1|1|1|0|0|0|Rd:4|Ra:4|Rm:4|0|0|0|1|Rn:4
+ {0x0ff00ff0, 0x06e00f30, 4, USAT16_EQ, 0x1c04, instArgs{arg_R_12, arg_satimm4, arg_R_0}}, // USAT16<c> <Rd>,#<sat_imm4>,<Rn> cond:4|0|1|1|0|1|1|1|0|sat_imm:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rn:4
+ {0x0ff000f0, 0x06e00f30, 3, USAT16_EQ, 0x1c04, instArgs{arg_R_12, arg_satimm4, arg_R_0}}, // USAT16<c> <Rd>,#<sat_imm4>,<Rn> cond:4|0|1|1|0|1|1|1|0|sat_imm:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rn:4
+ {0x0fe00030, 0x06e00010, 4, USAT_EQ, 0x1c04, instArgs{arg_R_12, arg_satimm5, arg_R_shift_imm}}, // USAT<c> <Rd>,#<sat_imm5>,<Rn>{,<shift>} cond:4|0|1|1|0|1|1|1|sat_imm:5|Rd:4|imm5:5|sh|0|1|Rn:4
+ {0x0ff00ff0, 0x06500f50, 4, USAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // USAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff000f0, 0x06500f50, 3, USAX_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // USAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
+ {0x0ff00ff0, 0x06500f70, 4, USUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // USUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff000f0, 0x06500f70, 3, USUB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // USUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
+ {0x0ff00ff0, 0x06500ff0, 4, USUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // USUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff000f0, 0x06500ff0, 3, USUB8_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_0}}, // USUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
+ {0x0ff003f0, 0x06c00070, 2, UXTAB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_rotate}}, // UXTAB16<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|0|0|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0ff003f0, 0x06e00070, 2, UXTAB_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_rotate}}, // UXTAB<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|1|0|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0ff003f0, 0x06f00070, 2, UXTAH_EQ, 0x1c04, instArgs{arg_R_12, arg_R_16, arg_R_rotate}}, // UXTAH<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|1|1|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0fff03f0, 0x06cf0070, 4, UXTB16_EQ, 0x1c04, instArgs{arg_R_12, arg_R_rotate}}, // UXTB16<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|0|0|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0fff03f0, 0x06ef0070, 4, UXTB_EQ, 0x1c04, instArgs{arg_R_12, arg_R_rotate}}, // UXTB<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|1|0|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0fff03f0, 0x06ff0070, 4, UXTH_EQ, 0x1c04, instArgs{arg_R_12, arg_R_rotate}}, // UXTH<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|1|1|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
+ {0x0fb00e10, 0x0e000a00, 4, VMLA_EQ_F32, 0x60108011c04, instArgs{arg_Sd_Dd, arg_Sn_Dn, arg_Sm_Dm}}, // V<MLA,MLS><c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|0|0|Vn:4|Vd:4|1|0|1|sz|N|op|M|0|Vm:4
+ {0x0fbf0ed0, 0x0eb00ac0, 4, VABS_EQ_F32, 0x8011c04, instArgs{arg_Sd_Dd, arg_Sm_Dm}}, // VABS<c>.F<32,64> <Sd,Dd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|0|0|0|Vd:4|1|0|1|sz|1|1|M|0|Vm:4
+ {0x0fb00e50, 0x0e300a00, 4, VADD_EQ_F32, 0x8011c04, instArgs{arg_Sd_Dd, arg_Sn_Dn, arg_Sm_Dm}}, // VADD<c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|1|1|Vn:4|Vd:4|1|0|1|sz|N|0|M|0|Vm:4
+ {0x0fbf0e7f, 0x0eb50a40, 4, VCMP_EQ_F32, 0x70108011c04, instArgs{arg_Sd_Dd, arg_fp_0}}, // VCMP{E}<c>.F<32,64> <Sd,Dd>, #0.0 cond:4|1|1|1|0|1|D|1|1|0|1|0|1|Vd:4|1|0|1|sz|E|1|0|0|(0)|(0)|(0)|(0)
+ {0x0fbf0e70, 0x0eb50a40, 3, VCMP_EQ_F32, 0x70108011c04, instArgs{arg_Sd_Dd, arg_fp_0}}, // VCMP{E}<c>.F<32,64> <Sd,Dd>, #0.0 cond:4|1|1|1|0|1|D|1|1|0|1|0|1|Vd:4|1|0|1|sz|E|1|0|0|(0)|(0)|(0)|(0)
+ {0x0fbf0e50, 0x0eb40a40, 4, VCMP_EQ_F32, 0x70108011c04, instArgs{arg_Sd_Dd, arg_Sm_Dm}}, // VCMP{E}<c>.F<32,64> <Sd,Dd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|1|0|0|Vd:4|1|0|1|sz|E|1|M|0|Vm:4
+ {0x0fbe0e50, 0x0eba0a40, 4, VCVT_EQ_F32_FXS16, 0x801100107011c04, instArgs{arg_Sd_Dd, arg_Sd_Dd, arg_fbits}}, // VCVT<c>.F<32,64>.FX<S,U><16,32> <Sd,Dd>, <Sd,Dd>, #<fbits> cond:4|1|1|1|0|1|D|1|1|1|0|1|U|Vd:4|1|0|1|sz|sx|1|i|0|imm4:4
+ {0x0fbe0e50, 0x0ebe0a40, 4, VCVT_EQ_FXS16_F32, 0x1001070108011c04, instArgs{arg_Sd_Dd, arg_Sd_Dd, arg_fbits}}, // VCVT<c>.FX<S,U><16,32>.F<32,64> <Sd,Dd>, <Sd,Dd>, #<fbits> cond:4|1|1|1|0|1|D|1|1|1|1|1|U|Vd:4|1|0|1|sz|sx|1|i|0|imm4:4
+ {0x0fbf0ed0, 0x0eb70ac0, 4, VCVT_EQ_F64_F32, 0x8011c04, instArgs{arg_Dd_Sd, arg_Sm_Dm}}, // VCVT<c>.<F64.F32,F32.F64> <Dd,Sd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|1|1|1|Vd:4|1|0|1|sz|1|1|M|0|Vm:4
+ {0x0fbe0f50, 0x0eb20a40, 4, VCVTB_EQ_F32_F16, 0x70110011c04, instArgs{arg_Sd, arg_Sm}}, // VCVT<B,T><c>.<F32.F16,F16.F32> <Sd>, <Sm> cond:4|1|1|1|0|1|D|1|1|0|0|1|op|Vd:4|1|0|1|0|T|1|M|0|Vm:4
+ {0x0fbf0e50, 0x0eb80a40, 4, VCVT_EQ_F32_U32, 0x80107011c04, instArgs{arg_Sd_Dd, arg_Sm}}, // VCVT<c>.F<32,64>.<U,S>32 <Sd,Dd>, <Sm> cond:4|1|1|1|0|1|D|1|1|1|0|0|0|Vd:4|1|0|1|sz|op|1|M|0|Vm:4
+ {0x0fbe0e50, 0x0ebc0a40, 4, VCVTR_EQ_U32_F32, 0x701100108011c04, instArgs{arg_Sd, arg_Sm_Dm}}, // VCVT<R,><c>.<U,S>32.F<32,64> <Sd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|1|1|0|signed|Vd:4|1|0|1|sz|op|1|M|0|Vm:4
+ {0x0fb00e50, 0x0e800a00, 4, VDIV_EQ_F32, 0x8011c04, instArgs{arg_Sd_Dd, arg_Sn_Dn, arg_Sm_Dm}}, // VDIV<c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|1|D|0|0|Vn:4|Vd:4|1|0|1|sz|N|0|M|0|Vm:4
+ {0x0f300e00, 0x0d100a00, 4, VLDR_EQ, 0x1c04, instArgs{arg_Sd_Dd, arg_mem_R_pm_imm8at0_offset}}, // VLDR<c> <Sd,Dd>, [<Rn>{,#+/-<imm8>}] cond:4|1|1|0|1|U|D|0|1|Rn:4|Vd:4|1|0|1|sz|imm8:8
+ {0x0ff00f7f, 0x0e000a10, 4, VMOV_EQ, 0x1c04, instArgs{arg_Sn, arg_R_12}}, // VMOV<c> <Sn>, <Rt> cond:4|1|1|1|0|0|0|0|0|Vn:4|Rt:4|1|0|1|0|N|0|0|1|0|0|0|0
+ {0x0ff00f7f, 0x0e100a10, 4, VMOV_EQ, 0x1c04, instArgs{arg_R_12, arg_Sn}}, // VMOV<c> <Rt>, <Sn> cond:4|1|1|1|0|0|0|0|1|Vn:4|Rt:4|1|0|1|0|N|0|0|1|0|0|0|0
+ {0x0fd00f7f, 0x0e100b10, 4, VMOV_EQ_32, 0x1c04, instArgs{arg_R_12, arg_Dn_half}}, // VMOV<c>.32 <Rt>, <Dn[x]> cond:4|1|1|1|0|0|0|opc1|1|Vn:4|Rt:4|1|0|1|1|N|0|0|1|0|0|0|0
+ {0x0fd00f7f, 0x0e000b10, 4, VMOV_EQ_32, 0x1c04, instArgs{arg_Dn_half, arg_R_12}}, // VMOV<c>.32 <Dd[x]>, <Rt> cond:4|1|1|1|0|0|0|opc1|0|Vd:4|Rt:4|1|0|1|1|D|0|0|1|0|0|0|0
+ {0x0fb00ef0, 0x0eb00a00, 4, VMOV_EQ_F32, 0x8011c04, instArgs{arg_Sd_Dd, arg_imm_vfp}}, // VMOV<c>.F<32,64> <Sd,Dd>, #<imm_vfp> cond:4|1|1|1|0|1|D|1|1|imm4H:4|Vd:4|1|0|1|sz|0|0|0|0|imm4L:4
+ {0x0fbf0ed0, 0x0eb00a40, 4, VMOV_EQ_F32, 0x8011c04, instArgs{arg_Sd_Dd, arg_Sm_Dm}}, // VMOV<c>.F<32,64> <Sd,Dd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|0|0|0|Vd:4|1|0|1|sz|0|1|M|0|Vm:4
+ {0x0fff0fff, 0x0ef10a10, 4, VMRS_EQ, 0x1c04, instArgs{arg_R_12_nzcv, arg_FPSCR}}, // VMRS<c> <Rt_nzcv>, FPSCR cond:4|1|1|1|0|1|1|1|1|0|0|0|1|Rt:4|1|0|1|0|0|0|0|1|0|0|0|0
+ {0x0fff0fff, 0x0ee10a10, 4, VMSR_EQ, 0x1c04, instArgs{arg_FPSCR, arg_R_12}}, // VMSR<c> FPSCR, <Rt> cond:4|1|1|1|0|1|1|1|0|0|0|0|1|Rt:4|1|0|1|0|0|0|0|1|0|0|0|0
+ {0x0fb00e50, 0x0e200a00, 4, VMUL_EQ_F32, 0x8011c04, instArgs{arg_Sd_Dd, arg_Sn_Dn, arg_Sm_Dm}}, // VMUL<c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|1|0|Vn:4|Vd:4|1|0|1|sz|N|0|M|0|Vm:4
+ {0x0fbf0ed0, 0x0eb10a40, 4, VNEG_EQ_F32, 0x8011c04, instArgs{arg_Sd_Dd, arg_Sm_Dm}}, // VNEG<c>.F<32,64> <Sd,Dd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|0|0|1|Vd:4|1|0|1|sz|0|1|M|0|Vm:4
+ {0x0fb00e10, 0x0e100a00, 4, VNMLS_EQ_F32, 0x60108011c04, instArgs{arg_Sd_Dd, arg_Sn_Dn, arg_Sm_Dm}}, // VN<MLS,MLA><c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|0|1|Vn:4|Vd:4|1|0|1|sz|N|op|M|0|Vm:4
+ {0x0fb00e50, 0x0e200a40, 4, VNMUL_EQ_F32, 0x8011c04, instArgs{arg_Sd_Dd, arg_Sn_Dn, arg_Sm_Dm}}, // VNMUL<c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|1|0|Vn:4|Vd:4|1|0|1|sz|N|1|M|0|Vm:4
+ {0x0fbf0ed0, 0x0eb10ac0, 4, VSQRT_EQ_F32, 0x8011c04, instArgs{arg_Sd_Dd, arg_Sm_Dm}}, // VSQRT<c>.F<32,64> <Sd,Dd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|0|0|1|Vd:4|1|0|1|sz|1|1|M|0|Vm:4
+ {0x0f300e00, 0x0d000a00, 4, VSTR_EQ, 0x1c04, instArgs{arg_Sd_Dd, arg_mem_R_pm_imm8at0_offset}}, // VSTR<c> <Sd,Dd>, [<Rn>{,#+/-<imm8>}] cond:4|1|1|0|1|U|D|0|0|Rn:4|Vd:4|1|0|1|sz|imm8:8
+ {0x0fb00e50, 0x0e300a40, 4, VSUB_EQ_F32, 0x8011c04, instArgs{arg_Sd_Dd, arg_Sn_Dn, arg_Sm_Dm}}, // VSUB<c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|1|1|Vn:4|Vd:4|1|0|1|sz|N|1|M|0|Vm:4
+ {0x0fffffff, 0x0320f002, 4, WFE_EQ, 0x1c04, instArgs{}}, // WFE<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|1|0
+ {0x0fff00ff, 0x0320f002, 3, WFE_EQ, 0x1c04, instArgs{}}, // WFE<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|1|0
+ {0x0fffffff, 0x0320f003, 4, WFI_EQ, 0x1c04, instArgs{}}, // WFI<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|1|1
+ {0x0fff00ff, 0x0320f003, 3, WFI_EQ, 0x1c04, instArgs{}}, // WFI<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|1|1
+ {0x0fffffff, 0x0320f001, 4, YIELD_EQ, 0x1c04, instArgs{}}, // YIELD<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|0|1
+ {0x0fff00ff, 0x0320f001, 3, YIELD_EQ, 0x1c04, instArgs{}}, // YIELD<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|0|1
+ {0xffffffff, 0xf7fabcfd, 4, UNDEF, 0x0, instArgs{}}, // UNDEF 1|1|1|1|0|1|1|1|1|1|1|1|1|0|1|0|1|0|1|1|1|1|0|0|1|1|1|1|1|1|0|1
+}
diff --git a/src/cmd/internal/rsc.io/arm/armasm/testdata/Makefile b/src/cmd/internal/rsc.io/arm/armasm/testdata/Makefile
new file mode 100644
index 000000000..1adab6851
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/testdata/Makefile
@@ -0,0 +1,5 @@
+newdecode.txt:
+ cd ..; go test -cover -run 'ObjdumpARMCond' -v -timeout 10h -printtests -long 2>&1 | tee log
+ cd ..; go test -cover -run 'ObjdumpARMUncond' -v -timeout 10h -printtests -long 2>&1 | tee -a log
+ egrep ' (gnu|plan9) ' ../log |sort >newdecode.txt
+
diff --git a/src/cmd/internal/rsc.io/arm/armasm/testdata/decode.txt b/src/cmd/internal/rsc.io/arm/armasm/testdata/decode.txt
new file mode 100644
index 000000000..cc1ea0abe
--- /dev/null
+++ b/src/cmd/internal/rsc.io/arm/armasm/testdata/decode.txt
@@ -0,0 +1,306 @@
+000001f1| 1 gnu setend le
+00100f61| 1 gnu mrsvs r1, apsr
+00f02053| 1 gnu noppl
+00f0d4f4| 1 gnu pli [r4]
+01f020d3| 1 gnu yieldle
+02002d59| 1 gnu stmdbpl sp!, {r1}
+021da9d8| 1 gnu stmle r9!, {r1, r8, sl, fp, ip}
+02c0b071| 1 gnu movsvc ip, r2
+02f02073| 1 gnu wfevc
+03f02013| 1 gnu wfine
+03f05df7| 1 gnu pld [sp, -r3]
+04009d34| 1 gnu popcc {r0}
+043a52b1| 1 gnu cmplt r2, r4, lsl #20
+04402de5| 1 gnu push {r4}
+045b148d| 1 gnu vldrhi d5, [r4, #-16]
+04f02093| 1 gnu sevls
+0793eab0| 1 gnu rsclt r9, sl, r7, lsl #6
+079bfb9e| 1 gnu vmovls.f64 d25, #183
+0a4fc9d3| 1 gnu bicle r4, r9, #10, 30
+0bac7ab6| 1 gnu ldrbtlt sl, [sl], -fp, lsl #24
+0c2aee44| 1 gnu strbtmi r2, [lr], #2572
+0c4bb000| 1 gnu adcseq r4, r0, ip, lsl #22
+0e26d561| 1 gnu bicsvs r2, r5, lr, lsl #12
+0f0fa011| 1 gnu lslne r0, pc, #30
+0fa448e0| 1 gnu sub sl, r8, pc, lsl #8
+101af1de| 1 gnu vmrsle r1, fpscr
+108a0cee| 1 gnu vmov s24, r8
+108a1dae| 1 gnu vmovge r8, s26
+108ae14e| 1 gnu vmsrmi fpscr, r8
+10faf1ae| 1 gnu vmrsge apsr_nzcv, fpscr
+10fb052e| 1 gnu vmovcs.32 d5[0], pc
+11c902b7| 1 gnu smladlt r2, r1, r9, ip
+11ef5b16| 1 gnu uadd16ne lr, fp, r1
+12fa87a7| 1 gnu usad8ge r7, r2, sl
+135f2956| 1 gnu qadd16pl r5, r9, r3
+13de9aa1| 1 gnu orrsge sp, sl, r3, lsl lr
+145c0e40| 1 gnu andmi r5, lr, r4, lsl ip
+150f7fd6| 1 gnu uhadd16le r0, pc, r5
+15b9bf12| 1 gnu adcsne fp, pc, #344064
+16373391| 1 gnu teqls r3, r6, lsl r7
+19ef1966| 1 gnu sadd16vs lr, r9, r9
+1ab0b091| 1 gnu lslsls fp, sl, r0
+1b9f6fe6| 1 gnu uqadd16 r9, pc, fp
+1bb58557| 1 gnu usada8pl r5, fp, r5, fp
+1beff8e0| 1 gnu rscs lr, r8, fp, lsl pc
+1caff0e6| 1 gnu usat sl, #16, ip, lsl #30
+1d0f3d36| 1 gnu shadd16cc r0, sp, sp
+1dca1d52| 1 gnu andspl ip, sp, #118784
+1e4891d0| 1 gnu addsle r4, r1, lr, lsl r8
+1f0889e6| 1 gnu pkhbt r0, r9, pc, lsl #16
+1f1f6fe1| 1 gnu clz r1, pc
+1f26d157| 1 gnu bfcpl r2, #12, #6
+1ff07ff5| 1 gnu clrex
+1fff2fd1| 1 gnu bxle pc
+20f153f6| 1 gnu pli [r3, -r0, lsr #2]
+21047013| 1 gnu cmnne r0, #553648128
+21c2eb8b| 1 gnu blhi .-0x50f778
+21c2ebfb| 1 gnu blx .-0x50f776
+21fa62ee| 1 gnu vmul.f32 s31, s4, s3
+23005720| 1 gnu subscs r0, r7, r3, lsr #32
+236a303e| 1 gnu vaddcc.f32 s12, s0, s7
+23f055f6| 1 gnu pli [r5, -r3, lsr #32]
+2430a031| 1 gnu lsrcc r3, r4, #32
+245d0803| 1 gnu movweq r5, #36132
+251a86be| 1 gnu vdivlt.f32 s2, s12, s11
+25db7b81| 1 gnu cmnhi fp, r5, lsr #22
+26bc3553| 1 gnu teqpl r5, #9728
+277c2d69| 1 gnu pushvs {r0, r1, r2, r5, sl, fp, ip, sp, lr}
+29fc1cf5| 1 gnu pldw [ip, #-3113]
+29ff2fc1| 1 gnu bxjgt r9
+2decd9c0| 1 gnu sbcsgt lr, r9, sp, lsr #24
+30fa5e47| 1 gnu smmulrmi lr, r0, sl
+316f64d6| 1 gnu uqasxle r6, r4, r1
+323f5da6| 1 gnu uasxge r3, sp, r2
+327fe5e6| 1 gnu usat16 r7, #5, r2
+330151e3| 1 gnu cmp r1, #-1073741812
+34af2ae6| 1 gnu qasx sl, sl, r4
+35fd3710| 1 gnu eorsne pc, r7, r5, lsr sp
+36def1c1| 1 gnu mvnsgt sp, r6, lsr lr
+3801b061| 1 gnu lsrsvs r0, r8, r1
+38985477| 1 gnu smmlarvc r4, r8, r8, r9
+3a2fbfa6| 1 gnu revge r2, sl
+3a3f1b06| 1 gnu sasxeq r3, fp, sl
+3a7fa346| 1 gnu ssat16mi r7, #4, sl
+3a943b94| 1 gnu ldrtls r9, [fp], #-1082
+3bf505e7| 1 gnu smuadx r5, fp, r5
+3cef7086| 1 gnu uhasxhi lr, r0, ip
+3e5f3ec6| 1 gnu shasxgt r5, lr, lr
+3f4fff86| 1 gnu rbithi r4, pc
+3faf4717| 1 gnu smlaldxne sl, r7, pc, pc
+3fff2fc1| 1 gnu blxgt pc
+402bbf7e| 1 gnu vcvtvc.u16.f64 d2, d2, #16
+403ab5de| 1 gnu vcmple.f32 s6, #0
+40eb363e| 1 gnu vsubcc.f64 d14, d6, d0
+420f73d1| 1 gnu cmnle r3, r2, asr #30
+424a648e| 1 gnu vnmulhi.f32 s9, s8, s4
+4284d717| 1 gnu ldrbne r8, [r7, r2, asr #8]
+42a599c3| 1 gnu orrsgt sl, r9, #276824064
+42abf0be| 1 gnu vmovlt.f64 d26, d2
+446ea031| 1 gnu asrcc r6, r4, #28
+4a953557| 1 gnu ldrpl r9, [r5, -sl, asr #10]!
+4ab6f712| 1 gnu rscsne fp, r7, #77594624
+4af07ff5| 1 gnu dsb #10
+4df6def4| 1 gnu pli [lr, #1613]
+4efbf52e| 1 gnu vcmpcs.f64 d31, #0
+50aaac79| 1 gnu stmibvc ip!, {r4, r6, r9, fp, sp, pc}
+50caf011| 1 gnu mvnsne ip, r0, asr sl
+50f04961| 1 gnu qdaddvs pc, r0, r9
+51282008| 1 gnu stmdaeq r0!, {r0, r4, r6, fp, sp}
+52bf6576| 1 gnu uqsaxvc fp, r5, r2
+5345c9d0| 1 gnu sbcle r4, r9, r3, asr r5
+538f5e46| 1 gnu usaxmi r8, lr, r3
+54106d31| 1 gnu qdsubcc r1, r4, sp
+56e0e557| 1 gnu ubfxpl lr, r6, #0, #6
+57073d11| 1 gnu teqne sp, r7, asr r7
+58bb0aa9| 1 gnu stmdbge sl, {r3, r4, r6, r8, r9, fp, ip, sp, pc}
+58f007b1| 1 gnu qaddlt pc, r8, r7
+59fd0e77| 1 gnu smusdvc lr, r9, sp
+5ab7f1c5| 1 gnu ldrbgt fp, [r1, #1882]!
+5abf23c6| 1 gnu qsaxgt fp, r3, sl
+5b8f1c96| 1 gnu ssaxls r8, ip, fp
+5b98ab97| 1 gnu sbfxls r9, fp, #16, #12
+5bc9b041| 1 gnu asrsmi ip, fp, r9
+5bf07ff5| 1 gnu dmb #11
+5c102b81| 1 gnu qsubhi r1, ip, fp
+5caa49e1| 1 gnu qdadd sl, ip, r9
+5d3f7226| 1 gnu uhsaxcs r3, r2, sp
+5db55470| 1 gnu subsvc fp, r4, sp, asr r5
+5ef14387| 1 gnu smlsldhi pc, r3, lr, r1
+5f540a11| 1 gnu qaddne r5, pc, sl
+5f9079d1| 1 gnu cmnle r9, pc, asr r0
+5faf3f66| 1 gnu shsaxvs sl, pc, pc
+605071d7| 1 gnu ldrble r5, [r1, -r0, rrx]!
+614adc76| 1 gnu ldrbvc r4, [ip], r1, ror #20
+616b9e42| 1 gnu addsmi r6, lr, #99328
+62c84f15| 1 gnu strbne ip, [pc, #-2146]
+62f051f7| 1 gnu pld [r1, -r2, rrx]
+6346c393| 1 gnu bicls r4, r3, #103809024
+654abbae| 1 gnu vcvtge.f32.u16 s8, s8, #5
+65a5f0e3| 1 gnu mvns sl, #423624704
+65f796f7| 1 gnu pldw [r6, r5, ror #14]
+670bb12e| 1 gnu vnegcs.f64 d0, d23
+67903731| 1 gnu teqcc r7, r7, rrx
+68ddc637| 1 gnu strbcc sp, [r6, r8, ror #26]
+695b3ab6| 1 gnu ldrtlt r5, [sl], -r9, ror #22
+697cfc71| 1 gnu mvnsvc r7, r9, ror #24
+6a0ab3ee| 1 gnu vcvtb.f16.f32 s0, s21
+6ad9ad54| 1 gnu strtpl sp, [sp], #2410
+6af07ff5| 1 gnu isb #10
+6afa6f10| 1 gnu rsbne pc, pc, sl, ror #20
+6d5b19ee| 1 gnu vnmla.f64 d5, d9, d29
+6d60b071| 1 gnu rrxsvc r6, sp
+6df754f7| 1 gnu pld [r4, -sp, ror #14]
+70065821| 1 gnu cmpcs r8, r0, ror r6
+7050ed86| 1 gnu uxtabhi r5, sp, r0
+715f1186| 1 gnu ssub16hi r5, r1, r1
+716c9805| 1 gnu ldreq r6, [r8, #3185]
+718d5ab1| 1 gnu cmplt sl, r1, ror sp
+71c8cfb6| 1 gnu uxtb16lt ip, r1, ror #16
+7294af06| 1 gnu sxtbeq r9, r2, ror #8
+72c0bac6| 1 gnu sxtahgt ip, sl, r2
+730f6716| 1 gnu uqsub16ne r0, r7, r3
+73608f46| 1 gnu sxtb16mi r6, r3
+73687f22| 1 gnu rsbscs r6, pc, #7536640
+74308816| 1 gnu sxtab16ne r3, r8, r4
+757f3456| 1 gnu shsub16pl r7, r4, r5
+77788016| 1 gnu sxtab16ne r7, r0, r7, ror #16
+78061671| 1 gnu tstvc r6, r8, ror r6
+780a2fe1| 1 gnu bkpt 0xf0a8
+7850abd6| 1 gnu sxtable r5, fp, r8
+792cef26| 1 gnu uxtbcs r2, r9, ror #24
+799eb8e0| 1 gnu adcs r9, r8, r9, ror lr
+799f5726| 1 gnu usub16cs r9, r7, r9
+79d0bf16| 1 gnu sxthne sp, r9
+7a037ba1| 1 gnu cmnge fp, sl, ror r3
+7b0f2566| 1 gnu qsub16vs r0, r5, fp
+7b79dd51| 1 gnu bicspl r7, sp, fp, ror r9
+7b9a9f1d| 1 gnu vldrne s18, [pc, #492]
+7c70cea6| 1 gnu uxtab16ge r7, lr, ip
+7d48f966| 1 gnu uxtahvs r4, r9, sp, ror #16
+7d5c13a1| 1 gnu tstge r3, sp, ror ip
+7e0001f1| 1 gnu setend le
+7e1c0ba7| 1 gnu smlsdxge fp, lr, ip, r1
+7e567e40| 1 gnu rsbsmi r5, lr, lr, ror r6
+7e8f73b6| 1 gnu uhsub16lt r8, r3, lr
+7ef0ffd6| 1 gnu uxthle pc, lr
+7faaa011| 1 gnu rorne sl, pc, sl
+81f19af7| 1 gnu pldw [sl, r1, lsl #3]
+82033901| 1 gnu teqeq r9, r2, lsl #7
+82f316f5| 1 gnu pldw [r6, #-898]
+830201f1| 1 gnu setend be
+838a3b91| 1 gnu teqls fp, r3, lsl #21
+8408af2f| 1 gnu svccs 0x00af0884
+884201d1| 1 gnu smlabble r1, r8, r2, r4
+8aa12e31| 1 gnu smlawbcc lr, sl, r1, sl
+8b9b99c0| 1 gnu addsgt r9, r9, fp, lsl #23
+8c005c81| 1 gnu cmphi ip, ip, lsl #1
+8fb429c6| 1 gnu strtgt fp, [r9], -pc, lsl #9
+907b1f9e| 1 gnu vmovls.32 r7, d31[0]
+91975f25| 1 gnu ldrbcs r9, [pc, #-1937]
+91b010e3| 1 gnu tst r0, #145
+927facb1| 1 gnu strexdlt r7, r2, [ip]
+92904c91| 1 gnu swpbls r9, r2, [ip]
+92af1226| 1 gnu sadd8cs sl, r2, r2
+92b28c70| 1 gnu umullvc fp, ip, r2, r2
+945f68a6| 1 gnu uqadd8ge r5, r8, r4
+950b2560| 1 gnu mlavs r5, r5, fp, r0
+969fcf71| 1 gnu strexbvc r9, r6, [pc]
+96cf35e6| 1 gnu shadd8 ip, r5, r6
+98060eb0| 1 gnu mullt lr, r8, r6
+9843fb93| 1 gnu mvnsls r4, #152, 6
+9a3fe2b0| 1 gnu smlallt r3, r2, sl, pc
+9aef58b6| 1 gnu uadd8lt lr, r8, sl
+9afcdff5| 1 gnu pld [pc, #3226]
+9c221810| 1 gnu mulsne r8, ip, r2
+9c3bc9dd| 1 gnu vstrle d19, [r9, #624]
+9c5f2606| 1 gnu qadd8eq r5, r6, ip
+9d87dac0| 1 gnu smullsgt r8, sl, sp, r7
+9e0f7c86| 1 gnu uhadd8hi r0, ip, lr
+9e814560| 1 gnu umaalvs r8, r5, lr, r1
+9e9f8dc1| 1 gnu strexgt r9, lr, [sp]
+9ec3c9d7| 1 gnu bfile ip, lr, #7, #3
+9ed26d90| 1 gnu mlsls sp, lr, r2, sp
+9f7fd9c1| 1 gnu ldrexbgt r7, [r9]
+9f7fea91| 1 gnu strexhls r7, pc, [sl]
+9f9f9921| 1 gnu ldrexcs r9, [r9]
+9faffd21| 1 gnu ldrexhcs sl, [sp]
+9fcfbd61| 1 gnu ldrexdvs ip, [sp]
+9ff7a710| 1 gnu umlalne pc, r7, pc, r7
+a05459d3| 1 gnu cmple r9, #160, 8
+a3062be1| 1 gnu smulwb fp, r3, r6
+a68a92b1| 1 gnu orrslt r8, r2, r6, lsr #21
+abff55f6| 1 gnu pli [r5, -fp, lsr #31]
+addbf8ea| 1 gnu b .-0x1c9148
+ae79b021| 1 gnu lsrscs r7, lr, #19
+b590a3b1| 1 gnu strhlt r9, [r3, r5]!
+b5b2e390| 1 gnu strhtls fp, [r3], #37
+b6ac4e30| 1 gnu strhcc sl, [lr], #-198
+b73fff86| 1 gnu revshhi r3, r7
+b75fbfc6| 1 gnu rev16gt r5, r7
+b80b7c80| 1 gnu ldrhthi r0, [ip], #-184
+b82035e0| 1 gnu ldrht r2, [r5], -r8
+b8877391| 1 gnu ldrhls r8, [r3, #-120]!
+b9703e41| 1 gnu ldrhmi r7, [lr, -r9]!
+b9cf8c16| 1 gnu selne ip, ip, r9
+bd81bd58| 1 gnu poppl {r0, r2, r3, r4, r5, r7, r8, pc}
+bdfdb469| 1 gnu ldmibvs r4!, {r0, r2, r3, r4, r5, r7, r8, sl, fp, ip, sp, lr, pc}
+beb02500| 1 gnu strhteq fp, [r5], -lr
+bf1a5e42| 1 gnu subsmi r1, lr, #782336
+c19a4d5e| 1 gnu vmlspl.f32 s19, s27, s2
+c1aab15e| 1 gnu vsqrtpl.f32 s20, s2
+c354b003| 1 gnu movseq r5, #-1023410176
+c4091dc1| 1 gnu tstgt sp, r4, asr #19
+c50e13a9| 1 gnu ldmdbge r3, {r0, r2, r6, r7, r9, sl, fp}
+c68c8637| 1 gnu strcc r8, [r6, r6, asr #25]
+c6ad48e3| 1 gnu movt sl, #36294
+c6f65ff5| 1 gnu pld [pc, #-1734]
+c8a92f10| 1 gnu eorne sl, pc, r8, asr #19
+c9016b61| 1 gnu smulbtvs fp, r9, r1
+cadbf49e| 1 gnu vcmpels.f64 d29, d10
+ce9de476| 1 gnu strbtvc r9, [r4], lr, asr #27
+cf3c1ab1| 1 gnu tstlt sl, pc, asr #25
+d355aab6| 1 gnu ssatlt r5, #11, r3, asr #11
+d4f4df10| 1 gnu ldrsbne pc, [pc], #68
+d6530d61| 1 gnu ldrdvs r5, [sp, -r6]
+d74d7800| 1 gnu ldrsbteq r4, [r8], #-215
+d9703680| 1 gnu ldrsbthi r7, [r6], -r9
+dbe003c0| 1 gnu ldrdgt lr, [r3], -fp
+dc709561| 1 gnu ldrsbvs r7, [r5, ip]
+dcc3b9c8| 1 gnu ldmgt r9!, {r2, r3, r4, r6, r7, r8, r9, lr, pc}
+debfa0e5| 1 gnu str fp, [r0, #4062]!
+dee062a1| 1 gnu ldrdge lr, [r2, #-14]!
+dfa05ab7| 1 gnu smmlslt sl, pc, r0, sl
+e02ef011| 1 gnu mvnsne r2, r0, ror #29
+e4d41718| 1 gnu ldmdane r7, {r2, r5, r6, r7, sl, ip, lr, pc}
+e6d0fe34| 1 gnu ldrbtcc sp, [lr], #230
+e73bf7be| 1 gnu vcvtlt.f32.f64 s7, d23
+e74e72b3| 1 gnu cmnlt r2, #3696
+e80bf07e| 1 gnu vabsvc.f64 d16, d24
+e9b5b001| 1 gnu rorseq fp, r9, #11
+ea7bbdbe| 1 gnu vcvtlt.s32.f64 s14, d26
+ec063813| 1 gnu teqne r8, #236, 12
+ec0e49e1| 1 gnu smlaltt r0, r9, ip, lr
+ee4ab85e| 1 gnu vcvtpl.f32.s32 s8, s29
+ef461f25| 1 gnu ldrcs r4, [pc, #-1775]
+ef5fd002| 1 gnu sbcseq r5, r0, #956
+f4cf1d36| 1 gnu ssub8cc ip, sp, r4
+f67f73b6| 1 gnu uhsub8lt r7, r3, r6
+f6e09ca0| 1 gnu ldrshge lr, [ip], r6
+f7702e32| 1 gnu eorcc r7, lr, #247
+fa4dcf20| 1 gnu strdcs r4, [pc], #218
+fac03720| 1 gnu ldrshtcs ip, [r7], -sl
+fc0f64c6| 1 gnu uqsub8gt r0, r4, ip
+fc28f481| 1 gnu ldrshhi r2, [r4, #140]!
+fc300560| 1 gnu strdvs r3, [r5], -ip
+fcacfc70| 1 gnu ldrshtvc sl, [ip], #204
+fdbcfaf7| 1 gnu undef
+fddf5c86| 1 gnu usub8hi sp, ip, sp
+fdf02013| 1 gnu dbgne #13
+fe0319e3| 1 gnu tst r9, #-134217725
+fe7f3116| 1 gnu shsub8ne r7, r1, lr
+ff4f2ac6| 1 gnu qsub8gt r4, sl, pc
+ff818c71| 1 gnu strdvc r8, [ip, pc]
+|6b5721d3 1 gnu error: unknown instruction
+|76452001 1 gnu error: unknown instruction
+|97acd647 1 gnu error: unknown instruction
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/Makefile b/src/cmd/internal/rsc.io/x86/x86asm/Makefile
new file mode 100644
index 000000000..9eb4557c1
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/Makefile
@@ -0,0 +1,3 @@
+tables.go: ../x86map/map.go ../x86.csv
+ go run ../x86map/map.go -fmt=decoder ../x86.csv >_tables.go && gofmt _tables.go >tables.go && rm _tables.go
+
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/decode.go b/src/cmd/internal/rsc.io/x86/x86asm/decode.go
new file mode 100644
index 000000000..91e8876c8
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/decode.go
@@ -0,0 +1,1616 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Table-driven decoding of x86 instructions.
+
+package x86asm
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "runtime"
+)
+
+// Set trace to true to cause the decoder to print the PC sequence
+// of the executed instruction codes. This is typically only useful
+// when you are running a test of a single input case.
+const trace = false
+
+// A decodeOp is a single instruction in the decoder bytecode program.
+//
+// The decodeOps correspond to consuming and conditionally branching
+// on input bytes, consuming additional fields, and then interpreting
+// consumed data as instruction arguments. The names of the xRead and xArg
+// operations are taken from the Intel manual conventions, for example
+// Volume 2, Section 3.1.1, page 487 of
+// http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf
+//
+// The actual decoding program is generated by ../x86map.
+//
+// TODO(rsc): We may be able to merge various of the memory operands
+// since we don't care about, say, the distinction between m80dec and m80bcd.
+// Similarly, mm and mm1 have identical meaning, as do xmm and xmm1.
+
+type decodeOp uint16
+
+const (
+ xFail decodeOp = iota // invalid instruction (return)
+ xMatch // completed match
+ xJump // jump to pc
+
+ xCondByte // switch on instruction byte value
+ xCondSlashR // read and switch on instruction /r value
+ xCondPrefix // switch on presence of instruction prefix
+ xCondIs64 // switch on 64-bit processor mode
+ xCondDataSize // switch on operand size
+ xCondAddrSize // switch on address size
+ xCondIsMem // switch on memory vs register argument
+
+ xSetOp // set instruction opcode
+
+ xReadSlashR // read /r
+ xReadIb // read ib
+ xReadIw // read iw
+ xReadId // read id
+ xReadIo // read io
+ xReadCb // read cb
+ xReadCw // read cw
+ xReadCd // read cd
+ xReadCp // read cp
+ xReadCm // read cm
+
+ xArg1 // arg 1
+ xArg3 // arg 3
+ xArgAL // arg AL
+ xArgAX // arg AX
+ xArgCL // arg CL
+ xArgCR0dashCR7 // arg CR0-CR7
+ xArgCS // arg CS
+ xArgDR0dashDR7 // arg DR0-DR7
+ xArgDS // arg DS
+ xArgDX // arg DX
+ xArgEAX // arg EAX
+ xArgEDX // arg EDX
+ xArgES // arg ES
+ xArgFS // arg FS
+ xArgGS // arg GS
+ xArgImm16 // arg imm16
+ xArgImm32 // arg imm32
+ xArgImm64 // arg imm64
+ xArgImm8 // arg imm8
+ xArgImm8u // arg imm8 but record as unsigned
+ xArgImm16u // arg imm8 but record as unsigned
+ xArgM // arg m
+ xArgM128 // arg m128
+ xArgM1428byte // arg m14/28byte
+ xArgM16 // arg m16
+ xArgM16and16 // arg m16&16
+ xArgM16and32 // arg m16&32
+ xArgM16and64 // arg m16&64
+ xArgM16colon16 // arg m16:16
+ xArgM16colon32 // arg m16:32
+ xArgM16colon64 // arg m16:64
+ xArgM16int // arg m16int
+ xArgM2byte // arg m2byte
+ xArgM32 // arg m32
+ xArgM32and32 // arg m32&32
+ xArgM32fp // arg m32fp
+ xArgM32int // arg m32int
+ xArgM512byte // arg m512byte
+ xArgM64 // arg m64
+ xArgM64fp // arg m64fp
+ xArgM64int // arg m64int
+ xArgM8 // arg m8
+ xArgM80bcd // arg m80bcd
+ xArgM80dec // arg m80dec
+ xArgM80fp // arg m80fp
+ xArgM94108byte // arg m94/108byte
+ xArgMm // arg mm
+ xArgMm1 // arg mm1
+ xArgMm2 // arg mm2
+ xArgMm2M64 // arg mm2/m64
+ xArgMmM32 // arg mm/m32
+ xArgMmM64 // arg mm/m64
+ xArgMem // arg mem
+ xArgMoffs16 // arg moffs16
+ xArgMoffs32 // arg moffs32
+ xArgMoffs64 // arg moffs64
+ xArgMoffs8 // arg moffs8
+ xArgPtr16colon16 // arg ptr16:16
+ xArgPtr16colon32 // arg ptr16:32
+ xArgR16 // arg r16
+ xArgR16op // arg r16 with +rw in opcode
+ xArgR32 // arg r32
+ xArgR32M16 // arg r32/m16
+ xArgR32M8 // arg r32/m8
+ xArgR32op // arg r32 with +rd in opcode
+ xArgR64 // arg r64
+ xArgR64M16 // arg r64/m16
+ xArgR64op // arg r64 with +rd in opcode
+ xArgR8 // arg r8
+ xArgR8op // arg r8 with +rb in opcode
+ xArgRAX // arg RAX
+ xArgRDX // arg RDX
+ xArgRM // arg r/m
+ xArgRM16 // arg r/m16
+ xArgRM32 // arg r/m32
+ xArgRM64 // arg r/m64
+ xArgRM8 // arg r/m8
+ xArgReg // arg reg
+ xArgRegM16 // arg reg/m16
+ xArgRegM32 // arg reg/m32
+ xArgRegM8 // arg reg/m8
+ xArgRel16 // arg rel16
+ xArgRel32 // arg rel32
+ xArgRel8 // arg rel8
+ xArgSS // arg SS
+ xArgST // arg ST, aka ST(0)
+ xArgSTi // arg ST(i) with +i in opcode
+ xArgSreg // arg Sreg
+ xArgTR0dashTR7 // arg TR0-TR7
+ xArgXmm // arg xmm
+ xArgXMM0 // arg <XMM0>
+ xArgXmm1 // arg xmm1
+ xArgXmm2 // arg xmm2
+ xArgXmm2M128 // arg xmm2/m128
+ xArgXmm2M16 // arg xmm2/m16
+ xArgXmm2M32 // arg xmm2/m32
+ xArgXmm2M64 // arg xmm2/m64
+ xArgXmmM128 // arg xmm/m128
+ xArgXmmM32 // arg xmm/m32
+ xArgXmmM64 // arg xmm/m64
+ xArgRmf16 // arg r/m16 but force mod=3
+ xArgRmf32 // arg r/m32 but force mod=3
+ xArgRmf64 // arg r/m64 but force mod=3
+)
+
+// instPrefix returns an Inst describing just one prefix byte.
+// It is only used if there is a prefix followed by an unintelligible
+// or invalid instruction byte sequence.
+func instPrefix(b byte, mode int) (Inst, error) {
+ // When tracing it is useful to see what called instPrefix to report an error.
+ if trace {
+ _, file, line, _ := runtime.Caller(1)
+ fmt.Printf("%s:%d\n", file, line)
+ }
+ p := Prefix(b)
+ switch p {
+ case PrefixDataSize:
+ if mode == 16 {
+ p = PrefixData32
+ } else {
+ p = PrefixData16
+ }
+ case PrefixAddrSize:
+ if mode == 32 {
+ p = PrefixAddr16
+ } else {
+ p = PrefixAddr32
+ }
+ }
+ // Note: using composite literal with Prefix key confuses 'bundle' tool.
+ inst := Inst{Len: 1}
+ inst.Prefix = Prefixes{p}
+ return inst, nil
+}
+
+// truncated reports a truncated instruction.
+// For now we use instPrefix but perhaps later we will return
+// a specific error here.
+func truncated(src []byte, mode int) (Inst, error) {
+ // return Inst{}, len(src), ErrTruncated
+ return instPrefix(src[0], mode) // too long
+}
+
+// These are the errors returned by Decode.
+var (
+ ErrInvalidMode = errors.New("invalid x86 mode in Decode")
+ ErrTruncated = errors.New("truncated instruction")
+ ErrUnrecognized = errors.New("unrecognized instruction")
+)
+
+// decoderCover records coverage information for which parts
+// of the byte code have been executed.
+// TODO(rsc): This is for testing. Only use this if a flag is given.
+var decoderCover []bool
+
+// Decode decodes the leading bytes in src as a single instruction.
+// The mode arguments specifies the assumed processor mode:
+// 16, 32, or 64 for 16-, 32-, and 64-bit execution modes.
+func Decode(src []byte, mode int) (inst Inst, err error) {
+ return decode1(src, mode, false)
+}
+
+// decode1 is the implementation of Decode but takes an extra
+// gnuCompat flag to cause it to change its behavior to mimic
+// bugs (or at least unique features) of GNU libopcodes as used
+// by objdump. We don't believe that logic is the right thing to do
+// in general, but when testing against libopcodes it simplifies the
+// comparison if we adjust a few small pieces of logic.
+// The affected logic is in the conditional branch for "mandatory" prefixes,
+// case xCondPrefix.
+func decode1(src []byte, mode int, gnuCompat bool) (Inst, error) {
+ switch mode {
+ case 16, 32, 64:
+ // ok
+ // TODO(rsc): 64-bit mode not tested, probably not working.
+ default:
+ return Inst{}, ErrInvalidMode
+ }
+
+ // Maximum instruction size is 15 bytes.
+ // If we need to read more, return 'truncated instruction.
+ if len(src) > 15 {
+ src = src[:15]
+ }
+
+ var (
+ // prefix decoding information
+ pos = 0 // position reading src
+ nprefix = 0 // number of prefixes
+ lockIndex = -1 // index of LOCK prefix in src and inst.Prefix
+ repIndex = -1 // index of REP/REPN prefix in src and inst.Prefix
+ segIndex = -1 // index of Group 2 prefix in src and inst.Prefix
+ dataSizeIndex = -1 // index of Group 3 prefix in src and inst.Prefix
+ addrSizeIndex = -1 // index of Group 4 prefix in src and inst.Prefix
+ rex Prefix // rex byte if present (or 0)
+ rexUsed Prefix // bits used in rex byte
+ rexIndex = -1 // index of rex byte
+
+ addrMode = mode // address mode (width in bits)
+ dataMode = mode // operand mode (width in bits)
+
+ // decoded ModR/M fields
+ haveModrm bool
+ modrm int
+ mod int
+ regop int
+ rm int
+
+ // if ModR/M is memory reference, Mem form
+ mem Mem
+ haveMem bool
+
+ // decoded SIB fields
+ haveSIB bool
+ sib int
+ scale int
+ index int
+ base int
+
+ // decoded immediate values
+ imm int64
+ imm8 int8
+ immc int64
+
+ // output
+ opshift int
+ inst Inst
+ narg int // number of arguments written to inst
+ )
+
+ if mode == 64 {
+ dataMode = 32
+ }
+
+ // Prefixes are certainly the most complex and underspecified part of
+ // decoding x86 instructions. Although the manuals say things like
+ // up to four prefixes, one from each group, nearly everyone seems to
+ // agree that in practice as many prefixes as possible, including multiple
+ // from a particular group or repetitions of a given prefix, can be used on
+ // an instruction, provided the total instruction length including prefixes
+ // does not exceed the agreed-upon maximum of 15 bytes.
+ // Everyone also agrees that if one of these prefixes is the LOCK prefix
+ // and the instruction is not one of the instructions that can be used with
+ // the LOCK prefix or if the destination is not a memory operand,
+ // then the instruction is invalid and produces the #UD exception.
+ // However, that is the end of any semblance of agreement.
+ //
+ // What happens if prefixes are given that conflict with other prefixes?
+ // For example, the memory segment overrides CS, DS, ES, FS, GS, SS
+ // conflict with each other: only one segment can be in effect.
+ // Disassemblers seem to agree that later prefixes take priority over
+ // earlier ones. I have not taken the time to write assembly programs
+ // to check to see if the hardware agrees.
+ //
+ // What happens if prefixes are given that have no meaning for the
+ // specific instruction to which they are attached? It depends.
+ // If they really have no meaning, they are ignored. However, a future
+ // processor may assign a different meaning. As a disassembler, we
+ // don't really know whether we're seeing a meaningless prefix or one
+ // whose meaning we simply haven't been told yet.
+ //
+ // Combining the two questions, what happens when conflicting
+ // extension prefixes are given? No one seems to know for sure.
+ // For example, MOVQ is 66 0F D6 /r, MOVDQ2Q is F2 0F D6 /r,
+ // and MOVQ2DQ is F3 0F D6 /r. What is '66 F2 F3 0F D6 /r'?
+ // Which prefix wins? See the xCondPrefix prefix for more.
+ //
+ // Writing assembly test cases to divine which interpretation the
+ // CPU uses might clarify the situation, but more likely it would
+ // make the situation even less clear.
+
+ // Read non-REX prefixes.
+ReadPrefixes:
+ for ; pos < len(src); pos++ {
+ p := Prefix(src[pos])
+ switch p {
+ default:
+ nprefix = pos
+ break ReadPrefixes
+
+ // Group 1 - lock and repeat prefixes
+ // According to Intel, there should only be one from this set,
+ // but according to AMD both can be present.
+ case 0xF0:
+ if lockIndex >= 0 {
+ inst.Prefix[lockIndex] |= PrefixIgnored
+ }
+ lockIndex = pos
+ case 0xF2, 0xF3:
+ if repIndex >= 0 {
+ inst.Prefix[repIndex] |= PrefixIgnored
+ }
+ repIndex = pos
+
+ // Group 2 - segment override / branch hints
+ case 0x26, 0x2E, 0x36, 0x3E:
+ if mode == 64 {
+ p |= PrefixIgnored
+ break
+ }
+ fallthrough
+ case 0x64, 0x65:
+ if segIndex >= 0 {
+ inst.Prefix[segIndex] |= PrefixIgnored
+ }
+ segIndex = pos
+
+ // Group 3 - operand size override
+ case 0x66:
+ if mode == 16 {
+ dataMode = 32
+ p = PrefixData32
+ } else {
+ dataMode = 16
+ p = PrefixData16
+ }
+ if dataSizeIndex >= 0 {
+ inst.Prefix[dataSizeIndex] |= PrefixIgnored
+ }
+ dataSizeIndex = pos
+
+ // Group 4 - address size override
+ case 0x67:
+ if mode == 32 {
+ addrMode = 16
+ p = PrefixAddr16
+ } else {
+ addrMode = 32
+ p = PrefixAddr32
+ }
+ if addrSizeIndex >= 0 {
+ inst.Prefix[addrSizeIndex] |= PrefixIgnored
+ }
+ addrSizeIndex = pos
+ }
+
+ if pos >= len(inst.Prefix) {
+ return instPrefix(src[0], mode) // too long
+ }
+
+ inst.Prefix[pos] = p
+ }
+
+ // Read REX prefix.
+ if pos < len(src) && mode == 64 && Prefix(src[pos]).IsREX() {
+ rex = Prefix(src[pos])
+ rexIndex = pos
+ if pos >= len(inst.Prefix) {
+ return instPrefix(src[0], mode) // too long
+ }
+ inst.Prefix[pos] = rex
+ pos++
+ if rex&PrefixREXW != 0 {
+ dataMode = 64
+ if dataSizeIndex >= 0 {
+ inst.Prefix[dataSizeIndex] |= PrefixIgnored
+ }
+ }
+ }
+
+ // Decode instruction stream, interpreting decoding instructions.
+ // opshift gives the shift to use when saving the next
+ // opcode byte into inst.Opcode.
+ opshift = 24
+ if decoderCover == nil {
+ decoderCover = make([]bool, len(decoder))
+ }
+
+ // Decode loop, executing decoder program.
+ var oldPC, prevPC int
+Decode:
+ for pc := 1; ; { // TODO uint
+ oldPC = prevPC
+ prevPC = pc
+ if trace {
+ println("run", pc)
+ }
+ x := decoder[pc]
+ decoderCover[pc] = true
+ pc++
+
+ // Read and decode ModR/M if needed by opcode.
+ switch decodeOp(x) {
+ case xCondSlashR, xReadSlashR:
+ if haveModrm {
+ return Inst{Len: pos}, errInternal
+ }
+ haveModrm = true
+ if pos >= len(src) {
+ return truncated(src, mode)
+ }
+ modrm = int(src[pos])
+ pos++
+ if opshift >= 0 {
+ inst.Opcode |= uint32(modrm) << uint(opshift)
+ opshift -= 8
+ }
+ mod = modrm >> 6
+ regop = (modrm >> 3) & 07
+ rm = modrm & 07
+ if rex&PrefixREXR != 0 {
+ rexUsed |= PrefixREXR
+ regop |= 8
+ }
+ if addrMode == 16 {
+ // 16-bit modrm form
+ if mod != 3 {
+ haveMem = true
+ mem = addr16[rm]
+ if rm == 6 && mod == 0 {
+ mem.Base = 0
+ }
+
+ // Consume disp16 if present.
+ if mod == 0 && rm == 6 || mod == 2 {
+ if pos+2 > len(src) {
+ return truncated(src, mode)
+ }
+ mem.Disp = int64(binary.LittleEndian.Uint16(src[pos:]))
+ pos += 2
+ }
+
+ // Consume disp8 if present.
+ if mod == 1 {
+ if pos >= len(src) {
+ return truncated(src, mode)
+ }
+ mem.Disp = int64(int8(src[pos]))
+ pos++
+ }
+ }
+ } else {
+ haveMem = mod != 3
+
+ // 32-bit or 64-bit form
+ // Consume SIB encoding if present.
+ if rm == 4 && mod != 3 {
+ haveSIB = true
+ if pos >= len(src) {
+ return truncated(src, mode)
+ }
+ sib = int(src[pos])
+ pos++
+ if opshift >= 0 {
+ inst.Opcode |= uint32(sib) << uint(opshift)
+ opshift -= 8
+ }
+ scale = sib >> 6
+ index = (sib >> 3) & 07
+ base = sib & 07
+ if rex&PrefixREXB != 0 {
+ rexUsed |= PrefixREXB
+ base |= 8
+ }
+ if rex&PrefixREXX != 0 {
+ rexUsed |= PrefixREXX
+ index |= 8
+ }
+
+ mem.Scale = 1 << uint(scale)
+ if index == 4 {
+ // no mem.Index
+ } else {
+ mem.Index = baseRegForBits(addrMode) + Reg(index)
+ }
+ if base&7 == 5 && mod == 0 {
+ // no mem.Base
+ } else {
+ mem.Base = baseRegForBits(addrMode) + Reg(base)
+ }
+ } else {
+ if rex&PrefixREXB != 0 {
+ rexUsed |= PrefixREXB
+ rm |= 8
+ }
+ if mod == 0 && rm&7 == 5 || rm&7 == 4 {
+ // base omitted
+ } else if mod != 3 {
+ mem.Base = baseRegForBits(addrMode) + Reg(rm)
+ }
+ }
+
+ // Consume disp32 if present.
+ if mod == 0 && (rm&7 == 5 || haveSIB && base&7 == 5) || mod == 2 {
+ if pos+4 > len(src) {
+ return truncated(src, mode)
+ }
+ mem.Disp = int64(binary.LittleEndian.Uint32(src[pos:]))
+ pos += 4
+ }
+
+ // Consume disp8 if present.
+ if mod == 1 {
+ if pos >= len(src) {
+ return truncated(src, mode)
+ }
+ mem.Disp = int64(int8(src[pos]))
+ pos++
+ }
+
+ // In 64-bit, mod=0 rm=5 is PC-relative instead of just disp.
+ // See Vol 2A. Table 2-7.
+ if mode == 64 && mod == 0 && rm&7 == 5 {
+ if addrMode == 32 {
+ mem.Base = EIP
+ } else {
+ mem.Base = RIP
+ }
+ }
+ }
+
+ if segIndex >= 0 {
+ mem.Segment = prefixToSegment(inst.Prefix[segIndex])
+ }
+ }
+
+ // Execute single opcode.
+ switch decodeOp(x) {
+ default:
+ println("bad op", x, "at", pc-1, "from", oldPC)
+ return Inst{Len: pos}, errInternal
+
+ case xFail:
+ inst.Op = 0
+ break Decode
+
+ case xMatch:
+ break Decode
+
+ case xJump:
+ pc = int(decoder[pc])
+
+ // Conditional branches.
+
+ case xCondByte:
+ if pos >= len(src) {
+ return truncated(src, mode)
+ }
+ b := src[pos]
+ n := int(decoder[pc])
+ pc++
+ for i := 0; i < n; i++ {
+ xb, xpc := decoder[pc], int(decoder[pc+1])
+ pc += 2
+ if b == byte(xb) {
+ pc = xpc
+ pos++
+ if opshift >= 0 {
+ inst.Opcode |= uint32(b) << uint(opshift)
+ opshift -= 8
+ }
+ continue Decode
+ }
+ }
+ // xCondByte is the only conditional with a fall through,
+ // so that it can be used to pick off special cases before
+ // an xCondSlash. If the fallthrough instruction is xFail,
+ // advance the position so that the decoded instruction
+ // size includes the byte we just compared against.
+ if decodeOp(decoder[pc]) == xJump {
+ pc = int(decoder[pc+1])
+ }
+ if decodeOp(decoder[pc]) == xFail {
+ pos++
+ }
+
+ case xCondIs64:
+ if mode == 64 {
+ pc = int(decoder[pc+1])
+ } else {
+ pc = int(decoder[pc])
+ }
+
+ case xCondIsMem:
+ mem := haveMem
+ if !haveModrm {
+ if pos >= len(src) {
+ return instPrefix(src[0], mode) // too long
+ }
+ mem = src[pos]>>6 != 3
+ }
+ if mem {
+ pc = int(decoder[pc+1])
+ } else {
+ pc = int(decoder[pc])
+ }
+
+ case xCondDataSize:
+ switch dataMode {
+ case 16:
+ if dataSizeIndex >= 0 {
+ inst.Prefix[dataSizeIndex] |= PrefixImplicit
+ }
+ pc = int(decoder[pc])
+ case 32:
+ if dataSizeIndex >= 0 {
+ inst.Prefix[dataSizeIndex] |= PrefixImplicit
+ }
+ pc = int(decoder[pc+1])
+ case 64:
+ rexUsed |= PrefixREXW
+ pc = int(decoder[pc+2])
+ }
+
+ case xCondAddrSize:
+ switch addrMode {
+ case 16:
+ if addrSizeIndex >= 0 {
+ inst.Prefix[addrSizeIndex] |= PrefixImplicit
+ }
+ pc = int(decoder[pc])
+ case 32:
+ if addrSizeIndex >= 0 {
+ inst.Prefix[addrSizeIndex] |= PrefixImplicit
+ }
+ pc = int(decoder[pc+1])
+ case 64:
+ pc = int(decoder[pc+2])
+ }
+
+ case xCondPrefix:
+ // Conditional branch based on presence or absence of prefixes.
+ // The conflict cases here are completely undocumented and
+ // differ significantly between GNU libopcodes and Intel xed.
+ // I have not written assembly code to divine what various CPUs
+ // do, but it wouldn't surprise me if they are not consistent either.
+ //
+ // The basic idea is to switch on the presence of a prefix, so that
+ // for example:
+ //
+ // xCondPrefix, 4
+ // 0xF3, 123,
+ // 0xF2, 234,
+ // 0x66, 345,
+ // 0, 456
+ //
+ // branch to 123 if the F3 prefix is present, 234 if the F2 prefix
+ // is present, 66 if the 345 prefix is present, and 456 otherwise.
+ // The prefixes are given in descending order so that the 0 will be last.
+ //
+ // It is unclear what should happen if multiple conditions are
+ // satisfied: what if F2 and F3 are both present, or if 66 and F2
+ // are present, or if all three are present? The one chosen becomes
+ // part of the opcode and the others do not. Perhaps the answer
+ // depends on the specific opcodes in question.
+ //
+ // The only clear example is that CRC32 is F2 0F 38 F1 /r, and
+ // it comes in 16-bit and 32-bit forms based on the 66 prefix,
+ // so 66 F2 0F 38 F1 /r should be treated as F2 taking priority,
+ // with the 66 being only an operand size override, and probably
+ // F2 66 0F 38 F1 /r should be treated the same.
+ // Perhaps that rule is specific to the case of CRC32, since no
+ // 66 0F 38 F1 instruction is defined (today) (that we know of).
+ // However, both libopcodes and xed seem to generalize this
+ // example and choose F2/F3 in preference to 66, and we
+ // do the same.
+ //
+ // Next, what if both F2 and F3 are present? Which wins?
+ // The Intel xed rule, and ours, is that the one that occurs last wins.
+ // The GNU libopcodes rule, which we implement only in gnuCompat mode,
+ // is that F3 beats F2 unless F3 has no special meaning, in which
+ // case F3 can be a modified on an F2 special meaning.
+ //
+ // Concretely,
+ // 66 0F D6 /r is MOVQ
+ // F2 0F D6 /r is MOVDQ2Q
+ // F3 0F D6 /r is MOVQ2DQ.
+ //
+ // F2 66 0F D6 /r is 66 + MOVDQ2Q always.
+ // 66 F2 0F D6 /r is 66 + MOVDQ2Q always.
+ // F3 66 0F D6 /r is 66 + MOVQ2DQ always.
+ // 66 F3 0F D6 /r is 66 + MOVQ2DQ always.
+ // F2 F3 0F D6 /r is F2 + MOVQ2DQ always.
+ // F3 F2 0F D6 /r is F3 + MOVQ2DQ in Intel xed, but F2 + MOVQ2DQ in GNU libopcodes.
+ // Adding 66 anywhere in the prefix section of the
+ // last two cases does not change the outcome.
+ //
+ // Finally, what if there is a variant in which 66 is a mandatory
+ // prefix rather than an operand size override, but we know of
+ // no corresponding F2/F3 form, and we see both F2/F3 and 66.
+ // Does F2/F3 still take priority, so that the result is an unknown
+ // instruction, or does the 66 take priority, so that the extended
+ // 66 instruction should be interpreted as having a REP/REPN prefix?
+ // Intel xed does the former and GNU libopcodes does the latter.
+ // We side with Intel xed, unless we are trying to match libopcodes
+ // more closely during the comparison-based test suite.
+ //
+ // In 64-bit mode REX.W is another valid prefix to test for, but
+ // there is less ambiguity about that. When present, REX.W is
+ // always the first entry in the table.
+ n := int(decoder[pc])
+ pc++
+ sawF3 := false
+ for j := 0; j < n; j++ {
+ prefix := Prefix(decoder[pc+2*j])
+ if prefix.IsREX() {
+ rexUsed |= prefix
+ if rex&prefix == prefix {
+ pc = int(decoder[pc+2*j+1])
+ continue Decode
+ }
+ continue
+ }
+ ok := false
+ if prefix == 0 {
+ ok = true
+ } else if prefix.IsREX() {
+ rexUsed |= prefix
+ if rex&prefix == prefix {
+ ok = true
+ }
+ } else {
+ if prefix == 0xF3 {
+ sawF3 = true
+ }
+ switch prefix {
+ case PrefixLOCK:
+ if lockIndex >= 0 {
+ inst.Prefix[lockIndex] |= PrefixImplicit
+ ok = true
+ }
+ case PrefixREP, PrefixREPN:
+ if repIndex >= 0 && inst.Prefix[repIndex]&0xFF == prefix {
+ inst.Prefix[repIndex] |= PrefixImplicit
+ ok = true
+ }
+ if gnuCompat && !ok && prefix == 0xF3 && repIndex >= 0 && (j+1 >= n || decoder[pc+2*(j+1)] != 0xF2) {
+ // Check to see if earlier prefix F3 is present.
+ for i := repIndex - 1; i >= 0; i-- {
+ if inst.Prefix[i]&0xFF == prefix {
+ inst.Prefix[i] |= PrefixImplicit
+ ok = true
+ }
+ }
+ }
+ if gnuCompat && !ok && prefix == 0xF2 && repIndex >= 0 && !sawF3 && inst.Prefix[repIndex]&0xFF == 0xF3 {
+ // Check to see if earlier prefix F2 is present.
+ for i := repIndex - 1; i >= 0; i-- {
+ if inst.Prefix[i]&0xFF == prefix {
+ inst.Prefix[i] |= PrefixImplicit
+ ok = true
+ }
+ }
+ }
+ case PrefixCS, PrefixDS, PrefixES, PrefixFS, PrefixGS, PrefixSS:
+ if segIndex >= 0 && inst.Prefix[segIndex]&0xFF == prefix {
+ inst.Prefix[segIndex] |= PrefixImplicit
+ ok = true
+ }
+ case PrefixDataSize:
+ // Looking for 66 mandatory prefix.
+ // The F2/F3 mandatory prefixes take priority when both are present.
+ // If we got this far in the xCondPrefix table and an F2/F3 is present,
+ // it means the table didn't have any entry for that prefix. But if 66 has
+ // special meaning, perhaps F2/F3 have special meaning that we don't know.
+ // Intel xed works this way, treating the F2/F3 as inhibiting the 66.
+ // GNU libopcodes allows the 66 to match. We do what Intel xed does
+ // except in gnuCompat mode.
+ if repIndex >= 0 && !gnuCompat {
+ inst.Op = 0
+ break Decode
+ }
+ if dataSizeIndex >= 0 {
+ inst.Prefix[dataSizeIndex] |= PrefixImplicit
+ ok = true
+ }
+ case PrefixAddrSize:
+ if addrSizeIndex >= 0 {
+ inst.Prefix[addrSizeIndex] |= PrefixImplicit
+ ok = true
+ }
+ }
+ }
+ if ok {
+ pc = int(decoder[pc+2*j+1])
+ continue Decode
+ }
+ }
+ inst.Op = 0
+ break Decode
+
+ case xCondSlashR:
+ pc = int(decoder[pc+regop&7])
+
+ // Input.
+
+ case xReadSlashR:
+ // done above
+
+ case xReadIb:
+ if pos >= len(src) {
+ return truncated(src, mode)
+ }
+ imm8 = int8(src[pos])
+ pos++
+
+ case xReadIw:
+ if pos+2 > len(src) {
+ return truncated(src, mode)
+ }
+ imm = int64(binary.LittleEndian.Uint16(src[pos:]))
+ pos += 2
+
+ case xReadId:
+ if pos+4 > len(src) {
+ return truncated(src, mode)
+ }
+ imm = int64(binary.LittleEndian.Uint32(src[pos:]))
+ pos += 4
+
+ case xReadIo:
+ if pos+8 > len(src) {
+ return truncated(src, mode)
+ }
+ imm = int64(binary.LittleEndian.Uint64(src[pos:]))
+ pos += 8
+
+ case xReadCb:
+ if pos >= len(src) {
+ return truncated(src, mode)
+ }
+ immc = int64(src[pos])
+ pos++
+
+ case xReadCw:
+ if pos+2 > len(src) {
+ return truncated(src, mode)
+ }
+ immc = int64(binary.LittleEndian.Uint16(src[pos:]))
+ pos += 2
+
+ case xReadCm:
+ if addrMode == 16 {
+ if pos+2 > len(src) {
+ return truncated(src, mode)
+ }
+ immc = int64(binary.LittleEndian.Uint16(src[pos:]))
+ pos += 2
+ } else if addrMode == 32 {
+ if pos+4 > len(src) {
+ return truncated(src, mode)
+ }
+ immc = int64(binary.LittleEndian.Uint32(src[pos:]))
+ pos += 4
+ } else {
+ if pos+8 > len(src) {
+ return truncated(src, mode)
+ }
+ immc = int64(binary.LittleEndian.Uint64(src[pos:]))
+ pos += 8
+ }
+ case xReadCd:
+ if pos+4 > len(src) {
+ return truncated(src, mode)
+ }
+ immc = int64(binary.LittleEndian.Uint32(src[pos:]))
+ pos += 4
+
+ case xReadCp:
+ if pos+6 > len(src) {
+ return truncated(src, mode)
+ }
+ w := binary.LittleEndian.Uint32(src[pos:])
+ w2 := binary.LittleEndian.Uint16(src[pos+4:])
+ immc = int64(w2)<<32 | int64(w)
+ pos += 6
+
+ // Output.
+
+ case xSetOp:
+ inst.Op = Op(decoder[pc])
+ pc++
+
+ case xArg1,
+ xArg3,
+ xArgAL,
+ xArgAX,
+ xArgCL,
+ xArgCS,
+ xArgDS,
+ xArgDX,
+ xArgEAX,
+ xArgEDX,
+ xArgES,
+ xArgFS,
+ xArgGS,
+ xArgRAX,
+ xArgRDX,
+ xArgSS,
+ xArgST,
+ xArgXMM0:
+ inst.Args[narg] = fixedArg[x]
+ narg++
+
+ case xArgImm8:
+ inst.Args[narg] = Imm(imm8)
+ narg++
+
+ case xArgImm8u:
+ inst.Args[narg] = Imm(uint8(imm8))
+ narg++
+
+ case xArgImm16:
+ inst.Args[narg] = Imm(int16(imm))
+ narg++
+
+ case xArgImm16u:
+ inst.Args[narg] = Imm(uint16(imm))
+ narg++
+
+ case xArgImm32:
+ inst.Args[narg] = Imm(int32(imm))
+ narg++
+
+ case xArgImm64:
+ inst.Args[narg] = Imm(imm)
+ narg++
+
+ case xArgM,
+ xArgM128,
+ xArgM1428byte,
+ xArgM16,
+ xArgM16and16,
+ xArgM16and32,
+ xArgM16and64,
+ xArgM16colon16,
+ xArgM16colon32,
+ xArgM16colon64,
+ xArgM16int,
+ xArgM2byte,
+ xArgM32,
+ xArgM32and32,
+ xArgM32fp,
+ xArgM32int,
+ xArgM512byte,
+ xArgM64,
+ xArgM64fp,
+ xArgM64int,
+ xArgM8,
+ xArgM80bcd,
+ xArgM80dec,
+ xArgM80fp,
+ xArgM94108byte,
+ xArgMem:
+ if !haveMem {
+ inst.Op = 0
+ break Decode
+ }
+ inst.Args[narg] = mem
+ inst.MemBytes = int(memBytes[decodeOp(x)])
+ narg++
+
+ case xArgPtr16colon16:
+ inst.Args[narg] = Imm(immc >> 16)
+ inst.Args[narg+1] = Imm(immc & (1<<16 - 1))
+ narg += 2
+
+ case xArgPtr16colon32:
+ inst.Args[narg] = Imm(immc >> 32)
+ inst.Args[narg+1] = Imm(immc & (1<<32 - 1))
+ narg += 2
+
+ case xArgMoffs8, xArgMoffs16, xArgMoffs32, xArgMoffs64:
+ // TODO(rsc): Can address be 64 bits?
+ mem = Mem{Disp: int64(immc)}
+ if segIndex >= 0 {
+ mem.Segment = prefixToSegment(inst.Prefix[segIndex])
+ inst.Prefix[segIndex] |= PrefixImplicit
+ }
+ inst.Args[narg] = mem
+ inst.MemBytes = int(memBytes[decodeOp(x)])
+ narg++
+
+ case xArgR8, xArgR16, xArgR32, xArgR64, xArgXmm, xArgXmm1, xArgDR0dashDR7:
+ base := baseReg[x]
+ index := Reg(regop)
+ if rex != 0 && base == AL && index >= 4 {
+ rexUsed |= PrefixREX
+ index -= 4
+ base = SPB
+ }
+ inst.Args[narg] = base + index
+ narg++
+
+ case xArgMm, xArgMm1, xArgTR0dashTR7:
+ inst.Args[narg] = baseReg[x] + Reg(regop&7)
+ narg++
+
+ case xArgCR0dashCR7:
+ // AMD documents an extension that the LOCK prefix
+ // can be used in place of a REX prefix in order to access
+ // CR8 from 32-bit mode. The LOCK prefix is allowed in
+ // all modes, provided the corresponding CPUID bit is set.
+ if lockIndex >= 0 {
+ inst.Prefix[lockIndex] |= PrefixImplicit
+ regop += 8
+ }
+ inst.Args[narg] = CR0 + Reg(regop)
+ narg++
+
+ case xArgSreg:
+ regop &= 7
+ if regop >= 6 {
+ inst.Op = 0
+ break Decode
+ }
+ inst.Args[narg] = ES + Reg(regop)
+ narg++
+
+ case xArgRmf16, xArgRmf32, xArgRmf64:
+ base := baseReg[x]
+ index := Reg(modrm & 07)
+ if rex&PrefixREXB != 0 {
+ rexUsed |= PrefixREXB
+ index += 8
+ }
+ inst.Args[narg] = base + index
+ narg++
+
+ case xArgR8op, xArgR16op, xArgR32op, xArgR64op, xArgSTi:
+ n := inst.Opcode >> uint(opshift+8) & 07
+ base := baseReg[x]
+ index := Reg(n)
+ if rex&PrefixREXB != 0 && decodeOp(x) != xArgSTi {
+ rexUsed |= PrefixREXB
+ index += 8
+ }
+ if rex != 0 && base == AL && index >= 4 {
+ rexUsed |= PrefixREX
+ index -= 4
+ base = SPB
+ }
+ inst.Args[narg] = base + index
+ narg++
+
+ case xArgRM8, xArgRM16, xArgRM32, xArgRM64, xArgR32M16, xArgR32M8, xArgR64M16,
+ xArgMmM32, xArgMmM64, xArgMm2M64,
+ xArgXmm2M16, xArgXmm2M32, xArgXmm2M64, xArgXmmM64, xArgXmmM128, xArgXmmM32, xArgXmm2M128:
+ if haveMem {
+ inst.Args[narg] = mem
+ inst.MemBytes = int(memBytes[decodeOp(x)])
+ } else {
+ base := baseReg[x]
+ index := Reg(rm)
+ switch decodeOp(x) {
+ case xArgMmM32, xArgMmM64, xArgMm2M64:
+ // There are only 8 MMX registers, so these ignore the REX.X bit.
+ index &= 7
+ case xArgRM8:
+ if rex != 0 && index >= 4 {
+ rexUsed |= PrefixREX
+ index -= 4
+ base = SPB
+ }
+ }
+ inst.Args[narg] = base + index
+ }
+ narg++
+
+ case xArgMm2: // register only; TODO(rsc): Handle with tag modrm_regonly tag
+ if haveMem {
+ inst.Op = 0
+ break Decode
+ }
+ inst.Args[narg] = baseReg[x] + Reg(rm&7)
+ narg++
+
+ case xArgXmm2: // register only; TODO(rsc): Handle with tag modrm_regonly tag
+ if haveMem {
+ inst.Op = 0
+ break Decode
+ }
+ inst.Args[narg] = baseReg[x] + Reg(rm)
+ narg++
+
+ case xArgRel8:
+ inst.Args[narg] = Rel(int8(immc))
+ narg++
+
+ case xArgRel16:
+ inst.Args[narg] = Rel(int16(immc))
+ narg++
+
+ case xArgRel32:
+ inst.Args[narg] = Rel(int32(immc))
+ narg++
+ }
+ }
+
+ if inst.Op == 0 {
+ // Invalid instruction.
+ if nprefix > 0 {
+ return instPrefix(src[0], mode) // invalid instruction
+ }
+ return Inst{Len: pos}, ErrUnrecognized
+ }
+
+ // Matched! Hooray!
+
+ // 90 decodes as XCHG EAX, EAX but is NOP.
+ // 66 90 decodes as XCHG AX, AX and is NOP too.
+ // 48 90 decodes as XCHG RAX, RAX and is NOP too.
+ // 43 90 decodes as XCHG R8D, EAX and is *not* NOP.
+ // F3 90 decodes as REP XCHG EAX, EAX but is PAUSE.
+ // It's all too special to handle in the decoding tables, at least for now.
+ if inst.Op == XCHG && inst.Opcode>>24 == 0x90 {
+ if inst.Args[0] == RAX || inst.Args[0] == EAX || inst.Args[0] == AX {
+ inst.Op = NOP
+ if dataSizeIndex >= 0 {
+ inst.Prefix[dataSizeIndex] &^= PrefixImplicit
+ }
+ inst.Args[0] = nil
+ inst.Args[1] = nil
+ }
+ if repIndex >= 0 && inst.Prefix[repIndex] == 0xF3 {
+ inst.Prefix[repIndex] |= PrefixImplicit
+ inst.Op = PAUSE
+ inst.Args[0] = nil
+ inst.Args[1] = nil
+ } else if gnuCompat {
+ for i := nprefix - 1; i >= 0; i-- {
+ if inst.Prefix[i]&0xFF == 0xF3 {
+ inst.Prefix[i] |= PrefixImplicit
+ inst.Op = PAUSE
+ inst.Args[0] = nil
+ inst.Args[1] = nil
+ break
+ }
+ }
+ }
+ }
+
+ // defaultSeg returns the default segment for an implicit
+ // memory reference: the final override if present, or else DS.
+ defaultSeg := func() Reg {
+ if segIndex >= 0 {
+ inst.Prefix[segIndex] |= PrefixImplicit
+ return prefixToSegment(inst.Prefix[segIndex])
+ }
+ return DS
+ }
+
+ // Add implicit arguments not present in the tables.
+ // Normally we shy away from making implicit arguments explicit,
+ // following the Intel manuals, but adding the arguments seems
+ // the best way to express the effect of the segment override prefixes.
+ // TODO(rsc): Perhaps add these to the tables and
+ // create bytecode instructions for them.
+ usedAddrSize := false
+ switch inst.Op {
+ case INSB, INSW, INSD:
+ inst.Args[0] = Mem{Segment: ES, Base: baseRegForBits(addrMode) + DI - AX}
+ inst.Args[1] = DX
+ usedAddrSize = true
+
+ case OUTSB, OUTSW, OUTSD:
+ inst.Args[0] = DX
+ inst.Args[1] = Mem{Segment: defaultSeg(), Base: baseRegForBits(addrMode) + SI - AX}
+ usedAddrSize = true
+
+ case MOVSB, MOVSW, MOVSD, MOVSQ:
+ inst.Args[0] = Mem{Segment: ES, Base: baseRegForBits(addrMode) + DI - AX}
+ inst.Args[1] = Mem{Segment: defaultSeg(), Base: baseRegForBits(addrMode) + SI - AX}
+ usedAddrSize = true
+
+ case CMPSB, CMPSW, CMPSD, CMPSQ:
+ inst.Args[0] = Mem{Segment: defaultSeg(), Base: baseRegForBits(addrMode) + SI - AX}
+ inst.Args[1] = Mem{Segment: ES, Base: baseRegForBits(addrMode) + DI - AX}
+ usedAddrSize = true
+
+ case LODSB, LODSW, LODSD, LODSQ:
+ switch inst.Op {
+ case LODSB:
+ inst.Args[0] = AL
+ case LODSW:
+ inst.Args[0] = AX
+ case LODSD:
+ inst.Args[0] = EAX
+ case LODSQ:
+ inst.Args[0] = RAX
+ }
+ inst.Args[1] = Mem{Segment: defaultSeg(), Base: baseRegForBits(addrMode) + SI - AX}
+ usedAddrSize = true
+
+ case STOSB, STOSW, STOSD, STOSQ:
+ inst.Args[0] = Mem{Segment: ES, Base: baseRegForBits(addrMode) + DI - AX}
+ switch inst.Op {
+ case STOSB:
+ inst.Args[1] = AL
+ case STOSW:
+ inst.Args[1] = AX
+ case STOSD:
+ inst.Args[1] = EAX
+ case STOSQ:
+ inst.Args[1] = RAX
+ }
+ usedAddrSize = true
+
+ case SCASB, SCASW, SCASD, SCASQ:
+ inst.Args[1] = Mem{Segment: ES, Base: baseRegForBits(addrMode) + DI - AX}
+ switch inst.Op {
+ case SCASB:
+ inst.Args[0] = AL
+ case SCASW:
+ inst.Args[0] = AX
+ case SCASD:
+ inst.Args[0] = EAX
+ case SCASQ:
+ inst.Args[0] = RAX
+ }
+ usedAddrSize = true
+
+ case XLATB:
+ inst.Args[0] = Mem{Segment: defaultSeg(), Base: baseRegForBits(addrMode) + BX - AX}
+ usedAddrSize = true
+ }
+
+ // If we used the address size annotation to construct the
+ // argument list, mark that prefix as implicit: it doesn't need
+ // to be shown when printing the instruction.
+ if haveMem || usedAddrSize {
+ if addrSizeIndex >= 0 {
+ inst.Prefix[addrSizeIndex] |= PrefixImplicit
+ }
+ }
+
+ // Similarly, if there's some memory operand, the segment
+ // will be shown there and doesn't need to be shown as an
+ // explicit prefix.
+ if haveMem {
+ if segIndex >= 0 {
+ inst.Prefix[segIndex] |= PrefixImplicit
+ }
+ }
+
+ // Branch predict prefixes are overloaded segment prefixes,
+ // since segment prefixes don't make sense on conditional jumps.
+ // Rewrite final instance to prediction prefix.
+ // The set of instructions to which the prefixes apply (other then the
+ // Jcc conditional jumps) is not 100% clear from the manuals, but
+ // the disassemblers seem to agree about the LOOP and JCXZ instructions,
+ // so we'll follow along.
+ // TODO(rsc): Perhaps this instruction class should be derived from the CSV.
+ if isCondJmp[inst.Op] || isLoop[inst.Op] || inst.Op == JCXZ || inst.Op == JECXZ || inst.Op == JRCXZ {
+ PredictLoop:
+ for i := nprefix - 1; i >= 0; i-- {
+ p := inst.Prefix[i]
+ switch p & 0xFF {
+ case PrefixCS:
+ inst.Prefix[i] = PrefixPN
+ break PredictLoop
+ case PrefixDS:
+ inst.Prefix[i] = PrefixPT
+ break PredictLoop
+ }
+ }
+ }
+
+ // The BND prefix is part of the Intel Memory Protection Extensions (MPX).
+ // A REPN applied to certain control transfers is a BND prefix to bound
+ // the range of possible destinations. There's surprisingly little documentation
+ // about this, so we just do what libopcodes and xed agree on.
+ // In particular, it's unclear why a REPN applied to LOOP or JCXZ instructions
+ // does not turn into a BND.
+ // TODO(rsc): Perhaps this instruction class should be derived from the CSV.
+ if isCondJmp[inst.Op] || inst.Op == JMP || inst.Op == CALL || inst.Op == RET {
+ for i := nprefix - 1; i >= 0; i-- {
+ p := inst.Prefix[i]
+ if p&^PrefixIgnored == PrefixREPN {
+ inst.Prefix[i] = PrefixBND
+ break
+ }
+ }
+ }
+
+ // The LOCK prefix only applies to certain instructions, and then only
+ // to instances of the instruction with a memory destination.
+ // Other uses of LOCK are invalid and cause a processor exception,
+ // in contrast to the "just ignore it" spirit applied to all other prefixes.
+ // Mark invalid lock prefixes.
+ hasLock := false
+ if lockIndex >= 0 && inst.Prefix[lockIndex]&PrefixImplicit == 0 {
+ switch inst.Op {
+ // TODO(rsc): Perhaps this instruction class should be derived from the CSV.
+ case ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCHG8B, CMPXCHG16B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG:
+ if isMem(inst.Args[0]) {
+ hasLock = true
+ break
+ }
+ fallthrough
+ default:
+ inst.Prefix[lockIndex] |= PrefixInvalid
+ }
+ }
+
+ // In certain cases, all of which require a memory destination,
+ // the REPN and REP prefixes are interpreted as XACQUIRE and XRELEASE
+ // from the Intel Transactional Synchroniation Extensions (TSX).
+ //
+ // The specific rules are:
+ // (1) Any instruction with a valid LOCK prefix can have XACQUIRE or XRELEASE.
+ // (2) Any XCHG, which always has an implicit LOCK, can have XACQUIRE or XRELEASE.
+ // (3) Any 0x88-, 0x89-, 0xC6-, or 0xC7-opcode MOV can have XRELEASE.
+ if isMem(inst.Args[0]) {
+ if inst.Op == XCHG {
+ hasLock = true
+ }
+
+ for i := len(inst.Prefix) - 1; i >= 0; i-- {
+ p := inst.Prefix[i] &^ PrefixIgnored
+ switch p {
+ case PrefixREPN:
+ if hasLock {
+ inst.Prefix[i] = inst.Prefix[i]&PrefixIgnored | PrefixXACQUIRE
+ }
+
+ case PrefixREP:
+ if hasLock {
+ inst.Prefix[i] = inst.Prefix[i]&PrefixIgnored | PrefixXRELEASE
+ }
+
+ if inst.Op == MOV {
+ op := (inst.Opcode >> 24) &^ 1
+ if op == 0x88 || op == 0xC6 {
+ inst.Prefix[i] = inst.Prefix[i]&PrefixIgnored | PrefixXRELEASE
+ }
+ }
+ }
+ }
+ }
+
+ // If REP is used on a non-REP-able instruction, mark the prefix as ignored.
+ if repIndex >= 0 {
+ switch inst.Prefix[repIndex] {
+ case PrefixREP, PrefixREPN:
+ switch inst.Op {
+ // According to the manuals, the REP/REPE prefix applies to all of these,
+ // while the REPN applies only to some of them. However, both libopcodes
+ // and xed show both prefixes explicitly for all instructions, so we do the same.
+ // TODO(rsc): Perhaps this instruction class should be derived from the CSV.
+ case INSB, INSW, INSD,
+ MOVSB, MOVSW, MOVSD, MOVSQ,
+ OUTSB, OUTSW, OUTSD,
+ LODSB, LODSW, LODSD, LODSQ,
+ CMPSB, CMPSW, CMPSD, CMPSQ,
+ SCASB, SCASW, SCASD, SCASQ,
+ STOSB, STOSW, STOSD, STOSQ:
+ // ok
+ default:
+ inst.Prefix[repIndex] |= PrefixIgnored
+ }
+ }
+ }
+
+ // If REX was present, mark implicit if all the 1 bits were consumed.
+ if rexIndex >= 0 {
+ if rexUsed != 0 {
+ rexUsed |= PrefixREX
+ }
+ if rex&^rexUsed == 0 {
+ inst.Prefix[rexIndex] |= PrefixImplicit
+ }
+ }
+
+ inst.DataSize = dataMode
+ inst.AddrSize = addrMode
+ inst.Mode = mode
+ inst.Len = pos
+ return inst, nil
+}
+
+var errInternal = errors.New("internal error")
+
+// addr16 records the eight 16-bit addressing modes.
+var addr16 = [8]Mem{
+ {Base: BX, Scale: 1, Index: SI},
+ {Base: BX, Scale: 1, Index: DI},
+ {Base: BP, Scale: 1, Index: SI},
+ {Base: BP, Scale: 1, Index: DI},
+ {Base: SI},
+ {Base: DI},
+ {Base: BP},
+ {Base: BX},
+}
+
+// baseReg returns the base register for a given register size in bits.
+func baseRegForBits(bits int) Reg {
+ switch bits {
+ case 8:
+ return AL
+ case 16:
+ return AX
+ case 32:
+ return EAX
+ case 64:
+ return RAX
+ }
+ return 0
+}
+
+// baseReg records the base register for argument types that specify
+// a range of registers indexed by op, regop, or rm.
+var baseReg = [...]Reg{
+ xArgDR0dashDR7: DR0,
+ xArgMm1: M0,
+ xArgMm2: M0,
+ xArgMm2M64: M0,
+ xArgMm: M0,
+ xArgMmM32: M0,
+ xArgMmM64: M0,
+ xArgR16: AX,
+ xArgR16op: AX,
+ xArgR32: EAX,
+ xArgR32M16: EAX,
+ xArgR32M8: EAX,
+ xArgR32op: EAX,
+ xArgR64: RAX,
+ xArgR64M16: RAX,
+ xArgR64op: RAX,
+ xArgR8: AL,
+ xArgR8op: AL,
+ xArgRM16: AX,
+ xArgRM32: EAX,
+ xArgRM64: RAX,
+ xArgRM8: AL,
+ xArgRmf16: AX,
+ xArgRmf32: EAX,
+ xArgRmf64: RAX,
+ xArgSTi: F0,
+ xArgTR0dashTR7: TR0,
+ xArgXmm1: X0,
+ xArgXmm2: X0,
+ xArgXmm2M128: X0,
+ xArgXmm2M16: X0,
+ xArgXmm2M32: X0,
+ xArgXmm2M64: X0,
+ xArgXmm: X0,
+ xArgXmmM128: X0,
+ xArgXmmM32: X0,
+ xArgXmmM64: X0,
+}
+
+// prefixToSegment returns the segment register
+// corresponding to a particular segment prefix.
+func prefixToSegment(p Prefix) Reg {
+ switch p &^ PrefixImplicit {
+ case PrefixCS:
+ return CS
+ case PrefixDS:
+ return DS
+ case PrefixES:
+ return ES
+ case PrefixFS:
+ return FS
+ case PrefixGS:
+ return GS
+ case PrefixSS:
+ return SS
+ }
+ return 0
+}
+
+// fixedArg records the fixed arguments corresponding to the given bytecodes.
+var fixedArg = [...]Arg{
+ xArg1: Imm(1),
+ xArg3: Imm(3),
+ xArgAL: AL,
+ xArgAX: AX,
+ xArgDX: DX,
+ xArgEAX: EAX,
+ xArgEDX: EDX,
+ xArgRAX: RAX,
+ xArgRDX: RDX,
+ xArgCL: CL,
+ xArgCS: CS,
+ xArgDS: DS,
+ xArgES: ES,
+ xArgFS: FS,
+ xArgGS: GS,
+ xArgSS: SS,
+ xArgST: F0,
+ xArgXMM0: X0,
+}
+
+// memBytes records the size of the memory pointed at
+// by a memory argument of the given form.
+var memBytes = [...]int8{
+ xArgM128: 128 / 8,
+ xArgM16: 16 / 8,
+ xArgM16and16: (16 + 16) / 8,
+ xArgM16colon16: (16 + 16) / 8,
+ xArgM16colon32: (16 + 32) / 8,
+ xArgM16int: 16 / 8,
+ xArgM2byte: 2,
+ xArgM32: 32 / 8,
+ xArgM32and32: (32 + 32) / 8,
+ xArgM32fp: 32 / 8,
+ xArgM32int: 32 / 8,
+ xArgM64: 64 / 8,
+ xArgM64fp: 64 / 8,
+ xArgM64int: 64 / 8,
+ xArgMm2M64: 64 / 8,
+ xArgMmM32: 32 / 8,
+ xArgMmM64: 64 / 8,
+ xArgMoffs16: 16 / 8,
+ xArgMoffs32: 32 / 8,
+ xArgMoffs64: 64 / 8,
+ xArgMoffs8: 8 / 8,
+ xArgR32M16: 16 / 8,
+ xArgR32M8: 8 / 8,
+ xArgR64M16: 16 / 8,
+ xArgRM16: 16 / 8,
+ xArgRM32: 32 / 8,
+ xArgRM64: 64 / 8,
+ xArgRM8: 8 / 8,
+ xArgXmm2M128: 128 / 8,
+ xArgXmm2M16: 16 / 8,
+ xArgXmm2M32: 32 / 8,
+ xArgXmm2M64: 64 / 8,
+ xArgXmm: 128 / 8,
+ xArgXmmM128: 128 / 8,
+ xArgXmmM32: 32 / 8,
+ xArgXmmM64: 64 / 8,
+}
+
+// isCondJmp records the conditional jumps.
+var isCondJmp = [maxOp + 1]bool{
+ JA: true,
+ JAE: true,
+ JB: true,
+ JBE: true,
+ JE: true,
+ JG: true,
+ JGE: true,
+ JL: true,
+ JLE: true,
+ JNE: true,
+ JNO: true,
+ JNP: true,
+ JNS: true,
+ JO: true,
+ JP: true,
+ JS: true,
+}
+
+// isLoop records the loop operators.
+var isLoop = [maxOp + 1]bool{
+ LOOP: true,
+ LOOPE: true,
+ LOOPNE: true,
+ JECXZ: true,
+ JRCXZ: true,
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/decode_test.go b/src/cmd/internal/rsc.io/x86/x86asm/decode_test.go
new file mode 100644
index 000000000..fb284583a
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/decode_test.go
@@ -0,0 +1,71 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x86asm
+
+import (
+ "encoding/hex"
+ "io/ioutil"
+ "strconv"
+ "strings"
+ "testing"
+)
+
+func TestDecode(t *testing.T) {
+ data, err := ioutil.ReadFile("testdata/decode.txt")
+ if err != nil {
+ t.Fatal(err)
+ }
+ all := string(data)
+ for strings.Contains(all, "\t\t") {
+ all = strings.Replace(all, "\t\t", "\t", -1)
+ }
+ for _, line := range strings.Split(all, "\n") {
+ line = strings.TrimSpace(line)
+ if line == "" || strings.HasPrefix(line, "#") {
+ continue
+ }
+ f := strings.SplitN(line, "\t", 4)
+ i := strings.Index(f[0], "|")
+ if i < 0 {
+ t.Errorf("parsing %q: missing | separator", f[0])
+ continue
+ }
+ if i%2 != 0 {
+ t.Errorf("parsing %q: misaligned | separator", f[0])
+ }
+ size := i / 2
+ code, err := hex.DecodeString(f[0][:i] + f[0][i+1:])
+ if err != nil {
+ t.Errorf("parsing %q: %v", f[0], err)
+ continue
+ }
+ mode, err := strconv.Atoi(f[1])
+ if err != nil {
+ t.Errorf("invalid mode %q in: %s", f[1], line)
+ continue
+ }
+ syntax, asm := f[2], f[3]
+ inst, err := Decode(code, mode)
+ var out string
+ if err != nil {
+ out = "error: " + err.Error()
+ } else {
+ switch syntax {
+ case "gnu":
+ out = GNUSyntax(inst)
+ case "intel":
+ out = IntelSyntax(inst)
+ case "plan9":
+ out = Plan9Syntax(inst, 0, nil)
+ default:
+ t.Errorf("unknown syntax %q", syntax)
+ continue
+ }
+ }
+ if out != asm || inst.Len != size {
+ t.Errorf("Decode(%s) [%s] = %s, %d, want %s, %d", f[0], syntax, out, inst.Len, asm, size)
+ }
+ }
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/ext_test.go b/src/cmd/internal/rsc.io/x86/x86asm/ext_test.go
new file mode 100644
index 000000000..f65d6b2d5
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/ext_test.go
@@ -0,0 +1,811 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Support for testing against external disassembler program.
+
+package x86asm
+
+import (
+ "bufio"
+ "bytes"
+ "encoding/hex"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "log"
+ "math/rand"
+ "os"
+ "os/exec"
+ "regexp"
+ "runtime"
+ "strings"
+ "testing"
+ "time"
+)
+
+var (
+ printTests = flag.Bool("printtests", false, "print test cases that exercise new code paths")
+ dumpTest = flag.Bool("dump", false, "dump all encodings")
+ mismatch = flag.Bool("mismatch", false, "log allowed mismatches")
+ longTest = flag.Bool("long", false, "long test")
+ keep = flag.Bool("keep", false, "keep object files around")
+ debug = false
+)
+
+// A ExtInst represents a single decoded instruction parsed
+// from an external disassembler's output.
+type ExtInst struct {
+ addr uint32
+ enc [32]byte
+ nenc int
+ text string
+}
+
+func (r ExtInst) String() string {
+ return fmt.Sprintf("%#x: % x: %s", r.addr, r.enc, r.text)
+}
+
+// An ExtDis is a connection between an external disassembler and a test.
+type ExtDis struct {
+ Arch int
+ Dec chan ExtInst
+ File *os.File
+ Size int
+ KeepFile bool
+ Cmd *exec.Cmd
+}
+
+// Run runs the given command - the external disassembler - and returns
+// a buffered reader of its standard output.
+func (ext *ExtDis) Run(cmd ...string) (*bufio.Reader, error) {
+ if *keep {
+ log.Printf("%s\n", strings.Join(cmd, " "))
+ }
+ ext.Cmd = exec.Command(cmd[0], cmd[1:]...)
+ out, err := ext.Cmd.StdoutPipe()
+ if err != nil {
+ return nil, fmt.Errorf("stdoutpipe: %v", err)
+ }
+ if err := ext.Cmd.Start(); err != nil {
+ return nil, fmt.Errorf("exec: %v", err)
+ }
+
+ b := bufio.NewReaderSize(out, 1<<20)
+ return b, nil
+}
+
+// Wait waits for the command started with Run to exit.
+func (ext *ExtDis) Wait() error {
+ return ext.Cmd.Wait()
+}
+
+// testExtDis tests a set of byte sequences against an external disassembler.
+// The disassembler is expected to produce the given syntax and be run
+// in the given architecture mode (16, 32, or 64-bit).
+// The extdis function must start the external disassembler
+// and then parse its output, sending the parsed instructions on ext.Dec.
+// The generate function calls its argument f once for each byte sequence
+// to be tested. The generate function itself will be called twice, and it must
+// make the same sequence of calls to f each time.
+// When a disassembly does not match the internal decoding,
+// allowedMismatch determines whether this mismatch should be
+// allowed, or else considered an error.
+func testExtDis(
+ t *testing.T,
+ syntax string,
+ arch int,
+ extdis func(ext *ExtDis) error,
+ generate func(f func([]byte)),
+ allowedMismatch func(text string, size int, inst *Inst, dec ExtInst) bool,
+) {
+ start := time.Now()
+ ext := &ExtDis{
+ Dec: make(chan ExtInst),
+ Arch: arch,
+ }
+ errc := make(chan error)
+
+ // First pass: write instructions to input file for external disassembler.
+ file, f, size, err := writeInst(generate)
+ if err != nil {
+ t.Fatal(err)
+ }
+ ext.Size = size
+ ext.File = f
+ defer func() {
+ f.Close()
+ if !*keep {
+ os.Remove(file)
+ }
+ }()
+
+ // Second pass: compare disassembly against our decodings.
+ var (
+ totalTests = 0
+ totalSkips = 0
+ totalErrors = 0
+
+ errors = make([]string, 0, 100) // sampled errors, at most cap
+ )
+ go func() {
+ errc <- extdis(ext)
+ }()
+ generate(func(enc []byte) {
+ dec, ok := <-ext.Dec
+ if !ok {
+ t.Errorf("decoding stream ended early")
+ return
+ }
+ inst, text := disasm(syntax, arch, pad(enc))
+ totalTests++
+ if *dumpTest {
+ fmt.Printf("%x -> %s [%d]\n", enc[:len(enc)], dec.text, dec.nenc)
+ }
+ if text != dec.text || inst.Len != dec.nenc {
+ suffix := ""
+ if allowedMismatch(text, size, &inst, dec) {
+ totalSkips++
+ if !*mismatch {
+ return
+ }
+ suffix += " (allowed mismatch)"
+ }
+ totalErrors++
+ if len(errors) >= cap(errors) {
+ j := rand.Intn(totalErrors)
+ if j >= cap(errors) {
+ return
+ }
+ errors = append(errors[:j], errors[j+1:]...)
+ }
+ errors = append(errors, fmt.Sprintf("decode(%x) = %q, %d, want %q, %d%s", enc, text, inst.Len, dec.text, dec.nenc, suffix))
+ }
+ })
+
+ if *mismatch {
+ totalErrors -= totalSkips
+ }
+
+ for _, b := range errors {
+ t.Log(b)
+ }
+
+ if totalErrors > 0 {
+ t.Fail()
+ }
+ t.Logf("%d test cases, %d expected mismatches, %d failures; %.0f cases/second", totalTests, totalSkips, totalErrors, float64(totalTests)/time.Since(start).Seconds())
+
+ if err := <-errc; err != nil {
+ t.Fatal("external disassembler: %v", err)
+ }
+
+}
+
+const start = 0x8000 // start address of text
+
+// writeInst writes the generated byte sequences to a new file
+// starting at offset start. That file is intended to be the input to
+// the external disassembler.
+func writeInst(generate func(func([]byte))) (file string, f *os.File, size int, err error) {
+ f, err = ioutil.TempFile("", "x86map")
+ if err != nil {
+ return
+ }
+
+ file = f.Name()
+
+ f.Seek(start, 0)
+ w := bufio.NewWriter(f)
+ defer w.Flush()
+ size = 0
+ generate(func(x []byte) {
+ if len(x) > 16 {
+ x = x[:16]
+ }
+ if debug {
+ fmt.Printf("%#x: %x%x\n", start+size, x, pops[len(x):])
+ }
+ w.Write(x)
+ w.Write(pops[len(x):])
+ size += len(pops)
+ })
+ return file, f, size, nil
+}
+
+// 0x5F is a single-byte pop instruction.
+// We pad the bytes we want decoded with enough 0x5Fs
+// that no matter what state the instruction stream is in
+// after reading our bytes, the pops will get us back to
+// a forced instruction boundary.
+var pops = []byte{
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+}
+
+// pad pads the code sequenc with pops.
+func pad(enc []byte) []byte {
+ return append(enc[:len(enc):len(enc)], pops...)
+}
+
+// disasm returns the decoded instruction and text
+// for the given source bytes, using the given syntax and mode.
+func disasm(syntax string, mode int, src []byte) (inst Inst, text string) {
+ // If printTests is set, we record the coverage value
+ // before and after, and we write out the inputs for which
+ // coverage went up, in the format expected in testdata/decode.text.
+ // This produces a fairly small set of test cases that exercise nearly
+ // all the code.
+ var cover float64
+ if *printTests {
+ cover -= coverage()
+ }
+
+ inst, err := decode1(src, mode, syntax == "gnu")
+ if err != nil {
+ text = "error: " + err.Error()
+ } else {
+ switch syntax {
+ case "gnu":
+ text = GNUSyntax(inst)
+ case "intel":
+ text = IntelSyntax(inst)
+ case "plan9":
+ text = Plan9Syntax(inst, 0, nil)
+ default:
+ text = "error: unknown syntax " + syntax
+ }
+ }
+
+ if *printTests {
+ cover += coverage()
+ if cover > 0 {
+ max := len(src)
+ if max > 16 && inst.Len <= 16 {
+ max = 16
+ }
+ fmt.Printf("%x|%x\t%d\t%s\t%s\n", src[:inst.Len], src[inst.Len:max], mode, syntax, text)
+ }
+ }
+
+ return
+}
+
+// coverage returns a floating point number denoting the
+// test coverage until now. The number increases when new code paths are exercised,
+// both in the Go program and in the decoder byte code.
+func coverage() float64 {
+ /*
+ testing.Coverage is not in the main distribution.
+ The implementation, which must go in package testing, is:
+
+ // Coverage reports the current code coverage as a fraction in the range [0, 1].
+ func Coverage() float64 {
+ var n, d int64
+ for _, counters := range cover.Counters {
+ for _, c := range counters {
+ if c > 0 {
+ n++
+ }
+ d++
+ }
+ }
+ if d == 0 {
+ return 0
+ }
+ return float64(n) / float64(d)
+ }
+ */
+
+ var f float64
+ // f += testing.Coverage()
+ f += decodeCoverage()
+ return f
+}
+
+func decodeCoverage() float64 {
+ n := 0
+ for _, t := range decoderCover {
+ if t {
+ n++
+ }
+ }
+ return float64(1+n) / float64(1+len(decoderCover))
+}
+
+// Helpers for writing disassembler output parsers.
+
+// isPrefix reports whether text is the name of an instruction prefix.
+func isPrefix(text string) bool {
+ return prefixByte[text] > 0
+}
+
+// prefixByte maps instruction prefix text to actual prefix byte values.
+var prefixByte = map[string]byte{
+ "es": 0x26,
+ "cs": 0x2e,
+ "ss": 0x36,
+ "ds": 0x3e,
+ "fs": 0x64,
+ "gs": 0x65,
+ "data16": 0x66,
+ "addr16": 0x67,
+ "lock": 0xf0,
+ "repn": 0xf2,
+ "repne": 0xf2,
+ "rep": 0xf3,
+ "repe": 0xf3,
+ "xacquire": 0xf2,
+ "xrelease": 0xf3,
+ "bnd": 0xf2,
+ "addr32": 0x66,
+ "data32": 0x67,
+}
+
+// hasPrefix reports whether any of the space-separated words in the text s
+// begins with any of the given prefixes.
+func hasPrefix(s string, prefixes ...string) bool {
+ for _, prefix := range prefixes {
+ for s := s; s != ""; {
+ if strings.HasPrefix(s, prefix) {
+ return true
+ }
+ i := strings.Index(s, " ")
+ if i < 0 {
+ break
+ }
+ s = s[i+1:]
+ }
+ }
+ return false
+}
+
+// contains reports whether the text s contains any of the given substrings.
+func contains(s string, substrings ...string) bool {
+ for _, sub := range substrings {
+ if strings.Contains(s, sub) {
+ return true
+ }
+ }
+ return false
+}
+
+// isHex reports whether b is a hexadecimal character (0-9A-Fa-f).
+func isHex(b byte) bool { return b == '0' || unhex[b] > 0 }
+
+// parseHex parses the hexadecimal byte dump in hex,
+// appending the parsed bytes to raw and returning the updated slice.
+// The returned bool signals whether any invalid hex was found.
+// Spaces and tabs between bytes are okay but any other non-hex is not.
+func parseHex(hex []byte, raw []byte) ([]byte, bool) {
+ hex = trimSpace(hex)
+ for j := 0; j < len(hex); {
+ for hex[j] == ' ' || hex[j] == '\t' {
+ j++
+ }
+ if j >= len(hex) {
+ break
+ }
+ if j+2 > len(hex) || !isHex(hex[j]) || !isHex(hex[j+1]) {
+ return nil, false
+ }
+ raw = append(raw, unhex[hex[j]]<<4|unhex[hex[j+1]])
+ j += 2
+ }
+ return raw, true
+}
+
+var unhex = [256]byte{
+ '0': 0,
+ '1': 1,
+ '2': 2,
+ '3': 3,
+ '4': 4,
+ '5': 5,
+ '6': 6,
+ '7': 7,
+ '8': 8,
+ '9': 9,
+ 'A': 10,
+ 'B': 11,
+ 'C': 12,
+ 'D': 13,
+ 'E': 14,
+ 'F': 15,
+ 'a': 10,
+ 'b': 11,
+ 'c': 12,
+ 'd': 13,
+ 'e': 14,
+ 'f': 15,
+}
+
+// index is like bytes.Index(s, []byte(t)) but avoids the allocation.
+func index(s []byte, t string) int {
+ i := 0
+ for {
+ j := bytes.IndexByte(s[i:], t[0])
+ if j < 0 {
+ return -1
+ }
+ i = i + j
+ if i+len(t) > len(s) {
+ return -1
+ }
+ for k := 1; k < len(t); k++ {
+ if s[i+k] != t[k] {
+ goto nomatch
+ }
+ }
+ return i
+ nomatch:
+ i++
+ }
+}
+
+// fixSpace rewrites runs of spaces, tabs, and newline characters into single spaces in s.
+// If s must be rewritten, it is rewritten in place.
+func fixSpace(s []byte) []byte {
+ s = trimSpace(s)
+ for i := 0; i < len(s); i++ {
+ if s[i] == '\t' || s[i] == '\n' || i > 0 && s[i] == ' ' && s[i-1] == ' ' {
+ goto Fix
+ }
+ }
+ return s
+
+Fix:
+ b := s
+ w := 0
+ for i := 0; i < len(s); i++ {
+ c := s[i]
+ if c == '\t' || c == '\n' {
+ c = ' '
+ }
+ if c == ' ' && w > 0 && b[w-1] == ' ' {
+ continue
+ }
+ b[w] = c
+ w++
+ }
+ if w > 0 && b[w-1] == ' ' {
+ w--
+ }
+ return b[:w]
+}
+
+// trimSpace trims leading and trailing space from s, returning a subslice of s.
+func trimSpace(s []byte) []byte {
+ j := len(s)
+ for j > 0 && (s[j-1] == ' ' || s[j-1] == '\t' || s[j-1] == '\n') {
+ j--
+ }
+ i := 0
+ for i < j && (s[i] == ' ' || s[i] == '\t') {
+ i++
+ }
+ return s[i:j]
+}
+
+// pcrel and pcrelw match instructions using relative addressing mode.
+var (
+ pcrel = regexp.MustCompile(`^((?:.* )?(?:j[a-z]+|call|ljmp|loopn?e?w?|xbegin)q?(?:,p[nt])?) 0x([0-9a-f]+)$`)
+ pcrelw = regexp.MustCompile(`^((?:.* )?(?:callw|jmpw|xbeginw|ljmpw)(?:,p[nt])?) 0x([0-9a-f]+)$`)
+)
+
+// Generators.
+//
+// The test cases are described as functions that invoke a callback repeatedly,
+// with a new input sequence each time. These helpers make writing those
+// a little easier.
+
+// hexCases generates the cases written in hexadecimal in the encoded string.
+// Spaces in 'encoded' separate entire test cases, not individual bytes.
+func hexCases(t *testing.T, encoded string) func(func([]byte)) {
+ return func(try func([]byte)) {
+ for _, x := range strings.Fields(encoded) {
+ src, err := hex.DecodeString(x)
+ if err != nil {
+ t.Errorf("parsing %q: %v", x, err)
+ }
+ try(src)
+ }
+ }
+}
+
+// testdataCases generates the test cases recorded in testdata/decode.txt.
+// It only uses the inputs; it ignores the answers recorded in that file.
+func testdataCases(t *testing.T) func(func([]byte)) {
+ var codes [][]byte
+ data, err := ioutil.ReadFile("testdata/decode.txt")
+ if err != nil {
+ t.Fatal(err)
+ }
+ for _, line := range strings.Split(string(data), "\n") {
+ line = strings.TrimSpace(line)
+ if line == "" || strings.HasPrefix(line, "#") {
+ continue
+ }
+ f := strings.Fields(line)[0]
+ i := strings.Index(f, "|")
+ if i < 0 {
+ t.Errorf("parsing %q: missing | separator", f)
+ continue
+ }
+ if i%2 != 0 {
+ t.Errorf("parsing %q: misaligned | separator", f)
+ }
+ code, err := hex.DecodeString(f[:i] + f[i+1:])
+ if err != nil {
+ t.Errorf("parsing %q: %v", f, err)
+ continue
+ }
+ codes = append(codes, code)
+ }
+
+ return func(try func([]byte)) {
+ for _, code := range codes {
+ try(code)
+ }
+ }
+}
+
+// manyPrefixes generates all possible 2⁹ combinations of nine chosen prefixes.
+// The relative ordering of the prefixes within the combinations varies deterministically.
+func manyPrefixes(try func([]byte)) {
+ var prefixBytes = []byte{0x66, 0x67, 0xF0, 0xF2, 0xF3, 0x3E, 0x36, 0x66, 0x67}
+ var enc []byte
+ for i := 0; i < 1<<uint(len(prefixBytes)); i++ {
+ enc = enc[:0]
+ for j, p := range prefixBytes {
+ if i&(1<<uint(j)) != 0 {
+ enc = append(enc, p)
+ }
+ }
+ if len(enc) > 0 {
+ k := i % len(enc)
+ enc[0], enc[k] = enc[k], enc[0]
+ }
+ try(enc)
+ }
+}
+
+// basicPrefixes geneartes 8 different possible prefix cases: no prefix
+// and then one each of seven different prefix bytes.
+func basicPrefixes(try func([]byte)) {
+ try(nil)
+ for _, b := range []byte{0x66, 0x67, 0xF0, 0xF2, 0xF3, 0x3E, 0x36} {
+ try([]byte{b})
+ }
+}
+
+func rexPrefixes(try func([]byte)) {
+ try(nil)
+ for _, b := range []byte{0x40, 0x48, 0x43, 0x4C} {
+ try([]byte{b})
+ }
+}
+
+// concat takes two generators and returns a generator for the
+// cross product of the two, concatenating the results from each.
+func concat(gen1, gen2 func(func([]byte))) func(func([]byte)) {
+ return func(try func([]byte)) {
+ gen1(func(enc1 []byte) {
+ gen2(func(enc2 []byte) {
+ try(append(enc1[:len(enc1):len(enc1)], enc2...))
+ })
+ })
+ }
+}
+
+// concat3 takes three generators and returns a generator for the
+// cross product of the three, concatenating the results from each.
+func concat3(gen1, gen2, gen3 func(func([]byte))) func(func([]byte)) {
+ return func(try func([]byte)) {
+ gen1(func(enc1 []byte) {
+ gen2(func(enc2 []byte) {
+ gen3(func(enc3 []byte) {
+ try(append(append(enc1[:len(enc1):len(enc1)], enc2...), enc3...))
+ })
+ })
+ })
+ }
+}
+
+// concat4 takes four generators and returns a generator for the
+// cross product of the four, concatenating the results from each.
+func concat4(gen1, gen2, gen3, gen4 func(func([]byte))) func(func([]byte)) {
+ return func(try func([]byte)) {
+ gen1(func(enc1 []byte) {
+ gen2(func(enc2 []byte) {
+ gen3(func(enc3 []byte) {
+ gen4(func(enc4 []byte) {
+ try(append(append(append(enc1[:len(enc1):len(enc1)], enc2...), enc3...), enc4...))
+ })
+ })
+ })
+ })
+ }
+}
+
+// filter generates the sequences from gen that satisfy ok.
+func filter(gen func(func([]byte)), ok func([]byte) bool) func(func([]byte)) {
+ return func(try func([]byte)) {
+ gen(func(enc []byte) {
+ if ok(enc) {
+ try(enc)
+ }
+ })
+ }
+}
+
+// enum8bit generates all possible 1-byte sequences, followed by distinctive padding.
+func enum8bit(try func([]byte)) {
+ for i := 0; i < 1<<8; i++ {
+ try([]byte{byte(i), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88})
+ }
+}
+
+// enum8bit generates all possible 2-byte sequences, followed by distinctive padding.
+func enum16bit(try func([]byte)) {
+ for i := 0; i < 1<<16; i++ {
+ try([]byte{byte(i), byte(i >> 8), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88})
+ }
+}
+
+// enum24bit generates all possible 3-byte sequences, followed by distinctive padding.
+func enum24bit(try func([]byte)) {
+ for i := 0; i < 1<<24; i++ {
+ try([]byte{byte(i), byte(i >> 8), byte(i >> 16), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88})
+ }
+}
+
+// enumModRM generates all possible modrm bytes and, for modrm values that indicate
+// a following sib byte, all possible modrm, sib combinations.
+func enumModRM(try func([]byte)) {
+ for i := 0; i < 256; i++ {
+ if (i>>3)&07 == 04 && i>>6 != 3 { // has sib
+ for j := 0; j < 256; j++ {
+ try([]byte{0, byte(i), byte(j), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) // byte encodings
+ try([]byte{1, byte(i), byte(j), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) // word encodings
+ }
+ } else {
+ try([]byte{0, byte(i), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) // byte encodings
+ try([]byte{1, byte(i), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) // word encodings
+ }
+ }
+}
+
+// fixed generates the single case b.
+// It's mainly useful to prepare an argument for concat or concat3.
+func fixed(b ...byte) func(func([]byte)) {
+ return func(try func([]byte)) {
+ try(b)
+ }
+}
+
+// testBasic runs the given test function with cases all using opcode as the initial opcode bytes.
+// It runs three phases:
+//
+// First, zero-or-one prefixes followed by opcode followed by all possible 1-byte values.
+// If in -short mode, that's all.
+//
+// Second, zero-or-one prefixes followed by opcode followed by all possible 2-byte values.
+// If not in -long mode, that's all. This phase and the next run in parallel with other tests
+// (using t.Parallel).
+//
+// Finally, opcode followed by all possible 3-byte values. The test can take a very long time
+// and prints progress messages to package log.
+func testBasic(t *testing.T, testfn func(*testing.T, func(func([]byte))), opcode ...byte) {
+ testfn(t, concat3(basicPrefixes, fixed(opcode...), enum8bit))
+ if testing.Short() {
+ return
+ }
+
+ t.Parallel()
+ testfn(t, concat3(basicPrefixes, fixed(opcode...), enum16bit))
+ if !*longTest {
+ return
+ }
+
+ name := caller(2)
+ op1 := make([]byte, len(opcode)+1)
+ copy(op1, opcode)
+ for i := 0; i < 256; i++ {
+ log.Printf("%s 24-bit: %d/256\n", name, i)
+ op1[len(opcode)] = byte(i)
+ testfn(t, concat(fixed(op1...), enum16bit))
+ }
+}
+
+func testBasicREX(t *testing.T, testfn func(*testing.T, func(func([]byte))), opcode ...byte) {
+ testfn(t, filter(concat4(basicPrefixes, rexPrefixes, fixed(opcode...), enum8bit), isValidREX))
+ if testing.Short() {
+ return
+ }
+
+ t.Parallel()
+ testfn(t, filter(concat4(basicPrefixes, rexPrefixes, fixed(opcode...), enum16bit), isValidREX))
+ if !*longTest {
+ return
+ }
+
+ name := caller(2)
+ op1 := make([]byte, len(opcode)+1)
+ copy(op1, opcode)
+ for i := 0; i < 256; i++ {
+ log.Printf("%s 24-bit: %d/256\n", name, i)
+ op1[len(opcode)] = byte(i)
+ testfn(t, filter(concat3(rexPrefixes, fixed(op1...), enum16bit), isValidREX))
+ }
+}
+
+// testPrefix runs the given test function for all many prefix possibilities
+// followed by all possible 1-byte sequences.
+//
+// If in -long mode, it then runs a test of all the prefix possibilities followed
+// by all possible 2-byte sequences.
+func testPrefix(t *testing.T, testfn func(*testing.T, func(func([]byte)))) {
+ t.Parallel()
+ testfn(t, concat(manyPrefixes, enum8bit))
+ if testing.Short() || !*longTest {
+ return
+ }
+
+ name := caller(2)
+ for i := 0; i < 256; i++ {
+ log.Printf("%s 16-bit: %d/256\n", name, i)
+ testfn(t, concat3(manyPrefixes, fixed(byte(i)), enum8bit))
+ }
+}
+
+func testPrefixREX(t *testing.T, testfn func(*testing.T, func(func([]byte)))) {
+ t.Parallel()
+ testfn(t, filter(concat3(manyPrefixes, rexPrefixes, enum8bit), isValidREX))
+ if testing.Short() || !*longTest {
+ return
+ }
+
+ name := caller(2)
+ for i := 0; i < 256; i++ {
+ log.Printf("%s 16-bit: %d/256\n", name, i)
+ testfn(t, filter(concat4(manyPrefixes, rexPrefixes, fixed(byte(i)), enum8bit), isValidREX))
+ }
+}
+
+func caller(skip int) string {
+ pc, _, _, _ := runtime.Caller(skip)
+ f := runtime.FuncForPC(pc)
+ name := "?"
+ if f != nil {
+ name = f.Name()
+ if i := strings.LastIndex(name, "."); i >= 0 {
+ name = name[i+1:]
+ }
+ }
+ return name
+}
+
+func isValidREX(x []byte) bool {
+ i := 0
+ for i < len(x) && isPrefixByte(x[i]) {
+ i++
+ }
+ if i < len(x) && Prefix(x[i]).IsREX() {
+ i++
+ if i < len(x) {
+ return !isPrefixByte(x[i]) && !Prefix(x[i]).IsREX()
+ }
+ }
+ return true
+}
+
+func isPrefixByte(b byte) bool {
+ switch b {
+ case 0x26, 0x2E, 0x36, 0x3E, 0x64, 0x65, 0x66, 0x67, 0xF0, 0xF2, 0xF3:
+ return true
+ }
+ return false
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/gnu.go b/src/cmd/internal/rsc.io/x86/x86asm/gnu.go
new file mode 100644
index 000000000..e2ff80118
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/gnu.go
@@ -0,0 +1,926 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x86asm
+
+import (
+ "fmt"
+ "strings"
+)
+
+// GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.
+// This general form is often called ``AT&T syntax'' as a reference to AT&T System V Unix.
+func GNUSyntax(inst Inst) string {
+ // Rewrite instruction to mimic GNU peculiarities.
+ // Note that inst has been passed by value and contains
+ // no pointers, so any changes we make here are local
+ // and will not propagate back out to the caller.
+
+ // Adjust opcode [sic].
+ switch inst.Op {
+ case FDIV, FDIVR, FSUB, FSUBR, FDIVP, FDIVRP, FSUBP, FSUBRP:
+ // DC E0, DC F0: libopcodes swaps FSUBR/FSUB and FDIVR/FDIV, at least
+ // if you believe the Intel manual is correct (the encoding is irregular as given;
+ // libopcodes uses the more regular expected encoding).
+ // TODO(rsc): Test to ensure Intel manuals are correct and report to libopcodes maintainers?
+ // NOTE: iant thinks this is deliberate, but we can't find the history.
+ _, reg1 := inst.Args[0].(Reg)
+ _, reg2 := inst.Args[1].(Reg)
+ if reg1 && reg2 && (inst.Opcode>>24 == 0xDC || inst.Opcode>>24 == 0xDE) {
+ switch inst.Op {
+ case FDIV:
+ inst.Op = FDIVR
+ case FDIVR:
+ inst.Op = FDIV
+ case FSUB:
+ inst.Op = FSUBR
+ case FSUBR:
+ inst.Op = FSUB
+ case FDIVP:
+ inst.Op = FDIVRP
+ case FDIVRP:
+ inst.Op = FDIVP
+ case FSUBP:
+ inst.Op = FSUBRP
+ case FSUBRP:
+ inst.Op = FSUBP
+ }
+ }
+
+ case MOVNTSD:
+ // MOVNTSD is F2 0F 2B /r.
+ // MOVNTSS is F3 0F 2B /r (supposedly; not in manuals).
+ // Usually inner prefixes win for display,
+ // so that F3 F2 0F 2B 11 is REP MOVNTSD
+ // and F2 F3 0F 2B 11 is REPN MOVNTSS.
+ // Libopcodes always prefers MOVNTSS regardless of prefix order.
+ if countPrefix(&inst, 0xF3) > 0 {
+ found := false
+ for i := len(inst.Prefix) - 1; i >= 0; i-- {
+ switch inst.Prefix[i] & 0xFF {
+ case 0xF3:
+ if !found {
+ found = true
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ case 0xF2:
+ inst.Prefix[i] &^= PrefixImplicit
+ }
+ }
+ inst.Op = MOVNTSS
+ }
+ }
+
+ // Add implicit arguments.
+ switch inst.Op {
+ case MONITOR:
+ inst.Args[0] = EDX
+ inst.Args[1] = ECX
+ inst.Args[2] = EAX
+ if inst.AddrSize == 16 {
+ inst.Args[2] = AX
+ }
+
+ case MWAIT:
+ if inst.Mode == 64 {
+ inst.Args[0] = RCX
+ inst.Args[1] = RAX
+ } else {
+ inst.Args[0] = ECX
+ inst.Args[1] = EAX
+ }
+ }
+
+ // Adjust which prefixes will be displayed.
+ // The rule is to display all the prefixes not implied by
+ // the usual instruction display, that is, all the prefixes
+ // except the ones with PrefixImplicit set.
+ // However, of course, there are exceptions to the rule.
+ switch inst.Op {
+ case CRC32:
+ // CRC32 has a mandatory F2 prefix.
+ // If there are multiple F2s and no F3s, the extra F2s do not print.
+ // (And Decode has already marked them implicit.)
+ // However, if there is an F3 anywhere, then the extra F2s do print.
+ // If there are multiple F2 prefixes *and* an (ignored) F3,
+ // then libopcodes prints the extra F2s as REPNs.
+ if countPrefix(&inst, 0xF2) > 1 {
+ unmarkImplicit(&inst, 0xF2)
+ markLastImplicit(&inst, 0xF2)
+ }
+
+ // An unused data size override should probably be shown,
+ // to distinguish DATA16 CRC32B from plain CRC32B,
+ // but libopcodes always treats the final override as implicit
+ // and the others as explicit.
+ unmarkImplicit(&inst, PrefixDataSize)
+ markLastImplicit(&inst, PrefixDataSize)
+
+ case CVTSI2SD, CVTSI2SS:
+ if !isMem(inst.Args[1]) {
+ markLastImplicit(&inst, PrefixDataSize)
+ }
+
+ case CVTSD2SI, CVTSS2SI, CVTTSD2SI, CVTTSS2SI,
+ ENTER, FLDENV, FNSAVE, FNSTENV, FRSTOR, LGDT, LIDT, LRET,
+ POP, PUSH, RET, SGDT, SIDT, SYSRET, XBEGIN:
+ markLastImplicit(&inst, PrefixDataSize)
+
+ case LOOP, LOOPE, LOOPNE, MONITOR:
+ markLastImplicit(&inst, PrefixAddrSize)
+
+ case MOV:
+ // The 16-bit and 32-bit forms of MOV Sreg, dst and MOV src, Sreg
+ // cannot be distinguished when src or dst refers to memory, because
+ // Sreg is always a 16-bit value, even when we're doing a 32-bit
+ // instruction. Because the instruction tables distinguished these two,
+ // any operand size prefix has been marked as used (to decide which
+ // branch to take). Unmark it, so that it will show up in disassembly,
+ // so that the reader can tell the size of memory operand.
+ // up with the same arguments
+ dst, _ := inst.Args[0].(Reg)
+ src, _ := inst.Args[1].(Reg)
+ if ES <= src && src <= GS && isMem(inst.Args[0]) || ES <= dst && dst <= GS && isMem(inst.Args[1]) {
+ unmarkImplicit(&inst, PrefixDataSize)
+ }
+
+ case MOVDQU:
+ if countPrefix(&inst, 0xF3) > 1 {
+ unmarkImplicit(&inst, 0xF3)
+ markLastImplicit(&inst, 0xF3)
+ }
+
+ case MOVQ2DQ:
+ markLastImplicit(&inst, PrefixDataSize)
+
+ case SLDT, SMSW, STR, FXRSTOR, XRSTOR, XSAVE, XSAVEOPT, CMPXCHG8B:
+ if isMem(inst.Args[0]) {
+ unmarkImplicit(&inst, PrefixDataSize)
+ }
+
+ case SYSEXIT:
+ unmarkImplicit(&inst, PrefixDataSize)
+ }
+
+ if isCondJmp[inst.Op] || isLoop[inst.Op] || inst.Op == JCXZ || inst.Op == JECXZ || inst.Op == JRCXZ {
+ if countPrefix(&inst, PrefixCS) > 0 && countPrefix(&inst, PrefixDS) > 0 {
+ for i, p := range inst.Prefix {
+ switch p & 0xFFF {
+ case PrefixPN, PrefixPT:
+ inst.Prefix[i] &= 0xF0FF // cut interpretation bits, producing original segment prefix
+ }
+ }
+ }
+ }
+
+ // XACQUIRE/XRELEASE adjustment.
+ if inst.Op == MOV {
+ // MOV into memory is a candidate for turning REP into XRELEASE.
+ // However, if the REP is followed by a REPN, that REPN blocks the
+ // conversion.
+ haveREPN := false
+ for i := len(inst.Prefix) - 1; i >= 0; i-- {
+ switch inst.Prefix[i] &^ PrefixIgnored {
+ case PrefixREPN:
+ haveREPN = true
+ case PrefixXRELEASE:
+ if haveREPN {
+ inst.Prefix[i] = PrefixREP
+ }
+ }
+ }
+ }
+
+ // We only format the final F2/F3 as XRELEASE/XACQUIRE.
+ haveXA := false
+ haveXR := false
+ for i := len(inst.Prefix) - 1; i >= 0; i-- {
+ switch inst.Prefix[i] &^ PrefixIgnored {
+ case PrefixXRELEASE:
+ if !haveXR {
+ haveXR = true
+ } else {
+ inst.Prefix[i] = PrefixREP
+ }
+
+ case PrefixXACQUIRE:
+ if !haveXA {
+ haveXA = true
+ } else {
+ inst.Prefix[i] = PrefixREPN
+ }
+ }
+ }
+
+ // Determine opcode.
+ op := strings.ToLower(inst.Op.String())
+ if alt := gnuOp[inst.Op]; alt != "" {
+ op = alt
+ }
+
+ // Determine opcode suffix.
+ // Libopcodes omits the suffix if the width of the operation
+ // can be inferred from a register arguments. For example,
+ // add $1, %ebx has no suffix because you can tell from the
+ // 32-bit register destination that it is a 32-bit add,
+ // but in addl $1, (%ebx), the destination is memory, so the
+ // size is not evident without the l suffix.
+ needSuffix := true
+SuffixLoop:
+ for i, a := range inst.Args {
+ if a == nil {
+ break
+ }
+ switch a := a.(type) {
+ case Reg:
+ switch inst.Op {
+ case MOVSX, MOVZX:
+ continue
+
+ case SHL, SHR, RCL, RCR, ROL, ROR, SAR:
+ if i == 1 {
+ // shift count does not tell us operand size
+ continue
+ }
+
+ case CRC32:
+ // The source argument does tell us operand size,
+ // but libopcodes still always puts a suffix on crc32.
+ continue
+
+ case PUSH, POP:
+ // Even though segment registers are 16-bit, push and pop
+ // can save/restore them from 32-bit slots, so they
+ // do not imply operand size.
+ if ES <= a && a <= GS {
+ continue
+ }
+
+ case CVTSI2SD, CVTSI2SS:
+ // The integer register argument takes priority.
+ if X0 <= a && a <= X15 {
+ continue
+ }
+ }
+
+ if AL <= a && a <= R15 || ES <= a && a <= GS || X0 <= a && a <= X15 || M0 <= a && a <= M7 {
+ needSuffix = false
+ break SuffixLoop
+ }
+ }
+ }
+
+ if needSuffix {
+ switch inst.Op {
+ case CMPXCHG8B, FLDCW, FNSTCW, FNSTSW, LDMXCSR, LLDT, LMSW, LTR, PCLMULQDQ,
+ SETA, SETAE, SETB, SETBE, SETE, SETG, SETGE, SETL, SETLE, SETNE, SETNO, SETNP, SETNS, SETO, SETP, SETS,
+ SLDT, SMSW, STMXCSR, STR, VERR, VERW:
+ // For various reasons, libopcodes emits no suffix for these instructions.
+
+ case CRC32:
+ op += byteSizeSuffix(argBytes(&inst, inst.Args[1]))
+
+ case LGDT, LIDT, SGDT, SIDT:
+ op += byteSizeSuffix(inst.DataSize / 8)
+
+ case MOVZX, MOVSX:
+ // Integer size conversions get two suffixes.
+ op = op[:4] + byteSizeSuffix(argBytes(&inst, inst.Args[1])) + byteSizeSuffix(argBytes(&inst, inst.Args[0]))
+
+ case LOOP, LOOPE, LOOPNE:
+ // Add w suffix to indicate use of CX register instead of ECX.
+ if inst.AddrSize == 16 {
+ op += "w"
+ }
+
+ case CALL, ENTER, JMP, LCALL, LEAVE, LJMP, LRET, RET, SYSRET, XBEGIN:
+ // Add w suffix to indicate use of 16-bit target.
+ // Exclude JMP rel8.
+ if inst.Opcode>>24 == 0xEB {
+ break
+ }
+ if inst.DataSize == 16 && inst.Mode != 16 {
+ markLastImplicit(&inst, PrefixDataSize)
+ op += "w"
+ } else if inst.Mode == 64 {
+ op += "q"
+ }
+
+ case FRSTOR, FNSAVE, FNSTENV, FLDENV:
+ // Add s suffix to indicate shortened FPU state (I guess).
+ if inst.DataSize == 16 {
+ op += "s"
+ }
+
+ case PUSH, POP:
+ if markLastImplicit(&inst, PrefixDataSize) {
+ op += byteSizeSuffix(inst.DataSize / 8)
+ } else if inst.Mode == 64 {
+ op += "q"
+ } else {
+ op += byteSizeSuffix(inst.MemBytes)
+ }
+
+ default:
+ if isFloat(inst.Op) {
+ // I can't explain any of this, but it's what libopcodes does.
+ switch inst.MemBytes {
+ default:
+ if (inst.Op == FLD || inst.Op == FSTP) && isMem(inst.Args[0]) {
+ op += "t"
+ }
+ case 4:
+ if isFloatInt(inst.Op) {
+ op += "l"
+ } else {
+ op += "s"
+ }
+ case 8:
+ if isFloatInt(inst.Op) {
+ op += "ll"
+ } else {
+ op += "l"
+ }
+ }
+ break
+ }
+
+ op += byteSizeSuffix(inst.MemBytes)
+ }
+ }
+
+ // Adjust special case opcodes.
+ switch inst.Op {
+ case 0:
+ if inst.Prefix[0] != 0 {
+ return strings.ToLower(inst.Prefix[0].String())
+ }
+
+ case INT:
+ if inst.Opcode>>24 == 0xCC {
+ inst.Args[0] = nil
+ op = "int3"
+ }
+
+ case CMPPS, CMPPD, CMPSD_XMM, CMPSS:
+ imm, ok := inst.Args[2].(Imm)
+ if ok && 0 <= imm && imm < 8 {
+ inst.Args[2] = nil
+ op = cmppsOps[imm] + op[3:]
+ }
+
+ case PCLMULQDQ:
+ imm, ok := inst.Args[2].(Imm)
+ if ok && imm&^0x11 == 0 {
+ inst.Args[2] = nil
+ op = pclmulqOps[(imm&0x10)>>3|(imm&1)]
+ }
+
+ case XLATB:
+ if markLastImplicit(&inst, PrefixAddrSize) {
+ op = "xlat" // not xlatb
+ }
+ }
+
+ // Build list of argument strings.
+ var (
+ usedPrefixes bool // segment prefixes consumed by Mem formatting
+ args []string // formatted arguments
+ )
+ for i, a := range inst.Args {
+ if a == nil {
+ break
+ }
+ switch inst.Op {
+ case MOVSB, MOVSW, MOVSD, MOVSQ, OUTSB, OUTSW, OUTSD:
+ if i == 0 {
+ usedPrefixes = true // disable use of prefixes for first argument
+ } else {
+ usedPrefixes = false
+ }
+ }
+ if a == Imm(1) && (inst.Opcode>>24)&^1 == 0xD0 {
+ continue
+ }
+ args = append(args, gnuArg(&inst, a, &usedPrefixes))
+ }
+
+ // The default is to print the arguments in reverse Intel order.
+ // A few instructions inhibit this behavior.
+ switch inst.Op {
+ case BOUND, LCALL, ENTER, LJMP:
+ // no reverse
+ default:
+ // reverse args
+ for i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {
+ args[i], args[j] = args[j], args[i]
+ }
+ }
+
+ // Build prefix string.
+ // Must be after argument formatting, which can turn off segment prefixes.
+ var (
+ prefix = "" // output string
+ numAddr = 0
+ numData = 0
+ implicitData = false
+ )
+ for _, p := range inst.Prefix {
+ if p&0xFF == PrefixDataSize && p&PrefixImplicit != 0 {
+ implicitData = true
+ }
+ }
+ for _, p := range inst.Prefix {
+ if p == 0 {
+ break
+ }
+ if p&PrefixImplicit != 0 {
+ continue
+ }
+ switch p &^ (PrefixIgnored | PrefixInvalid) {
+ default:
+ if p.IsREX() {
+ if p&0xFF == PrefixREX {
+ prefix += "rex "
+ } else {
+ prefix += "rex." + p.String()[4:] + " "
+ }
+ break
+ }
+ prefix += strings.ToLower(p.String()) + " "
+
+ case PrefixPN:
+ op += ",pn"
+ continue
+
+ case PrefixPT:
+ op += ",pt"
+ continue
+
+ case PrefixAddrSize, PrefixAddr16, PrefixAddr32:
+ // For unknown reasons, if the addr16 prefix is repeated,
+ // libopcodes displays all but the last as addr32, even though
+ // the addressing form used in a memory reference is clearly
+ // still 16-bit.
+ n := 32
+ if inst.Mode == 32 {
+ n = 16
+ }
+ numAddr++
+ if countPrefix(&inst, PrefixAddrSize) > numAddr {
+ n = inst.Mode
+ }
+ prefix += fmt.Sprintf("addr%d ", n)
+ continue
+
+ case PrefixData16, PrefixData32:
+ if implicitData && countPrefix(&inst, PrefixDataSize) > 1 {
+ // Similar to the addr32 logic above, but it only kicks in
+ // when something used the data size prefix (one is implicit).
+ n := 16
+ if inst.Mode == 16 {
+ n = 32
+ }
+ numData++
+ if countPrefix(&inst, PrefixDataSize) > numData {
+ if inst.Mode == 16 {
+ n = 16
+ } else {
+ n = 32
+ }
+ }
+ prefix += fmt.Sprintf("data%d ", n)
+ continue
+ }
+ prefix += strings.ToLower(p.String()) + " "
+ }
+ }
+
+ // Finally! Put it all together.
+ text := prefix + op
+ if args != nil {
+ text += " "
+ // Indirect call/jmp gets a star to distinguish from direct jump address.
+ if (inst.Op == CALL || inst.Op == JMP || inst.Op == LJMP || inst.Op == LCALL) && (isMem(inst.Args[0]) || isReg(inst.Args[0])) {
+ text += "*"
+ }
+ text += strings.Join(args, ",")
+ }
+ return text
+}
+
+// gnuArg returns the GNU syntax for the argument x from the instruction inst.
+// If *usedPrefixes is false and x is a Mem, then the formatting
+// includes any segment prefixes and sets *usedPrefixes to true.
+func gnuArg(inst *Inst, x Arg, usedPrefixes *bool) string {
+ if x == nil {
+ return "<nil>"
+ }
+ switch x := x.(type) {
+ case Reg:
+ switch inst.Op {
+ case CVTSI2SS, CVTSI2SD, CVTSS2SI, CVTSD2SI, CVTTSD2SI, CVTTSS2SI:
+ if inst.DataSize == 16 && EAX <= x && x <= R15L {
+ x -= EAX - AX
+ }
+
+ case IN, INSB, INSW, INSD, OUT, OUTSB, OUTSW, OUTSD:
+ // DX is the port, but libopcodes prints it as if it were a memory reference.
+ if x == DX {
+ return "(%dx)"
+ }
+ }
+ return gccRegName[x]
+ case Mem:
+ seg := ""
+ var haveCS, haveDS, haveES, haveFS, haveGS, haveSS bool
+ switch x.Segment {
+ case CS:
+ haveCS = true
+ case DS:
+ haveDS = true
+ case ES:
+ haveES = true
+ case FS:
+ haveFS = true
+ case GS:
+ haveGS = true
+ case SS:
+ haveSS = true
+ }
+ switch inst.Op {
+ case INSB, INSW, INSD, STOSB, STOSW, STOSD, STOSQ, SCASB, SCASW, SCASD, SCASQ:
+ // These do not accept segment prefixes, at least in the GNU rendering.
+ default:
+ if *usedPrefixes {
+ break
+ }
+ for i := len(inst.Prefix) - 1; i >= 0; i-- {
+ p := inst.Prefix[i] &^ PrefixIgnored
+ if p == 0 {
+ continue
+ }
+ switch p {
+ case PrefixCS:
+ if !haveCS {
+ haveCS = true
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ case PrefixDS:
+ if !haveDS {
+ haveDS = true
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ case PrefixES:
+ if !haveES {
+ haveES = true
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ case PrefixFS:
+ if !haveFS {
+ haveFS = true
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ case PrefixGS:
+ if !haveGS {
+ haveGS = true
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ case PrefixSS:
+ if !haveSS {
+ haveSS = true
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ }
+ }
+ *usedPrefixes = true
+ }
+ if haveCS {
+ seg += "%cs:"
+ }
+ if haveDS {
+ seg += "%ds:"
+ }
+ if haveSS {
+ seg += "%ss:"
+ }
+ if haveES {
+ seg += "%es:"
+ }
+ if haveFS {
+ seg += "%fs:"
+ }
+ if haveGS {
+ seg += "%gs:"
+ }
+ disp := ""
+ if x.Disp != 0 {
+ disp = fmt.Sprintf("%#x", x.Disp)
+ }
+ if x.Scale == 0 || x.Index == 0 && x.Scale == 1 && (x.Base == ESP || x.Base == RSP || x.Base == 0 && inst.Mode == 64) {
+ if x.Base == 0 {
+ return seg + disp
+ }
+ return fmt.Sprintf("%s%s(%s)", seg, disp, gccRegName[x.Base])
+ }
+ base := gccRegName[x.Base]
+ if x.Base == 0 {
+ base = ""
+ }
+ index := gccRegName[x.Index]
+ if x.Index == 0 {
+ if inst.AddrSize == 64 {
+ index = "%riz"
+ } else {
+ index = "%eiz"
+ }
+ }
+ if AX <= x.Base && x.Base <= DI {
+ // 16-bit addressing - no scale
+ return fmt.Sprintf("%s%s(%s,%s)", seg, disp, base, index)
+ }
+ return fmt.Sprintf("%s%s(%s,%s,%d)", seg, disp, base, index, x.Scale)
+ case Rel:
+ return fmt.Sprintf(".%+#x", int32(x))
+ case Imm:
+ if inst.Mode == 32 {
+ return fmt.Sprintf("$%#x", uint32(x))
+ }
+ return fmt.Sprintf("$%#x", int64(x))
+ }
+ return x.String()
+}
+
+var gccRegName = [...]string{
+ 0: "REG0",
+ AL: "%al",
+ CL: "%cl",
+ BL: "%bl",
+ DL: "%dl",
+ AH: "%ah",
+ CH: "%ch",
+ BH: "%bh",
+ DH: "%dh",
+ SPB: "%spl",
+ BPB: "%bpl",
+ SIB: "%sil",
+ DIB: "%dil",
+ R8B: "%r8b",
+ R9B: "%r9b",
+ R10B: "%r10b",
+ R11B: "%r11b",
+ R12B: "%r12b",
+ R13B: "%r13b",
+ R14B: "%r14b",
+ R15B: "%r15b",
+ AX: "%ax",
+ CX: "%cx",
+ BX: "%bx",
+ DX: "%dx",
+ SP: "%sp",
+ BP: "%bp",
+ SI: "%si",
+ DI: "%di",
+ R8W: "%r8w",
+ R9W: "%r9w",
+ R10W: "%r10w",
+ R11W: "%r11w",
+ R12W: "%r12w",
+ R13W: "%r13w",
+ R14W: "%r14w",
+ R15W: "%r15w",
+ EAX: "%eax",
+ ECX: "%ecx",
+ EDX: "%edx",
+ EBX: "%ebx",
+ ESP: "%esp",
+ EBP: "%ebp",
+ ESI: "%esi",
+ EDI: "%edi",
+ R8L: "%r8d",
+ R9L: "%r9d",
+ R10L: "%r10d",
+ R11L: "%r11d",
+ R12L: "%r12d",
+ R13L: "%r13d",
+ R14L: "%r14d",
+ R15L: "%r15d",
+ RAX: "%rax",
+ RCX: "%rcx",
+ RDX: "%rdx",
+ RBX: "%rbx",
+ RSP: "%rsp",
+ RBP: "%rbp",
+ RSI: "%rsi",
+ RDI: "%rdi",
+ R8: "%r8",
+ R9: "%r9",
+ R10: "%r10",
+ R11: "%r11",
+ R12: "%r12",
+ R13: "%r13",
+ R14: "%r14",
+ R15: "%r15",
+ IP: "%ip",
+ EIP: "%eip",
+ RIP: "%rip",
+ F0: "%st",
+ F1: "%st(1)",
+ F2: "%st(2)",
+ F3: "%st(3)",
+ F4: "%st(4)",
+ F5: "%st(5)",
+ F6: "%st(6)",
+ F7: "%st(7)",
+ M0: "%mm0",
+ M1: "%mm1",
+ M2: "%mm2",
+ M3: "%mm3",
+ M4: "%mm4",
+ M5: "%mm5",
+ M6: "%mm6",
+ M7: "%mm7",
+ X0: "%xmm0",
+ X1: "%xmm1",
+ X2: "%xmm2",
+ X3: "%xmm3",
+ X4: "%xmm4",
+ X5: "%xmm5",
+ X6: "%xmm6",
+ X7: "%xmm7",
+ X8: "%xmm8",
+ X9: "%xmm9",
+ X10: "%xmm10",
+ X11: "%xmm11",
+ X12: "%xmm12",
+ X13: "%xmm13",
+ X14: "%xmm14",
+ X15: "%xmm15",
+ CS: "%cs",
+ SS: "%ss",
+ DS: "%ds",
+ ES: "%es",
+ FS: "%fs",
+ GS: "%gs",
+ GDTR: "%gdtr",
+ IDTR: "%idtr",
+ LDTR: "%ldtr",
+ MSW: "%msw",
+ TASK: "%task",
+ CR0: "%cr0",
+ CR1: "%cr1",
+ CR2: "%cr2",
+ CR3: "%cr3",
+ CR4: "%cr4",
+ CR5: "%cr5",
+ CR6: "%cr6",
+ CR7: "%cr7",
+ CR8: "%cr8",
+ CR9: "%cr9",
+ CR10: "%cr10",
+ CR11: "%cr11",
+ CR12: "%cr12",
+ CR13: "%cr13",
+ CR14: "%cr14",
+ CR15: "%cr15",
+ DR0: "%db0",
+ DR1: "%db1",
+ DR2: "%db2",
+ DR3: "%db3",
+ DR4: "%db4",
+ DR5: "%db5",
+ DR6: "%db6",
+ DR7: "%db7",
+ TR0: "%tr0",
+ TR1: "%tr1",
+ TR2: "%tr2",
+ TR3: "%tr3",
+ TR4: "%tr4",
+ TR5: "%tr5",
+ TR6: "%tr6",
+ TR7: "%tr7",
+}
+
+var gnuOp = map[Op]string{
+ CBW: "cbtw",
+ CDQ: "cltd",
+ CMPSD: "cmpsl",
+ CMPSD_XMM: "cmpsd",
+ CWD: "cwtd",
+ CWDE: "cwtl",
+ CQO: "cqto",
+ INSD: "insl",
+ IRET: "iretw",
+ IRETD: "iret",
+ IRETQ: "iretq",
+ LODSB: "lods",
+ LODSD: "lods",
+ LODSQ: "lods",
+ LODSW: "lods",
+ MOVSD: "movsl",
+ MOVSD_XMM: "movsd",
+ OUTSD: "outsl",
+ POPA: "popaw",
+ POPAD: "popa",
+ POPF: "popfw",
+ POPFD: "popf",
+ PUSHA: "pushaw",
+ PUSHAD: "pusha",
+ PUSHF: "pushfw",
+ PUSHFD: "pushf",
+ SCASB: "scas",
+ SCASD: "scas",
+ SCASQ: "scas",
+ SCASW: "scas",
+ STOSB: "stos",
+ STOSD: "stos",
+ STOSQ: "stos",
+ STOSW: "stos",
+ XLATB: "xlat",
+}
+
+var cmppsOps = []string{
+ "cmpeq",
+ "cmplt",
+ "cmple",
+ "cmpunord",
+ "cmpneq",
+ "cmpnlt",
+ "cmpnle",
+ "cmpord",
+}
+
+var pclmulqOps = []string{
+ "pclmullqlqdq",
+ "pclmulhqlqdq",
+ "pclmullqhqdq",
+ "pclmulhqhqdq",
+}
+
+func countPrefix(inst *Inst, target Prefix) int {
+ n := 0
+ for _, p := range inst.Prefix {
+ if p&0xFF == target&0xFF {
+ n++
+ }
+ }
+ return n
+}
+
+func markLastImplicit(inst *Inst, prefix Prefix) bool {
+ for i := len(inst.Prefix) - 1; i >= 0; i-- {
+ p := inst.Prefix[i]
+ if p&0xFF == prefix {
+ inst.Prefix[i] |= PrefixImplicit
+ return true
+ }
+ }
+ return false
+}
+
+func unmarkImplicit(inst *Inst, prefix Prefix) {
+ for i := len(inst.Prefix) - 1; i >= 0; i-- {
+ p := inst.Prefix[i]
+ if p&0xFF == prefix {
+ inst.Prefix[i] &^= PrefixImplicit
+ }
+ }
+}
+
+func byteSizeSuffix(b int) string {
+ switch b {
+ case 1:
+ return "b"
+ case 2:
+ return "w"
+ case 4:
+ return "l"
+ case 8:
+ return "q"
+ }
+ return ""
+}
+
+func argBytes(inst *Inst, arg Arg) int {
+ if isMem(arg) {
+ return inst.MemBytes
+ }
+ return regBytes(arg)
+}
+
+func isFloat(op Op) bool {
+ switch op {
+ case FADD, FCOM, FCOMP, FDIV, FDIVR, FIADD, FICOM, FICOMP, FIDIV, FIDIVR, FILD, FIMUL, FIST, FISTP, FISTTP, FISUB, FISUBR, FLD, FMUL, FST, FSTP, FSUB, FSUBR:
+ return true
+ }
+ return false
+}
+
+func isFloatInt(op Op) bool {
+ switch op {
+ case FIADD, FICOM, FICOMP, FIDIV, FIDIVR, FILD, FIMUL, FIST, FISTP, FISTTP, FISUB, FISUBR:
+ return true
+ }
+ return false
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/inst.go b/src/cmd/internal/rsc.io/x86/x86asm/inst.go
new file mode 100644
index 000000000..d4c1b6ce3
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/inst.go
@@ -0,0 +1,641 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package x86asm implements decoding of x86 machine code.
+package x86asm
+
+import (
+ "bytes"
+ "fmt"
+)
+
+// An Inst is a single instruction.
+type Inst struct {
+ Prefix Prefixes // Prefixes applied to the instruction.
+ Op Op // Opcode mnemonic
+ Opcode uint32 // Encoded opcode bits, left aligned (first byte is Opcode>>24, etc)
+ Args Args // Instruction arguments, in Intel order
+ Mode int // processor mode in bits: 16, 32, or 64
+ AddrSize int // address size in bits: 16, 32, or 64
+ DataSize int // operand size in bits: 16, 32, or 64
+ MemBytes int // size of memory argument in bytes: 1, 2, 4, 8, 16, and so on.
+ Len int // length of encoded instruction in bytes
+}
+
+// Prefixes is an array of prefixes associated with a single instruction.
+// The prefixes are listed in the same order as found in the instruction:
+// each prefix byte corresponds to one slot in the array. The first zero
+// in the array marks the end of the prefixes.
+type Prefixes [14]Prefix
+
+// A Prefix represents an Intel instruction prefix.
+// The low 8 bits are the actual prefix byte encoding,
+// and the top 8 bits contain distinguishing bits and metadata.
+type Prefix uint16
+
+const (
+ // Metadata about the role of a prefix in an instruction.
+ PrefixImplicit Prefix = 0x8000 // prefix is implied by instruction text
+ PrefixIgnored Prefix = 0x4000 // prefix is ignored: either irrelevant or overridden by a later prefix
+ PrefixInvalid Prefix = 0x2000 // prefix makes entire instruction invalid (bad LOCK)
+
+ // Memory segment overrides.
+ PrefixES Prefix = 0x26 // ES segment override
+ PrefixCS Prefix = 0x2E // CS segment override
+ PrefixSS Prefix = 0x36 // SS segment override
+ PrefixDS Prefix = 0x3E // DS segment override
+ PrefixFS Prefix = 0x64 // FS segment override
+ PrefixGS Prefix = 0x65 // GS segment override
+
+ // Branch prediction.
+ PrefixPN Prefix = 0x12E // predict not taken (conditional branch only)
+ PrefixPT Prefix = 0x13E // predict taken (conditional branch only)
+
+ // Size attributes.
+ PrefixDataSize Prefix = 0x66 // operand size override
+ PrefixData16 Prefix = 0x166
+ PrefixData32 Prefix = 0x266
+ PrefixAddrSize Prefix = 0x67 // address size override
+ PrefixAddr16 Prefix = 0x167
+ PrefixAddr32 Prefix = 0x267
+
+ // One of a kind.
+ PrefixLOCK Prefix = 0xF0 // lock
+ PrefixREPN Prefix = 0xF2 // repeat not zero
+ PrefixXACQUIRE Prefix = 0x1F2
+ PrefixBND Prefix = 0x2F2
+ PrefixREP Prefix = 0xF3 // repeat
+ PrefixXRELEASE Prefix = 0x1F3
+
+ // The REX prefixes must be in the range [PrefixREX, PrefixREX+0x10).
+ // the other bits are set or not according to the intended use.
+ PrefixREX Prefix = 0x40 // REX 64-bit extension prefix
+ PrefixREXW Prefix = 0x08 // extension bit W (64-bit instruction width)
+ PrefixREXR Prefix = 0x04 // extension bit R (r field in modrm)
+ PrefixREXX Prefix = 0x02 // extension bit X (index field in sib)
+ PrefixREXB Prefix = 0x01 // extension bit B (r/m field in modrm or base field in sib)
+)
+
+// IsREX reports whether p is a REX prefix byte.
+func (p Prefix) IsREX() bool {
+ return p&0xF0 == PrefixREX
+}
+
+func (p Prefix) String() string {
+ p &^= PrefixImplicit | PrefixIgnored | PrefixInvalid
+ if s := prefixNames[p]; s != "" {
+ return s
+ }
+
+ if p.IsREX() {
+ s := "REX."
+ if p&PrefixREXW != 0 {
+ s += "W"
+ }
+ if p&PrefixREXR != 0 {
+ s += "R"
+ }
+ if p&PrefixREXX != 0 {
+ s += "X"
+ }
+ if p&PrefixREXB != 0 {
+ s += "B"
+ }
+ return s
+ }
+
+ return fmt.Sprintf("Prefix(%#x)", int(p))
+}
+
+// An Op is an x86 opcode.
+type Op uint32
+
+func (op Op) String() string {
+ i := int(op)
+ if i < 0 || i >= len(opNames) || opNames[i] == "" {
+ return fmt.Sprintf("Op(%d)", i)
+ }
+ return opNames[i]
+}
+
+// An Args holds the instruction arguments.
+// If an instruction has fewer than 4 arguments,
+// the final elements in the array are nil.
+type Args [4]Arg
+
+// An Arg is a single instruction argument,
+// one of these types: Reg, Mem, Imm, Rel.
+type Arg interface {
+ String() string
+ isArg()
+}
+
+// Note that the implements of Arg that follow are all sized
+// so that on a 64-bit machine the data can be inlined in
+// the interface value instead of requiring an allocation.
+
+// A Reg is a single register.
+// The zero Reg value has no name but indicates ``no register.''
+type Reg uint8
+
+const (
+ _ Reg = iota
+
+ // 8-bit
+ AL
+ CL
+ DL
+ BL
+ AH
+ CH
+ DH
+ BH
+ SPB
+ BPB
+ SIB
+ DIB
+ R8B
+ R9B
+ R10B
+ R11B
+ R12B
+ R13B
+ R14B
+ R15B
+
+ // 16-bit
+ AX
+ CX
+ DX
+ BX
+ SP
+ BP
+ SI
+ DI
+ R8W
+ R9W
+ R10W
+ R11W
+ R12W
+ R13W
+ R14W
+ R15W
+
+ // 32-bit
+ EAX
+ ECX
+ EDX
+ EBX
+ ESP
+ EBP
+ ESI
+ EDI
+ R8L
+ R9L
+ R10L
+ R11L
+ R12L
+ R13L
+ R14L
+ R15L
+
+ // 64-bit
+ RAX
+ RCX
+ RDX
+ RBX
+ RSP
+ RBP
+ RSI
+ RDI
+ R8
+ R9
+ R10
+ R11
+ R12
+ R13
+ R14
+ R15
+
+ // Instruction pointer.
+ IP // 16-bit
+ EIP // 32-bit
+ RIP // 64-bit
+
+ // 387 floating point registers.
+ F0
+ F1
+ F2
+ F3
+ F4
+ F5
+ F6
+ F7
+
+ // MMX registers.
+ M0
+ M1
+ M2
+ M3
+ M4
+ M5
+ M6
+ M7
+
+ // XMM registers.
+ X0
+ X1
+ X2
+ X3
+ X4
+ X5
+ X6
+ X7
+ X8
+ X9
+ X10
+ X11
+ X12
+ X13
+ X14
+ X15
+
+ // Segment registers.
+ ES
+ CS
+ SS
+ DS
+ FS
+ GS
+
+ // System registers.
+ GDTR
+ IDTR
+ LDTR
+ MSW
+ TASK
+
+ // Control registers.
+ CR0
+ CR1
+ CR2
+ CR3
+ CR4
+ CR5
+ CR6
+ CR7
+ CR8
+ CR9
+ CR10
+ CR11
+ CR12
+ CR13
+ CR14
+ CR15
+
+ // Debug registers.
+ DR0
+ DR1
+ DR2
+ DR3
+ DR4
+ DR5
+ DR6
+ DR7
+ DR8
+ DR9
+ DR10
+ DR11
+ DR12
+ DR13
+ DR14
+ DR15
+
+ // Task registers.
+ TR0
+ TR1
+ TR2
+ TR3
+ TR4
+ TR5
+ TR6
+ TR7
+)
+
+const regMax = TR7
+
+func (Reg) isArg() {}
+
+func (r Reg) String() string {
+ i := int(r)
+ if i < 0 || i >= len(regNames) || regNames[i] == "" {
+ return fmt.Sprintf("Reg(%d)", i)
+ }
+ return regNames[i]
+}
+
+// A Mem is a memory reference.
+// The general form is Segment:[Base+Scale*Index+Disp].
+type Mem struct {
+ Segment Reg
+ Base Reg
+ Scale uint8
+ Index Reg
+ Disp int64
+}
+
+func (Mem) isArg() {}
+
+func (m Mem) String() string {
+ var base, plus, scale, index, disp string
+
+ if m.Base != 0 {
+ base = m.Base.String()
+ }
+ if m.Scale != 0 {
+ if m.Base != 0 {
+ plus = "+"
+ }
+ if m.Scale > 1 {
+ scale = fmt.Sprintf("%d*", m.Scale)
+ }
+ index = m.Index.String()
+ }
+ if m.Disp != 0 || m.Base == 0 && m.Scale == 0 {
+ disp = fmt.Sprintf("%+#x", m.Disp)
+ }
+ return "[" + base + plus + scale + index + disp + "]"
+}
+
+// A Rel is an offset relative to the current instruction pointer.
+type Rel int32
+
+func (Rel) isArg() {}
+
+func (r Rel) String() string {
+ return fmt.Sprintf(".%+d", r)
+}
+
+// An Imm is an integer constant.
+type Imm int64
+
+func (Imm) isArg() {}
+
+func (i Imm) String() string {
+ return fmt.Sprintf("%#x", int64(i))
+}
+
+func (i Inst) String() string {
+ var buf bytes.Buffer
+ for _, p := range i.Prefix {
+ if p == 0 {
+ break
+ }
+ if p&PrefixImplicit != 0 {
+ continue
+ }
+ fmt.Fprintf(&buf, "%v ", p)
+ }
+ fmt.Fprintf(&buf, "%v", i.Op)
+ sep := " "
+ for _, v := range i.Args {
+ if v == nil {
+ break
+ }
+ fmt.Fprintf(&buf, "%s%v", sep, v)
+ sep = ", "
+ }
+ return buf.String()
+}
+
+func isReg(a Arg) bool {
+ _, ok := a.(Reg)
+ return ok
+}
+
+func isSegReg(a Arg) bool {
+ r, ok := a.(Reg)
+ return ok && ES <= r && r <= GS
+}
+
+func isMem(a Arg) bool {
+ _, ok := a.(Mem)
+ return ok
+}
+
+func isImm(a Arg) bool {
+ _, ok := a.(Imm)
+ return ok
+}
+
+func regBytes(a Arg) int {
+ r, ok := a.(Reg)
+ if !ok {
+ return 0
+ }
+ if AL <= r && r <= R15B {
+ return 1
+ }
+ if AX <= r && r <= R15W {
+ return 2
+ }
+ if EAX <= r && r <= R15L {
+ return 4
+ }
+ if RAX <= r && r <= R15 {
+ return 8
+ }
+ return 0
+}
+
+func isSegment(p Prefix) bool {
+ switch p {
+ case PrefixCS, PrefixDS, PrefixES, PrefixFS, PrefixGS, PrefixSS:
+ return true
+ }
+ return false
+}
+
+// The Op definitions and string list are in tables.go.
+
+var prefixNames = map[Prefix]string{
+ PrefixCS: "CS",
+ PrefixDS: "DS",
+ PrefixES: "ES",
+ PrefixFS: "FS",
+ PrefixGS: "GS",
+ PrefixSS: "SS",
+ PrefixLOCK: "LOCK",
+ PrefixREP: "REP",
+ PrefixREPN: "REPN",
+ PrefixAddrSize: "ADDRSIZE",
+ PrefixDataSize: "DATASIZE",
+ PrefixAddr16: "ADDR16",
+ PrefixData16: "DATA16",
+ PrefixAddr32: "ADDR32",
+ PrefixData32: "DATA32",
+ PrefixBND: "BND",
+ PrefixXACQUIRE: "XACQUIRE",
+ PrefixXRELEASE: "XRELEASE",
+ PrefixREX: "REX",
+ PrefixPT: "PT",
+ PrefixPN: "PN",
+}
+
+var regNames = [...]string{
+ AL: "AL",
+ CL: "CL",
+ BL: "BL",
+ DL: "DL",
+ AH: "AH",
+ CH: "CH",
+ BH: "BH",
+ DH: "DH",
+ SPB: "SPB",
+ BPB: "BPB",
+ SIB: "SIB",
+ DIB: "DIB",
+ R8B: "R8B",
+ R9B: "R9B",
+ R10B: "R10B",
+ R11B: "R11B",
+ R12B: "R12B",
+ R13B: "R13B",
+ R14B: "R14B",
+ R15B: "R15B",
+ AX: "AX",
+ CX: "CX",
+ BX: "BX",
+ DX: "DX",
+ SP: "SP",
+ BP: "BP",
+ SI: "SI",
+ DI: "DI",
+ R8W: "R8W",
+ R9W: "R9W",
+ R10W: "R10W",
+ R11W: "R11W",
+ R12W: "R12W",
+ R13W: "R13W",
+ R14W: "R14W",
+ R15W: "R15W",
+ EAX: "EAX",
+ ECX: "ECX",
+ EDX: "EDX",
+ EBX: "EBX",
+ ESP: "ESP",
+ EBP: "EBP",
+ ESI: "ESI",
+ EDI: "EDI",
+ R8L: "R8L",
+ R9L: "R9L",
+ R10L: "R10L",
+ R11L: "R11L",
+ R12L: "R12L",
+ R13L: "R13L",
+ R14L: "R14L",
+ R15L: "R15L",
+ RAX: "RAX",
+ RCX: "RCX",
+ RDX: "RDX",
+ RBX: "RBX",
+ RSP: "RSP",
+ RBP: "RBP",
+ RSI: "RSI",
+ RDI: "RDI",
+ R8: "R8",
+ R9: "R9",
+ R10: "R10",
+ R11: "R11",
+ R12: "R12",
+ R13: "R13",
+ R14: "R14",
+ R15: "R15",
+ IP: "IP",
+ EIP: "EIP",
+ RIP: "RIP",
+ F0: "F0",
+ F1: "F1",
+ F2: "F2",
+ F3: "F3",
+ F4: "F4",
+ F5: "F5",
+ F6: "F6",
+ F7: "F7",
+ M0: "M0",
+ M1: "M1",
+ M2: "M2",
+ M3: "M3",
+ M4: "M4",
+ M5: "M5",
+ M6: "M6",
+ M7: "M7",
+ X0: "X0",
+ X1: "X1",
+ X2: "X2",
+ X3: "X3",
+ X4: "X4",
+ X5: "X5",
+ X6: "X6",
+ X7: "X7",
+ X8: "X8",
+ X9: "X9",
+ X10: "X10",
+ X11: "X11",
+ X12: "X12",
+ X13: "X13",
+ X14: "X14",
+ X15: "X15",
+ CS: "CS",
+ SS: "SS",
+ DS: "DS",
+ ES: "ES",
+ FS: "FS",
+ GS: "GS",
+ GDTR: "GDTR",
+ IDTR: "IDTR",
+ LDTR: "LDTR",
+ MSW: "MSW",
+ TASK: "TASK",
+ CR0: "CR0",
+ CR1: "CR1",
+ CR2: "CR2",
+ CR3: "CR3",
+ CR4: "CR4",
+ CR5: "CR5",
+ CR6: "CR6",
+ CR7: "CR7",
+ CR8: "CR8",
+ CR9: "CR9",
+ CR10: "CR10",
+ CR11: "CR11",
+ CR12: "CR12",
+ CR13: "CR13",
+ CR14: "CR14",
+ CR15: "CR15",
+ DR0: "DR0",
+ DR1: "DR1",
+ DR2: "DR2",
+ DR3: "DR3",
+ DR4: "DR4",
+ DR5: "DR5",
+ DR6: "DR6",
+ DR7: "DR7",
+ DR8: "DR8",
+ DR9: "DR9",
+ DR10: "DR10",
+ DR11: "DR11",
+ DR12: "DR12",
+ DR13: "DR13",
+ DR14: "DR14",
+ DR15: "DR15",
+ TR0: "TR0",
+ TR1: "TR1",
+ TR2: "TR2",
+ TR3: "TR3",
+ TR4: "TR4",
+ TR5: "TR5",
+ TR6: "TR6",
+ TR7: "TR7",
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/inst_test.go b/src/cmd/internal/rsc.io/x86/x86asm/inst_test.go
new file mode 100644
index 000000000..23ac52320
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/inst_test.go
@@ -0,0 +1,20 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x86asm
+
+import (
+ "strings"
+ "testing"
+)
+
+func TestRegString(t *testing.T) {
+ for r := Reg(1); r <= regMax; r++ {
+ if regNames[r] == "" {
+ t.Errorf("regNames[%d] is missing", int(r))
+ } else if s := r.String(); strings.Contains(s, "Reg(") {
+ t.Errorf("Reg(%d).String() = %s, want proper name", int(r), s)
+ }
+ }
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/intel.go b/src/cmd/internal/rsc.io/x86/x86asm/intel.go
new file mode 100644
index 000000000..90af9dd63
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/intel.go
@@ -0,0 +1,518 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x86asm
+
+import (
+ "fmt"
+ "strings"
+)
+
+// IntelSyntax returns the Intel assembler syntax for the instruction, as defined by Intel's XED tool.
+func IntelSyntax(inst Inst) string {
+ var iargs []Arg
+ for _, a := range inst.Args {
+ if a == nil {
+ break
+ }
+ iargs = append(iargs, a)
+ }
+
+ switch inst.Op {
+ case INSB, INSD, INSW, OUTSB, OUTSD, OUTSW, LOOPNE, JCXZ, JECXZ, JRCXZ, LOOP, LOOPE, MOV, XLATB:
+ if inst.Op == MOV && (inst.Opcode>>16)&0xFFFC != 0x0F20 {
+ break
+ }
+ for i, p := range inst.Prefix {
+ if p&0xFF == PrefixAddrSize {
+ inst.Prefix[i] &^= PrefixImplicit
+ }
+ }
+ }
+
+ switch inst.Op {
+ case MOV:
+ dst, _ := inst.Args[0].(Reg)
+ src, _ := inst.Args[1].(Reg)
+ if ES <= dst && dst <= GS && EAX <= src && src <= R15L {
+ src -= EAX - AX
+ iargs[1] = src
+ }
+ if ES <= dst && dst <= GS && RAX <= src && src <= R15 {
+ src -= RAX - AX
+ iargs[1] = src
+ }
+
+ if inst.Opcode>>24&^3 == 0xA0 {
+ for i, p := range inst.Prefix {
+ if p&0xFF == PrefixAddrSize {
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ }
+ }
+ }
+
+ switch inst.Op {
+ case AAM, AAD:
+ if imm, ok := iargs[0].(Imm); ok {
+ if inst.DataSize == 32 {
+ iargs[0] = Imm(uint32(int8(imm)))
+ } else if inst.DataSize == 16 {
+ iargs[0] = Imm(uint16(int8(imm)))
+ }
+ }
+
+ case PUSH:
+ if imm, ok := iargs[0].(Imm); ok {
+ iargs[0] = Imm(uint32(imm))
+ }
+ }
+
+ for _, p := range inst.Prefix {
+ if p&PrefixImplicit != 0 {
+ for j, pj := range inst.Prefix {
+ if pj&0xFF == p&0xFF {
+ inst.Prefix[j] |= PrefixImplicit
+ }
+ }
+ }
+ }
+
+ if inst.Op != 0 {
+ for i, p := range inst.Prefix {
+ switch p &^ PrefixIgnored {
+ case PrefixData16, PrefixData32, PrefixCS, PrefixDS, PrefixES, PrefixSS:
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ if p.IsREX() {
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ }
+ }
+
+ if isLoop[inst.Op] || inst.Op == JCXZ || inst.Op == JECXZ || inst.Op == JRCXZ {
+ for i, p := range inst.Prefix {
+ if p == PrefixPT || p == PrefixPN {
+ inst.Prefix[i] |= PrefixImplicit
+ }
+ }
+ }
+
+ switch inst.Op {
+ case AAA, AAS, CBW, CDQE, CLC, CLD, CLI, CLTS, CMC, CPUID, CQO, CWD, DAA, DAS,
+ FDECSTP, FINCSTP, FNCLEX, FNINIT, FNOP, FWAIT, HLT,
+ ICEBP, INSB, INSD, INSW, INT, INTO, INVD, IRET, IRETQ,
+ LAHF, LEAVE, LRET, MONITOR, MWAIT, NOP, OUTSB, OUTSD, OUTSW,
+ PAUSE, POPA, POPF, POPFQ, PUSHA, PUSHF, PUSHFQ,
+ RDMSR, RDPMC, RDTSC, RDTSCP, RET, RSM,
+ SAHF, STC, STD, STI, SYSENTER, SYSEXIT, SYSRET,
+ UD2, WBINVD, WRMSR, XEND, XLATB, XTEST:
+
+ if inst.Op == NOP && inst.Opcode>>24 != 0x90 {
+ break
+ }
+ if inst.Op == RET && inst.Opcode>>24 != 0xC3 {
+ break
+ }
+ if inst.Op == INT && inst.Opcode>>24 != 0xCC {
+ break
+ }
+ if inst.Op == LRET && inst.Opcode>>24 != 0xcb {
+ break
+ }
+ for i, p := range inst.Prefix {
+ if p&0xFF == PrefixDataSize {
+ inst.Prefix[i] &^= PrefixImplicit | PrefixIgnored
+ }
+ }
+
+ case 0:
+ // ok
+ }
+
+ switch inst.Op {
+ case INSB, INSD, INSW, OUTSB, OUTSD, OUTSW, MONITOR, MWAIT, XLATB:
+ iargs = nil
+
+ case STOSB, STOSW, STOSD, STOSQ:
+ iargs = iargs[:1]
+
+ case LODSB, LODSW, LODSD, LODSQ, SCASB, SCASW, SCASD, SCASQ:
+ iargs = iargs[1:]
+ }
+
+ const (
+ haveData16 = 1 << iota
+ haveData32
+ haveAddr16
+ haveAddr32
+ haveXacquire
+ haveXrelease
+ haveLock
+ haveHintTaken
+ haveHintNotTaken
+ haveBnd
+ )
+ var prefixBits uint32
+ prefix := ""
+ for _, p := range inst.Prefix {
+ if p == 0 {
+ break
+ }
+ if p&0xFF == 0xF3 {
+ prefixBits &^= haveBnd
+ }
+ if p&(PrefixImplicit|PrefixIgnored) != 0 {
+ continue
+ }
+ switch p {
+ default:
+ prefix += strings.ToLower(p.String()) + " "
+ case PrefixCS, PrefixDS, PrefixES, PrefixFS, PrefixGS, PrefixSS:
+ if inst.Op == 0 {
+ prefix += strings.ToLower(p.String()) + " "
+ }
+ case PrefixREPN:
+ prefix += "repne "
+ case PrefixLOCK:
+ prefixBits |= haveLock
+ case PrefixData16, PrefixDataSize:
+ prefixBits |= haveData16
+ case PrefixData32:
+ prefixBits |= haveData32
+ case PrefixAddrSize, PrefixAddr16:
+ prefixBits |= haveAddr16
+ case PrefixAddr32:
+ prefixBits |= haveAddr32
+ case PrefixXACQUIRE:
+ prefixBits |= haveXacquire
+ case PrefixXRELEASE:
+ prefixBits |= haveXrelease
+ case PrefixPT:
+ prefixBits |= haveHintTaken
+ case PrefixPN:
+ prefixBits |= haveHintNotTaken
+ case PrefixBND:
+ prefixBits |= haveBnd
+ }
+ }
+ switch inst.Op {
+ case JMP:
+ if inst.Opcode>>24 == 0xEB {
+ prefixBits &^= haveBnd
+ }
+ case RET, LRET:
+ prefixBits &^= haveData16 | haveData32
+ }
+
+ if prefixBits&haveXacquire != 0 {
+ prefix += "xacquire "
+ }
+ if prefixBits&haveXrelease != 0 {
+ prefix += "xrelease "
+ }
+ if prefixBits&haveLock != 0 {
+ prefix += "lock "
+ }
+ if prefixBits&haveBnd != 0 {
+ prefix += "bnd "
+ }
+ if prefixBits&haveHintTaken != 0 {
+ prefix += "hint-taken "
+ }
+ if prefixBits&haveHintNotTaken != 0 {
+ prefix += "hint-not-taken "
+ }
+ if prefixBits&haveAddr16 != 0 {
+ prefix += "addr16 "
+ }
+ if prefixBits&haveAddr32 != 0 {
+ prefix += "addr32 "
+ }
+ if prefixBits&haveData16 != 0 {
+ prefix += "data16 "
+ }
+ if prefixBits&haveData32 != 0 {
+ prefix += "data32 "
+ }
+
+ if inst.Op == 0 {
+ if prefix == "" {
+ return "<no instruction>"
+ }
+ return prefix[:len(prefix)-1]
+ }
+
+ var args []string
+ for _, a := range iargs {
+ if a == nil {
+ break
+ }
+ args = append(args, intelArg(&inst, a))
+ }
+
+ var op string
+ switch inst.Op {
+ case NOP:
+ if inst.Opcode>>24 == 0x0F {
+ if inst.DataSize == 16 {
+ args = append(args, "ax")
+ } else {
+ args = append(args, "eax")
+ }
+ }
+
+ case BLENDVPD, BLENDVPS, PBLENDVB:
+ args = args[:2]
+
+ case INT:
+ if inst.Opcode>>24 == 0xCC {
+ args = nil
+ op = "int3"
+ }
+
+ case LCALL, LJMP:
+ if len(args) == 2 {
+ args[0], args[1] = args[1], args[0]
+ }
+
+ case FCHS, FABS, FTST, FLDPI, FLDL2E, FLDLG2, F2XM1, FXAM, FLD1, FLDL2T, FSQRT, FRNDINT, FCOS, FSIN:
+ if len(args) == 0 {
+ args = append(args, "st0")
+ }
+
+ case FPTAN, FSINCOS, FUCOMPP, FCOMPP, FYL2X, FPATAN, FXTRACT, FPREM1, FPREM, FYL2XP1, FSCALE:
+ if len(args) == 0 {
+ args = []string{"st0", "st1"}
+ }
+
+ case FST, FSTP, FISTTP, FIST, FISTP, FBSTP:
+ if len(args) == 1 {
+ args = append(args, "st0")
+ }
+
+ case FLD, FXCH, FCOM, FCOMP, FIADD, FIMUL, FICOM, FICOMP, FISUBR, FIDIV, FUCOM, FUCOMP, FILD, FBLD, FADD, FMUL, FSUB, FSUBR, FISUB, FDIV, FDIVR, FIDIVR:
+ if len(args) == 1 {
+ args = []string{"st0", args[0]}
+ }
+
+ case MASKMOVDQU, MASKMOVQ, XLATB, OUTSB, OUTSW, OUTSD:
+ FixSegment:
+ for i := len(inst.Prefix) - 1; i >= 0; i-- {
+ p := inst.Prefix[i] & 0xFF
+ switch p {
+ case PrefixCS, PrefixES, PrefixFS, PrefixGS, PrefixSS:
+ if inst.Mode != 64 || p == PrefixFS || p == PrefixGS {
+ args = append(args, strings.ToLower((inst.Prefix[i] & 0xFF).String()))
+ break FixSegment
+ }
+ case PrefixDS:
+ if inst.Mode != 64 {
+ break FixSegment
+ }
+ }
+ }
+ }
+
+ if op == "" {
+ op = intelOp[inst.Op]
+ }
+ if op == "" {
+ op = strings.ToLower(inst.Op.String())
+ }
+ if args != nil {
+ op += " " + strings.Join(args, ", ")
+ }
+ return prefix + op
+}
+
+func intelArg(inst *Inst, arg Arg) string {
+ switch a := arg.(type) {
+ case Imm:
+ if inst.Mode == 32 {
+ return fmt.Sprintf("%#x", uint32(a))
+ }
+ if Imm(int32(a)) == a {
+ return fmt.Sprintf("%#x", int64(a))
+ }
+ return fmt.Sprintf("%#x", uint64(a))
+ case Mem:
+ if a.Base == EIP {
+ a.Base = RIP
+ }
+ prefix := ""
+ switch inst.MemBytes {
+ case 1:
+ prefix = "byte "
+ case 2:
+ prefix = "word "
+ case 4:
+ prefix = "dword "
+ case 8:
+ prefix = "qword "
+ case 16:
+ prefix = "xmmword "
+ }
+ switch inst.Op {
+ case INVLPG:
+ prefix = "byte "
+ case STOSB, MOVSB, CMPSB, LODSB, SCASB:
+ prefix = "byte "
+ case STOSW, MOVSW, CMPSW, LODSW, SCASW:
+ prefix = "word "
+ case STOSD, MOVSD, CMPSD, LODSD, SCASD:
+ prefix = "dword "
+ case STOSQ, MOVSQ, CMPSQ, LODSQ, SCASQ:
+ prefix = "qword "
+ case LAR:
+ prefix = "word "
+ case BOUND:
+ if inst.Mode == 32 {
+ prefix = "qword "
+ } else {
+ prefix = "dword "
+ }
+ case PREFETCHW, PREFETCHNTA, PREFETCHT0, PREFETCHT1, PREFETCHT2, CLFLUSH:
+ prefix = "zmmword "
+ }
+ switch inst.Op {
+ case MOVSB, MOVSW, MOVSD, MOVSQ, CMPSB, CMPSW, CMPSD, CMPSQ, STOSB, STOSW, STOSD, STOSQ, SCASB, SCASW, SCASD, SCASQ, LODSB, LODSW, LODSD, LODSQ:
+ switch a.Base {
+ case DI, EDI, RDI:
+ if a.Segment == ES {
+ a.Segment = 0
+ }
+ case SI, ESI, RSI:
+ if a.Segment == DS {
+ a.Segment = 0
+ }
+ }
+ case LEA:
+ a.Segment = 0
+ default:
+ switch a.Base {
+ case SP, ESP, RSP, BP, EBP, RBP:
+ if a.Segment == SS {
+ a.Segment = 0
+ }
+ default:
+ if a.Segment == DS {
+ a.Segment = 0
+ }
+ }
+ }
+
+ if inst.Mode == 64 && a.Segment != FS && a.Segment != GS {
+ a.Segment = 0
+ }
+
+ prefix += "ptr "
+ if a.Segment != 0 {
+ prefix += strings.ToLower(a.Segment.String()) + ":"
+ }
+ prefix += "["
+ if a.Base != 0 {
+ prefix += intelArg(inst, a.Base)
+ }
+ if a.Scale != 0 && a.Index != 0 {
+ if a.Base != 0 {
+ prefix += "+"
+ }
+ prefix += fmt.Sprintf("%s*%d", intelArg(inst, a.Index), a.Scale)
+ }
+ if a.Disp != 0 {
+ if prefix[len(prefix)-1] == '[' && (a.Disp >= 0 || int64(int32(a.Disp)) != a.Disp) {
+ prefix += fmt.Sprintf("%#x", uint64(a.Disp))
+ } else {
+ prefix += fmt.Sprintf("%+#x", a.Disp)
+ }
+ }
+ prefix += "]"
+ return prefix
+ case Rel:
+ return fmt.Sprintf(".%+#x", int64(a))
+ case Reg:
+ if int(a) < len(intelReg) && intelReg[a] != "" {
+ return intelReg[a]
+ }
+ }
+ return strings.ToLower(arg.String())
+}
+
+var intelOp = map[Op]string{
+ JAE: "jnb",
+ JA: "jnbe",
+ JGE: "jnl",
+ JNE: "jnz",
+ JG: "jnle",
+ JE: "jz",
+ SETAE: "setnb",
+ SETA: "setnbe",
+ SETGE: "setnl",
+ SETNE: "setnz",
+ SETG: "setnle",
+ SETE: "setz",
+ CMOVAE: "cmovnb",
+ CMOVA: "cmovnbe",
+ CMOVGE: "cmovnl",
+ CMOVNE: "cmovnz",
+ CMOVG: "cmovnle",
+ CMOVE: "cmovz",
+ LCALL: "call far",
+ LJMP: "jmp far",
+ LRET: "ret far",
+ ICEBP: "int1",
+ MOVSD_XMM: "movsd",
+ XLATB: "xlat",
+}
+
+var intelReg = [...]string{
+ F0: "st0",
+ F1: "st1",
+ F2: "st2",
+ F3: "st3",
+ F4: "st4",
+ F5: "st5",
+ F6: "st6",
+ F7: "st7",
+ M0: "mmx0",
+ M1: "mmx1",
+ M2: "mmx2",
+ M3: "mmx3",
+ M4: "mmx4",
+ M5: "mmx5",
+ M6: "mmx6",
+ M7: "mmx7",
+ X0: "xmm0",
+ X1: "xmm1",
+ X2: "xmm2",
+ X3: "xmm3",
+ X4: "xmm4",
+ X5: "xmm5",
+ X6: "xmm6",
+ X7: "xmm7",
+ X8: "xmm8",
+ X9: "xmm9",
+ X10: "xmm10",
+ X11: "xmm11",
+ X12: "xmm12",
+ X13: "xmm13",
+ X14: "xmm14",
+ X15: "xmm15",
+
+ // TODO: Maybe the constants are named wrong.
+ SPB: "spl",
+ BPB: "bpl",
+ SIB: "sil",
+ DIB: "dil",
+
+ R8L: "r8d",
+ R9L: "r9d",
+ R10L: "r10d",
+ R11L: "r11d",
+ R12L: "r12d",
+ R13L: "r13d",
+ R14L: "r14d",
+ R15L: "r15d",
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/objdump_test.go b/src/cmd/internal/rsc.io/x86/x86asm/objdump_test.go
new file mode 100644
index 000000000..6f7260544
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/objdump_test.go
@@ -0,0 +1,383 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x86asm
+
+import (
+ "bytes"
+ "strings"
+ "testing"
+)
+
+func TestObjdump32Manual(t *testing.T) { testObjdump32(t, hexCases(t, objdumpManualTests)) }
+func TestObjdump32Testdata(t *testing.T) { testObjdump32(t, concat(basicPrefixes, testdataCases(t))) }
+func TestObjdump32ModRM(t *testing.T) { testObjdump32(t, concat(basicPrefixes, enumModRM)) }
+func TestObjdump32OneByte(t *testing.T) { testBasic(t, testObjdump32) }
+func TestObjdump320F(t *testing.T) { testBasic(t, testObjdump32, 0x0F) }
+func TestObjdump320F38(t *testing.T) { testBasic(t, testObjdump32, 0x0F, 0x38) }
+func TestObjdump320F3A(t *testing.T) { testBasic(t, testObjdump32, 0x0F, 0x3A) }
+func TestObjdump32Prefix(t *testing.T) { testPrefix(t, testObjdump32) }
+
+func TestObjdump64Manual(t *testing.T) { testObjdump64(t, hexCases(t, objdumpManualTests)) }
+func TestObjdump64Testdata(t *testing.T) { testObjdump64(t, concat(basicPrefixes, testdataCases(t))) }
+func TestObjdump64ModRM(t *testing.T) { testObjdump64(t, concat(basicPrefixes, enumModRM)) }
+func TestObjdump64OneByte(t *testing.T) { testBasic(t, testObjdump64) }
+func TestObjdump640F(t *testing.T) { testBasic(t, testObjdump64, 0x0F) }
+func TestObjdump640F38(t *testing.T) { testBasic(t, testObjdump64, 0x0F, 0x38) }
+func TestObjdump640F3A(t *testing.T) { testBasic(t, testObjdump64, 0x0F, 0x3A) }
+func TestObjdump64Prefix(t *testing.T) { testPrefix(t, testObjdump64) }
+
+func TestObjdump64REXTestdata(t *testing.T) {
+ testObjdump64(t, filter(concat3(basicPrefixes, rexPrefixes, testdataCases(t)), isValidREX))
+}
+func TestObjdump64REXModRM(t *testing.T) {
+ testObjdump64(t, concat3(basicPrefixes, rexPrefixes, enumModRM))
+}
+func TestObjdump64REXOneByte(t *testing.T) { testBasicREX(t, testObjdump64) }
+func TestObjdump64REX0F(t *testing.T) { testBasicREX(t, testObjdump64, 0x0F) }
+func TestObjdump64REX0F38(t *testing.T) { testBasicREX(t, testObjdump64, 0x0F, 0x38) }
+func TestObjdump64REX0F3A(t *testing.T) { testBasicREX(t, testObjdump64, 0x0F, 0x3A) }
+func TestObjdump64REXPrefix(t *testing.T) { testPrefixREX(t, testObjdump64) }
+
+// objdumpManualTests holds test cases that will be run by TestObjdumpManual.
+// If you are debugging a few cases that turned up in a longer run, it can be useful
+// to list them here and then use -run=ObjdumpManual, particularly with tracing enabled.
+var objdumpManualTests = `
+F390
+`
+
+// allowedMismatchObjdump reports whether the mismatch between text and dec
+// should be allowed by the test.
+func allowedMismatchObjdump(text string, size int, inst *Inst, dec ExtInst) bool {
+ if size == 15 && dec.nenc == 15 && contains(text, "truncated") && contains(dec.text, "(bad)") {
+ return true
+ }
+
+ if i := strings.LastIndex(dec.text, " "); isPrefix(dec.text[i+1:]) && size == 1 && isPrefix(text) {
+ return true
+ }
+
+ if size == dec.nenc && contains(dec.text, "movupd") && contains(dec.text, "data32") {
+ s := strings.Replace(dec.text, "data32 ", "", -1)
+ if text == s {
+ return true
+ }
+ }
+
+ // Simplify our invalid instruction text.
+ if text == "error: unrecognized instruction" {
+ text = "BAD"
+ }
+
+ // Invalid instructions for which libopcodes prints %? register.
+ // FF E8 11 22 33 44:
+ // Invalid instructions for which libopcodes prints "internal disassembler error".
+ // Invalid instructions for which libopcodes prints 8087 only (e.g., DB E0)
+ // or prints 287 only (e.g., DB E4).
+ if contains(dec.text, "%?", "<internal disassembler error>", "(8087 only)", "(287 only)") {
+ dec.text = "(bad)"
+ }
+
+ // 0F 19 11, 0F 1C 11, 0F 1D 11, 0F 1E 11, 0F 1F 11: libopcodes says nop,
+ // but the Intel manuals say that the only NOP there is 0F 1F /0.
+ // Perhaps libopcodes is reporting an older encoding.
+ i := bytes.IndexByte(dec.enc[:], 0x0F)
+ if contains(dec.text, "nop") && i >= 0 && i+2 < len(dec.enc) && dec.enc[i+1]&^7 == 0x18 && (dec.enc[i+1] != 0x1F || (dec.enc[i+2]>>3)&7 != 0) {
+ dec.text = "(bad)"
+ }
+
+ // Any invalid instruction.
+ if text == "BAD" && contains(dec.text, "(bad)") {
+ return true
+ }
+
+ // Instructions libopcodes knows but we do not (e.g., 0F 19 11).
+ if (text == "BAD" || size == 1 && isPrefix(text)) && hasPrefix(dec.text, unsupported...) {
+ return true
+ }
+
+ // Instructions we know but libopcodes does not (e.g., 0F D0 11).
+ if (contains(dec.text, "(bad)") || dec.nenc == 1 && isPrefix(dec.text)) && hasPrefix(text, libopcodesUnsupported...) {
+ return true
+ }
+
+ // Libopcodes rejects F2 90 as NOP. Not sure why.
+ if (contains(dec.text, "(bad)") || dec.nenc == 1 && isPrefix(dec.text)) && inst.Opcode>>24 == 0x90 && countPrefix(inst, 0xF2) > 0 {
+ return true
+ }
+
+ // 0F 20 11, 0F 21 11, 0F 22 11, 0F 23 11, 0F 24 11:
+ // Moves into and out of some control registers seem to be unsupported by libopcodes.
+ // TODO(rsc): Are they invalid somehow?
+ if (contains(dec.text, "(bad)") || dec.nenc == 1 && isPrefix(dec.text)) && contains(text, "%cr", "%db", "%tr") {
+ return true
+ }
+
+ if contains(dec.text, "fwait") && dec.nenc == 1 && dec.enc[0] != 0x9B {
+ return true
+ }
+
+ // 9B D9 11: libopcodes reports FSTSW instead of FWAIT + FNSTSW.
+ // This is correct in that FSTSW is a pseudo-op for the pair, but it really
+ // is a pair of instructions: execution can stop between them.
+ // Our decoder chooses to separate them.
+ if (text == "fwait" || strings.HasSuffix(text, " fwait")) && dec.nenc >= len(strings.Fields(text)) && dec.enc[len(strings.Fields(text))-1] == 0x9B {
+ return true
+ }
+
+ // 0F 18 77 11:
+ // Invalid instructions for which libopcodes prints "nop/reserved".
+ // Perhaps libopcodes is reporting an older encoding.
+ if text == "BAD" && contains(dec.text, "nop/reserved") {
+ return true
+ }
+
+ // 0F C7 B0 11 22 33 44: libopcodes says vmptrld 0x44332211(%eax); we say rdrand %eax.
+ // TODO(rsc): Fix, since we are probably wrong, but we don't have vmptrld in the manual.
+ if contains(text, "rdrand") && contains(dec.text, "vmptrld", "vmxon", "vmclear") {
+ return true
+ }
+
+ // DD C8: libopcodes says FNOP but the Intel manual is clear FNOP is only D9 D0.
+ // Perhaps libopcodes is reporting an older encoding.
+ if text == "BAD" && contains(dec.text, "fnop") && (dec.enc[0] != 0xD9 || dec.enc[1] != 0xD0) {
+ return true
+ }
+
+ // 66 90: libopcodes says xchg %ax,%ax; we say 'data16 nop'.
+ // The 16-bit swap will preserve the high bits of the register,
+ // so they are the same.
+ if contains(text, "nop") && contains(dec.text, "xchg %ax,%ax") {
+ return true
+ }
+
+ // If there are multiple prefixes, allow libopcodes to use an alternate name.
+ if size == 1 && dec.nenc == 1 && prefixByte[text] > 0 && prefixByte[text] == prefixByte[dec.text] {
+ return true
+ }
+
+ // 26 9B: libopcodes reports "fwait"/1, ignoring segment prefix.
+ // https://sourceware.org/bugzilla/show_bug.cgi?id=16891
+ // F0 82: Decode="lock"/1 but libopcodes="lock (bad)"/2.
+ if size == 1 && dec.nenc >= 1 && prefixByte[text] == dec.enc[0] && contains(dec.text, "(bad)", "fwait", "fnop") {
+ return true
+ }
+
+ // libopcodes interprets 660f801122 as taking a rel16 but
+ // truncating the address at 16 bits. Not sure what is correct.
+ if contains(text, ".+0x2211", ".+0x11") && contains(dec.text, " .-") {
+ return true
+ }
+
+ // 66 F3 0F D6 C5, 66 F2 0F D6 C0: libopcodes reports use of XMM register instead of MMX register,
+ // but only when the instruction has a 66 prefix. Maybe they know something we don't.
+ if countPrefix(inst, 0x66) > 0 && contains(dec.text, "movdq2q", "movq2dq") && !contains(dec.text, "%mm") {
+ return true
+ }
+
+ // 0F 01 F8, 0F 05, 0F 07: these are 64-bit instructions but libopcodes accepts them.
+ if (text == "BAD" || size == 1 && isPrefix(text)) && contains(dec.text, "swapgs", "syscall", "sysret", "rdfsbase", "rdgsbase", "wrfsbase", "wrgsbase") {
+ return true
+ }
+
+ return false
+}
+
+// Instructions known to libopcodes (or xed) but not to us.
+// Most of these come from supplementary manuals of one form or another.
+var unsupported = strings.Fields(`
+ bndc
+ bndl
+ bndm
+ bnds
+ clac
+ clgi
+ femms
+ fldln
+ fldz
+ getsec
+ invlpga
+ kmov
+ montmul
+ pavg
+ pf2i
+ pfacc
+ pfadd
+ pfcmp
+ pfmax
+ pfmin
+ pfmul
+ pfna
+ pfpnac
+ pfrc
+ pfrs
+ pfsub
+ phadd
+ phsub
+ pi2f
+ pmulhr
+ prefetch
+ pswap
+ ptest
+ rdseed
+ sha1
+ sha256
+ skinit
+ stac
+ stgi
+ vadd
+ vand
+ vcmp
+ vcomis
+ vcvt
+ vcvt
+ vdiv
+ vhadd
+ vhsub
+ vld
+ vmax
+ vmcall
+ vmfunc
+ vmin
+ vmlaunch
+ vmload
+ vmmcall
+ vmov
+ vmov
+ vmov
+ vmptrld
+ vmptrst
+ vmread
+ vmresume
+ vmrun
+ vmsave
+ vmul
+ vmwrite
+ vmxoff
+ vor
+ vpack
+ vpadd
+ vpand
+ vpavg
+ vpcmp
+ vpcmp
+ vpins
+ vpmadd
+ vpmax
+ vpmin
+ vpmul
+ vpmul
+ vpor
+ vpsad
+ vpshuf
+ vpsll
+ vpsra
+ vpsrad
+ vpsrl
+ vpsub
+ vpunp
+ vpxor
+ vrcp
+ vrsqrt
+ vshuf
+ vsqrt
+ vsub
+ vucomis
+ vunp
+ vxor
+ vzero
+ xcrypt
+ xsha1
+ xsha256
+ xstore-rng
+ insertq
+ extrq
+ vmclear
+ invvpid
+ adox
+ vmxon
+ invept
+ adcx
+ vmclear
+ prefetchwt1
+ enclu
+ encls
+ salc
+ fstpnce
+ fdisi8087_nop
+ fsetpm287_nop
+ feni8087_nop
+ syscall
+ sysret
+`)
+
+// Instructions known to us but not to libopcodes (at least in binutils 2.24).
+var libopcodesUnsupported = strings.Fields(`
+ addsubps
+ aes
+ blend
+ cvttpd2dq
+ dpp
+ extract
+ haddps
+ hsubps
+ insert
+ invpcid
+ lddqu
+ movmsk
+ movnt
+ movq2dq
+ mps
+ pack
+ pblend
+ pclmul
+ pcmp
+ pext
+ phmin
+ pins
+ pmax
+ pmin
+ pmov
+ pmovmsk
+ pmul
+ popcnt
+ pslld
+ psllq
+ psllw
+ psrad
+ psraw
+ psrl
+ ptest
+ punpck
+ round
+ xrstor
+ xsavec
+ xsaves
+ comis
+ ucomis
+ movhps
+ movntps
+ rsqrt
+ rcpp
+ puncpck
+ bsf
+ movq2dq
+ cvttpd2dq
+ movq
+ hsubpd
+ movdqa
+ movhpd
+ addsubpd
+ movd
+ haddpd
+ cvtps2dq
+ bsr
+ cvtdq2ps
+ rdrand
+ maskmov
+ movq2dq
+ movlhps
+ movbe
+ movlpd
+`)
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/objdumpext_test.go b/src/cmd/internal/rsc.io/x86/x86asm/objdumpext_test.go
new file mode 100644
index 000000000..37a5513d3
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/objdumpext_test.go
@@ -0,0 +1,314 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x86asm
+
+import (
+ "bytes"
+ "debug/elf"
+ "encoding/binary"
+ "fmt"
+ "io"
+ "log"
+ "os"
+ "strconv"
+ "strings"
+ "testing"
+)
+
+// Apologies for the proprietary path, but we need objdump 2.24 + some committed patches that will land in 2.25.
+const objdumpPath = "/Users/rsc/bin/objdump2"
+
+func testObjdump32(t *testing.T, generate func(func([]byte))) {
+ testObjdumpArch(t, generate, 32)
+}
+
+func testObjdump64(t *testing.T, generate func(func([]byte))) {
+ testObjdumpArch(t, generate, 64)
+}
+
+func testObjdumpArch(t *testing.T, generate func(func([]byte)), arch int) {
+ if testing.Short() {
+ t.Skip("skipping objdump test in short mode")
+ }
+
+ if _, err := os.Stat(objdumpPath); err != nil {
+ t.Fatal(err)
+ }
+
+ testExtDis(t, "gnu", arch, objdump, generate, allowedMismatchObjdump)
+}
+
+func objdump(ext *ExtDis) error {
+ // File already written with instructions; add ELF header.
+ if ext.Arch == 32 {
+ if err := writeELF32(ext.File, ext.Size); err != nil {
+ return err
+ }
+ } else {
+ if err := writeELF64(ext.File, ext.Size); err != nil {
+ return err
+ }
+ }
+
+ b, err := ext.Run(objdumpPath, "-d", "-z", ext.File.Name())
+ if err != nil {
+ return err
+ }
+
+ var (
+ nmatch int
+ reading bool
+ next uint32 = start
+ addr uint32
+ encbuf [32]byte
+ enc []byte
+ text string
+ )
+ flush := func() {
+ if addr == next {
+ switch text {
+ case "repz":
+ text = "rep"
+ case "repnz":
+ text = "repn"
+ default:
+ text = strings.Replace(text, "repz ", "rep ", -1)
+ text = strings.Replace(text, "repnz ", "repn ", -1)
+ }
+ if m := pcrelw.FindStringSubmatch(text); m != nil {
+ targ, _ := strconv.ParseUint(m[2], 16, 64)
+ text = fmt.Sprintf("%s .%+#x", m[1], int16(uint32(targ)-uint32(uint16(addr))-uint32(len(enc))))
+ }
+ if m := pcrel.FindStringSubmatch(text); m != nil {
+ targ, _ := strconv.ParseUint(m[2], 16, 64)
+ text = fmt.Sprintf("%s .%+#x", m[1], int32(uint32(targ)-addr-uint32(len(enc))))
+ }
+ text = strings.Replace(text, "0x0(", "(", -1)
+ text = strings.Replace(text, "%st(0)", "%st", -1)
+
+ ext.Dec <- ExtInst{addr, encbuf, len(enc), text}
+ encbuf = [32]byte{}
+ enc = nil
+ next += 32
+ }
+ }
+ var textangle = []byte("<.text>:")
+ for {
+ line, err := b.ReadSlice('\n')
+ if err != nil {
+ if err == io.EOF {
+ break
+ }
+ return fmt.Errorf("reading objdump output: %v", err)
+ }
+ if bytes.Contains(line, textangle) {
+ reading = true
+ continue
+ }
+ if !reading {
+ continue
+ }
+ if debug {
+ os.Stdout.Write(line)
+ }
+ if enc1 := parseContinuation(line, encbuf[:len(enc)]); enc1 != nil {
+ enc = enc1
+ continue
+ }
+ flush()
+ nmatch++
+ addr, enc, text = parseLine(line, encbuf[:0])
+ if addr > next {
+ return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line)
+ }
+ }
+ flush()
+ if next != start+uint32(ext.Size) {
+ return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size)
+ }
+ if err := ext.Wait(); err != nil {
+ return fmt.Errorf("exec: %v", err)
+ }
+
+ return nil
+}
+
+func parseLine(line []byte, encstart []byte) (addr uint32, enc []byte, text string) {
+ oline := line
+ i := index(line, ":\t")
+ if i < 0 {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ x, err := strconv.ParseUint(string(trimSpace(line[:i])), 16, 32)
+ if err != nil {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ addr = uint32(x)
+ line = line[i+2:]
+ i = bytes.IndexByte(line, '\t')
+ if i < 0 {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ enc, ok := parseHex(line[:i], encstart)
+ if !ok {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ line = trimSpace(line[i:])
+ if i := bytes.IndexByte(line, '#'); i >= 0 {
+ line = trimSpace(line[:i])
+ }
+ text = string(fixSpace(line))
+ return
+}
+
+func parseContinuation(line []byte, enc []byte) []byte {
+ i := index(line, ":\t")
+ if i < 0 {
+ return nil
+ }
+ line = line[i+1:]
+ enc, _ = parseHex(line, enc)
+ return enc
+}
+
+// writeELF32 writes an ELF32 header to the file,
+// describing a text segment that starts at start
+// and extends for size bytes.
+func writeELF32(f *os.File, size int) error {
+ f.Seek(0, 0)
+ var hdr elf.Header32
+ var prog elf.Prog32
+ var sect elf.Section32
+ var buf bytes.Buffer
+ binary.Write(&buf, binary.LittleEndian, &hdr)
+ off1 := buf.Len()
+ binary.Write(&buf, binary.LittleEndian, &prog)
+ off2 := buf.Len()
+ binary.Write(&buf, binary.LittleEndian, &sect)
+ off3 := buf.Len()
+ buf.Reset()
+ data := byte(elf.ELFDATA2LSB)
+ hdr = elf.Header32{
+ Ident: [16]byte{0x7F, 'E', 'L', 'F', 1, data, 1},
+ Type: 2,
+ Machine: uint16(elf.EM_386),
+ Version: 1,
+ Entry: start,
+ Phoff: uint32(off1),
+ Shoff: uint32(off2),
+ Flags: 0x05000002,
+ Ehsize: uint16(off1),
+ Phentsize: uint16(off2 - off1),
+ Phnum: 1,
+ Shentsize: uint16(off3 - off2),
+ Shnum: 3,
+ Shstrndx: 2,
+ }
+ binary.Write(&buf, binary.LittleEndian, &hdr)
+ prog = elf.Prog32{
+ Type: 1,
+ Off: start,
+ Vaddr: start,
+ Paddr: start,
+ Filesz: uint32(size),
+ Memsz: uint32(size),
+ Flags: 5,
+ Align: start,
+ }
+ binary.Write(&buf, binary.LittleEndian, &prog)
+ binary.Write(&buf, binary.LittleEndian, &sect) // NULL section
+ sect = elf.Section32{
+ Name: 1,
+ Type: uint32(elf.SHT_PROGBITS),
+ Addr: start,
+ Off: start,
+ Size: uint32(size),
+ Flags: uint32(elf.SHF_ALLOC | elf.SHF_EXECINSTR),
+ Addralign: 4,
+ }
+ binary.Write(&buf, binary.LittleEndian, &sect) // .text
+ sect = elf.Section32{
+ Name: uint32(len("\x00.text\x00")),
+ Type: uint32(elf.SHT_STRTAB),
+ Addr: 0,
+ Off: uint32(off2 + (off3-off2)*3),
+ Size: uint32(len("\x00.text\x00.shstrtab\x00")),
+ Addralign: 1,
+ }
+ binary.Write(&buf, binary.LittleEndian, &sect)
+ buf.WriteString("\x00.text\x00.shstrtab\x00")
+ f.Write(buf.Bytes())
+ return nil
+}
+
+// writeELF64 writes an ELF64 header to the file,
+// describing a text segment that starts at start
+// and extends for size bytes.
+func writeELF64(f *os.File, size int) error {
+ f.Seek(0, 0)
+ var hdr elf.Header64
+ var prog elf.Prog64
+ var sect elf.Section64
+ var buf bytes.Buffer
+ binary.Write(&buf, binary.LittleEndian, &hdr)
+ off1 := buf.Len()
+ binary.Write(&buf, binary.LittleEndian, &prog)
+ off2 := buf.Len()
+ binary.Write(&buf, binary.LittleEndian, &sect)
+ off3 := buf.Len()
+ buf.Reset()
+ data := byte(elf.ELFDATA2LSB)
+ hdr = elf.Header64{
+ Ident: [16]byte{0x7F, 'E', 'L', 'F', 2, data, 1},
+ Type: 2,
+ Machine: uint16(elf.EM_X86_64),
+ Version: 1,
+ Entry: start,
+ Phoff: uint64(off1),
+ Shoff: uint64(off2),
+ Flags: 0x05000002,
+ Ehsize: uint16(off1),
+ Phentsize: uint16(off2 - off1),
+ Phnum: 1,
+ Shentsize: uint16(off3 - off2),
+ Shnum: 3,
+ Shstrndx: 2,
+ }
+ binary.Write(&buf, binary.LittleEndian, &hdr)
+ prog = elf.Prog64{
+ Type: 1,
+ Off: start,
+ Vaddr: start,
+ Paddr: start,
+ Filesz: uint64(size),
+ Memsz: uint64(size),
+ Flags: 5,
+ Align: start,
+ }
+ binary.Write(&buf, binary.LittleEndian, &prog)
+ binary.Write(&buf, binary.LittleEndian, &sect) // NULL section
+ sect = elf.Section64{
+ Name: 1,
+ Type: uint32(elf.SHT_PROGBITS),
+ Addr: start,
+ Off: start,
+ Size: uint64(size),
+ Flags: uint64(elf.SHF_ALLOC | elf.SHF_EXECINSTR),
+ Addralign: 4,
+ }
+ binary.Write(&buf, binary.LittleEndian, &sect) // .text
+ sect = elf.Section64{
+ Name: uint32(len("\x00.text\x00")),
+ Type: uint32(elf.SHT_STRTAB),
+ Addr: 0,
+ Off: uint64(off2 + (off3-off2)*3),
+ Size: uint64(len("\x00.text\x00.shstrtab\x00")),
+ Addralign: 1,
+ }
+ binary.Write(&buf, binary.LittleEndian, &sect)
+ buf.WriteString("\x00.text\x00.shstrtab\x00")
+ f.Write(buf.Bytes())
+ return nil
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/plan9ext_test.go b/src/cmd/internal/rsc.io/x86/x86asm/plan9ext_test.go
new file mode 100644
index 000000000..21f5bfd12
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/plan9ext_test.go
@@ -0,0 +1,120 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x86asm
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "log"
+ "os"
+ "strconv"
+ "testing"
+)
+
+const plan9Path = "testdata/libmach8db"
+
+func testPlan9Arch(t *testing.T, arch int, generate func(func([]byte))) {
+ if testing.Short() {
+ t.Skip("skipping libmach test in short mode")
+ }
+
+ if _, err := os.Stat(plan9Path); err != nil {
+ t.Fatal(err)
+ }
+
+ testExtDis(t, "plan9", arch, plan9, generate, allowedMismatchPlan9)
+}
+
+func testPlan932(t *testing.T, generate func(func([]byte))) {
+ testPlan9Arch(t, 32, generate)
+}
+
+func testPlan964(t *testing.T, generate func(func([]byte))) {
+ testPlan9Arch(t, 64, generate)
+}
+
+func plan9(ext *ExtDis) error {
+ flag := "-8"
+ if ext.Arch == 64 {
+ flag = "-6"
+ }
+ b, err := ext.Run(plan9Path, flag, ext.File.Name())
+ if err != nil {
+ return err
+ }
+
+ nmatch := 0
+ next := uint32(start)
+ var (
+ addr uint32
+ encbuf [32]byte
+ enc []byte
+ text string
+ )
+
+ for {
+ line, err := b.ReadSlice('\n')
+ if err != nil {
+ if err == io.EOF {
+ break
+ }
+ return fmt.Errorf("reading libmach8db output: %v", err)
+ }
+ if debug {
+ os.Stdout.Write(line)
+ }
+ nmatch++
+ addr, enc, text = parseLinePlan9(line, encbuf[:0])
+ if addr > next {
+ return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line)
+ }
+ if addr < next {
+ continue
+ }
+ if m := pcrelw.FindStringSubmatch(text); m != nil {
+ targ, _ := strconv.ParseUint(m[2], 16, 64)
+ text = fmt.Sprintf("%s .%+#x", m[1], int16(uint32(targ)-uint32(uint16(addr))-uint32(len(enc))))
+ }
+ if m := pcrel.FindStringSubmatch(text); m != nil {
+ targ, _ := strconv.ParseUint(m[2], 16, 64)
+ text = fmt.Sprintf("%s .%+#x", m[1], int32(uint32(targ)-addr-uint32(len(enc))))
+ }
+ ext.Dec <- ExtInst{addr, encbuf, len(enc), text}
+ encbuf = [32]byte{}
+ enc = nil
+ next += 32
+ }
+ if next != start+uint32(ext.Size) {
+ return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size)
+ }
+ if err := ext.Wait(); err != nil {
+ return fmt.Errorf("exec: %v", err)
+ }
+
+ return nil
+}
+
+func parseLinePlan9(line []byte, encstart []byte) (addr uint32, enc []byte, text string) {
+ i := bytes.IndexByte(line, ' ')
+ if i < 0 || line[0] != '0' || line[1] != 'x' {
+ log.Fatalf("cannot parse disassembly: %q", line)
+ }
+ j := bytes.IndexByte(line[i+1:], ' ')
+ if j < 0 {
+ log.Fatalf("cannot parse disassembly: %q", line)
+ }
+ j += i + 1
+ x, err := strconv.ParseUint(string(trimSpace(line[2:i])), 16, 32)
+ if err != nil {
+ log.Fatalf("cannot parse disassembly: %q", line)
+ }
+ addr = uint32(x)
+ enc, ok := parseHex(line[i+1:j], encstart)
+ if !ok {
+ log.Fatalf("cannot parse disassembly: %q", line)
+ }
+ return addr, enc, string(fixSpace(line[j+1:]))
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/plan9x.go b/src/cmd/internal/rsc.io/x86/x86asm/plan9x.go
new file mode 100644
index 000000000..5a0bd8776
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/plan9x.go
@@ -0,0 +1,346 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x86asm
+
+import (
+ "fmt"
+ "strings"
+)
+
+// Plan9Syntax returns the Go assembler syntax for the instruction.
+// The syntax was originally defined by Plan 9.
+// The pc is the program counter of the instruction, used for expanding
+// PC-relative addresses into absolute ones.
+// The symname function queries the symbol table for the program
+// being disassembled. Given a target address it returns the name and base
+// address of the symbol containing the target, if any; otherwise it returns "", 0.
+func Plan9Syntax(inst Inst, pc uint64, symname func(uint64) (string, uint64)) string {
+ if symname == nil {
+ symname = func(uint64) (string, uint64) { return "", 0 }
+ }
+ var args []string
+ for i := len(inst.Args) - 1; i >= 0; i-- {
+ a := inst.Args[i]
+ if a == nil {
+ continue
+ }
+ args = append(args, plan9Arg(&inst, pc, symname, a))
+ }
+
+ var last Prefix
+ for _, p := range inst.Prefix {
+ if p == 0 || p.IsREX() {
+ break
+ }
+ last = p
+ }
+
+ prefix := ""
+ switch last & 0xFF {
+ case 0, 0x66, 0x67:
+ // ignore
+ case PrefixREPN:
+ prefix += "REPNE "
+ default:
+ prefix += last.String() + " "
+ }
+
+ op := inst.Op.String()
+ if plan9Suffix[inst.Op] {
+ switch inst.DataSize {
+ case 8:
+ op += "B"
+ case 16:
+ op += "W"
+ case 32:
+ op += "L"
+ case 64:
+ op += "Q"
+ }
+ }
+
+ if args != nil {
+ op += " " + strings.Join(args, ", ")
+ }
+
+ return prefix + op
+}
+
+func plan9Arg(inst *Inst, pc uint64, symname func(uint64) (string, uint64), arg Arg) string {
+ switch a := arg.(type) {
+ case Reg:
+ return plan9Reg[a]
+ case Rel:
+ if pc == 0 {
+ break
+ }
+ // If the absolute address is the start of a symbol, use the name.
+ // Otherwise use the raw address, so that things like relative
+ // jumps show up as JMP 0x123 instead of JMP f+10(SB).
+ // It is usually easier to search for 0x123 than to do the mental
+ // arithmetic to find f+10.
+ addr := pc + uint64(inst.Len) + uint64(a)
+ if s, base := symname(addr); s != "" && addr == base {
+ return fmt.Sprintf("%s(SB)", s)
+ }
+ return fmt.Sprintf("%#x", addr)
+
+ case Imm:
+ if s, base := symname(uint64(a)); s != "" {
+ suffix := ""
+ if uint64(a) != base {
+ suffix = fmt.Sprintf("%+d", uint64(a)-base)
+ }
+ return fmt.Sprintf("$%s%s(SB)", s, suffix)
+ }
+ if inst.Mode == 32 {
+ return fmt.Sprintf("$%#x", uint32(a))
+ }
+ if Imm(int32(a)) == a {
+ return fmt.Sprintf("$%#x", int64(a))
+ }
+ return fmt.Sprintf("$%#x", uint64(a))
+ case Mem:
+ if a.Segment == 0 && a.Disp != 0 && a.Base == 0 && (a.Index == 0 || a.Scale == 0) {
+ if s, base := symname(uint64(a.Disp)); s != "" {
+ suffix := ""
+ if uint64(a.Disp) != base {
+ suffix = fmt.Sprintf("%+d", uint64(a.Disp)-base)
+ }
+ return fmt.Sprintf("%s%s(SB)", s, suffix)
+ }
+ }
+ s := ""
+ if a.Segment != 0 {
+ s += fmt.Sprintf("%s:", plan9Reg[a.Segment])
+ }
+ if a.Disp != 0 {
+ s += fmt.Sprintf("%#x", a.Disp)
+ } else {
+ s += "0"
+ }
+ if a.Base != 0 {
+ s += fmt.Sprintf("(%s)", plan9Reg[a.Base])
+ }
+ if a.Index != 0 && a.Scale != 0 {
+ s += fmt.Sprintf("(%s*%d)", plan9Reg[a.Index], a.Scale)
+ }
+ return s
+ }
+ return arg.String()
+}
+
+var plan9Suffix = [maxOp + 1]bool{
+ ADC: true,
+ ADD: true,
+ AND: true,
+ BSF: true,
+ BSR: true,
+ BT: true,
+ BTC: true,
+ BTR: true,
+ BTS: true,
+ CMP: true,
+ CMPXCHG: true,
+ CVTSI2SD: true,
+ CVTSI2SS: true,
+ CVTSD2SI: true,
+ CVTSS2SI: true,
+ CVTTSD2SI: true,
+ CVTTSS2SI: true,
+ DEC: true,
+ DIV: true,
+ FLDENV: true,
+ FRSTOR: true,
+ IDIV: true,
+ IMUL: true,
+ IN: true,
+ INC: true,
+ LEA: true,
+ MOV: true,
+ MOVNTI: true,
+ MUL: true,
+ NEG: true,
+ NOP: true,
+ NOT: true,
+ OR: true,
+ OUT: true,
+ POP: true,
+ POPA: true,
+ PUSH: true,
+ PUSHA: true,
+ RCL: true,
+ RCR: true,
+ ROL: true,
+ ROR: true,
+ SAR: true,
+ SBB: true,
+ SHL: true,
+ SHLD: true,
+ SHR: true,
+ SHRD: true,
+ SUB: true,
+ TEST: true,
+ XADD: true,
+ XCHG: true,
+ XOR: true,
+}
+
+var plan9Reg = [...]string{
+ AL: "AL",
+ CL: "CL",
+ BL: "BL",
+ DL: "DL",
+ AH: "AH",
+ CH: "CH",
+ BH: "BH",
+ DH: "DH",
+ SPB: "SP",
+ BPB: "BP",
+ SIB: "SI",
+ DIB: "DI",
+ R8B: "R8",
+ R9B: "R9",
+ R10B: "R10",
+ R11B: "R11",
+ R12B: "R12",
+ R13B: "R13",
+ R14B: "R14",
+ R15B: "R15",
+ AX: "AX",
+ CX: "CX",
+ BX: "BX",
+ DX: "DX",
+ SP: "SP",
+ BP: "BP",
+ SI: "SI",
+ DI: "DI",
+ R8W: "R8",
+ R9W: "R9",
+ R10W: "R10",
+ R11W: "R11",
+ R12W: "R12",
+ R13W: "R13",
+ R14W: "R14",
+ R15W: "R15",
+ EAX: "AX",
+ ECX: "CX",
+ EDX: "DX",
+ EBX: "BX",
+ ESP: "SP",
+ EBP: "BP",
+ ESI: "SI",
+ EDI: "DI",
+ R8L: "R8",
+ R9L: "R9",
+ R10L: "R10",
+ R11L: "R11",
+ R12L: "R12",
+ R13L: "R13",
+ R14L: "R14",
+ R15L: "R15",
+ RAX: "AX",
+ RCX: "CX",
+ RDX: "DX",
+ RBX: "BX",
+ RSP: "SP",
+ RBP: "BP",
+ RSI: "SI",
+ RDI: "DI",
+ R8: "R8",
+ R9: "R9",
+ R10: "R10",
+ R11: "R11",
+ R12: "R12",
+ R13: "R13",
+ R14: "R14",
+ R15: "R15",
+ IP: "IP",
+ EIP: "IP",
+ RIP: "IP",
+ F0: "F0",
+ F1: "F1",
+ F2: "F2",
+ F3: "F3",
+ F4: "F4",
+ F5: "F5",
+ F6: "F6",
+ F7: "F7",
+ M0: "M0",
+ M1: "M1",
+ M2: "M2",
+ M3: "M3",
+ M4: "M4",
+ M5: "M5",
+ M6: "M6",
+ M7: "M7",
+ X0: "X0",
+ X1: "X1",
+ X2: "X2",
+ X3: "X3",
+ X4: "X4",
+ X5: "X5",
+ X6: "X6",
+ X7: "X7",
+ X8: "X8",
+ X9: "X9",
+ X10: "X10",
+ X11: "X11",
+ X12: "X12",
+ X13: "X13",
+ X14: "X14",
+ X15: "X15",
+ CS: "CS",
+ SS: "SS",
+ DS: "DS",
+ ES: "ES",
+ FS: "FS",
+ GS: "GS",
+ GDTR: "GDTR",
+ IDTR: "IDTR",
+ LDTR: "LDTR",
+ MSW: "MSW",
+ TASK: "TASK",
+ CR0: "CR0",
+ CR1: "CR1",
+ CR2: "CR2",
+ CR3: "CR3",
+ CR4: "CR4",
+ CR5: "CR5",
+ CR6: "CR6",
+ CR7: "CR7",
+ CR8: "CR8",
+ CR9: "CR9",
+ CR10: "CR10",
+ CR11: "CR11",
+ CR12: "CR12",
+ CR13: "CR13",
+ CR14: "CR14",
+ CR15: "CR15",
+ DR0: "DR0",
+ DR1: "DR1",
+ DR2: "DR2",
+ DR3: "DR3",
+ DR4: "DR4",
+ DR5: "DR5",
+ DR6: "DR6",
+ DR7: "DR7",
+ DR8: "DR8",
+ DR9: "DR9",
+ DR10: "DR10",
+ DR11: "DR11",
+ DR12: "DR12",
+ DR13: "DR13",
+ DR14: "DR14",
+ DR15: "DR15",
+ TR0: "TR0",
+ TR1: "TR1",
+ TR2: "TR2",
+ TR3: "TR3",
+ TR4: "TR4",
+ TR5: "TR5",
+ TR6: "TR6",
+ TR7: "TR7",
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/plan9x_test.go b/src/cmd/internal/rsc.io/x86/x86asm/plan9x_test.go
new file mode 100644
index 000000000..f2ea28cd9
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/plan9x_test.go
@@ -0,0 +1,54 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x86asm
+
+import (
+ "strings"
+ "testing"
+)
+
+func TestPlan932Manual(t *testing.T) { testPlan932(t, hexCases(t, plan9ManualTests)) }
+func TestPlan932Testdata(t *testing.T) { testPlan932(t, concat(basicPrefixes, testdataCases(t))) }
+func TestPlan932ModRM(t *testing.T) { testPlan932(t, concat(basicPrefixes, enumModRM)) }
+func TestPlan932OneByte(t *testing.T) { testBasic(t, testPlan932) }
+func TestPlan9320F(t *testing.T) { testBasic(t, testPlan932, 0x0F) }
+func TestPlan9320F38(t *testing.T) { testBasic(t, testPlan932, 0x0F, 0x38) }
+func TestPlan9320F3A(t *testing.T) { testBasic(t, testPlan932, 0x0F, 0x3A) }
+func TestPlan932Prefix(t *testing.T) { testPrefix(t, testPlan932) }
+
+func TestPlan964Manual(t *testing.T) { testPlan964(t, hexCases(t, plan9ManualTests)) }
+func TestPlan964Testdata(t *testing.T) { testPlan964(t, concat(basicPrefixes, testdataCases(t))) }
+func TestPlan964ModRM(t *testing.T) { testPlan964(t, concat(basicPrefixes, enumModRM)) }
+func TestPlan964OneByte(t *testing.T) { testBasic(t, testPlan964) }
+func TestPlan9640F(t *testing.T) { testBasic(t, testPlan964, 0x0F) }
+func TestPlan9640F38(t *testing.T) { testBasic(t, testPlan964, 0x0F, 0x38) }
+func TestPlan9640F3A(t *testing.T) { testBasic(t, testPlan964, 0x0F, 0x3A) }
+func TestPlan964Prefix(t *testing.T) { testPrefix(t, testPlan964) }
+
+func TestPlan964REXTestdata(t *testing.T) {
+ testPlan964(t, filter(concat3(basicPrefixes, rexPrefixes, testdataCases(t)), isValidREX))
+}
+func TestPlan964REXModRM(t *testing.T) { testPlan964(t, concat3(basicPrefixes, rexPrefixes, enumModRM)) }
+func TestPlan964REXOneByte(t *testing.T) { testBasicREX(t, testPlan964) }
+func TestPlan964REX0F(t *testing.T) { testBasicREX(t, testPlan964, 0x0F) }
+func TestPlan964REX0F38(t *testing.T) { testBasicREX(t, testPlan964, 0x0F, 0x38) }
+func TestPlan964REX0F3A(t *testing.T) { testBasicREX(t, testPlan964, 0x0F, 0x3A) }
+func TestPlan964REXPrefix(t *testing.T) { testPrefixREX(t, testPlan964) }
+
+// plan9ManualTests holds test cases that will be run by TestPlan9Manual32 and TestPlan9Manual64.
+// If you are debugging a few cases that turned up in a longer run, it can be useful
+// to list them here and then use -run=Plan9Manual, particularly with tracing enabled.
+var plan9ManualTests = `
+`
+
+// allowedMismatchPlan9 reports whether the mismatch between text and dec
+// should be allowed by the test.
+func allowedMismatchPlan9(text string, size int, inst *Inst, dec ExtInst) bool {
+ return false
+}
+
+// Instructions known to us but not to plan9.
+var plan9Unsupported = strings.Fields(`
+`)
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/tables.go b/src/cmd/internal/rsc.io/x86/x86asm/tables.go
new file mode 100644
index 000000000..3d08d5ebe
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/tables.go
@@ -0,0 +1,9760 @@
+// DO NOT EDIT
+// generated by: x86map -fmt=decoder ../x86.csv
+
+package x86asm
+
+var decoder = [...]uint16{
+ uint16(xFail),
+ /*1*/ uint16(xCondByte), 243,
+ 0x00, 490,
+ 0x01, 496,
+ 0x02, 525,
+ 0x03, 531,
+ 0x04, 560,
+ 0x05, 566,
+ 0x06, 595,
+ 0x07, 602,
+ 0x08, 609,
+ 0x09, 615,
+ 0x0A, 644,
+ 0x0B, 650,
+ 0x0C, 679,
+ 0x0D, 685,
+ 0x0E, 714,
+ 0x0F, 721,
+ 0x10, 8026,
+ 0x11, 8032,
+ 0x12, 8061,
+ 0x13, 8067,
+ 0x14, 8096,
+ 0x15, 8102,
+ 0x16, 8131,
+ 0x17, 8138,
+ 0x18, 8145,
+ 0x19, 8151,
+ 0x1A, 8180,
+ 0x1B, 8186,
+ 0x1C, 8215,
+ 0x1D, 8221,
+ 0x1E, 8250,
+ 0x1F, 8257,
+ 0x20, 8264,
+ 0x21, 8270,
+ 0x22, 8299,
+ 0x23, 8305,
+ 0x24, 8334,
+ 0x25, 8340,
+ 0x27, 8369,
+ 0x28, 8375,
+ 0x29, 8381,
+ 0x2A, 8410,
+ 0x2B, 8416,
+ 0x2C, 8445,
+ 0x2D, 8451,
+ 0x2F, 8480,
+ 0x30, 8486,
+ 0x31, 8492,
+ 0x32, 8521,
+ 0x33, 8527,
+ 0x34, 8556,
+ 0x35, 8562,
+ 0x37, 8591,
+ 0x38, 8597,
+ 0x39, 8603,
+ 0x3A, 8632,
+ 0x3B, 8638,
+ 0x3C, 8667,
+ 0x3D, 8673,
+ 0x3F, 8702,
+ 0x40, 8708,
+ 0x41, 8708,
+ 0x42, 8708,
+ 0x43, 8708,
+ 0x44, 8708,
+ 0x45, 8708,
+ 0x46, 8708,
+ 0x47, 8708,
+ 0x48, 8723,
+ 0x49, 8723,
+ 0x4a, 8723,
+ 0x4b, 8723,
+ 0x4c, 8723,
+ 0x4d, 8723,
+ 0x4e, 8723,
+ 0x4f, 8723,
+ 0x50, 8738,
+ 0x51, 8738,
+ 0x52, 8738,
+ 0x53, 8738,
+ 0x54, 8738,
+ 0x55, 8738,
+ 0x56, 8738,
+ 0x57, 8738,
+ 0x58, 8765,
+ 0x59, 8765,
+ 0x5a, 8765,
+ 0x5b, 8765,
+ 0x5c, 8765,
+ 0x5d, 8765,
+ 0x5e, 8765,
+ 0x5f, 8765,
+ 0x60, 8792,
+ 0x61, 8805,
+ 0x62, 8818,
+ 0x63, 8837,
+ 0x68, 8868,
+ 0x69, 8887,
+ 0x6A, 8922,
+ 0x6B, 8927,
+ 0x6C, 8962,
+ 0x6D, 8965,
+ 0x6E, 8978,
+ 0x6F, 8981,
+ 0x70, 8994,
+ 0x71, 8999,
+ 0x72, 9004,
+ 0x73, 9009,
+ 0x74, 9014,
+ 0x75, 9019,
+ 0x76, 9024,
+ 0x77, 9029,
+ 0x78, 9034,
+ 0x79, 9039,
+ 0x7A, 9044,
+ 0x7B, 9049,
+ 0x7C, 9054,
+ 0x7D, 9059,
+ 0x7E, 9064,
+ 0x7F, 9069,
+ 0x80, 9074,
+ 0x81, 9131,
+ 0x83, 9372,
+ 0x84, 9613,
+ 0x85, 9619,
+ 0x86, 9648,
+ 0x87, 9654,
+ 0x88, 9683,
+ 0x89, 9689,
+ 0x8A, 9711,
+ 0x8B, 9717,
+ 0x8C, 9739,
+ 0x8D, 9768,
+ 0x8E, 9797,
+ 0x8F, 9826,
+ 0x90, 9862,
+ 0x91, 9862,
+ 0x92, 9862,
+ 0x93, 9862,
+ 0x94, 9862,
+ 0x95, 9862,
+ 0x96, 9862,
+ 0x97, 9862,
+ 0x98, 9888,
+ 0x99, 9908,
+ 0x9A, 9928,
+ 0x9B, 9945,
+ 0x9C, 9948,
+ 0x9D, 9971,
+ 0x9E, 9994,
+ 0x9F, 9997,
+ 0xA0, 10000,
+ 0xA1, 10019,
+ 0xA2, 10041,
+ 0xA3, 10060,
+ 0xA4, 10082,
+ 0xA5, 10085,
+ 0xA6, 10105,
+ 0xA7, 10108,
+ 0xA8, 10128,
+ 0xA9, 10134,
+ 0xAA, 10163,
+ 0xAB, 10166,
+ 0xAC, 10186,
+ 0xAD, 10189,
+ 0xAE, 10209,
+ 0xAF, 10212,
+ 0xb0, 10232,
+ 0xb1, 10232,
+ 0xb2, 10232,
+ 0xb3, 10232,
+ 0xb4, 10232,
+ 0xb5, 10232,
+ 0xb6, 10232,
+ 0xb7, 10232,
+ 0xb8, 10238,
+ 0xb9, 10238,
+ 0xba, 10238,
+ 0xbb, 10238,
+ 0xbc, 10238,
+ 0xbd, 10238,
+ 0xbe, 10238,
+ 0xbf, 10238,
+ 0xC0, 10267,
+ 0xC1, 10318,
+ 0xC2, 10516,
+ 0xC3, 10521,
+ 0xC4, 10524,
+ 0xC5, 10543,
+ 0xC6, 10562,
+ 0xC7, 10586,
+ 0xC8, 10647,
+ 0xC9, 10654,
+ 0xCA, 10677,
+ 0xCB, 10682,
+ 0xCC, 10685,
+ 0xCD, 10689,
+ 0xCE, 10694,
+ 0xCF, 10700,
+ 0xD0, 10720,
+ 0xD1, 10764,
+ 0xD2, 10955,
+ 0xD3, 10999,
+ 0xD4, 11190,
+ 0xD5, 11198,
+ 0xD7, 11206,
+ 0xD8, 11219,
+ 0xD9, 11428,
+ 0xDA, 11637,
+ 0xDB, 11769,
+ 0xDC, 11940,
+ 0xDD, 12109,
+ 0xDE, 12248,
+ 0xDF, 12422,
+ 0xE0, 12533,
+ 0xE1, 12538,
+ 0xE2, 12543,
+ 0xE3, 12548,
+ 0xE4, 12574,
+ 0xE5, 12580,
+ 0xE6, 12602,
+ 0xE7, 12608,
+ 0xE8, 12630,
+ 0xE9, 12661,
+ 0xEA, 12692,
+ 0xEB, 12709,
+ 0xEC, 12714,
+ 0xED, 12719,
+ 0xEE, 12738,
+ 0xEF, 12743,
+ 0xF1, 12762,
+ 0xF4, 12765,
+ 0xF5, 12768,
+ 0xF6, 12771,
+ 0xF7, 12810,
+ 0xF8, 12986,
+ 0xF9, 12989,
+ 0xFA, 12992,
+ 0xFB, 12995,
+ 0xFC, 12998,
+ 0xFD, 13001,
+ 0xFE, 13004,
+ 0xFF, 13021,
+ uint16(xFail),
+ /*490*/ uint16(xSetOp), uint16(ADD),
+ /*492*/ uint16(xReadSlashR),
+ /*493*/ uint16(xArgRM8),
+ /*494*/ uint16(xArgR8),
+ /*495*/ uint16(xMatch),
+ /*496*/ uint16(xCondIs64), 499, 515,
+ /*499*/ uint16(xCondDataSize), 503, 509, 0,
+ /*503*/ uint16(xSetOp), uint16(ADD),
+ /*505*/ uint16(xReadSlashR),
+ /*506*/ uint16(xArgRM16),
+ /*507*/ uint16(xArgR16),
+ /*508*/ uint16(xMatch),
+ /*509*/ uint16(xSetOp), uint16(ADD),
+ /*511*/ uint16(xReadSlashR),
+ /*512*/ uint16(xArgRM32),
+ /*513*/ uint16(xArgR32),
+ /*514*/ uint16(xMatch),
+ /*515*/ uint16(xCondDataSize), 503, 509, 519,
+ /*519*/ uint16(xSetOp), uint16(ADD),
+ /*521*/ uint16(xReadSlashR),
+ /*522*/ uint16(xArgRM64),
+ /*523*/ uint16(xArgR64),
+ /*524*/ uint16(xMatch),
+ /*525*/ uint16(xSetOp), uint16(ADD),
+ /*527*/ uint16(xReadSlashR),
+ /*528*/ uint16(xArgR8),
+ /*529*/ uint16(xArgRM8),
+ /*530*/ uint16(xMatch),
+ /*531*/ uint16(xCondIs64), 534, 550,
+ /*534*/ uint16(xCondDataSize), 538, 544, 0,
+ /*538*/ uint16(xSetOp), uint16(ADD),
+ /*540*/ uint16(xReadSlashR),
+ /*541*/ uint16(xArgR16),
+ /*542*/ uint16(xArgRM16),
+ /*543*/ uint16(xMatch),
+ /*544*/ uint16(xSetOp), uint16(ADD),
+ /*546*/ uint16(xReadSlashR),
+ /*547*/ uint16(xArgR32),
+ /*548*/ uint16(xArgRM32),
+ /*549*/ uint16(xMatch),
+ /*550*/ uint16(xCondDataSize), 538, 544, 554,
+ /*554*/ uint16(xSetOp), uint16(ADD),
+ /*556*/ uint16(xReadSlashR),
+ /*557*/ uint16(xArgR64),
+ /*558*/ uint16(xArgRM64),
+ /*559*/ uint16(xMatch),
+ /*560*/ uint16(xSetOp), uint16(ADD),
+ /*562*/ uint16(xReadIb),
+ /*563*/ uint16(xArgAL),
+ /*564*/ uint16(xArgImm8u),
+ /*565*/ uint16(xMatch),
+ /*566*/ uint16(xCondIs64), 569, 585,
+ /*569*/ uint16(xCondDataSize), 573, 579, 0,
+ /*573*/ uint16(xSetOp), uint16(ADD),
+ /*575*/ uint16(xReadIw),
+ /*576*/ uint16(xArgAX),
+ /*577*/ uint16(xArgImm16),
+ /*578*/ uint16(xMatch),
+ /*579*/ uint16(xSetOp), uint16(ADD),
+ /*581*/ uint16(xReadId),
+ /*582*/ uint16(xArgEAX),
+ /*583*/ uint16(xArgImm32),
+ /*584*/ uint16(xMatch),
+ /*585*/ uint16(xCondDataSize), 573, 579, 589,
+ /*589*/ uint16(xSetOp), uint16(ADD),
+ /*591*/ uint16(xReadId),
+ /*592*/ uint16(xArgRAX),
+ /*593*/ uint16(xArgImm32),
+ /*594*/ uint16(xMatch),
+ /*595*/ uint16(xCondIs64), 598, 0,
+ /*598*/ uint16(xSetOp), uint16(PUSH),
+ /*600*/ uint16(xArgES),
+ /*601*/ uint16(xMatch),
+ /*602*/ uint16(xCondIs64), 605, 0,
+ /*605*/ uint16(xSetOp), uint16(POP),
+ /*607*/ uint16(xArgES),
+ /*608*/ uint16(xMatch),
+ /*609*/ uint16(xSetOp), uint16(OR),
+ /*611*/ uint16(xReadSlashR),
+ /*612*/ uint16(xArgRM8),
+ /*613*/ uint16(xArgR8),
+ /*614*/ uint16(xMatch),
+ /*615*/ uint16(xCondIs64), 618, 634,
+ /*618*/ uint16(xCondDataSize), 622, 628, 0,
+ /*622*/ uint16(xSetOp), uint16(OR),
+ /*624*/ uint16(xReadSlashR),
+ /*625*/ uint16(xArgRM16),
+ /*626*/ uint16(xArgR16),
+ /*627*/ uint16(xMatch),
+ /*628*/ uint16(xSetOp), uint16(OR),
+ /*630*/ uint16(xReadSlashR),
+ /*631*/ uint16(xArgRM32),
+ /*632*/ uint16(xArgR32),
+ /*633*/ uint16(xMatch),
+ /*634*/ uint16(xCondDataSize), 622, 628, 638,
+ /*638*/ uint16(xSetOp), uint16(OR),
+ /*640*/ uint16(xReadSlashR),
+ /*641*/ uint16(xArgRM64),
+ /*642*/ uint16(xArgR64),
+ /*643*/ uint16(xMatch),
+ /*644*/ uint16(xSetOp), uint16(OR),
+ /*646*/ uint16(xReadSlashR),
+ /*647*/ uint16(xArgR8),
+ /*648*/ uint16(xArgRM8),
+ /*649*/ uint16(xMatch),
+ /*650*/ uint16(xCondIs64), 653, 669,
+ /*653*/ uint16(xCondDataSize), 657, 663, 0,
+ /*657*/ uint16(xSetOp), uint16(OR),
+ /*659*/ uint16(xReadSlashR),
+ /*660*/ uint16(xArgR16),
+ /*661*/ uint16(xArgRM16),
+ /*662*/ uint16(xMatch),
+ /*663*/ uint16(xSetOp), uint16(OR),
+ /*665*/ uint16(xReadSlashR),
+ /*666*/ uint16(xArgR32),
+ /*667*/ uint16(xArgRM32),
+ /*668*/ uint16(xMatch),
+ /*669*/ uint16(xCondDataSize), 657, 663, 673,
+ /*673*/ uint16(xSetOp), uint16(OR),
+ /*675*/ uint16(xReadSlashR),
+ /*676*/ uint16(xArgR64),
+ /*677*/ uint16(xArgRM64),
+ /*678*/ uint16(xMatch),
+ /*679*/ uint16(xSetOp), uint16(OR),
+ /*681*/ uint16(xReadIb),
+ /*682*/ uint16(xArgAL),
+ /*683*/ uint16(xArgImm8u),
+ /*684*/ uint16(xMatch),
+ /*685*/ uint16(xCondIs64), 688, 704,
+ /*688*/ uint16(xCondDataSize), 692, 698, 0,
+ /*692*/ uint16(xSetOp), uint16(OR),
+ /*694*/ uint16(xReadIw),
+ /*695*/ uint16(xArgAX),
+ /*696*/ uint16(xArgImm16),
+ /*697*/ uint16(xMatch),
+ /*698*/ uint16(xSetOp), uint16(OR),
+ /*700*/ uint16(xReadId),
+ /*701*/ uint16(xArgEAX),
+ /*702*/ uint16(xArgImm32),
+ /*703*/ uint16(xMatch),
+ /*704*/ uint16(xCondDataSize), 692, 698, 708,
+ /*708*/ uint16(xSetOp), uint16(OR),
+ /*710*/ uint16(xReadId),
+ /*711*/ uint16(xArgRAX),
+ /*712*/ uint16(xArgImm32),
+ /*713*/ uint16(xMatch),
+ /*714*/ uint16(xCondIs64), 717, 0,
+ /*717*/ uint16(xSetOp), uint16(PUSH),
+ /*719*/ uint16(xArgCS),
+ /*720*/ uint16(xMatch),
+ /*721*/ uint16(xCondByte), 228,
+ 0x00, 1180,
+ 0x01, 1237,
+ 0x02, 1345,
+ 0x03, 1367,
+ 0x05, 1389,
+ 0x06, 1395,
+ 0x07, 1398,
+ 0x08, 1404,
+ 0x09, 1407,
+ 0x0B, 1410,
+ 0x0D, 1413,
+ 0x10, 1426,
+ 0x11, 1460,
+ 0x12, 1494,
+ 0x13, 1537,
+ 0x14, 1555,
+ 0x15, 1573,
+ 0x16, 1591,
+ 0x17, 1626,
+ 0x18, 1644,
+ 0x1F, 1669,
+ 0x20, 1690,
+ 0x21, 1705,
+ 0x22, 1720,
+ 0x23, 1735,
+ 0x24, 1750,
+ 0x26, 1765,
+ 0x28, 1780,
+ 0x29, 1798,
+ 0x2A, 1816,
+ 0x2B, 1903,
+ 0x2C, 1937,
+ 0x2D, 2024,
+ 0x2E, 2111,
+ 0x2F, 2129,
+ 0x30, 2147,
+ 0x31, 2150,
+ 0x32, 2153,
+ 0x33, 2156,
+ 0x34, 2159,
+ 0x35, 2162,
+ 0x38, 2172,
+ 0x3A, 3073,
+ 0x40, 3484,
+ 0x41, 3513,
+ 0x42, 3542,
+ 0x43, 3571,
+ 0x44, 3600,
+ 0x45, 3629,
+ 0x46, 3658,
+ 0x47, 3687,
+ 0x48, 3716,
+ 0x49, 3745,
+ 0x4A, 3774,
+ 0x4B, 3803,
+ 0x4C, 3832,
+ 0x4D, 3861,
+ 0x4E, 3890,
+ 0x4F, 3919,
+ 0x50, 3948,
+ 0x51, 3966,
+ 0x52, 4000,
+ 0x53, 4018,
+ 0x54, 4036,
+ 0x55, 4054,
+ 0x56, 4072,
+ 0x57, 4090,
+ 0x58, 4108,
+ 0x59, 4142,
+ 0x5A, 4176,
+ 0x5B, 4210,
+ 0x5C, 4236,
+ 0x5D, 4270,
+ 0x5E, 4304,
+ 0x5F, 4338,
+ 0x60, 4372,
+ 0x61, 4390,
+ 0x62, 4408,
+ 0x63, 4426,
+ 0x64, 4444,
+ 0x65, 4462,
+ 0x66, 4480,
+ 0x67, 4498,
+ 0x68, 4516,
+ 0x69, 4534,
+ 0x6A, 4552,
+ 0x6B, 4570,
+ 0x6C, 4588,
+ 0x6D, 4598,
+ 0x6E, 4608,
+ 0x6F, 4675,
+ 0x70, 4701,
+ 0x71, 4743,
+ 0x72, 4806,
+ 0x73, 4869,
+ 0x74, 4934,
+ 0x75, 4952,
+ 0x76, 4970,
+ 0x77, 4988,
+ 0x7C, 4991,
+ 0x7D, 5009,
+ 0x7E, 5027,
+ 0x7F, 5104,
+ 0x80, 5130,
+ 0x81, 5161,
+ 0x82, 5192,
+ 0x83, 5223,
+ 0x84, 5254,
+ 0x85, 5285,
+ 0x86, 5316,
+ 0x87, 5347,
+ 0x88, 5378,
+ 0x89, 5409,
+ 0x8A, 5440,
+ 0x8B, 5471,
+ 0x8C, 5502,
+ 0x8D, 5533,
+ 0x8E, 5564,
+ 0x8F, 5595,
+ 0x90, 5626,
+ 0x91, 5631,
+ 0x92, 5636,
+ 0x93, 5641,
+ 0x94, 5646,
+ 0x95, 5651,
+ 0x96, 5656,
+ 0x97, 5661,
+ 0x98, 5666,
+ 0x99, 5671,
+ 0x9A, 5676,
+ 0x9B, 5681,
+ 0x9C, 5686,
+ 0x9D, 5691,
+ 0x9E, 5696,
+ 0x9F, 5701,
+ 0xA0, 5706,
+ 0xA1, 5710,
+ 0xA2, 5737,
+ 0xA3, 5740,
+ 0xA4, 5769,
+ 0xA5, 5804,
+ 0xA8, 5836,
+ 0xA9, 5840,
+ 0xAA, 5867,
+ 0xAB, 5870,
+ 0xAC, 5899,
+ 0xAD, 5934,
+ 0xAE, 5966,
+ 0xAF, 6224,
+ 0xB0, 6253,
+ 0xB1, 6259,
+ 0xB2, 6288,
+ 0xB3, 6317,
+ 0xB4, 6346,
+ 0xB5, 6375,
+ 0xB6, 6404,
+ 0xB7, 6433,
+ 0xB8, 6462,
+ 0xB9, 6499,
+ 0xBA, 6502,
+ 0xBB, 6627,
+ 0xBC, 6656,
+ 0xBD, 6723,
+ 0xBE, 6790,
+ 0xBF, 6819,
+ 0xC0, 6848,
+ 0xC1, 6854,
+ 0xC2, 6883,
+ 0xC3, 6925,
+ 0xC4, 6954,
+ 0xC5, 6976,
+ 0xC6, 6998,
+ 0xC7, 7020,
+ 0xc8, 7149,
+ 0xc9, 7149,
+ 0xca, 7149,
+ 0xcb, 7149,
+ 0xcc, 7149,
+ 0xcd, 7149,
+ 0xce, 7149,
+ 0xcf, 7149,
+ 0xD0, 7172,
+ 0xD1, 7190,
+ 0xD2, 7208,
+ 0xD3, 7226,
+ 0xD4, 7244,
+ 0xD5, 7262,
+ 0xD6, 7280,
+ 0xD7, 7306,
+ 0xD8, 7324,
+ 0xD9, 7342,
+ 0xDA, 7360,
+ 0xDB, 7378,
+ 0xDC, 7396,
+ 0xDD, 7414,
+ 0xDE, 7432,
+ 0xDF, 7450,
+ 0xE0, 7468,
+ 0xE1, 7486,
+ 0xE2, 7504,
+ 0xE3, 7522,
+ 0xE4, 7540,
+ 0xE5, 7558,
+ 0xE6, 7576,
+ 0xE7, 7602,
+ 0xE8, 7620,
+ 0xE9, 7638,
+ 0xEA, 7656,
+ 0xEB, 7674,
+ 0xEC, 7692,
+ 0xED, 7710,
+ 0xEE, 7728,
+ 0xEF, 7746,
+ 0xF0, 7764,
+ 0xF1, 7774,
+ 0xF2, 7792,
+ 0xF3, 7810,
+ 0xF4, 7828,
+ 0xF5, 7846,
+ 0xF6, 7864,
+ 0xF7, 7882,
+ 0xF8, 7900,
+ 0xF9, 7918,
+ 0xFA, 7936,
+ 0xFB, 7954,
+ 0xFC, 7972,
+ 0xFD, 7990,
+ 0xFE, 8008,
+ uint16(xFail),
+ /*1180*/ uint16(xCondSlashR),
+ 1189, // 0
+ 1205, // 1
+ 1221, // 2
+ 1225, // 3
+ 1229, // 4
+ 1233, // 5
+ 0, // 6
+ 0, // 7
+ /*1189*/ uint16(xCondDataSize), 1193, 1197, 1201,
+ /*1193*/ uint16(xSetOp), uint16(SLDT),
+ /*1195*/ uint16(xArgRM16),
+ /*1196*/ uint16(xMatch),
+ /*1197*/ uint16(xSetOp), uint16(SLDT),
+ /*1199*/ uint16(xArgR32M16),
+ /*1200*/ uint16(xMatch),
+ /*1201*/ uint16(xSetOp), uint16(SLDT),
+ /*1203*/ uint16(xArgR64M16),
+ /*1204*/ uint16(xMatch),
+ /*1205*/ uint16(xCondDataSize), 1209, 1213, 1217,
+ /*1209*/ uint16(xSetOp), uint16(STR),
+ /*1211*/ uint16(xArgRM16),
+ /*1212*/ uint16(xMatch),
+ /*1213*/ uint16(xSetOp), uint16(STR),
+ /*1215*/ uint16(xArgR32M16),
+ /*1216*/ uint16(xMatch),
+ /*1217*/ uint16(xSetOp), uint16(STR),
+ /*1219*/ uint16(xArgR64M16),
+ /*1220*/ uint16(xMatch),
+ /*1221*/ uint16(xSetOp), uint16(LLDT),
+ /*1223*/ uint16(xArgRM16),
+ /*1224*/ uint16(xMatch),
+ /*1225*/ uint16(xSetOp), uint16(LTR),
+ /*1227*/ uint16(xArgRM16),
+ /*1228*/ uint16(xMatch),
+ /*1229*/ uint16(xSetOp), uint16(VERR),
+ /*1231*/ uint16(xArgRM16),
+ /*1232*/ uint16(xMatch),
+ /*1233*/ uint16(xSetOp), uint16(VERW),
+ /*1235*/ uint16(xArgRM16),
+ /*1236*/ uint16(xMatch),
+ /*1237*/ uint16(xCondByte), 8,
+ 0xC8, 1318,
+ 0xC9, 1321,
+ 0xD0, 1324,
+ 0xD1, 1327,
+ 0xD5, 1330,
+ 0xD6, 1333,
+ 0xF8, 1336,
+ 0xF9, 1342,
+ /*1255*/ uint16(xCondSlashR),
+ 1264, // 0
+ 1268, // 1
+ 1272, // 2
+ 1283, // 3
+ 1294, // 4
+ 0, // 5
+ 1310, // 6
+ 1314, // 7
+ /*1264*/ uint16(xSetOp), uint16(SGDT),
+ /*1266*/ uint16(xArgM),
+ /*1267*/ uint16(xMatch),
+ /*1268*/ uint16(xSetOp), uint16(SIDT),
+ /*1270*/ uint16(xArgM),
+ /*1271*/ uint16(xMatch),
+ /*1272*/ uint16(xCondIs64), 1275, 1279,
+ /*1275*/ uint16(xSetOp), uint16(LGDT),
+ /*1277*/ uint16(xArgM16and32),
+ /*1278*/ uint16(xMatch),
+ /*1279*/ uint16(xSetOp), uint16(LGDT),
+ /*1281*/ uint16(xArgM16and64),
+ /*1282*/ uint16(xMatch),
+ /*1283*/ uint16(xCondIs64), 1286, 1290,
+ /*1286*/ uint16(xSetOp), uint16(LIDT),
+ /*1288*/ uint16(xArgM16and32),
+ /*1289*/ uint16(xMatch),
+ /*1290*/ uint16(xSetOp), uint16(LIDT),
+ /*1292*/ uint16(xArgM16and64),
+ /*1293*/ uint16(xMatch),
+ /*1294*/ uint16(xCondDataSize), 1298, 1302, 1306,
+ /*1298*/ uint16(xSetOp), uint16(SMSW),
+ /*1300*/ uint16(xArgRM16),
+ /*1301*/ uint16(xMatch),
+ /*1302*/ uint16(xSetOp), uint16(SMSW),
+ /*1304*/ uint16(xArgR32M16),
+ /*1305*/ uint16(xMatch),
+ /*1306*/ uint16(xSetOp), uint16(SMSW),
+ /*1308*/ uint16(xArgR64M16),
+ /*1309*/ uint16(xMatch),
+ /*1310*/ uint16(xSetOp), uint16(LMSW),
+ /*1312*/ uint16(xArgRM16),
+ /*1313*/ uint16(xMatch),
+ /*1314*/ uint16(xSetOp), uint16(INVLPG),
+ /*1316*/ uint16(xArgM),
+ /*1317*/ uint16(xMatch),
+ /*1318*/ uint16(xSetOp), uint16(MONITOR),
+ /*1320*/ uint16(xMatch),
+ /*1321*/ uint16(xSetOp), uint16(MWAIT),
+ /*1323*/ uint16(xMatch),
+ /*1324*/ uint16(xSetOp), uint16(XGETBV),
+ /*1326*/ uint16(xMatch),
+ /*1327*/ uint16(xSetOp), uint16(XSETBV),
+ /*1329*/ uint16(xMatch),
+ /*1330*/ uint16(xSetOp), uint16(XEND),
+ /*1332*/ uint16(xMatch),
+ /*1333*/ uint16(xSetOp), uint16(XTEST),
+ /*1335*/ uint16(xMatch),
+ /*1336*/ uint16(xCondIs64), 0, 1339,
+ /*1339*/ uint16(xSetOp), uint16(SWAPGS),
+ /*1341*/ uint16(xMatch),
+ /*1342*/ uint16(xSetOp), uint16(RDTSCP),
+ /*1344*/ uint16(xMatch),
+ /*1345*/ uint16(xCondDataSize), 1349, 1355, 1361,
+ /*1349*/ uint16(xSetOp), uint16(LAR),
+ /*1351*/ uint16(xReadSlashR),
+ /*1352*/ uint16(xArgR16),
+ /*1353*/ uint16(xArgRM16),
+ /*1354*/ uint16(xMatch),
+ /*1355*/ uint16(xSetOp), uint16(LAR),
+ /*1357*/ uint16(xReadSlashR),
+ /*1358*/ uint16(xArgR32),
+ /*1359*/ uint16(xArgR32M16),
+ /*1360*/ uint16(xMatch),
+ /*1361*/ uint16(xSetOp), uint16(LAR),
+ /*1363*/ uint16(xReadSlashR),
+ /*1364*/ uint16(xArgR64),
+ /*1365*/ uint16(xArgR64M16),
+ /*1366*/ uint16(xMatch),
+ /*1367*/ uint16(xCondDataSize), 1371, 1377, 1383,
+ /*1371*/ uint16(xSetOp), uint16(LSL),
+ /*1373*/ uint16(xReadSlashR),
+ /*1374*/ uint16(xArgR16),
+ /*1375*/ uint16(xArgRM16),
+ /*1376*/ uint16(xMatch),
+ /*1377*/ uint16(xSetOp), uint16(LSL),
+ /*1379*/ uint16(xReadSlashR),
+ /*1380*/ uint16(xArgR32),
+ /*1381*/ uint16(xArgR32M16),
+ /*1382*/ uint16(xMatch),
+ /*1383*/ uint16(xSetOp), uint16(LSL),
+ /*1385*/ uint16(xReadSlashR),
+ /*1386*/ uint16(xArgR64),
+ /*1387*/ uint16(xArgR32M16),
+ /*1388*/ uint16(xMatch),
+ /*1389*/ uint16(xCondIs64), 0, 1392,
+ /*1392*/ uint16(xSetOp), uint16(SYSCALL),
+ /*1394*/ uint16(xMatch),
+ /*1395*/ uint16(xSetOp), uint16(CLTS),
+ /*1397*/ uint16(xMatch),
+ /*1398*/ uint16(xCondIs64), 0, 1401,
+ /*1401*/ uint16(xSetOp), uint16(SYSRET),
+ /*1403*/ uint16(xMatch),
+ /*1404*/ uint16(xSetOp), uint16(INVD),
+ /*1406*/ uint16(xMatch),
+ /*1407*/ uint16(xSetOp), uint16(WBINVD),
+ /*1409*/ uint16(xMatch),
+ /*1410*/ uint16(xSetOp), uint16(UD2),
+ /*1412*/ uint16(xMatch),
+ /*1413*/ uint16(xCondSlashR),
+ 0, // 0
+ 1422, // 1
+ 0, // 2
+ 0, // 3
+ 0, // 4
+ 0, // 5
+ 0, // 6
+ 0, // 7
+ /*1422*/ uint16(xSetOp), uint16(PREFETCHW),
+ /*1424*/ uint16(xArgM8),
+ /*1425*/ uint16(xMatch),
+ /*1426*/ uint16(xCondPrefix), 4,
+ 0xF3, 1454,
+ 0xF2, 1448,
+ 0x66, 1442,
+ 0x0, 1436,
+ /*1436*/ uint16(xSetOp), uint16(MOVUPS),
+ /*1438*/ uint16(xReadSlashR),
+ /*1439*/ uint16(xArgXmm1),
+ /*1440*/ uint16(xArgXmm2M128),
+ /*1441*/ uint16(xMatch),
+ /*1442*/ uint16(xSetOp), uint16(MOVUPD),
+ /*1444*/ uint16(xReadSlashR),
+ /*1445*/ uint16(xArgXmm1),
+ /*1446*/ uint16(xArgXmm2M128),
+ /*1447*/ uint16(xMatch),
+ /*1448*/ uint16(xSetOp), uint16(MOVSD_XMM),
+ /*1450*/ uint16(xReadSlashR),
+ /*1451*/ uint16(xArgXmm1),
+ /*1452*/ uint16(xArgXmm2M64),
+ /*1453*/ uint16(xMatch),
+ /*1454*/ uint16(xSetOp), uint16(MOVSS),
+ /*1456*/ uint16(xReadSlashR),
+ /*1457*/ uint16(xArgXmm1),
+ /*1458*/ uint16(xArgXmm2M32),
+ /*1459*/ uint16(xMatch),
+ /*1460*/ uint16(xCondPrefix), 4,
+ 0xF3, 1488,
+ 0xF2, 1482,
+ 0x66, 1476,
+ 0x0, 1470,
+ /*1470*/ uint16(xSetOp), uint16(MOVUPS),
+ /*1472*/ uint16(xReadSlashR),
+ /*1473*/ uint16(xArgXmm2M128),
+ /*1474*/ uint16(xArgXmm1),
+ /*1475*/ uint16(xMatch),
+ /*1476*/ uint16(xSetOp), uint16(MOVUPD),
+ /*1478*/ uint16(xReadSlashR),
+ /*1479*/ uint16(xArgXmm2M128),
+ /*1480*/ uint16(xArgXmm),
+ /*1481*/ uint16(xMatch),
+ /*1482*/ uint16(xSetOp), uint16(MOVSD_XMM),
+ /*1484*/ uint16(xReadSlashR),
+ /*1485*/ uint16(xArgXmm2M64),
+ /*1486*/ uint16(xArgXmm1),
+ /*1487*/ uint16(xMatch),
+ /*1488*/ uint16(xSetOp), uint16(MOVSS),
+ /*1490*/ uint16(xReadSlashR),
+ /*1491*/ uint16(xArgXmm2M32),
+ /*1492*/ uint16(xArgXmm),
+ /*1493*/ uint16(xMatch),
+ /*1494*/ uint16(xCondPrefix), 4,
+ 0xF3, 1531,
+ 0xF2, 1525,
+ 0x66, 1519,
+ 0x0, 1504,
+ /*1504*/ uint16(xCondIsMem), 1507, 1513,
+ /*1507*/ uint16(xSetOp), uint16(MOVHLPS),
+ /*1509*/ uint16(xReadSlashR),
+ /*1510*/ uint16(xArgXmm1),
+ /*1511*/ uint16(xArgXmm2),
+ /*1512*/ uint16(xMatch),
+ /*1513*/ uint16(xSetOp), uint16(MOVLPS),
+ /*1515*/ uint16(xReadSlashR),
+ /*1516*/ uint16(xArgXmm),
+ /*1517*/ uint16(xArgM64),
+ /*1518*/ uint16(xMatch),
+ /*1519*/ uint16(xSetOp), uint16(MOVLPD),
+ /*1521*/ uint16(xReadSlashR),
+ /*1522*/ uint16(xArgXmm),
+ /*1523*/ uint16(xArgXmm2M64),
+ /*1524*/ uint16(xMatch),
+ /*1525*/ uint16(xSetOp), uint16(MOVDDUP),
+ /*1527*/ uint16(xReadSlashR),
+ /*1528*/ uint16(xArgXmm1),
+ /*1529*/ uint16(xArgXmm2M64),
+ /*1530*/ uint16(xMatch),
+ /*1531*/ uint16(xSetOp), uint16(MOVSLDUP),
+ /*1533*/ uint16(xReadSlashR),
+ /*1534*/ uint16(xArgXmm1),
+ /*1535*/ uint16(xArgXmm2M128),
+ /*1536*/ uint16(xMatch),
+ /*1537*/ uint16(xCondPrefix), 2,
+ 0x66, 1549,
+ 0x0, 1543,
+ /*1543*/ uint16(xSetOp), uint16(MOVLPS),
+ /*1545*/ uint16(xReadSlashR),
+ /*1546*/ uint16(xArgM64),
+ /*1547*/ uint16(xArgXmm),
+ /*1548*/ uint16(xMatch),
+ /*1549*/ uint16(xSetOp), uint16(MOVLPD),
+ /*1551*/ uint16(xReadSlashR),
+ /*1552*/ uint16(xArgXmm2M64),
+ /*1553*/ uint16(xArgXmm),
+ /*1554*/ uint16(xMatch),
+ /*1555*/ uint16(xCondPrefix), 2,
+ 0x66, 1567,
+ 0x0, 1561,
+ /*1561*/ uint16(xSetOp), uint16(UNPCKLPS),
+ /*1563*/ uint16(xReadSlashR),
+ /*1564*/ uint16(xArgXmm1),
+ /*1565*/ uint16(xArgXmm2M128),
+ /*1566*/ uint16(xMatch),
+ /*1567*/ uint16(xSetOp), uint16(UNPCKLPD),
+ /*1569*/ uint16(xReadSlashR),
+ /*1570*/ uint16(xArgXmm1),
+ /*1571*/ uint16(xArgXmm2M128),
+ /*1572*/ uint16(xMatch),
+ /*1573*/ uint16(xCondPrefix), 2,
+ 0x66, 1585,
+ 0x0, 1579,
+ /*1579*/ uint16(xSetOp), uint16(UNPCKHPS),
+ /*1581*/ uint16(xReadSlashR),
+ /*1582*/ uint16(xArgXmm1),
+ /*1583*/ uint16(xArgXmm2M128),
+ /*1584*/ uint16(xMatch),
+ /*1585*/ uint16(xSetOp), uint16(UNPCKHPD),
+ /*1587*/ uint16(xReadSlashR),
+ /*1588*/ uint16(xArgXmm1),
+ /*1589*/ uint16(xArgXmm2M128),
+ /*1590*/ uint16(xMatch),
+ /*1591*/ uint16(xCondPrefix), 3,
+ 0xF3, 1620,
+ 0x66, 1614,
+ 0x0, 1599,
+ /*1599*/ uint16(xCondIsMem), 1602, 1608,
+ /*1602*/ uint16(xSetOp), uint16(MOVLHPS),
+ /*1604*/ uint16(xReadSlashR),
+ /*1605*/ uint16(xArgXmm1),
+ /*1606*/ uint16(xArgXmm2),
+ /*1607*/ uint16(xMatch),
+ /*1608*/ uint16(xSetOp), uint16(MOVHPS),
+ /*1610*/ uint16(xReadSlashR),
+ /*1611*/ uint16(xArgXmm),
+ /*1612*/ uint16(xArgM64),
+ /*1613*/ uint16(xMatch),
+ /*1614*/ uint16(xSetOp), uint16(MOVHPD),
+ /*1616*/ uint16(xReadSlashR),
+ /*1617*/ uint16(xArgXmm),
+ /*1618*/ uint16(xArgXmm2M64),
+ /*1619*/ uint16(xMatch),
+ /*1620*/ uint16(xSetOp), uint16(MOVSHDUP),
+ /*1622*/ uint16(xReadSlashR),
+ /*1623*/ uint16(xArgXmm1),
+ /*1624*/ uint16(xArgXmm2M128),
+ /*1625*/ uint16(xMatch),
+ /*1626*/ uint16(xCondPrefix), 2,
+ 0x66, 1638,
+ 0x0, 1632,
+ /*1632*/ uint16(xSetOp), uint16(MOVHPS),
+ /*1634*/ uint16(xReadSlashR),
+ /*1635*/ uint16(xArgM64),
+ /*1636*/ uint16(xArgXmm),
+ /*1637*/ uint16(xMatch),
+ /*1638*/ uint16(xSetOp), uint16(MOVHPD),
+ /*1640*/ uint16(xReadSlashR),
+ /*1641*/ uint16(xArgXmm2M64),
+ /*1642*/ uint16(xArgXmm),
+ /*1643*/ uint16(xMatch),
+ /*1644*/ uint16(xCondSlashR),
+ 1653, // 0
+ 1657, // 1
+ 1661, // 2
+ 1665, // 3
+ 0, // 4
+ 0, // 5
+ 0, // 6
+ 0, // 7
+ /*1653*/ uint16(xSetOp), uint16(PREFETCHNTA),
+ /*1655*/ uint16(xArgM8),
+ /*1656*/ uint16(xMatch),
+ /*1657*/ uint16(xSetOp), uint16(PREFETCHT0),
+ /*1659*/ uint16(xArgM8),
+ /*1660*/ uint16(xMatch),
+ /*1661*/ uint16(xSetOp), uint16(PREFETCHT1),
+ /*1663*/ uint16(xArgM8),
+ /*1664*/ uint16(xMatch),
+ /*1665*/ uint16(xSetOp), uint16(PREFETCHT2),
+ /*1667*/ uint16(xArgM8),
+ /*1668*/ uint16(xMatch),
+ /*1669*/ uint16(xCondSlashR),
+ 1678, // 0
+ 0, // 1
+ 0, // 2
+ 0, // 3
+ 0, // 4
+ 0, // 5
+ 0, // 6
+ 0, // 7
+ /*1678*/ uint16(xCondDataSize), 1682, 1686, 0,
+ /*1682*/ uint16(xSetOp), uint16(NOP),
+ /*1684*/ uint16(xArgRM16),
+ /*1685*/ uint16(xMatch),
+ /*1686*/ uint16(xSetOp), uint16(NOP),
+ /*1688*/ uint16(xArgRM32),
+ /*1689*/ uint16(xMatch),
+ /*1690*/ uint16(xCondIs64), 1693, 1699,
+ /*1693*/ uint16(xSetOp), uint16(MOV),
+ /*1695*/ uint16(xReadSlashR),
+ /*1696*/ uint16(xArgRmf32),
+ /*1697*/ uint16(xArgCR0dashCR7),
+ /*1698*/ uint16(xMatch),
+ /*1699*/ uint16(xSetOp), uint16(MOV),
+ /*1701*/ uint16(xReadSlashR),
+ /*1702*/ uint16(xArgRmf64),
+ /*1703*/ uint16(xArgCR0dashCR7),
+ /*1704*/ uint16(xMatch),
+ /*1705*/ uint16(xCondIs64), 1708, 1714,
+ /*1708*/ uint16(xSetOp), uint16(MOV),
+ /*1710*/ uint16(xReadSlashR),
+ /*1711*/ uint16(xArgRmf32),
+ /*1712*/ uint16(xArgDR0dashDR7),
+ /*1713*/ uint16(xMatch),
+ /*1714*/ uint16(xSetOp), uint16(MOV),
+ /*1716*/ uint16(xReadSlashR),
+ /*1717*/ uint16(xArgRmf64),
+ /*1718*/ uint16(xArgDR0dashDR7),
+ /*1719*/ uint16(xMatch),
+ /*1720*/ uint16(xCondIs64), 1723, 1729,
+ /*1723*/ uint16(xSetOp), uint16(MOV),
+ /*1725*/ uint16(xReadSlashR),
+ /*1726*/ uint16(xArgCR0dashCR7),
+ /*1727*/ uint16(xArgRmf32),
+ /*1728*/ uint16(xMatch),
+ /*1729*/ uint16(xSetOp), uint16(MOV),
+ /*1731*/ uint16(xReadSlashR),
+ /*1732*/ uint16(xArgCR0dashCR7),
+ /*1733*/ uint16(xArgRmf64),
+ /*1734*/ uint16(xMatch),
+ /*1735*/ uint16(xCondIs64), 1738, 1744,
+ /*1738*/ uint16(xSetOp), uint16(MOV),
+ /*1740*/ uint16(xReadSlashR),
+ /*1741*/ uint16(xArgDR0dashDR7),
+ /*1742*/ uint16(xArgRmf32),
+ /*1743*/ uint16(xMatch),
+ /*1744*/ uint16(xSetOp), uint16(MOV),
+ /*1746*/ uint16(xReadSlashR),
+ /*1747*/ uint16(xArgDR0dashDR7),
+ /*1748*/ uint16(xArgRmf64),
+ /*1749*/ uint16(xMatch),
+ /*1750*/ uint16(xCondIs64), 1753, 1759,
+ /*1753*/ uint16(xSetOp), uint16(MOV),
+ /*1755*/ uint16(xReadSlashR),
+ /*1756*/ uint16(xArgRmf32),
+ /*1757*/ uint16(xArgTR0dashTR7),
+ /*1758*/ uint16(xMatch),
+ /*1759*/ uint16(xSetOp), uint16(MOV),
+ /*1761*/ uint16(xReadSlashR),
+ /*1762*/ uint16(xArgRmf64),
+ /*1763*/ uint16(xArgTR0dashTR7),
+ /*1764*/ uint16(xMatch),
+ /*1765*/ uint16(xCondIs64), 1768, 1774,
+ /*1768*/ uint16(xSetOp), uint16(MOV),
+ /*1770*/ uint16(xReadSlashR),
+ /*1771*/ uint16(xArgTR0dashTR7),
+ /*1772*/ uint16(xArgRmf32),
+ /*1773*/ uint16(xMatch),
+ /*1774*/ uint16(xSetOp), uint16(MOV),
+ /*1776*/ uint16(xReadSlashR),
+ /*1777*/ uint16(xArgTR0dashTR7),
+ /*1778*/ uint16(xArgRmf64),
+ /*1779*/ uint16(xMatch),
+ /*1780*/ uint16(xCondPrefix), 2,
+ 0x66, 1792,
+ 0x0, 1786,
+ /*1786*/ uint16(xSetOp), uint16(MOVAPS),
+ /*1788*/ uint16(xReadSlashR),
+ /*1789*/ uint16(xArgXmm1),
+ /*1790*/ uint16(xArgXmm2M128),
+ /*1791*/ uint16(xMatch),
+ /*1792*/ uint16(xSetOp), uint16(MOVAPD),
+ /*1794*/ uint16(xReadSlashR),
+ /*1795*/ uint16(xArgXmm1),
+ /*1796*/ uint16(xArgXmm2M128),
+ /*1797*/ uint16(xMatch),
+ /*1798*/ uint16(xCondPrefix), 2,
+ 0x66, 1810,
+ 0x0, 1804,
+ /*1804*/ uint16(xSetOp), uint16(MOVAPS),
+ /*1806*/ uint16(xReadSlashR),
+ /*1807*/ uint16(xArgXmm2M128),
+ /*1808*/ uint16(xArgXmm1),
+ /*1809*/ uint16(xMatch),
+ /*1810*/ uint16(xSetOp), uint16(MOVAPD),
+ /*1812*/ uint16(xReadSlashR),
+ /*1813*/ uint16(xArgXmm2M128),
+ /*1814*/ uint16(xArgXmm1),
+ /*1815*/ uint16(xMatch),
+ /*1816*/ uint16(xCondIs64), 1819, 1873,
+ /*1819*/ uint16(xCondPrefix), 4,
+ 0xF3, 1857,
+ 0xF2, 1841,
+ 0x66, 1835,
+ 0x0, 1829,
+ /*1829*/ uint16(xSetOp), uint16(CVTPI2PS),
+ /*1831*/ uint16(xReadSlashR),
+ /*1832*/ uint16(xArgXmm),
+ /*1833*/ uint16(xArgMmM64),
+ /*1834*/ uint16(xMatch),
+ /*1835*/ uint16(xSetOp), uint16(CVTPI2PD),
+ /*1837*/ uint16(xReadSlashR),
+ /*1838*/ uint16(xArgXmm),
+ /*1839*/ uint16(xArgMmM64),
+ /*1840*/ uint16(xMatch),
+ /*1841*/ uint16(xCondDataSize), 1845, 1851, 0,
+ /*1845*/ uint16(xSetOp), uint16(CVTSI2SD),
+ /*1847*/ uint16(xReadSlashR),
+ /*1848*/ uint16(xArgXmm),
+ /*1849*/ uint16(xArgRM32),
+ /*1850*/ uint16(xMatch),
+ /*1851*/ uint16(xSetOp), uint16(CVTSI2SD),
+ /*1853*/ uint16(xReadSlashR),
+ /*1854*/ uint16(xArgXmm),
+ /*1855*/ uint16(xArgRM32),
+ /*1856*/ uint16(xMatch),
+ /*1857*/ uint16(xCondDataSize), 1861, 1867, 0,
+ /*1861*/ uint16(xSetOp), uint16(CVTSI2SS),
+ /*1863*/ uint16(xReadSlashR),
+ /*1864*/ uint16(xArgXmm),
+ /*1865*/ uint16(xArgRM32),
+ /*1866*/ uint16(xMatch),
+ /*1867*/ uint16(xSetOp), uint16(CVTSI2SS),
+ /*1869*/ uint16(xReadSlashR),
+ /*1870*/ uint16(xArgXmm),
+ /*1871*/ uint16(xArgRM32),
+ /*1872*/ uint16(xMatch),
+ /*1873*/ uint16(xCondPrefix), 4,
+ 0xF3, 1893,
+ 0xF2, 1883,
+ 0x66, 1835,
+ 0x0, 1829,
+ /*1883*/ uint16(xCondDataSize), 1845, 1851, 1887,
+ /*1887*/ uint16(xSetOp), uint16(CVTSI2SD),
+ /*1889*/ uint16(xReadSlashR),
+ /*1890*/ uint16(xArgXmm),
+ /*1891*/ uint16(xArgRM64),
+ /*1892*/ uint16(xMatch),
+ /*1893*/ uint16(xCondDataSize), 1861, 1867, 1897,
+ /*1897*/ uint16(xSetOp), uint16(CVTSI2SS),
+ /*1899*/ uint16(xReadSlashR),
+ /*1900*/ uint16(xArgXmm),
+ /*1901*/ uint16(xArgRM64),
+ /*1902*/ uint16(xMatch),
+ /*1903*/ uint16(xCondPrefix), 4,
+ 0xF3, 1931,
+ 0xF2, 1925,
+ 0x66, 1919,
+ 0x0, 1913,
+ /*1913*/ uint16(xSetOp), uint16(MOVNTPS),
+ /*1915*/ uint16(xReadSlashR),
+ /*1916*/ uint16(xArgM128),
+ /*1917*/ uint16(xArgXmm),
+ /*1918*/ uint16(xMatch),
+ /*1919*/ uint16(xSetOp), uint16(MOVNTPD),
+ /*1921*/ uint16(xReadSlashR),
+ /*1922*/ uint16(xArgM128),
+ /*1923*/ uint16(xArgXmm),
+ /*1924*/ uint16(xMatch),
+ /*1925*/ uint16(xSetOp), uint16(MOVNTSD),
+ /*1927*/ uint16(xReadSlashR),
+ /*1928*/ uint16(xArgM64),
+ /*1929*/ uint16(xArgXmm),
+ /*1930*/ uint16(xMatch),
+ /*1931*/ uint16(xSetOp), uint16(MOVNTSS),
+ /*1933*/ uint16(xReadSlashR),
+ /*1934*/ uint16(xArgM32),
+ /*1935*/ uint16(xArgXmm),
+ /*1936*/ uint16(xMatch),
+ /*1937*/ uint16(xCondIs64), 1940, 1994,
+ /*1940*/ uint16(xCondPrefix), 4,
+ 0xF3, 1978,
+ 0xF2, 1962,
+ 0x66, 1956,
+ 0x0, 1950,
+ /*1950*/ uint16(xSetOp), uint16(CVTTPS2PI),
+ /*1952*/ uint16(xReadSlashR),
+ /*1953*/ uint16(xArgMm),
+ /*1954*/ uint16(xArgXmmM64),
+ /*1955*/ uint16(xMatch),
+ /*1956*/ uint16(xSetOp), uint16(CVTTPD2PI),
+ /*1958*/ uint16(xReadSlashR),
+ /*1959*/ uint16(xArgMm),
+ /*1960*/ uint16(xArgXmmM128),
+ /*1961*/ uint16(xMatch),
+ /*1962*/ uint16(xCondDataSize), 1966, 1972, 0,
+ /*1966*/ uint16(xSetOp), uint16(CVTTSD2SI),
+ /*1968*/ uint16(xReadSlashR),
+ /*1969*/ uint16(xArgR32),
+ /*1970*/ uint16(xArgXmmM64),
+ /*1971*/ uint16(xMatch),
+ /*1972*/ uint16(xSetOp), uint16(CVTTSD2SI),
+ /*1974*/ uint16(xReadSlashR),
+ /*1975*/ uint16(xArgR32),
+ /*1976*/ uint16(xArgXmmM64),
+ /*1977*/ uint16(xMatch),
+ /*1978*/ uint16(xCondDataSize), 1982, 1988, 0,
+ /*1982*/ uint16(xSetOp), uint16(CVTTSS2SI),
+ /*1984*/ uint16(xReadSlashR),
+ /*1985*/ uint16(xArgR32),
+ /*1986*/ uint16(xArgXmmM32),
+ /*1987*/ uint16(xMatch),
+ /*1988*/ uint16(xSetOp), uint16(CVTTSS2SI),
+ /*1990*/ uint16(xReadSlashR),
+ /*1991*/ uint16(xArgR32),
+ /*1992*/ uint16(xArgXmmM32),
+ /*1993*/ uint16(xMatch),
+ /*1994*/ uint16(xCondPrefix), 4,
+ 0xF3, 2014,
+ 0xF2, 2004,
+ 0x66, 1956,
+ 0x0, 1950,
+ /*2004*/ uint16(xCondDataSize), 1966, 1972, 2008,
+ /*2008*/ uint16(xSetOp), uint16(CVTTSD2SI),
+ /*2010*/ uint16(xReadSlashR),
+ /*2011*/ uint16(xArgR64),
+ /*2012*/ uint16(xArgXmmM64),
+ /*2013*/ uint16(xMatch),
+ /*2014*/ uint16(xCondDataSize), 1982, 1988, 2018,
+ /*2018*/ uint16(xSetOp), uint16(CVTTSS2SI),
+ /*2020*/ uint16(xReadSlashR),
+ /*2021*/ uint16(xArgR64),
+ /*2022*/ uint16(xArgXmmM32),
+ /*2023*/ uint16(xMatch),
+ /*2024*/ uint16(xCondIs64), 2027, 2081,
+ /*2027*/ uint16(xCondPrefix), 4,
+ 0xF3, 2065,
+ 0xF2, 2049,
+ 0x66, 2043,
+ 0x0, 2037,
+ /*2037*/ uint16(xSetOp), uint16(CVTPS2PI),
+ /*2039*/ uint16(xReadSlashR),
+ /*2040*/ uint16(xArgMm),
+ /*2041*/ uint16(xArgXmmM64),
+ /*2042*/ uint16(xMatch),
+ /*2043*/ uint16(xSetOp), uint16(CVTPD2PI),
+ /*2045*/ uint16(xReadSlashR),
+ /*2046*/ uint16(xArgMm),
+ /*2047*/ uint16(xArgXmmM128),
+ /*2048*/ uint16(xMatch),
+ /*2049*/ uint16(xCondDataSize), 2053, 2059, 0,
+ /*2053*/ uint16(xSetOp), uint16(CVTSD2SI),
+ /*2055*/ uint16(xReadSlashR),
+ /*2056*/ uint16(xArgR32),
+ /*2057*/ uint16(xArgXmmM64),
+ /*2058*/ uint16(xMatch),
+ /*2059*/ uint16(xSetOp), uint16(CVTSD2SI),
+ /*2061*/ uint16(xReadSlashR),
+ /*2062*/ uint16(xArgR32),
+ /*2063*/ uint16(xArgXmmM64),
+ /*2064*/ uint16(xMatch),
+ /*2065*/ uint16(xCondDataSize), 2069, 2075, 0,
+ /*2069*/ uint16(xSetOp), uint16(CVTSS2SI),
+ /*2071*/ uint16(xReadSlashR),
+ /*2072*/ uint16(xArgR32),
+ /*2073*/ uint16(xArgXmmM32),
+ /*2074*/ uint16(xMatch),
+ /*2075*/ uint16(xSetOp), uint16(CVTSS2SI),
+ /*2077*/ uint16(xReadSlashR),
+ /*2078*/ uint16(xArgR32),
+ /*2079*/ uint16(xArgXmmM32),
+ /*2080*/ uint16(xMatch),
+ /*2081*/ uint16(xCondPrefix), 4,
+ 0xF3, 2101,
+ 0xF2, 2091,
+ 0x66, 2043,
+ 0x0, 2037,
+ /*2091*/ uint16(xCondDataSize), 2053, 2059, 2095,
+ /*2095*/ uint16(xSetOp), uint16(CVTSD2SI),
+ /*2097*/ uint16(xReadSlashR),
+ /*2098*/ uint16(xArgR64),
+ /*2099*/ uint16(xArgXmmM64),
+ /*2100*/ uint16(xMatch),
+ /*2101*/ uint16(xCondDataSize), 2069, 2075, 2105,
+ /*2105*/ uint16(xSetOp), uint16(CVTSS2SI),
+ /*2107*/ uint16(xReadSlashR),
+ /*2108*/ uint16(xArgR64),
+ /*2109*/ uint16(xArgXmmM32),
+ /*2110*/ uint16(xMatch),
+ /*2111*/ uint16(xCondPrefix), 2,
+ 0x66, 2123,
+ 0x0, 2117,
+ /*2117*/ uint16(xSetOp), uint16(UCOMISS),
+ /*2119*/ uint16(xReadSlashR),
+ /*2120*/ uint16(xArgXmm1),
+ /*2121*/ uint16(xArgXmm2M32),
+ /*2122*/ uint16(xMatch),
+ /*2123*/ uint16(xSetOp), uint16(UCOMISD),
+ /*2125*/ uint16(xReadSlashR),
+ /*2126*/ uint16(xArgXmm1),
+ /*2127*/ uint16(xArgXmm2M64),
+ /*2128*/ uint16(xMatch),
+ /*2129*/ uint16(xCondPrefix), 2,
+ 0x66, 2141,
+ 0x0, 2135,
+ /*2135*/ uint16(xSetOp), uint16(COMISS),
+ /*2137*/ uint16(xReadSlashR),
+ /*2138*/ uint16(xArgXmm1),
+ /*2139*/ uint16(xArgXmm2M32),
+ /*2140*/ uint16(xMatch),
+ /*2141*/ uint16(xSetOp), uint16(COMISD),
+ /*2143*/ uint16(xReadSlashR),
+ /*2144*/ uint16(xArgXmm1),
+ /*2145*/ uint16(xArgXmm2M64),
+ /*2146*/ uint16(xMatch),
+ /*2147*/ uint16(xSetOp), uint16(WRMSR),
+ /*2149*/ uint16(xMatch),
+ /*2150*/ uint16(xSetOp), uint16(RDTSC),
+ /*2152*/ uint16(xMatch),
+ /*2153*/ uint16(xSetOp), uint16(RDMSR),
+ /*2155*/ uint16(xMatch),
+ /*2156*/ uint16(xSetOp), uint16(RDPMC),
+ /*2158*/ uint16(xMatch),
+ /*2159*/ uint16(xSetOp), uint16(SYSENTER),
+ /*2161*/ uint16(xMatch),
+ /*2162*/ uint16(xCondDataSize), 2166, 2166, 2169,
+ /*2166*/ uint16(xSetOp), uint16(SYSEXIT),
+ /*2168*/ uint16(xMatch),
+ /*2169*/ uint16(xSetOp), uint16(SYSEXIT),
+ /*2171*/ uint16(xMatch),
+ /*2172*/ uint16(xCondByte), 54,
+ 0x00, 2283,
+ 0x01, 2301,
+ 0x02, 2319,
+ 0x03, 2337,
+ 0x04, 2355,
+ 0x05, 2373,
+ 0x06, 2391,
+ 0x07, 2409,
+ 0x08, 2427,
+ 0x09, 2445,
+ 0x0A, 2463,
+ 0x0B, 2481,
+ 0x10, 2499,
+ 0x14, 2510,
+ 0x15, 2521,
+ 0x17, 2532,
+ 0x1C, 2542,
+ 0x1D, 2560,
+ 0x1E, 2578,
+ 0x20, 2596,
+ 0x21, 2606,
+ 0x22, 2616,
+ 0x23, 2626,
+ 0x24, 2636,
+ 0x25, 2646,
+ 0x28, 2656,
+ 0x29, 2666,
+ 0x2A, 2676,
+ 0x2B, 2686,
+ 0x30, 2696,
+ 0x31, 2706,
+ 0x32, 2716,
+ 0x33, 2726,
+ 0x34, 2736,
+ 0x35, 2746,
+ 0x37, 2756,
+ 0x38, 2766,
+ 0x39, 2776,
+ 0x3A, 2786,
+ 0x3B, 2796,
+ 0x3C, 2806,
+ 0x3D, 2816,
+ 0x3E, 2826,
+ 0x3F, 2836,
+ 0x40, 2846,
+ 0x41, 2856,
+ 0x82, 2866,
+ 0xDB, 2889,
+ 0xDC, 2899,
+ 0xDD, 2909,
+ 0xDE, 2919,
+ 0xDF, 2929,
+ 0xF0, 2939,
+ 0xF1, 3006,
+ uint16(xFail),
+ /*2283*/ uint16(xCondPrefix), 2,
+ 0x66, 2295,
+ 0x0, 2289,
+ /*2289*/ uint16(xSetOp), uint16(PSHUFB),
+ /*2291*/ uint16(xReadSlashR),
+ /*2292*/ uint16(xArgMm1),
+ /*2293*/ uint16(xArgMm2M64),
+ /*2294*/ uint16(xMatch),
+ /*2295*/ uint16(xSetOp), uint16(PSHUFB),
+ /*2297*/ uint16(xReadSlashR),
+ /*2298*/ uint16(xArgXmm1),
+ /*2299*/ uint16(xArgXmm2M128),
+ /*2300*/ uint16(xMatch),
+ /*2301*/ uint16(xCondPrefix), 2,
+ 0x66, 2313,
+ 0x0, 2307,
+ /*2307*/ uint16(xSetOp), uint16(PHADDW),
+ /*2309*/ uint16(xReadSlashR),
+ /*2310*/ uint16(xArgMm1),
+ /*2311*/ uint16(xArgMm2M64),
+ /*2312*/ uint16(xMatch),
+ /*2313*/ uint16(xSetOp), uint16(PHADDW),
+ /*2315*/ uint16(xReadSlashR),
+ /*2316*/ uint16(xArgXmm1),
+ /*2317*/ uint16(xArgXmm2M128),
+ /*2318*/ uint16(xMatch),
+ /*2319*/ uint16(xCondPrefix), 2,
+ 0x66, 2331,
+ 0x0, 2325,
+ /*2325*/ uint16(xSetOp), uint16(PHADDD),
+ /*2327*/ uint16(xReadSlashR),
+ /*2328*/ uint16(xArgMm1),
+ /*2329*/ uint16(xArgMm2M64),
+ /*2330*/ uint16(xMatch),
+ /*2331*/ uint16(xSetOp), uint16(PHADDD),
+ /*2333*/ uint16(xReadSlashR),
+ /*2334*/ uint16(xArgXmm1),
+ /*2335*/ uint16(xArgXmm2M128),
+ /*2336*/ uint16(xMatch),
+ /*2337*/ uint16(xCondPrefix), 2,
+ 0x66, 2349,
+ 0x0, 2343,
+ /*2343*/ uint16(xSetOp), uint16(PHADDSW),
+ /*2345*/ uint16(xReadSlashR),
+ /*2346*/ uint16(xArgMm1),
+ /*2347*/ uint16(xArgMm2M64),
+ /*2348*/ uint16(xMatch),
+ /*2349*/ uint16(xSetOp), uint16(PHADDSW),
+ /*2351*/ uint16(xReadSlashR),
+ /*2352*/ uint16(xArgXmm1),
+ /*2353*/ uint16(xArgXmm2M128),
+ /*2354*/ uint16(xMatch),
+ /*2355*/ uint16(xCondPrefix), 2,
+ 0x66, 2367,
+ 0x0, 2361,
+ /*2361*/ uint16(xSetOp), uint16(PMADDUBSW),
+ /*2363*/ uint16(xReadSlashR),
+ /*2364*/ uint16(xArgMm1),
+ /*2365*/ uint16(xArgMm2M64),
+ /*2366*/ uint16(xMatch),
+ /*2367*/ uint16(xSetOp), uint16(PMADDUBSW),
+ /*2369*/ uint16(xReadSlashR),
+ /*2370*/ uint16(xArgXmm1),
+ /*2371*/ uint16(xArgXmm2M128),
+ /*2372*/ uint16(xMatch),
+ /*2373*/ uint16(xCondPrefix), 2,
+ 0x66, 2385,
+ 0x0, 2379,
+ /*2379*/ uint16(xSetOp), uint16(PHSUBW),
+ /*2381*/ uint16(xReadSlashR),
+ /*2382*/ uint16(xArgMm1),
+ /*2383*/ uint16(xArgMm2M64),
+ /*2384*/ uint16(xMatch),
+ /*2385*/ uint16(xSetOp), uint16(PHSUBW),
+ /*2387*/ uint16(xReadSlashR),
+ /*2388*/ uint16(xArgXmm1),
+ /*2389*/ uint16(xArgXmm2M128),
+ /*2390*/ uint16(xMatch),
+ /*2391*/ uint16(xCondPrefix), 2,
+ 0x66, 2403,
+ 0x0, 2397,
+ /*2397*/ uint16(xSetOp), uint16(PHSUBD),
+ /*2399*/ uint16(xReadSlashR),
+ /*2400*/ uint16(xArgMm1),
+ /*2401*/ uint16(xArgMm2M64),
+ /*2402*/ uint16(xMatch),
+ /*2403*/ uint16(xSetOp), uint16(PHSUBD),
+ /*2405*/ uint16(xReadSlashR),
+ /*2406*/ uint16(xArgXmm1),
+ /*2407*/ uint16(xArgXmm2M128),
+ /*2408*/ uint16(xMatch),
+ /*2409*/ uint16(xCondPrefix), 2,
+ 0x66, 2421,
+ 0x0, 2415,
+ /*2415*/ uint16(xSetOp), uint16(PHSUBSW),
+ /*2417*/ uint16(xReadSlashR),
+ /*2418*/ uint16(xArgMm1),
+ /*2419*/ uint16(xArgMm2M64),
+ /*2420*/ uint16(xMatch),
+ /*2421*/ uint16(xSetOp), uint16(PHSUBSW),
+ /*2423*/ uint16(xReadSlashR),
+ /*2424*/ uint16(xArgXmm1),
+ /*2425*/ uint16(xArgXmm2M128),
+ /*2426*/ uint16(xMatch),
+ /*2427*/ uint16(xCondPrefix), 2,
+ 0x66, 2439,
+ 0x0, 2433,
+ /*2433*/ uint16(xSetOp), uint16(PSIGNB),
+ /*2435*/ uint16(xReadSlashR),
+ /*2436*/ uint16(xArgMm1),
+ /*2437*/ uint16(xArgMm2M64),
+ /*2438*/ uint16(xMatch),
+ /*2439*/ uint16(xSetOp), uint16(PSIGNB),
+ /*2441*/ uint16(xReadSlashR),
+ /*2442*/ uint16(xArgXmm1),
+ /*2443*/ uint16(xArgXmm2M128),
+ /*2444*/ uint16(xMatch),
+ /*2445*/ uint16(xCondPrefix), 2,
+ 0x66, 2457,
+ 0x0, 2451,
+ /*2451*/ uint16(xSetOp), uint16(PSIGNW),
+ /*2453*/ uint16(xReadSlashR),
+ /*2454*/ uint16(xArgMm1),
+ /*2455*/ uint16(xArgMm2M64),
+ /*2456*/ uint16(xMatch),
+ /*2457*/ uint16(xSetOp), uint16(PSIGNW),
+ /*2459*/ uint16(xReadSlashR),
+ /*2460*/ uint16(xArgXmm1),
+ /*2461*/ uint16(xArgXmm2M128),
+ /*2462*/ uint16(xMatch),
+ /*2463*/ uint16(xCondPrefix), 2,
+ 0x66, 2475,
+ 0x0, 2469,
+ /*2469*/ uint16(xSetOp), uint16(PSIGND),
+ /*2471*/ uint16(xReadSlashR),
+ /*2472*/ uint16(xArgMm1),
+ /*2473*/ uint16(xArgMm2M64),
+ /*2474*/ uint16(xMatch),
+ /*2475*/ uint16(xSetOp), uint16(PSIGND),
+ /*2477*/ uint16(xReadSlashR),
+ /*2478*/ uint16(xArgXmm1),
+ /*2479*/ uint16(xArgXmm2M128),
+ /*2480*/ uint16(xMatch),
+ /*2481*/ uint16(xCondPrefix), 2,
+ 0x66, 2493,
+ 0x0, 2487,
+ /*2487*/ uint16(xSetOp), uint16(PMULHRSW),
+ /*2489*/ uint16(xReadSlashR),
+ /*2490*/ uint16(xArgMm1),
+ /*2491*/ uint16(xArgMm2M64),
+ /*2492*/ uint16(xMatch),
+ /*2493*/ uint16(xSetOp), uint16(PMULHRSW),
+ /*2495*/ uint16(xReadSlashR),
+ /*2496*/ uint16(xArgXmm1),
+ /*2497*/ uint16(xArgXmm2M128),
+ /*2498*/ uint16(xMatch),
+ /*2499*/ uint16(xCondPrefix), 1,
+ 0x66, 2503,
+ /*2503*/ uint16(xSetOp), uint16(PBLENDVB),
+ /*2505*/ uint16(xReadSlashR),
+ /*2506*/ uint16(xArgXmm1),
+ /*2507*/ uint16(xArgXmm2M128),
+ /*2508*/ uint16(xArgXMM0),
+ /*2509*/ uint16(xMatch),
+ /*2510*/ uint16(xCondPrefix), 1,
+ 0x66, 2514,
+ /*2514*/ uint16(xSetOp), uint16(BLENDVPS),
+ /*2516*/ uint16(xReadSlashR),
+ /*2517*/ uint16(xArgXmm1),
+ /*2518*/ uint16(xArgXmm2M128),
+ /*2519*/ uint16(xArgXMM0),
+ /*2520*/ uint16(xMatch),
+ /*2521*/ uint16(xCondPrefix), 1,
+ 0x66, 2525,
+ /*2525*/ uint16(xSetOp), uint16(BLENDVPD),
+ /*2527*/ uint16(xReadSlashR),
+ /*2528*/ uint16(xArgXmm1),
+ /*2529*/ uint16(xArgXmm2M128),
+ /*2530*/ uint16(xArgXMM0),
+ /*2531*/ uint16(xMatch),
+ /*2532*/ uint16(xCondPrefix), 1,
+ 0x66, 2536,
+ /*2536*/ uint16(xSetOp), uint16(PTEST),
+ /*2538*/ uint16(xReadSlashR),
+ /*2539*/ uint16(xArgXmm1),
+ /*2540*/ uint16(xArgXmm2M128),
+ /*2541*/ uint16(xMatch),
+ /*2542*/ uint16(xCondPrefix), 2,
+ 0x66, 2554,
+ 0x0, 2548,
+ /*2548*/ uint16(xSetOp), uint16(PABSB),
+ /*2550*/ uint16(xReadSlashR),
+ /*2551*/ uint16(xArgMm1),
+ /*2552*/ uint16(xArgMm2M64),
+ /*2553*/ uint16(xMatch),
+ /*2554*/ uint16(xSetOp), uint16(PABSB),
+ /*2556*/ uint16(xReadSlashR),
+ /*2557*/ uint16(xArgXmm1),
+ /*2558*/ uint16(xArgXmm2M128),
+ /*2559*/ uint16(xMatch),
+ /*2560*/ uint16(xCondPrefix), 2,
+ 0x66, 2572,
+ 0x0, 2566,
+ /*2566*/ uint16(xSetOp), uint16(PABSW),
+ /*2568*/ uint16(xReadSlashR),
+ /*2569*/ uint16(xArgMm1),
+ /*2570*/ uint16(xArgMm2M64),
+ /*2571*/ uint16(xMatch),
+ /*2572*/ uint16(xSetOp), uint16(PABSW),
+ /*2574*/ uint16(xReadSlashR),
+ /*2575*/ uint16(xArgXmm1),
+ /*2576*/ uint16(xArgXmm2M128),
+ /*2577*/ uint16(xMatch),
+ /*2578*/ uint16(xCondPrefix), 2,
+ 0x66, 2590,
+ 0x0, 2584,
+ /*2584*/ uint16(xSetOp), uint16(PABSD),
+ /*2586*/ uint16(xReadSlashR),
+ /*2587*/ uint16(xArgMm1),
+ /*2588*/ uint16(xArgMm2M64),
+ /*2589*/ uint16(xMatch),
+ /*2590*/ uint16(xSetOp), uint16(PABSD),
+ /*2592*/ uint16(xReadSlashR),
+ /*2593*/ uint16(xArgXmm1),
+ /*2594*/ uint16(xArgXmm2M128),
+ /*2595*/ uint16(xMatch),
+ /*2596*/ uint16(xCondPrefix), 1,
+ 0x66, 2600,
+ /*2600*/ uint16(xSetOp), uint16(PMOVSXBW),
+ /*2602*/ uint16(xReadSlashR),
+ /*2603*/ uint16(xArgXmm1),
+ /*2604*/ uint16(xArgXmm2M64),
+ /*2605*/ uint16(xMatch),
+ /*2606*/ uint16(xCondPrefix), 1,
+ 0x66, 2610,
+ /*2610*/ uint16(xSetOp), uint16(PMOVSXBD),
+ /*2612*/ uint16(xReadSlashR),
+ /*2613*/ uint16(xArgXmm1),
+ /*2614*/ uint16(xArgXmm2M32),
+ /*2615*/ uint16(xMatch),
+ /*2616*/ uint16(xCondPrefix), 1,
+ 0x66, 2620,
+ /*2620*/ uint16(xSetOp), uint16(PMOVSXBQ),
+ /*2622*/ uint16(xReadSlashR),
+ /*2623*/ uint16(xArgXmm1),
+ /*2624*/ uint16(xArgXmm2M16),
+ /*2625*/ uint16(xMatch),
+ /*2626*/ uint16(xCondPrefix), 1,
+ 0x66, 2630,
+ /*2630*/ uint16(xSetOp), uint16(PMOVSXWD),
+ /*2632*/ uint16(xReadSlashR),
+ /*2633*/ uint16(xArgXmm1),
+ /*2634*/ uint16(xArgXmm2M64),
+ /*2635*/ uint16(xMatch),
+ /*2636*/ uint16(xCondPrefix), 1,
+ 0x66, 2640,
+ /*2640*/ uint16(xSetOp), uint16(PMOVSXWQ),
+ /*2642*/ uint16(xReadSlashR),
+ /*2643*/ uint16(xArgXmm1),
+ /*2644*/ uint16(xArgXmm2M32),
+ /*2645*/ uint16(xMatch),
+ /*2646*/ uint16(xCondPrefix), 1,
+ 0x66, 2650,
+ /*2650*/ uint16(xSetOp), uint16(PMOVSXDQ),
+ /*2652*/ uint16(xReadSlashR),
+ /*2653*/ uint16(xArgXmm1),
+ /*2654*/ uint16(xArgXmm2M64),
+ /*2655*/ uint16(xMatch),
+ /*2656*/ uint16(xCondPrefix), 1,
+ 0x66, 2660,
+ /*2660*/ uint16(xSetOp), uint16(PMULDQ),
+ /*2662*/ uint16(xReadSlashR),
+ /*2663*/ uint16(xArgXmm1),
+ /*2664*/ uint16(xArgXmm2M128),
+ /*2665*/ uint16(xMatch),
+ /*2666*/ uint16(xCondPrefix), 1,
+ 0x66, 2670,
+ /*2670*/ uint16(xSetOp), uint16(PCMPEQQ),
+ /*2672*/ uint16(xReadSlashR),
+ /*2673*/ uint16(xArgXmm1),
+ /*2674*/ uint16(xArgXmm2M128),
+ /*2675*/ uint16(xMatch),
+ /*2676*/ uint16(xCondPrefix), 1,
+ 0x66, 2680,
+ /*2680*/ uint16(xSetOp), uint16(MOVNTDQA),
+ /*2682*/ uint16(xReadSlashR),
+ /*2683*/ uint16(xArgXmm1),
+ /*2684*/ uint16(xArgM128),
+ /*2685*/ uint16(xMatch),
+ /*2686*/ uint16(xCondPrefix), 1,
+ 0x66, 2690,
+ /*2690*/ uint16(xSetOp), uint16(PACKUSDW),
+ /*2692*/ uint16(xReadSlashR),
+ /*2693*/ uint16(xArgXmm1),
+ /*2694*/ uint16(xArgXmm2M128),
+ /*2695*/ uint16(xMatch),
+ /*2696*/ uint16(xCondPrefix), 1,
+ 0x66, 2700,
+ /*2700*/ uint16(xSetOp), uint16(PMOVZXBW),
+ /*2702*/ uint16(xReadSlashR),
+ /*2703*/ uint16(xArgXmm1),
+ /*2704*/ uint16(xArgXmm2M64),
+ /*2705*/ uint16(xMatch),
+ /*2706*/ uint16(xCondPrefix), 1,
+ 0x66, 2710,
+ /*2710*/ uint16(xSetOp), uint16(PMOVZXBD),
+ /*2712*/ uint16(xReadSlashR),
+ /*2713*/ uint16(xArgXmm1),
+ /*2714*/ uint16(xArgXmm2M32),
+ /*2715*/ uint16(xMatch),
+ /*2716*/ uint16(xCondPrefix), 1,
+ 0x66, 2720,
+ /*2720*/ uint16(xSetOp), uint16(PMOVZXBQ),
+ /*2722*/ uint16(xReadSlashR),
+ /*2723*/ uint16(xArgXmm1),
+ /*2724*/ uint16(xArgXmm2M16),
+ /*2725*/ uint16(xMatch),
+ /*2726*/ uint16(xCondPrefix), 1,
+ 0x66, 2730,
+ /*2730*/ uint16(xSetOp), uint16(PMOVZXWD),
+ /*2732*/ uint16(xReadSlashR),
+ /*2733*/ uint16(xArgXmm1),
+ /*2734*/ uint16(xArgXmm2M64),
+ /*2735*/ uint16(xMatch),
+ /*2736*/ uint16(xCondPrefix), 1,
+ 0x66, 2740,
+ /*2740*/ uint16(xSetOp), uint16(PMOVZXWQ),
+ /*2742*/ uint16(xReadSlashR),
+ /*2743*/ uint16(xArgXmm1),
+ /*2744*/ uint16(xArgXmm2M32),
+ /*2745*/ uint16(xMatch),
+ /*2746*/ uint16(xCondPrefix), 1,
+ 0x66, 2750,
+ /*2750*/ uint16(xSetOp), uint16(PMOVZXDQ),
+ /*2752*/ uint16(xReadSlashR),
+ /*2753*/ uint16(xArgXmm1),
+ /*2754*/ uint16(xArgXmm2M64),
+ /*2755*/ uint16(xMatch),
+ /*2756*/ uint16(xCondPrefix), 1,
+ 0x66, 2760,
+ /*2760*/ uint16(xSetOp), uint16(PCMPGTQ),
+ /*2762*/ uint16(xReadSlashR),
+ /*2763*/ uint16(xArgXmm1),
+ /*2764*/ uint16(xArgXmm2M128),
+ /*2765*/ uint16(xMatch),
+ /*2766*/ uint16(xCondPrefix), 1,
+ 0x66, 2770,
+ /*2770*/ uint16(xSetOp), uint16(PMINSB),
+ /*2772*/ uint16(xReadSlashR),
+ /*2773*/ uint16(xArgXmm1),
+ /*2774*/ uint16(xArgXmm2M128),
+ /*2775*/ uint16(xMatch),
+ /*2776*/ uint16(xCondPrefix), 1,
+ 0x66, 2780,
+ /*2780*/ uint16(xSetOp), uint16(PMINSD),
+ /*2782*/ uint16(xReadSlashR),
+ /*2783*/ uint16(xArgXmm1),
+ /*2784*/ uint16(xArgXmm2M128),
+ /*2785*/ uint16(xMatch),
+ /*2786*/ uint16(xCondPrefix), 1,
+ 0x66, 2790,
+ /*2790*/ uint16(xSetOp), uint16(PMINUW),
+ /*2792*/ uint16(xReadSlashR),
+ /*2793*/ uint16(xArgXmm1),
+ /*2794*/ uint16(xArgXmm2M128),
+ /*2795*/ uint16(xMatch),
+ /*2796*/ uint16(xCondPrefix), 1,
+ 0x66, 2800,
+ /*2800*/ uint16(xSetOp), uint16(PMINUD),
+ /*2802*/ uint16(xReadSlashR),
+ /*2803*/ uint16(xArgXmm1),
+ /*2804*/ uint16(xArgXmm2M128),
+ /*2805*/ uint16(xMatch),
+ /*2806*/ uint16(xCondPrefix), 1,
+ 0x66, 2810,
+ /*2810*/ uint16(xSetOp), uint16(PMAXSB),
+ /*2812*/ uint16(xReadSlashR),
+ /*2813*/ uint16(xArgXmm1),
+ /*2814*/ uint16(xArgXmm2M128),
+ /*2815*/ uint16(xMatch),
+ /*2816*/ uint16(xCondPrefix), 1,
+ 0x66, 2820,
+ /*2820*/ uint16(xSetOp), uint16(PMAXSD),
+ /*2822*/ uint16(xReadSlashR),
+ /*2823*/ uint16(xArgXmm1),
+ /*2824*/ uint16(xArgXmm2M128),
+ /*2825*/ uint16(xMatch),
+ /*2826*/ uint16(xCondPrefix), 1,
+ 0x66, 2830,
+ /*2830*/ uint16(xSetOp), uint16(PMAXUW),
+ /*2832*/ uint16(xReadSlashR),
+ /*2833*/ uint16(xArgXmm1),
+ /*2834*/ uint16(xArgXmm2M128),
+ /*2835*/ uint16(xMatch),
+ /*2836*/ uint16(xCondPrefix), 1,
+ 0x66, 2840,
+ /*2840*/ uint16(xSetOp), uint16(PMAXUD),
+ /*2842*/ uint16(xReadSlashR),
+ /*2843*/ uint16(xArgXmm1),
+ /*2844*/ uint16(xArgXmm2M128),
+ /*2845*/ uint16(xMatch),
+ /*2846*/ uint16(xCondPrefix), 1,
+ 0x66, 2850,
+ /*2850*/ uint16(xSetOp), uint16(PMULLD),
+ /*2852*/ uint16(xReadSlashR),
+ /*2853*/ uint16(xArgXmm1),
+ /*2854*/ uint16(xArgXmm2M128),
+ /*2855*/ uint16(xMatch),
+ /*2856*/ uint16(xCondPrefix), 1,
+ 0x66, 2860,
+ /*2860*/ uint16(xSetOp), uint16(PHMINPOSUW),
+ /*2862*/ uint16(xReadSlashR),
+ /*2863*/ uint16(xArgXmm1),
+ /*2864*/ uint16(xArgXmm2M128),
+ /*2865*/ uint16(xMatch),
+ /*2866*/ uint16(xCondIs64), 2869, 2879,
+ /*2869*/ uint16(xCondPrefix), 1,
+ 0x66, 2873,
+ /*2873*/ uint16(xSetOp), uint16(INVPCID),
+ /*2875*/ uint16(xReadSlashR),
+ /*2876*/ uint16(xArgR32),
+ /*2877*/ uint16(xArgM128),
+ /*2878*/ uint16(xMatch),
+ /*2879*/ uint16(xCondPrefix), 1,
+ 0x66, 2883,
+ /*2883*/ uint16(xSetOp), uint16(INVPCID),
+ /*2885*/ uint16(xReadSlashR),
+ /*2886*/ uint16(xArgR64),
+ /*2887*/ uint16(xArgM128),
+ /*2888*/ uint16(xMatch),
+ /*2889*/ uint16(xCondPrefix), 1,
+ 0x66, 2893,
+ /*2893*/ uint16(xSetOp), uint16(AESIMC),
+ /*2895*/ uint16(xReadSlashR),
+ /*2896*/ uint16(xArgXmm1),
+ /*2897*/ uint16(xArgXmm2M128),
+ /*2898*/ uint16(xMatch),
+ /*2899*/ uint16(xCondPrefix), 1,
+ 0x66, 2903,
+ /*2903*/ uint16(xSetOp), uint16(AESENC),
+ /*2905*/ uint16(xReadSlashR),
+ /*2906*/ uint16(xArgXmm1),
+ /*2907*/ uint16(xArgXmm2M128),
+ /*2908*/ uint16(xMatch),
+ /*2909*/ uint16(xCondPrefix), 1,
+ 0x66, 2913,
+ /*2913*/ uint16(xSetOp), uint16(AESENCLAST),
+ /*2915*/ uint16(xReadSlashR),
+ /*2916*/ uint16(xArgXmm1),
+ /*2917*/ uint16(xArgXmm2M128),
+ /*2918*/ uint16(xMatch),
+ /*2919*/ uint16(xCondPrefix), 1,
+ 0x66, 2923,
+ /*2923*/ uint16(xSetOp), uint16(AESDEC),
+ /*2925*/ uint16(xReadSlashR),
+ /*2926*/ uint16(xArgXmm1),
+ /*2927*/ uint16(xArgXmm2M128),
+ /*2928*/ uint16(xMatch),
+ /*2929*/ uint16(xCondPrefix), 1,
+ 0x66, 2933,
+ /*2933*/ uint16(xSetOp), uint16(AESDECLAST),
+ /*2935*/ uint16(xReadSlashR),
+ /*2936*/ uint16(xArgXmm1),
+ /*2937*/ uint16(xArgXmm2M128),
+ /*2938*/ uint16(xMatch),
+ /*2939*/ uint16(xCondIs64), 2942, 2980,
+ /*2942*/ uint16(xCondPrefix), 2,
+ 0xF2, 2964,
+ 0x0, 2948,
+ /*2948*/ uint16(xCondDataSize), 2952, 2958, 0,
+ /*2952*/ uint16(xSetOp), uint16(MOVBE),
+ /*2954*/ uint16(xReadSlashR),
+ /*2955*/ uint16(xArgR16),
+ /*2956*/ uint16(xArgM16),
+ /*2957*/ uint16(xMatch),
+ /*2958*/ uint16(xSetOp), uint16(MOVBE),
+ /*2960*/ uint16(xReadSlashR),
+ /*2961*/ uint16(xArgR32),
+ /*2962*/ uint16(xArgM32),
+ /*2963*/ uint16(xMatch),
+ /*2964*/ uint16(xCondDataSize), 2968, 2974, 0,
+ /*2968*/ uint16(xSetOp), uint16(CRC32),
+ /*2970*/ uint16(xReadSlashR),
+ /*2971*/ uint16(xArgR32),
+ /*2972*/ uint16(xArgRM8),
+ /*2973*/ uint16(xMatch),
+ /*2974*/ uint16(xSetOp), uint16(CRC32),
+ /*2976*/ uint16(xReadSlashR),
+ /*2977*/ uint16(xArgR32),
+ /*2978*/ uint16(xArgRM8),
+ /*2979*/ uint16(xMatch),
+ /*2980*/ uint16(xCondPrefix), 2,
+ 0xF2, 2996,
+ 0x0, 2986,
+ /*2986*/ uint16(xCondDataSize), 2952, 2958, 2990,
+ /*2990*/ uint16(xSetOp), uint16(MOVBE),
+ /*2992*/ uint16(xReadSlashR),
+ /*2993*/ uint16(xArgR64),
+ /*2994*/ uint16(xArgM64),
+ /*2995*/ uint16(xMatch),
+ /*2996*/ uint16(xCondDataSize), 2968, 2974, 3000,
+ /*3000*/ uint16(xSetOp), uint16(CRC32),
+ /*3002*/ uint16(xReadSlashR),
+ /*3003*/ uint16(xArgR64),
+ /*3004*/ uint16(xArgRM8),
+ /*3005*/ uint16(xMatch),
+ /*3006*/ uint16(xCondIs64), 3009, 3047,
+ /*3009*/ uint16(xCondPrefix), 2,
+ 0xF2, 3031,
+ 0x0, 3015,
+ /*3015*/ uint16(xCondDataSize), 3019, 3025, 0,
+ /*3019*/ uint16(xSetOp), uint16(MOVBE),
+ /*3021*/ uint16(xReadSlashR),
+ /*3022*/ uint16(xArgM16),
+ /*3023*/ uint16(xArgR16),
+ /*3024*/ uint16(xMatch),
+ /*3025*/ uint16(xSetOp), uint16(MOVBE),
+ /*3027*/ uint16(xReadSlashR),
+ /*3028*/ uint16(xArgM32),
+ /*3029*/ uint16(xArgR32),
+ /*3030*/ uint16(xMatch),
+ /*3031*/ uint16(xCondDataSize), 3035, 3041, 0,
+ /*3035*/ uint16(xSetOp), uint16(CRC32),
+ /*3037*/ uint16(xReadSlashR),
+ /*3038*/ uint16(xArgR32),
+ /*3039*/ uint16(xArgRM16),
+ /*3040*/ uint16(xMatch),
+ /*3041*/ uint16(xSetOp), uint16(CRC32),
+ /*3043*/ uint16(xReadSlashR),
+ /*3044*/ uint16(xArgR32),
+ /*3045*/ uint16(xArgRM32),
+ /*3046*/ uint16(xMatch),
+ /*3047*/ uint16(xCondPrefix), 2,
+ 0xF2, 3063,
+ 0x0, 3053,
+ /*3053*/ uint16(xCondDataSize), 3019, 3025, 3057,
+ /*3057*/ uint16(xSetOp), uint16(MOVBE),
+ /*3059*/ uint16(xReadSlashR),
+ /*3060*/ uint16(xArgM64),
+ /*3061*/ uint16(xArgR64),
+ /*3062*/ uint16(xMatch),
+ /*3063*/ uint16(xCondDataSize), 3035, 3041, 3067,
+ /*3067*/ uint16(xSetOp), uint16(CRC32),
+ /*3069*/ uint16(xReadSlashR),
+ /*3070*/ uint16(xArgR64),
+ /*3071*/ uint16(xArgRM64),
+ /*3072*/ uint16(xMatch),
+ /*3073*/ uint16(xCondByte), 24,
+ 0x08, 3124,
+ 0x09, 3136,
+ 0x0A, 3148,
+ 0x0B, 3160,
+ 0x0C, 3172,
+ 0x0D, 3184,
+ 0x0E, 3196,
+ 0x0F, 3208,
+ 0x14, 3230,
+ 0x15, 3242,
+ 0x16, 3254,
+ 0x17, 3297,
+ 0x20, 3309,
+ 0x21, 3321,
+ 0x22, 3333,
+ 0x40, 3376,
+ 0x41, 3388,
+ 0x42, 3400,
+ 0x44, 3412,
+ 0x60, 3424,
+ 0x61, 3436,
+ 0x62, 3448,
+ 0x63, 3460,
+ 0xDF, 3472,
+ uint16(xFail),
+ /*3124*/ uint16(xCondPrefix), 1,
+ 0x66, 3128,
+ /*3128*/ uint16(xSetOp), uint16(ROUNDPS),
+ /*3130*/ uint16(xReadSlashR),
+ /*3131*/ uint16(xReadIb),
+ /*3132*/ uint16(xArgXmm1),
+ /*3133*/ uint16(xArgXmm2M128),
+ /*3134*/ uint16(xArgImm8u),
+ /*3135*/ uint16(xMatch),
+ /*3136*/ uint16(xCondPrefix), 1,
+ 0x66, 3140,
+ /*3140*/ uint16(xSetOp), uint16(ROUNDPD),
+ /*3142*/ uint16(xReadSlashR),
+ /*3143*/ uint16(xReadIb),
+ /*3144*/ uint16(xArgXmm1),
+ /*3145*/ uint16(xArgXmm2M128),
+ /*3146*/ uint16(xArgImm8u),
+ /*3147*/ uint16(xMatch),
+ /*3148*/ uint16(xCondPrefix), 1,
+ 0x66, 3152,
+ /*3152*/ uint16(xSetOp), uint16(ROUNDSS),
+ /*3154*/ uint16(xReadSlashR),
+ /*3155*/ uint16(xReadIb),
+ /*3156*/ uint16(xArgXmm1),
+ /*3157*/ uint16(xArgXmm2M32),
+ /*3158*/ uint16(xArgImm8u),
+ /*3159*/ uint16(xMatch),
+ /*3160*/ uint16(xCondPrefix), 1,
+ 0x66, 3164,
+ /*3164*/ uint16(xSetOp), uint16(ROUNDSD),
+ /*3166*/ uint16(xReadSlashR),
+ /*3167*/ uint16(xReadIb),
+ /*3168*/ uint16(xArgXmm1),
+ /*3169*/ uint16(xArgXmm2M64),
+ /*3170*/ uint16(xArgImm8u),
+ /*3171*/ uint16(xMatch),
+ /*3172*/ uint16(xCondPrefix), 1,
+ 0x66, 3176,
+ /*3176*/ uint16(xSetOp), uint16(BLENDPS),
+ /*3178*/ uint16(xReadSlashR),
+ /*3179*/ uint16(xReadIb),
+ /*3180*/ uint16(xArgXmm1),
+ /*3181*/ uint16(xArgXmm2M128),
+ /*3182*/ uint16(xArgImm8u),
+ /*3183*/ uint16(xMatch),
+ /*3184*/ uint16(xCondPrefix), 1,
+ 0x66, 3188,
+ /*3188*/ uint16(xSetOp), uint16(BLENDPD),
+ /*3190*/ uint16(xReadSlashR),
+ /*3191*/ uint16(xReadIb),
+ /*3192*/ uint16(xArgXmm1),
+ /*3193*/ uint16(xArgXmm2M128),
+ /*3194*/ uint16(xArgImm8u),
+ /*3195*/ uint16(xMatch),
+ /*3196*/ uint16(xCondPrefix), 1,
+ 0x66, 3200,
+ /*3200*/ uint16(xSetOp), uint16(PBLENDW),
+ /*3202*/ uint16(xReadSlashR),
+ /*3203*/ uint16(xReadIb),
+ /*3204*/ uint16(xArgXmm1),
+ /*3205*/ uint16(xArgXmm2M128),
+ /*3206*/ uint16(xArgImm8u),
+ /*3207*/ uint16(xMatch),
+ /*3208*/ uint16(xCondPrefix), 2,
+ 0x66, 3222,
+ 0x0, 3214,
+ /*3214*/ uint16(xSetOp), uint16(PALIGNR),
+ /*3216*/ uint16(xReadSlashR),
+ /*3217*/ uint16(xReadIb),
+ /*3218*/ uint16(xArgMm1),
+ /*3219*/ uint16(xArgMm2M64),
+ /*3220*/ uint16(xArgImm8u),
+ /*3221*/ uint16(xMatch),
+ /*3222*/ uint16(xSetOp), uint16(PALIGNR),
+ /*3224*/ uint16(xReadSlashR),
+ /*3225*/ uint16(xReadIb),
+ /*3226*/ uint16(xArgXmm1),
+ /*3227*/ uint16(xArgXmm2M128),
+ /*3228*/ uint16(xArgImm8u),
+ /*3229*/ uint16(xMatch),
+ /*3230*/ uint16(xCondPrefix), 1,
+ 0x66, 3234,
+ /*3234*/ uint16(xSetOp), uint16(PEXTRB),
+ /*3236*/ uint16(xReadSlashR),
+ /*3237*/ uint16(xReadIb),
+ /*3238*/ uint16(xArgR32M8),
+ /*3239*/ uint16(xArgXmm1),
+ /*3240*/ uint16(xArgImm8u),
+ /*3241*/ uint16(xMatch),
+ /*3242*/ uint16(xCondPrefix), 1,
+ 0x66, 3246,
+ /*3246*/ uint16(xSetOp), uint16(PEXTRW),
+ /*3248*/ uint16(xReadSlashR),
+ /*3249*/ uint16(xReadIb),
+ /*3250*/ uint16(xArgR32M16),
+ /*3251*/ uint16(xArgXmm1),
+ /*3252*/ uint16(xArgImm8u),
+ /*3253*/ uint16(xMatch),
+ /*3254*/ uint16(xCondIs64), 3257, 3281,
+ /*3257*/ uint16(xCondPrefix), 1,
+ 0x66, 3261,
+ /*3261*/ uint16(xCondDataSize), 3265, 3273, 0,
+ /*3265*/ uint16(xSetOp), uint16(PEXTRD),
+ /*3267*/ uint16(xReadSlashR),
+ /*3268*/ uint16(xReadIb),
+ /*3269*/ uint16(xArgRM32),
+ /*3270*/ uint16(xArgXmm1),
+ /*3271*/ uint16(xArgImm8u),
+ /*3272*/ uint16(xMatch),
+ /*3273*/ uint16(xSetOp), uint16(PEXTRD),
+ /*3275*/ uint16(xReadSlashR),
+ /*3276*/ uint16(xReadIb),
+ /*3277*/ uint16(xArgRM32),
+ /*3278*/ uint16(xArgXmm1),
+ /*3279*/ uint16(xArgImm8u),
+ /*3280*/ uint16(xMatch),
+ /*3281*/ uint16(xCondPrefix), 1,
+ 0x66, 3285,
+ /*3285*/ uint16(xCondDataSize), 3265, 3273, 3289,
+ /*3289*/ uint16(xSetOp), uint16(PEXTRQ),
+ /*3291*/ uint16(xReadSlashR),
+ /*3292*/ uint16(xReadIb),
+ /*3293*/ uint16(xArgRM64),
+ /*3294*/ uint16(xArgXmm1),
+ /*3295*/ uint16(xArgImm8u),
+ /*3296*/ uint16(xMatch),
+ /*3297*/ uint16(xCondPrefix), 1,
+ 0x66, 3301,
+ /*3301*/ uint16(xSetOp), uint16(EXTRACTPS),
+ /*3303*/ uint16(xReadSlashR),
+ /*3304*/ uint16(xReadIb),
+ /*3305*/ uint16(xArgRM32),
+ /*3306*/ uint16(xArgXmm1),
+ /*3307*/ uint16(xArgImm8u),
+ /*3308*/ uint16(xMatch),
+ /*3309*/ uint16(xCondPrefix), 1,
+ 0x66, 3313,
+ /*3313*/ uint16(xSetOp), uint16(PINSRB),
+ /*3315*/ uint16(xReadSlashR),
+ /*3316*/ uint16(xReadIb),
+ /*3317*/ uint16(xArgXmm1),
+ /*3318*/ uint16(xArgR32M8),
+ /*3319*/ uint16(xArgImm8u),
+ /*3320*/ uint16(xMatch),
+ /*3321*/ uint16(xCondPrefix), 1,
+ 0x66, 3325,
+ /*3325*/ uint16(xSetOp), uint16(INSERTPS),
+ /*3327*/ uint16(xReadSlashR),
+ /*3328*/ uint16(xReadIb),
+ /*3329*/ uint16(xArgXmm1),
+ /*3330*/ uint16(xArgXmm2M32),
+ /*3331*/ uint16(xArgImm8u),
+ /*3332*/ uint16(xMatch),
+ /*3333*/ uint16(xCondIs64), 3336, 3360,
+ /*3336*/ uint16(xCondPrefix), 1,
+ 0x66, 3340,
+ /*3340*/ uint16(xCondDataSize), 3344, 3352, 0,
+ /*3344*/ uint16(xSetOp), uint16(PINSRD),
+ /*3346*/ uint16(xReadSlashR),
+ /*3347*/ uint16(xReadIb),
+ /*3348*/ uint16(xArgXmm1),
+ /*3349*/ uint16(xArgRM32),
+ /*3350*/ uint16(xArgImm8u),
+ /*3351*/ uint16(xMatch),
+ /*3352*/ uint16(xSetOp), uint16(PINSRD),
+ /*3354*/ uint16(xReadSlashR),
+ /*3355*/ uint16(xReadIb),
+ /*3356*/ uint16(xArgXmm1),
+ /*3357*/ uint16(xArgRM32),
+ /*3358*/ uint16(xArgImm8u),
+ /*3359*/ uint16(xMatch),
+ /*3360*/ uint16(xCondPrefix), 1,
+ 0x66, 3364,
+ /*3364*/ uint16(xCondDataSize), 3344, 3352, 3368,
+ /*3368*/ uint16(xSetOp), uint16(PINSRQ),
+ /*3370*/ uint16(xReadSlashR),
+ /*3371*/ uint16(xReadIb),
+ /*3372*/ uint16(xArgXmm1),
+ /*3373*/ uint16(xArgRM64),
+ /*3374*/ uint16(xArgImm8u),
+ /*3375*/ uint16(xMatch),
+ /*3376*/ uint16(xCondPrefix), 1,
+ 0x66, 3380,
+ /*3380*/ uint16(xSetOp), uint16(DPPS),
+ /*3382*/ uint16(xReadSlashR),
+ /*3383*/ uint16(xReadIb),
+ /*3384*/ uint16(xArgXmm1),
+ /*3385*/ uint16(xArgXmm2M128),
+ /*3386*/ uint16(xArgImm8u),
+ /*3387*/ uint16(xMatch),
+ /*3388*/ uint16(xCondPrefix), 1,
+ 0x66, 3392,
+ /*3392*/ uint16(xSetOp), uint16(DPPD),
+ /*3394*/ uint16(xReadSlashR),
+ /*3395*/ uint16(xReadIb),
+ /*3396*/ uint16(xArgXmm1),
+ /*3397*/ uint16(xArgXmm2M128),
+ /*3398*/ uint16(xArgImm8u),
+ /*3399*/ uint16(xMatch),
+ /*3400*/ uint16(xCondPrefix), 1,
+ 0x66, 3404,
+ /*3404*/ uint16(xSetOp), uint16(MPSADBW),
+ /*3406*/ uint16(xReadSlashR),
+ /*3407*/ uint16(xReadIb),
+ /*3408*/ uint16(xArgXmm1),
+ /*3409*/ uint16(xArgXmm2M128),
+ /*3410*/ uint16(xArgImm8u),
+ /*3411*/ uint16(xMatch),
+ /*3412*/ uint16(xCondPrefix), 1,
+ 0x66, 3416,
+ /*3416*/ uint16(xSetOp), uint16(PCLMULQDQ),
+ /*3418*/ uint16(xReadSlashR),
+ /*3419*/ uint16(xReadIb),
+ /*3420*/ uint16(xArgXmm1),
+ /*3421*/ uint16(xArgXmm2M128),
+ /*3422*/ uint16(xArgImm8u),
+ /*3423*/ uint16(xMatch),
+ /*3424*/ uint16(xCondPrefix), 1,
+ 0x66, 3428,
+ /*3428*/ uint16(xSetOp), uint16(PCMPESTRM),
+ /*3430*/ uint16(xReadSlashR),
+ /*3431*/ uint16(xReadIb),
+ /*3432*/ uint16(xArgXmm1),
+ /*3433*/ uint16(xArgXmm2M128),
+ /*3434*/ uint16(xArgImm8u),
+ /*3435*/ uint16(xMatch),
+ /*3436*/ uint16(xCondPrefix), 1,
+ 0x66, 3440,
+ /*3440*/ uint16(xSetOp), uint16(PCMPESTRI),
+ /*3442*/ uint16(xReadSlashR),
+ /*3443*/ uint16(xReadIb),
+ /*3444*/ uint16(xArgXmm1),
+ /*3445*/ uint16(xArgXmm2M128),
+ /*3446*/ uint16(xArgImm8u),
+ /*3447*/ uint16(xMatch),
+ /*3448*/ uint16(xCondPrefix), 1,
+ 0x66, 3452,
+ /*3452*/ uint16(xSetOp), uint16(PCMPISTRM),
+ /*3454*/ uint16(xReadSlashR),
+ /*3455*/ uint16(xReadIb),
+ /*3456*/ uint16(xArgXmm1),
+ /*3457*/ uint16(xArgXmm2M128),
+ /*3458*/ uint16(xArgImm8u),
+ /*3459*/ uint16(xMatch),
+ /*3460*/ uint16(xCondPrefix), 1,
+ 0x66, 3464,
+ /*3464*/ uint16(xSetOp), uint16(PCMPISTRI),
+ /*3466*/ uint16(xReadSlashR),
+ /*3467*/ uint16(xReadIb),
+ /*3468*/ uint16(xArgXmm1),
+ /*3469*/ uint16(xArgXmm2M128),
+ /*3470*/ uint16(xArgImm8u),
+ /*3471*/ uint16(xMatch),
+ /*3472*/ uint16(xCondPrefix), 1,
+ 0x66, 3476,
+ /*3476*/ uint16(xSetOp), uint16(AESKEYGENASSIST),
+ /*3478*/ uint16(xReadSlashR),
+ /*3479*/ uint16(xReadIb),
+ /*3480*/ uint16(xArgXmm1),
+ /*3481*/ uint16(xArgXmm2M128),
+ /*3482*/ uint16(xArgImm8u),
+ /*3483*/ uint16(xMatch),
+ /*3484*/ uint16(xCondIs64), 3487, 3503,
+ /*3487*/ uint16(xCondDataSize), 3491, 3497, 0,
+ /*3491*/ uint16(xSetOp), uint16(CMOVO),
+ /*3493*/ uint16(xReadSlashR),
+ /*3494*/ uint16(xArgR16),
+ /*3495*/ uint16(xArgRM16),
+ /*3496*/ uint16(xMatch),
+ /*3497*/ uint16(xSetOp), uint16(CMOVO),
+ /*3499*/ uint16(xReadSlashR),
+ /*3500*/ uint16(xArgR32),
+ /*3501*/ uint16(xArgRM32),
+ /*3502*/ uint16(xMatch),
+ /*3503*/ uint16(xCondDataSize), 3491, 3497, 3507,
+ /*3507*/ uint16(xSetOp), uint16(CMOVO),
+ /*3509*/ uint16(xReadSlashR),
+ /*3510*/ uint16(xArgR64),
+ /*3511*/ uint16(xArgRM64),
+ /*3512*/ uint16(xMatch),
+ /*3513*/ uint16(xCondIs64), 3516, 3532,
+ /*3516*/ uint16(xCondDataSize), 3520, 3526, 0,
+ /*3520*/ uint16(xSetOp), uint16(CMOVNO),
+ /*3522*/ uint16(xReadSlashR),
+ /*3523*/ uint16(xArgR16),
+ /*3524*/ uint16(xArgRM16),
+ /*3525*/ uint16(xMatch),
+ /*3526*/ uint16(xSetOp), uint16(CMOVNO),
+ /*3528*/ uint16(xReadSlashR),
+ /*3529*/ uint16(xArgR32),
+ /*3530*/ uint16(xArgRM32),
+ /*3531*/ uint16(xMatch),
+ /*3532*/ uint16(xCondDataSize), 3520, 3526, 3536,
+ /*3536*/ uint16(xSetOp), uint16(CMOVNO),
+ /*3538*/ uint16(xReadSlashR),
+ /*3539*/ uint16(xArgR64),
+ /*3540*/ uint16(xArgRM64),
+ /*3541*/ uint16(xMatch),
+ /*3542*/ uint16(xCondIs64), 3545, 3561,
+ /*3545*/ uint16(xCondDataSize), 3549, 3555, 0,
+ /*3549*/ uint16(xSetOp), uint16(CMOVB),
+ /*3551*/ uint16(xReadSlashR),
+ /*3552*/ uint16(xArgR16),
+ /*3553*/ uint16(xArgRM16),
+ /*3554*/ uint16(xMatch),
+ /*3555*/ uint16(xSetOp), uint16(CMOVB),
+ /*3557*/ uint16(xReadSlashR),
+ /*3558*/ uint16(xArgR32),
+ /*3559*/ uint16(xArgRM32),
+ /*3560*/ uint16(xMatch),
+ /*3561*/ uint16(xCondDataSize), 3549, 3555, 3565,
+ /*3565*/ uint16(xSetOp), uint16(CMOVB),
+ /*3567*/ uint16(xReadSlashR),
+ /*3568*/ uint16(xArgR64),
+ /*3569*/ uint16(xArgRM64),
+ /*3570*/ uint16(xMatch),
+ /*3571*/ uint16(xCondIs64), 3574, 3590,
+ /*3574*/ uint16(xCondDataSize), 3578, 3584, 0,
+ /*3578*/ uint16(xSetOp), uint16(CMOVAE),
+ /*3580*/ uint16(xReadSlashR),
+ /*3581*/ uint16(xArgR16),
+ /*3582*/ uint16(xArgRM16),
+ /*3583*/ uint16(xMatch),
+ /*3584*/ uint16(xSetOp), uint16(CMOVAE),
+ /*3586*/ uint16(xReadSlashR),
+ /*3587*/ uint16(xArgR32),
+ /*3588*/ uint16(xArgRM32),
+ /*3589*/ uint16(xMatch),
+ /*3590*/ uint16(xCondDataSize), 3578, 3584, 3594,
+ /*3594*/ uint16(xSetOp), uint16(CMOVAE),
+ /*3596*/ uint16(xReadSlashR),
+ /*3597*/ uint16(xArgR64),
+ /*3598*/ uint16(xArgRM64),
+ /*3599*/ uint16(xMatch),
+ /*3600*/ uint16(xCondIs64), 3603, 3619,
+ /*3603*/ uint16(xCondDataSize), 3607, 3613, 0,
+ /*3607*/ uint16(xSetOp), uint16(CMOVE),
+ /*3609*/ uint16(xReadSlashR),
+ /*3610*/ uint16(xArgR16),
+ /*3611*/ uint16(xArgRM16),
+ /*3612*/ uint16(xMatch),
+ /*3613*/ uint16(xSetOp), uint16(CMOVE),
+ /*3615*/ uint16(xReadSlashR),
+ /*3616*/ uint16(xArgR32),
+ /*3617*/ uint16(xArgRM32),
+ /*3618*/ uint16(xMatch),
+ /*3619*/ uint16(xCondDataSize), 3607, 3613, 3623,
+ /*3623*/ uint16(xSetOp), uint16(CMOVE),
+ /*3625*/ uint16(xReadSlashR),
+ /*3626*/ uint16(xArgR64),
+ /*3627*/ uint16(xArgRM64),
+ /*3628*/ uint16(xMatch),
+ /*3629*/ uint16(xCondIs64), 3632, 3648,
+ /*3632*/ uint16(xCondDataSize), 3636, 3642, 0,
+ /*3636*/ uint16(xSetOp), uint16(CMOVNE),
+ /*3638*/ uint16(xReadSlashR),
+ /*3639*/ uint16(xArgR16),
+ /*3640*/ uint16(xArgRM16),
+ /*3641*/ uint16(xMatch),
+ /*3642*/ uint16(xSetOp), uint16(CMOVNE),
+ /*3644*/ uint16(xReadSlashR),
+ /*3645*/ uint16(xArgR32),
+ /*3646*/ uint16(xArgRM32),
+ /*3647*/ uint16(xMatch),
+ /*3648*/ uint16(xCondDataSize), 3636, 3642, 3652,
+ /*3652*/ uint16(xSetOp), uint16(CMOVNE),
+ /*3654*/ uint16(xReadSlashR),
+ /*3655*/ uint16(xArgR64),
+ /*3656*/ uint16(xArgRM64),
+ /*3657*/ uint16(xMatch),
+ /*3658*/ uint16(xCondIs64), 3661, 3677,
+ /*3661*/ uint16(xCondDataSize), 3665, 3671, 0,
+ /*3665*/ uint16(xSetOp), uint16(CMOVBE),
+ /*3667*/ uint16(xReadSlashR),
+ /*3668*/ uint16(xArgR16),
+ /*3669*/ uint16(xArgRM16),
+ /*3670*/ uint16(xMatch),
+ /*3671*/ uint16(xSetOp), uint16(CMOVBE),
+ /*3673*/ uint16(xReadSlashR),
+ /*3674*/ uint16(xArgR32),
+ /*3675*/ uint16(xArgRM32),
+ /*3676*/ uint16(xMatch),
+ /*3677*/ uint16(xCondDataSize), 3665, 3671, 3681,
+ /*3681*/ uint16(xSetOp), uint16(CMOVBE),
+ /*3683*/ uint16(xReadSlashR),
+ /*3684*/ uint16(xArgR64),
+ /*3685*/ uint16(xArgRM64),
+ /*3686*/ uint16(xMatch),
+ /*3687*/ uint16(xCondIs64), 3690, 3706,
+ /*3690*/ uint16(xCondDataSize), 3694, 3700, 0,
+ /*3694*/ uint16(xSetOp), uint16(CMOVA),
+ /*3696*/ uint16(xReadSlashR),
+ /*3697*/ uint16(xArgR16),
+ /*3698*/ uint16(xArgRM16),
+ /*3699*/ uint16(xMatch),
+ /*3700*/ uint16(xSetOp), uint16(CMOVA),
+ /*3702*/ uint16(xReadSlashR),
+ /*3703*/ uint16(xArgR32),
+ /*3704*/ uint16(xArgRM32),
+ /*3705*/ uint16(xMatch),
+ /*3706*/ uint16(xCondDataSize), 3694, 3700, 3710,
+ /*3710*/ uint16(xSetOp), uint16(CMOVA),
+ /*3712*/ uint16(xReadSlashR),
+ /*3713*/ uint16(xArgR64),
+ /*3714*/ uint16(xArgRM64),
+ /*3715*/ uint16(xMatch),
+ /*3716*/ uint16(xCondIs64), 3719, 3735,
+ /*3719*/ uint16(xCondDataSize), 3723, 3729, 0,
+ /*3723*/ uint16(xSetOp), uint16(CMOVS),
+ /*3725*/ uint16(xReadSlashR),
+ /*3726*/ uint16(xArgR16),
+ /*3727*/ uint16(xArgRM16),
+ /*3728*/ uint16(xMatch),
+ /*3729*/ uint16(xSetOp), uint16(CMOVS),
+ /*3731*/ uint16(xReadSlashR),
+ /*3732*/ uint16(xArgR32),
+ /*3733*/ uint16(xArgRM32),
+ /*3734*/ uint16(xMatch),
+ /*3735*/ uint16(xCondDataSize), 3723, 3729, 3739,
+ /*3739*/ uint16(xSetOp), uint16(CMOVS),
+ /*3741*/ uint16(xReadSlashR),
+ /*3742*/ uint16(xArgR64),
+ /*3743*/ uint16(xArgRM64),
+ /*3744*/ uint16(xMatch),
+ /*3745*/ uint16(xCondIs64), 3748, 3764,
+ /*3748*/ uint16(xCondDataSize), 3752, 3758, 0,
+ /*3752*/ uint16(xSetOp), uint16(CMOVNS),
+ /*3754*/ uint16(xReadSlashR),
+ /*3755*/ uint16(xArgR16),
+ /*3756*/ uint16(xArgRM16),
+ /*3757*/ uint16(xMatch),
+ /*3758*/ uint16(xSetOp), uint16(CMOVNS),
+ /*3760*/ uint16(xReadSlashR),
+ /*3761*/ uint16(xArgR32),
+ /*3762*/ uint16(xArgRM32),
+ /*3763*/ uint16(xMatch),
+ /*3764*/ uint16(xCondDataSize), 3752, 3758, 3768,
+ /*3768*/ uint16(xSetOp), uint16(CMOVNS),
+ /*3770*/ uint16(xReadSlashR),
+ /*3771*/ uint16(xArgR64),
+ /*3772*/ uint16(xArgRM64),
+ /*3773*/ uint16(xMatch),
+ /*3774*/ uint16(xCondIs64), 3777, 3793,
+ /*3777*/ uint16(xCondDataSize), 3781, 3787, 0,
+ /*3781*/ uint16(xSetOp), uint16(CMOVP),
+ /*3783*/ uint16(xReadSlashR),
+ /*3784*/ uint16(xArgR16),
+ /*3785*/ uint16(xArgRM16),
+ /*3786*/ uint16(xMatch),
+ /*3787*/ uint16(xSetOp), uint16(CMOVP),
+ /*3789*/ uint16(xReadSlashR),
+ /*3790*/ uint16(xArgR32),
+ /*3791*/ uint16(xArgRM32),
+ /*3792*/ uint16(xMatch),
+ /*3793*/ uint16(xCondDataSize), 3781, 3787, 3797,
+ /*3797*/ uint16(xSetOp), uint16(CMOVP),
+ /*3799*/ uint16(xReadSlashR),
+ /*3800*/ uint16(xArgR64),
+ /*3801*/ uint16(xArgRM64),
+ /*3802*/ uint16(xMatch),
+ /*3803*/ uint16(xCondIs64), 3806, 3822,
+ /*3806*/ uint16(xCondDataSize), 3810, 3816, 0,
+ /*3810*/ uint16(xSetOp), uint16(CMOVNP),
+ /*3812*/ uint16(xReadSlashR),
+ /*3813*/ uint16(xArgR16),
+ /*3814*/ uint16(xArgRM16),
+ /*3815*/ uint16(xMatch),
+ /*3816*/ uint16(xSetOp), uint16(CMOVNP),
+ /*3818*/ uint16(xReadSlashR),
+ /*3819*/ uint16(xArgR32),
+ /*3820*/ uint16(xArgRM32),
+ /*3821*/ uint16(xMatch),
+ /*3822*/ uint16(xCondDataSize), 3810, 3816, 3826,
+ /*3826*/ uint16(xSetOp), uint16(CMOVNP),
+ /*3828*/ uint16(xReadSlashR),
+ /*3829*/ uint16(xArgR64),
+ /*3830*/ uint16(xArgRM64),
+ /*3831*/ uint16(xMatch),
+ /*3832*/ uint16(xCondIs64), 3835, 3851,
+ /*3835*/ uint16(xCondDataSize), 3839, 3845, 0,
+ /*3839*/ uint16(xSetOp), uint16(CMOVL),
+ /*3841*/ uint16(xReadSlashR),
+ /*3842*/ uint16(xArgR16),
+ /*3843*/ uint16(xArgRM16),
+ /*3844*/ uint16(xMatch),
+ /*3845*/ uint16(xSetOp), uint16(CMOVL),
+ /*3847*/ uint16(xReadSlashR),
+ /*3848*/ uint16(xArgR32),
+ /*3849*/ uint16(xArgRM32),
+ /*3850*/ uint16(xMatch),
+ /*3851*/ uint16(xCondDataSize), 3839, 3845, 3855,
+ /*3855*/ uint16(xSetOp), uint16(CMOVL),
+ /*3857*/ uint16(xReadSlashR),
+ /*3858*/ uint16(xArgR64),
+ /*3859*/ uint16(xArgRM64),
+ /*3860*/ uint16(xMatch),
+ /*3861*/ uint16(xCondIs64), 3864, 3880,
+ /*3864*/ uint16(xCondDataSize), 3868, 3874, 0,
+ /*3868*/ uint16(xSetOp), uint16(CMOVGE),
+ /*3870*/ uint16(xReadSlashR),
+ /*3871*/ uint16(xArgR16),
+ /*3872*/ uint16(xArgRM16),
+ /*3873*/ uint16(xMatch),
+ /*3874*/ uint16(xSetOp), uint16(CMOVGE),
+ /*3876*/ uint16(xReadSlashR),
+ /*3877*/ uint16(xArgR32),
+ /*3878*/ uint16(xArgRM32),
+ /*3879*/ uint16(xMatch),
+ /*3880*/ uint16(xCondDataSize), 3868, 3874, 3884,
+ /*3884*/ uint16(xSetOp), uint16(CMOVGE),
+ /*3886*/ uint16(xReadSlashR),
+ /*3887*/ uint16(xArgR64),
+ /*3888*/ uint16(xArgRM64),
+ /*3889*/ uint16(xMatch),
+ /*3890*/ uint16(xCondIs64), 3893, 3909,
+ /*3893*/ uint16(xCondDataSize), 3897, 3903, 0,
+ /*3897*/ uint16(xSetOp), uint16(CMOVLE),
+ /*3899*/ uint16(xReadSlashR),
+ /*3900*/ uint16(xArgR16),
+ /*3901*/ uint16(xArgRM16),
+ /*3902*/ uint16(xMatch),
+ /*3903*/ uint16(xSetOp), uint16(CMOVLE),
+ /*3905*/ uint16(xReadSlashR),
+ /*3906*/ uint16(xArgR32),
+ /*3907*/ uint16(xArgRM32),
+ /*3908*/ uint16(xMatch),
+ /*3909*/ uint16(xCondDataSize), 3897, 3903, 3913,
+ /*3913*/ uint16(xSetOp), uint16(CMOVLE),
+ /*3915*/ uint16(xReadSlashR),
+ /*3916*/ uint16(xArgR64),
+ /*3917*/ uint16(xArgRM64),
+ /*3918*/ uint16(xMatch),
+ /*3919*/ uint16(xCondIs64), 3922, 3938,
+ /*3922*/ uint16(xCondDataSize), 3926, 3932, 0,
+ /*3926*/ uint16(xSetOp), uint16(CMOVG),
+ /*3928*/ uint16(xReadSlashR),
+ /*3929*/ uint16(xArgR16),
+ /*3930*/ uint16(xArgRM16),
+ /*3931*/ uint16(xMatch),
+ /*3932*/ uint16(xSetOp), uint16(CMOVG),
+ /*3934*/ uint16(xReadSlashR),
+ /*3935*/ uint16(xArgR32),
+ /*3936*/ uint16(xArgRM32),
+ /*3937*/ uint16(xMatch),
+ /*3938*/ uint16(xCondDataSize), 3926, 3932, 3942,
+ /*3942*/ uint16(xSetOp), uint16(CMOVG),
+ /*3944*/ uint16(xReadSlashR),
+ /*3945*/ uint16(xArgR64),
+ /*3946*/ uint16(xArgRM64),
+ /*3947*/ uint16(xMatch),
+ /*3948*/ uint16(xCondPrefix), 2,
+ 0x66, 3960,
+ 0x0, 3954,
+ /*3954*/ uint16(xSetOp), uint16(MOVMSKPS),
+ /*3956*/ uint16(xReadSlashR),
+ /*3957*/ uint16(xArgR32),
+ /*3958*/ uint16(xArgXmm2),
+ /*3959*/ uint16(xMatch),
+ /*3960*/ uint16(xSetOp), uint16(MOVMSKPD),
+ /*3962*/ uint16(xReadSlashR),
+ /*3963*/ uint16(xArgR32),
+ /*3964*/ uint16(xArgXmm2),
+ /*3965*/ uint16(xMatch),
+ /*3966*/ uint16(xCondPrefix), 4,
+ 0xF3, 3994,
+ 0xF2, 3988,
+ 0x66, 3982,
+ 0x0, 3976,
+ /*3976*/ uint16(xSetOp), uint16(SQRTPS),
+ /*3978*/ uint16(xReadSlashR),
+ /*3979*/ uint16(xArgXmm1),
+ /*3980*/ uint16(xArgXmm2M128),
+ /*3981*/ uint16(xMatch),
+ /*3982*/ uint16(xSetOp), uint16(SQRTPD),
+ /*3984*/ uint16(xReadSlashR),
+ /*3985*/ uint16(xArgXmm1),
+ /*3986*/ uint16(xArgXmm2M128),
+ /*3987*/ uint16(xMatch),
+ /*3988*/ uint16(xSetOp), uint16(SQRTSD),
+ /*3990*/ uint16(xReadSlashR),
+ /*3991*/ uint16(xArgXmm1),
+ /*3992*/ uint16(xArgXmm2M64),
+ /*3993*/ uint16(xMatch),
+ /*3994*/ uint16(xSetOp), uint16(SQRTSS),
+ /*3996*/ uint16(xReadSlashR),
+ /*3997*/ uint16(xArgXmm1),
+ /*3998*/ uint16(xArgXmm2M32),
+ /*3999*/ uint16(xMatch),
+ /*4000*/ uint16(xCondPrefix), 2,
+ 0xF3, 4012,
+ 0x0, 4006,
+ /*4006*/ uint16(xSetOp), uint16(RSQRTPS),
+ /*4008*/ uint16(xReadSlashR),
+ /*4009*/ uint16(xArgXmm1),
+ /*4010*/ uint16(xArgXmm2M128),
+ /*4011*/ uint16(xMatch),
+ /*4012*/ uint16(xSetOp), uint16(RSQRTSS),
+ /*4014*/ uint16(xReadSlashR),
+ /*4015*/ uint16(xArgXmm1),
+ /*4016*/ uint16(xArgXmm2M32),
+ /*4017*/ uint16(xMatch),
+ /*4018*/ uint16(xCondPrefix), 2,
+ 0xF3, 4030,
+ 0x0, 4024,
+ /*4024*/ uint16(xSetOp), uint16(RCPPS),
+ /*4026*/ uint16(xReadSlashR),
+ /*4027*/ uint16(xArgXmm1),
+ /*4028*/ uint16(xArgXmm2M128),
+ /*4029*/ uint16(xMatch),
+ /*4030*/ uint16(xSetOp), uint16(RCPSS),
+ /*4032*/ uint16(xReadSlashR),
+ /*4033*/ uint16(xArgXmm1),
+ /*4034*/ uint16(xArgXmm2M32),
+ /*4035*/ uint16(xMatch),
+ /*4036*/ uint16(xCondPrefix), 2,
+ 0x66, 4048,
+ 0x0, 4042,
+ /*4042*/ uint16(xSetOp), uint16(ANDPS),
+ /*4044*/ uint16(xReadSlashR),
+ /*4045*/ uint16(xArgXmm1),
+ /*4046*/ uint16(xArgXmm2M128),
+ /*4047*/ uint16(xMatch),
+ /*4048*/ uint16(xSetOp), uint16(ANDPD),
+ /*4050*/ uint16(xReadSlashR),
+ /*4051*/ uint16(xArgXmm1),
+ /*4052*/ uint16(xArgXmm2M128),
+ /*4053*/ uint16(xMatch),
+ /*4054*/ uint16(xCondPrefix), 2,
+ 0x66, 4066,
+ 0x0, 4060,
+ /*4060*/ uint16(xSetOp), uint16(ANDNPS),
+ /*4062*/ uint16(xReadSlashR),
+ /*4063*/ uint16(xArgXmm1),
+ /*4064*/ uint16(xArgXmm2M128),
+ /*4065*/ uint16(xMatch),
+ /*4066*/ uint16(xSetOp), uint16(ANDNPD),
+ /*4068*/ uint16(xReadSlashR),
+ /*4069*/ uint16(xArgXmm1),
+ /*4070*/ uint16(xArgXmm2M128),
+ /*4071*/ uint16(xMatch),
+ /*4072*/ uint16(xCondPrefix), 2,
+ 0x66, 4084,
+ 0x0, 4078,
+ /*4078*/ uint16(xSetOp), uint16(ORPS),
+ /*4080*/ uint16(xReadSlashR),
+ /*4081*/ uint16(xArgXmm1),
+ /*4082*/ uint16(xArgXmm2M128),
+ /*4083*/ uint16(xMatch),
+ /*4084*/ uint16(xSetOp), uint16(ORPD),
+ /*4086*/ uint16(xReadSlashR),
+ /*4087*/ uint16(xArgXmm1),
+ /*4088*/ uint16(xArgXmm2M128),
+ /*4089*/ uint16(xMatch),
+ /*4090*/ uint16(xCondPrefix), 2,
+ 0x66, 4102,
+ 0x0, 4096,
+ /*4096*/ uint16(xSetOp), uint16(XORPS),
+ /*4098*/ uint16(xReadSlashR),
+ /*4099*/ uint16(xArgXmm1),
+ /*4100*/ uint16(xArgXmm2M128),
+ /*4101*/ uint16(xMatch),
+ /*4102*/ uint16(xSetOp), uint16(XORPD),
+ /*4104*/ uint16(xReadSlashR),
+ /*4105*/ uint16(xArgXmm1),
+ /*4106*/ uint16(xArgXmm2M128),
+ /*4107*/ uint16(xMatch),
+ /*4108*/ uint16(xCondPrefix), 4,
+ 0xF3, 4136,
+ 0xF2, 4130,
+ 0x66, 4124,
+ 0x0, 4118,
+ /*4118*/ uint16(xSetOp), uint16(ADDPS),
+ /*4120*/ uint16(xReadSlashR),
+ /*4121*/ uint16(xArgXmm1),
+ /*4122*/ uint16(xArgXmm2M128),
+ /*4123*/ uint16(xMatch),
+ /*4124*/ uint16(xSetOp), uint16(ADDPD),
+ /*4126*/ uint16(xReadSlashR),
+ /*4127*/ uint16(xArgXmm1),
+ /*4128*/ uint16(xArgXmm2M128),
+ /*4129*/ uint16(xMatch),
+ /*4130*/ uint16(xSetOp), uint16(ADDSD),
+ /*4132*/ uint16(xReadSlashR),
+ /*4133*/ uint16(xArgXmm1),
+ /*4134*/ uint16(xArgXmm2M64),
+ /*4135*/ uint16(xMatch),
+ /*4136*/ uint16(xSetOp), uint16(ADDSS),
+ /*4138*/ uint16(xReadSlashR),
+ /*4139*/ uint16(xArgXmm1),
+ /*4140*/ uint16(xArgXmm2M32),
+ /*4141*/ uint16(xMatch),
+ /*4142*/ uint16(xCondPrefix), 4,
+ 0xF3, 4170,
+ 0xF2, 4164,
+ 0x66, 4158,
+ 0x0, 4152,
+ /*4152*/ uint16(xSetOp), uint16(MULPS),
+ /*4154*/ uint16(xReadSlashR),
+ /*4155*/ uint16(xArgXmm1),
+ /*4156*/ uint16(xArgXmm2M128),
+ /*4157*/ uint16(xMatch),
+ /*4158*/ uint16(xSetOp), uint16(MULPD),
+ /*4160*/ uint16(xReadSlashR),
+ /*4161*/ uint16(xArgXmm1),
+ /*4162*/ uint16(xArgXmm2M128),
+ /*4163*/ uint16(xMatch),
+ /*4164*/ uint16(xSetOp), uint16(MULSD),
+ /*4166*/ uint16(xReadSlashR),
+ /*4167*/ uint16(xArgXmm1),
+ /*4168*/ uint16(xArgXmm2M64),
+ /*4169*/ uint16(xMatch),
+ /*4170*/ uint16(xSetOp), uint16(MULSS),
+ /*4172*/ uint16(xReadSlashR),
+ /*4173*/ uint16(xArgXmm1),
+ /*4174*/ uint16(xArgXmm2M32),
+ /*4175*/ uint16(xMatch),
+ /*4176*/ uint16(xCondPrefix), 4,
+ 0xF3, 4204,
+ 0xF2, 4198,
+ 0x66, 4192,
+ 0x0, 4186,
+ /*4186*/ uint16(xSetOp), uint16(CVTPS2PD),
+ /*4188*/ uint16(xReadSlashR),
+ /*4189*/ uint16(xArgXmm1),
+ /*4190*/ uint16(xArgXmm2M64),
+ /*4191*/ uint16(xMatch),
+ /*4192*/ uint16(xSetOp), uint16(CVTPD2PS),
+ /*4194*/ uint16(xReadSlashR),
+ /*4195*/ uint16(xArgXmm1),
+ /*4196*/ uint16(xArgXmm2M128),
+ /*4197*/ uint16(xMatch),
+ /*4198*/ uint16(xSetOp), uint16(CVTSD2SS),
+ /*4200*/ uint16(xReadSlashR),
+ /*4201*/ uint16(xArgXmm1),
+ /*4202*/ uint16(xArgXmm2M64),
+ /*4203*/ uint16(xMatch),
+ /*4204*/ uint16(xSetOp), uint16(CVTSS2SD),
+ /*4206*/ uint16(xReadSlashR),
+ /*4207*/ uint16(xArgXmm1),
+ /*4208*/ uint16(xArgXmm2M32),
+ /*4209*/ uint16(xMatch),
+ /*4210*/ uint16(xCondPrefix), 3,
+ 0xF3, 4230,
+ 0x66, 4224,
+ 0x0, 4218,
+ /*4218*/ uint16(xSetOp), uint16(CVTDQ2PS),
+ /*4220*/ uint16(xReadSlashR),
+ /*4221*/ uint16(xArgXmm1),
+ /*4222*/ uint16(xArgXmm2M128),
+ /*4223*/ uint16(xMatch),
+ /*4224*/ uint16(xSetOp), uint16(CVTPS2DQ),
+ /*4226*/ uint16(xReadSlashR),
+ /*4227*/ uint16(xArgXmm1),
+ /*4228*/ uint16(xArgXmm2M128),
+ /*4229*/ uint16(xMatch),
+ /*4230*/ uint16(xSetOp), uint16(CVTTPS2DQ),
+ /*4232*/ uint16(xReadSlashR),
+ /*4233*/ uint16(xArgXmm1),
+ /*4234*/ uint16(xArgXmm2M128),
+ /*4235*/ uint16(xMatch),
+ /*4236*/ uint16(xCondPrefix), 4,
+ 0xF3, 4264,
+ 0xF2, 4258,
+ 0x66, 4252,
+ 0x0, 4246,
+ /*4246*/ uint16(xSetOp), uint16(SUBPS),
+ /*4248*/ uint16(xReadSlashR),
+ /*4249*/ uint16(xArgXmm1),
+ /*4250*/ uint16(xArgXmm2M128),
+ /*4251*/ uint16(xMatch),
+ /*4252*/ uint16(xSetOp), uint16(SUBPD),
+ /*4254*/ uint16(xReadSlashR),
+ /*4255*/ uint16(xArgXmm1),
+ /*4256*/ uint16(xArgXmm2M128),
+ /*4257*/ uint16(xMatch),
+ /*4258*/ uint16(xSetOp), uint16(SUBSD),
+ /*4260*/ uint16(xReadSlashR),
+ /*4261*/ uint16(xArgXmm1),
+ /*4262*/ uint16(xArgXmm2M64),
+ /*4263*/ uint16(xMatch),
+ /*4264*/ uint16(xSetOp), uint16(SUBSS),
+ /*4266*/ uint16(xReadSlashR),
+ /*4267*/ uint16(xArgXmm1),
+ /*4268*/ uint16(xArgXmm2M32),
+ /*4269*/ uint16(xMatch),
+ /*4270*/ uint16(xCondPrefix), 4,
+ 0xF3, 4298,
+ 0xF2, 4292,
+ 0x66, 4286,
+ 0x0, 4280,
+ /*4280*/ uint16(xSetOp), uint16(MINPS),
+ /*4282*/ uint16(xReadSlashR),
+ /*4283*/ uint16(xArgXmm1),
+ /*4284*/ uint16(xArgXmm2M128),
+ /*4285*/ uint16(xMatch),
+ /*4286*/ uint16(xSetOp), uint16(MINPD),
+ /*4288*/ uint16(xReadSlashR),
+ /*4289*/ uint16(xArgXmm1),
+ /*4290*/ uint16(xArgXmm2M128),
+ /*4291*/ uint16(xMatch),
+ /*4292*/ uint16(xSetOp), uint16(MINSD),
+ /*4294*/ uint16(xReadSlashR),
+ /*4295*/ uint16(xArgXmm1),
+ /*4296*/ uint16(xArgXmm2M64),
+ /*4297*/ uint16(xMatch),
+ /*4298*/ uint16(xSetOp), uint16(MINSS),
+ /*4300*/ uint16(xReadSlashR),
+ /*4301*/ uint16(xArgXmm1),
+ /*4302*/ uint16(xArgXmm2M32),
+ /*4303*/ uint16(xMatch),
+ /*4304*/ uint16(xCondPrefix), 4,
+ 0xF3, 4332,
+ 0xF2, 4326,
+ 0x66, 4320,
+ 0x0, 4314,
+ /*4314*/ uint16(xSetOp), uint16(DIVPS),
+ /*4316*/ uint16(xReadSlashR),
+ /*4317*/ uint16(xArgXmm1),
+ /*4318*/ uint16(xArgXmm2M128),
+ /*4319*/ uint16(xMatch),
+ /*4320*/ uint16(xSetOp), uint16(DIVPD),
+ /*4322*/ uint16(xReadSlashR),
+ /*4323*/ uint16(xArgXmm1),
+ /*4324*/ uint16(xArgXmm2M128),
+ /*4325*/ uint16(xMatch),
+ /*4326*/ uint16(xSetOp), uint16(DIVSD),
+ /*4328*/ uint16(xReadSlashR),
+ /*4329*/ uint16(xArgXmm1),
+ /*4330*/ uint16(xArgXmm2M64),
+ /*4331*/ uint16(xMatch),
+ /*4332*/ uint16(xSetOp), uint16(DIVSS),
+ /*4334*/ uint16(xReadSlashR),
+ /*4335*/ uint16(xArgXmm1),
+ /*4336*/ uint16(xArgXmm2M32),
+ /*4337*/ uint16(xMatch),
+ /*4338*/ uint16(xCondPrefix), 4,
+ 0xF3, 4366,
+ 0xF2, 4360,
+ 0x66, 4354,
+ 0x0, 4348,
+ /*4348*/ uint16(xSetOp), uint16(MAXPS),
+ /*4350*/ uint16(xReadSlashR),
+ /*4351*/ uint16(xArgXmm1),
+ /*4352*/ uint16(xArgXmm2M128),
+ /*4353*/ uint16(xMatch),
+ /*4354*/ uint16(xSetOp), uint16(MAXPD),
+ /*4356*/ uint16(xReadSlashR),
+ /*4357*/ uint16(xArgXmm1),
+ /*4358*/ uint16(xArgXmm2M128),
+ /*4359*/ uint16(xMatch),
+ /*4360*/ uint16(xSetOp), uint16(MAXSD),
+ /*4362*/ uint16(xReadSlashR),
+ /*4363*/ uint16(xArgXmm1),
+ /*4364*/ uint16(xArgXmm2M64),
+ /*4365*/ uint16(xMatch),
+ /*4366*/ uint16(xSetOp), uint16(MAXSS),
+ /*4368*/ uint16(xReadSlashR),
+ /*4369*/ uint16(xArgXmm1),
+ /*4370*/ uint16(xArgXmm2M32),
+ /*4371*/ uint16(xMatch),
+ /*4372*/ uint16(xCondPrefix), 2,
+ 0x66, 4384,
+ 0x0, 4378,
+ /*4378*/ uint16(xSetOp), uint16(PUNPCKLBW),
+ /*4380*/ uint16(xReadSlashR),
+ /*4381*/ uint16(xArgMm),
+ /*4382*/ uint16(xArgMmM32),
+ /*4383*/ uint16(xMatch),
+ /*4384*/ uint16(xSetOp), uint16(PUNPCKLBW),
+ /*4386*/ uint16(xReadSlashR),
+ /*4387*/ uint16(xArgXmm1),
+ /*4388*/ uint16(xArgXmm2M128),
+ /*4389*/ uint16(xMatch),
+ /*4390*/ uint16(xCondPrefix), 2,
+ 0x66, 4402,
+ 0x0, 4396,
+ /*4396*/ uint16(xSetOp), uint16(PUNPCKLWD),
+ /*4398*/ uint16(xReadSlashR),
+ /*4399*/ uint16(xArgMm),
+ /*4400*/ uint16(xArgMmM32),
+ /*4401*/ uint16(xMatch),
+ /*4402*/ uint16(xSetOp), uint16(PUNPCKLWD),
+ /*4404*/ uint16(xReadSlashR),
+ /*4405*/ uint16(xArgXmm1),
+ /*4406*/ uint16(xArgXmm2M128),
+ /*4407*/ uint16(xMatch),
+ /*4408*/ uint16(xCondPrefix), 2,
+ 0x66, 4420,
+ 0x0, 4414,
+ /*4414*/ uint16(xSetOp), uint16(PUNPCKLDQ),
+ /*4416*/ uint16(xReadSlashR),
+ /*4417*/ uint16(xArgMm),
+ /*4418*/ uint16(xArgMmM32),
+ /*4419*/ uint16(xMatch),
+ /*4420*/ uint16(xSetOp), uint16(PUNPCKLDQ),
+ /*4422*/ uint16(xReadSlashR),
+ /*4423*/ uint16(xArgXmm1),
+ /*4424*/ uint16(xArgXmm2M128),
+ /*4425*/ uint16(xMatch),
+ /*4426*/ uint16(xCondPrefix), 2,
+ 0x66, 4438,
+ 0x0, 4432,
+ /*4432*/ uint16(xSetOp), uint16(PACKSSWB),
+ /*4434*/ uint16(xReadSlashR),
+ /*4435*/ uint16(xArgMm1),
+ /*4436*/ uint16(xArgMm2M64),
+ /*4437*/ uint16(xMatch),
+ /*4438*/ uint16(xSetOp), uint16(PACKSSWB),
+ /*4440*/ uint16(xReadSlashR),
+ /*4441*/ uint16(xArgXmm1),
+ /*4442*/ uint16(xArgXmm2M128),
+ /*4443*/ uint16(xMatch),
+ /*4444*/ uint16(xCondPrefix), 2,
+ 0x66, 4456,
+ 0x0, 4450,
+ /*4450*/ uint16(xSetOp), uint16(PCMPGTB),
+ /*4452*/ uint16(xReadSlashR),
+ /*4453*/ uint16(xArgMm),
+ /*4454*/ uint16(xArgMmM64),
+ /*4455*/ uint16(xMatch),
+ /*4456*/ uint16(xSetOp), uint16(PCMPGTB),
+ /*4458*/ uint16(xReadSlashR),
+ /*4459*/ uint16(xArgXmm1),
+ /*4460*/ uint16(xArgXmm2M128),
+ /*4461*/ uint16(xMatch),
+ /*4462*/ uint16(xCondPrefix), 2,
+ 0x66, 4474,
+ 0x0, 4468,
+ /*4468*/ uint16(xSetOp), uint16(PCMPGTW),
+ /*4470*/ uint16(xReadSlashR),
+ /*4471*/ uint16(xArgMm),
+ /*4472*/ uint16(xArgMmM64),
+ /*4473*/ uint16(xMatch),
+ /*4474*/ uint16(xSetOp), uint16(PCMPGTW),
+ /*4476*/ uint16(xReadSlashR),
+ /*4477*/ uint16(xArgXmm1),
+ /*4478*/ uint16(xArgXmm2M128),
+ /*4479*/ uint16(xMatch),
+ /*4480*/ uint16(xCondPrefix), 2,
+ 0x66, 4492,
+ 0x0, 4486,
+ /*4486*/ uint16(xSetOp), uint16(PCMPGTD),
+ /*4488*/ uint16(xReadSlashR),
+ /*4489*/ uint16(xArgMm),
+ /*4490*/ uint16(xArgMmM64),
+ /*4491*/ uint16(xMatch),
+ /*4492*/ uint16(xSetOp), uint16(PCMPGTD),
+ /*4494*/ uint16(xReadSlashR),
+ /*4495*/ uint16(xArgXmm1),
+ /*4496*/ uint16(xArgXmm2M128),
+ /*4497*/ uint16(xMatch),
+ /*4498*/ uint16(xCondPrefix), 2,
+ 0x66, 4510,
+ 0x0, 4504,
+ /*4504*/ uint16(xSetOp), uint16(PACKUSWB),
+ /*4506*/ uint16(xReadSlashR),
+ /*4507*/ uint16(xArgMm),
+ /*4508*/ uint16(xArgMmM64),
+ /*4509*/ uint16(xMatch),
+ /*4510*/ uint16(xSetOp), uint16(PACKUSWB),
+ /*4512*/ uint16(xReadSlashR),
+ /*4513*/ uint16(xArgXmm1),
+ /*4514*/ uint16(xArgXmm2M128),
+ /*4515*/ uint16(xMatch),
+ /*4516*/ uint16(xCondPrefix), 2,
+ 0x66, 4528,
+ 0x0, 4522,
+ /*4522*/ uint16(xSetOp), uint16(PUNPCKHBW),
+ /*4524*/ uint16(xReadSlashR),
+ /*4525*/ uint16(xArgMm),
+ /*4526*/ uint16(xArgMmM64),
+ /*4527*/ uint16(xMatch),
+ /*4528*/ uint16(xSetOp), uint16(PUNPCKHBW),
+ /*4530*/ uint16(xReadSlashR),
+ /*4531*/ uint16(xArgXmm1),
+ /*4532*/ uint16(xArgXmm2M128),
+ /*4533*/ uint16(xMatch),
+ /*4534*/ uint16(xCondPrefix), 2,
+ 0x66, 4546,
+ 0x0, 4540,
+ /*4540*/ uint16(xSetOp), uint16(PUNPCKHWD),
+ /*4542*/ uint16(xReadSlashR),
+ /*4543*/ uint16(xArgMm),
+ /*4544*/ uint16(xArgMmM64),
+ /*4545*/ uint16(xMatch),
+ /*4546*/ uint16(xSetOp), uint16(PUNPCKHWD),
+ /*4548*/ uint16(xReadSlashR),
+ /*4549*/ uint16(xArgXmm1),
+ /*4550*/ uint16(xArgXmm2M128),
+ /*4551*/ uint16(xMatch),
+ /*4552*/ uint16(xCondPrefix), 2,
+ 0x66, 4564,
+ 0x0, 4558,
+ /*4558*/ uint16(xSetOp), uint16(PUNPCKHDQ),
+ /*4560*/ uint16(xReadSlashR),
+ /*4561*/ uint16(xArgMm),
+ /*4562*/ uint16(xArgMmM64),
+ /*4563*/ uint16(xMatch),
+ /*4564*/ uint16(xSetOp), uint16(PUNPCKHDQ),
+ /*4566*/ uint16(xReadSlashR),
+ /*4567*/ uint16(xArgXmm1),
+ /*4568*/ uint16(xArgXmm2M128),
+ /*4569*/ uint16(xMatch),
+ /*4570*/ uint16(xCondPrefix), 2,
+ 0x66, 4582,
+ 0x0, 4576,
+ /*4576*/ uint16(xSetOp), uint16(PACKSSDW),
+ /*4578*/ uint16(xReadSlashR),
+ /*4579*/ uint16(xArgMm1),
+ /*4580*/ uint16(xArgMm2M64),
+ /*4581*/ uint16(xMatch),
+ /*4582*/ uint16(xSetOp), uint16(PACKSSDW),
+ /*4584*/ uint16(xReadSlashR),
+ /*4585*/ uint16(xArgXmm1),
+ /*4586*/ uint16(xArgXmm2M128),
+ /*4587*/ uint16(xMatch),
+ /*4588*/ uint16(xCondPrefix), 1,
+ 0x66, 4592,
+ /*4592*/ uint16(xSetOp), uint16(PUNPCKLQDQ),
+ /*4594*/ uint16(xReadSlashR),
+ /*4595*/ uint16(xArgXmm1),
+ /*4596*/ uint16(xArgXmm2M128),
+ /*4597*/ uint16(xMatch),
+ /*4598*/ uint16(xCondPrefix), 1,
+ 0x66, 4602,
+ /*4602*/ uint16(xSetOp), uint16(PUNPCKHQDQ),
+ /*4604*/ uint16(xReadSlashR),
+ /*4605*/ uint16(xArgXmm1),
+ /*4606*/ uint16(xArgXmm2M128),
+ /*4607*/ uint16(xMatch),
+ /*4608*/ uint16(xCondIs64), 4611, 4649,
+ /*4611*/ uint16(xCondPrefix), 2,
+ 0x66, 4633,
+ 0x0, 4617,
+ /*4617*/ uint16(xCondDataSize), 4621, 4627, 0,
+ /*4621*/ uint16(xSetOp), uint16(MOVD),
+ /*4623*/ uint16(xReadSlashR),
+ /*4624*/ uint16(xArgMm),
+ /*4625*/ uint16(xArgRM32),
+ /*4626*/ uint16(xMatch),
+ /*4627*/ uint16(xSetOp), uint16(MOVD),
+ /*4629*/ uint16(xReadSlashR),
+ /*4630*/ uint16(xArgMm),
+ /*4631*/ uint16(xArgRM32),
+ /*4632*/ uint16(xMatch),
+ /*4633*/ uint16(xCondDataSize), 4637, 4643, 0,
+ /*4637*/ uint16(xSetOp), uint16(MOVD),
+ /*4639*/ uint16(xReadSlashR),
+ /*4640*/ uint16(xArgXmm),
+ /*4641*/ uint16(xArgRM32),
+ /*4642*/ uint16(xMatch),
+ /*4643*/ uint16(xSetOp), uint16(MOVD),
+ /*4645*/ uint16(xReadSlashR),
+ /*4646*/ uint16(xArgXmm),
+ /*4647*/ uint16(xArgRM32),
+ /*4648*/ uint16(xMatch),
+ /*4649*/ uint16(xCondPrefix), 2,
+ 0x66, 4665,
+ 0x0, 4655,
+ /*4655*/ uint16(xCondDataSize), 4621, 4627, 4659,
+ /*4659*/ uint16(xSetOp), uint16(MOVQ),
+ /*4661*/ uint16(xReadSlashR),
+ /*4662*/ uint16(xArgMm),
+ /*4663*/ uint16(xArgRM64),
+ /*4664*/ uint16(xMatch),
+ /*4665*/ uint16(xCondDataSize), 4637, 4643, 4669,
+ /*4669*/ uint16(xSetOp), uint16(MOVQ),
+ /*4671*/ uint16(xReadSlashR),
+ /*4672*/ uint16(xArgXmm),
+ /*4673*/ uint16(xArgRM64),
+ /*4674*/ uint16(xMatch),
+ /*4675*/ uint16(xCondPrefix), 3,
+ 0xF3, 4695,
+ 0x66, 4689,
+ 0x0, 4683,
+ /*4683*/ uint16(xSetOp), uint16(MOVQ),
+ /*4685*/ uint16(xReadSlashR),
+ /*4686*/ uint16(xArgMm),
+ /*4687*/ uint16(xArgMmM64),
+ /*4688*/ uint16(xMatch),
+ /*4689*/ uint16(xSetOp), uint16(MOVDQA),
+ /*4691*/ uint16(xReadSlashR),
+ /*4692*/ uint16(xArgXmm1),
+ /*4693*/ uint16(xArgXmm2M128),
+ /*4694*/ uint16(xMatch),
+ /*4695*/ uint16(xSetOp), uint16(MOVDQU),
+ /*4697*/ uint16(xReadSlashR),
+ /*4698*/ uint16(xArgXmm1),
+ /*4699*/ uint16(xArgXmm2M128),
+ /*4700*/ uint16(xMatch),
+ /*4701*/ uint16(xCondPrefix), 4,
+ 0xF3, 4735,
+ 0xF2, 4727,
+ 0x66, 4719,
+ 0x0, 4711,
+ /*4711*/ uint16(xSetOp), uint16(PSHUFW),
+ /*4713*/ uint16(xReadSlashR),
+ /*4714*/ uint16(xReadIb),
+ /*4715*/ uint16(xArgMm1),
+ /*4716*/ uint16(xArgMm2M64),
+ /*4717*/ uint16(xArgImm8u),
+ /*4718*/ uint16(xMatch),
+ /*4719*/ uint16(xSetOp), uint16(PSHUFD),
+ /*4721*/ uint16(xReadSlashR),
+ /*4722*/ uint16(xReadIb),
+ /*4723*/ uint16(xArgXmm1),
+ /*4724*/ uint16(xArgXmm2M128),
+ /*4725*/ uint16(xArgImm8u),
+ /*4726*/ uint16(xMatch),
+ /*4727*/ uint16(xSetOp), uint16(PSHUFLW),
+ /*4729*/ uint16(xReadSlashR),
+ /*4730*/ uint16(xReadIb),
+ /*4731*/ uint16(xArgXmm1),
+ /*4732*/ uint16(xArgXmm2M128),
+ /*4733*/ uint16(xArgImm8u),
+ /*4734*/ uint16(xMatch),
+ /*4735*/ uint16(xSetOp), uint16(PSHUFHW),
+ /*4737*/ uint16(xReadSlashR),
+ /*4738*/ uint16(xReadIb),
+ /*4739*/ uint16(xArgXmm1),
+ /*4740*/ uint16(xArgXmm2M128),
+ /*4741*/ uint16(xArgImm8u),
+ /*4742*/ uint16(xMatch),
+ /*4743*/ uint16(xCondSlashR),
+ 0, // 0
+ 0, // 1
+ 4752, // 2
+ 0, // 3
+ 4770, // 4
+ 0, // 5
+ 4788, // 6
+ 0, // 7
+ /*4752*/ uint16(xCondPrefix), 2,
+ 0x66, 4764,
+ 0x0, 4758,
+ /*4758*/ uint16(xSetOp), uint16(PSRLW),
+ /*4760*/ uint16(xReadIb),
+ /*4761*/ uint16(xArgMm2),
+ /*4762*/ uint16(xArgImm8u),
+ /*4763*/ uint16(xMatch),
+ /*4764*/ uint16(xSetOp), uint16(PSRLW),
+ /*4766*/ uint16(xReadIb),
+ /*4767*/ uint16(xArgXmm2),
+ /*4768*/ uint16(xArgImm8u),
+ /*4769*/ uint16(xMatch),
+ /*4770*/ uint16(xCondPrefix), 2,
+ 0x66, 4782,
+ 0x0, 4776,
+ /*4776*/ uint16(xSetOp), uint16(PSRAW),
+ /*4778*/ uint16(xReadIb),
+ /*4779*/ uint16(xArgMm2),
+ /*4780*/ uint16(xArgImm8u),
+ /*4781*/ uint16(xMatch),
+ /*4782*/ uint16(xSetOp), uint16(PSRAW),
+ /*4784*/ uint16(xReadIb),
+ /*4785*/ uint16(xArgXmm2),
+ /*4786*/ uint16(xArgImm8u),
+ /*4787*/ uint16(xMatch),
+ /*4788*/ uint16(xCondPrefix), 2,
+ 0x66, 4800,
+ 0x0, 4794,
+ /*4794*/ uint16(xSetOp), uint16(PSLLW),
+ /*4796*/ uint16(xReadIb),
+ /*4797*/ uint16(xArgMm2),
+ /*4798*/ uint16(xArgImm8u),
+ /*4799*/ uint16(xMatch),
+ /*4800*/ uint16(xSetOp), uint16(PSLLW),
+ /*4802*/ uint16(xReadIb),
+ /*4803*/ uint16(xArgXmm2),
+ /*4804*/ uint16(xArgImm8u),
+ /*4805*/ uint16(xMatch),
+ /*4806*/ uint16(xCondSlashR),
+ 0, // 0
+ 0, // 1
+ 4815, // 2
+ 0, // 3
+ 4833, // 4
+ 0, // 5
+ 4851, // 6
+ 0, // 7
+ /*4815*/ uint16(xCondPrefix), 2,
+ 0x66, 4827,
+ 0x0, 4821,
+ /*4821*/ uint16(xSetOp), uint16(PSRLD),
+ /*4823*/ uint16(xReadIb),
+ /*4824*/ uint16(xArgMm2),
+ /*4825*/ uint16(xArgImm8u),
+ /*4826*/ uint16(xMatch),
+ /*4827*/ uint16(xSetOp), uint16(PSRLD),
+ /*4829*/ uint16(xReadIb),
+ /*4830*/ uint16(xArgXmm2),
+ /*4831*/ uint16(xArgImm8u),
+ /*4832*/ uint16(xMatch),
+ /*4833*/ uint16(xCondPrefix), 2,
+ 0x66, 4845,
+ 0x0, 4839,
+ /*4839*/ uint16(xSetOp), uint16(PSRAD),
+ /*4841*/ uint16(xReadIb),
+ /*4842*/ uint16(xArgMm2),
+ /*4843*/ uint16(xArgImm8u),
+ /*4844*/ uint16(xMatch),
+ /*4845*/ uint16(xSetOp), uint16(PSRAD),
+ /*4847*/ uint16(xReadIb),
+ /*4848*/ uint16(xArgXmm2),
+ /*4849*/ uint16(xArgImm8u),
+ /*4850*/ uint16(xMatch),
+ /*4851*/ uint16(xCondPrefix), 2,
+ 0x66, 4863,
+ 0x0, 4857,
+ /*4857*/ uint16(xSetOp), uint16(PSLLD),
+ /*4859*/ uint16(xReadIb),
+ /*4860*/ uint16(xArgMm2),
+ /*4861*/ uint16(xArgImm8u),
+ /*4862*/ uint16(xMatch),
+ /*4863*/ uint16(xSetOp), uint16(PSLLD),
+ /*4865*/ uint16(xReadIb),
+ /*4866*/ uint16(xArgXmm2),
+ /*4867*/ uint16(xArgImm8u),
+ /*4868*/ uint16(xMatch),
+ /*4869*/ uint16(xCondSlashR),
+ 0, // 0
+ 0, // 1
+ 4878, // 2
+ 4896, // 3
+ 0, // 4
+ 0, // 5
+ 4906, // 6
+ 4924, // 7
+ /*4878*/ uint16(xCondPrefix), 2,
+ 0x66, 4890,
+ 0x0, 4884,
+ /*4884*/ uint16(xSetOp), uint16(PSRLQ),
+ /*4886*/ uint16(xReadIb),
+ /*4887*/ uint16(xArgMm2),
+ /*4888*/ uint16(xArgImm8u),
+ /*4889*/ uint16(xMatch),
+ /*4890*/ uint16(xSetOp), uint16(PSRLQ),
+ /*4892*/ uint16(xReadIb),
+ /*4893*/ uint16(xArgXmm2),
+ /*4894*/ uint16(xArgImm8u),
+ /*4895*/ uint16(xMatch),
+ /*4896*/ uint16(xCondPrefix), 1,
+ 0x66, 4900,
+ /*4900*/ uint16(xSetOp), uint16(PSRLDQ),
+ /*4902*/ uint16(xReadIb),
+ /*4903*/ uint16(xArgXmm2),
+ /*4904*/ uint16(xArgImm8u),
+ /*4905*/ uint16(xMatch),
+ /*4906*/ uint16(xCondPrefix), 2,
+ 0x66, 4918,
+ 0x0, 4912,
+ /*4912*/ uint16(xSetOp), uint16(PSLLQ),
+ /*4914*/ uint16(xReadIb),
+ /*4915*/ uint16(xArgMm2),
+ /*4916*/ uint16(xArgImm8u),
+ /*4917*/ uint16(xMatch),
+ /*4918*/ uint16(xSetOp), uint16(PSLLQ),
+ /*4920*/ uint16(xReadIb),
+ /*4921*/ uint16(xArgXmm2),
+ /*4922*/ uint16(xArgImm8u),
+ /*4923*/ uint16(xMatch),
+ /*4924*/ uint16(xCondPrefix), 1,
+ 0x66, 4928,
+ /*4928*/ uint16(xSetOp), uint16(PSLLDQ),
+ /*4930*/ uint16(xReadIb),
+ /*4931*/ uint16(xArgXmm2),
+ /*4932*/ uint16(xArgImm8u),
+ /*4933*/ uint16(xMatch),
+ /*4934*/ uint16(xCondPrefix), 2,
+ 0x66, 4946,
+ 0x0, 4940,
+ /*4940*/ uint16(xSetOp), uint16(PCMPEQB),
+ /*4942*/ uint16(xReadSlashR),
+ /*4943*/ uint16(xArgMm),
+ /*4944*/ uint16(xArgMmM64),
+ /*4945*/ uint16(xMatch),
+ /*4946*/ uint16(xSetOp), uint16(PCMPEQB),
+ /*4948*/ uint16(xReadSlashR),
+ /*4949*/ uint16(xArgXmm1),
+ /*4950*/ uint16(xArgXmm2M128),
+ /*4951*/ uint16(xMatch),
+ /*4952*/ uint16(xCondPrefix), 2,
+ 0x66, 4964,
+ 0x0, 4958,
+ /*4958*/ uint16(xSetOp), uint16(PCMPEQW),
+ /*4960*/ uint16(xReadSlashR),
+ /*4961*/ uint16(xArgMm),
+ /*4962*/ uint16(xArgMmM64),
+ /*4963*/ uint16(xMatch),
+ /*4964*/ uint16(xSetOp), uint16(PCMPEQW),
+ /*4966*/ uint16(xReadSlashR),
+ /*4967*/ uint16(xArgXmm1),
+ /*4968*/ uint16(xArgXmm2M128),
+ /*4969*/ uint16(xMatch),
+ /*4970*/ uint16(xCondPrefix), 2,
+ 0x66, 4982,
+ 0x0, 4976,
+ /*4976*/ uint16(xSetOp), uint16(PCMPEQD),
+ /*4978*/ uint16(xReadSlashR),
+ /*4979*/ uint16(xArgMm),
+ /*4980*/ uint16(xArgMmM64),
+ /*4981*/ uint16(xMatch),
+ /*4982*/ uint16(xSetOp), uint16(PCMPEQD),
+ /*4984*/ uint16(xReadSlashR),
+ /*4985*/ uint16(xArgXmm1),
+ /*4986*/ uint16(xArgXmm2M128),
+ /*4987*/ uint16(xMatch),
+ /*4988*/ uint16(xSetOp), uint16(EMMS),
+ /*4990*/ uint16(xMatch),
+ /*4991*/ uint16(xCondPrefix), 2,
+ 0xF2, 5003,
+ 0x66, 4997,
+ /*4997*/ uint16(xSetOp), uint16(HADDPD),
+ /*4999*/ uint16(xReadSlashR),
+ /*5000*/ uint16(xArgXmm1),
+ /*5001*/ uint16(xArgXmm2M128),
+ /*5002*/ uint16(xMatch),
+ /*5003*/ uint16(xSetOp), uint16(HADDPS),
+ /*5005*/ uint16(xReadSlashR),
+ /*5006*/ uint16(xArgXmm1),
+ /*5007*/ uint16(xArgXmm2M128),
+ /*5008*/ uint16(xMatch),
+ /*5009*/ uint16(xCondPrefix), 2,
+ 0xF2, 5021,
+ 0x66, 5015,
+ /*5015*/ uint16(xSetOp), uint16(HSUBPD),
+ /*5017*/ uint16(xReadSlashR),
+ /*5018*/ uint16(xArgXmm1),
+ /*5019*/ uint16(xArgXmm2M128),
+ /*5020*/ uint16(xMatch),
+ /*5021*/ uint16(xSetOp), uint16(HSUBPS),
+ /*5023*/ uint16(xReadSlashR),
+ /*5024*/ uint16(xArgXmm1),
+ /*5025*/ uint16(xArgXmm2M128),
+ /*5026*/ uint16(xMatch),
+ /*5027*/ uint16(xCondIs64), 5030, 5076,
+ /*5030*/ uint16(xCondPrefix), 3,
+ 0xF3, 5070,
+ 0x66, 5054,
+ 0x0, 5038,
+ /*5038*/ uint16(xCondDataSize), 5042, 5048, 0,
+ /*5042*/ uint16(xSetOp), uint16(MOVD),
+ /*5044*/ uint16(xReadSlashR),
+ /*5045*/ uint16(xArgRM32),
+ /*5046*/ uint16(xArgMm),
+ /*5047*/ uint16(xMatch),
+ /*5048*/ uint16(xSetOp), uint16(MOVD),
+ /*5050*/ uint16(xReadSlashR),
+ /*5051*/ uint16(xArgRM32),
+ /*5052*/ uint16(xArgMm),
+ /*5053*/ uint16(xMatch),
+ /*5054*/ uint16(xCondDataSize), 5058, 5064, 0,
+ /*5058*/ uint16(xSetOp), uint16(MOVD),
+ /*5060*/ uint16(xReadSlashR),
+ /*5061*/ uint16(xArgRM32),
+ /*5062*/ uint16(xArgXmm),
+ /*5063*/ uint16(xMatch),
+ /*5064*/ uint16(xSetOp), uint16(MOVD),
+ /*5066*/ uint16(xReadSlashR),
+ /*5067*/ uint16(xArgRM32),
+ /*5068*/ uint16(xArgXmm),
+ /*5069*/ uint16(xMatch),
+ /*5070*/ uint16(xSetOp), uint16(MOVQ),
+ /*5072*/ uint16(xReadSlashR),
+ /*5073*/ uint16(xArgXmm1),
+ /*5074*/ uint16(xArgXmm2M64),
+ /*5075*/ uint16(xMatch),
+ /*5076*/ uint16(xCondPrefix), 3,
+ 0xF3, 5070,
+ 0x66, 5094,
+ 0x0, 5084,
+ /*5084*/ uint16(xCondDataSize), 5042, 5048, 5088,
+ /*5088*/ uint16(xSetOp), uint16(MOVQ),
+ /*5090*/ uint16(xReadSlashR),
+ /*5091*/ uint16(xArgRM64),
+ /*5092*/ uint16(xArgMm),
+ /*5093*/ uint16(xMatch),
+ /*5094*/ uint16(xCondDataSize), 5058, 5064, 5098,
+ /*5098*/ uint16(xSetOp), uint16(MOVQ),
+ /*5100*/ uint16(xReadSlashR),
+ /*5101*/ uint16(xArgRM64),
+ /*5102*/ uint16(xArgXmm),
+ /*5103*/ uint16(xMatch),
+ /*5104*/ uint16(xCondPrefix), 3,
+ 0xF3, 5124,
+ 0x66, 5118,
+ 0x0, 5112,
+ /*5112*/ uint16(xSetOp), uint16(MOVQ),
+ /*5114*/ uint16(xReadSlashR),
+ /*5115*/ uint16(xArgMmM64),
+ /*5116*/ uint16(xArgMm),
+ /*5117*/ uint16(xMatch),
+ /*5118*/ uint16(xSetOp), uint16(MOVDQA),
+ /*5120*/ uint16(xReadSlashR),
+ /*5121*/ uint16(xArgXmm2M128),
+ /*5122*/ uint16(xArgXmm1),
+ /*5123*/ uint16(xMatch),
+ /*5124*/ uint16(xSetOp), uint16(MOVDQU),
+ /*5126*/ uint16(xReadSlashR),
+ /*5127*/ uint16(xArgXmm2M128),
+ /*5128*/ uint16(xArgXmm1),
+ /*5129*/ uint16(xMatch),
+ /*5130*/ uint16(xCondIs64), 5133, 5147,
+ /*5133*/ uint16(xCondDataSize), 5137, 5142, 0,
+ /*5137*/ uint16(xSetOp), uint16(JO),
+ /*5139*/ uint16(xReadCw),
+ /*5140*/ uint16(xArgRel16),
+ /*5141*/ uint16(xMatch),
+ /*5142*/ uint16(xSetOp), uint16(JO),
+ /*5144*/ uint16(xReadCd),
+ /*5145*/ uint16(xArgRel32),
+ /*5146*/ uint16(xMatch),
+ /*5147*/ uint16(xCondDataSize), 5151, 5142, 5156,
+ /*5151*/ uint16(xSetOp), uint16(JO),
+ /*5153*/ uint16(xReadCd),
+ /*5154*/ uint16(xArgRel32),
+ /*5155*/ uint16(xMatch),
+ /*5156*/ uint16(xSetOp), uint16(JO),
+ /*5158*/ uint16(xReadCd),
+ /*5159*/ uint16(xArgRel32),
+ /*5160*/ uint16(xMatch),
+ /*5161*/ uint16(xCondIs64), 5164, 5178,
+ /*5164*/ uint16(xCondDataSize), 5168, 5173, 0,
+ /*5168*/ uint16(xSetOp), uint16(JNO),
+ /*5170*/ uint16(xReadCw),
+ /*5171*/ uint16(xArgRel16),
+ /*5172*/ uint16(xMatch),
+ /*5173*/ uint16(xSetOp), uint16(JNO),
+ /*5175*/ uint16(xReadCd),
+ /*5176*/ uint16(xArgRel32),
+ /*5177*/ uint16(xMatch),
+ /*5178*/ uint16(xCondDataSize), 5182, 5173, 5187,
+ /*5182*/ uint16(xSetOp), uint16(JNO),
+ /*5184*/ uint16(xReadCd),
+ /*5185*/ uint16(xArgRel32),
+ /*5186*/ uint16(xMatch),
+ /*5187*/ uint16(xSetOp), uint16(JNO),
+ /*5189*/ uint16(xReadCd),
+ /*5190*/ uint16(xArgRel32),
+ /*5191*/ uint16(xMatch),
+ /*5192*/ uint16(xCondIs64), 5195, 5209,
+ /*5195*/ uint16(xCondDataSize), 5199, 5204, 0,
+ /*5199*/ uint16(xSetOp), uint16(JB),
+ /*5201*/ uint16(xReadCw),
+ /*5202*/ uint16(xArgRel16),
+ /*5203*/ uint16(xMatch),
+ /*5204*/ uint16(xSetOp), uint16(JB),
+ /*5206*/ uint16(xReadCd),
+ /*5207*/ uint16(xArgRel32),
+ /*5208*/ uint16(xMatch),
+ /*5209*/ uint16(xCondDataSize), 5213, 5204, 5218,
+ /*5213*/ uint16(xSetOp), uint16(JB),
+ /*5215*/ uint16(xReadCd),
+ /*5216*/ uint16(xArgRel32),
+ /*5217*/ uint16(xMatch),
+ /*5218*/ uint16(xSetOp), uint16(JB),
+ /*5220*/ uint16(xReadCd),
+ /*5221*/ uint16(xArgRel32),
+ /*5222*/ uint16(xMatch),
+ /*5223*/ uint16(xCondIs64), 5226, 5240,
+ /*5226*/ uint16(xCondDataSize), 5230, 5235, 0,
+ /*5230*/ uint16(xSetOp), uint16(JAE),
+ /*5232*/ uint16(xReadCw),
+ /*5233*/ uint16(xArgRel16),
+ /*5234*/ uint16(xMatch),
+ /*5235*/ uint16(xSetOp), uint16(JAE),
+ /*5237*/ uint16(xReadCd),
+ /*5238*/ uint16(xArgRel32),
+ /*5239*/ uint16(xMatch),
+ /*5240*/ uint16(xCondDataSize), 5244, 5235, 5249,
+ /*5244*/ uint16(xSetOp), uint16(JAE),
+ /*5246*/ uint16(xReadCd),
+ /*5247*/ uint16(xArgRel32),
+ /*5248*/ uint16(xMatch),
+ /*5249*/ uint16(xSetOp), uint16(JAE),
+ /*5251*/ uint16(xReadCd),
+ /*5252*/ uint16(xArgRel32),
+ /*5253*/ uint16(xMatch),
+ /*5254*/ uint16(xCondIs64), 5257, 5271,
+ /*5257*/ uint16(xCondDataSize), 5261, 5266, 0,
+ /*5261*/ uint16(xSetOp), uint16(JE),
+ /*5263*/ uint16(xReadCw),
+ /*5264*/ uint16(xArgRel16),
+ /*5265*/ uint16(xMatch),
+ /*5266*/ uint16(xSetOp), uint16(JE),
+ /*5268*/ uint16(xReadCd),
+ /*5269*/ uint16(xArgRel32),
+ /*5270*/ uint16(xMatch),
+ /*5271*/ uint16(xCondDataSize), 5275, 5266, 5280,
+ /*5275*/ uint16(xSetOp), uint16(JE),
+ /*5277*/ uint16(xReadCd),
+ /*5278*/ uint16(xArgRel32),
+ /*5279*/ uint16(xMatch),
+ /*5280*/ uint16(xSetOp), uint16(JE),
+ /*5282*/ uint16(xReadCd),
+ /*5283*/ uint16(xArgRel32),
+ /*5284*/ uint16(xMatch),
+ /*5285*/ uint16(xCondIs64), 5288, 5302,
+ /*5288*/ uint16(xCondDataSize), 5292, 5297, 0,
+ /*5292*/ uint16(xSetOp), uint16(JNE),
+ /*5294*/ uint16(xReadCw),
+ /*5295*/ uint16(xArgRel16),
+ /*5296*/ uint16(xMatch),
+ /*5297*/ uint16(xSetOp), uint16(JNE),
+ /*5299*/ uint16(xReadCd),
+ /*5300*/ uint16(xArgRel32),
+ /*5301*/ uint16(xMatch),
+ /*5302*/ uint16(xCondDataSize), 5306, 5297, 5311,
+ /*5306*/ uint16(xSetOp), uint16(JNE),
+ /*5308*/ uint16(xReadCd),
+ /*5309*/ uint16(xArgRel32),
+ /*5310*/ uint16(xMatch),
+ /*5311*/ uint16(xSetOp), uint16(JNE),
+ /*5313*/ uint16(xReadCd),
+ /*5314*/ uint16(xArgRel32),
+ /*5315*/ uint16(xMatch),
+ /*5316*/ uint16(xCondIs64), 5319, 5333,
+ /*5319*/ uint16(xCondDataSize), 5323, 5328, 0,
+ /*5323*/ uint16(xSetOp), uint16(JBE),
+ /*5325*/ uint16(xReadCw),
+ /*5326*/ uint16(xArgRel16),
+ /*5327*/ uint16(xMatch),
+ /*5328*/ uint16(xSetOp), uint16(JBE),
+ /*5330*/ uint16(xReadCd),
+ /*5331*/ uint16(xArgRel32),
+ /*5332*/ uint16(xMatch),
+ /*5333*/ uint16(xCondDataSize), 5337, 5328, 5342,
+ /*5337*/ uint16(xSetOp), uint16(JBE),
+ /*5339*/ uint16(xReadCd),
+ /*5340*/ uint16(xArgRel32),
+ /*5341*/ uint16(xMatch),
+ /*5342*/ uint16(xSetOp), uint16(JBE),
+ /*5344*/ uint16(xReadCd),
+ /*5345*/ uint16(xArgRel32),
+ /*5346*/ uint16(xMatch),
+ /*5347*/ uint16(xCondIs64), 5350, 5364,
+ /*5350*/ uint16(xCondDataSize), 5354, 5359, 0,
+ /*5354*/ uint16(xSetOp), uint16(JA),
+ /*5356*/ uint16(xReadCw),
+ /*5357*/ uint16(xArgRel16),
+ /*5358*/ uint16(xMatch),
+ /*5359*/ uint16(xSetOp), uint16(JA),
+ /*5361*/ uint16(xReadCd),
+ /*5362*/ uint16(xArgRel32),
+ /*5363*/ uint16(xMatch),
+ /*5364*/ uint16(xCondDataSize), 5368, 5359, 5373,
+ /*5368*/ uint16(xSetOp), uint16(JA),
+ /*5370*/ uint16(xReadCd),
+ /*5371*/ uint16(xArgRel32),
+ /*5372*/ uint16(xMatch),
+ /*5373*/ uint16(xSetOp), uint16(JA),
+ /*5375*/ uint16(xReadCd),
+ /*5376*/ uint16(xArgRel32),
+ /*5377*/ uint16(xMatch),
+ /*5378*/ uint16(xCondIs64), 5381, 5395,
+ /*5381*/ uint16(xCondDataSize), 5385, 5390, 0,
+ /*5385*/ uint16(xSetOp), uint16(JS),
+ /*5387*/ uint16(xReadCw),
+ /*5388*/ uint16(xArgRel16),
+ /*5389*/ uint16(xMatch),
+ /*5390*/ uint16(xSetOp), uint16(JS),
+ /*5392*/ uint16(xReadCd),
+ /*5393*/ uint16(xArgRel32),
+ /*5394*/ uint16(xMatch),
+ /*5395*/ uint16(xCondDataSize), 5399, 5390, 5404,
+ /*5399*/ uint16(xSetOp), uint16(JS),
+ /*5401*/ uint16(xReadCd),
+ /*5402*/ uint16(xArgRel32),
+ /*5403*/ uint16(xMatch),
+ /*5404*/ uint16(xSetOp), uint16(JS),
+ /*5406*/ uint16(xReadCd),
+ /*5407*/ uint16(xArgRel32),
+ /*5408*/ uint16(xMatch),
+ /*5409*/ uint16(xCondIs64), 5412, 5426,
+ /*5412*/ uint16(xCondDataSize), 5416, 5421, 0,
+ /*5416*/ uint16(xSetOp), uint16(JNS),
+ /*5418*/ uint16(xReadCw),
+ /*5419*/ uint16(xArgRel16),
+ /*5420*/ uint16(xMatch),
+ /*5421*/ uint16(xSetOp), uint16(JNS),
+ /*5423*/ uint16(xReadCd),
+ /*5424*/ uint16(xArgRel32),
+ /*5425*/ uint16(xMatch),
+ /*5426*/ uint16(xCondDataSize), 5430, 5421, 5435,
+ /*5430*/ uint16(xSetOp), uint16(JNS),
+ /*5432*/ uint16(xReadCd),
+ /*5433*/ uint16(xArgRel32),
+ /*5434*/ uint16(xMatch),
+ /*5435*/ uint16(xSetOp), uint16(JNS),
+ /*5437*/ uint16(xReadCd),
+ /*5438*/ uint16(xArgRel32),
+ /*5439*/ uint16(xMatch),
+ /*5440*/ uint16(xCondIs64), 5443, 5457,
+ /*5443*/ uint16(xCondDataSize), 5447, 5452, 0,
+ /*5447*/ uint16(xSetOp), uint16(JP),
+ /*5449*/ uint16(xReadCw),
+ /*5450*/ uint16(xArgRel16),
+ /*5451*/ uint16(xMatch),
+ /*5452*/ uint16(xSetOp), uint16(JP),
+ /*5454*/ uint16(xReadCd),
+ /*5455*/ uint16(xArgRel32),
+ /*5456*/ uint16(xMatch),
+ /*5457*/ uint16(xCondDataSize), 5461, 5452, 5466,
+ /*5461*/ uint16(xSetOp), uint16(JP),
+ /*5463*/ uint16(xReadCd),
+ /*5464*/ uint16(xArgRel32),
+ /*5465*/ uint16(xMatch),
+ /*5466*/ uint16(xSetOp), uint16(JP),
+ /*5468*/ uint16(xReadCd),
+ /*5469*/ uint16(xArgRel32),
+ /*5470*/ uint16(xMatch),
+ /*5471*/ uint16(xCondIs64), 5474, 5488,
+ /*5474*/ uint16(xCondDataSize), 5478, 5483, 0,
+ /*5478*/ uint16(xSetOp), uint16(JNP),
+ /*5480*/ uint16(xReadCw),
+ /*5481*/ uint16(xArgRel16),
+ /*5482*/ uint16(xMatch),
+ /*5483*/ uint16(xSetOp), uint16(JNP),
+ /*5485*/ uint16(xReadCd),
+ /*5486*/ uint16(xArgRel32),
+ /*5487*/ uint16(xMatch),
+ /*5488*/ uint16(xCondDataSize), 5492, 5483, 5497,
+ /*5492*/ uint16(xSetOp), uint16(JNP),
+ /*5494*/ uint16(xReadCd),
+ /*5495*/ uint16(xArgRel32),
+ /*5496*/ uint16(xMatch),
+ /*5497*/ uint16(xSetOp), uint16(JNP),
+ /*5499*/ uint16(xReadCd),
+ /*5500*/ uint16(xArgRel32),
+ /*5501*/ uint16(xMatch),
+ /*5502*/ uint16(xCondIs64), 5505, 5519,
+ /*5505*/ uint16(xCondDataSize), 5509, 5514, 0,
+ /*5509*/ uint16(xSetOp), uint16(JL),
+ /*5511*/ uint16(xReadCw),
+ /*5512*/ uint16(xArgRel16),
+ /*5513*/ uint16(xMatch),
+ /*5514*/ uint16(xSetOp), uint16(JL),
+ /*5516*/ uint16(xReadCd),
+ /*5517*/ uint16(xArgRel32),
+ /*5518*/ uint16(xMatch),
+ /*5519*/ uint16(xCondDataSize), 5523, 5514, 5528,
+ /*5523*/ uint16(xSetOp), uint16(JL),
+ /*5525*/ uint16(xReadCd),
+ /*5526*/ uint16(xArgRel32),
+ /*5527*/ uint16(xMatch),
+ /*5528*/ uint16(xSetOp), uint16(JL),
+ /*5530*/ uint16(xReadCd),
+ /*5531*/ uint16(xArgRel32),
+ /*5532*/ uint16(xMatch),
+ /*5533*/ uint16(xCondIs64), 5536, 5550,
+ /*5536*/ uint16(xCondDataSize), 5540, 5545, 0,
+ /*5540*/ uint16(xSetOp), uint16(JGE),
+ /*5542*/ uint16(xReadCw),
+ /*5543*/ uint16(xArgRel16),
+ /*5544*/ uint16(xMatch),
+ /*5545*/ uint16(xSetOp), uint16(JGE),
+ /*5547*/ uint16(xReadCd),
+ /*5548*/ uint16(xArgRel32),
+ /*5549*/ uint16(xMatch),
+ /*5550*/ uint16(xCondDataSize), 5554, 5545, 5559,
+ /*5554*/ uint16(xSetOp), uint16(JGE),
+ /*5556*/ uint16(xReadCd),
+ /*5557*/ uint16(xArgRel32),
+ /*5558*/ uint16(xMatch),
+ /*5559*/ uint16(xSetOp), uint16(JGE),
+ /*5561*/ uint16(xReadCd),
+ /*5562*/ uint16(xArgRel32),
+ /*5563*/ uint16(xMatch),
+ /*5564*/ uint16(xCondIs64), 5567, 5581,
+ /*5567*/ uint16(xCondDataSize), 5571, 5576, 0,
+ /*5571*/ uint16(xSetOp), uint16(JLE),
+ /*5573*/ uint16(xReadCw),
+ /*5574*/ uint16(xArgRel16),
+ /*5575*/ uint16(xMatch),
+ /*5576*/ uint16(xSetOp), uint16(JLE),
+ /*5578*/ uint16(xReadCd),
+ /*5579*/ uint16(xArgRel32),
+ /*5580*/ uint16(xMatch),
+ /*5581*/ uint16(xCondDataSize), 5585, 5576, 5590,
+ /*5585*/ uint16(xSetOp), uint16(JLE),
+ /*5587*/ uint16(xReadCd),
+ /*5588*/ uint16(xArgRel32),
+ /*5589*/ uint16(xMatch),
+ /*5590*/ uint16(xSetOp), uint16(JLE),
+ /*5592*/ uint16(xReadCd),
+ /*5593*/ uint16(xArgRel32),
+ /*5594*/ uint16(xMatch),
+ /*5595*/ uint16(xCondIs64), 5598, 5612,
+ /*5598*/ uint16(xCondDataSize), 5602, 5607, 0,
+ /*5602*/ uint16(xSetOp), uint16(JG),
+ /*5604*/ uint16(xReadCw),
+ /*5605*/ uint16(xArgRel16),
+ /*5606*/ uint16(xMatch),
+ /*5607*/ uint16(xSetOp), uint16(JG),
+ /*5609*/ uint16(xReadCd),
+ /*5610*/ uint16(xArgRel32),
+ /*5611*/ uint16(xMatch),
+ /*5612*/ uint16(xCondDataSize), 5616, 5607, 5621,
+ /*5616*/ uint16(xSetOp), uint16(JG),
+ /*5618*/ uint16(xReadCd),
+ /*5619*/ uint16(xArgRel32),
+ /*5620*/ uint16(xMatch),
+ /*5621*/ uint16(xSetOp), uint16(JG),
+ /*5623*/ uint16(xReadCd),
+ /*5624*/ uint16(xArgRel32),
+ /*5625*/ uint16(xMatch),
+ /*5626*/ uint16(xSetOp), uint16(SETO),
+ /*5628*/ uint16(xReadSlashR),
+ /*5629*/ uint16(xArgRM8),
+ /*5630*/ uint16(xMatch),
+ /*5631*/ uint16(xSetOp), uint16(SETNO),
+ /*5633*/ uint16(xReadSlashR),
+ /*5634*/ uint16(xArgRM8),
+ /*5635*/ uint16(xMatch),
+ /*5636*/ uint16(xSetOp), uint16(SETB),
+ /*5638*/ uint16(xReadSlashR),
+ /*5639*/ uint16(xArgRM8),
+ /*5640*/ uint16(xMatch),
+ /*5641*/ uint16(xSetOp), uint16(SETAE),
+ /*5643*/ uint16(xReadSlashR),
+ /*5644*/ uint16(xArgRM8),
+ /*5645*/ uint16(xMatch),
+ /*5646*/ uint16(xSetOp), uint16(SETE),
+ /*5648*/ uint16(xReadSlashR),
+ /*5649*/ uint16(xArgRM8),
+ /*5650*/ uint16(xMatch),
+ /*5651*/ uint16(xSetOp), uint16(SETNE),
+ /*5653*/ uint16(xReadSlashR),
+ /*5654*/ uint16(xArgRM8),
+ /*5655*/ uint16(xMatch),
+ /*5656*/ uint16(xSetOp), uint16(SETBE),
+ /*5658*/ uint16(xReadSlashR),
+ /*5659*/ uint16(xArgRM8),
+ /*5660*/ uint16(xMatch),
+ /*5661*/ uint16(xSetOp), uint16(SETA),
+ /*5663*/ uint16(xReadSlashR),
+ /*5664*/ uint16(xArgRM8),
+ /*5665*/ uint16(xMatch),
+ /*5666*/ uint16(xSetOp), uint16(SETS),
+ /*5668*/ uint16(xReadSlashR),
+ /*5669*/ uint16(xArgRM8),
+ /*5670*/ uint16(xMatch),
+ /*5671*/ uint16(xSetOp), uint16(SETNS),
+ /*5673*/ uint16(xReadSlashR),
+ /*5674*/ uint16(xArgRM8),
+ /*5675*/ uint16(xMatch),
+ /*5676*/ uint16(xSetOp), uint16(SETP),
+ /*5678*/ uint16(xReadSlashR),
+ /*5679*/ uint16(xArgRM8),
+ /*5680*/ uint16(xMatch),
+ /*5681*/ uint16(xSetOp), uint16(SETNP),
+ /*5683*/ uint16(xReadSlashR),
+ /*5684*/ uint16(xArgRM8),
+ /*5685*/ uint16(xMatch),
+ /*5686*/ uint16(xSetOp), uint16(SETL),
+ /*5688*/ uint16(xReadSlashR),
+ /*5689*/ uint16(xArgRM8),
+ /*5690*/ uint16(xMatch),
+ /*5691*/ uint16(xSetOp), uint16(SETGE),
+ /*5693*/ uint16(xReadSlashR),
+ /*5694*/ uint16(xArgRM8),
+ /*5695*/ uint16(xMatch),
+ /*5696*/ uint16(xSetOp), uint16(SETLE),
+ /*5698*/ uint16(xReadSlashR),
+ /*5699*/ uint16(xArgRM8),
+ /*5700*/ uint16(xMatch),
+ /*5701*/ uint16(xSetOp), uint16(SETG),
+ /*5703*/ uint16(xReadSlashR),
+ /*5704*/ uint16(xArgRM8),
+ /*5705*/ uint16(xMatch),
+ /*5706*/ uint16(xSetOp), uint16(PUSH),
+ /*5708*/ uint16(xArgFS),
+ /*5709*/ uint16(xMatch),
+ /*5710*/ uint16(xCondIs64), 5713, 5725,
+ /*5713*/ uint16(xCondDataSize), 5717, 5721, 0,
+ /*5717*/ uint16(xSetOp), uint16(POP),
+ /*5719*/ uint16(xArgFS),
+ /*5720*/ uint16(xMatch),
+ /*5721*/ uint16(xSetOp), uint16(POP),
+ /*5723*/ uint16(xArgFS),
+ /*5724*/ uint16(xMatch),
+ /*5725*/ uint16(xCondDataSize), 5717, 5729, 5733,
+ /*5729*/ uint16(xSetOp), uint16(POP),
+ /*5731*/ uint16(xArgFS),
+ /*5732*/ uint16(xMatch),
+ /*5733*/ uint16(xSetOp), uint16(POP),
+ /*5735*/ uint16(xArgFS),
+ /*5736*/ uint16(xMatch),
+ /*5737*/ uint16(xSetOp), uint16(CPUID),
+ /*5739*/ uint16(xMatch),
+ /*5740*/ uint16(xCondIs64), 5743, 5759,
+ /*5743*/ uint16(xCondDataSize), 5747, 5753, 0,
+ /*5747*/ uint16(xSetOp), uint16(BT),
+ /*5749*/ uint16(xReadSlashR),
+ /*5750*/ uint16(xArgRM16),
+ /*5751*/ uint16(xArgR16),
+ /*5752*/ uint16(xMatch),
+ /*5753*/ uint16(xSetOp), uint16(BT),
+ /*5755*/ uint16(xReadSlashR),
+ /*5756*/ uint16(xArgRM32),
+ /*5757*/ uint16(xArgR32),
+ /*5758*/ uint16(xMatch),
+ /*5759*/ uint16(xCondDataSize), 5747, 5753, 5763,
+ /*5763*/ uint16(xSetOp), uint16(BT),
+ /*5765*/ uint16(xReadSlashR),
+ /*5766*/ uint16(xArgRM64),
+ /*5767*/ uint16(xArgR64),
+ /*5768*/ uint16(xMatch),
+ /*5769*/ uint16(xCondIs64), 5772, 5792,
+ /*5772*/ uint16(xCondDataSize), 5776, 5784, 0,
+ /*5776*/ uint16(xSetOp), uint16(SHLD),
+ /*5778*/ uint16(xReadSlashR),
+ /*5779*/ uint16(xReadIb),
+ /*5780*/ uint16(xArgRM16),
+ /*5781*/ uint16(xArgR16),
+ /*5782*/ uint16(xArgImm8u),
+ /*5783*/ uint16(xMatch),
+ /*5784*/ uint16(xSetOp), uint16(SHLD),
+ /*5786*/ uint16(xReadSlashR),
+ /*5787*/ uint16(xReadIb),
+ /*5788*/ uint16(xArgRM32),
+ /*5789*/ uint16(xArgR32),
+ /*5790*/ uint16(xArgImm8u),
+ /*5791*/ uint16(xMatch),
+ /*5792*/ uint16(xCondDataSize), 5776, 5784, 5796,
+ /*5796*/ uint16(xSetOp), uint16(SHLD),
+ /*5798*/ uint16(xReadSlashR),
+ /*5799*/ uint16(xReadIb),
+ /*5800*/ uint16(xArgRM64),
+ /*5801*/ uint16(xArgR64),
+ /*5802*/ uint16(xArgImm8u),
+ /*5803*/ uint16(xMatch),
+ /*5804*/ uint16(xCondIs64), 5807, 5825,
+ /*5807*/ uint16(xCondDataSize), 5811, 5818, 0,
+ /*5811*/ uint16(xSetOp), uint16(SHLD),
+ /*5813*/ uint16(xReadSlashR),
+ /*5814*/ uint16(xArgRM16),
+ /*5815*/ uint16(xArgR16),
+ /*5816*/ uint16(xArgCL),
+ /*5817*/ uint16(xMatch),
+ /*5818*/ uint16(xSetOp), uint16(SHLD),
+ /*5820*/ uint16(xReadSlashR),
+ /*5821*/ uint16(xArgRM32),
+ /*5822*/ uint16(xArgR32),
+ /*5823*/ uint16(xArgCL),
+ /*5824*/ uint16(xMatch),
+ /*5825*/ uint16(xCondDataSize), 5811, 5818, 5829,
+ /*5829*/ uint16(xSetOp), uint16(SHLD),
+ /*5831*/ uint16(xReadSlashR),
+ /*5832*/ uint16(xArgRM64),
+ /*5833*/ uint16(xArgR64),
+ /*5834*/ uint16(xArgCL),
+ /*5835*/ uint16(xMatch),
+ /*5836*/ uint16(xSetOp), uint16(PUSH),
+ /*5838*/ uint16(xArgGS),
+ /*5839*/ uint16(xMatch),
+ /*5840*/ uint16(xCondIs64), 5843, 5855,
+ /*5843*/ uint16(xCondDataSize), 5847, 5851, 0,
+ /*5847*/ uint16(xSetOp), uint16(POP),
+ /*5849*/ uint16(xArgGS),
+ /*5850*/ uint16(xMatch),
+ /*5851*/ uint16(xSetOp), uint16(POP),
+ /*5853*/ uint16(xArgGS),
+ /*5854*/ uint16(xMatch),
+ /*5855*/ uint16(xCondDataSize), 5847, 5859, 5863,
+ /*5859*/ uint16(xSetOp), uint16(POP),
+ /*5861*/ uint16(xArgGS),
+ /*5862*/ uint16(xMatch),
+ /*5863*/ uint16(xSetOp), uint16(POP),
+ /*5865*/ uint16(xArgGS),
+ /*5866*/ uint16(xMatch),
+ /*5867*/ uint16(xSetOp), uint16(RSM),
+ /*5869*/ uint16(xMatch),
+ /*5870*/ uint16(xCondIs64), 5873, 5889,
+ /*5873*/ uint16(xCondDataSize), 5877, 5883, 0,
+ /*5877*/ uint16(xSetOp), uint16(BTS),
+ /*5879*/ uint16(xReadSlashR),
+ /*5880*/ uint16(xArgRM16),
+ /*5881*/ uint16(xArgR16),
+ /*5882*/ uint16(xMatch),
+ /*5883*/ uint16(xSetOp), uint16(BTS),
+ /*5885*/ uint16(xReadSlashR),
+ /*5886*/ uint16(xArgRM32),
+ /*5887*/ uint16(xArgR32),
+ /*5888*/ uint16(xMatch),
+ /*5889*/ uint16(xCondDataSize), 5877, 5883, 5893,
+ /*5893*/ uint16(xSetOp), uint16(BTS),
+ /*5895*/ uint16(xReadSlashR),
+ /*5896*/ uint16(xArgRM64),
+ /*5897*/ uint16(xArgR64),
+ /*5898*/ uint16(xMatch),
+ /*5899*/ uint16(xCondIs64), 5902, 5922,
+ /*5902*/ uint16(xCondDataSize), 5906, 5914, 0,
+ /*5906*/ uint16(xSetOp), uint16(SHRD),
+ /*5908*/ uint16(xReadSlashR),
+ /*5909*/ uint16(xReadIb),
+ /*5910*/ uint16(xArgRM16),
+ /*5911*/ uint16(xArgR16),
+ /*5912*/ uint16(xArgImm8u),
+ /*5913*/ uint16(xMatch),
+ /*5914*/ uint16(xSetOp), uint16(SHRD),
+ /*5916*/ uint16(xReadSlashR),
+ /*5917*/ uint16(xReadIb),
+ /*5918*/ uint16(xArgRM32),
+ /*5919*/ uint16(xArgR32),
+ /*5920*/ uint16(xArgImm8u),
+ /*5921*/ uint16(xMatch),
+ /*5922*/ uint16(xCondDataSize), 5906, 5914, 5926,
+ /*5926*/ uint16(xSetOp), uint16(SHRD),
+ /*5928*/ uint16(xReadSlashR),
+ /*5929*/ uint16(xReadIb),
+ /*5930*/ uint16(xArgRM64),
+ /*5931*/ uint16(xArgR64),
+ /*5932*/ uint16(xArgImm8u),
+ /*5933*/ uint16(xMatch),
+ /*5934*/ uint16(xCondIs64), 5937, 5955,
+ /*5937*/ uint16(xCondDataSize), 5941, 5948, 0,
+ /*5941*/ uint16(xSetOp), uint16(SHRD),
+ /*5943*/ uint16(xReadSlashR),
+ /*5944*/ uint16(xArgRM16),
+ /*5945*/ uint16(xArgR16),
+ /*5946*/ uint16(xArgCL),
+ /*5947*/ uint16(xMatch),
+ /*5948*/ uint16(xSetOp), uint16(SHRD),
+ /*5950*/ uint16(xReadSlashR),
+ /*5951*/ uint16(xArgRM32),
+ /*5952*/ uint16(xArgR32),
+ /*5953*/ uint16(xArgCL),
+ /*5954*/ uint16(xMatch),
+ /*5955*/ uint16(xCondDataSize), 5941, 5948, 5959,
+ /*5959*/ uint16(xSetOp), uint16(SHRD),
+ /*5961*/ uint16(xReadSlashR),
+ /*5962*/ uint16(xArgRM64),
+ /*5963*/ uint16(xArgR64),
+ /*5964*/ uint16(xArgCL),
+ /*5965*/ uint16(xMatch),
+ /*5966*/ uint16(xCondByte), 3,
+ 0xE8, 6215,
+ 0xF0, 6218,
+ 0xF8, 6221,
+ /*5974*/ uint16(xCondSlashR),
+ 5983, // 0
+ 6037, // 1
+ 6091, // 2
+ 6120, // 3
+ 6149, // 4
+ 6172, // 5
+ 6195, // 6
+ 6211, // 7
+ /*5983*/ uint16(xCondIs64), 5986, 5998,
+ /*5986*/ uint16(xCondDataSize), 5990, 5994, 0,
+ /*5990*/ uint16(xSetOp), uint16(FXSAVE),
+ /*5992*/ uint16(xArgM512byte),
+ /*5993*/ uint16(xMatch),
+ /*5994*/ uint16(xSetOp), uint16(FXSAVE),
+ /*5996*/ uint16(xArgM512byte),
+ /*5997*/ uint16(xMatch),
+ /*5998*/ uint16(xCondPrefix), 2,
+ 0xF3, 6012,
+ 0x0, 6004,
+ /*6004*/ uint16(xCondDataSize), 5990, 5994, 6008,
+ /*6008*/ uint16(xSetOp), uint16(FXSAVE64),
+ /*6010*/ uint16(xArgM512byte),
+ /*6011*/ uint16(xMatch),
+ /*6012*/ uint16(xCondDataSize), 6016, 6023, 6030,
+ /*6016*/ uint16(xCondIsMem), 6019, 0,
+ /*6019*/ uint16(xSetOp), uint16(RDFSBASE),
+ /*6021*/ uint16(xArgRM32),
+ /*6022*/ uint16(xMatch),
+ /*6023*/ uint16(xCondIsMem), 6026, 0,
+ /*6026*/ uint16(xSetOp), uint16(RDFSBASE),
+ /*6028*/ uint16(xArgRM32),
+ /*6029*/ uint16(xMatch),
+ /*6030*/ uint16(xCondIsMem), 6033, 0,
+ /*6033*/ uint16(xSetOp), uint16(RDFSBASE),
+ /*6035*/ uint16(xArgRM64),
+ /*6036*/ uint16(xMatch),
+ /*6037*/ uint16(xCondIs64), 6040, 6052,
+ /*6040*/ uint16(xCondDataSize), 6044, 6048, 0,
+ /*6044*/ uint16(xSetOp), uint16(FXRSTOR),
+ /*6046*/ uint16(xArgM512byte),
+ /*6047*/ uint16(xMatch),
+ /*6048*/ uint16(xSetOp), uint16(FXRSTOR),
+ /*6050*/ uint16(xArgM512byte),
+ /*6051*/ uint16(xMatch),
+ /*6052*/ uint16(xCondPrefix), 2,
+ 0xF3, 6066,
+ 0x0, 6058,
+ /*6058*/ uint16(xCondDataSize), 6044, 6048, 6062,
+ /*6062*/ uint16(xSetOp), uint16(FXRSTOR64),
+ /*6064*/ uint16(xArgM512byte),
+ /*6065*/ uint16(xMatch),
+ /*6066*/ uint16(xCondDataSize), 6070, 6077, 6084,
+ /*6070*/ uint16(xCondIsMem), 6073, 0,
+ /*6073*/ uint16(xSetOp), uint16(RDGSBASE),
+ /*6075*/ uint16(xArgRM32),
+ /*6076*/ uint16(xMatch),
+ /*6077*/ uint16(xCondIsMem), 6080, 0,
+ /*6080*/ uint16(xSetOp), uint16(RDGSBASE),
+ /*6082*/ uint16(xArgRM32),
+ /*6083*/ uint16(xMatch),
+ /*6084*/ uint16(xCondIsMem), 6087, 0,
+ /*6087*/ uint16(xSetOp), uint16(RDGSBASE),
+ /*6089*/ uint16(xArgRM64),
+ /*6090*/ uint16(xMatch),
+ /*6091*/ uint16(xCondIs64), 6094, 6098,
+ /*6094*/ uint16(xSetOp), uint16(LDMXCSR),
+ /*6096*/ uint16(xArgM32),
+ /*6097*/ uint16(xMatch),
+ /*6098*/ uint16(xCondPrefix), 2,
+ 0xF3, 6104,
+ 0x0, 6094,
+ /*6104*/ uint16(xCondDataSize), 6108, 6112, 6116,
+ /*6108*/ uint16(xSetOp), uint16(WRFSBASE),
+ /*6110*/ uint16(xArgRM32),
+ /*6111*/ uint16(xMatch),
+ /*6112*/ uint16(xSetOp), uint16(WRFSBASE),
+ /*6114*/ uint16(xArgRM32),
+ /*6115*/ uint16(xMatch),
+ /*6116*/ uint16(xSetOp), uint16(WRFSBASE),
+ /*6118*/ uint16(xArgRM64),
+ /*6119*/ uint16(xMatch),
+ /*6120*/ uint16(xCondIs64), 6123, 6127,
+ /*6123*/ uint16(xSetOp), uint16(STMXCSR),
+ /*6125*/ uint16(xArgM32),
+ /*6126*/ uint16(xMatch),
+ /*6127*/ uint16(xCondPrefix), 2,
+ 0xF3, 6133,
+ 0x0, 6123,
+ /*6133*/ uint16(xCondDataSize), 6137, 6141, 6145,
+ /*6137*/ uint16(xSetOp), uint16(WRGSBASE),
+ /*6139*/ uint16(xArgRM32),
+ /*6140*/ uint16(xMatch),
+ /*6141*/ uint16(xSetOp), uint16(WRGSBASE),
+ /*6143*/ uint16(xArgRM32),
+ /*6144*/ uint16(xMatch),
+ /*6145*/ uint16(xSetOp), uint16(WRGSBASE),
+ /*6147*/ uint16(xArgRM64),
+ /*6148*/ uint16(xMatch),
+ /*6149*/ uint16(xCondIs64), 6152, 6164,
+ /*6152*/ uint16(xCondDataSize), 6156, 6160, 0,
+ /*6156*/ uint16(xSetOp), uint16(XSAVE),
+ /*6158*/ uint16(xArgMem),
+ /*6159*/ uint16(xMatch),
+ /*6160*/ uint16(xSetOp), uint16(XSAVE),
+ /*6162*/ uint16(xArgMem),
+ /*6163*/ uint16(xMatch),
+ /*6164*/ uint16(xCondDataSize), 6156, 6160, 6168,
+ /*6168*/ uint16(xSetOp), uint16(XSAVE64),
+ /*6170*/ uint16(xArgMem),
+ /*6171*/ uint16(xMatch),
+ /*6172*/ uint16(xCondIs64), 6175, 6187,
+ /*6175*/ uint16(xCondDataSize), 6179, 6183, 0,
+ /*6179*/ uint16(xSetOp), uint16(XRSTOR),
+ /*6181*/ uint16(xArgMem),
+ /*6182*/ uint16(xMatch),
+ /*6183*/ uint16(xSetOp), uint16(XRSTOR),
+ /*6185*/ uint16(xArgMem),
+ /*6186*/ uint16(xMatch),
+ /*6187*/ uint16(xCondDataSize), 6179, 6183, 6191,
+ /*6191*/ uint16(xSetOp), uint16(XRSTOR64),
+ /*6193*/ uint16(xArgMem),
+ /*6194*/ uint16(xMatch),
+ /*6195*/ uint16(xCondDataSize), 6199, 6203, 6207,
+ /*6199*/ uint16(xSetOp), uint16(XSAVEOPT),
+ /*6201*/ uint16(xArgMem),
+ /*6202*/ uint16(xMatch),
+ /*6203*/ uint16(xSetOp), uint16(XSAVEOPT),
+ /*6205*/ uint16(xArgMem),
+ /*6206*/ uint16(xMatch),
+ /*6207*/ uint16(xSetOp), uint16(XSAVEOPT64),
+ /*6209*/ uint16(xArgMem),
+ /*6210*/ uint16(xMatch),
+ /*6211*/ uint16(xSetOp), uint16(CLFLUSH),
+ /*6213*/ uint16(xArgM8),
+ /*6214*/ uint16(xMatch),
+ /*6215*/ uint16(xSetOp), uint16(LFENCE),
+ /*6217*/ uint16(xMatch),
+ /*6218*/ uint16(xSetOp), uint16(MFENCE),
+ /*6220*/ uint16(xMatch),
+ /*6221*/ uint16(xSetOp), uint16(SFENCE),
+ /*6223*/ uint16(xMatch),
+ /*6224*/ uint16(xCondIs64), 6227, 6243,
+ /*6227*/ uint16(xCondDataSize), 6231, 6237, 0,
+ /*6231*/ uint16(xSetOp), uint16(IMUL),
+ /*6233*/ uint16(xReadSlashR),
+ /*6234*/ uint16(xArgR16),
+ /*6235*/ uint16(xArgRM16),
+ /*6236*/ uint16(xMatch),
+ /*6237*/ uint16(xSetOp), uint16(IMUL),
+ /*6239*/ uint16(xReadSlashR),
+ /*6240*/ uint16(xArgR32),
+ /*6241*/ uint16(xArgRM32),
+ /*6242*/ uint16(xMatch),
+ /*6243*/ uint16(xCondDataSize), 6231, 6237, 6247,
+ /*6247*/ uint16(xSetOp), uint16(IMUL),
+ /*6249*/ uint16(xReadSlashR),
+ /*6250*/ uint16(xArgR64),
+ /*6251*/ uint16(xArgRM64),
+ /*6252*/ uint16(xMatch),
+ /*6253*/ uint16(xSetOp), uint16(CMPXCHG),
+ /*6255*/ uint16(xReadSlashR),
+ /*6256*/ uint16(xArgRM8),
+ /*6257*/ uint16(xArgR8),
+ /*6258*/ uint16(xMatch),
+ /*6259*/ uint16(xCondIs64), 6262, 6278,
+ /*6262*/ uint16(xCondDataSize), 6266, 6272, 0,
+ /*6266*/ uint16(xSetOp), uint16(CMPXCHG),
+ /*6268*/ uint16(xReadSlashR),
+ /*6269*/ uint16(xArgRM16),
+ /*6270*/ uint16(xArgR16),
+ /*6271*/ uint16(xMatch),
+ /*6272*/ uint16(xSetOp), uint16(CMPXCHG),
+ /*6274*/ uint16(xReadSlashR),
+ /*6275*/ uint16(xArgRM32),
+ /*6276*/ uint16(xArgR32),
+ /*6277*/ uint16(xMatch),
+ /*6278*/ uint16(xCondDataSize), 6266, 6272, 6282,
+ /*6282*/ uint16(xSetOp), uint16(CMPXCHG),
+ /*6284*/ uint16(xReadSlashR),
+ /*6285*/ uint16(xArgRM64),
+ /*6286*/ uint16(xArgR64),
+ /*6287*/ uint16(xMatch),
+ /*6288*/ uint16(xCondIs64), 6291, 6307,
+ /*6291*/ uint16(xCondDataSize), 6295, 6301, 0,
+ /*6295*/ uint16(xSetOp), uint16(LSS),
+ /*6297*/ uint16(xReadSlashR),
+ /*6298*/ uint16(xArgR16),
+ /*6299*/ uint16(xArgM16colon16),
+ /*6300*/ uint16(xMatch),
+ /*6301*/ uint16(xSetOp), uint16(LSS),
+ /*6303*/ uint16(xReadSlashR),
+ /*6304*/ uint16(xArgR32),
+ /*6305*/ uint16(xArgM16colon32),
+ /*6306*/ uint16(xMatch),
+ /*6307*/ uint16(xCondDataSize), 6295, 6301, 6311,
+ /*6311*/ uint16(xSetOp), uint16(LSS),
+ /*6313*/ uint16(xReadSlashR),
+ /*6314*/ uint16(xArgR64),
+ /*6315*/ uint16(xArgM16colon64),
+ /*6316*/ uint16(xMatch),
+ /*6317*/ uint16(xCondIs64), 6320, 6336,
+ /*6320*/ uint16(xCondDataSize), 6324, 6330, 0,
+ /*6324*/ uint16(xSetOp), uint16(BTR),
+ /*6326*/ uint16(xReadSlashR),
+ /*6327*/ uint16(xArgRM16),
+ /*6328*/ uint16(xArgR16),
+ /*6329*/ uint16(xMatch),
+ /*6330*/ uint16(xSetOp), uint16(BTR),
+ /*6332*/ uint16(xReadSlashR),
+ /*6333*/ uint16(xArgRM32),
+ /*6334*/ uint16(xArgR32),
+ /*6335*/ uint16(xMatch),
+ /*6336*/ uint16(xCondDataSize), 6324, 6330, 6340,
+ /*6340*/ uint16(xSetOp), uint16(BTR),
+ /*6342*/ uint16(xReadSlashR),
+ /*6343*/ uint16(xArgRM64),
+ /*6344*/ uint16(xArgR64),
+ /*6345*/ uint16(xMatch),
+ /*6346*/ uint16(xCondIs64), 6349, 6365,
+ /*6349*/ uint16(xCondDataSize), 6353, 6359, 0,
+ /*6353*/ uint16(xSetOp), uint16(LFS),
+ /*6355*/ uint16(xReadSlashR),
+ /*6356*/ uint16(xArgR16),
+ /*6357*/ uint16(xArgM16colon16),
+ /*6358*/ uint16(xMatch),
+ /*6359*/ uint16(xSetOp), uint16(LFS),
+ /*6361*/ uint16(xReadSlashR),
+ /*6362*/ uint16(xArgR32),
+ /*6363*/ uint16(xArgM16colon32),
+ /*6364*/ uint16(xMatch),
+ /*6365*/ uint16(xCondDataSize), 6353, 6359, 6369,
+ /*6369*/ uint16(xSetOp), uint16(LFS),
+ /*6371*/ uint16(xReadSlashR),
+ /*6372*/ uint16(xArgR64),
+ /*6373*/ uint16(xArgM16colon64),
+ /*6374*/ uint16(xMatch),
+ /*6375*/ uint16(xCondIs64), 6378, 6394,
+ /*6378*/ uint16(xCondDataSize), 6382, 6388, 0,
+ /*6382*/ uint16(xSetOp), uint16(LGS),
+ /*6384*/ uint16(xReadSlashR),
+ /*6385*/ uint16(xArgR16),
+ /*6386*/ uint16(xArgM16colon16),
+ /*6387*/ uint16(xMatch),
+ /*6388*/ uint16(xSetOp), uint16(LGS),
+ /*6390*/ uint16(xReadSlashR),
+ /*6391*/ uint16(xArgR32),
+ /*6392*/ uint16(xArgM16colon32),
+ /*6393*/ uint16(xMatch),
+ /*6394*/ uint16(xCondDataSize), 6382, 6388, 6398,
+ /*6398*/ uint16(xSetOp), uint16(LGS),
+ /*6400*/ uint16(xReadSlashR),
+ /*6401*/ uint16(xArgR64),
+ /*6402*/ uint16(xArgM16colon64),
+ /*6403*/ uint16(xMatch),
+ /*6404*/ uint16(xCondIs64), 6407, 6423,
+ /*6407*/ uint16(xCondDataSize), 6411, 6417, 0,
+ /*6411*/ uint16(xSetOp), uint16(MOVZX),
+ /*6413*/ uint16(xReadSlashR),
+ /*6414*/ uint16(xArgR16),
+ /*6415*/ uint16(xArgRM8),
+ /*6416*/ uint16(xMatch),
+ /*6417*/ uint16(xSetOp), uint16(MOVZX),
+ /*6419*/ uint16(xReadSlashR),
+ /*6420*/ uint16(xArgR32),
+ /*6421*/ uint16(xArgRM8),
+ /*6422*/ uint16(xMatch),
+ /*6423*/ uint16(xCondDataSize), 6411, 6417, 6427,
+ /*6427*/ uint16(xSetOp), uint16(MOVZX),
+ /*6429*/ uint16(xReadSlashR),
+ /*6430*/ uint16(xArgR64),
+ /*6431*/ uint16(xArgRM8),
+ /*6432*/ uint16(xMatch),
+ /*6433*/ uint16(xCondIs64), 6436, 6452,
+ /*6436*/ uint16(xCondDataSize), 6440, 6446, 0,
+ /*6440*/ uint16(xSetOp), uint16(MOVZX),
+ /*6442*/ uint16(xReadSlashR),
+ /*6443*/ uint16(xArgR16),
+ /*6444*/ uint16(xArgRM16),
+ /*6445*/ uint16(xMatch),
+ /*6446*/ uint16(xSetOp), uint16(MOVZX),
+ /*6448*/ uint16(xReadSlashR),
+ /*6449*/ uint16(xArgR32),
+ /*6450*/ uint16(xArgRM16),
+ /*6451*/ uint16(xMatch),
+ /*6452*/ uint16(xCondDataSize), 6440, 6446, 6456,
+ /*6456*/ uint16(xSetOp), uint16(MOVZX),
+ /*6458*/ uint16(xReadSlashR),
+ /*6459*/ uint16(xArgR64),
+ /*6460*/ uint16(xArgRM16),
+ /*6461*/ uint16(xMatch),
+ /*6462*/ uint16(xCondIs64), 6465, 6485,
+ /*6465*/ uint16(xCondPrefix), 1,
+ 0xF3, 6469,
+ /*6469*/ uint16(xCondDataSize), 6473, 6479, 0,
+ /*6473*/ uint16(xSetOp), uint16(POPCNT),
+ /*6475*/ uint16(xReadSlashR),
+ /*6476*/ uint16(xArgR16),
+ /*6477*/ uint16(xArgRM16),
+ /*6478*/ uint16(xMatch),
+ /*6479*/ uint16(xSetOp), uint16(POPCNT),
+ /*6481*/ uint16(xReadSlashR),
+ /*6482*/ uint16(xArgR32),
+ /*6483*/ uint16(xArgRM32),
+ /*6484*/ uint16(xMatch),
+ /*6485*/ uint16(xCondPrefix), 1,
+ 0xF3, 6489,
+ /*6489*/ uint16(xCondDataSize), 6473, 6479, 6493,
+ /*6493*/ uint16(xSetOp), uint16(POPCNT),
+ /*6495*/ uint16(xReadSlashR),
+ /*6496*/ uint16(xArgR64),
+ /*6497*/ uint16(xArgRM64),
+ /*6498*/ uint16(xMatch),
+ /*6499*/ uint16(xSetOp), uint16(UD1),
+ /*6501*/ uint16(xMatch),
+ /*6502*/ uint16(xCondSlashR),
+ 0, // 0
+ 0, // 1
+ 0, // 2
+ 0, // 3
+ 6511, // 4
+ 6540, // 5
+ 6569, // 6
+ 6598, // 7
+ /*6511*/ uint16(xCondIs64), 6514, 6530,
+ /*6514*/ uint16(xCondDataSize), 6518, 6524, 0,
+ /*6518*/ uint16(xSetOp), uint16(BT),
+ /*6520*/ uint16(xReadIb),
+ /*6521*/ uint16(xArgRM16),
+ /*6522*/ uint16(xArgImm8u),
+ /*6523*/ uint16(xMatch),
+ /*6524*/ uint16(xSetOp), uint16(BT),
+ /*6526*/ uint16(xReadIb),
+ /*6527*/ uint16(xArgRM32),
+ /*6528*/ uint16(xArgImm8u),
+ /*6529*/ uint16(xMatch),
+ /*6530*/ uint16(xCondDataSize), 6518, 6524, 6534,
+ /*6534*/ uint16(xSetOp), uint16(BT),
+ /*6536*/ uint16(xReadIb),
+ /*6537*/ uint16(xArgRM64),
+ /*6538*/ uint16(xArgImm8u),
+ /*6539*/ uint16(xMatch),
+ /*6540*/ uint16(xCondIs64), 6543, 6559,
+ /*6543*/ uint16(xCondDataSize), 6547, 6553, 0,
+ /*6547*/ uint16(xSetOp), uint16(BTS),
+ /*6549*/ uint16(xReadIb),
+ /*6550*/ uint16(xArgRM16),
+ /*6551*/ uint16(xArgImm8u),
+ /*6552*/ uint16(xMatch),
+ /*6553*/ uint16(xSetOp), uint16(BTS),
+ /*6555*/ uint16(xReadIb),
+ /*6556*/ uint16(xArgRM32),
+ /*6557*/ uint16(xArgImm8u),
+ /*6558*/ uint16(xMatch),
+ /*6559*/ uint16(xCondDataSize), 6547, 6553, 6563,
+ /*6563*/ uint16(xSetOp), uint16(BTS),
+ /*6565*/ uint16(xReadIb),
+ /*6566*/ uint16(xArgRM64),
+ /*6567*/ uint16(xArgImm8u),
+ /*6568*/ uint16(xMatch),
+ /*6569*/ uint16(xCondIs64), 6572, 6588,
+ /*6572*/ uint16(xCondDataSize), 6576, 6582, 0,
+ /*6576*/ uint16(xSetOp), uint16(BTR),
+ /*6578*/ uint16(xReadIb),
+ /*6579*/ uint16(xArgRM16),
+ /*6580*/ uint16(xArgImm8u),
+ /*6581*/ uint16(xMatch),
+ /*6582*/ uint16(xSetOp), uint16(BTR),
+ /*6584*/ uint16(xReadIb),
+ /*6585*/ uint16(xArgRM32),
+ /*6586*/ uint16(xArgImm8u),
+ /*6587*/ uint16(xMatch),
+ /*6588*/ uint16(xCondDataSize), 6576, 6582, 6592,
+ /*6592*/ uint16(xSetOp), uint16(BTR),
+ /*6594*/ uint16(xReadIb),
+ /*6595*/ uint16(xArgRM64),
+ /*6596*/ uint16(xArgImm8u),
+ /*6597*/ uint16(xMatch),
+ /*6598*/ uint16(xCondIs64), 6601, 6617,
+ /*6601*/ uint16(xCondDataSize), 6605, 6611, 0,
+ /*6605*/ uint16(xSetOp), uint16(BTC),
+ /*6607*/ uint16(xReadIb),
+ /*6608*/ uint16(xArgRM16),
+ /*6609*/ uint16(xArgImm8u),
+ /*6610*/ uint16(xMatch),
+ /*6611*/ uint16(xSetOp), uint16(BTC),
+ /*6613*/ uint16(xReadIb),
+ /*6614*/ uint16(xArgRM32),
+ /*6615*/ uint16(xArgImm8u),
+ /*6616*/ uint16(xMatch),
+ /*6617*/ uint16(xCondDataSize), 6605, 6611, 6621,
+ /*6621*/ uint16(xSetOp), uint16(BTC),
+ /*6623*/ uint16(xReadIb),
+ /*6624*/ uint16(xArgRM64),
+ /*6625*/ uint16(xArgImm8u),
+ /*6626*/ uint16(xMatch),
+ /*6627*/ uint16(xCondIs64), 6630, 6646,
+ /*6630*/ uint16(xCondDataSize), 6634, 6640, 0,
+ /*6634*/ uint16(xSetOp), uint16(BTC),
+ /*6636*/ uint16(xReadSlashR),
+ /*6637*/ uint16(xArgRM16),
+ /*6638*/ uint16(xArgR16),
+ /*6639*/ uint16(xMatch),
+ /*6640*/ uint16(xSetOp), uint16(BTC),
+ /*6642*/ uint16(xReadSlashR),
+ /*6643*/ uint16(xArgRM32),
+ /*6644*/ uint16(xArgR32),
+ /*6645*/ uint16(xMatch),
+ /*6646*/ uint16(xCondDataSize), 6634, 6640, 6650,
+ /*6650*/ uint16(xSetOp), uint16(BTC),
+ /*6652*/ uint16(xReadSlashR),
+ /*6653*/ uint16(xArgRM64),
+ /*6654*/ uint16(xArgR64),
+ /*6655*/ uint16(xMatch),
+ /*6656*/ uint16(xCondIs64), 6659, 6697,
+ /*6659*/ uint16(xCondPrefix), 2,
+ 0xF3, 6681,
+ 0x0, 6665,
+ /*6665*/ uint16(xCondDataSize), 6669, 6675, 0,
+ /*6669*/ uint16(xSetOp), uint16(BSF),
+ /*6671*/ uint16(xReadSlashR),
+ /*6672*/ uint16(xArgR16),
+ /*6673*/ uint16(xArgRM16),
+ /*6674*/ uint16(xMatch),
+ /*6675*/ uint16(xSetOp), uint16(BSF),
+ /*6677*/ uint16(xReadSlashR),
+ /*6678*/ uint16(xArgR32),
+ /*6679*/ uint16(xArgRM32),
+ /*6680*/ uint16(xMatch),
+ /*6681*/ uint16(xCondDataSize), 6685, 6691, 0,
+ /*6685*/ uint16(xSetOp), uint16(TZCNT),
+ /*6687*/ uint16(xReadSlashR),
+ /*6688*/ uint16(xArgR16),
+ /*6689*/ uint16(xArgRM16),
+ /*6690*/ uint16(xMatch),
+ /*6691*/ uint16(xSetOp), uint16(TZCNT),
+ /*6693*/ uint16(xReadSlashR),
+ /*6694*/ uint16(xArgR32),
+ /*6695*/ uint16(xArgRM32),
+ /*6696*/ uint16(xMatch),
+ /*6697*/ uint16(xCondPrefix), 2,
+ 0xF3, 6713,
+ 0x0, 6703,
+ /*6703*/ uint16(xCondDataSize), 6669, 6675, 6707,
+ /*6707*/ uint16(xSetOp), uint16(BSF),
+ /*6709*/ uint16(xReadSlashR),
+ /*6710*/ uint16(xArgR64),
+ /*6711*/ uint16(xArgRM64),
+ /*6712*/ uint16(xMatch),
+ /*6713*/ uint16(xCondDataSize), 6685, 6691, 6717,
+ /*6717*/ uint16(xSetOp), uint16(TZCNT),
+ /*6719*/ uint16(xReadSlashR),
+ /*6720*/ uint16(xArgR64),
+ /*6721*/ uint16(xArgRM64),
+ /*6722*/ uint16(xMatch),
+ /*6723*/ uint16(xCondIs64), 6726, 6764,
+ /*6726*/ uint16(xCondPrefix), 2,
+ 0xF3, 6748,
+ 0x0, 6732,
+ /*6732*/ uint16(xCondDataSize), 6736, 6742, 0,
+ /*6736*/ uint16(xSetOp), uint16(BSR),
+ /*6738*/ uint16(xReadSlashR),
+ /*6739*/ uint16(xArgR16),
+ /*6740*/ uint16(xArgRM16),
+ /*6741*/ uint16(xMatch),
+ /*6742*/ uint16(xSetOp), uint16(BSR),
+ /*6744*/ uint16(xReadSlashR),
+ /*6745*/ uint16(xArgR32),
+ /*6746*/ uint16(xArgRM32),
+ /*6747*/ uint16(xMatch),
+ /*6748*/ uint16(xCondDataSize), 6752, 6758, 0,
+ /*6752*/ uint16(xSetOp), uint16(LZCNT),
+ /*6754*/ uint16(xReadSlashR),
+ /*6755*/ uint16(xArgR16),
+ /*6756*/ uint16(xArgRM16),
+ /*6757*/ uint16(xMatch),
+ /*6758*/ uint16(xSetOp), uint16(LZCNT),
+ /*6760*/ uint16(xReadSlashR),
+ /*6761*/ uint16(xArgR32),
+ /*6762*/ uint16(xArgRM32),
+ /*6763*/ uint16(xMatch),
+ /*6764*/ uint16(xCondPrefix), 2,
+ 0xF3, 6780,
+ 0x0, 6770,
+ /*6770*/ uint16(xCondDataSize), 6736, 6742, 6774,
+ /*6774*/ uint16(xSetOp), uint16(BSR),
+ /*6776*/ uint16(xReadSlashR),
+ /*6777*/ uint16(xArgR64),
+ /*6778*/ uint16(xArgRM64),
+ /*6779*/ uint16(xMatch),
+ /*6780*/ uint16(xCondDataSize), 6752, 6758, 6784,
+ /*6784*/ uint16(xSetOp), uint16(LZCNT),
+ /*6786*/ uint16(xReadSlashR),
+ /*6787*/ uint16(xArgR64),
+ /*6788*/ uint16(xArgRM64),
+ /*6789*/ uint16(xMatch),
+ /*6790*/ uint16(xCondIs64), 6793, 6809,
+ /*6793*/ uint16(xCondDataSize), 6797, 6803, 0,
+ /*6797*/ uint16(xSetOp), uint16(MOVSX),
+ /*6799*/ uint16(xReadSlashR),
+ /*6800*/ uint16(xArgR16),
+ /*6801*/ uint16(xArgRM8),
+ /*6802*/ uint16(xMatch),
+ /*6803*/ uint16(xSetOp), uint16(MOVSX),
+ /*6805*/ uint16(xReadSlashR),
+ /*6806*/ uint16(xArgR32),
+ /*6807*/ uint16(xArgRM8),
+ /*6808*/ uint16(xMatch),
+ /*6809*/ uint16(xCondDataSize), 6797, 6803, 6813,
+ /*6813*/ uint16(xSetOp), uint16(MOVSX),
+ /*6815*/ uint16(xReadSlashR),
+ /*6816*/ uint16(xArgR64),
+ /*6817*/ uint16(xArgRM8),
+ /*6818*/ uint16(xMatch),
+ /*6819*/ uint16(xCondIs64), 6822, 6838,
+ /*6822*/ uint16(xCondDataSize), 6826, 6832, 0,
+ /*6826*/ uint16(xSetOp), uint16(MOVSX),
+ /*6828*/ uint16(xReadSlashR),
+ /*6829*/ uint16(xArgR16),
+ /*6830*/ uint16(xArgRM16),
+ /*6831*/ uint16(xMatch),
+ /*6832*/ uint16(xSetOp), uint16(MOVSX),
+ /*6834*/ uint16(xReadSlashR),
+ /*6835*/ uint16(xArgR32),
+ /*6836*/ uint16(xArgRM16),
+ /*6837*/ uint16(xMatch),
+ /*6838*/ uint16(xCondDataSize), 6826, 6832, 6842,
+ /*6842*/ uint16(xSetOp), uint16(MOVSX),
+ /*6844*/ uint16(xReadSlashR),
+ /*6845*/ uint16(xArgR64),
+ /*6846*/ uint16(xArgRM16),
+ /*6847*/ uint16(xMatch),
+ /*6848*/ uint16(xSetOp), uint16(XADD),
+ /*6850*/ uint16(xReadSlashR),
+ /*6851*/ uint16(xArgRM8),
+ /*6852*/ uint16(xArgR8),
+ /*6853*/ uint16(xMatch),
+ /*6854*/ uint16(xCondIs64), 6857, 6873,
+ /*6857*/ uint16(xCondDataSize), 6861, 6867, 0,
+ /*6861*/ uint16(xSetOp), uint16(XADD),
+ /*6863*/ uint16(xReadSlashR),
+ /*6864*/ uint16(xArgRM16),
+ /*6865*/ uint16(xArgR16),
+ /*6866*/ uint16(xMatch),
+ /*6867*/ uint16(xSetOp), uint16(XADD),
+ /*6869*/ uint16(xReadSlashR),
+ /*6870*/ uint16(xArgRM32),
+ /*6871*/ uint16(xArgR32),
+ /*6872*/ uint16(xMatch),
+ /*6873*/ uint16(xCondDataSize), 6861, 6867, 6877,
+ /*6877*/ uint16(xSetOp), uint16(XADD),
+ /*6879*/ uint16(xReadSlashR),
+ /*6880*/ uint16(xArgRM64),
+ /*6881*/ uint16(xArgR64),
+ /*6882*/ uint16(xMatch),
+ /*6883*/ uint16(xCondPrefix), 4,
+ 0xF3, 6917,
+ 0xF2, 6909,
+ 0x66, 6901,
+ 0x0, 6893,
+ /*6893*/ uint16(xSetOp), uint16(CMPPS),
+ /*6895*/ uint16(xReadSlashR),
+ /*6896*/ uint16(xReadIb),
+ /*6897*/ uint16(xArgXmm1),
+ /*6898*/ uint16(xArgXmm2M128),
+ /*6899*/ uint16(xArgImm8u),
+ /*6900*/ uint16(xMatch),
+ /*6901*/ uint16(xSetOp), uint16(CMPPD),
+ /*6903*/ uint16(xReadSlashR),
+ /*6904*/ uint16(xReadIb),
+ /*6905*/ uint16(xArgXmm1),
+ /*6906*/ uint16(xArgXmm2M128),
+ /*6907*/ uint16(xArgImm8u),
+ /*6908*/ uint16(xMatch),
+ /*6909*/ uint16(xSetOp), uint16(CMPSD_XMM),
+ /*6911*/ uint16(xReadSlashR),
+ /*6912*/ uint16(xReadIb),
+ /*6913*/ uint16(xArgXmm1),
+ /*6914*/ uint16(xArgXmm2M64),
+ /*6915*/ uint16(xArgImm8u),
+ /*6916*/ uint16(xMatch),
+ /*6917*/ uint16(xSetOp), uint16(CMPSS),
+ /*6919*/ uint16(xReadSlashR),
+ /*6920*/ uint16(xReadIb),
+ /*6921*/ uint16(xArgXmm1),
+ /*6922*/ uint16(xArgXmm2M32),
+ /*6923*/ uint16(xArgImm8u),
+ /*6924*/ uint16(xMatch),
+ /*6925*/ uint16(xCondIs64), 6928, 6944,
+ /*6928*/ uint16(xCondDataSize), 6932, 6938, 0,
+ /*6932*/ uint16(xSetOp), uint16(MOVNTI),
+ /*6934*/ uint16(xReadSlashR),
+ /*6935*/ uint16(xArgM32),
+ /*6936*/ uint16(xArgR32),
+ /*6937*/ uint16(xMatch),
+ /*6938*/ uint16(xSetOp), uint16(MOVNTI),
+ /*6940*/ uint16(xReadSlashR),
+ /*6941*/ uint16(xArgM32),
+ /*6942*/ uint16(xArgR32),
+ /*6943*/ uint16(xMatch),
+ /*6944*/ uint16(xCondDataSize), 6932, 6938, 6948,
+ /*6948*/ uint16(xSetOp), uint16(MOVNTI),
+ /*6950*/ uint16(xReadSlashR),
+ /*6951*/ uint16(xArgM64),
+ /*6952*/ uint16(xArgR64),
+ /*6953*/ uint16(xMatch),
+ /*6954*/ uint16(xCondPrefix), 2,
+ 0x66, 6968,
+ 0x0, 6960,
+ /*6960*/ uint16(xSetOp), uint16(PINSRW),
+ /*6962*/ uint16(xReadSlashR),
+ /*6963*/ uint16(xReadIb),
+ /*6964*/ uint16(xArgMm),
+ /*6965*/ uint16(xArgR32M16),
+ /*6966*/ uint16(xArgImm8u),
+ /*6967*/ uint16(xMatch),
+ /*6968*/ uint16(xSetOp), uint16(PINSRW),
+ /*6970*/ uint16(xReadSlashR),
+ /*6971*/ uint16(xReadIb),
+ /*6972*/ uint16(xArgXmm),
+ /*6973*/ uint16(xArgR32M16),
+ /*6974*/ uint16(xArgImm8u),
+ /*6975*/ uint16(xMatch),
+ /*6976*/ uint16(xCondPrefix), 2,
+ 0x66, 6990,
+ 0x0, 6982,
+ /*6982*/ uint16(xSetOp), uint16(PEXTRW),
+ /*6984*/ uint16(xReadSlashR),
+ /*6985*/ uint16(xReadIb),
+ /*6986*/ uint16(xArgR32),
+ /*6987*/ uint16(xArgMm2),
+ /*6988*/ uint16(xArgImm8u),
+ /*6989*/ uint16(xMatch),
+ /*6990*/ uint16(xSetOp), uint16(PEXTRW),
+ /*6992*/ uint16(xReadSlashR),
+ /*6993*/ uint16(xReadIb),
+ /*6994*/ uint16(xArgR32),
+ /*6995*/ uint16(xArgXmm2),
+ /*6996*/ uint16(xArgImm8u),
+ /*6997*/ uint16(xMatch),
+ /*6998*/ uint16(xCondPrefix), 2,
+ 0x66, 7012,
+ 0x0, 7004,
+ /*7004*/ uint16(xSetOp), uint16(SHUFPS),
+ /*7006*/ uint16(xReadSlashR),
+ /*7007*/ uint16(xReadIb),
+ /*7008*/ uint16(xArgXmm1),
+ /*7009*/ uint16(xArgXmm2M128),
+ /*7010*/ uint16(xArgImm8u),
+ /*7011*/ uint16(xMatch),
+ /*7012*/ uint16(xSetOp), uint16(SHUFPD),
+ /*7014*/ uint16(xReadSlashR),
+ /*7015*/ uint16(xReadIb),
+ /*7016*/ uint16(xArgXmm1),
+ /*7017*/ uint16(xArgXmm2M128),
+ /*7018*/ uint16(xArgImm8u),
+ /*7019*/ uint16(xMatch),
+ /*7020*/ uint16(xCondSlashR),
+ 0, // 0
+ 7029, // 1
+ 0, // 2
+ 7052, // 3
+ 7075, // 4
+ 7098, // 5
+ 7121, // 6
+ 0, // 7
+ /*7029*/ uint16(xCondIs64), 7032, 7044,
+ /*7032*/ uint16(xCondDataSize), 7036, 7040, 0,
+ /*7036*/ uint16(xSetOp), uint16(CMPXCHG8B),
+ /*7038*/ uint16(xArgM64),
+ /*7039*/ uint16(xMatch),
+ /*7040*/ uint16(xSetOp), uint16(CMPXCHG8B),
+ /*7042*/ uint16(xArgM64),
+ /*7043*/ uint16(xMatch),
+ /*7044*/ uint16(xCondDataSize), 7036, 7040, 7048,
+ /*7048*/ uint16(xSetOp), uint16(CMPXCHG16B),
+ /*7050*/ uint16(xArgM128),
+ /*7051*/ uint16(xMatch),
+ /*7052*/ uint16(xCondIs64), 7055, 7067,
+ /*7055*/ uint16(xCondDataSize), 7059, 7063, 0,
+ /*7059*/ uint16(xSetOp), uint16(XRSTORS),
+ /*7061*/ uint16(xArgMem),
+ /*7062*/ uint16(xMatch),
+ /*7063*/ uint16(xSetOp), uint16(XRSTORS),
+ /*7065*/ uint16(xArgMem),
+ /*7066*/ uint16(xMatch),
+ /*7067*/ uint16(xCondDataSize), 7059, 7063, 7071,
+ /*7071*/ uint16(xSetOp), uint16(XRSTORS64),
+ /*7073*/ uint16(xArgMem),
+ /*7074*/ uint16(xMatch),
+ /*7075*/ uint16(xCondIs64), 7078, 7090,
+ /*7078*/ uint16(xCondDataSize), 7082, 7086, 0,
+ /*7082*/ uint16(xSetOp), uint16(XSAVEC),
+ /*7084*/ uint16(xArgMem),
+ /*7085*/ uint16(xMatch),
+ /*7086*/ uint16(xSetOp), uint16(XSAVEC),
+ /*7088*/ uint16(xArgMem),
+ /*7089*/ uint16(xMatch),
+ /*7090*/ uint16(xCondDataSize), 7082, 7086, 7094,
+ /*7094*/ uint16(xSetOp), uint16(XSAVEC64),
+ /*7096*/ uint16(xArgMem),
+ /*7097*/ uint16(xMatch),
+ /*7098*/ uint16(xCondIs64), 7101, 7113,
+ /*7101*/ uint16(xCondDataSize), 7105, 7109, 0,
+ /*7105*/ uint16(xSetOp), uint16(XSAVES),
+ /*7107*/ uint16(xArgMem),
+ /*7108*/ uint16(xMatch),
+ /*7109*/ uint16(xSetOp), uint16(XSAVES),
+ /*7111*/ uint16(xArgMem),
+ /*7112*/ uint16(xMatch),
+ /*7113*/ uint16(xCondDataSize), 7105, 7109, 7117,
+ /*7117*/ uint16(xSetOp), uint16(XSAVES64),
+ /*7119*/ uint16(xArgMem),
+ /*7120*/ uint16(xMatch),
+ /*7121*/ uint16(xCondIs64), 7124, 7142,
+ /*7124*/ uint16(xCondDataSize), 7128, 7135, 0,
+ /*7128*/ uint16(xCondIsMem), 7131, 0,
+ /*7131*/ uint16(xSetOp), uint16(RDRAND),
+ /*7133*/ uint16(xArgRmf16),
+ /*7134*/ uint16(xMatch),
+ /*7135*/ uint16(xCondIsMem), 7138, 0,
+ /*7138*/ uint16(xSetOp), uint16(RDRAND),
+ /*7140*/ uint16(xArgRmf32),
+ /*7141*/ uint16(xMatch),
+ /*7142*/ uint16(xCondDataSize), 7128, 7135, 7146,
+ /*7146*/ uint16(xSetOp), uint16(RDRAND),
+ /*7148*/ uint16(xMatch),
+ /*7149*/ uint16(xCondIs64), 7152, 7164,
+ /*7152*/ uint16(xCondDataSize), 7156, 7160, 0,
+ /*7156*/ uint16(xSetOp), uint16(BSWAP),
+ /*7158*/ uint16(xArgR16op),
+ /*7159*/ uint16(xMatch),
+ /*7160*/ uint16(xSetOp), uint16(BSWAP),
+ /*7162*/ uint16(xArgR32op),
+ /*7163*/ uint16(xMatch),
+ /*7164*/ uint16(xCondDataSize), 7156, 7160, 7168,
+ /*7168*/ uint16(xSetOp), uint16(BSWAP),
+ /*7170*/ uint16(xArgR64op),
+ /*7171*/ uint16(xMatch),
+ /*7172*/ uint16(xCondPrefix), 2,
+ 0xF2, 7184,
+ 0x66, 7178,
+ /*7178*/ uint16(xSetOp), uint16(ADDSUBPD),
+ /*7180*/ uint16(xReadSlashR),
+ /*7181*/ uint16(xArgXmm1),
+ /*7182*/ uint16(xArgXmm2M128),
+ /*7183*/ uint16(xMatch),
+ /*7184*/ uint16(xSetOp), uint16(ADDSUBPS),
+ /*7186*/ uint16(xReadSlashR),
+ /*7187*/ uint16(xArgXmm1),
+ /*7188*/ uint16(xArgXmm2M128),
+ /*7189*/ uint16(xMatch),
+ /*7190*/ uint16(xCondPrefix), 2,
+ 0x66, 7202,
+ 0x0, 7196,
+ /*7196*/ uint16(xSetOp), uint16(PSRLW),
+ /*7198*/ uint16(xReadSlashR),
+ /*7199*/ uint16(xArgMm),
+ /*7200*/ uint16(xArgMmM64),
+ /*7201*/ uint16(xMatch),
+ /*7202*/ uint16(xSetOp), uint16(PSRLW),
+ /*7204*/ uint16(xReadSlashR),
+ /*7205*/ uint16(xArgXmm1),
+ /*7206*/ uint16(xArgXmm2M128),
+ /*7207*/ uint16(xMatch),
+ /*7208*/ uint16(xCondPrefix), 2,
+ 0x66, 7220,
+ 0x0, 7214,
+ /*7214*/ uint16(xSetOp), uint16(PSRLD),
+ /*7216*/ uint16(xReadSlashR),
+ /*7217*/ uint16(xArgMm),
+ /*7218*/ uint16(xArgMmM64),
+ /*7219*/ uint16(xMatch),
+ /*7220*/ uint16(xSetOp), uint16(PSRLD),
+ /*7222*/ uint16(xReadSlashR),
+ /*7223*/ uint16(xArgXmm1),
+ /*7224*/ uint16(xArgXmm2M128),
+ /*7225*/ uint16(xMatch),
+ /*7226*/ uint16(xCondPrefix), 2,
+ 0x66, 7238,
+ 0x0, 7232,
+ /*7232*/ uint16(xSetOp), uint16(PSRLQ),
+ /*7234*/ uint16(xReadSlashR),
+ /*7235*/ uint16(xArgMm),
+ /*7236*/ uint16(xArgMmM64),
+ /*7237*/ uint16(xMatch),
+ /*7238*/ uint16(xSetOp), uint16(PSRLQ),
+ /*7240*/ uint16(xReadSlashR),
+ /*7241*/ uint16(xArgXmm1),
+ /*7242*/ uint16(xArgXmm2M128),
+ /*7243*/ uint16(xMatch),
+ /*7244*/ uint16(xCondPrefix), 2,
+ 0x66, 7256,
+ 0x0, 7250,
+ /*7250*/ uint16(xSetOp), uint16(PADDQ),
+ /*7252*/ uint16(xReadSlashR),
+ /*7253*/ uint16(xArgMm1),
+ /*7254*/ uint16(xArgMm2M64),
+ /*7255*/ uint16(xMatch),
+ /*7256*/ uint16(xSetOp), uint16(PADDQ),
+ /*7258*/ uint16(xReadSlashR),
+ /*7259*/ uint16(xArgXmm1),
+ /*7260*/ uint16(xArgXmm2M128),
+ /*7261*/ uint16(xMatch),
+ /*7262*/ uint16(xCondPrefix), 2,
+ 0x66, 7274,
+ 0x0, 7268,
+ /*7268*/ uint16(xSetOp), uint16(PMULLW),
+ /*7270*/ uint16(xReadSlashR),
+ /*7271*/ uint16(xArgMm),
+ /*7272*/ uint16(xArgMmM64),
+ /*7273*/ uint16(xMatch),
+ /*7274*/ uint16(xSetOp), uint16(PMULLW),
+ /*7276*/ uint16(xReadSlashR),
+ /*7277*/ uint16(xArgXmm1),
+ /*7278*/ uint16(xArgXmm2M128),
+ /*7279*/ uint16(xMatch),
+ /*7280*/ uint16(xCondPrefix), 3,
+ 0xF3, 7300,
+ 0xF2, 7294,
+ 0x66, 7288,
+ /*7288*/ uint16(xSetOp), uint16(MOVQ),
+ /*7290*/ uint16(xReadSlashR),
+ /*7291*/ uint16(xArgXmm2M64),
+ /*7292*/ uint16(xArgXmm1),
+ /*7293*/ uint16(xMatch),
+ /*7294*/ uint16(xSetOp), uint16(MOVDQ2Q),
+ /*7296*/ uint16(xReadSlashR),
+ /*7297*/ uint16(xArgMm),
+ /*7298*/ uint16(xArgXmm2),
+ /*7299*/ uint16(xMatch),
+ /*7300*/ uint16(xSetOp), uint16(MOVQ2DQ),
+ /*7302*/ uint16(xReadSlashR),
+ /*7303*/ uint16(xArgXmm1),
+ /*7304*/ uint16(xArgMm2),
+ /*7305*/ uint16(xMatch),
+ /*7306*/ uint16(xCondPrefix), 2,
+ 0x66, 7318,
+ 0x0, 7312,
+ /*7312*/ uint16(xSetOp), uint16(PMOVMSKB),
+ /*7314*/ uint16(xReadSlashR),
+ /*7315*/ uint16(xArgR32),
+ /*7316*/ uint16(xArgMm2),
+ /*7317*/ uint16(xMatch),
+ /*7318*/ uint16(xSetOp), uint16(PMOVMSKB),
+ /*7320*/ uint16(xReadSlashR),
+ /*7321*/ uint16(xArgR32),
+ /*7322*/ uint16(xArgXmm2),
+ /*7323*/ uint16(xMatch),
+ /*7324*/ uint16(xCondPrefix), 2,
+ 0x66, 7336,
+ 0x0, 7330,
+ /*7330*/ uint16(xSetOp), uint16(PSUBUSB),
+ /*7332*/ uint16(xReadSlashR),
+ /*7333*/ uint16(xArgMm),
+ /*7334*/ uint16(xArgMmM64),
+ /*7335*/ uint16(xMatch),
+ /*7336*/ uint16(xSetOp), uint16(PSUBUSB),
+ /*7338*/ uint16(xReadSlashR),
+ /*7339*/ uint16(xArgXmm1),
+ /*7340*/ uint16(xArgXmm2M128),
+ /*7341*/ uint16(xMatch),
+ /*7342*/ uint16(xCondPrefix), 2,
+ 0x66, 7354,
+ 0x0, 7348,
+ /*7348*/ uint16(xSetOp), uint16(PSUBUSW),
+ /*7350*/ uint16(xReadSlashR),
+ /*7351*/ uint16(xArgMm),
+ /*7352*/ uint16(xArgMmM64),
+ /*7353*/ uint16(xMatch),
+ /*7354*/ uint16(xSetOp), uint16(PSUBUSW),
+ /*7356*/ uint16(xReadSlashR),
+ /*7357*/ uint16(xArgXmm1),
+ /*7358*/ uint16(xArgXmm2M128),
+ /*7359*/ uint16(xMatch),
+ /*7360*/ uint16(xCondPrefix), 2,
+ 0x66, 7372,
+ 0x0, 7366,
+ /*7366*/ uint16(xSetOp), uint16(PMINUB),
+ /*7368*/ uint16(xReadSlashR),
+ /*7369*/ uint16(xArgMm1),
+ /*7370*/ uint16(xArgMm2M64),
+ /*7371*/ uint16(xMatch),
+ /*7372*/ uint16(xSetOp), uint16(PMINUB),
+ /*7374*/ uint16(xReadSlashR),
+ /*7375*/ uint16(xArgXmm1),
+ /*7376*/ uint16(xArgXmm2M128),
+ /*7377*/ uint16(xMatch),
+ /*7378*/ uint16(xCondPrefix), 2,
+ 0x66, 7390,
+ 0x0, 7384,
+ /*7384*/ uint16(xSetOp), uint16(PAND),
+ /*7386*/ uint16(xReadSlashR),
+ /*7387*/ uint16(xArgMm),
+ /*7388*/ uint16(xArgMmM64),
+ /*7389*/ uint16(xMatch),
+ /*7390*/ uint16(xSetOp), uint16(PAND),
+ /*7392*/ uint16(xReadSlashR),
+ /*7393*/ uint16(xArgXmm1),
+ /*7394*/ uint16(xArgXmm2M128),
+ /*7395*/ uint16(xMatch),
+ /*7396*/ uint16(xCondPrefix), 2,
+ 0x66, 7408,
+ 0x0, 7402,
+ /*7402*/ uint16(xSetOp), uint16(PADDUSB),
+ /*7404*/ uint16(xReadSlashR),
+ /*7405*/ uint16(xArgMm),
+ /*7406*/ uint16(xArgMmM64),
+ /*7407*/ uint16(xMatch),
+ /*7408*/ uint16(xSetOp), uint16(PADDUSB),
+ /*7410*/ uint16(xReadSlashR),
+ /*7411*/ uint16(xArgXmm1),
+ /*7412*/ uint16(xArgXmm2M128),
+ /*7413*/ uint16(xMatch),
+ /*7414*/ uint16(xCondPrefix), 2,
+ 0x66, 7426,
+ 0x0, 7420,
+ /*7420*/ uint16(xSetOp), uint16(PADDUSW),
+ /*7422*/ uint16(xReadSlashR),
+ /*7423*/ uint16(xArgMm),
+ /*7424*/ uint16(xArgMmM64),
+ /*7425*/ uint16(xMatch),
+ /*7426*/ uint16(xSetOp), uint16(PADDUSW),
+ /*7428*/ uint16(xReadSlashR),
+ /*7429*/ uint16(xArgXmm1),
+ /*7430*/ uint16(xArgXmm2M128),
+ /*7431*/ uint16(xMatch),
+ /*7432*/ uint16(xCondPrefix), 2,
+ 0x66, 7444,
+ 0x0, 7438,
+ /*7438*/ uint16(xSetOp), uint16(PMAXUB),
+ /*7440*/ uint16(xReadSlashR),
+ /*7441*/ uint16(xArgMm1),
+ /*7442*/ uint16(xArgMm2M64),
+ /*7443*/ uint16(xMatch),
+ /*7444*/ uint16(xSetOp), uint16(PMAXUB),
+ /*7446*/ uint16(xReadSlashR),
+ /*7447*/ uint16(xArgXmm1),
+ /*7448*/ uint16(xArgXmm2M128),
+ /*7449*/ uint16(xMatch),
+ /*7450*/ uint16(xCondPrefix), 2,
+ 0x66, 7462,
+ 0x0, 7456,
+ /*7456*/ uint16(xSetOp), uint16(PANDN),
+ /*7458*/ uint16(xReadSlashR),
+ /*7459*/ uint16(xArgMm),
+ /*7460*/ uint16(xArgMmM64),
+ /*7461*/ uint16(xMatch),
+ /*7462*/ uint16(xSetOp), uint16(PANDN),
+ /*7464*/ uint16(xReadSlashR),
+ /*7465*/ uint16(xArgXmm1),
+ /*7466*/ uint16(xArgXmm2M128),
+ /*7467*/ uint16(xMatch),
+ /*7468*/ uint16(xCondPrefix), 2,
+ 0x66, 7480,
+ 0x0, 7474,
+ /*7474*/ uint16(xSetOp), uint16(PAVGB),
+ /*7476*/ uint16(xReadSlashR),
+ /*7477*/ uint16(xArgMm1),
+ /*7478*/ uint16(xArgMm2M64),
+ /*7479*/ uint16(xMatch),
+ /*7480*/ uint16(xSetOp), uint16(PAVGB),
+ /*7482*/ uint16(xReadSlashR),
+ /*7483*/ uint16(xArgXmm1),
+ /*7484*/ uint16(xArgXmm2M128),
+ /*7485*/ uint16(xMatch),
+ /*7486*/ uint16(xCondPrefix), 2,
+ 0x66, 7498,
+ 0x0, 7492,
+ /*7492*/ uint16(xSetOp), uint16(PSRAW),
+ /*7494*/ uint16(xReadSlashR),
+ /*7495*/ uint16(xArgMm),
+ /*7496*/ uint16(xArgMmM64),
+ /*7497*/ uint16(xMatch),
+ /*7498*/ uint16(xSetOp), uint16(PSRAW),
+ /*7500*/ uint16(xReadSlashR),
+ /*7501*/ uint16(xArgXmm1),
+ /*7502*/ uint16(xArgXmm2M128),
+ /*7503*/ uint16(xMatch),
+ /*7504*/ uint16(xCondPrefix), 2,
+ 0x66, 7516,
+ 0x0, 7510,
+ /*7510*/ uint16(xSetOp), uint16(PSRAD),
+ /*7512*/ uint16(xReadSlashR),
+ /*7513*/ uint16(xArgMm),
+ /*7514*/ uint16(xArgMmM64),
+ /*7515*/ uint16(xMatch),
+ /*7516*/ uint16(xSetOp), uint16(PSRAD),
+ /*7518*/ uint16(xReadSlashR),
+ /*7519*/ uint16(xArgXmm1),
+ /*7520*/ uint16(xArgXmm2M128),
+ /*7521*/ uint16(xMatch),
+ /*7522*/ uint16(xCondPrefix), 2,
+ 0x66, 7534,
+ 0x0, 7528,
+ /*7528*/ uint16(xSetOp), uint16(PAVGW),
+ /*7530*/ uint16(xReadSlashR),
+ /*7531*/ uint16(xArgMm1),
+ /*7532*/ uint16(xArgMm2M64),
+ /*7533*/ uint16(xMatch),
+ /*7534*/ uint16(xSetOp), uint16(PAVGW),
+ /*7536*/ uint16(xReadSlashR),
+ /*7537*/ uint16(xArgXmm1),
+ /*7538*/ uint16(xArgXmm2M128),
+ /*7539*/ uint16(xMatch),
+ /*7540*/ uint16(xCondPrefix), 2,
+ 0x66, 7552,
+ 0x0, 7546,
+ /*7546*/ uint16(xSetOp), uint16(PMULHUW),
+ /*7548*/ uint16(xReadSlashR),
+ /*7549*/ uint16(xArgMm1),
+ /*7550*/ uint16(xArgMm2M64),
+ /*7551*/ uint16(xMatch),
+ /*7552*/ uint16(xSetOp), uint16(PMULHUW),
+ /*7554*/ uint16(xReadSlashR),
+ /*7555*/ uint16(xArgXmm1),
+ /*7556*/ uint16(xArgXmm2M128),
+ /*7557*/ uint16(xMatch),
+ /*7558*/ uint16(xCondPrefix), 2,
+ 0x66, 7570,
+ 0x0, 7564,
+ /*7564*/ uint16(xSetOp), uint16(PMULHW),
+ /*7566*/ uint16(xReadSlashR),
+ /*7567*/ uint16(xArgMm),
+ /*7568*/ uint16(xArgMmM64),
+ /*7569*/ uint16(xMatch),
+ /*7570*/ uint16(xSetOp), uint16(PMULHW),
+ /*7572*/ uint16(xReadSlashR),
+ /*7573*/ uint16(xArgXmm1),
+ /*7574*/ uint16(xArgXmm2M128),
+ /*7575*/ uint16(xMatch),
+ /*7576*/ uint16(xCondPrefix), 3,
+ 0xF3, 7596,
+ 0xF2, 7590,
+ 0x66, 7584,
+ /*7584*/ uint16(xSetOp), uint16(CVTTPD2DQ),
+ /*7586*/ uint16(xReadSlashR),
+ /*7587*/ uint16(xArgXmm1),
+ /*7588*/ uint16(xArgXmm2M128),
+ /*7589*/ uint16(xMatch),
+ /*7590*/ uint16(xSetOp), uint16(CVTPD2DQ),
+ /*7592*/ uint16(xReadSlashR),
+ /*7593*/ uint16(xArgXmm1),
+ /*7594*/ uint16(xArgXmm2M128),
+ /*7595*/ uint16(xMatch),
+ /*7596*/ uint16(xSetOp), uint16(CVTDQ2PD),
+ /*7598*/ uint16(xReadSlashR),
+ /*7599*/ uint16(xArgXmm1),
+ /*7600*/ uint16(xArgXmm2M64),
+ /*7601*/ uint16(xMatch),
+ /*7602*/ uint16(xCondPrefix), 2,
+ 0x66, 7614,
+ 0x0, 7608,
+ /*7608*/ uint16(xSetOp), uint16(MOVNTQ),
+ /*7610*/ uint16(xReadSlashR),
+ /*7611*/ uint16(xArgM64),
+ /*7612*/ uint16(xArgMm),
+ /*7613*/ uint16(xMatch),
+ /*7614*/ uint16(xSetOp), uint16(MOVNTDQ),
+ /*7616*/ uint16(xReadSlashR),
+ /*7617*/ uint16(xArgM128),
+ /*7618*/ uint16(xArgXmm),
+ /*7619*/ uint16(xMatch),
+ /*7620*/ uint16(xCondPrefix), 2,
+ 0x66, 7632,
+ 0x0, 7626,
+ /*7626*/ uint16(xSetOp), uint16(PSUBSB),
+ /*7628*/ uint16(xReadSlashR),
+ /*7629*/ uint16(xArgMm),
+ /*7630*/ uint16(xArgMmM64),
+ /*7631*/ uint16(xMatch),
+ /*7632*/ uint16(xSetOp), uint16(PSUBSB),
+ /*7634*/ uint16(xReadSlashR),
+ /*7635*/ uint16(xArgXmm1),
+ /*7636*/ uint16(xArgXmm2M128),
+ /*7637*/ uint16(xMatch),
+ /*7638*/ uint16(xCondPrefix), 2,
+ 0x66, 7650,
+ 0x0, 7644,
+ /*7644*/ uint16(xSetOp), uint16(PSUBSW),
+ /*7646*/ uint16(xReadSlashR),
+ /*7647*/ uint16(xArgMm),
+ /*7648*/ uint16(xArgMmM64),
+ /*7649*/ uint16(xMatch),
+ /*7650*/ uint16(xSetOp), uint16(PSUBSW),
+ /*7652*/ uint16(xReadSlashR),
+ /*7653*/ uint16(xArgXmm1),
+ /*7654*/ uint16(xArgXmm2M128),
+ /*7655*/ uint16(xMatch),
+ /*7656*/ uint16(xCondPrefix), 2,
+ 0x66, 7668,
+ 0x0, 7662,
+ /*7662*/ uint16(xSetOp), uint16(PMINSW),
+ /*7664*/ uint16(xReadSlashR),
+ /*7665*/ uint16(xArgMm1),
+ /*7666*/ uint16(xArgMm2M64),
+ /*7667*/ uint16(xMatch),
+ /*7668*/ uint16(xSetOp), uint16(PMINSW),
+ /*7670*/ uint16(xReadSlashR),
+ /*7671*/ uint16(xArgXmm1),
+ /*7672*/ uint16(xArgXmm2M128),
+ /*7673*/ uint16(xMatch),
+ /*7674*/ uint16(xCondPrefix), 2,
+ 0x66, 7686,
+ 0x0, 7680,
+ /*7680*/ uint16(xSetOp), uint16(POR),
+ /*7682*/ uint16(xReadSlashR),
+ /*7683*/ uint16(xArgMm),
+ /*7684*/ uint16(xArgMmM64),
+ /*7685*/ uint16(xMatch),
+ /*7686*/ uint16(xSetOp), uint16(POR),
+ /*7688*/ uint16(xReadSlashR),
+ /*7689*/ uint16(xArgXmm1),
+ /*7690*/ uint16(xArgXmm2M128),
+ /*7691*/ uint16(xMatch),
+ /*7692*/ uint16(xCondPrefix), 2,
+ 0x66, 7704,
+ 0x0, 7698,
+ /*7698*/ uint16(xSetOp), uint16(PADDSB),
+ /*7700*/ uint16(xReadSlashR),
+ /*7701*/ uint16(xArgMm),
+ /*7702*/ uint16(xArgMmM64),
+ /*7703*/ uint16(xMatch),
+ /*7704*/ uint16(xSetOp), uint16(PADDSB),
+ /*7706*/ uint16(xReadSlashR),
+ /*7707*/ uint16(xArgXmm1),
+ /*7708*/ uint16(xArgXmm2M128),
+ /*7709*/ uint16(xMatch),
+ /*7710*/ uint16(xCondPrefix), 2,
+ 0x66, 7722,
+ 0x0, 7716,
+ /*7716*/ uint16(xSetOp), uint16(PADDSW),
+ /*7718*/ uint16(xReadSlashR),
+ /*7719*/ uint16(xArgMm),
+ /*7720*/ uint16(xArgMmM64),
+ /*7721*/ uint16(xMatch),
+ /*7722*/ uint16(xSetOp), uint16(PADDSW),
+ /*7724*/ uint16(xReadSlashR),
+ /*7725*/ uint16(xArgXmm1),
+ /*7726*/ uint16(xArgXmm2M128),
+ /*7727*/ uint16(xMatch),
+ /*7728*/ uint16(xCondPrefix), 2,
+ 0x66, 7740,
+ 0x0, 7734,
+ /*7734*/ uint16(xSetOp), uint16(PMAXSW),
+ /*7736*/ uint16(xReadSlashR),
+ /*7737*/ uint16(xArgMm1),
+ /*7738*/ uint16(xArgMm2M64),
+ /*7739*/ uint16(xMatch),
+ /*7740*/ uint16(xSetOp), uint16(PMAXSW),
+ /*7742*/ uint16(xReadSlashR),
+ /*7743*/ uint16(xArgXmm1),
+ /*7744*/ uint16(xArgXmm2M128),
+ /*7745*/ uint16(xMatch),
+ /*7746*/ uint16(xCondPrefix), 2,
+ 0x66, 7758,
+ 0x0, 7752,
+ /*7752*/ uint16(xSetOp), uint16(PXOR),
+ /*7754*/ uint16(xReadSlashR),
+ /*7755*/ uint16(xArgMm),
+ /*7756*/ uint16(xArgMmM64),
+ /*7757*/ uint16(xMatch),
+ /*7758*/ uint16(xSetOp), uint16(PXOR),
+ /*7760*/ uint16(xReadSlashR),
+ /*7761*/ uint16(xArgXmm1),
+ /*7762*/ uint16(xArgXmm2M128),
+ /*7763*/ uint16(xMatch),
+ /*7764*/ uint16(xCondPrefix), 1,
+ 0xF2, 7768,
+ /*7768*/ uint16(xSetOp), uint16(LDDQU),
+ /*7770*/ uint16(xReadSlashR),
+ /*7771*/ uint16(xArgXmm1),
+ /*7772*/ uint16(xArgM128),
+ /*7773*/ uint16(xMatch),
+ /*7774*/ uint16(xCondPrefix), 2,
+ 0x66, 7786,
+ 0x0, 7780,
+ /*7780*/ uint16(xSetOp), uint16(PSLLW),
+ /*7782*/ uint16(xReadSlashR),
+ /*7783*/ uint16(xArgMm),
+ /*7784*/ uint16(xArgMmM64),
+ /*7785*/ uint16(xMatch),
+ /*7786*/ uint16(xSetOp), uint16(PSLLW),
+ /*7788*/ uint16(xReadSlashR),
+ /*7789*/ uint16(xArgXmm1),
+ /*7790*/ uint16(xArgXmm2M128),
+ /*7791*/ uint16(xMatch),
+ /*7792*/ uint16(xCondPrefix), 2,
+ 0x66, 7804,
+ 0x0, 7798,
+ /*7798*/ uint16(xSetOp), uint16(PSLLD),
+ /*7800*/ uint16(xReadSlashR),
+ /*7801*/ uint16(xArgMm),
+ /*7802*/ uint16(xArgMmM64),
+ /*7803*/ uint16(xMatch),
+ /*7804*/ uint16(xSetOp), uint16(PSLLD),
+ /*7806*/ uint16(xReadSlashR),
+ /*7807*/ uint16(xArgXmm1),
+ /*7808*/ uint16(xArgXmm2M128),
+ /*7809*/ uint16(xMatch),
+ /*7810*/ uint16(xCondPrefix), 2,
+ 0x66, 7822,
+ 0x0, 7816,
+ /*7816*/ uint16(xSetOp), uint16(PSLLQ),
+ /*7818*/ uint16(xReadSlashR),
+ /*7819*/ uint16(xArgMm),
+ /*7820*/ uint16(xArgMmM64),
+ /*7821*/ uint16(xMatch),
+ /*7822*/ uint16(xSetOp), uint16(PSLLQ),
+ /*7824*/ uint16(xReadSlashR),
+ /*7825*/ uint16(xArgXmm1),
+ /*7826*/ uint16(xArgXmm2M128),
+ /*7827*/ uint16(xMatch),
+ /*7828*/ uint16(xCondPrefix), 2,
+ 0x66, 7840,
+ 0x0, 7834,
+ /*7834*/ uint16(xSetOp), uint16(PMULUDQ),
+ /*7836*/ uint16(xReadSlashR),
+ /*7837*/ uint16(xArgMm1),
+ /*7838*/ uint16(xArgMm2M64),
+ /*7839*/ uint16(xMatch),
+ /*7840*/ uint16(xSetOp), uint16(PMULUDQ),
+ /*7842*/ uint16(xReadSlashR),
+ /*7843*/ uint16(xArgXmm1),
+ /*7844*/ uint16(xArgXmm2M128),
+ /*7845*/ uint16(xMatch),
+ /*7846*/ uint16(xCondPrefix), 2,
+ 0x66, 7858,
+ 0x0, 7852,
+ /*7852*/ uint16(xSetOp), uint16(PMADDWD),
+ /*7854*/ uint16(xReadSlashR),
+ /*7855*/ uint16(xArgMm),
+ /*7856*/ uint16(xArgMmM64),
+ /*7857*/ uint16(xMatch),
+ /*7858*/ uint16(xSetOp), uint16(PMADDWD),
+ /*7860*/ uint16(xReadSlashR),
+ /*7861*/ uint16(xArgXmm1),
+ /*7862*/ uint16(xArgXmm2M128),
+ /*7863*/ uint16(xMatch),
+ /*7864*/ uint16(xCondPrefix), 2,
+ 0x66, 7876,
+ 0x0, 7870,
+ /*7870*/ uint16(xSetOp), uint16(PSADBW),
+ /*7872*/ uint16(xReadSlashR),
+ /*7873*/ uint16(xArgMm1),
+ /*7874*/ uint16(xArgMm2M64),
+ /*7875*/ uint16(xMatch),
+ /*7876*/ uint16(xSetOp), uint16(PSADBW),
+ /*7878*/ uint16(xReadSlashR),
+ /*7879*/ uint16(xArgXmm1),
+ /*7880*/ uint16(xArgXmm2M128),
+ /*7881*/ uint16(xMatch),
+ /*7882*/ uint16(xCondPrefix), 2,
+ 0x66, 7894,
+ 0x0, 7888,
+ /*7888*/ uint16(xSetOp), uint16(MASKMOVQ),
+ /*7890*/ uint16(xReadSlashR),
+ /*7891*/ uint16(xArgMm1),
+ /*7892*/ uint16(xArgMm2),
+ /*7893*/ uint16(xMatch),
+ /*7894*/ uint16(xSetOp), uint16(MASKMOVDQU),
+ /*7896*/ uint16(xReadSlashR),
+ /*7897*/ uint16(xArgXmm1),
+ /*7898*/ uint16(xArgXmm2),
+ /*7899*/ uint16(xMatch),
+ /*7900*/ uint16(xCondPrefix), 2,
+ 0x66, 7912,
+ 0x0, 7906,
+ /*7906*/ uint16(xSetOp), uint16(PSUBB),
+ /*7908*/ uint16(xReadSlashR),
+ /*7909*/ uint16(xArgMm),
+ /*7910*/ uint16(xArgMmM64),
+ /*7911*/ uint16(xMatch),
+ /*7912*/ uint16(xSetOp), uint16(PSUBB),
+ /*7914*/ uint16(xReadSlashR),
+ /*7915*/ uint16(xArgXmm1),
+ /*7916*/ uint16(xArgXmm2M128),
+ /*7917*/ uint16(xMatch),
+ /*7918*/ uint16(xCondPrefix), 2,
+ 0x66, 7930,
+ 0x0, 7924,
+ /*7924*/ uint16(xSetOp), uint16(PSUBW),
+ /*7926*/ uint16(xReadSlashR),
+ /*7927*/ uint16(xArgMm),
+ /*7928*/ uint16(xArgMmM64),
+ /*7929*/ uint16(xMatch),
+ /*7930*/ uint16(xSetOp), uint16(PSUBW),
+ /*7932*/ uint16(xReadSlashR),
+ /*7933*/ uint16(xArgXmm1),
+ /*7934*/ uint16(xArgXmm2M128),
+ /*7935*/ uint16(xMatch),
+ /*7936*/ uint16(xCondPrefix), 2,
+ 0x66, 7948,
+ 0x0, 7942,
+ /*7942*/ uint16(xSetOp), uint16(PSUBD),
+ /*7944*/ uint16(xReadSlashR),
+ /*7945*/ uint16(xArgMm),
+ /*7946*/ uint16(xArgMmM64),
+ /*7947*/ uint16(xMatch),
+ /*7948*/ uint16(xSetOp), uint16(PSUBD),
+ /*7950*/ uint16(xReadSlashR),
+ /*7951*/ uint16(xArgXmm1),
+ /*7952*/ uint16(xArgXmm2M128),
+ /*7953*/ uint16(xMatch),
+ /*7954*/ uint16(xCondPrefix), 2,
+ 0x66, 7966,
+ 0x0, 7960,
+ /*7960*/ uint16(xSetOp), uint16(PSUBQ),
+ /*7962*/ uint16(xReadSlashR),
+ /*7963*/ uint16(xArgMm1),
+ /*7964*/ uint16(xArgMm2M64),
+ /*7965*/ uint16(xMatch),
+ /*7966*/ uint16(xSetOp), uint16(PSUBQ),
+ /*7968*/ uint16(xReadSlashR),
+ /*7969*/ uint16(xArgXmm1),
+ /*7970*/ uint16(xArgXmm2M128),
+ /*7971*/ uint16(xMatch),
+ /*7972*/ uint16(xCondPrefix), 2,
+ 0x66, 7984,
+ 0x0, 7978,
+ /*7978*/ uint16(xSetOp), uint16(PADDB),
+ /*7980*/ uint16(xReadSlashR),
+ /*7981*/ uint16(xArgMm),
+ /*7982*/ uint16(xArgMmM64),
+ /*7983*/ uint16(xMatch),
+ /*7984*/ uint16(xSetOp), uint16(PADDB),
+ /*7986*/ uint16(xReadSlashR),
+ /*7987*/ uint16(xArgXmm1),
+ /*7988*/ uint16(xArgXmm2M128),
+ /*7989*/ uint16(xMatch),
+ /*7990*/ uint16(xCondPrefix), 2,
+ 0x66, 8002,
+ 0x0, 7996,
+ /*7996*/ uint16(xSetOp), uint16(PADDW),
+ /*7998*/ uint16(xReadSlashR),
+ /*7999*/ uint16(xArgMm),
+ /*8000*/ uint16(xArgMmM64),
+ /*8001*/ uint16(xMatch),
+ /*8002*/ uint16(xSetOp), uint16(PADDW),
+ /*8004*/ uint16(xReadSlashR),
+ /*8005*/ uint16(xArgXmm1),
+ /*8006*/ uint16(xArgXmm2M128),
+ /*8007*/ uint16(xMatch),
+ /*8008*/ uint16(xCondPrefix), 2,
+ 0x66, 8020,
+ 0x0, 8014,
+ /*8014*/ uint16(xSetOp), uint16(PADDD),
+ /*8016*/ uint16(xReadSlashR),
+ /*8017*/ uint16(xArgMm),
+ /*8018*/ uint16(xArgMmM64),
+ /*8019*/ uint16(xMatch),
+ /*8020*/ uint16(xSetOp), uint16(PADDD),
+ /*8022*/ uint16(xReadSlashR),
+ /*8023*/ uint16(xArgXmm1),
+ /*8024*/ uint16(xArgXmm2M128),
+ /*8025*/ uint16(xMatch),
+ /*8026*/ uint16(xSetOp), uint16(ADC),
+ /*8028*/ uint16(xReadSlashR),
+ /*8029*/ uint16(xArgRM8),
+ /*8030*/ uint16(xArgR8),
+ /*8031*/ uint16(xMatch),
+ /*8032*/ uint16(xCondIs64), 8035, 8051,
+ /*8035*/ uint16(xCondDataSize), 8039, 8045, 0,
+ /*8039*/ uint16(xSetOp), uint16(ADC),
+ /*8041*/ uint16(xReadSlashR),
+ /*8042*/ uint16(xArgRM16),
+ /*8043*/ uint16(xArgR16),
+ /*8044*/ uint16(xMatch),
+ /*8045*/ uint16(xSetOp), uint16(ADC),
+ /*8047*/ uint16(xReadSlashR),
+ /*8048*/ uint16(xArgRM32),
+ /*8049*/ uint16(xArgR32),
+ /*8050*/ uint16(xMatch),
+ /*8051*/ uint16(xCondDataSize), 8039, 8045, 8055,
+ /*8055*/ uint16(xSetOp), uint16(ADC),
+ /*8057*/ uint16(xReadSlashR),
+ /*8058*/ uint16(xArgRM64),
+ /*8059*/ uint16(xArgR64),
+ /*8060*/ uint16(xMatch),
+ /*8061*/ uint16(xSetOp), uint16(ADC),
+ /*8063*/ uint16(xReadSlashR),
+ /*8064*/ uint16(xArgR8),
+ /*8065*/ uint16(xArgRM8),
+ /*8066*/ uint16(xMatch),
+ /*8067*/ uint16(xCondIs64), 8070, 8086,
+ /*8070*/ uint16(xCondDataSize), 8074, 8080, 0,
+ /*8074*/ uint16(xSetOp), uint16(ADC),
+ /*8076*/ uint16(xReadSlashR),
+ /*8077*/ uint16(xArgR16),
+ /*8078*/ uint16(xArgRM16),
+ /*8079*/ uint16(xMatch),
+ /*8080*/ uint16(xSetOp), uint16(ADC),
+ /*8082*/ uint16(xReadSlashR),
+ /*8083*/ uint16(xArgR32),
+ /*8084*/ uint16(xArgRM32),
+ /*8085*/ uint16(xMatch),
+ /*8086*/ uint16(xCondDataSize), 8074, 8080, 8090,
+ /*8090*/ uint16(xSetOp), uint16(ADC),
+ /*8092*/ uint16(xReadSlashR),
+ /*8093*/ uint16(xArgR64),
+ /*8094*/ uint16(xArgRM64),
+ /*8095*/ uint16(xMatch),
+ /*8096*/ uint16(xSetOp), uint16(ADC),
+ /*8098*/ uint16(xReadIb),
+ /*8099*/ uint16(xArgAL),
+ /*8100*/ uint16(xArgImm8u),
+ /*8101*/ uint16(xMatch),
+ /*8102*/ uint16(xCondIs64), 8105, 8121,
+ /*8105*/ uint16(xCondDataSize), 8109, 8115, 0,
+ /*8109*/ uint16(xSetOp), uint16(ADC),
+ /*8111*/ uint16(xReadIw),
+ /*8112*/ uint16(xArgAX),
+ /*8113*/ uint16(xArgImm16),
+ /*8114*/ uint16(xMatch),
+ /*8115*/ uint16(xSetOp), uint16(ADC),
+ /*8117*/ uint16(xReadId),
+ /*8118*/ uint16(xArgEAX),
+ /*8119*/ uint16(xArgImm32),
+ /*8120*/ uint16(xMatch),
+ /*8121*/ uint16(xCondDataSize), 8109, 8115, 8125,
+ /*8125*/ uint16(xSetOp), uint16(ADC),
+ /*8127*/ uint16(xReadId),
+ /*8128*/ uint16(xArgRAX),
+ /*8129*/ uint16(xArgImm32),
+ /*8130*/ uint16(xMatch),
+ /*8131*/ uint16(xCondIs64), 8134, 0,
+ /*8134*/ uint16(xSetOp), uint16(PUSH),
+ /*8136*/ uint16(xArgSS),
+ /*8137*/ uint16(xMatch),
+ /*8138*/ uint16(xCondIs64), 8141, 0,
+ /*8141*/ uint16(xSetOp), uint16(POP),
+ /*8143*/ uint16(xArgSS),
+ /*8144*/ uint16(xMatch),
+ /*8145*/ uint16(xSetOp), uint16(SBB),
+ /*8147*/ uint16(xReadSlashR),
+ /*8148*/ uint16(xArgRM8),
+ /*8149*/ uint16(xArgR8),
+ /*8150*/ uint16(xMatch),
+ /*8151*/ uint16(xCondIs64), 8154, 8170,
+ /*8154*/ uint16(xCondDataSize), 8158, 8164, 0,
+ /*8158*/ uint16(xSetOp), uint16(SBB),
+ /*8160*/ uint16(xReadSlashR),
+ /*8161*/ uint16(xArgRM16),
+ /*8162*/ uint16(xArgR16),
+ /*8163*/ uint16(xMatch),
+ /*8164*/ uint16(xSetOp), uint16(SBB),
+ /*8166*/ uint16(xReadSlashR),
+ /*8167*/ uint16(xArgRM32),
+ /*8168*/ uint16(xArgR32),
+ /*8169*/ uint16(xMatch),
+ /*8170*/ uint16(xCondDataSize), 8158, 8164, 8174,
+ /*8174*/ uint16(xSetOp), uint16(SBB),
+ /*8176*/ uint16(xReadSlashR),
+ /*8177*/ uint16(xArgRM64),
+ /*8178*/ uint16(xArgR64),
+ /*8179*/ uint16(xMatch),
+ /*8180*/ uint16(xSetOp), uint16(SBB),
+ /*8182*/ uint16(xReadSlashR),
+ /*8183*/ uint16(xArgR8),
+ /*8184*/ uint16(xArgRM8),
+ /*8185*/ uint16(xMatch),
+ /*8186*/ uint16(xCondIs64), 8189, 8205,
+ /*8189*/ uint16(xCondDataSize), 8193, 8199, 0,
+ /*8193*/ uint16(xSetOp), uint16(SBB),
+ /*8195*/ uint16(xReadSlashR),
+ /*8196*/ uint16(xArgR16),
+ /*8197*/ uint16(xArgRM16),
+ /*8198*/ uint16(xMatch),
+ /*8199*/ uint16(xSetOp), uint16(SBB),
+ /*8201*/ uint16(xReadSlashR),
+ /*8202*/ uint16(xArgR32),
+ /*8203*/ uint16(xArgRM32),
+ /*8204*/ uint16(xMatch),
+ /*8205*/ uint16(xCondDataSize), 8193, 8199, 8209,
+ /*8209*/ uint16(xSetOp), uint16(SBB),
+ /*8211*/ uint16(xReadSlashR),
+ /*8212*/ uint16(xArgR64),
+ /*8213*/ uint16(xArgRM64),
+ /*8214*/ uint16(xMatch),
+ /*8215*/ uint16(xSetOp), uint16(SBB),
+ /*8217*/ uint16(xReadIb),
+ /*8218*/ uint16(xArgAL),
+ /*8219*/ uint16(xArgImm8u),
+ /*8220*/ uint16(xMatch),
+ /*8221*/ uint16(xCondIs64), 8224, 8240,
+ /*8224*/ uint16(xCondDataSize), 8228, 8234, 0,
+ /*8228*/ uint16(xSetOp), uint16(SBB),
+ /*8230*/ uint16(xReadIw),
+ /*8231*/ uint16(xArgAX),
+ /*8232*/ uint16(xArgImm16),
+ /*8233*/ uint16(xMatch),
+ /*8234*/ uint16(xSetOp), uint16(SBB),
+ /*8236*/ uint16(xReadId),
+ /*8237*/ uint16(xArgEAX),
+ /*8238*/ uint16(xArgImm32),
+ /*8239*/ uint16(xMatch),
+ /*8240*/ uint16(xCondDataSize), 8228, 8234, 8244,
+ /*8244*/ uint16(xSetOp), uint16(SBB),
+ /*8246*/ uint16(xReadId),
+ /*8247*/ uint16(xArgRAX),
+ /*8248*/ uint16(xArgImm32),
+ /*8249*/ uint16(xMatch),
+ /*8250*/ uint16(xCondIs64), 8253, 0,
+ /*8253*/ uint16(xSetOp), uint16(PUSH),
+ /*8255*/ uint16(xArgDS),
+ /*8256*/ uint16(xMatch),
+ /*8257*/ uint16(xCondIs64), 8260, 0,
+ /*8260*/ uint16(xSetOp), uint16(POP),
+ /*8262*/ uint16(xArgDS),
+ /*8263*/ uint16(xMatch),
+ /*8264*/ uint16(xSetOp), uint16(AND),
+ /*8266*/ uint16(xReadSlashR),
+ /*8267*/ uint16(xArgRM8),
+ /*8268*/ uint16(xArgR8),
+ /*8269*/ uint16(xMatch),
+ /*8270*/ uint16(xCondIs64), 8273, 8289,
+ /*8273*/ uint16(xCondDataSize), 8277, 8283, 0,
+ /*8277*/ uint16(xSetOp), uint16(AND),
+ /*8279*/ uint16(xReadSlashR),
+ /*8280*/ uint16(xArgRM16),
+ /*8281*/ uint16(xArgR16),
+ /*8282*/ uint16(xMatch),
+ /*8283*/ uint16(xSetOp), uint16(AND),
+ /*8285*/ uint16(xReadSlashR),
+ /*8286*/ uint16(xArgRM32),
+ /*8287*/ uint16(xArgR32),
+ /*8288*/ uint16(xMatch),
+ /*8289*/ uint16(xCondDataSize), 8277, 8283, 8293,
+ /*8293*/ uint16(xSetOp), uint16(AND),
+ /*8295*/ uint16(xReadSlashR),
+ /*8296*/ uint16(xArgRM64),
+ /*8297*/ uint16(xArgR64),
+ /*8298*/ uint16(xMatch),
+ /*8299*/ uint16(xSetOp), uint16(AND),
+ /*8301*/ uint16(xReadSlashR),
+ /*8302*/ uint16(xArgR8),
+ /*8303*/ uint16(xArgRM8),
+ /*8304*/ uint16(xMatch),
+ /*8305*/ uint16(xCondIs64), 8308, 8324,
+ /*8308*/ uint16(xCondDataSize), 8312, 8318, 0,
+ /*8312*/ uint16(xSetOp), uint16(AND),
+ /*8314*/ uint16(xReadSlashR),
+ /*8315*/ uint16(xArgR16),
+ /*8316*/ uint16(xArgRM16),
+ /*8317*/ uint16(xMatch),
+ /*8318*/ uint16(xSetOp), uint16(AND),
+ /*8320*/ uint16(xReadSlashR),
+ /*8321*/ uint16(xArgR32),
+ /*8322*/ uint16(xArgRM32),
+ /*8323*/ uint16(xMatch),
+ /*8324*/ uint16(xCondDataSize), 8312, 8318, 8328,
+ /*8328*/ uint16(xSetOp), uint16(AND),
+ /*8330*/ uint16(xReadSlashR),
+ /*8331*/ uint16(xArgR64),
+ /*8332*/ uint16(xArgRM64),
+ /*8333*/ uint16(xMatch),
+ /*8334*/ uint16(xSetOp), uint16(AND),
+ /*8336*/ uint16(xReadIb),
+ /*8337*/ uint16(xArgAL),
+ /*8338*/ uint16(xArgImm8u),
+ /*8339*/ uint16(xMatch),
+ /*8340*/ uint16(xCondIs64), 8343, 8359,
+ /*8343*/ uint16(xCondDataSize), 8347, 8353, 0,
+ /*8347*/ uint16(xSetOp), uint16(AND),
+ /*8349*/ uint16(xReadIw),
+ /*8350*/ uint16(xArgAX),
+ /*8351*/ uint16(xArgImm16),
+ /*8352*/ uint16(xMatch),
+ /*8353*/ uint16(xSetOp), uint16(AND),
+ /*8355*/ uint16(xReadId),
+ /*8356*/ uint16(xArgEAX),
+ /*8357*/ uint16(xArgImm32),
+ /*8358*/ uint16(xMatch),
+ /*8359*/ uint16(xCondDataSize), 8347, 8353, 8363,
+ /*8363*/ uint16(xSetOp), uint16(AND),
+ /*8365*/ uint16(xReadId),
+ /*8366*/ uint16(xArgRAX),
+ /*8367*/ uint16(xArgImm32),
+ /*8368*/ uint16(xMatch),
+ /*8369*/ uint16(xCondIs64), 8372, 0,
+ /*8372*/ uint16(xSetOp), uint16(DAA),
+ /*8374*/ uint16(xMatch),
+ /*8375*/ uint16(xSetOp), uint16(SUB),
+ /*8377*/ uint16(xReadSlashR),
+ /*8378*/ uint16(xArgRM8),
+ /*8379*/ uint16(xArgR8),
+ /*8380*/ uint16(xMatch),
+ /*8381*/ uint16(xCondIs64), 8384, 8400,
+ /*8384*/ uint16(xCondDataSize), 8388, 8394, 0,
+ /*8388*/ uint16(xSetOp), uint16(SUB),
+ /*8390*/ uint16(xReadSlashR),
+ /*8391*/ uint16(xArgRM16),
+ /*8392*/ uint16(xArgR16),
+ /*8393*/ uint16(xMatch),
+ /*8394*/ uint16(xSetOp), uint16(SUB),
+ /*8396*/ uint16(xReadSlashR),
+ /*8397*/ uint16(xArgRM32),
+ /*8398*/ uint16(xArgR32),
+ /*8399*/ uint16(xMatch),
+ /*8400*/ uint16(xCondDataSize), 8388, 8394, 8404,
+ /*8404*/ uint16(xSetOp), uint16(SUB),
+ /*8406*/ uint16(xReadSlashR),
+ /*8407*/ uint16(xArgRM64),
+ /*8408*/ uint16(xArgR64),
+ /*8409*/ uint16(xMatch),
+ /*8410*/ uint16(xSetOp), uint16(SUB),
+ /*8412*/ uint16(xReadSlashR),
+ /*8413*/ uint16(xArgR8),
+ /*8414*/ uint16(xArgRM8),
+ /*8415*/ uint16(xMatch),
+ /*8416*/ uint16(xCondIs64), 8419, 8435,
+ /*8419*/ uint16(xCondDataSize), 8423, 8429, 0,
+ /*8423*/ uint16(xSetOp), uint16(SUB),
+ /*8425*/ uint16(xReadSlashR),
+ /*8426*/ uint16(xArgR16),
+ /*8427*/ uint16(xArgRM16),
+ /*8428*/ uint16(xMatch),
+ /*8429*/ uint16(xSetOp), uint16(SUB),
+ /*8431*/ uint16(xReadSlashR),
+ /*8432*/ uint16(xArgR32),
+ /*8433*/ uint16(xArgRM32),
+ /*8434*/ uint16(xMatch),
+ /*8435*/ uint16(xCondDataSize), 8423, 8429, 8439,
+ /*8439*/ uint16(xSetOp), uint16(SUB),
+ /*8441*/ uint16(xReadSlashR),
+ /*8442*/ uint16(xArgR64),
+ /*8443*/ uint16(xArgRM64),
+ /*8444*/ uint16(xMatch),
+ /*8445*/ uint16(xSetOp), uint16(SUB),
+ /*8447*/ uint16(xReadIb),
+ /*8448*/ uint16(xArgAL),
+ /*8449*/ uint16(xArgImm8u),
+ /*8450*/ uint16(xMatch),
+ /*8451*/ uint16(xCondIs64), 8454, 8470,
+ /*8454*/ uint16(xCondDataSize), 8458, 8464, 0,
+ /*8458*/ uint16(xSetOp), uint16(SUB),
+ /*8460*/ uint16(xReadIw),
+ /*8461*/ uint16(xArgAX),
+ /*8462*/ uint16(xArgImm16),
+ /*8463*/ uint16(xMatch),
+ /*8464*/ uint16(xSetOp), uint16(SUB),
+ /*8466*/ uint16(xReadId),
+ /*8467*/ uint16(xArgEAX),
+ /*8468*/ uint16(xArgImm32),
+ /*8469*/ uint16(xMatch),
+ /*8470*/ uint16(xCondDataSize), 8458, 8464, 8474,
+ /*8474*/ uint16(xSetOp), uint16(SUB),
+ /*8476*/ uint16(xReadId),
+ /*8477*/ uint16(xArgRAX),
+ /*8478*/ uint16(xArgImm32),
+ /*8479*/ uint16(xMatch),
+ /*8480*/ uint16(xCondIs64), 8483, 0,
+ /*8483*/ uint16(xSetOp), uint16(DAS),
+ /*8485*/ uint16(xMatch),
+ /*8486*/ uint16(xSetOp), uint16(XOR),
+ /*8488*/ uint16(xReadSlashR),
+ /*8489*/ uint16(xArgRM8),
+ /*8490*/ uint16(xArgR8),
+ /*8491*/ uint16(xMatch),
+ /*8492*/ uint16(xCondIs64), 8495, 8511,
+ /*8495*/ uint16(xCondDataSize), 8499, 8505, 0,
+ /*8499*/ uint16(xSetOp), uint16(XOR),
+ /*8501*/ uint16(xReadSlashR),
+ /*8502*/ uint16(xArgRM16),
+ /*8503*/ uint16(xArgR16),
+ /*8504*/ uint16(xMatch),
+ /*8505*/ uint16(xSetOp), uint16(XOR),
+ /*8507*/ uint16(xReadSlashR),
+ /*8508*/ uint16(xArgRM32),
+ /*8509*/ uint16(xArgR32),
+ /*8510*/ uint16(xMatch),
+ /*8511*/ uint16(xCondDataSize), 8499, 8505, 8515,
+ /*8515*/ uint16(xSetOp), uint16(XOR),
+ /*8517*/ uint16(xReadSlashR),
+ /*8518*/ uint16(xArgRM64),
+ /*8519*/ uint16(xArgR64),
+ /*8520*/ uint16(xMatch),
+ /*8521*/ uint16(xSetOp), uint16(XOR),
+ /*8523*/ uint16(xReadSlashR),
+ /*8524*/ uint16(xArgR8),
+ /*8525*/ uint16(xArgRM8),
+ /*8526*/ uint16(xMatch),
+ /*8527*/ uint16(xCondIs64), 8530, 8546,
+ /*8530*/ uint16(xCondDataSize), 8534, 8540, 0,
+ /*8534*/ uint16(xSetOp), uint16(XOR),
+ /*8536*/ uint16(xReadSlashR),
+ /*8537*/ uint16(xArgR16),
+ /*8538*/ uint16(xArgRM16),
+ /*8539*/ uint16(xMatch),
+ /*8540*/ uint16(xSetOp), uint16(XOR),
+ /*8542*/ uint16(xReadSlashR),
+ /*8543*/ uint16(xArgR32),
+ /*8544*/ uint16(xArgRM32),
+ /*8545*/ uint16(xMatch),
+ /*8546*/ uint16(xCondDataSize), 8534, 8540, 8550,
+ /*8550*/ uint16(xSetOp), uint16(XOR),
+ /*8552*/ uint16(xReadSlashR),
+ /*8553*/ uint16(xArgR64),
+ /*8554*/ uint16(xArgRM64),
+ /*8555*/ uint16(xMatch),
+ /*8556*/ uint16(xSetOp), uint16(XOR),
+ /*8558*/ uint16(xReadIb),
+ /*8559*/ uint16(xArgAL),
+ /*8560*/ uint16(xArgImm8u),
+ /*8561*/ uint16(xMatch),
+ /*8562*/ uint16(xCondIs64), 8565, 8581,
+ /*8565*/ uint16(xCondDataSize), 8569, 8575, 0,
+ /*8569*/ uint16(xSetOp), uint16(XOR),
+ /*8571*/ uint16(xReadIw),
+ /*8572*/ uint16(xArgAX),
+ /*8573*/ uint16(xArgImm16),
+ /*8574*/ uint16(xMatch),
+ /*8575*/ uint16(xSetOp), uint16(XOR),
+ /*8577*/ uint16(xReadId),
+ /*8578*/ uint16(xArgEAX),
+ /*8579*/ uint16(xArgImm32),
+ /*8580*/ uint16(xMatch),
+ /*8581*/ uint16(xCondDataSize), 8569, 8575, 8585,
+ /*8585*/ uint16(xSetOp), uint16(XOR),
+ /*8587*/ uint16(xReadId),
+ /*8588*/ uint16(xArgRAX),
+ /*8589*/ uint16(xArgImm32),
+ /*8590*/ uint16(xMatch),
+ /*8591*/ uint16(xCondIs64), 8594, 0,
+ /*8594*/ uint16(xSetOp), uint16(AAA),
+ /*8596*/ uint16(xMatch),
+ /*8597*/ uint16(xSetOp), uint16(CMP),
+ /*8599*/ uint16(xReadSlashR),
+ /*8600*/ uint16(xArgRM8),
+ /*8601*/ uint16(xArgR8),
+ /*8602*/ uint16(xMatch),
+ /*8603*/ uint16(xCondIs64), 8606, 8622,
+ /*8606*/ uint16(xCondDataSize), 8610, 8616, 0,
+ /*8610*/ uint16(xSetOp), uint16(CMP),
+ /*8612*/ uint16(xReadSlashR),
+ /*8613*/ uint16(xArgRM16),
+ /*8614*/ uint16(xArgR16),
+ /*8615*/ uint16(xMatch),
+ /*8616*/ uint16(xSetOp), uint16(CMP),
+ /*8618*/ uint16(xReadSlashR),
+ /*8619*/ uint16(xArgRM32),
+ /*8620*/ uint16(xArgR32),
+ /*8621*/ uint16(xMatch),
+ /*8622*/ uint16(xCondDataSize), 8610, 8616, 8626,
+ /*8626*/ uint16(xSetOp), uint16(CMP),
+ /*8628*/ uint16(xReadSlashR),
+ /*8629*/ uint16(xArgRM64),
+ /*8630*/ uint16(xArgR64),
+ /*8631*/ uint16(xMatch),
+ /*8632*/ uint16(xSetOp), uint16(CMP),
+ /*8634*/ uint16(xReadSlashR),
+ /*8635*/ uint16(xArgR8),
+ /*8636*/ uint16(xArgRM8),
+ /*8637*/ uint16(xMatch),
+ /*8638*/ uint16(xCondIs64), 8641, 8657,
+ /*8641*/ uint16(xCondDataSize), 8645, 8651, 0,
+ /*8645*/ uint16(xSetOp), uint16(CMP),
+ /*8647*/ uint16(xReadSlashR),
+ /*8648*/ uint16(xArgR16),
+ /*8649*/ uint16(xArgRM16),
+ /*8650*/ uint16(xMatch),
+ /*8651*/ uint16(xSetOp), uint16(CMP),
+ /*8653*/ uint16(xReadSlashR),
+ /*8654*/ uint16(xArgR32),
+ /*8655*/ uint16(xArgRM32),
+ /*8656*/ uint16(xMatch),
+ /*8657*/ uint16(xCondDataSize), 8645, 8651, 8661,
+ /*8661*/ uint16(xSetOp), uint16(CMP),
+ /*8663*/ uint16(xReadSlashR),
+ /*8664*/ uint16(xArgR64),
+ /*8665*/ uint16(xArgRM64),
+ /*8666*/ uint16(xMatch),
+ /*8667*/ uint16(xSetOp), uint16(CMP),
+ /*8669*/ uint16(xReadIb),
+ /*8670*/ uint16(xArgAL),
+ /*8671*/ uint16(xArgImm8u),
+ /*8672*/ uint16(xMatch),
+ /*8673*/ uint16(xCondIs64), 8676, 8692,
+ /*8676*/ uint16(xCondDataSize), 8680, 8686, 0,
+ /*8680*/ uint16(xSetOp), uint16(CMP),
+ /*8682*/ uint16(xReadIw),
+ /*8683*/ uint16(xArgAX),
+ /*8684*/ uint16(xArgImm16),
+ /*8685*/ uint16(xMatch),
+ /*8686*/ uint16(xSetOp), uint16(CMP),
+ /*8688*/ uint16(xReadId),
+ /*8689*/ uint16(xArgEAX),
+ /*8690*/ uint16(xArgImm32),
+ /*8691*/ uint16(xMatch),
+ /*8692*/ uint16(xCondDataSize), 8680, 8686, 8696,
+ /*8696*/ uint16(xSetOp), uint16(CMP),
+ /*8698*/ uint16(xReadId),
+ /*8699*/ uint16(xArgRAX),
+ /*8700*/ uint16(xArgImm32),
+ /*8701*/ uint16(xMatch),
+ /*8702*/ uint16(xCondIs64), 8705, 0,
+ /*8705*/ uint16(xSetOp), uint16(AAS),
+ /*8707*/ uint16(xMatch),
+ /*8708*/ uint16(xCondIs64), 8711, 0,
+ /*8711*/ uint16(xCondDataSize), 8715, 8719, 0,
+ /*8715*/ uint16(xSetOp), uint16(INC),
+ /*8717*/ uint16(xArgR16op),
+ /*8718*/ uint16(xMatch),
+ /*8719*/ uint16(xSetOp), uint16(INC),
+ /*8721*/ uint16(xArgR32op),
+ /*8722*/ uint16(xMatch),
+ /*8723*/ uint16(xCondIs64), 8726, 0,
+ /*8726*/ uint16(xCondDataSize), 8730, 8734, 0,
+ /*8730*/ uint16(xSetOp), uint16(DEC),
+ /*8732*/ uint16(xArgR16op),
+ /*8733*/ uint16(xMatch),
+ /*8734*/ uint16(xSetOp), uint16(DEC),
+ /*8736*/ uint16(xArgR32op),
+ /*8737*/ uint16(xMatch),
+ /*8738*/ uint16(xCondIs64), 8741, 8753,
+ /*8741*/ uint16(xCondDataSize), 8745, 8749, 0,
+ /*8745*/ uint16(xSetOp), uint16(PUSH),
+ /*8747*/ uint16(xArgR16op),
+ /*8748*/ uint16(xMatch),
+ /*8749*/ uint16(xSetOp), uint16(PUSH),
+ /*8751*/ uint16(xArgR32op),
+ /*8752*/ uint16(xMatch),
+ /*8753*/ uint16(xCondDataSize), 8745, 8757, 8761,
+ /*8757*/ uint16(xSetOp), uint16(PUSH),
+ /*8759*/ uint16(xArgR64op),
+ /*8760*/ uint16(xMatch),
+ /*8761*/ uint16(xSetOp), uint16(PUSH),
+ /*8763*/ uint16(xArgR64op),
+ /*8764*/ uint16(xMatch),
+ /*8765*/ uint16(xCondIs64), 8768, 8780,
+ /*8768*/ uint16(xCondDataSize), 8772, 8776, 0,
+ /*8772*/ uint16(xSetOp), uint16(POP),
+ /*8774*/ uint16(xArgR16op),
+ /*8775*/ uint16(xMatch),
+ /*8776*/ uint16(xSetOp), uint16(POP),
+ /*8778*/ uint16(xArgR32op),
+ /*8779*/ uint16(xMatch),
+ /*8780*/ uint16(xCondDataSize), 8772, 8784, 8788,
+ /*8784*/ uint16(xSetOp), uint16(POP),
+ /*8786*/ uint16(xArgR64op),
+ /*8787*/ uint16(xMatch),
+ /*8788*/ uint16(xSetOp), uint16(POP),
+ /*8790*/ uint16(xArgR64op),
+ /*8791*/ uint16(xMatch),
+ /*8792*/ uint16(xCondIs64), 8795, 0,
+ /*8795*/ uint16(xCondDataSize), 8799, 8802, 0,
+ /*8799*/ uint16(xSetOp), uint16(PUSHA),
+ /*8801*/ uint16(xMatch),
+ /*8802*/ uint16(xSetOp), uint16(PUSHAD),
+ /*8804*/ uint16(xMatch),
+ /*8805*/ uint16(xCondIs64), 8808, 0,
+ /*8808*/ uint16(xCondDataSize), 8812, 8815, 0,
+ /*8812*/ uint16(xSetOp), uint16(POPA),
+ /*8814*/ uint16(xMatch),
+ /*8815*/ uint16(xSetOp), uint16(POPAD),
+ /*8817*/ uint16(xMatch),
+ /*8818*/ uint16(xCondIs64), 8821, 0,
+ /*8821*/ uint16(xCondDataSize), 8825, 8831, 0,
+ /*8825*/ uint16(xSetOp), uint16(BOUND),
+ /*8827*/ uint16(xReadSlashR),
+ /*8828*/ uint16(xArgR16),
+ /*8829*/ uint16(xArgM16and16),
+ /*8830*/ uint16(xMatch),
+ /*8831*/ uint16(xSetOp), uint16(BOUND),
+ /*8833*/ uint16(xReadSlashR),
+ /*8834*/ uint16(xArgR32),
+ /*8835*/ uint16(xArgM32and32),
+ /*8836*/ uint16(xMatch),
+ /*8837*/ uint16(xCondIs64), 8840, 8846,
+ /*8840*/ uint16(xSetOp), uint16(ARPL),
+ /*8842*/ uint16(xReadSlashR),
+ /*8843*/ uint16(xArgRM16),
+ /*8844*/ uint16(xArgR16),
+ /*8845*/ uint16(xMatch),
+ /*8846*/ uint16(xCondDataSize), 8850, 8856, 8862,
+ /*8850*/ uint16(xSetOp), uint16(MOVSXD),
+ /*8852*/ uint16(xReadSlashR),
+ /*8853*/ uint16(xArgR16),
+ /*8854*/ uint16(xArgRM32),
+ /*8855*/ uint16(xMatch),
+ /*8856*/ uint16(xSetOp), uint16(MOVSXD),
+ /*8858*/ uint16(xReadSlashR),
+ /*8859*/ uint16(xArgR32),
+ /*8860*/ uint16(xArgRM32),
+ /*8861*/ uint16(xMatch),
+ /*8862*/ uint16(xSetOp), uint16(MOVSXD),
+ /*8864*/ uint16(xReadSlashR),
+ /*8865*/ uint16(xArgR64),
+ /*8866*/ uint16(xArgRM32),
+ /*8867*/ uint16(xMatch),
+ /*8868*/ uint16(xCondDataSize), 8872, 8877, 8882,
+ /*8872*/ uint16(xSetOp), uint16(PUSH),
+ /*8874*/ uint16(xReadIw),
+ /*8875*/ uint16(xArgImm16),
+ /*8876*/ uint16(xMatch),
+ /*8877*/ uint16(xSetOp), uint16(PUSH),
+ /*8879*/ uint16(xReadId),
+ /*8880*/ uint16(xArgImm32),
+ /*8881*/ uint16(xMatch),
+ /*8882*/ uint16(xSetOp), uint16(PUSH),
+ /*8884*/ uint16(xReadId),
+ /*8885*/ uint16(xArgImm32),
+ /*8886*/ uint16(xMatch),
+ /*8887*/ uint16(xCondIs64), 8890, 8910,
+ /*8890*/ uint16(xCondDataSize), 8894, 8902, 0,
+ /*8894*/ uint16(xSetOp), uint16(IMUL),
+ /*8896*/ uint16(xReadSlashR),
+ /*8897*/ uint16(xReadIw),
+ /*8898*/ uint16(xArgR16),
+ /*8899*/ uint16(xArgRM16),
+ /*8900*/ uint16(xArgImm16),
+ /*8901*/ uint16(xMatch),
+ /*8902*/ uint16(xSetOp), uint16(IMUL),
+ /*8904*/ uint16(xReadSlashR),
+ /*8905*/ uint16(xReadId),
+ /*8906*/ uint16(xArgR32),
+ /*8907*/ uint16(xArgRM32),
+ /*8908*/ uint16(xArgImm32),
+ /*8909*/ uint16(xMatch),
+ /*8910*/ uint16(xCondDataSize), 8894, 8902, 8914,
+ /*8914*/ uint16(xSetOp), uint16(IMUL),
+ /*8916*/ uint16(xReadSlashR),
+ /*8917*/ uint16(xReadId),
+ /*8918*/ uint16(xArgR64),
+ /*8919*/ uint16(xArgRM64),
+ /*8920*/ uint16(xArgImm32),
+ /*8921*/ uint16(xMatch),
+ /*8922*/ uint16(xSetOp), uint16(PUSH),
+ /*8924*/ uint16(xReadIb),
+ /*8925*/ uint16(xArgImm8),
+ /*8926*/ uint16(xMatch),
+ /*8927*/ uint16(xCondIs64), 8930, 8950,
+ /*8930*/ uint16(xCondDataSize), 8934, 8942, 0,
+ /*8934*/ uint16(xSetOp), uint16(IMUL),
+ /*8936*/ uint16(xReadSlashR),
+ /*8937*/ uint16(xReadIb),
+ /*8938*/ uint16(xArgR16),
+ /*8939*/ uint16(xArgRM16),
+ /*8940*/ uint16(xArgImm8),
+ /*8941*/ uint16(xMatch),
+ /*8942*/ uint16(xSetOp), uint16(IMUL),
+ /*8944*/ uint16(xReadSlashR),
+ /*8945*/ uint16(xReadIb),
+ /*8946*/ uint16(xArgR32),
+ /*8947*/ uint16(xArgRM32),
+ /*8948*/ uint16(xArgImm8),
+ /*8949*/ uint16(xMatch),
+ /*8950*/ uint16(xCondDataSize), 8934, 8942, 8954,
+ /*8954*/ uint16(xSetOp), uint16(IMUL),
+ /*8956*/ uint16(xReadSlashR),
+ /*8957*/ uint16(xReadIb),
+ /*8958*/ uint16(xArgR64),
+ /*8959*/ uint16(xArgRM64),
+ /*8960*/ uint16(xArgImm8),
+ /*8961*/ uint16(xMatch),
+ /*8962*/ uint16(xSetOp), uint16(INSB),
+ /*8964*/ uint16(xMatch),
+ /*8965*/ uint16(xCondDataSize), 8969, 8972, 8975,
+ /*8969*/ uint16(xSetOp), uint16(INSW),
+ /*8971*/ uint16(xMatch),
+ /*8972*/ uint16(xSetOp), uint16(INSD),
+ /*8974*/ uint16(xMatch),
+ /*8975*/ uint16(xSetOp), uint16(INSD),
+ /*8977*/ uint16(xMatch),
+ /*8978*/ uint16(xSetOp), uint16(OUTSB),
+ /*8980*/ uint16(xMatch),
+ /*8981*/ uint16(xCondDataSize), 8985, 8988, 8991,
+ /*8985*/ uint16(xSetOp), uint16(OUTSW),
+ /*8987*/ uint16(xMatch),
+ /*8988*/ uint16(xSetOp), uint16(OUTSD),
+ /*8990*/ uint16(xMatch),
+ /*8991*/ uint16(xSetOp), uint16(OUTSD),
+ /*8993*/ uint16(xMatch),
+ /*8994*/ uint16(xSetOp), uint16(JO),
+ /*8996*/ uint16(xReadCb),
+ /*8997*/ uint16(xArgRel8),
+ /*8998*/ uint16(xMatch),
+ /*8999*/ uint16(xSetOp), uint16(JNO),
+ /*9001*/ uint16(xReadCb),
+ /*9002*/ uint16(xArgRel8),
+ /*9003*/ uint16(xMatch),
+ /*9004*/ uint16(xSetOp), uint16(JB),
+ /*9006*/ uint16(xReadCb),
+ /*9007*/ uint16(xArgRel8),
+ /*9008*/ uint16(xMatch),
+ /*9009*/ uint16(xSetOp), uint16(JAE),
+ /*9011*/ uint16(xReadCb),
+ /*9012*/ uint16(xArgRel8),
+ /*9013*/ uint16(xMatch),
+ /*9014*/ uint16(xSetOp), uint16(JE),
+ /*9016*/ uint16(xReadCb),
+ /*9017*/ uint16(xArgRel8),
+ /*9018*/ uint16(xMatch),
+ /*9019*/ uint16(xSetOp), uint16(JNE),
+ /*9021*/ uint16(xReadCb),
+ /*9022*/ uint16(xArgRel8),
+ /*9023*/ uint16(xMatch),
+ /*9024*/ uint16(xSetOp), uint16(JBE),
+ /*9026*/ uint16(xReadCb),
+ /*9027*/ uint16(xArgRel8),
+ /*9028*/ uint16(xMatch),
+ /*9029*/ uint16(xSetOp), uint16(JA),
+ /*9031*/ uint16(xReadCb),
+ /*9032*/ uint16(xArgRel8),
+ /*9033*/ uint16(xMatch),
+ /*9034*/ uint16(xSetOp), uint16(JS),
+ /*9036*/ uint16(xReadCb),
+ /*9037*/ uint16(xArgRel8),
+ /*9038*/ uint16(xMatch),
+ /*9039*/ uint16(xSetOp), uint16(JNS),
+ /*9041*/ uint16(xReadCb),
+ /*9042*/ uint16(xArgRel8),
+ /*9043*/ uint16(xMatch),
+ /*9044*/ uint16(xSetOp), uint16(JP),
+ /*9046*/ uint16(xReadCb),
+ /*9047*/ uint16(xArgRel8),
+ /*9048*/ uint16(xMatch),
+ /*9049*/ uint16(xSetOp), uint16(JNP),
+ /*9051*/ uint16(xReadCb),
+ /*9052*/ uint16(xArgRel8),
+ /*9053*/ uint16(xMatch),
+ /*9054*/ uint16(xSetOp), uint16(JL),
+ /*9056*/ uint16(xReadCb),
+ /*9057*/ uint16(xArgRel8),
+ /*9058*/ uint16(xMatch),
+ /*9059*/ uint16(xSetOp), uint16(JGE),
+ /*9061*/ uint16(xReadCb),
+ /*9062*/ uint16(xArgRel8),
+ /*9063*/ uint16(xMatch),
+ /*9064*/ uint16(xSetOp), uint16(JLE),
+ /*9066*/ uint16(xReadCb),
+ /*9067*/ uint16(xArgRel8),
+ /*9068*/ uint16(xMatch),
+ /*9069*/ uint16(xSetOp), uint16(JG),
+ /*9071*/ uint16(xReadCb),
+ /*9072*/ uint16(xArgRel8),
+ /*9073*/ uint16(xMatch),
+ /*9074*/ uint16(xCondSlashR),
+ 9083, // 0
+ 9089, // 1
+ 9095, // 2
+ 9101, // 3
+ 9107, // 4
+ 9113, // 5
+ 9119, // 6
+ 9125, // 7
+ /*9083*/ uint16(xSetOp), uint16(ADD),
+ /*9085*/ uint16(xReadIb),
+ /*9086*/ uint16(xArgRM8),
+ /*9087*/ uint16(xArgImm8u),
+ /*9088*/ uint16(xMatch),
+ /*9089*/ uint16(xSetOp), uint16(OR),
+ /*9091*/ uint16(xReadIb),
+ /*9092*/ uint16(xArgRM8),
+ /*9093*/ uint16(xArgImm8u),
+ /*9094*/ uint16(xMatch),
+ /*9095*/ uint16(xSetOp), uint16(ADC),
+ /*9097*/ uint16(xReadIb),
+ /*9098*/ uint16(xArgRM8),
+ /*9099*/ uint16(xArgImm8u),
+ /*9100*/ uint16(xMatch),
+ /*9101*/ uint16(xSetOp), uint16(SBB),
+ /*9103*/ uint16(xReadIb),
+ /*9104*/ uint16(xArgRM8),
+ /*9105*/ uint16(xArgImm8u),
+ /*9106*/ uint16(xMatch),
+ /*9107*/ uint16(xSetOp), uint16(AND),
+ /*9109*/ uint16(xReadIb),
+ /*9110*/ uint16(xArgRM8),
+ /*9111*/ uint16(xArgImm8u),
+ /*9112*/ uint16(xMatch),
+ /*9113*/ uint16(xSetOp), uint16(SUB),
+ /*9115*/ uint16(xReadIb),
+ /*9116*/ uint16(xArgRM8),
+ /*9117*/ uint16(xArgImm8u),
+ /*9118*/ uint16(xMatch),
+ /*9119*/ uint16(xSetOp), uint16(XOR),
+ /*9121*/ uint16(xReadIb),
+ /*9122*/ uint16(xArgRM8),
+ /*9123*/ uint16(xArgImm8u),
+ /*9124*/ uint16(xMatch),
+ /*9125*/ uint16(xSetOp), uint16(CMP),
+ /*9127*/ uint16(xReadIb),
+ /*9128*/ uint16(xArgRM8),
+ /*9129*/ uint16(xArgImm8u),
+ /*9130*/ uint16(xMatch),
+ /*9131*/ uint16(xCondSlashR),
+ 9140, // 0
+ 9169, // 1
+ 9198, // 2
+ 9227, // 3
+ 9256, // 4
+ 9285, // 5
+ 9314, // 6
+ 9343, // 7
+ /*9140*/ uint16(xCondIs64), 9143, 9159,
+ /*9143*/ uint16(xCondDataSize), 9147, 9153, 0,
+ /*9147*/ uint16(xSetOp), uint16(ADD),
+ /*9149*/ uint16(xReadIw),
+ /*9150*/ uint16(xArgRM16),
+ /*9151*/ uint16(xArgImm16),
+ /*9152*/ uint16(xMatch),
+ /*9153*/ uint16(xSetOp), uint16(ADD),
+ /*9155*/ uint16(xReadId),
+ /*9156*/ uint16(xArgRM32),
+ /*9157*/ uint16(xArgImm32),
+ /*9158*/ uint16(xMatch),
+ /*9159*/ uint16(xCondDataSize), 9147, 9153, 9163,
+ /*9163*/ uint16(xSetOp), uint16(ADD),
+ /*9165*/ uint16(xReadId),
+ /*9166*/ uint16(xArgRM64),
+ /*9167*/ uint16(xArgImm32),
+ /*9168*/ uint16(xMatch),
+ /*9169*/ uint16(xCondIs64), 9172, 9188,
+ /*9172*/ uint16(xCondDataSize), 9176, 9182, 0,
+ /*9176*/ uint16(xSetOp), uint16(OR),
+ /*9178*/ uint16(xReadIw),
+ /*9179*/ uint16(xArgRM16),
+ /*9180*/ uint16(xArgImm16),
+ /*9181*/ uint16(xMatch),
+ /*9182*/ uint16(xSetOp), uint16(OR),
+ /*9184*/ uint16(xReadId),
+ /*9185*/ uint16(xArgRM32),
+ /*9186*/ uint16(xArgImm32),
+ /*9187*/ uint16(xMatch),
+ /*9188*/ uint16(xCondDataSize), 9176, 9182, 9192,
+ /*9192*/ uint16(xSetOp), uint16(OR),
+ /*9194*/ uint16(xReadId),
+ /*9195*/ uint16(xArgRM64),
+ /*9196*/ uint16(xArgImm32),
+ /*9197*/ uint16(xMatch),
+ /*9198*/ uint16(xCondIs64), 9201, 9217,
+ /*9201*/ uint16(xCondDataSize), 9205, 9211, 0,
+ /*9205*/ uint16(xSetOp), uint16(ADC),
+ /*9207*/ uint16(xReadIw),
+ /*9208*/ uint16(xArgRM16),
+ /*9209*/ uint16(xArgImm16),
+ /*9210*/ uint16(xMatch),
+ /*9211*/ uint16(xSetOp), uint16(ADC),
+ /*9213*/ uint16(xReadId),
+ /*9214*/ uint16(xArgRM32),
+ /*9215*/ uint16(xArgImm32),
+ /*9216*/ uint16(xMatch),
+ /*9217*/ uint16(xCondDataSize), 9205, 9211, 9221,
+ /*9221*/ uint16(xSetOp), uint16(ADC),
+ /*9223*/ uint16(xReadId),
+ /*9224*/ uint16(xArgRM64),
+ /*9225*/ uint16(xArgImm32),
+ /*9226*/ uint16(xMatch),
+ /*9227*/ uint16(xCondIs64), 9230, 9246,
+ /*9230*/ uint16(xCondDataSize), 9234, 9240, 0,
+ /*9234*/ uint16(xSetOp), uint16(SBB),
+ /*9236*/ uint16(xReadIw),
+ /*9237*/ uint16(xArgRM16),
+ /*9238*/ uint16(xArgImm16),
+ /*9239*/ uint16(xMatch),
+ /*9240*/ uint16(xSetOp), uint16(SBB),
+ /*9242*/ uint16(xReadId),
+ /*9243*/ uint16(xArgRM32),
+ /*9244*/ uint16(xArgImm32),
+ /*9245*/ uint16(xMatch),
+ /*9246*/ uint16(xCondDataSize), 9234, 9240, 9250,
+ /*9250*/ uint16(xSetOp), uint16(SBB),
+ /*9252*/ uint16(xReadId),
+ /*9253*/ uint16(xArgRM64),
+ /*9254*/ uint16(xArgImm32),
+ /*9255*/ uint16(xMatch),
+ /*9256*/ uint16(xCondIs64), 9259, 9275,
+ /*9259*/ uint16(xCondDataSize), 9263, 9269, 0,
+ /*9263*/ uint16(xSetOp), uint16(AND),
+ /*9265*/ uint16(xReadIw),
+ /*9266*/ uint16(xArgRM16),
+ /*9267*/ uint16(xArgImm16),
+ /*9268*/ uint16(xMatch),
+ /*9269*/ uint16(xSetOp), uint16(AND),
+ /*9271*/ uint16(xReadId),
+ /*9272*/ uint16(xArgRM32),
+ /*9273*/ uint16(xArgImm32),
+ /*9274*/ uint16(xMatch),
+ /*9275*/ uint16(xCondDataSize), 9263, 9269, 9279,
+ /*9279*/ uint16(xSetOp), uint16(AND),
+ /*9281*/ uint16(xReadId),
+ /*9282*/ uint16(xArgRM64),
+ /*9283*/ uint16(xArgImm32),
+ /*9284*/ uint16(xMatch),
+ /*9285*/ uint16(xCondIs64), 9288, 9304,
+ /*9288*/ uint16(xCondDataSize), 9292, 9298, 0,
+ /*9292*/ uint16(xSetOp), uint16(SUB),
+ /*9294*/ uint16(xReadIw),
+ /*9295*/ uint16(xArgRM16),
+ /*9296*/ uint16(xArgImm16),
+ /*9297*/ uint16(xMatch),
+ /*9298*/ uint16(xSetOp), uint16(SUB),
+ /*9300*/ uint16(xReadId),
+ /*9301*/ uint16(xArgRM32),
+ /*9302*/ uint16(xArgImm32),
+ /*9303*/ uint16(xMatch),
+ /*9304*/ uint16(xCondDataSize), 9292, 9298, 9308,
+ /*9308*/ uint16(xSetOp), uint16(SUB),
+ /*9310*/ uint16(xReadId),
+ /*9311*/ uint16(xArgRM64),
+ /*9312*/ uint16(xArgImm32),
+ /*9313*/ uint16(xMatch),
+ /*9314*/ uint16(xCondIs64), 9317, 9333,
+ /*9317*/ uint16(xCondDataSize), 9321, 9327, 0,
+ /*9321*/ uint16(xSetOp), uint16(XOR),
+ /*9323*/ uint16(xReadIw),
+ /*9324*/ uint16(xArgRM16),
+ /*9325*/ uint16(xArgImm16),
+ /*9326*/ uint16(xMatch),
+ /*9327*/ uint16(xSetOp), uint16(XOR),
+ /*9329*/ uint16(xReadId),
+ /*9330*/ uint16(xArgRM32),
+ /*9331*/ uint16(xArgImm32),
+ /*9332*/ uint16(xMatch),
+ /*9333*/ uint16(xCondDataSize), 9321, 9327, 9337,
+ /*9337*/ uint16(xSetOp), uint16(XOR),
+ /*9339*/ uint16(xReadId),
+ /*9340*/ uint16(xArgRM64),
+ /*9341*/ uint16(xArgImm32),
+ /*9342*/ uint16(xMatch),
+ /*9343*/ uint16(xCondIs64), 9346, 9362,
+ /*9346*/ uint16(xCondDataSize), 9350, 9356, 0,
+ /*9350*/ uint16(xSetOp), uint16(CMP),
+ /*9352*/ uint16(xReadIw),
+ /*9353*/ uint16(xArgRM16),
+ /*9354*/ uint16(xArgImm16),
+ /*9355*/ uint16(xMatch),
+ /*9356*/ uint16(xSetOp), uint16(CMP),
+ /*9358*/ uint16(xReadId),
+ /*9359*/ uint16(xArgRM32),
+ /*9360*/ uint16(xArgImm32),
+ /*9361*/ uint16(xMatch),
+ /*9362*/ uint16(xCondDataSize), 9350, 9356, 9366,
+ /*9366*/ uint16(xSetOp), uint16(CMP),
+ /*9368*/ uint16(xReadId),
+ /*9369*/ uint16(xArgRM64),
+ /*9370*/ uint16(xArgImm32),
+ /*9371*/ uint16(xMatch),
+ /*9372*/ uint16(xCondSlashR),
+ 9381, // 0
+ 9410, // 1
+ 9439, // 2
+ 9468, // 3
+ 9497, // 4
+ 9526, // 5
+ 9555, // 6
+ 9584, // 7
+ /*9381*/ uint16(xCondIs64), 9384, 9400,
+ /*9384*/ uint16(xCondDataSize), 9388, 9394, 0,
+ /*9388*/ uint16(xSetOp), uint16(ADD),
+ /*9390*/ uint16(xReadIb),
+ /*9391*/ uint16(xArgRM16),
+ /*9392*/ uint16(xArgImm8),
+ /*9393*/ uint16(xMatch),
+ /*9394*/ uint16(xSetOp), uint16(ADD),
+ /*9396*/ uint16(xReadIb),
+ /*9397*/ uint16(xArgRM32),
+ /*9398*/ uint16(xArgImm8),
+ /*9399*/ uint16(xMatch),
+ /*9400*/ uint16(xCondDataSize), 9388, 9394, 9404,
+ /*9404*/ uint16(xSetOp), uint16(ADD),
+ /*9406*/ uint16(xReadIb),
+ /*9407*/ uint16(xArgRM64),
+ /*9408*/ uint16(xArgImm8),
+ /*9409*/ uint16(xMatch),
+ /*9410*/ uint16(xCondIs64), 9413, 9429,
+ /*9413*/ uint16(xCondDataSize), 9417, 9423, 0,
+ /*9417*/ uint16(xSetOp), uint16(OR),
+ /*9419*/ uint16(xReadIb),
+ /*9420*/ uint16(xArgRM16),
+ /*9421*/ uint16(xArgImm8),
+ /*9422*/ uint16(xMatch),
+ /*9423*/ uint16(xSetOp), uint16(OR),
+ /*9425*/ uint16(xReadIb),
+ /*9426*/ uint16(xArgRM32),
+ /*9427*/ uint16(xArgImm8),
+ /*9428*/ uint16(xMatch),
+ /*9429*/ uint16(xCondDataSize), 9417, 9423, 9433,
+ /*9433*/ uint16(xSetOp), uint16(OR),
+ /*9435*/ uint16(xReadIb),
+ /*9436*/ uint16(xArgRM64),
+ /*9437*/ uint16(xArgImm8),
+ /*9438*/ uint16(xMatch),
+ /*9439*/ uint16(xCondIs64), 9442, 9458,
+ /*9442*/ uint16(xCondDataSize), 9446, 9452, 0,
+ /*9446*/ uint16(xSetOp), uint16(ADC),
+ /*9448*/ uint16(xReadIb),
+ /*9449*/ uint16(xArgRM16),
+ /*9450*/ uint16(xArgImm8),
+ /*9451*/ uint16(xMatch),
+ /*9452*/ uint16(xSetOp), uint16(ADC),
+ /*9454*/ uint16(xReadIb),
+ /*9455*/ uint16(xArgRM32),
+ /*9456*/ uint16(xArgImm8),
+ /*9457*/ uint16(xMatch),
+ /*9458*/ uint16(xCondDataSize), 9446, 9452, 9462,
+ /*9462*/ uint16(xSetOp), uint16(ADC),
+ /*9464*/ uint16(xReadIb),
+ /*9465*/ uint16(xArgRM64),
+ /*9466*/ uint16(xArgImm8),
+ /*9467*/ uint16(xMatch),
+ /*9468*/ uint16(xCondIs64), 9471, 9487,
+ /*9471*/ uint16(xCondDataSize), 9475, 9481, 0,
+ /*9475*/ uint16(xSetOp), uint16(SBB),
+ /*9477*/ uint16(xReadIb),
+ /*9478*/ uint16(xArgRM16),
+ /*9479*/ uint16(xArgImm8),
+ /*9480*/ uint16(xMatch),
+ /*9481*/ uint16(xSetOp), uint16(SBB),
+ /*9483*/ uint16(xReadIb),
+ /*9484*/ uint16(xArgRM32),
+ /*9485*/ uint16(xArgImm8),
+ /*9486*/ uint16(xMatch),
+ /*9487*/ uint16(xCondDataSize), 9475, 9481, 9491,
+ /*9491*/ uint16(xSetOp), uint16(SBB),
+ /*9493*/ uint16(xReadIb),
+ /*9494*/ uint16(xArgRM64),
+ /*9495*/ uint16(xArgImm8),
+ /*9496*/ uint16(xMatch),
+ /*9497*/ uint16(xCondIs64), 9500, 9516,
+ /*9500*/ uint16(xCondDataSize), 9504, 9510, 0,
+ /*9504*/ uint16(xSetOp), uint16(AND),
+ /*9506*/ uint16(xReadIb),
+ /*9507*/ uint16(xArgRM16),
+ /*9508*/ uint16(xArgImm8),
+ /*9509*/ uint16(xMatch),
+ /*9510*/ uint16(xSetOp), uint16(AND),
+ /*9512*/ uint16(xReadIb),
+ /*9513*/ uint16(xArgRM32),
+ /*9514*/ uint16(xArgImm8),
+ /*9515*/ uint16(xMatch),
+ /*9516*/ uint16(xCondDataSize), 9504, 9510, 9520,
+ /*9520*/ uint16(xSetOp), uint16(AND),
+ /*9522*/ uint16(xReadIb),
+ /*9523*/ uint16(xArgRM64),
+ /*9524*/ uint16(xArgImm8),
+ /*9525*/ uint16(xMatch),
+ /*9526*/ uint16(xCondIs64), 9529, 9545,
+ /*9529*/ uint16(xCondDataSize), 9533, 9539, 0,
+ /*9533*/ uint16(xSetOp), uint16(SUB),
+ /*9535*/ uint16(xReadIb),
+ /*9536*/ uint16(xArgRM16),
+ /*9537*/ uint16(xArgImm8),
+ /*9538*/ uint16(xMatch),
+ /*9539*/ uint16(xSetOp), uint16(SUB),
+ /*9541*/ uint16(xReadIb),
+ /*9542*/ uint16(xArgRM32),
+ /*9543*/ uint16(xArgImm8),
+ /*9544*/ uint16(xMatch),
+ /*9545*/ uint16(xCondDataSize), 9533, 9539, 9549,
+ /*9549*/ uint16(xSetOp), uint16(SUB),
+ /*9551*/ uint16(xReadIb),
+ /*9552*/ uint16(xArgRM64),
+ /*9553*/ uint16(xArgImm8),
+ /*9554*/ uint16(xMatch),
+ /*9555*/ uint16(xCondIs64), 9558, 9574,
+ /*9558*/ uint16(xCondDataSize), 9562, 9568, 0,
+ /*9562*/ uint16(xSetOp), uint16(XOR),
+ /*9564*/ uint16(xReadIb),
+ /*9565*/ uint16(xArgRM16),
+ /*9566*/ uint16(xArgImm8),
+ /*9567*/ uint16(xMatch),
+ /*9568*/ uint16(xSetOp), uint16(XOR),
+ /*9570*/ uint16(xReadIb),
+ /*9571*/ uint16(xArgRM32),
+ /*9572*/ uint16(xArgImm8),
+ /*9573*/ uint16(xMatch),
+ /*9574*/ uint16(xCondDataSize), 9562, 9568, 9578,
+ /*9578*/ uint16(xSetOp), uint16(XOR),
+ /*9580*/ uint16(xReadIb),
+ /*9581*/ uint16(xArgRM64),
+ /*9582*/ uint16(xArgImm8),
+ /*9583*/ uint16(xMatch),
+ /*9584*/ uint16(xCondIs64), 9587, 9603,
+ /*9587*/ uint16(xCondDataSize), 9591, 9597, 0,
+ /*9591*/ uint16(xSetOp), uint16(CMP),
+ /*9593*/ uint16(xReadIb),
+ /*9594*/ uint16(xArgRM16),
+ /*9595*/ uint16(xArgImm8),
+ /*9596*/ uint16(xMatch),
+ /*9597*/ uint16(xSetOp), uint16(CMP),
+ /*9599*/ uint16(xReadIb),
+ /*9600*/ uint16(xArgRM32),
+ /*9601*/ uint16(xArgImm8),
+ /*9602*/ uint16(xMatch),
+ /*9603*/ uint16(xCondDataSize), 9591, 9597, 9607,
+ /*9607*/ uint16(xSetOp), uint16(CMP),
+ /*9609*/ uint16(xReadIb),
+ /*9610*/ uint16(xArgRM64),
+ /*9611*/ uint16(xArgImm8),
+ /*9612*/ uint16(xMatch),
+ /*9613*/ uint16(xSetOp), uint16(TEST),
+ /*9615*/ uint16(xReadSlashR),
+ /*9616*/ uint16(xArgRM8),
+ /*9617*/ uint16(xArgR8),
+ /*9618*/ uint16(xMatch),
+ /*9619*/ uint16(xCondIs64), 9622, 9638,
+ /*9622*/ uint16(xCondDataSize), 9626, 9632, 0,
+ /*9626*/ uint16(xSetOp), uint16(TEST),
+ /*9628*/ uint16(xReadSlashR),
+ /*9629*/ uint16(xArgRM16),
+ /*9630*/ uint16(xArgR16),
+ /*9631*/ uint16(xMatch),
+ /*9632*/ uint16(xSetOp), uint16(TEST),
+ /*9634*/ uint16(xReadSlashR),
+ /*9635*/ uint16(xArgRM32),
+ /*9636*/ uint16(xArgR32),
+ /*9637*/ uint16(xMatch),
+ /*9638*/ uint16(xCondDataSize), 9626, 9632, 9642,
+ /*9642*/ uint16(xSetOp), uint16(TEST),
+ /*9644*/ uint16(xReadSlashR),
+ /*9645*/ uint16(xArgRM64),
+ /*9646*/ uint16(xArgR64),
+ /*9647*/ uint16(xMatch),
+ /*9648*/ uint16(xSetOp), uint16(XCHG),
+ /*9650*/ uint16(xReadSlashR),
+ /*9651*/ uint16(xArgRM8),
+ /*9652*/ uint16(xArgR8),
+ /*9653*/ uint16(xMatch),
+ /*9654*/ uint16(xCondIs64), 9657, 9673,
+ /*9657*/ uint16(xCondDataSize), 9661, 9667, 0,
+ /*9661*/ uint16(xSetOp), uint16(XCHG),
+ /*9663*/ uint16(xReadSlashR),
+ /*9664*/ uint16(xArgRM16),
+ /*9665*/ uint16(xArgR16),
+ /*9666*/ uint16(xMatch),
+ /*9667*/ uint16(xSetOp), uint16(XCHG),
+ /*9669*/ uint16(xReadSlashR),
+ /*9670*/ uint16(xArgRM32),
+ /*9671*/ uint16(xArgR32),
+ /*9672*/ uint16(xMatch),
+ /*9673*/ uint16(xCondDataSize), 9661, 9667, 9677,
+ /*9677*/ uint16(xSetOp), uint16(XCHG),
+ /*9679*/ uint16(xReadSlashR),
+ /*9680*/ uint16(xArgRM64),
+ /*9681*/ uint16(xArgR64),
+ /*9682*/ uint16(xMatch),
+ /*9683*/ uint16(xSetOp), uint16(MOV),
+ /*9685*/ uint16(xReadSlashR),
+ /*9686*/ uint16(xArgRM8),
+ /*9687*/ uint16(xArgR8),
+ /*9688*/ uint16(xMatch),
+ /*9689*/ uint16(xCondDataSize), 9693, 9699, 9705,
+ /*9693*/ uint16(xSetOp), uint16(MOV),
+ /*9695*/ uint16(xReadSlashR),
+ /*9696*/ uint16(xArgRM16),
+ /*9697*/ uint16(xArgR16),
+ /*9698*/ uint16(xMatch),
+ /*9699*/ uint16(xSetOp), uint16(MOV),
+ /*9701*/ uint16(xReadSlashR),
+ /*9702*/ uint16(xArgRM32),
+ /*9703*/ uint16(xArgR32),
+ /*9704*/ uint16(xMatch),
+ /*9705*/ uint16(xSetOp), uint16(MOV),
+ /*9707*/ uint16(xReadSlashR),
+ /*9708*/ uint16(xArgRM64),
+ /*9709*/ uint16(xArgR64),
+ /*9710*/ uint16(xMatch),
+ /*9711*/ uint16(xSetOp), uint16(MOV),
+ /*9713*/ uint16(xReadSlashR),
+ /*9714*/ uint16(xArgR8),
+ /*9715*/ uint16(xArgRM8),
+ /*9716*/ uint16(xMatch),
+ /*9717*/ uint16(xCondDataSize), 9721, 9727, 9733,
+ /*9721*/ uint16(xSetOp), uint16(MOV),
+ /*9723*/ uint16(xReadSlashR),
+ /*9724*/ uint16(xArgR16),
+ /*9725*/ uint16(xArgRM16),
+ /*9726*/ uint16(xMatch),
+ /*9727*/ uint16(xSetOp), uint16(MOV),
+ /*9729*/ uint16(xReadSlashR),
+ /*9730*/ uint16(xArgR32),
+ /*9731*/ uint16(xArgRM32),
+ /*9732*/ uint16(xMatch),
+ /*9733*/ uint16(xSetOp), uint16(MOV),
+ /*9735*/ uint16(xReadSlashR),
+ /*9736*/ uint16(xArgR64),
+ /*9737*/ uint16(xArgRM64),
+ /*9738*/ uint16(xMatch),
+ /*9739*/ uint16(xCondIs64), 9742, 9758,
+ /*9742*/ uint16(xCondDataSize), 9746, 9752, 0,
+ /*9746*/ uint16(xSetOp), uint16(MOV),
+ /*9748*/ uint16(xReadSlashR),
+ /*9749*/ uint16(xArgRM16),
+ /*9750*/ uint16(xArgSreg),
+ /*9751*/ uint16(xMatch),
+ /*9752*/ uint16(xSetOp), uint16(MOV),
+ /*9754*/ uint16(xReadSlashR),
+ /*9755*/ uint16(xArgR32M16),
+ /*9756*/ uint16(xArgSreg),
+ /*9757*/ uint16(xMatch),
+ /*9758*/ uint16(xCondDataSize), 9746, 9752, 9762,
+ /*9762*/ uint16(xSetOp), uint16(MOV),
+ /*9764*/ uint16(xReadSlashR),
+ /*9765*/ uint16(xArgR64M16),
+ /*9766*/ uint16(xArgSreg),
+ /*9767*/ uint16(xMatch),
+ /*9768*/ uint16(xCondIs64), 9771, 9787,
+ /*9771*/ uint16(xCondDataSize), 9775, 9781, 0,
+ /*9775*/ uint16(xSetOp), uint16(LEA),
+ /*9777*/ uint16(xReadSlashR),
+ /*9778*/ uint16(xArgR16),
+ /*9779*/ uint16(xArgM),
+ /*9780*/ uint16(xMatch),
+ /*9781*/ uint16(xSetOp), uint16(LEA),
+ /*9783*/ uint16(xReadSlashR),
+ /*9784*/ uint16(xArgR32),
+ /*9785*/ uint16(xArgM),
+ /*9786*/ uint16(xMatch),
+ /*9787*/ uint16(xCondDataSize), 9775, 9781, 9791,
+ /*9791*/ uint16(xSetOp), uint16(LEA),
+ /*9793*/ uint16(xReadSlashR),
+ /*9794*/ uint16(xArgR64),
+ /*9795*/ uint16(xArgM),
+ /*9796*/ uint16(xMatch),
+ /*9797*/ uint16(xCondIs64), 9800, 9816,
+ /*9800*/ uint16(xCondDataSize), 9804, 9810, 0,
+ /*9804*/ uint16(xSetOp), uint16(MOV),
+ /*9806*/ uint16(xReadSlashR),
+ /*9807*/ uint16(xArgSreg),
+ /*9808*/ uint16(xArgRM16),
+ /*9809*/ uint16(xMatch),
+ /*9810*/ uint16(xSetOp), uint16(MOV),
+ /*9812*/ uint16(xReadSlashR),
+ /*9813*/ uint16(xArgSreg),
+ /*9814*/ uint16(xArgR32M16),
+ /*9815*/ uint16(xMatch),
+ /*9816*/ uint16(xCondDataSize), 9804, 9810, 9820,
+ /*9820*/ uint16(xSetOp), uint16(MOV),
+ /*9822*/ uint16(xReadSlashR),
+ /*9823*/ uint16(xArgSreg),
+ /*9824*/ uint16(xArgR64M16),
+ /*9825*/ uint16(xMatch),
+ /*9826*/ uint16(xCondSlashR),
+ 9835, // 0
+ 0, // 1
+ 0, // 2
+ 0, // 3
+ 0, // 4
+ 0, // 5
+ 0, // 6
+ 0, // 7
+ /*9835*/ uint16(xCondIs64), 9838, 9850,
+ /*9838*/ uint16(xCondDataSize), 9842, 9846, 0,
+ /*9842*/ uint16(xSetOp), uint16(POP),
+ /*9844*/ uint16(xArgRM16),
+ /*9845*/ uint16(xMatch),
+ /*9846*/ uint16(xSetOp), uint16(POP),
+ /*9848*/ uint16(xArgRM32),
+ /*9849*/ uint16(xMatch),
+ /*9850*/ uint16(xCondDataSize), 9842, 9854, 9858,
+ /*9854*/ uint16(xSetOp), uint16(POP),
+ /*9856*/ uint16(xArgRM64),
+ /*9857*/ uint16(xMatch),
+ /*9858*/ uint16(xSetOp), uint16(POP),
+ /*9860*/ uint16(xArgRM64),
+ /*9861*/ uint16(xMatch),
+ /*9862*/ uint16(xCondIs64), 9865, 9879,
+ /*9865*/ uint16(xCondDataSize), 9869, 9874, 0,
+ /*9869*/ uint16(xSetOp), uint16(XCHG),
+ /*9871*/ uint16(xArgR16op),
+ /*9872*/ uint16(xArgAX),
+ /*9873*/ uint16(xMatch),
+ /*9874*/ uint16(xSetOp), uint16(XCHG),
+ /*9876*/ uint16(xArgR32op),
+ /*9877*/ uint16(xArgEAX),
+ /*9878*/ uint16(xMatch),
+ /*9879*/ uint16(xCondDataSize), 9869, 9874, 9883,
+ /*9883*/ uint16(xSetOp), uint16(XCHG),
+ /*9885*/ uint16(xArgR64op),
+ /*9886*/ uint16(xArgRAX),
+ /*9887*/ uint16(xMatch),
+ /*9888*/ uint16(xCondIs64), 9891, 9901,
+ /*9891*/ uint16(xCondDataSize), 9895, 9898, 0,
+ /*9895*/ uint16(xSetOp), uint16(CBW),
+ /*9897*/ uint16(xMatch),
+ /*9898*/ uint16(xSetOp), uint16(CWDE),
+ /*9900*/ uint16(xMatch),
+ /*9901*/ uint16(xCondDataSize), 9895, 9898, 9905,
+ /*9905*/ uint16(xSetOp), uint16(CDQE),
+ /*9907*/ uint16(xMatch),
+ /*9908*/ uint16(xCondIs64), 9911, 9921,
+ /*9911*/ uint16(xCondDataSize), 9915, 9918, 0,
+ /*9915*/ uint16(xSetOp), uint16(CWD),
+ /*9917*/ uint16(xMatch),
+ /*9918*/ uint16(xSetOp), uint16(CDQ),
+ /*9920*/ uint16(xMatch),
+ /*9921*/ uint16(xCondDataSize), 9915, 9918, 9925,
+ /*9925*/ uint16(xSetOp), uint16(CQO),
+ /*9927*/ uint16(xMatch),
+ /*9928*/ uint16(xCondIs64), 9931, 0,
+ /*9931*/ uint16(xCondDataSize), 9935, 9940, 0,
+ /*9935*/ uint16(xSetOp), uint16(LCALL),
+ /*9937*/ uint16(xReadCd),
+ /*9938*/ uint16(xArgPtr16colon16),
+ /*9939*/ uint16(xMatch),
+ /*9940*/ uint16(xSetOp), uint16(LCALL),
+ /*9942*/ uint16(xReadCp),
+ /*9943*/ uint16(xArgPtr16colon32),
+ /*9944*/ uint16(xMatch),
+ /*9945*/ uint16(xSetOp), uint16(FWAIT),
+ /*9947*/ uint16(xMatch),
+ /*9948*/ uint16(xCondIs64), 9951, 9961,
+ /*9951*/ uint16(xCondDataSize), 9955, 9958, 0,
+ /*9955*/ uint16(xSetOp), uint16(PUSHF),
+ /*9957*/ uint16(xMatch),
+ /*9958*/ uint16(xSetOp), uint16(PUSHFD),
+ /*9960*/ uint16(xMatch),
+ /*9961*/ uint16(xCondDataSize), 9955, 9965, 9968,
+ /*9965*/ uint16(xSetOp), uint16(PUSHFQ),
+ /*9967*/ uint16(xMatch),
+ /*9968*/ uint16(xSetOp), uint16(PUSHFQ),
+ /*9970*/ uint16(xMatch),
+ /*9971*/ uint16(xCondIs64), 9974, 9984,
+ /*9974*/ uint16(xCondDataSize), 9978, 9981, 0,
+ /*9978*/ uint16(xSetOp), uint16(POPF),
+ /*9980*/ uint16(xMatch),
+ /*9981*/ uint16(xSetOp), uint16(POPFD),
+ /*9983*/ uint16(xMatch),
+ /*9984*/ uint16(xCondDataSize), 9978, 9988, 9991,
+ /*9988*/ uint16(xSetOp), uint16(POPFQ),
+ /*9990*/ uint16(xMatch),
+ /*9991*/ uint16(xSetOp), uint16(POPFQ),
+ /*9993*/ uint16(xMatch),
+ /*9994*/ uint16(xSetOp), uint16(SAHF),
+ /*9996*/ uint16(xMatch),
+ /*9997*/ uint16(xSetOp), uint16(LAHF),
+ /*9999*/ uint16(xMatch),
+ /*10000*/ uint16(xCondIs64), 10003, 10009,
+ /*10003*/ uint16(xSetOp), uint16(MOV),
+ /*10005*/ uint16(xReadCm),
+ /*10006*/ uint16(xArgAL),
+ /*10007*/ uint16(xArgMoffs8),
+ /*10008*/ uint16(xMatch),
+ /*10009*/ uint16(xCondDataSize), 10003, 10003, 10013,
+ /*10013*/ uint16(xSetOp), uint16(MOV),
+ /*10015*/ uint16(xReadCm),
+ /*10016*/ uint16(xArgAL),
+ /*10017*/ uint16(xArgMoffs8),
+ /*10018*/ uint16(xMatch),
+ /*10019*/ uint16(xCondDataSize), 10023, 10029, 10035,
+ /*10023*/ uint16(xSetOp), uint16(MOV),
+ /*10025*/ uint16(xReadCm),
+ /*10026*/ uint16(xArgAX),
+ /*10027*/ uint16(xArgMoffs16),
+ /*10028*/ uint16(xMatch),
+ /*10029*/ uint16(xSetOp), uint16(MOV),
+ /*10031*/ uint16(xReadCm),
+ /*10032*/ uint16(xArgEAX),
+ /*10033*/ uint16(xArgMoffs32),
+ /*10034*/ uint16(xMatch),
+ /*10035*/ uint16(xSetOp), uint16(MOV),
+ /*10037*/ uint16(xReadCm),
+ /*10038*/ uint16(xArgRAX),
+ /*10039*/ uint16(xArgMoffs64),
+ /*10040*/ uint16(xMatch),
+ /*10041*/ uint16(xCondIs64), 10044, 10050,
+ /*10044*/ uint16(xSetOp), uint16(MOV),
+ /*10046*/ uint16(xReadCm),
+ /*10047*/ uint16(xArgMoffs8),
+ /*10048*/ uint16(xArgAL),
+ /*10049*/ uint16(xMatch),
+ /*10050*/ uint16(xCondDataSize), 10044, 10044, 10054,
+ /*10054*/ uint16(xSetOp), uint16(MOV),
+ /*10056*/ uint16(xReadCm),
+ /*10057*/ uint16(xArgMoffs8),
+ /*10058*/ uint16(xArgAL),
+ /*10059*/ uint16(xMatch),
+ /*10060*/ uint16(xCondDataSize), 10064, 10070, 10076,
+ /*10064*/ uint16(xSetOp), uint16(MOV),
+ /*10066*/ uint16(xReadCm),
+ /*10067*/ uint16(xArgMoffs16),
+ /*10068*/ uint16(xArgAX),
+ /*10069*/ uint16(xMatch),
+ /*10070*/ uint16(xSetOp), uint16(MOV),
+ /*10072*/ uint16(xReadCm),
+ /*10073*/ uint16(xArgMoffs32),
+ /*10074*/ uint16(xArgEAX),
+ /*10075*/ uint16(xMatch),
+ /*10076*/ uint16(xSetOp), uint16(MOV),
+ /*10078*/ uint16(xReadCm),
+ /*10079*/ uint16(xArgMoffs64),
+ /*10080*/ uint16(xArgRAX),
+ /*10081*/ uint16(xMatch),
+ /*10082*/ uint16(xSetOp), uint16(MOVSB),
+ /*10084*/ uint16(xMatch),
+ /*10085*/ uint16(xCondIs64), 10088, 10098,
+ /*10088*/ uint16(xCondDataSize), 10092, 10095, 0,
+ /*10092*/ uint16(xSetOp), uint16(MOVSW),
+ /*10094*/ uint16(xMatch),
+ /*10095*/ uint16(xSetOp), uint16(MOVSD),
+ /*10097*/ uint16(xMatch),
+ /*10098*/ uint16(xCondDataSize), 10092, 10095, 10102,
+ /*10102*/ uint16(xSetOp), uint16(MOVSQ),
+ /*10104*/ uint16(xMatch),
+ /*10105*/ uint16(xSetOp), uint16(CMPSB),
+ /*10107*/ uint16(xMatch),
+ /*10108*/ uint16(xCondIs64), 10111, 10121,
+ /*10111*/ uint16(xCondDataSize), 10115, 10118, 0,
+ /*10115*/ uint16(xSetOp), uint16(CMPSW),
+ /*10117*/ uint16(xMatch),
+ /*10118*/ uint16(xSetOp), uint16(CMPSD),
+ /*10120*/ uint16(xMatch),
+ /*10121*/ uint16(xCondDataSize), 10115, 10118, 10125,
+ /*10125*/ uint16(xSetOp), uint16(CMPSQ),
+ /*10127*/ uint16(xMatch),
+ /*10128*/ uint16(xSetOp), uint16(TEST),
+ /*10130*/ uint16(xReadIb),
+ /*10131*/ uint16(xArgAL),
+ /*10132*/ uint16(xArgImm8u),
+ /*10133*/ uint16(xMatch),
+ /*10134*/ uint16(xCondIs64), 10137, 10153,
+ /*10137*/ uint16(xCondDataSize), 10141, 10147, 0,
+ /*10141*/ uint16(xSetOp), uint16(TEST),
+ /*10143*/ uint16(xReadIw),
+ /*10144*/ uint16(xArgAX),
+ /*10145*/ uint16(xArgImm16),
+ /*10146*/ uint16(xMatch),
+ /*10147*/ uint16(xSetOp), uint16(TEST),
+ /*10149*/ uint16(xReadId),
+ /*10150*/ uint16(xArgEAX),
+ /*10151*/ uint16(xArgImm32),
+ /*10152*/ uint16(xMatch),
+ /*10153*/ uint16(xCondDataSize), 10141, 10147, 10157,
+ /*10157*/ uint16(xSetOp), uint16(TEST),
+ /*10159*/ uint16(xReadId),
+ /*10160*/ uint16(xArgRAX),
+ /*10161*/ uint16(xArgImm32),
+ /*10162*/ uint16(xMatch),
+ /*10163*/ uint16(xSetOp), uint16(STOSB),
+ /*10165*/ uint16(xMatch),
+ /*10166*/ uint16(xCondIs64), 10169, 10179,
+ /*10169*/ uint16(xCondDataSize), 10173, 10176, 0,
+ /*10173*/ uint16(xSetOp), uint16(STOSW),
+ /*10175*/ uint16(xMatch),
+ /*10176*/ uint16(xSetOp), uint16(STOSD),
+ /*10178*/ uint16(xMatch),
+ /*10179*/ uint16(xCondDataSize), 10173, 10176, 10183,
+ /*10183*/ uint16(xSetOp), uint16(STOSQ),
+ /*10185*/ uint16(xMatch),
+ /*10186*/ uint16(xSetOp), uint16(LODSB),
+ /*10188*/ uint16(xMatch),
+ /*10189*/ uint16(xCondIs64), 10192, 10202,
+ /*10192*/ uint16(xCondDataSize), 10196, 10199, 0,
+ /*10196*/ uint16(xSetOp), uint16(LODSW),
+ /*10198*/ uint16(xMatch),
+ /*10199*/ uint16(xSetOp), uint16(LODSD),
+ /*10201*/ uint16(xMatch),
+ /*10202*/ uint16(xCondDataSize), 10196, 10199, 10206,
+ /*10206*/ uint16(xSetOp), uint16(LODSQ),
+ /*10208*/ uint16(xMatch),
+ /*10209*/ uint16(xSetOp), uint16(SCASB),
+ /*10211*/ uint16(xMatch),
+ /*10212*/ uint16(xCondIs64), 10215, 10225,
+ /*10215*/ uint16(xCondDataSize), 10219, 10222, 0,
+ /*10219*/ uint16(xSetOp), uint16(SCASW),
+ /*10221*/ uint16(xMatch),
+ /*10222*/ uint16(xSetOp), uint16(SCASD),
+ /*10224*/ uint16(xMatch),
+ /*10225*/ uint16(xCondDataSize), 10219, 10222, 10229,
+ /*10229*/ uint16(xSetOp), uint16(SCASQ),
+ /*10231*/ uint16(xMatch),
+ /*10232*/ uint16(xSetOp), uint16(MOV),
+ /*10234*/ uint16(xReadIb),
+ /*10235*/ uint16(xArgR8op),
+ /*10236*/ uint16(xArgImm8u),
+ /*10237*/ uint16(xMatch),
+ /*10238*/ uint16(xCondIs64), 10241, 10257,
+ /*10241*/ uint16(xCondDataSize), 10245, 10251, 0,
+ /*10245*/ uint16(xSetOp), uint16(MOV),
+ /*10247*/ uint16(xReadIw),
+ /*10248*/ uint16(xArgR16op),
+ /*10249*/ uint16(xArgImm16),
+ /*10250*/ uint16(xMatch),
+ /*10251*/ uint16(xSetOp), uint16(MOV),
+ /*10253*/ uint16(xReadId),
+ /*10254*/ uint16(xArgR32op),
+ /*10255*/ uint16(xArgImm32),
+ /*10256*/ uint16(xMatch),
+ /*10257*/ uint16(xCondDataSize), 10245, 10251, 10261,
+ /*10261*/ uint16(xSetOp), uint16(MOV),
+ /*10263*/ uint16(xReadIo),
+ /*10264*/ uint16(xArgR64op),
+ /*10265*/ uint16(xArgImm64),
+ /*10266*/ uint16(xMatch),
+ /*10267*/ uint16(xCondSlashR),
+ 10276, // 0
+ 10282, // 1
+ 10288, // 2
+ 10294, // 3
+ 10300, // 4
+ 10306, // 5
+ 0, // 6
+ 10312, // 7
+ /*10276*/ uint16(xSetOp), uint16(ROL),
+ /*10278*/ uint16(xReadIb),
+ /*10279*/ uint16(xArgRM8),
+ /*10280*/ uint16(xArgImm8u),
+ /*10281*/ uint16(xMatch),
+ /*10282*/ uint16(xSetOp), uint16(ROR),
+ /*10284*/ uint16(xReadIb),
+ /*10285*/ uint16(xArgRM8),
+ /*10286*/ uint16(xArgImm8u),
+ /*10287*/ uint16(xMatch),
+ /*10288*/ uint16(xSetOp), uint16(RCL),
+ /*10290*/ uint16(xReadIb),
+ /*10291*/ uint16(xArgRM8),
+ /*10292*/ uint16(xArgImm8u),
+ /*10293*/ uint16(xMatch),
+ /*10294*/ uint16(xSetOp), uint16(RCR),
+ /*10296*/ uint16(xReadIb),
+ /*10297*/ uint16(xArgRM8),
+ /*10298*/ uint16(xArgImm8u),
+ /*10299*/ uint16(xMatch),
+ /*10300*/ uint16(xSetOp), uint16(SHL),
+ /*10302*/ uint16(xReadIb),
+ /*10303*/ uint16(xArgRM8),
+ /*10304*/ uint16(xArgImm8u),
+ /*10305*/ uint16(xMatch),
+ /*10306*/ uint16(xSetOp), uint16(SHR),
+ /*10308*/ uint16(xReadIb),
+ /*10309*/ uint16(xArgRM8),
+ /*10310*/ uint16(xArgImm8u),
+ /*10311*/ uint16(xMatch),
+ /*10312*/ uint16(xSetOp), uint16(SAR),
+ /*10314*/ uint16(xReadIb),
+ /*10315*/ uint16(xArgRM8),
+ /*10316*/ uint16(xArgImm8u),
+ /*10317*/ uint16(xMatch),
+ /*10318*/ uint16(xCondSlashR),
+ 10327, // 0
+ 10349, // 1
+ 10371, // 2
+ 10400, // 3
+ 10429, // 4
+ 10458, // 5
+ 0, // 6
+ 10487, // 7
+ /*10327*/ uint16(xCondDataSize), 10331, 10337, 10343,
+ /*10331*/ uint16(xSetOp), uint16(ROL),
+ /*10333*/ uint16(xReadIb),
+ /*10334*/ uint16(xArgRM16),
+ /*10335*/ uint16(xArgImm8u),
+ /*10336*/ uint16(xMatch),
+ /*10337*/ uint16(xSetOp), uint16(ROL),
+ /*10339*/ uint16(xReadIb),
+ /*10340*/ uint16(xArgRM32),
+ /*10341*/ uint16(xArgImm8u),
+ /*10342*/ uint16(xMatch),
+ /*10343*/ uint16(xSetOp), uint16(ROL),
+ /*10345*/ uint16(xReadIb),
+ /*10346*/ uint16(xArgRM64),
+ /*10347*/ uint16(xArgImm8u),
+ /*10348*/ uint16(xMatch),
+ /*10349*/ uint16(xCondDataSize), 10353, 10359, 10365,
+ /*10353*/ uint16(xSetOp), uint16(ROR),
+ /*10355*/ uint16(xReadIb),
+ /*10356*/ uint16(xArgRM16),
+ /*10357*/ uint16(xArgImm8u),
+ /*10358*/ uint16(xMatch),
+ /*10359*/ uint16(xSetOp), uint16(ROR),
+ /*10361*/ uint16(xReadIb),
+ /*10362*/ uint16(xArgRM32),
+ /*10363*/ uint16(xArgImm8u),
+ /*10364*/ uint16(xMatch),
+ /*10365*/ uint16(xSetOp), uint16(ROR),
+ /*10367*/ uint16(xReadIb),
+ /*10368*/ uint16(xArgRM64),
+ /*10369*/ uint16(xArgImm8u),
+ /*10370*/ uint16(xMatch),
+ /*10371*/ uint16(xCondIs64), 10374, 10390,
+ /*10374*/ uint16(xCondDataSize), 10378, 10384, 0,
+ /*10378*/ uint16(xSetOp), uint16(RCL),
+ /*10380*/ uint16(xReadIb),
+ /*10381*/ uint16(xArgRM16),
+ /*10382*/ uint16(xArgImm8u),
+ /*10383*/ uint16(xMatch),
+ /*10384*/ uint16(xSetOp), uint16(RCL),
+ /*10386*/ uint16(xReadIb),
+ /*10387*/ uint16(xArgRM32),
+ /*10388*/ uint16(xArgImm8u),
+ /*10389*/ uint16(xMatch),
+ /*10390*/ uint16(xCondDataSize), 10378, 10384, 10394,
+ /*10394*/ uint16(xSetOp), uint16(RCL),
+ /*10396*/ uint16(xReadIb),
+ /*10397*/ uint16(xArgRM64),
+ /*10398*/ uint16(xArgImm8u),
+ /*10399*/ uint16(xMatch),
+ /*10400*/ uint16(xCondIs64), 10403, 10419,
+ /*10403*/ uint16(xCondDataSize), 10407, 10413, 0,
+ /*10407*/ uint16(xSetOp), uint16(RCR),
+ /*10409*/ uint16(xReadIb),
+ /*10410*/ uint16(xArgRM16),
+ /*10411*/ uint16(xArgImm8u),
+ /*10412*/ uint16(xMatch),
+ /*10413*/ uint16(xSetOp), uint16(RCR),
+ /*10415*/ uint16(xReadIb),
+ /*10416*/ uint16(xArgRM32),
+ /*10417*/ uint16(xArgImm8u),
+ /*10418*/ uint16(xMatch),
+ /*10419*/ uint16(xCondDataSize), 10407, 10413, 10423,
+ /*10423*/ uint16(xSetOp), uint16(RCR),
+ /*10425*/ uint16(xReadIb),
+ /*10426*/ uint16(xArgRM64),
+ /*10427*/ uint16(xArgImm8u),
+ /*10428*/ uint16(xMatch),
+ /*10429*/ uint16(xCondIs64), 10432, 10448,
+ /*10432*/ uint16(xCondDataSize), 10436, 10442, 0,
+ /*10436*/ uint16(xSetOp), uint16(SHL),
+ /*10438*/ uint16(xReadIb),
+ /*10439*/ uint16(xArgRM16),
+ /*10440*/ uint16(xArgImm8u),
+ /*10441*/ uint16(xMatch),
+ /*10442*/ uint16(xSetOp), uint16(SHL),
+ /*10444*/ uint16(xReadIb),
+ /*10445*/ uint16(xArgRM32),
+ /*10446*/ uint16(xArgImm8u),
+ /*10447*/ uint16(xMatch),
+ /*10448*/ uint16(xCondDataSize), 10436, 10442, 10452,
+ /*10452*/ uint16(xSetOp), uint16(SHL),
+ /*10454*/ uint16(xReadIb),
+ /*10455*/ uint16(xArgRM64),
+ /*10456*/ uint16(xArgImm8u),
+ /*10457*/ uint16(xMatch),
+ /*10458*/ uint16(xCondIs64), 10461, 10477,
+ /*10461*/ uint16(xCondDataSize), 10465, 10471, 0,
+ /*10465*/ uint16(xSetOp), uint16(SHR),
+ /*10467*/ uint16(xReadIb),
+ /*10468*/ uint16(xArgRM16),
+ /*10469*/ uint16(xArgImm8u),
+ /*10470*/ uint16(xMatch),
+ /*10471*/ uint16(xSetOp), uint16(SHR),
+ /*10473*/ uint16(xReadIb),
+ /*10474*/ uint16(xArgRM32),
+ /*10475*/ uint16(xArgImm8u),
+ /*10476*/ uint16(xMatch),
+ /*10477*/ uint16(xCondDataSize), 10465, 10471, 10481,
+ /*10481*/ uint16(xSetOp), uint16(SHR),
+ /*10483*/ uint16(xReadIb),
+ /*10484*/ uint16(xArgRM64),
+ /*10485*/ uint16(xArgImm8u),
+ /*10486*/ uint16(xMatch),
+ /*10487*/ uint16(xCondIs64), 10490, 10506,
+ /*10490*/ uint16(xCondDataSize), 10494, 10500, 0,
+ /*10494*/ uint16(xSetOp), uint16(SAR),
+ /*10496*/ uint16(xReadIb),
+ /*10497*/ uint16(xArgRM16),
+ /*10498*/ uint16(xArgImm8u),
+ /*10499*/ uint16(xMatch),
+ /*10500*/ uint16(xSetOp), uint16(SAR),
+ /*10502*/ uint16(xReadIb),
+ /*10503*/ uint16(xArgRM32),
+ /*10504*/ uint16(xArgImm8u),
+ /*10505*/ uint16(xMatch),
+ /*10506*/ uint16(xCondDataSize), 10494, 10500, 10510,
+ /*10510*/ uint16(xSetOp), uint16(SAR),
+ /*10512*/ uint16(xReadIb),
+ /*10513*/ uint16(xArgRM64),
+ /*10514*/ uint16(xArgImm8u),
+ /*10515*/ uint16(xMatch),
+ /*10516*/ uint16(xSetOp), uint16(RET),
+ /*10518*/ uint16(xReadIw),
+ /*10519*/ uint16(xArgImm16u),
+ /*10520*/ uint16(xMatch),
+ /*10521*/ uint16(xSetOp), uint16(RET),
+ /*10523*/ uint16(xMatch),
+ /*10524*/ uint16(xCondIs64), 10527, 0,
+ /*10527*/ uint16(xCondDataSize), 10531, 10537, 0,
+ /*10531*/ uint16(xSetOp), uint16(LES),
+ /*10533*/ uint16(xReadSlashR),
+ /*10534*/ uint16(xArgR16),
+ /*10535*/ uint16(xArgM16colon16),
+ /*10536*/ uint16(xMatch),
+ /*10537*/ uint16(xSetOp), uint16(LES),
+ /*10539*/ uint16(xReadSlashR),
+ /*10540*/ uint16(xArgR32),
+ /*10541*/ uint16(xArgM16colon32),
+ /*10542*/ uint16(xMatch),
+ /*10543*/ uint16(xCondIs64), 10546, 0,
+ /*10546*/ uint16(xCondDataSize), 10550, 10556, 0,
+ /*10550*/ uint16(xSetOp), uint16(LDS),
+ /*10552*/ uint16(xReadSlashR),
+ /*10553*/ uint16(xArgR16),
+ /*10554*/ uint16(xArgM16colon16),
+ /*10555*/ uint16(xMatch),
+ /*10556*/ uint16(xSetOp), uint16(LDS),
+ /*10558*/ uint16(xReadSlashR),
+ /*10559*/ uint16(xArgR32),
+ /*10560*/ uint16(xArgM16colon32),
+ /*10561*/ uint16(xMatch),
+ /*10562*/ uint16(xCondByte), 1,
+ 0xF8, 10581,
+ /*10566*/ uint16(xCondSlashR),
+ 10575, // 0
+ 0, // 1
+ 0, // 2
+ 0, // 3
+ 0, // 4
+ 0, // 5
+ 0, // 6
+ 0, // 7
+ /*10575*/ uint16(xSetOp), uint16(MOV),
+ /*10577*/ uint16(xReadIb),
+ /*10578*/ uint16(xArgRM8),
+ /*10579*/ uint16(xArgImm8u),
+ /*10580*/ uint16(xMatch),
+ /*10581*/ uint16(xSetOp), uint16(XABORT),
+ /*10583*/ uint16(xReadIb),
+ /*10584*/ uint16(xArgImm8u),
+ /*10585*/ uint16(xMatch),
+ /*10586*/ uint16(xCondByte), 1,
+ 0xF8, 10628,
+ /*10590*/ uint16(xCondSlashR),
+ 10599, // 0
+ 0, // 1
+ 0, // 2
+ 0, // 3
+ 0, // 4
+ 0, // 5
+ 0, // 6
+ 0, // 7
+ /*10599*/ uint16(xCondIs64), 10602, 10618,
+ /*10602*/ uint16(xCondDataSize), 10606, 10612, 0,
+ /*10606*/ uint16(xSetOp), uint16(MOV),
+ /*10608*/ uint16(xReadIw),
+ /*10609*/ uint16(xArgRM16),
+ /*10610*/ uint16(xArgImm16),
+ /*10611*/ uint16(xMatch),
+ /*10612*/ uint16(xSetOp), uint16(MOV),
+ /*10614*/ uint16(xReadId),
+ /*10615*/ uint16(xArgRM32),
+ /*10616*/ uint16(xArgImm32),
+ /*10617*/ uint16(xMatch),
+ /*10618*/ uint16(xCondDataSize), 10606, 10612, 10622,
+ /*10622*/ uint16(xSetOp), uint16(MOV),
+ /*10624*/ uint16(xReadId),
+ /*10625*/ uint16(xArgRM64),
+ /*10626*/ uint16(xArgImm32),
+ /*10627*/ uint16(xMatch),
+ /*10628*/ uint16(xCondDataSize), 10632, 10637, 10642,
+ /*10632*/ uint16(xSetOp), uint16(XBEGIN),
+ /*10634*/ uint16(xReadCw),
+ /*10635*/ uint16(xArgRel16),
+ /*10636*/ uint16(xMatch),
+ /*10637*/ uint16(xSetOp), uint16(XBEGIN),
+ /*10639*/ uint16(xReadCd),
+ /*10640*/ uint16(xArgRel32),
+ /*10641*/ uint16(xMatch),
+ /*10642*/ uint16(xSetOp), uint16(XBEGIN),
+ /*10644*/ uint16(xReadCd),
+ /*10645*/ uint16(xArgRel32),
+ /*10646*/ uint16(xMatch),
+ /*10647*/ uint16(xSetOp), uint16(ENTER),
+ /*10649*/ uint16(xReadIw),
+ /*10650*/ uint16(xReadIb),
+ /*10651*/ uint16(xArgImm16u),
+ /*10652*/ uint16(xArgImm8u),
+ /*10653*/ uint16(xMatch),
+ /*10654*/ uint16(xCondIs64), 10657, 10667,
+ /*10657*/ uint16(xCondDataSize), 10661, 10664, 0,
+ /*10661*/ uint16(xSetOp), uint16(LEAVE),
+ /*10663*/ uint16(xMatch),
+ /*10664*/ uint16(xSetOp), uint16(LEAVE),
+ /*10666*/ uint16(xMatch),
+ /*10667*/ uint16(xCondDataSize), 10661, 10671, 10674,
+ /*10671*/ uint16(xSetOp), uint16(LEAVE),
+ /*10673*/ uint16(xMatch),
+ /*10674*/ uint16(xSetOp), uint16(LEAVE),
+ /*10676*/ uint16(xMatch),
+ /*10677*/ uint16(xSetOp), uint16(LRET),
+ /*10679*/ uint16(xReadIw),
+ /*10680*/ uint16(xArgImm16u),
+ /*10681*/ uint16(xMatch),
+ /*10682*/ uint16(xSetOp), uint16(LRET),
+ /*10684*/ uint16(xMatch),
+ /*10685*/ uint16(xSetOp), uint16(INT),
+ /*10687*/ uint16(xArg3),
+ /*10688*/ uint16(xMatch),
+ /*10689*/ uint16(xSetOp), uint16(INT),
+ /*10691*/ uint16(xReadIb),
+ /*10692*/ uint16(xArgImm8u),
+ /*10693*/ uint16(xMatch),
+ /*10694*/ uint16(xCondIs64), 10697, 0,
+ /*10697*/ uint16(xSetOp), uint16(INTO),
+ /*10699*/ uint16(xMatch),
+ /*10700*/ uint16(xCondIs64), 10703, 10713,
+ /*10703*/ uint16(xCondDataSize), 10707, 10710, 0,
+ /*10707*/ uint16(xSetOp), uint16(IRET),
+ /*10709*/ uint16(xMatch),
+ /*10710*/ uint16(xSetOp), uint16(IRETD),
+ /*10712*/ uint16(xMatch),
+ /*10713*/ uint16(xCondDataSize), 10707, 10710, 10717,
+ /*10717*/ uint16(xSetOp), uint16(IRETQ),
+ /*10719*/ uint16(xMatch),
+ /*10720*/ uint16(xCondSlashR),
+ 10729, // 0
+ 10734, // 1
+ 10739, // 2
+ 10744, // 3
+ 10749, // 4
+ 10754, // 5
+ 0, // 6
+ 10759, // 7
+ /*10729*/ uint16(xSetOp), uint16(ROL),
+ /*10731*/ uint16(xArgRM8),
+ /*10732*/ uint16(xArg1),
+ /*10733*/ uint16(xMatch),
+ /*10734*/ uint16(xSetOp), uint16(ROR),
+ /*10736*/ uint16(xArgRM8),
+ /*10737*/ uint16(xArg1),
+ /*10738*/ uint16(xMatch),
+ /*10739*/ uint16(xSetOp), uint16(RCL),
+ /*10741*/ uint16(xArgRM8),
+ /*10742*/ uint16(xArg1),
+ /*10743*/ uint16(xMatch),
+ /*10744*/ uint16(xSetOp), uint16(RCR),
+ /*10746*/ uint16(xArgRM8),
+ /*10747*/ uint16(xArg1),
+ /*10748*/ uint16(xMatch),
+ /*10749*/ uint16(xSetOp), uint16(SHL),
+ /*10751*/ uint16(xArgRM8),
+ /*10752*/ uint16(xArg1),
+ /*10753*/ uint16(xMatch),
+ /*10754*/ uint16(xSetOp), uint16(SHR),
+ /*10756*/ uint16(xArgRM8),
+ /*10757*/ uint16(xArg1),
+ /*10758*/ uint16(xMatch),
+ /*10759*/ uint16(xSetOp), uint16(SAR),
+ /*10761*/ uint16(xArgRM8),
+ /*10762*/ uint16(xArg1),
+ /*10763*/ uint16(xMatch),
+ /*10764*/ uint16(xCondSlashR),
+ 10773, // 0
+ 10799, // 1
+ 10825, // 2
+ 10851, // 3
+ 10877, // 4
+ 10903, // 5
+ 0, // 6
+ 10929, // 7
+ /*10773*/ uint16(xCondIs64), 10776, 10790,
+ /*10776*/ uint16(xCondDataSize), 10780, 10785, 0,
+ /*10780*/ uint16(xSetOp), uint16(ROL),
+ /*10782*/ uint16(xArgRM16),
+ /*10783*/ uint16(xArg1),
+ /*10784*/ uint16(xMatch),
+ /*10785*/ uint16(xSetOp), uint16(ROL),
+ /*10787*/ uint16(xArgRM32),
+ /*10788*/ uint16(xArg1),
+ /*10789*/ uint16(xMatch),
+ /*10790*/ uint16(xCondDataSize), 10780, 10785, 10794,
+ /*10794*/ uint16(xSetOp), uint16(ROL),
+ /*10796*/ uint16(xArgRM64),
+ /*10797*/ uint16(xArg1),
+ /*10798*/ uint16(xMatch),
+ /*10799*/ uint16(xCondIs64), 10802, 10816,
+ /*10802*/ uint16(xCondDataSize), 10806, 10811, 0,
+ /*10806*/ uint16(xSetOp), uint16(ROR),
+ /*10808*/ uint16(xArgRM16),
+ /*10809*/ uint16(xArg1),
+ /*10810*/ uint16(xMatch),
+ /*10811*/ uint16(xSetOp), uint16(ROR),
+ /*10813*/ uint16(xArgRM32),
+ /*10814*/ uint16(xArg1),
+ /*10815*/ uint16(xMatch),
+ /*10816*/ uint16(xCondDataSize), 10806, 10811, 10820,
+ /*10820*/ uint16(xSetOp), uint16(ROR),
+ /*10822*/ uint16(xArgRM64),
+ /*10823*/ uint16(xArg1),
+ /*10824*/ uint16(xMatch),
+ /*10825*/ uint16(xCondIs64), 10828, 10842,
+ /*10828*/ uint16(xCondDataSize), 10832, 10837, 0,
+ /*10832*/ uint16(xSetOp), uint16(RCL),
+ /*10834*/ uint16(xArgRM16),
+ /*10835*/ uint16(xArg1),
+ /*10836*/ uint16(xMatch),
+ /*10837*/ uint16(xSetOp), uint16(RCL),
+ /*10839*/ uint16(xArgRM32),
+ /*10840*/ uint16(xArg1),
+ /*10841*/ uint16(xMatch),
+ /*10842*/ uint16(xCondDataSize), 10832, 10837, 10846,
+ /*10846*/ uint16(xSetOp), uint16(RCL),
+ /*10848*/ uint16(xArgRM64),
+ /*10849*/ uint16(xArg1),
+ /*10850*/ uint16(xMatch),
+ /*10851*/ uint16(xCondIs64), 10854, 10868,
+ /*10854*/ uint16(xCondDataSize), 10858, 10863, 0,
+ /*10858*/ uint16(xSetOp), uint16(RCR),
+ /*10860*/ uint16(xArgRM16),
+ /*10861*/ uint16(xArg1),
+ /*10862*/ uint16(xMatch),
+ /*10863*/ uint16(xSetOp), uint16(RCR),
+ /*10865*/ uint16(xArgRM32),
+ /*10866*/ uint16(xArg1),
+ /*10867*/ uint16(xMatch),
+ /*10868*/ uint16(xCondDataSize), 10858, 10863, 10872,
+ /*10872*/ uint16(xSetOp), uint16(RCR),
+ /*10874*/ uint16(xArgRM64),
+ /*10875*/ uint16(xArg1),
+ /*10876*/ uint16(xMatch),
+ /*10877*/ uint16(xCondIs64), 10880, 10894,
+ /*10880*/ uint16(xCondDataSize), 10884, 10889, 0,
+ /*10884*/ uint16(xSetOp), uint16(SHL),
+ /*10886*/ uint16(xArgRM16),
+ /*10887*/ uint16(xArg1),
+ /*10888*/ uint16(xMatch),
+ /*10889*/ uint16(xSetOp), uint16(SHL),
+ /*10891*/ uint16(xArgRM32),
+ /*10892*/ uint16(xArg1),
+ /*10893*/ uint16(xMatch),
+ /*10894*/ uint16(xCondDataSize), 10884, 10889, 10898,
+ /*10898*/ uint16(xSetOp), uint16(SHL),
+ /*10900*/ uint16(xArgRM64),
+ /*10901*/ uint16(xArg1),
+ /*10902*/ uint16(xMatch),
+ /*10903*/ uint16(xCondIs64), 10906, 10920,
+ /*10906*/ uint16(xCondDataSize), 10910, 10915, 0,
+ /*10910*/ uint16(xSetOp), uint16(SHR),
+ /*10912*/ uint16(xArgRM16),
+ /*10913*/ uint16(xArg1),
+ /*10914*/ uint16(xMatch),
+ /*10915*/ uint16(xSetOp), uint16(SHR),
+ /*10917*/ uint16(xArgRM32),
+ /*10918*/ uint16(xArg1),
+ /*10919*/ uint16(xMatch),
+ /*10920*/ uint16(xCondDataSize), 10910, 10915, 10924,
+ /*10924*/ uint16(xSetOp), uint16(SHR),
+ /*10926*/ uint16(xArgRM64),
+ /*10927*/ uint16(xArg1),
+ /*10928*/ uint16(xMatch),
+ /*10929*/ uint16(xCondIs64), 10932, 10946,
+ /*10932*/ uint16(xCondDataSize), 10936, 10941, 0,
+ /*10936*/ uint16(xSetOp), uint16(SAR),
+ /*10938*/ uint16(xArgRM16),
+ /*10939*/ uint16(xArg1),
+ /*10940*/ uint16(xMatch),
+ /*10941*/ uint16(xSetOp), uint16(SAR),
+ /*10943*/ uint16(xArgRM32),
+ /*10944*/ uint16(xArg1),
+ /*10945*/ uint16(xMatch),
+ /*10946*/ uint16(xCondDataSize), 10936, 10941, 10950,
+ /*10950*/ uint16(xSetOp), uint16(SAR),
+ /*10952*/ uint16(xArgRM64),
+ /*10953*/ uint16(xArg1),
+ /*10954*/ uint16(xMatch),
+ /*10955*/ uint16(xCondSlashR),
+ 10964, // 0
+ 10969, // 1
+ 10974, // 2
+ 10979, // 3
+ 10984, // 4
+ 10989, // 5
+ 0, // 6
+ 10994, // 7
+ /*10964*/ uint16(xSetOp), uint16(ROL),
+ /*10966*/ uint16(xArgRM8),
+ /*10967*/ uint16(xArgCL),
+ /*10968*/ uint16(xMatch),
+ /*10969*/ uint16(xSetOp), uint16(ROR),
+ /*10971*/ uint16(xArgRM8),
+ /*10972*/ uint16(xArgCL),
+ /*10973*/ uint16(xMatch),
+ /*10974*/ uint16(xSetOp), uint16(RCL),
+ /*10976*/ uint16(xArgRM8),
+ /*10977*/ uint16(xArgCL),
+ /*10978*/ uint16(xMatch),
+ /*10979*/ uint16(xSetOp), uint16(RCR),
+ /*10981*/ uint16(xArgRM8),
+ /*10982*/ uint16(xArgCL),
+ /*10983*/ uint16(xMatch),
+ /*10984*/ uint16(xSetOp), uint16(SHL),
+ /*10986*/ uint16(xArgRM8),
+ /*10987*/ uint16(xArgCL),
+ /*10988*/ uint16(xMatch),
+ /*10989*/ uint16(xSetOp), uint16(SHR),
+ /*10991*/ uint16(xArgRM8),
+ /*10992*/ uint16(xArgCL),
+ /*10993*/ uint16(xMatch),
+ /*10994*/ uint16(xSetOp), uint16(SAR),
+ /*10996*/ uint16(xArgRM8),
+ /*10997*/ uint16(xArgCL),
+ /*10998*/ uint16(xMatch),
+ /*10999*/ uint16(xCondSlashR),
+ 11008, // 0
+ 11034, // 1
+ 11060, // 2
+ 11086, // 3
+ 11112, // 4
+ 11138, // 5
+ 0, // 6
+ 11164, // 7
+ /*11008*/ uint16(xCondIs64), 11011, 11025,
+ /*11011*/ uint16(xCondDataSize), 11015, 11020, 0,
+ /*11015*/ uint16(xSetOp), uint16(ROL),
+ /*11017*/ uint16(xArgRM16),
+ /*11018*/ uint16(xArgCL),
+ /*11019*/ uint16(xMatch),
+ /*11020*/ uint16(xSetOp), uint16(ROL),
+ /*11022*/ uint16(xArgRM32),
+ /*11023*/ uint16(xArgCL),
+ /*11024*/ uint16(xMatch),
+ /*11025*/ uint16(xCondDataSize), 11015, 11020, 11029,
+ /*11029*/ uint16(xSetOp), uint16(ROL),
+ /*11031*/ uint16(xArgRM64),
+ /*11032*/ uint16(xArgCL),
+ /*11033*/ uint16(xMatch),
+ /*11034*/ uint16(xCondIs64), 11037, 11051,
+ /*11037*/ uint16(xCondDataSize), 11041, 11046, 0,
+ /*11041*/ uint16(xSetOp), uint16(ROR),
+ /*11043*/ uint16(xArgRM16),
+ /*11044*/ uint16(xArgCL),
+ /*11045*/ uint16(xMatch),
+ /*11046*/ uint16(xSetOp), uint16(ROR),
+ /*11048*/ uint16(xArgRM32),
+ /*11049*/ uint16(xArgCL),
+ /*11050*/ uint16(xMatch),
+ /*11051*/ uint16(xCondDataSize), 11041, 11046, 11055,
+ /*11055*/ uint16(xSetOp), uint16(ROR),
+ /*11057*/ uint16(xArgRM64),
+ /*11058*/ uint16(xArgCL),
+ /*11059*/ uint16(xMatch),
+ /*11060*/ uint16(xCondIs64), 11063, 11077,
+ /*11063*/ uint16(xCondDataSize), 11067, 11072, 0,
+ /*11067*/ uint16(xSetOp), uint16(RCL),
+ /*11069*/ uint16(xArgRM16),
+ /*11070*/ uint16(xArgCL),
+ /*11071*/ uint16(xMatch),
+ /*11072*/ uint16(xSetOp), uint16(RCL),
+ /*11074*/ uint16(xArgRM32),
+ /*11075*/ uint16(xArgCL),
+ /*11076*/ uint16(xMatch),
+ /*11077*/ uint16(xCondDataSize), 11067, 11072, 11081,
+ /*11081*/ uint16(xSetOp), uint16(RCL),
+ /*11083*/ uint16(xArgRM64),
+ /*11084*/ uint16(xArgCL),
+ /*11085*/ uint16(xMatch),
+ /*11086*/ uint16(xCondIs64), 11089, 11103,
+ /*11089*/ uint16(xCondDataSize), 11093, 11098, 0,
+ /*11093*/ uint16(xSetOp), uint16(RCR),
+ /*11095*/ uint16(xArgRM16),
+ /*11096*/ uint16(xArgCL),
+ /*11097*/ uint16(xMatch),
+ /*11098*/ uint16(xSetOp), uint16(RCR),
+ /*11100*/ uint16(xArgRM32),
+ /*11101*/ uint16(xArgCL),
+ /*11102*/ uint16(xMatch),
+ /*11103*/ uint16(xCondDataSize), 11093, 11098, 11107,
+ /*11107*/ uint16(xSetOp), uint16(RCR),
+ /*11109*/ uint16(xArgRM64),
+ /*11110*/ uint16(xArgCL),
+ /*11111*/ uint16(xMatch),
+ /*11112*/ uint16(xCondIs64), 11115, 11129,
+ /*11115*/ uint16(xCondDataSize), 11119, 11124, 0,
+ /*11119*/ uint16(xSetOp), uint16(SHL),
+ /*11121*/ uint16(xArgRM16),
+ /*11122*/ uint16(xArgCL),
+ /*11123*/ uint16(xMatch),
+ /*11124*/ uint16(xSetOp), uint16(SHL),
+ /*11126*/ uint16(xArgRM32),
+ /*11127*/ uint16(xArgCL),
+ /*11128*/ uint16(xMatch),
+ /*11129*/ uint16(xCondDataSize), 11119, 11124, 11133,
+ /*11133*/ uint16(xSetOp), uint16(SHL),
+ /*11135*/ uint16(xArgRM64),
+ /*11136*/ uint16(xArgCL),
+ /*11137*/ uint16(xMatch),
+ /*11138*/ uint16(xCondIs64), 11141, 11155,
+ /*11141*/ uint16(xCondDataSize), 11145, 11150, 0,
+ /*11145*/ uint16(xSetOp), uint16(SHR),
+ /*11147*/ uint16(xArgRM16),
+ /*11148*/ uint16(xArgCL),
+ /*11149*/ uint16(xMatch),
+ /*11150*/ uint16(xSetOp), uint16(SHR),
+ /*11152*/ uint16(xArgRM32),
+ /*11153*/ uint16(xArgCL),
+ /*11154*/ uint16(xMatch),
+ /*11155*/ uint16(xCondDataSize), 11145, 11150, 11159,
+ /*11159*/ uint16(xSetOp), uint16(SHR),
+ /*11161*/ uint16(xArgRM64),
+ /*11162*/ uint16(xArgCL),
+ /*11163*/ uint16(xMatch),
+ /*11164*/ uint16(xCondIs64), 11167, 11181,
+ /*11167*/ uint16(xCondDataSize), 11171, 11176, 0,
+ /*11171*/ uint16(xSetOp), uint16(SAR),
+ /*11173*/ uint16(xArgRM16),
+ /*11174*/ uint16(xArgCL),
+ /*11175*/ uint16(xMatch),
+ /*11176*/ uint16(xSetOp), uint16(SAR),
+ /*11178*/ uint16(xArgRM32),
+ /*11179*/ uint16(xArgCL),
+ /*11180*/ uint16(xMatch),
+ /*11181*/ uint16(xCondDataSize), 11171, 11176, 11185,
+ /*11185*/ uint16(xSetOp), uint16(SAR),
+ /*11187*/ uint16(xArgRM64),
+ /*11188*/ uint16(xArgCL),
+ /*11189*/ uint16(xMatch),
+ /*11190*/ uint16(xCondIs64), 11193, 0,
+ /*11193*/ uint16(xSetOp), uint16(AAM),
+ /*11195*/ uint16(xReadIb),
+ /*11196*/ uint16(xArgImm8u),
+ /*11197*/ uint16(xMatch),
+ /*11198*/ uint16(xCondIs64), 11201, 0,
+ /*11201*/ uint16(xSetOp), uint16(AAD),
+ /*11203*/ uint16(xReadIb),
+ /*11204*/ uint16(xArgImm8u),
+ /*11205*/ uint16(xMatch),
+ /*11206*/ uint16(xCondIs64), 11209, 11212,
+ /*11209*/ uint16(xSetOp), uint16(XLATB),
+ /*11211*/ uint16(xMatch),
+ /*11212*/ uint16(xCondDataSize), 11209, 11209, 11216,
+ /*11216*/ uint16(xSetOp), uint16(XLATB),
+ /*11218*/ uint16(xMatch),
+ /*11219*/ uint16(xCondByte), 64,
+ 0xc0, 11390,
+ 0xc1, 11390,
+ 0xc2, 11390,
+ 0xc3, 11390,
+ 0xc4, 11390,
+ 0xc5, 11390,
+ 0xc6, 11390,
+ 0xc7, 11390,
+ 0xc8, 11395,
+ 0xc9, 11395,
+ 0xca, 11395,
+ 0xcb, 11395,
+ 0xcc, 11395,
+ 0xcd, 11395,
+ 0xce, 11395,
+ 0xcf, 11395,
+ 0xd0, 11400,
+ 0xd1, 11400,
+ 0xd2, 11400,
+ 0xd3, 11400,
+ 0xd4, 11400,
+ 0xd5, 11400,
+ 0xd6, 11400,
+ 0xd7, 11400,
+ 0xd8, 11404,
+ 0xd9, 11404,
+ 0xda, 11404,
+ 0xdb, 11404,
+ 0xdc, 11404,
+ 0xdd, 11404,
+ 0xde, 11404,
+ 0xdf, 11404,
+ 0xe0, 11408,
+ 0xe1, 11408,
+ 0xe2, 11408,
+ 0xe3, 11408,
+ 0xe4, 11408,
+ 0xe5, 11408,
+ 0xe6, 11408,
+ 0xe7, 11408,
+ 0xe8, 11413,
+ 0xe9, 11413,
+ 0xea, 11413,
+ 0xeb, 11413,
+ 0xec, 11413,
+ 0xed, 11413,
+ 0xee, 11413,
+ 0xef, 11413,
+ 0xf0, 11418,
+ 0xf1, 11418,
+ 0xf2, 11418,
+ 0xf3, 11418,
+ 0xf4, 11418,
+ 0xf5, 11418,
+ 0xf6, 11418,
+ 0xf7, 11418,
+ 0xf8, 11423,
+ 0xf9, 11423,
+ 0xfa, 11423,
+ 0xfb, 11423,
+ 0xfc, 11423,
+ 0xfd, 11423,
+ 0xfe, 11423,
+ 0xff, 11423,
+ /*11349*/ uint16(xCondSlashR),
+ 11358, // 0
+ 11362, // 1
+ 11366, // 2
+ 11370, // 3
+ 11374, // 4
+ 11378, // 5
+ 11382, // 6
+ 11386, // 7
+ /*11358*/ uint16(xSetOp), uint16(FADD),
+ /*11360*/ uint16(xArgM32fp),
+ /*11361*/ uint16(xMatch),
+ /*11362*/ uint16(xSetOp), uint16(FMUL),
+ /*11364*/ uint16(xArgM32fp),
+ /*11365*/ uint16(xMatch),
+ /*11366*/ uint16(xSetOp), uint16(FCOM),
+ /*11368*/ uint16(xArgM32fp),
+ /*11369*/ uint16(xMatch),
+ /*11370*/ uint16(xSetOp), uint16(FCOMP),
+ /*11372*/ uint16(xArgM32fp),
+ /*11373*/ uint16(xMatch),
+ /*11374*/ uint16(xSetOp), uint16(FSUB),
+ /*11376*/ uint16(xArgM32fp),
+ /*11377*/ uint16(xMatch),
+ /*11378*/ uint16(xSetOp), uint16(FSUBR),
+ /*11380*/ uint16(xArgM32fp),
+ /*11381*/ uint16(xMatch),
+ /*11382*/ uint16(xSetOp), uint16(FDIV),
+ /*11384*/ uint16(xArgM32fp),
+ /*11385*/ uint16(xMatch),
+ /*11386*/ uint16(xSetOp), uint16(FDIVR),
+ /*11388*/ uint16(xArgM32fp),
+ /*11389*/ uint16(xMatch),
+ /*11390*/ uint16(xSetOp), uint16(FADD),
+ /*11392*/ uint16(xArgST),
+ /*11393*/ uint16(xArgSTi),
+ /*11394*/ uint16(xMatch),
+ /*11395*/ uint16(xSetOp), uint16(FMUL),
+ /*11397*/ uint16(xArgST),
+ /*11398*/ uint16(xArgSTi),
+ /*11399*/ uint16(xMatch),
+ /*11400*/ uint16(xSetOp), uint16(FCOM),
+ /*11402*/ uint16(xArgSTi),
+ /*11403*/ uint16(xMatch),
+ /*11404*/ uint16(xSetOp), uint16(FCOMP),
+ /*11406*/ uint16(xArgSTi),
+ /*11407*/ uint16(xMatch),
+ /*11408*/ uint16(xSetOp), uint16(FSUB),
+ /*11410*/ uint16(xArgST),
+ /*11411*/ uint16(xArgSTi),
+ /*11412*/ uint16(xMatch),
+ /*11413*/ uint16(xSetOp), uint16(FSUBR),
+ /*11415*/ uint16(xArgST),
+ /*11416*/ uint16(xArgSTi),
+ /*11417*/ uint16(xMatch),
+ /*11418*/ uint16(xSetOp), uint16(FDIV),
+ /*11420*/ uint16(xArgST),
+ /*11421*/ uint16(xArgSTi),
+ /*11422*/ uint16(xMatch),
+ /*11423*/ uint16(xSetOp), uint16(FDIVR),
+ /*11425*/ uint16(xArgST),
+ /*11426*/ uint16(xArgSTi),
+ /*11427*/ uint16(xMatch),
+ /*11428*/ uint16(xCondByte), 42,
+ 0xc0, 11551,
+ 0xc1, 11551,
+ 0xc2, 11551,
+ 0xc3, 11551,
+ 0xc4, 11551,
+ 0xc5, 11551,
+ 0xc6, 11551,
+ 0xc7, 11551,
+ 0xc8, 11555,
+ 0xc9, 11555,
+ 0xca, 11555,
+ 0xcb, 11555,
+ 0xcc, 11555,
+ 0xcd, 11555,
+ 0xce, 11555,
+ 0xcf, 11555,
+ 0xD0, 11559,
+ 0xE0, 11562,
+ 0xE1, 11565,
+ 0xE4, 11568,
+ 0xE5, 11571,
+ 0xE8, 11574,
+ 0xE9, 11577,
+ 0xEA, 11580,
+ 0xEB, 11583,
+ 0xEC, 11586,
+ 0xF0, 11589,
+ 0xF1, 11592,
+ 0xF2, 11595,
+ 0xF3, 11598,
+ 0xF4, 11601,
+ 0xF5, 11604,
+ 0xF6, 11607,
+ 0xF7, 11610,
+ 0xF8, 11613,
+ 0xF9, 11616,
+ 0xFA, 11619,
+ 0xFB, 11622,
+ 0xFC, 11625,
+ 0xFD, 11628,
+ 0xFE, 11631,
+ 0xFF, 11634,
+ /*11514*/ uint16(xCondSlashR),
+ 11523, // 0
+ 0, // 1
+ 11527, // 2
+ 11531, // 3
+ 11535, // 4
+ 11539, // 5
+ 11543, // 6
+ 11547, // 7
+ /*11523*/ uint16(xSetOp), uint16(FLD),
+ /*11525*/ uint16(xArgM32fp),
+ /*11526*/ uint16(xMatch),
+ /*11527*/ uint16(xSetOp), uint16(FST),
+ /*11529*/ uint16(xArgM32fp),
+ /*11530*/ uint16(xMatch),
+ /*11531*/ uint16(xSetOp), uint16(FSTP),
+ /*11533*/ uint16(xArgM32fp),
+ /*11534*/ uint16(xMatch),
+ /*11535*/ uint16(xSetOp), uint16(FLDENV),
+ /*11537*/ uint16(xArgM1428byte),
+ /*11538*/ uint16(xMatch),
+ /*11539*/ uint16(xSetOp), uint16(FLDCW),
+ /*11541*/ uint16(xArgM2byte),
+ /*11542*/ uint16(xMatch),
+ /*11543*/ uint16(xSetOp), uint16(FNSTENV),
+ /*11545*/ uint16(xArgM1428byte),
+ /*11546*/ uint16(xMatch),
+ /*11547*/ uint16(xSetOp), uint16(FNSTCW),
+ /*11549*/ uint16(xArgM2byte),
+ /*11550*/ uint16(xMatch),
+ /*11551*/ uint16(xSetOp), uint16(FLD),
+ /*11553*/ uint16(xArgSTi),
+ /*11554*/ uint16(xMatch),
+ /*11555*/ uint16(xSetOp), uint16(FXCH),
+ /*11557*/ uint16(xArgSTi),
+ /*11558*/ uint16(xMatch),
+ /*11559*/ uint16(xSetOp), uint16(FNOP),
+ /*11561*/ uint16(xMatch),
+ /*11562*/ uint16(xSetOp), uint16(FCHS),
+ /*11564*/ uint16(xMatch),
+ /*11565*/ uint16(xSetOp), uint16(FABS),
+ /*11567*/ uint16(xMatch),
+ /*11568*/ uint16(xSetOp), uint16(FTST),
+ /*11570*/ uint16(xMatch),
+ /*11571*/ uint16(xSetOp), uint16(FXAM),
+ /*11573*/ uint16(xMatch),
+ /*11574*/ uint16(xSetOp), uint16(FLD1),
+ /*11576*/ uint16(xMatch),
+ /*11577*/ uint16(xSetOp), uint16(FLDL2T),
+ /*11579*/ uint16(xMatch),
+ /*11580*/ uint16(xSetOp), uint16(FLDL2E),
+ /*11582*/ uint16(xMatch),
+ /*11583*/ uint16(xSetOp), uint16(FLDPI),
+ /*11585*/ uint16(xMatch),
+ /*11586*/ uint16(xSetOp), uint16(FLDLG2),
+ /*11588*/ uint16(xMatch),
+ /*11589*/ uint16(xSetOp), uint16(F2XM1),
+ /*11591*/ uint16(xMatch),
+ /*11592*/ uint16(xSetOp), uint16(FYL2X),
+ /*11594*/ uint16(xMatch),
+ /*11595*/ uint16(xSetOp), uint16(FPTAN),
+ /*11597*/ uint16(xMatch),
+ /*11598*/ uint16(xSetOp), uint16(FPATAN),
+ /*11600*/ uint16(xMatch),
+ /*11601*/ uint16(xSetOp), uint16(FXTRACT),
+ /*11603*/ uint16(xMatch),
+ /*11604*/ uint16(xSetOp), uint16(FPREM1),
+ /*11606*/ uint16(xMatch),
+ /*11607*/ uint16(xSetOp), uint16(FDECSTP),
+ /*11609*/ uint16(xMatch),
+ /*11610*/ uint16(xSetOp), uint16(FINCSTP),
+ /*11612*/ uint16(xMatch),
+ /*11613*/ uint16(xSetOp), uint16(FPREM),
+ /*11615*/ uint16(xMatch),
+ /*11616*/ uint16(xSetOp), uint16(FYL2XP1),
+ /*11618*/ uint16(xMatch),
+ /*11619*/ uint16(xSetOp), uint16(FSQRT),
+ /*11621*/ uint16(xMatch),
+ /*11622*/ uint16(xSetOp), uint16(FSINCOS),
+ /*11624*/ uint16(xMatch),
+ /*11625*/ uint16(xSetOp), uint16(FRNDINT),
+ /*11627*/ uint16(xMatch),
+ /*11628*/ uint16(xSetOp), uint16(FSCALE),
+ /*11630*/ uint16(xMatch),
+ /*11631*/ uint16(xSetOp), uint16(FSIN),
+ /*11633*/ uint16(xMatch),
+ /*11634*/ uint16(xSetOp), uint16(FCOS),
+ /*11636*/ uint16(xMatch),
+ /*11637*/ uint16(xCondByte), 33,
+ 0xc0, 11746,
+ 0xc1, 11746,
+ 0xc2, 11746,
+ 0xc3, 11746,
+ 0xc4, 11746,
+ 0xc5, 11746,
+ 0xc6, 11746,
+ 0xc7, 11746,
+ 0xc8, 11751,
+ 0xc9, 11751,
+ 0xca, 11751,
+ 0xcb, 11751,
+ 0xcc, 11751,
+ 0xcd, 11751,
+ 0xce, 11751,
+ 0xcf, 11751,
+ 0xd0, 11756,
+ 0xd1, 11756,
+ 0xd2, 11756,
+ 0xd3, 11756,
+ 0xd4, 11756,
+ 0xd5, 11756,
+ 0xd6, 11756,
+ 0xd7, 11756,
+ 0xd8, 11761,
+ 0xd9, 11761,
+ 0xda, 11761,
+ 0xdb, 11761,
+ 0xdc, 11761,
+ 0xdd, 11761,
+ 0xde, 11761,
+ 0xdf, 11761,
+ 0xE9, 11766,
+ /*11705*/ uint16(xCondSlashR),
+ 11714, // 0
+ 11718, // 1
+ 11722, // 2
+ 11726, // 3
+ 11730, // 4
+ 11734, // 5
+ 11738, // 6
+ 11742, // 7
+ /*11714*/ uint16(xSetOp), uint16(FIADD),
+ /*11716*/ uint16(xArgM32int),
+ /*11717*/ uint16(xMatch),
+ /*11718*/ uint16(xSetOp), uint16(FIMUL),
+ /*11720*/ uint16(xArgM32int),
+ /*11721*/ uint16(xMatch),
+ /*11722*/ uint16(xSetOp), uint16(FICOM),
+ /*11724*/ uint16(xArgM32int),
+ /*11725*/ uint16(xMatch),
+ /*11726*/ uint16(xSetOp), uint16(FICOMP),
+ /*11728*/ uint16(xArgM32int),
+ /*11729*/ uint16(xMatch),
+ /*11730*/ uint16(xSetOp), uint16(FISUB),
+ /*11732*/ uint16(xArgM32int),
+ /*11733*/ uint16(xMatch),
+ /*11734*/ uint16(xSetOp), uint16(FISUBR),
+ /*11736*/ uint16(xArgM32int),
+ /*11737*/ uint16(xMatch),
+ /*11738*/ uint16(xSetOp), uint16(FIDIV),
+ /*11740*/ uint16(xArgM32int),
+ /*11741*/ uint16(xMatch),
+ /*11742*/ uint16(xSetOp), uint16(FIDIVR),
+ /*11744*/ uint16(xArgM32int),
+ /*11745*/ uint16(xMatch),
+ /*11746*/ uint16(xSetOp), uint16(FCMOVB),
+ /*11748*/ uint16(xArgST),
+ /*11749*/ uint16(xArgSTi),
+ /*11750*/ uint16(xMatch),
+ /*11751*/ uint16(xSetOp), uint16(FCMOVE),
+ /*11753*/ uint16(xArgST),
+ /*11754*/ uint16(xArgSTi),
+ /*11755*/ uint16(xMatch),
+ /*11756*/ uint16(xSetOp), uint16(FCMOVBE),
+ /*11758*/ uint16(xArgST),
+ /*11759*/ uint16(xArgSTi),
+ /*11760*/ uint16(xMatch),
+ /*11761*/ uint16(xSetOp), uint16(FCMOVU),
+ /*11763*/ uint16(xArgST),
+ /*11764*/ uint16(xArgSTi),
+ /*11765*/ uint16(xMatch),
+ /*11766*/ uint16(xSetOp), uint16(FUCOMPP),
+ /*11768*/ uint16(xMatch),
+ /*11769*/ uint16(xCondByte), 50,
+ 0xc0, 11904,
+ 0xc1, 11904,
+ 0xc2, 11904,
+ 0xc3, 11904,
+ 0xc4, 11904,
+ 0xc5, 11904,
+ 0xc6, 11904,
+ 0xc7, 11904,
+ 0xc8, 11909,
+ 0xc9, 11909,
+ 0xca, 11909,
+ 0xcb, 11909,
+ 0xcc, 11909,
+ 0xcd, 11909,
+ 0xce, 11909,
+ 0xcf, 11909,
+ 0xd0, 11914,
+ 0xd1, 11914,
+ 0xd2, 11914,
+ 0xd3, 11914,
+ 0xd4, 11914,
+ 0xd5, 11914,
+ 0xd6, 11914,
+ 0xd7, 11914,
+ 0xd8, 11919,
+ 0xd9, 11919,
+ 0xda, 11919,
+ 0xdb, 11919,
+ 0xdc, 11919,
+ 0xdd, 11919,
+ 0xde, 11919,
+ 0xdf, 11919,
+ 0xE2, 11924,
+ 0xE3, 11927,
+ 0xe8, 11930,
+ 0xe9, 11930,
+ 0xea, 11930,
+ 0xeb, 11930,
+ 0xec, 11930,
+ 0xed, 11930,
+ 0xee, 11930,
+ 0xef, 11930,
+ 0xf0, 11935,
+ 0xf1, 11935,
+ 0xf2, 11935,
+ 0xf3, 11935,
+ 0xf4, 11935,
+ 0xf5, 11935,
+ 0xf6, 11935,
+ 0xf7, 11935,
+ /*11871*/ uint16(xCondSlashR),
+ 11880, // 0
+ 11884, // 1
+ 11888, // 2
+ 11892, // 3
+ 0, // 4
+ 11896, // 5
+ 0, // 6
+ 11900, // 7
+ /*11880*/ uint16(xSetOp), uint16(FILD),
+ /*11882*/ uint16(xArgM32int),
+ /*11883*/ uint16(xMatch),
+ /*11884*/ uint16(xSetOp), uint16(FISTTP),
+ /*11886*/ uint16(xArgM32int),
+ /*11887*/ uint16(xMatch),
+ /*11888*/ uint16(xSetOp), uint16(FIST),
+ /*11890*/ uint16(xArgM32int),
+ /*11891*/ uint16(xMatch),
+ /*11892*/ uint16(xSetOp), uint16(FISTP),
+ /*11894*/ uint16(xArgM32int),
+ /*11895*/ uint16(xMatch),
+ /*11896*/ uint16(xSetOp), uint16(FLD),
+ /*11898*/ uint16(xArgM80fp),
+ /*11899*/ uint16(xMatch),
+ /*11900*/ uint16(xSetOp), uint16(FSTP),
+ /*11902*/ uint16(xArgM80fp),
+ /*11903*/ uint16(xMatch),
+ /*11904*/ uint16(xSetOp), uint16(FCMOVNB),
+ /*11906*/ uint16(xArgST),
+ /*11907*/ uint16(xArgSTi),
+ /*11908*/ uint16(xMatch),
+ /*11909*/ uint16(xSetOp), uint16(FCMOVNE),
+ /*11911*/ uint16(xArgST),
+ /*11912*/ uint16(xArgSTi),
+ /*11913*/ uint16(xMatch),
+ /*11914*/ uint16(xSetOp), uint16(FCMOVNBE),
+ /*11916*/ uint16(xArgST),
+ /*11917*/ uint16(xArgSTi),
+ /*11918*/ uint16(xMatch),
+ /*11919*/ uint16(xSetOp), uint16(FCMOVNU),
+ /*11921*/ uint16(xArgST),
+ /*11922*/ uint16(xArgSTi),
+ /*11923*/ uint16(xMatch),
+ /*11924*/ uint16(xSetOp), uint16(FNCLEX),
+ /*11926*/ uint16(xMatch),
+ /*11927*/ uint16(xSetOp), uint16(FNINIT),
+ /*11929*/ uint16(xMatch),
+ /*11930*/ uint16(xSetOp), uint16(FUCOMI),
+ /*11932*/ uint16(xArgST),
+ /*11933*/ uint16(xArgSTi),
+ /*11934*/ uint16(xMatch),
+ /*11935*/ uint16(xSetOp), uint16(FCOMI),
+ /*11937*/ uint16(xArgST),
+ /*11938*/ uint16(xArgSTi),
+ /*11939*/ uint16(xMatch),
+ /*11940*/ uint16(xCondByte), 48,
+ 0xc0, 12079,
+ 0xc1, 12079,
+ 0xc2, 12079,
+ 0xc3, 12079,
+ 0xc4, 12079,
+ 0xc5, 12079,
+ 0xc6, 12079,
+ 0xc7, 12079,
+ 0xc8, 12084,
+ 0xc9, 12084,
+ 0xca, 12084,
+ 0xcb, 12084,
+ 0xcc, 12084,
+ 0xcd, 12084,
+ 0xce, 12084,
+ 0xcf, 12084,
+ 0xe0, 12089,
+ 0xe1, 12089,
+ 0xe2, 12089,
+ 0xe3, 12089,
+ 0xe4, 12089,
+ 0xe5, 12089,
+ 0xe6, 12089,
+ 0xe7, 12089,
+ 0xe8, 12094,
+ 0xe9, 12094,
+ 0xea, 12094,
+ 0xeb, 12094,
+ 0xec, 12094,
+ 0xed, 12094,
+ 0xee, 12094,
+ 0xef, 12094,
+ 0xf0, 12099,
+ 0xf1, 12099,
+ 0xf2, 12099,
+ 0xf3, 12099,
+ 0xf4, 12099,
+ 0xf5, 12099,
+ 0xf6, 12099,
+ 0xf7, 12099,
+ 0xf8, 12104,
+ 0xf9, 12104,
+ 0xfa, 12104,
+ 0xfb, 12104,
+ 0xfc, 12104,
+ 0xfd, 12104,
+ 0xfe, 12104,
+ 0xff, 12104,
+ /*12038*/ uint16(xCondSlashR),
+ 12047, // 0
+ 12051, // 1
+ 12055, // 2
+ 12059, // 3
+ 12063, // 4
+ 12067, // 5
+ 12071, // 6
+ 12075, // 7
+ /*12047*/ uint16(xSetOp), uint16(FADD),
+ /*12049*/ uint16(xArgM64fp),
+ /*12050*/ uint16(xMatch),
+ /*12051*/ uint16(xSetOp), uint16(FMUL),
+ /*12053*/ uint16(xArgM64fp),
+ /*12054*/ uint16(xMatch),
+ /*12055*/ uint16(xSetOp), uint16(FCOM),
+ /*12057*/ uint16(xArgM64fp),
+ /*12058*/ uint16(xMatch),
+ /*12059*/ uint16(xSetOp), uint16(FCOMP),
+ /*12061*/ uint16(xArgM64fp),
+ /*12062*/ uint16(xMatch),
+ /*12063*/ uint16(xSetOp), uint16(FSUB),
+ /*12065*/ uint16(xArgM64fp),
+ /*12066*/ uint16(xMatch),
+ /*12067*/ uint16(xSetOp), uint16(FSUBR),
+ /*12069*/ uint16(xArgM64fp),
+ /*12070*/ uint16(xMatch),
+ /*12071*/ uint16(xSetOp), uint16(FDIV),
+ /*12073*/ uint16(xArgM64fp),
+ /*12074*/ uint16(xMatch),
+ /*12075*/ uint16(xSetOp), uint16(FDIVR),
+ /*12077*/ uint16(xArgM64fp),
+ /*12078*/ uint16(xMatch),
+ /*12079*/ uint16(xSetOp), uint16(FADD),
+ /*12081*/ uint16(xArgSTi),
+ /*12082*/ uint16(xArgST),
+ /*12083*/ uint16(xMatch),
+ /*12084*/ uint16(xSetOp), uint16(FMUL),
+ /*12086*/ uint16(xArgSTi),
+ /*12087*/ uint16(xArgST),
+ /*12088*/ uint16(xMatch),
+ /*12089*/ uint16(xSetOp), uint16(FSUBR),
+ /*12091*/ uint16(xArgSTi),
+ /*12092*/ uint16(xArgST),
+ /*12093*/ uint16(xMatch),
+ /*12094*/ uint16(xSetOp), uint16(FSUB),
+ /*12096*/ uint16(xArgSTi),
+ /*12097*/ uint16(xArgST),
+ /*12098*/ uint16(xMatch),
+ /*12099*/ uint16(xSetOp), uint16(FDIVR),
+ /*12101*/ uint16(xArgSTi),
+ /*12102*/ uint16(xArgST),
+ /*12103*/ uint16(xMatch),
+ /*12104*/ uint16(xSetOp), uint16(FDIV),
+ /*12106*/ uint16(xArgSTi),
+ /*12107*/ uint16(xArgST),
+ /*12108*/ uint16(xMatch),
+ /*12109*/ uint16(xCondByte), 40,
+ 0xc0, 12228,
+ 0xc1, 12228,
+ 0xc2, 12228,
+ 0xc3, 12228,
+ 0xc4, 12228,
+ 0xc5, 12228,
+ 0xc6, 12228,
+ 0xc7, 12228,
+ 0xd0, 12232,
+ 0xd1, 12232,
+ 0xd2, 12232,
+ 0xd3, 12232,
+ 0xd4, 12232,
+ 0xd5, 12232,
+ 0xd6, 12232,
+ 0xd7, 12232,
+ 0xd8, 12236,
+ 0xd9, 12236,
+ 0xda, 12236,
+ 0xdb, 12236,
+ 0xdc, 12236,
+ 0xdd, 12236,
+ 0xde, 12236,
+ 0xdf, 12236,
+ 0xe0, 12240,
+ 0xe1, 12240,
+ 0xe2, 12240,
+ 0xe3, 12240,
+ 0xe4, 12240,
+ 0xe5, 12240,
+ 0xe6, 12240,
+ 0xe7, 12240,
+ 0xe8, 12244,
+ 0xe9, 12244,
+ 0xea, 12244,
+ 0xeb, 12244,
+ 0xec, 12244,
+ 0xed, 12244,
+ 0xee, 12244,
+ 0xef, 12244,
+ /*12191*/ uint16(xCondSlashR),
+ 12200, // 0
+ 12204, // 1
+ 12208, // 2
+ 12212, // 3
+ 12216, // 4
+ 0, // 5
+ 12220, // 6
+ 12224, // 7
+ /*12200*/ uint16(xSetOp), uint16(FLD),
+ /*12202*/ uint16(xArgM64fp),
+ /*12203*/ uint16(xMatch),
+ /*12204*/ uint16(xSetOp), uint16(FISTTP),
+ /*12206*/ uint16(xArgM64int),
+ /*12207*/ uint16(xMatch),
+ /*12208*/ uint16(xSetOp), uint16(FST),
+ /*12210*/ uint16(xArgM64fp),
+ /*12211*/ uint16(xMatch),
+ /*12212*/ uint16(xSetOp), uint16(FSTP),
+ /*12214*/ uint16(xArgM64fp),
+ /*12215*/ uint16(xMatch),
+ /*12216*/ uint16(xSetOp), uint16(FRSTOR),
+ /*12218*/ uint16(xArgM94108byte),
+ /*12219*/ uint16(xMatch),
+ /*12220*/ uint16(xSetOp), uint16(FNSAVE),
+ /*12222*/ uint16(xArgM94108byte),
+ /*12223*/ uint16(xMatch),
+ /*12224*/ uint16(xSetOp), uint16(FNSTSW),
+ /*12226*/ uint16(xArgM2byte),
+ /*12227*/ uint16(xMatch),
+ /*12228*/ uint16(xSetOp), uint16(FFREE),
+ /*12230*/ uint16(xArgSTi),
+ /*12231*/ uint16(xMatch),
+ /*12232*/ uint16(xSetOp), uint16(FST),
+ /*12234*/ uint16(xArgSTi),
+ /*12235*/ uint16(xMatch),
+ /*12236*/ uint16(xSetOp), uint16(FSTP),
+ /*12238*/ uint16(xArgSTi),
+ /*12239*/ uint16(xMatch),
+ /*12240*/ uint16(xSetOp), uint16(FUCOM),
+ /*12242*/ uint16(xArgSTi),
+ /*12243*/ uint16(xMatch),
+ /*12244*/ uint16(xSetOp), uint16(FUCOMP),
+ /*12246*/ uint16(xArgSTi),
+ /*12247*/ uint16(xMatch),
+ /*12248*/ uint16(xCondByte), 49,
+ 0xc0, 12389,
+ 0xc1, 12389,
+ 0xc2, 12389,
+ 0xc3, 12389,
+ 0xc4, 12389,
+ 0xc5, 12389,
+ 0xc6, 12389,
+ 0xc7, 12389,
+ 0xc8, 12394,
+ 0xc9, 12394,
+ 0xca, 12394,
+ 0xcb, 12394,
+ 0xcc, 12394,
+ 0xcd, 12394,
+ 0xce, 12394,
+ 0xcf, 12394,
+ 0xD9, 12399,
+ 0xe0, 12402,
+ 0xe1, 12402,
+ 0xe2, 12402,
+ 0xe3, 12402,
+ 0xe4, 12402,
+ 0xe5, 12402,
+ 0xe6, 12402,
+ 0xe7, 12402,
+ 0xe8, 12407,
+ 0xe9, 12407,
+ 0xea, 12407,
+ 0xeb, 12407,
+ 0xec, 12407,
+ 0xed, 12407,
+ 0xee, 12407,
+ 0xef, 12407,
+ 0xf0, 12412,
+ 0xf1, 12412,
+ 0xf2, 12412,
+ 0xf3, 12412,
+ 0xf4, 12412,
+ 0xf5, 12412,
+ 0xf6, 12412,
+ 0xf7, 12412,
+ 0xf8, 12417,
+ 0xf9, 12417,
+ 0xfa, 12417,
+ 0xfb, 12417,
+ 0xfc, 12417,
+ 0xfd, 12417,
+ 0xfe, 12417,
+ 0xff, 12417,
+ /*12348*/ uint16(xCondSlashR),
+ 12357, // 0
+ 12361, // 1
+ 12365, // 2
+ 12369, // 3
+ 12373, // 4
+ 12377, // 5
+ 12381, // 6
+ 12385, // 7
+ /*12357*/ uint16(xSetOp), uint16(FIADD),
+ /*12359*/ uint16(xArgM16int),
+ /*12360*/ uint16(xMatch),
+ /*12361*/ uint16(xSetOp), uint16(FIMUL),
+ /*12363*/ uint16(xArgM16int),
+ /*12364*/ uint16(xMatch),
+ /*12365*/ uint16(xSetOp), uint16(FICOM),
+ /*12367*/ uint16(xArgM16int),
+ /*12368*/ uint16(xMatch),
+ /*12369*/ uint16(xSetOp), uint16(FICOMP),
+ /*12371*/ uint16(xArgM16int),
+ /*12372*/ uint16(xMatch),
+ /*12373*/ uint16(xSetOp), uint16(FISUB),
+ /*12375*/ uint16(xArgM16int),
+ /*12376*/ uint16(xMatch),
+ /*12377*/ uint16(xSetOp), uint16(FISUBR),
+ /*12379*/ uint16(xArgM16int),
+ /*12380*/ uint16(xMatch),
+ /*12381*/ uint16(xSetOp), uint16(FIDIV),
+ /*12383*/ uint16(xArgM16int),
+ /*12384*/ uint16(xMatch),
+ /*12385*/ uint16(xSetOp), uint16(FIDIVR),
+ /*12387*/ uint16(xArgM16int),
+ /*12388*/ uint16(xMatch),
+ /*12389*/ uint16(xSetOp), uint16(FADDP),
+ /*12391*/ uint16(xArgSTi),
+ /*12392*/ uint16(xArgST),
+ /*12393*/ uint16(xMatch),
+ /*12394*/ uint16(xSetOp), uint16(FMULP),
+ /*12396*/ uint16(xArgSTi),
+ /*12397*/ uint16(xArgST),
+ /*12398*/ uint16(xMatch),
+ /*12399*/ uint16(xSetOp), uint16(FCOMPP),
+ /*12401*/ uint16(xMatch),
+ /*12402*/ uint16(xSetOp), uint16(FSUBRP),
+ /*12404*/ uint16(xArgSTi),
+ /*12405*/ uint16(xArgST),
+ /*12406*/ uint16(xMatch),
+ /*12407*/ uint16(xSetOp), uint16(FSUBP),
+ /*12409*/ uint16(xArgSTi),
+ /*12410*/ uint16(xArgST),
+ /*12411*/ uint16(xMatch),
+ /*12412*/ uint16(xSetOp), uint16(FDIVRP),
+ /*12414*/ uint16(xArgSTi),
+ /*12415*/ uint16(xArgST),
+ /*12416*/ uint16(xMatch),
+ /*12417*/ uint16(xSetOp), uint16(FDIVP),
+ /*12419*/ uint16(xArgSTi),
+ /*12420*/ uint16(xArgST),
+ /*12421*/ uint16(xMatch),
+ /*12422*/ uint16(xCondByte), 25,
+ 0xc0, 12515,
+ 0xc1, 12515,
+ 0xc2, 12515,
+ 0xc3, 12515,
+ 0xc4, 12515,
+ 0xc5, 12515,
+ 0xc6, 12515,
+ 0xc7, 12515,
+ 0xE0, 12519,
+ 0xe8, 12523,
+ 0xe9, 12523,
+ 0xea, 12523,
+ 0xeb, 12523,
+ 0xec, 12523,
+ 0xed, 12523,
+ 0xee, 12523,
+ 0xef, 12523,
+ 0xf0, 12528,
+ 0xf1, 12528,
+ 0xf2, 12528,
+ 0xf3, 12528,
+ 0xf4, 12528,
+ 0xf5, 12528,
+ 0xf6, 12528,
+ 0xf7, 12528,
+ /*12474*/ uint16(xCondSlashR),
+ 12483, // 0
+ 12487, // 1
+ 12491, // 2
+ 12495, // 3
+ 12499, // 4
+ 12503, // 5
+ 12507, // 6
+ 12511, // 7
+ /*12483*/ uint16(xSetOp), uint16(FILD),
+ /*12485*/ uint16(xArgM16int),
+ /*12486*/ uint16(xMatch),
+ /*12487*/ uint16(xSetOp), uint16(FISTTP),
+ /*12489*/ uint16(xArgM16int),
+ /*12490*/ uint16(xMatch),
+ /*12491*/ uint16(xSetOp), uint16(FIST),
+ /*12493*/ uint16(xArgM16int),
+ /*12494*/ uint16(xMatch),
+ /*12495*/ uint16(xSetOp), uint16(FISTP),
+ /*12497*/ uint16(xArgM16int),
+ /*12498*/ uint16(xMatch),
+ /*12499*/ uint16(xSetOp), uint16(FBLD),
+ /*12501*/ uint16(xArgM80dec),
+ /*12502*/ uint16(xMatch),
+ /*12503*/ uint16(xSetOp), uint16(FILD),
+ /*12505*/ uint16(xArgM64int),
+ /*12506*/ uint16(xMatch),
+ /*12507*/ uint16(xSetOp), uint16(FBSTP),
+ /*12509*/ uint16(xArgM80bcd),
+ /*12510*/ uint16(xMatch),
+ /*12511*/ uint16(xSetOp), uint16(FISTP),
+ /*12513*/ uint16(xArgM64int),
+ /*12514*/ uint16(xMatch),
+ /*12515*/ uint16(xSetOp), uint16(FFREEP),
+ /*12517*/ uint16(xArgSTi),
+ /*12518*/ uint16(xMatch),
+ /*12519*/ uint16(xSetOp), uint16(FNSTSW),
+ /*12521*/ uint16(xArgAX),
+ /*12522*/ uint16(xMatch),
+ /*12523*/ uint16(xSetOp), uint16(FUCOMIP),
+ /*12525*/ uint16(xArgST),
+ /*12526*/ uint16(xArgSTi),
+ /*12527*/ uint16(xMatch),
+ /*12528*/ uint16(xSetOp), uint16(FCOMIP),
+ /*12530*/ uint16(xArgST),
+ /*12531*/ uint16(xArgSTi),
+ /*12532*/ uint16(xMatch),
+ /*12533*/ uint16(xSetOp), uint16(LOOPNE),
+ /*12535*/ uint16(xReadCb),
+ /*12536*/ uint16(xArgRel8),
+ /*12537*/ uint16(xMatch),
+ /*12538*/ uint16(xSetOp), uint16(LOOPE),
+ /*12540*/ uint16(xReadCb),
+ /*12541*/ uint16(xArgRel8),
+ /*12542*/ uint16(xMatch),
+ /*12543*/ uint16(xSetOp), uint16(LOOP),
+ /*12545*/ uint16(xReadCb),
+ /*12546*/ uint16(xArgRel8),
+ /*12547*/ uint16(xMatch),
+ /*12548*/ uint16(xCondIs64), 12551, 12565,
+ /*12551*/ uint16(xCondAddrSize), 12555, 12560, 0,
+ /*12555*/ uint16(xSetOp), uint16(JCXZ),
+ /*12557*/ uint16(xReadCb),
+ /*12558*/ uint16(xArgRel8),
+ /*12559*/ uint16(xMatch),
+ /*12560*/ uint16(xSetOp), uint16(JECXZ),
+ /*12562*/ uint16(xReadCb),
+ /*12563*/ uint16(xArgRel8),
+ /*12564*/ uint16(xMatch),
+ /*12565*/ uint16(xCondAddrSize), 0, 12560, 12569,
+ /*12569*/ uint16(xSetOp), uint16(JRCXZ),
+ /*12571*/ uint16(xReadCb),
+ /*12572*/ uint16(xArgRel8),
+ /*12573*/ uint16(xMatch),
+ /*12574*/ uint16(xSetOp), uint16(IN),
+ /*12576*/ uint16(xReadIb),
+ /*12577*/ uint16(xArgAL),
+ /*12578*/ uint16(xArgImm8u),
+ /*12579*/ uint16(xMatch),
+ /*12580*/ uint16(xCondDataSize), 12584, 12590, 12596,
+ /*12584*/ uint16(xSetOp), uint16(IN),
+ /*12586*/ uint16(xReadIb),
+ /*12587*/ uint16(xArgAX),
+ /*12588*/ uint16(xArgImm8u),
+ /*12589*/ uint16(xMatch),
+ /*12590*/ uint16(xSetOp), uint16(IN),
+ /*12592*/ uint16(xReadIb),
+ /*12593*/ uint16(xArgEAX),
+ /*12594*/ uint16(xArgImm8u),
+ /*12595*/ uint16(xMatch),
+ /*12596*/ uint16(xSetOp), uint16(IN),
+ /*12598*/ uint16(xReadIb),
+ /*12599*/ uint16(xArgEAX),
+ /*12600*/ uint16(xArgImm8u),
+ /*12601*/ uint16(xMatch),
+ /*12602*/ uint16(xSetOp), uint16(OUT),
+ /*12604*/ uint16(xReadIb),
+ /*12605*/ uint16(xArgImm8u),
+ /*12606*/ uint16(xArgAL),
+ /*12607*/ uint16(xMatch),
+ /*12608*/ uint16(xCondDataSize), 12612, 12618, 12624,
+ /*12612*/ uint16(xSetOp), uint16(OUT),
+ /*12614*/ uint16(xReadIb),
+ /*12615*/ uint16(xArgImm8u),
+ /*12616*/ uint16(xArgAX),
+ /*12617*/ uint16(xMatch),
+ /*12618*/ uint16(xSetOp), uint16(OUT),
+ /*12620*/ uint16(xReadIb),
+ /*12621*/ uint16(xArgImm8u),
+ /*12622*/ uint16(xArgEAX),
+ /*12623*/ uint16(xMatch),
+ /*12624*/ uint16(xSetOp), uint16(OUT),
+ /*12626*/ uint16(xReadIb),
+ /*12627*/ uint16(xArgImm8u),
+ /*12628*/ uint16(xArgEAX),
+ /*12629*/ uint16(xMatch),
+ /*12630*/ uint16(xCondIs64), 12633, 12647,
+ /*12633*/ uint16(xCondDataSize), 12637, 12642, 0,
+ /*12637*/ uint16(xSetOp), uint16(CALL),
+ /*12639*/ uint16(xReadCw),
+ /*12640*/ uint16(xArgRel16),
+ /*12641*/ uint16(xMatch),
+ /*12642*/ uint16(xSetOp), uint16(CALL),
+ /*12644*/ uint16(xReadCd),
+ /*12645*/ uint16(xArgRel32),
+ /*12646*/ uint16(xMatch),
+ /*12647*/ uint16(xCondDataSize), 12651, 12642, 12656,
+ /*12651*/ uint16(xSetOp), uint16(CALL),
+ /*12653*/ uint16(xReadCd),
+ /*12654*/ uint16(xArgRel32),
+ /*12655*/ uint16(xMatch),
+ /*12656*/ uint16(xSetOp), uint16(CALL),
+ /*12658*/ uint16(xReadCd),
+ /*12659*/ uint16(xArgRel32),
+ /*12660*/ uint16(xMatch),
+ /*12661*/ uint16(xCondIs64), 12664, 12678,
+ /*12664*/ uint16(xCondDataSize), 12668, 12673, 0,
+ /*12668*/ uint16(xSetOp), uint16(JMP),
+ /*12670*/ uint16(xReadCw),
+ /*12671*/ uint16(xArgRel16),
+ /*12672*/ uint16(xMatch),
+ /*12673*/ uint16(xSetOp), uint16(JMP),
+ /*12675*/ uint16(xReadCd),
+ /*12676*/ uint16(xArgRel32),
+ /*12677*/ uint16(xMatch),
+ /*12678*/ uint16(xCondDataSize), 12682, 12673, 12687,
+ /*12682*/ uint16(xSetOp), uint16(JMP),
+ /*12684*/ uint16(xReadCd),
+ /*12685*/ uint16(xArgRel32),
+ /*12686*/ uint16(xMatch),
+ /*12687*/ uint16(xSetOp), uint16(JMP),
+ /*12689*/ uint16(xReadCd),
+ /*12690*/ uint16(xArgRel32),
+ /*12691*/ uint16(xMatch),
+ /*12692*/ uint16(xCondIs64), 12695, 0,
+ /*12695*/ uint16(xCondDataSize), 12699, 12704, 0,
+ /*12699*/ uint16(xSetOp), uint16(LJMP),
+ /*12701*/ uint16(xReadCd),
+ /*12702*/ uint16(xArgPtr16colon16),
+ /*12703*/ uint16(xMatch),
+ /*12704*/ uint16(xSetOp), uint16(LJMP),
+ /*12706*/ uint16(xReadCp),
+ /*12707*/ uint16(xArgPtr16colon32),
+ /*12708*/ uint16(xMatch),
+ /*12709*/ uint16(xSetOp), uint16(JMP),
+ /*12711*/ uint16(xReadCb),
+ /*12712*/ uint16(xArgRel8),
+ /*12713*/ uint16(xMatch),
+ /*12714*/ uint16(xSetOp), uint16(IN),
+ /*12716*/ uint16(xArgAL),
+ /*12717*/ uint16(xArgDX),
+ /*12718*/ uint16(xMatch),
+ /*12719*/ uint16(xCondDataSize), 12723, 12728, 12733,
+ /*12723*/ uint16(xSetOp), uint16(IN),
+ /*12725*/ uint16(xArgAX),
+ /*12726*/ uint16(xArgDX),
+ /*12727*/ uint16(xMatch),
+ /*12728*/ uint16(xSetOp), uint16(IN),
+ /*12730*/ uint16(xArgEAX),
+ /*12731*/ uint16(xArgDX),
+ /*12732*/ uint16(xMatch),
+ /*12733*/ uint16(xSetOp), uint16(IN),
+ /*12735*/ uint16(xArgEAX),
+ /*12736*/ uint16(xArgDX),
+ /*12737*/ uint16(xMatch),
+ /*12738*/ uint16(xSetOp), uint16(OUT),
+ /*12740*/ uint16(xArgDX),
+ /*12741*/ uint16(xArgAL),
+ /*12742*/ uint16(xMatch),
+ /*12743*/ uint16(xCondDataSize), 12747, 12752, 12757,
+ /*12747*/ uint16(xSetOp), uint16(OUT),
+ /*12749*/ uint16(xArgDX),
+ /*12750*/ uint16(xArgAX),
+ /*12751*/ uint16(xMatch),
+ /*12752*/ uint16(xSetOp), uint16(OUT),
+ /*12754*/ uint16(xArgDX),
+ /*12755*/ uint16(xArgEAX),
+ /*12756*/ uint16(xMatch),
+ /*12757*/ uint16(xSetOp), uint16(OUT),
+ /*12759*/ uint16(xArgDX),
+ /*12760*/ uint16(xArgEAX),
+ /*12761*/ uint16(xMatch),
+ /*12762*/ uint16(xSetOp), uint16(ICEBP),
+ /*12764*/ uint16(xMatch),
+ /*12765*/ uint16(xSetOp), uint16(HLT),
+ /*12767*/ uint16(xMatch),
+ /*12768*/ uint16(xSetOp), uint16(CMC),
+ /*12770*/ uint16(xMatch),
+ /*12771*/ uint16(xCondSlashR),
+ 12780, // 0
+ 0, // 1
+ 12786, // 2
+ 12790, // 3
+ 12794, // 4
+ 12798, // 5
+ 12802, // 6
+ 12806, // 7
+ /*12780*/ uint16(xSetOp), uint16(TEST),
+ /*12782*/ uint16(xReadIb),
+ /*12783*/ uint16(xArgRM8),
+ /*12784*/ uint16(xArgImm8u),
+ /*12785*/ uint16(xMatch),
+ /*12786*/ uint16(xSetOp), uint16(NOT),
+ /*12788*/ uint16(xArgRM8),
+ /*12789*/ uint16(xMatch),
+ /*12790*/ uint16(xSetOp), uint16(NEG),
+ /*12792*/ uint16(xArgRM8),
+ /*12793*/ uint16(xMatch),
+ /*12794*/ uint16(xSetOp), uint16(MUL),
+ /*12796*/ uint16(xArgRM8),
+ /*12797*/ uint16(xMatch),
+ /*12798*/ uint16(xSetOp), uint16(IMUL),
+ /*12800*/ uint16(xArgRM8),
+ /*12801*/ uint16(xMatch),
+ /*12802*/ uint16(xSetOp), uint16(DIV),
+ /*12804*/ uint16(xArgRM8),
+ /*12805*/ uint16(xMatch),
+ /*12806*/ uint16(xSetOp), uint16(IDIV),
+ /*12808*/ uint16(xArgRM8),
+ /*12809*/ uint16(xMatch),
+ /*12810*/ uint16(xCondSlashR),
+ 12819, // 0
+ 0, // 1
+ 12848, // 2
+ 12871, // 3
+ 12894, // 4
+ 12917, // 5
+ 12940, // 6
+ 12963, // 7
+ /*12819*/ uint16(xCondIs64), 12822, 12838,
+ /*12822*/ uint16(xCondDataSize), 12826, 12832, 0,
+ /*12826*/ uint16(xSetOp), uint16(TEST),
+ /*12828*/ uint16(xReadIw),
+ /*12829*/ uint16(xArgRM16),
+ /*12830*/ uint16(xArgImm16),
+ /*12831*/ uint16(xMatch),
+ /*12832*/ uint16(xSetOp), uint16(TEST),
+ /*12834*/ uint16(xReadId),
+ /*12835*/ uint16(xArgRM32),
+ /*12836*/ uint16(xArgImm32),
+ /*12837*/ uint16(xMatch),
+ /*12838*/ uint16(xCondDataSize), 12826, 12832, 12842,
+ /*12842*/ uint16(xSetOp), uint16(TEST),
+ /*12844*/ uint16(xReadId),
+ /*12845*/ uint16(xArgRM64),
+ /*12846*/ uint16(xArgImm32),
+ /*12847*/ uint16(xMatch),
+ /*12848*/ uint16(xCondIs64), 12851, 12863,
+ /*12851*/ uint16(xCondDataSize), 12855, 12859, 0,
+ /*12855*/ uint16(xSetOp), uint16(NOT),
+ /*12857*/ uint16(xArgRM16),
+ /*12858*/ uint16(xMatch),
+ /*12859*/ uint16(xSetOp), uint16(NOT),
+ /*12861*/ uint16(xArgRM32),
+ /*12862*/ uint16(xMatch),
+ /*12863*/ uint16(xCondDataSize), 12855, 12859, 12867,
+ /*12867*/ uint16(xSetOp), uint16(NOT),
+ /*12869*/ uint16(xArgRM64),
+ /*12870*/ uint16(xMatch),
+ /*12871*/ uint16(xCondIs64), 12874, 12886,
+ /*12874*/ uint16(xCondDataSize), 12878, 12882, 0,
+ /*12878*/ uint16(xSetOp), uint16(NEG),
+ /*12880*/ uint16(xArgRM16),
+ /*12881*/ uint16(xMatch),
+ /*12882*/ uint16(xSetOp), uint16(NEG),
+ /*12884*/ uint16(xArgRM32),
+ /*12885*/ uint16(xMatch),
+ /*12886*/ uint16(xCondDataSize), 12878, 12882, 12890,
+ /*12890*/ uint16(xSetOp), uint16(NEG),
+ /*12892*/ uint16(xArgRM64),
+ /*12893*/ uint16(xMatch),
+ /*12894*/ uint16(xCondIs64), 12897, 12909,
+ /*12897*/ uint16(xCondDataSize), 12901, 12905, 0,
+ /*12901*/ uint16(xSetOp), uint16(MUL),
+ /*12903*/ uint16(xArgRM16),
+ /*12904*/ uint16(xMatch),
+ /*12905*/ uint16(xSetOp), uint16(MUL),
+ /*12907*/ uint16(xArgRM32),
+ /*12908*/ uint16(xMatch),
+ /*12909*/ uint16(xCondDataSize), 12901, 12905, 12913,
+ /*12913*/ uint16(xSetOp), uint16(MUL),
+ /*12915*/ uint16(xArgRM64),
+ /*12916*/ uint16(xMatch),
+ /*12917*/ uint16(xCondIs64), 12920, 12932,
+ /*12920*/ uint16(xCondDataSize), 12924, 12928, 0,
+ /*12924*/ uint16(xSetOp), uint16(IMUL),
+ /*12926*/ uint16(xArgRM16),
+ /*12927*/ uint16(xMatch),
+ /*12928*/ uint16(xSetOp), uint16(IMUL),
+ /*12930*/ uint16(xArgRM32),
+ /*12931*/ uint16(xMatch),
+ /*12932*/ uint16(xCondDataSize), 12924, 12928, 12936,
+ /*12936*/ uint16(xSetOp), uint16(IMUL),
+ /*12938*/ uint16(xArgRM64),
+ /*12939*/ uint16(xMatch),
+ /*12940*/ uint16(xCondIs64), 12943, 12955,
+ /*12943*/ uint16(xCondDataSize), 12947, 12951, 0,
+ /*12947*/ uint16(xSetOp), uint16(DIV),
+ /*12949*/ uint16(xArgRM16),
+ /*12950*/ uint16(xMatch),
+ /*12951*/ uint16(xSetOp), uint16(DIV),
+ /*12953*/ uint16(xArgRM32),
+ /*12954*/ uint16(xMatch),
+ /*12955*/ uint16(xCondDataSize), 12947, 12951, 12959,
+ /*12959*/ uint16(xSetOp), uint16(DIV),
+ /*12961*/ uint16(xArgRM64),
+ /*12962*/ uint16(xMatch),
+ /*12963*/ uint16(xCondIs64), 12966, 12978,
+ /*12966*/ uint16(xCondDataSize), 12970, 12974, 0,
+ /*12970*/ uint16(xSetOp), uint16(IDIV),
+ /*12972*/ uint16(xArgRM16),
+ /*12973*/ uint16(xMatch),
+ /*12974*/ uint16(xSetOp), uint16(IDIV),
+ /*12976*/ uint16(xArgRM32),
+ /*12977*/ uint16(xMatch),
+ /*12978*/ uint16(xCondDataSize), 12970, 12974, 12982,
+ /*12982*/ uint16(xSetOp), uint16(IDIV),
+ /*12984*/ uint16(xArgRM64),
+ /*12985*/ uint16(xMatch),
+ /*12986*/ uint16(xSetOp), uint16(CLC),
+ /*12988*/ uint16(xMatch),
+ /*12989*/ uint16(xSetOp), uint16(STC),
+ /*12991*/ uint16(xMatch),
+ /*12992*/ uint16(xSetOp), uint16(CLI),
+ /*12994*/ uint16(xMatch),
+ /*12995*/ uint16(xSetOp), uint16(STI),
+ /*12997*/ uint16(xMatch),
+ /*12998*/ uint16(xSetOp), uint16(CLD),
+ /*13000*/ uint16(xMatch),
+ /*13001*/ uint16(xSetOp), uint16(STD),
+ /*13003*/ uint16(xMatch),
+ /*13004*/ uint16(xCondSlashR),
+ 13013, // 0
+ 13017, // 1
+ 0, // 2
+ 0, // 3
+ 0, // 4
+ 0, // 5
+ 0, // 6
+ 0, // 7
+ /*13013*/ uint16(xSetOp), uint16(INC),
+ /*13015*/ uint16(xArgRM8),
+ /*13016*/ uint16(xMatch),
+ /*13017*/ uint16(xSetOp), uint16(DEC),
+ /*13019*/ uint16(xArgRM8),
+ /*13020*/ uint16(xMatch),
+ /*13021*/ uint16(xCondSlashR),
+ 13030, // 0
+ 13053, // 1
+ 13076, // 2
+ 13095, // 3
+ 13118, // 4
+ 13137, // 5
+ 13160, // 6
+ 0, // 7
+ /*13030*/ uint16(xCondIs64), 13033, 13045,
+ /*13033*/ uint16(xCondDataSize), 13037, 13041, 0,
+ /*13037*/ uint16(xSetOp), uint16(INC),
+ /*13039*/ uint16(xArgRM16),
+ /*13040*/ uint16(xMatch),
+ /*13041*/ uint16(xSetOp), uint16(INC),
+ /*13043*/ uint16(xArgRM32),
+ /*13044*/ uint16(xMatch),
+ /*13045*/ uint16(xCondDataSize), 13037, 13041, 13049,
+ /*13049*/ uint16(xSetOp), uint16(INC),
+ /*13051*/ uint16(xArgRM64),
+ /*13052*/ uint16(xMatch),
+ /*13053*/ uint16(xCondIs64), 13056, 13068,
+ /*13056*/ uint16(xCondDataSize), 13060, 13064, 0,
+ /*13060*/ uint16(xSetOp), uint16(DEC),
+ /*13062*/ uint16(xArgRM16),
+ /*13063*/ uint16(xMatch),
+ /*13064*/ uint16(xSetOp), uint16(DEC),
+ /*13066*/ uint16(xArgRM32),
+ /*13067*/ uint16(xMatch),
+ /*13068*/ uint16(xCondDataSize), 13060, 13064, 13072,
+ /*13072*/ uint16(xSetOp), uint16(DEC),
+ /*13074*/ uint16(xArgRM64),
+ /*13075*/ uint16(xMatch),
+ /*13076*/ uint16(xCondIs64), 13079, 13091,
+ /*13079*/ uint16(xCondDataSize), 13083, 13087, 0,
+ /*13083*/ uint16(xSetOp), uint16(CALL),
+ /*13085*/ uint16(xArgRM16),
+ /*13086*/ uint16(xMatch),
+ /*13087*/ uint16(xSetOp), uint16(CALL),
+ /*13089*/ uint16(xArgRM32),
+ /*13090*/ uint16(xMatch),
+ /*13091*/ uint16(xSetOp), uint16(CALL),
+ /*13093*/ uint16(xArgRM64),
+ /*13094*/ uint16(xMatch),
+ /*13095*/ uint16(xCondIs64), 13098, 13110,
+ /*13098*/ uint16(xCondDataSize), 13102, 13106, 0,
+ /*13102*/ uint16(xSetOp), uint16(LCALL),
+ /*13104*/ uint16(xArgM16colon16),
+ /*13105*/ uint16(xMatch),
+ /*13106*/ uint16(xSetOp), uint16(LCALL),
+ /*13108*/ uint16(xArgM16colon32),
+ /*13109*/ uint16(xMatch),
+ /*13110*/ uint16(xCondDataSize), 13102, 13106, 13114,
+ /*13114*/ uint16(xSetOp), uint16(LCALL),
+ /*13116*/ uint16(xArgM16colon64),
+ /*13117*/ uint16(xMatch),
+ /*13118*/ uint16(xCondIs64), 13121, 13133,
+ /*13121*/ uint16(xCondDataSize), 13125, 13129, 0,
+ /*13125*/ uint16(xSetOp), uint16(JMP),
+ /*13127*/ uint16(xArgRM16),
+ /*13128*/ uint16(xMatch),
+ /*13129*/ uint16(xSetOp), uint16(JMP),
+ /*13131*/ uint16(xArgRM32),
+ /*13132*/ uint16(xMatch),
+ /*13133*/ uint16(xSetOp), uint16(JMP),
+ /*13135*/ uint16(xArgRM64),
+ /*13136*/ uint16(xMatch),
+ /*13137*/ uint16(xCondIs64), 13140, 13152,
+ /*13140*/ uint16(xCondDataSize), 13144, 13148, 0,
+ /*13144*/ uint16(xSetOp), uint16(LJMP),
+ /*13146*/ uint16(xArgM16colon16),
+ /*13147*/ uint16(xMatch),
+ /*13148*/ uint16(xSetOp), uint16(LJMP),
+ /*13150*/ uint16(xArgM16colon32),
+ /*13151*/ uint16(xMatch),
+ /*13152*/ uint16(xCondDataSize), 13144, 13148, 13156,
+ /*13156*/ uint16(xSetOp), uint16(LJMP),
+ /*13158*/ uint16(xArgM16colon64),
+ /*13159*/ uint16(xMatch),
+ /*13160*/ uint16(xCondIs64), 13163, 13175,
+ /*13163*/ uint16(xCondDataSize), 13167, 13171, 0,
+ /*13167*/ uint16(xSetOp), uint16(PUSH),
+ /*13169*/ uint16(xArgRM16),
+ /*13170*/ uint16(xMatch),
+ /*13171*/ uint16(xSetOp), uint16(PUSH),
+ /*13173*/ uint16(xArgRM32),
+ /*13174*/ uint16(xMatch),
+ /*13175*/ uint16(xCondDataSize), 13167, 13179, 13183,
+ /*13179*/ uint16(xSetOp), uint16(PUSH),
+ /*13181*/ uint16(xArgRM64),
+ /*13182*/ uint16(xMatch),
+ /*13183*/ uint16(xSetOp), uint16(PUSH),
+ /*13185*/ uint16(xArgRM64),
+ /*13186*/ uint16(xMatch),
+}
+
+const (
+ _ Op = iota
+
+ AAA
+ AAD
+ AAM
+ AAS
+ ADC
+ ADD
+ ADDPD
+ ADDPS
+ ADDSD
+ ADDSS
+ ADDSUBPD
+ ADDSUBPS
+ AESDEC
+ AESDECLAST
+ AESENC
+ AESENCLAST
+ AESIMC
+ AESKEYGENASSIST
+ AND
+ ANDNPD
+ ANDNPS
+ ANDPD
+ ANDPS
+ ARPL
+ BLENDPD
+ BLENDPS
+ BLENDVPD
+ BLENDVPS
+ BOUND
+ BSF
+ BSR
+ BSWAP
+ BT
+ BTC
+ BTR
+ BTS
+ CALL
+ CBW
+ CDQ
+ CDQE
+ CLC
+ CLD
+ CLFLUSH
+ CLI
+ CLTS
+ CMC
+ CMOVA
+ CMOVAE
+ CMOVB
+ CMOVBE
+ CMOVE
+ CMOVG
+ CMOVGE
+ CMOVL
+ CMOVLE
+ CMOVNE
+ CMOVNO
+ CMOVNP
+ CMOVNS
+ CMOVO
+ CMOVP
+ CMOVS
+ CMP
+ CMPPD
+ CMPPS
+ CMPSB
+ CMPSD
+ CMPSD_XMM
+ CMPSQ
+ CMPSS
+ CMPSW
+ CMPXCHG
+ CMPXCHG16B
+ CMPXCHG8B
+ COMISD
+ COMISS
+ CPUID
+ CQO
+ CRC32
+ CVTDQ2PD
+ CVTDQ2PS
+ CVTPD2DQ
+ CVTPD2PI
+ CVTPD2PS
+ CVTPI2PD
+ CVTPI2PS
+ CVTPS2DQ
+ CVTPS2PD
+ CVTPS2PI
+ CVTSD2SI
+ CVTSD2SS
+ CVTSI2SD
+ CVTSI2SS
+ CVTSS2SD
+ CVTSS2SI
+ CVTTPD2DQ
+ CVTTPD2PI
+ CVTTPS2DQ
+ CVTTPS2PI
+ CVTTSD2SI
+ CVTTSS2SI
+ CWD
+ CWDE
+ DAA
+ DAS
+ DEC
+ DIV
+ DIVPD
+ DIVPS
+ DIVSD
+ DIVSS
+ DPPD
+ DPPS
+ EMMS
+ ENTER
+ EXTRACTPS
+ F2XM1
+ FABS
+ FADD
+ FADDP
+ FBLD
+ FBSTP
+ FCHS
+ FCMOVB
+ FCMOVBE
+ FCMOVE
+ FCMOVNB
+ FCMOVNBE
+ FCMOVNE
+ FCMOVNU
+ FCMOVU
+ FCOM
+ FCOMI
+ FCOMIP
+ FCOMP
+ FCOMPP
+ FCOS
+ FDECSTP
+ FDIV
+ FDIVP
+ FDIVR
+ FDIVRP
+ FFREE
+ FFREEP
+ FIADD
+ FICOM
+ FICOMP
+ FIDIV
+ FIDIVR
+ FILD
+ FIMUL
+ FINCSTP
+ FIST
+ FISTP
+ FISTTP
+ FISUB
+ FISUBR
+ FLD
+ FLD1
+ FLDCW
+ FLDENV
+ FLDL2E
+ FLDL2T
+ FLDLG2
+ FLDPI
+ FMUL
+ FMULP
+ FNCLEX
+ FNINIT
+ FNOP
+ FNSAVE
+ FNSTCW
+ FNSTENV
+ FNSTSW
+ FPATAN
+ FPREM
+ FPREM1
+ FPTAN
+ FRNDINT
+ FRSTOR
+ FSCALE
+ FSIN
+ FSINCOS
+ FSQRT
+ FST
+ FSTP
+ FSUB
+ FSUBP
+ FSUBR
+ FSUBRP
+ FTST
+ FUCOM
+ FUCOMI
+ FUCOMIP
+ FUCOMP
+ FUCOMPP
+ FWAIT
+ FXAM
+ FXCH
+ FXRSTOR
+ FXRSTOR64
+ FXSAVE
+ FXSAVE64
+ FXTRACT
+ FYL2X
+ FYL2XP1
+ HADDPD
+ HADDPS
+ HLT
+ HSUBPD
+ HSUBPS
+ ICEBP
+ IDIV
+ IMUL
+ IN
+ INC
+ INSB
+ INSD
+ INSERTPS
+ INSW
+ INT
+ INTO
+ INVD
+ INVLPG
+ INVPCID
+ IRET
+ IRETD
+ IRETQ
+ JA
+ JAE
+ JB
+ JBE
+ JCXZ
+ JE
+ JECXZ
+ JG
+ JGE
+ JL
+ JLE
+ JMP
+ JNE
+ JNO
+ JNP
+ JNS
+ JO
+ JP
+ JRCXZ
+ JS
+ LAHF
+ LAR
+ LCALL
+ LDDQU
+ LDMXCSR
+ LDS
+ LEA
+ LEAVE
+ LES
+ LFENCE
+ LFS
+ LGDT
+ LGS
+ LIDT
+ LJMP
+ LLDT
+ LMSW
+ LODSB
+ LODSD
+ LODSQ
+ LODSW
+ LOOP
+ LOOPE
+ LOOPNE
+ LRET
+ LSL
+ LSS
+ LTR
+ LZCNT
+ MASKMOVDQU
+ MASKMOVQ
+ MAXPD
+ MAXPS
+ MAXSD
+ MAXSS
+ MFENCE
+ MINPD
+ MINPS
+ MINSD
+ MINSS
+ MONITOR
+ MOV
+ MOVAPD
+ MOVAPS
+ MOVBE
+ MOVD
+ MOVDDUP
+ MOVDQ2Q
+ MOVDQA
+ MOVDQU
+ MOVHLPS
+ MOVHPD
+ MOVHPS
+ MOVLHPS
+ MOVLPD
+ MOVLPS
+ MOVMSKPD
+ MOVMSKPS
+ MOVNTDQ
+ MOVNTDQA
+ MOVNTI
+ MOVNTPD
+ MOVNTPS
+ MOVNTQ
+ MOVNTSD
+ MOVNTSS
+ MOVQ
+ MOVQ2DQ
+ MOVSB
+ MOVSD
+ MOVSD_XMM
+ MOVSHDUP
+ MOVSLDUP
+ MOVSQ
+ MOVSS
+ MOVSW
+ MOVSX
+ MOVSXD
+ MOVUPD
+ MOVUPS
+ MOVZX
+ MPSADBW
+ MUL
+ MULPD
+ MULPS
+ MULSD
+ MULSS
+ MWAIT
+ NEG
+ NOP
+ NOT
+ OR
+ ORPD
+ ORPS
+ OUT
+ OUTSB
+ OUTSD
+ OUTSW
+ PABSB
+ PABSD
+ PABSW
+ PACKSSDW
+ PACKSSWB
+ PACKUSDW
+ PACKUSWB
+ PADDB
+ PADDD
+ PADDQ
+ PADDSB
+ PADDSW
+ PADDUSB
+ PADDUSW
+ PADDW
+ PALIGNR
+ PAND
+ PANDN
+ PAUSE
+ PAVGB
+ PAVGW
+ PBLENDVB
+ PBLENDW
+ PCLMULQDQ
+ PCMPEQB
+ PCMPEQD
+ PCMPEQQ
+ PCMPEQW
+ PCMPESTRI
+ PCMPESTRM
+ PCMPGTB
+ PCMPGTD
+ PCMPGTQ
+ PCMPGTW
+ PCMPISTRI
+ PCMPISTRM
+ PEXTRB
+ PEXTRD
+ PEXTRQ
+ PEXTRW
+ PHADDD
+ PHADDSW
+ PHADDW
+ PHMINPOSUW
+ PHSUBD
+ PHSUBSW
+ PHSUBW
+ PINSRB
+ PINSRD
+ PINSRQ
+ PINSRW
+ PMADDUBSW
+ PMADDWD
+ PMAXSB
+ PMAXSD
+ PMAXSW
+ PMAXUB
+ PMAXUD
+ PMAXUW
+ PMINSB
+ PMINSD
+ PMINSW
+ PMINUB
+ PMINUD
+ PMINUW
+ PMOVMSKB
+ PMOVSXBD
+ PMOVSXBQ
+ PMOVSXBW
+ PMOVSXDQ
+ PMOVSXWD
+ PMOVSXWQ
+ PMOVZXBD
+ PMOVZXBQ
+ PMOVZXBW
+ PMOVZXDQ
+ PMOVZXWD
+ PMOVZXWQ
+ PMULDQ
+ PMULHRSW
+ PMULHUW
+ PMULHW
+ PMULLD
+ PMULLW
+ PMULUDQ
+ POP
+ POPA
+ POPAD
+ POPCNT
+ POPF
+ POPFD
+ POPFQ
+ POR
+ PREFETCHNTA
+ PREFETCHT0
+ PREFETCHT1
+ PREFETCHT2
+ PREFETCHW
+ PSADBW
+ PSHUFB
+ PSHUFD
+ PSHUFHW
+ PSHUFLW
+ PSHUFW
+ PSIGNB
+ PSIGND
+ PSIGNW
+ PSLLD
+ PSLLDQ
+ PSLLQ
+ PSLLW
+ PSRAD
+ PSRAW
+ PSRLD
+ PSRLDQ
+ PSRLQ
+ PSRLW
+ PSUBB
+ PSUBD
+ PSUBQ
+ PSUBSB
+ PSUBSW
+ PSUBUSB
+ PSUBUSW
+ PSUBW
+ PTEST
+ PUNPCKHBW
+ PUNPCKHDQ
+ PUNPCKHQDQ
+ PUNPCKHWD
+ PUNPCKLBW
+ PUNPCKLDQ
+ PUNPCKLQDQ
+ PUNPCKLWD
+ PUSH
+ PUSHA
+ PUSHAD
+ PUSHF
+ PUSHFD
+ PUSHFQ
+ PXOR
+ RCL
+ RCPPS
+ RCPSS
+ RCR
+ RDFSBASE
+ RDGSBASE
+ RDMSR
+ RDPMC
+ RDRAND
+ RDTSC
+ RDTSCP
+ RET
+ ROL
+ ROR
+ ROUNDPD
+ ROUNDPS
+ ROUNDSD
+ ROUNDSS
+ RSM
+ RSQRTPS
+ RSQRTSS
+ SAHF
+ SAR
+ SBB
+ SCASB
+ SCASD
+ SCASQ
+ SCASW
+ SETA
+ SETAE
+ SETB
+ SETBE
+ SETE
+ SETG
+ SETGE
+ SETL
+ SETLE
+ SETNE
+ SETNO
+ SETNP
+ SETNS
+ SETO
+ SETP
+ SETS
+ SFENCE
+ SGDT
+ SHL
+ SHLD
+ SHR
+ SHRD
+ SHUFPD
+ SHUFPS
+ SIDT
+ SLDT
+ SMSW
+ SQRTPD
+ SQRTPS
+ SQRTSD
+ SQRTSS
+ STC
+ STD
+ STI
+ STMXCSR
+ STOSB
+ STOSD
+ STOSQ
+ STOSW
+ STR
+ SUB
+ SUBPD
+ SUBPS
+ SUBSD
+ SUBSS
+ SWAPGS
+ SYSCALL
+ SYSENTER
+ SYSEXIT
+ SYSRET
+ TEST
+ TZCNT
+ UCOMISD
+ UCOMISS
+ UD1
+ UD2
+ UNPCKHPD
+ UNPCKHPS
+ UNPCKLPD
+ UNPCKLPS
+ VERR
+ VERW
+ WBINVD
+ WRFSBASE
+ WRGSBASE
+ WRMSR
+ XABORT
+ XADD
+ XBEGIN
+ XCHG
+ XEND
+ XGETBV
+ XLATB
+ XOR
+ XORPD
+ XORPS
+ XRSTOR
+ XRSTOR64
+ XRSTORS
+ XRSTORS64
+ XSAVE
+ XSAVE64
+ XSAVEC
+ XSAVEC64
+ XSAVEOPT
+ XSAVEOPT64
+ XSAVES
+ XSAVES64
+ XSETBV
+ XTEST
+)
+
+const maxOp = XTEST
+
+var opNames = [...]string{
+ AAA: "AAA",
+ AAD: "AAD",
+ AAM: "AAM",
+ AAS: "AAS",
+ ADC: "ADC",
+ ADD: "ADD",
+ ADDPD: "ADDPD",
+ ADDPS: "ADDPS",
+ ADDSD: "ADDSD",
+ ADDSS: "ADDSS",
+ ADDSUBPD: "ADDSUBPD",
+ ADDSUBPS: "ADDSUBPS",
+ AESDEC: "AESDEC",
+ AESDECLAST: "AESDECLAST",
+ AESENC: "AESENC",
+ AESENCLAST: "AESENCLAST",
+ AESIMC: "AESIMC",
+ AESKEYGENASSIST: "AESKEYGENASSIST",
+ AND: "AND",
+ ANDNPD: "ANDNPD",
+ ANDNPS: "ANDNPS",
+ ANDPD: "ANDPD",
+ ANDPS: "ANDPS",
+ ARPL: "ARPL",
+ BLENDPD: "BLENDPD",
+ BLENDPS: "BLENDPS",
+ BLENDVPD: "BLENDVPD",
+ BLENDVPS: "BLENDVPS",
+ BOUND: "BOUND",
+ BSF: "BSF",
+ BSR: "BSR",
+ BSWAP: "BSWAP",
+ BT: "BT",
+ BTC: "BTC",
+ BTR: "BTR",
+ BTS: "BTS",
+ CALL: "CALL",
+ CBW: "CBW",
+ CDQ: "CDQ",
+ CDQE: "CDQE",
+ CLC: "CLC",
+ CLD: "CLD",
+ CLFLUSH: "CLFLUSH",
+ CLI: "CLI",
+ CLTS: "CLTS",
+ CMC: "CMC",
+ CMOVA: "CMOVA",
+ CMOVAE: "CMOVAE",
+ CMOVB: "CMOVB",
+ CMOVBE: "CMOVBE",
+ CMOVE: "CMOVE",
+ CMOVG: "CMOVG",
+ CMOVGE: "CMOVGE",
+ CMOVL: "CMOVL",
+ CMOVLE: "CMOVLE",
+ CMOVNE: "CMOVNE",
+ CMOVNO: "CMOVNO",
+ CMOVNP: "CMOVNP",
+ CMOVNS: "CMOVNS",
+ CMOVO: "CMOVO",
+ CMOVP: "CMOVP",
+ CMOVS: "CMOVS",
+ CMP: "CMP",
+ CMPPD: "CMPPD",
+ CMPPS: "CMPPS",
+ CMPSB: "CMPSB",
+ CMPSD: "CMPSD",
+ CMPSD_XMM: "CMPSD_XMM",
+ CMPSQ: "CMPSQ",
+ CMPSS: "CMPSS",
+ CMPSW: "CMPSW",
+ CMPXCHG: "CMPXCHG",
+ CMPXCHG16B: "CMPXCHG16B",
+ CMPXCHG8B: "CMPXCHG8B",
+ COMISD: "COMISD",
+ COMISS: "COMISS",
+ CPUID: "CPUID",
+ CQO: "CQO",
+ CRC32: "CRC32",
+ CVTDQ2PD: "CVTDQ2PD",
+ CVTDQ2PS: "CVTDQ2PS",
+ CVTPD2DQ: "CVTPD2DQ",
+ CVTPD2PI: "CVTPD2PI",
+ CVTPD2PS: "CVTPD2PS",
+ CVTPI2PD: "CVTPI2PD",
+ CVTPI2PS: "CVTPI2PS",
+ CVTPS2DQ: "CVTPS2DQ",
+ CVTPS2PD: "CVTPS2PD",
+ CVTPS2PI: "CVTPS2PI",
+ CVTSD2SI: "CVTSD2SI",
+ CVTSD2SS: "CVTSD2SS",
+ CVTSI2SD: "CVTSI2SD",
+ CVTSI2SS: "CVTSI2SS",
+ CVTSS2SD: "CVTSS2SD",
+ CVTSS2SI: "CVTSS2SI",
+ CVTTPD2DQ: "CVTTPD2DQ",
+ CVTTPD2PI: "CVTTPD2PI",
+ CVTTPS2DQ: "CVTTPS2DQ",
+ CVTTPS2PI: "CVTTPS2PI",
+ CVTTSD2SI: "CVTTSD2SI",
+ CVTTSS2SI: "CVTTSS2SI",
+ CWD: "CWD",
+ CWDE: "CWDE",
+ DAA: "DAA",
+ DAS: "DAS",
+ DEC: "DEC",
+ DIV: "DIV",
+ DIVPD: "DIVPD",
+ DIVPS: "DIVPS",
+ DIVSD: "DIVSD",
+ DIVSS: "DIVSS",
+ DPPD: "DPPD",
+ DPPS: "DPPS",
+ EMMS: "EMMS",
+ ENTER: "ENTER",
+ EXTRACTPS: "EXTRACTPS",
+ F2XM1: "F2XM1",
+ FABS: "FABS",
+ FADD: "FADD",
+ FADDP: "FADDP",
+ FBLD: "FBLD",
+ FBSTP: "FBSTP",
+ FCHS: "FCHS",
+ FCMOVB: "FCMOVB",
+ FCMOVBE: "FCMOVBE",
+ FCMOVE: "FCMOVE",
+ FCMOVNB: "FCMOVNB",
+ FCMOVNBE: "FCMOVNBE",
+ FCMOVNE: "FCMOVNE",
+ FCMOVNU: "FCMOVNU",
+ FCMOVU: "FCMOVU",
+ FCOM: "FCOM",
+ FCOMI: "FCOMI",
+ FCOMIP: "FCOMIP",
+ FCOMP: "FCOMP",
+ FCOMPP: "FCOMPP",
+ FCOS: "FCOS",
+ FDECSTP: "FDECSTP",
+ FDIV: "FDIV",
+ FDIVP: "FDIVP",
+ FDIVR: "FDIVR",
+ FDIVRP: "FDIVRP",
+ FFREE: "FFREE",
+ FFREEP: "FFREEP",
+ FIADD: "FIADD",
+ FICOM: "FICOM",
+ FICOMP: "FICOMP",
+ FIDIV: "FIDIV",
+ FIDIVR: "FIDIVR",
+ FILD: "FILD",
+ FIMUL: "FIMUL",
+ FINCSTP: "FINCSTP",
+ FIST: "FIST",
+ FISTP: "FISTP",
+ FISTTP: "FISTTP",
+ FISUB: "FISUB",
+ FISUBR: "FISUBR",
+ FLD: "FLD",
+ FLD1: "FLD1",
+ FLDCW: "FLDCW",
+ FLDENV: "FLDENV",
+ FLDL2E: "FLDL2E",
+ FLDL2T: "FLDL2T",
+ FLDLG2: "FLDLG2",
+ FLDPI: "FLDPI",
+ FMUL: "FMUL",
+ FMULP: "FMULP",
+ FNCLEX: "FNCLEX",
+ FNINIT: "FNINIT",
+ FNOP: "FNOP",
+ FNSAVE: "FNSAVE",
+ FNSTCW: "FNSTCW",
+ FNSTENV: "FNSTENV",
+ FNSTSW: "FNSTSW",
+ FPATAN: "FPATAN",
+ FPREM: "FPREM",
+ FPREM1: "FPREM1",
+ FPTAN: "FPTAN",
+ FRNDINT: "FRNDINT",
+ FRSTOR: "FRSTOR",
+ FSCALE: "FSCALE",
+ FSIN: "FSIN",
+ FSINCOS: "FSINCOS",
+ FSQRT: "FSQRT",
+ FST: "FST",
+ FSTP: "FSTP",
+ FSUB: "FSUB",
+ FSUBP: "FSUBP",
+ FSUBR: "FSUBR",
+ FSUBRP: "FSUBRP",
+ FTST: "FTST",
+ FUCOM: "FUCOM",
+ FUCOMI: "FUCOMI",
+ FUCOMIP: "FUCOMIP",
+ FUCOMP: "FUCOMP",
+ FUCOMPP: "FUCOMPP",
+ FWAIT: "FWAIT",
+ FXAM: "FXAM",
+ FXCH: "FXCH",
+ FXRSTOR: "FXRSTOR",
+ FXRSTOR64: "FXRSTOR64",
+ FXSAVE: "FXSAVE",
+ FXSAVE64: "FXSAVE64",
+ FXTRACT: "FXTRACT",
+ FYL2X: "FYL2X",
+ FYL2XP1: "FYL2XP1",
+ HADDPD: "HADDPD",
+ HADDPS: "HADDPS",
+ HLT: "HLT",
+ HSUBPD: "HSUBPD",
+ HSUBPS: "HSUBPS",
+ ICEBP: "ICEBP",
+ IDIV: "IDIV",
+ IMUL: "IMUL",
+ IN: "IN",
+ INC: "INC",
+ INSB: "INSB",
+ INSD: "INSD",
+ INSERTPS: "INSERTPS",
+ INSW: "INSW",
+ INT: "INT",
+ INTO: "INTO",
+ INVD: "INVD",
+ INVLPG: "INVLPG",
+ INVPCID: "INVPCID",
+ IRET: "IRET",
+ IRETD: "IRETD",
+ IRETQ: "IRETQ",
+ JA: "JA",
+ JAE: "JAE",
+ JB: "JB",
+ JBE: "JBE",
+ JCXZ: "JCXZ",
+ JE: "JE",
+ JECXZ: "JECXZ",
+ JG: "JG",
+ JGE: "JGE",
+ JL: "JL",
+ JLE: "JLE",
+ JMP: "JMP",
+ JNE: "JNE",
+ JNO: "JNO",
+ JNP: "JNP",
+ JNS: "JNS",
+ JO: "JO",
+ JP: "JP",
+ JRCXZ: "JRCXZ",
+ JS: "JS",
+ LAHF: "LAHF",
+ LAR: "LAR",
+ LCALL: "LCALL",
+ LDDQU: "LDDQU",
+ LDMXCSR: "LDMXCSR",
+ LDS: "LDS",
+ LEA: "LEA",
+ LEAVE: "LEAVE",
+ LES: "LES",
+ LFENCE: "LFENCE",
+ LFS: "LFS",
+ LGDT: "LGDT",
+ LGS: "LGS",
+ LIDT: "LIDT",
+ LJMP: "LJMP",
+ LLDT: "LLDT",
+ LMSW: "LMSW",
+ LODSB: "LODSB",
+ LODSD: "LODSD",
+ LODSQ: "LODSQ",
+ LODSW: "LODSW",
+ LOOP: "LOOP",
+ LOOPE: "LOOPE",
+ LOOPNE: "LOOPNE",
+ LRET: "LRET",
+ LSL: "LSL",
+ LSS: "LSS",
+ LTR: "LTR",
+ LZCNT: "LZCNT",
+ MASKMOVDQU: "MASKMOVDQU",
+ MASKMOVQ: "MASKMOVQ",
+ MAXPD: "MAXPD",
+ MAXPS: "MAXPS",
+ MAXSD: "MAXSD",
+ MAXSS: "MAXSS",
+ MFENCE: "MFENCE",
+ MINPD: "MINPD",
+ MINPS: "MINPS",
+ MINSD: "MINSD",
+ MINSS: "MINSS",
+ MONITOR: "MONITOR",
+ MOV: "MOV",
+ MOVAPD: "MOVAPD",
+ MOVAPS: "MOVAPS",
+ MOVBE: "MOVBE",
+ MOVD: "MOVD",
+ MOVDDUP: "MOVDDUP",
+ MOVDQ2Q: "MOVDQ2Q",
+ MOVDQA: "MOVDQA",
+ MOVDQU: "MOVDQU",
+ MOVHLPS: "MOVHLPS",
+ MOVHPD: "MOVHPD",
+ MOVHPS: "MOVHPS",
+ MOVLHPS: "MOVLHPS",
+ MOVLPD: "MOVLPD",
+ MOVLPS: "MOVLPS",
+ MOVMSKPD: "MOVMSKPD",
+ MOVMSKPS: "MOVMSKPS",
+ MOVNTDQ: "MOVNTDQ",
+ MOVNTDQA: "MOVNTDQA",
+ MOVNTI: "MOVNTI",
+ MOVNTPD: "MOVNTPD",
+ MOVNTPS: "MOVNTPS",
+ MOVNTQ: "MOVNTQ",
+ MOVNTSD: "MOVNTSD",
+ MOVNTSS: "MOVNTSS",
+ MOVQ: "MOVQ",
+ MOVQ2DQ: "MOVQ2DQ",
+ MOVSB: "MOVSB",
+ MOVSD: "MOVSD",
+ MOVSD_XMM: "MOVSD_XMM",
+ MOVSHDUP: "MOVSHDUP",
+ MOVSLDUP: "MOVSLDUP",
+ MOVSQ: "MOVSQ",
+ MOVSS: "MOVSS",
+ MOVSW: "MOVSW",
+ MOVSX: "MOVSX",
+ MOVSXD: "MOVSXD",
+ MOVUPD: "MOVUPD",
+ MOVUPS: "MOVUPS",
+ MOVZX: "MOVZX",
+ MPSADBW: "MPSADBW",
+ MUL: "MUL",
+ MULPD: "MULPD",
+ MULPS: "MULPS",
+ MULSD: "MULSD",
+ MULSS: "MULSS",
+ MWAIT: "MWAIT",
+ NEG: "NEG",
+ NOP: "NOP",
+ NOT: "NOT",
+ OR: "OR",
+ ORPD: "ORPD",
+ ORPS: "ORPS",
+ OUT: "OUT",
+ OUTSB: "OUTSB",
+ OUTSD: "OUTSD",
+ OUTSW: "OUTSW",
+ PABSB: "PABSB",
+ PABSD: "PABSD",
+ PABSW: "PABSW",
+ PACKSSDW: "PACKSSDW",
+ PACKSSWB: "PACKSSWB",
+ PACKUSDW: "PACKUSDW",
+ PACKUSWB: "PACKUSWB",
+ PADDB: "PADDB",
+ PADDD: "PADDD",
+ PADDQ: "PADDQ",
+ PADDSB: "PADDSB",
+ PADDSW: "PADDSW",
+ PADDUSB: "PADDUSB",
+ PADDUSW: "PADDUSW",
+ PADDW: "PADDW",
+ PALIGNR: "PALIGNR",
+ PAND: "PAND",
+ PANDN: "PANDN",
+ PAUSE: "PAUSE",
+ PAVGB: "PAVGB",
+ PAVGW: "PAVGW",
+ PBLENDVB: "PBLENDVB",
+ PBLENDW: "PBLENDW",
+ PCLMULQDQ: "PCLMULQDQ",
+ PCMPEQB: "PCMPEQB",
+ PCMPEQD: "PCMPEQD",
+ PCMPEQQ: "PCMPEQQ",
+ PCMPEQW: "PCMPEQW",
+ PCMPESTRI: "PCMPESTRI",
+ PCMPESTRM: "PCMPESTRM",
+ PCMPGTB: "PCMPGTB",
+ PCMPGTD: "PCMPGTD",
+ PCMPGTQ: "PCMPGTQ",
+ PCMPGTW: "PCMPGTW",
+ PCMPISTRI: "PCMPISTRI",
+ PCMPISTRM: "PCMPISTRM",
+ PEXTRB: "PEXTRB",
+ PEXTRD: "PEXTRD",
+ PEXTRQ: "PEXTRQ",
+ PEXTRW: "PEXTRW",
+ PHADDD: "PHADDD",
+ PHADDSW: "PHADDSW",
+ PHADDW: "PHADDW",
+ PHMINPOSUW: "PHMINPOSUW",
+ PHSUBD: "PHSUBD",
+ PHSUBSW: "PHSUBSW",
+ PHSUBW: "PHSUBW",
+ PINSRB: "PINSRB",
+ PINSRD: "PINSRD",
+ PINSRQ: "PINSRQ",
+ PINSRW: "PINSRW",
+ PMADDUBSW: "PMADDUBSW",
+ PMADDWD: "PMADDWD",
+ PMAXSB: "PMAXSB",
+ PMAXSD: "PMAXSD",
+ PMAXSW: "PMAXSW",
+ PMAXUB: "PMAXUB",
+ PMAXUD: "PMAXUD",
+ PMAXUW: "PMAXUW",
+ PMINSB: "PMINSB",
+ PMINSD: "PMINSD",
+ PMINSW: "PMINSW",
+ PMINUB: "PMINUB",
+ PMINUD: "PMINUD",
+ PMINUW: "PMINUW",
+ PMOVMSKB: "PMOVMSKB",
+ PMOVSXBD: "PMOVSXBD",
+ PMOVSXBQ: "PMOVSXBQ",
+ PMOVSXBW: "PMOVSXBW",
+ PMOVSXDQ: "PMOVSXDQ",
+ PMOVSXWD: "PMOVSXWD",
+ PMOVSXWQ: "PMOVSXWQ",
+ PMOVZXBD: "PMOVZXBD",
+ PMOVZXBQ: "PMOVZXBQ",
+ PMOVZXBW: "PMOVZXBW",
+ PMOVZXDQ: "PMOVZXDQ",
+ PMOVZXWD: "PMOVZXWD",
+ PMOVZXWQ: "PMOVZXWQ",
+ PMULDQ: "PMULDQ",
+ PMULHRSW: "PMULHRSW",
+ PMULHUW: "PMULHUW",
+ PMULHW: "PMULHW",
+ PMULLD: "PMULLD",
+ PMULLW: "PMULLW",
+ PMULUDQ: "PMULUDQ",
+ POP: "POP",
+ POPA: "POPA",
+ POPAD: "POPAD",
+ POPCNT: "POPCNT",
+ POPF: "POPF",
+ POPFD: "POPFD",
+ POPFQ: "POPFQ",
+ POR: "POR",
+ PREFETCHNTA: "PREFETCHNTA",
+ PREFETCHT0: "PREFETCHT0",
+ PREFETCHT1: "PREFETCHT1",
+ PREFETCHT2: "PREFETCHT2",
+ PREFETCHW: "PREFETCHW",
+ PSADBW: "PSADBW",
+ PSHUFB: "PSHUFB",
+ PSHUFD: "PSHUFD",
+ PSHUFHW: "PSHUFHW",
+ PSHUFLW: "PSHUFLW",
+ PSHUFW: "PSHUFW",
+ PSIGNB: "PSIGNB",
+ PSIGND: "PSIGND",
+ PSIGNW: "PSIGNW",
+ PSLLD: "PSLLD",
+ PSLLDQ: "PSLLDQ",
+ PSLLQ: "PSLLQ",
+ PSLLW: "PSLLW",
+ PSRAD: "PSRAD",
+ PSRAW: "PSRAW",
+ PSRLD: "PSRLD",
+ PSRLDQ: "PSRLDQ",
+ PSRLQ: "PSRLQ",
+ PSRLW: "PSRLW",
+ PSUBB: "PSUBB",
+ PSUBD: "PSUBD",
+ PSUBQ: "PSUBQ",
+ PSUBSB: "PSUBSB",
+ PSUBSW: "PSUBSW",
+ PSUBUSB: "PSUBUSB",
+ PSUBUSW: "PSUBUSW",
+ PSUBW: "PSUBW",
+ PTEST: "PTEST",
+ PUNPCKHBW: "PUNPCKHBW",
+ PUNPCKHDQ: "PUNPCKHDQ",
+ PUNPCKHQDQ: "PUNPCKHQDQ",
+ PUNPCKHWD: "PUNPCKHWD",
+ PUNPCKLBW: "PUNPCKLBW",
+ PUNPCKLDQ: "PUNPCKLDQ",
+ PUNPCKLQDQ: "PUNPCKLQDQ",
+ PUNPCKLWD: "PUNPCKLWD",
+ PUSH: "PUSH",
+ PUSHA: "PUSHA",
+ PUSHAD: "PUSHAD",
+ PUSHF: "PUSHF",
+ PUSHFD: "PUSHFD",
+ PUSHFQ: "PUSHFQ",
+ PXOR: "PXOR",
+ RCL: "RCL",
+ RCPPS: "RCPPS",
+ RCPSS: "RCPSS",
+ RCR: "RCR",
+ RDFSBASE: "RDFSBASE",
+ RDGSBASE: "RDGSBASE",
+ RDMSR: "RDMSR",
+ RDPMC: "RDPMC",
+ RDRAND: "RDRAND",
+ RDTSC: "RDTSC",
+ RDTSCP: "RDTSCP",
+ RET: "RET",
+ ROL: "ROL",
+ ROR: "ROR",
+ ROUNDPD: "ROUNDPD",
+ ROUNDPS: "ROUNDPS",
+ ROUNDSD: "ROUNDSD",
+ ROUNDSS: "ROUNDSS",
+ RSM: "RSM",
+ RSQRTPS: "RSQRTPS",
+ RSQRTSS: "RSQRTSS",
+ SAHF: "SAHF",
+ SAR: "SAR",
+ SBB: "SBB",
+ SCASB: "SCASB",
+ SCASD: "SCASD",
+ SCASQ: "SCASQ",
+ SCASW: "SCASW",
+ SETA: "SETA",
+ SETAE: "SETAE",
+ SETB: "SETB",
+ SETBE: "SETBE",
+ SETE: "SETE",
+ SETG: "SETG",
+ SETGE: "SETGE",
+ SETL: "SETL",
+ SETLE: "SETLE",
+ SETNE: "SETNE",
+ SETNO: "SETNO",
+ SETNP: "SETNP",
+ SETNS: "SETNS",
+ SETO: "SETO",
+ SETP: "SETP",
+ SETS: "SETS",
+ SFENCE: "SFENCE",
+ SGDT: "SGDT",
+ SHL: "SHL",
+ SHLD: "SHLD",
+ SHR: "SHR",
+ SHRD: "SHRD",
+ SHUFPD: "SHUFPD",
+ SHUFPS: "SHUFPS",
+ SIDT: "SIDT",
+ SLDT: "SLDT",
+ SMSW: "SMSW",
+ SQRTPD: "SQRTPD",
+ SQRTPS: "SQRTPS",
+ SQRTSD: "SQRTSD",
+ SQRTSS: "SQRTSS",
+ STC: "STC",
+ STD: "STD",
+ STI: "STI",
+ STMXCSR: "STMXCSR",
+ STOSB: "STOSB",
+ STOSD: "STOSD",
+ STOSQ: "STOSQ",
+ STOSW: "STOSW",
+ STR: "STR",
+ SUB: "SUB",
+ SUBPD: "SUBPD",
+ SUBPS: "SUBPS",
+ SUBSD: "SUBSD",
+ SUBSS: "SUBSS",
+ SWAPGS: "SWAPGS",
+ SYSCALL: "SYSCALL",
+ SYSENTER: "SYSENTER",
+ SYSEXIT: "SYSEXIT",
+ SYSRET: "SYSRET",
+ TEST: "TEST",
+ TZCNT: "TZCNT",
+ UCOMISD: "UCOMISD",
+ UCOMISS: "UCOMISS",
+ UD1: "UD1",
+ UD2: "UD2",
+ UNPCKHPD: "UNPCKHPD",
+ UNPCKHPS: "UNPCKHPS",
+ UNPCKLPD: "UNPCKLPD",
+ UNPCKLPS: "UNPCKLPS",
+ VERR: "VERR",
+ VERW: "VERW",
+ WBINVD: "WBINVD",
+ WRFSBASE: "WRFSBASE",
+ WRGSBASE: "WRGSBASE",
+ WRMSR: "WRMSR",
+ XABORT: "XABORT",
+ XADD: "XADD",
+ XBEGIN: "XBEGIN",
+ XCHG: "XCHG",
+ XEND: "XEND",
+ XGETBV: "XGETBV",
+ XLATB: "XLATB",
+ XOR: "XOR",
+ XORPD: "XORPD",
+ XORPS: "XORPS",
+ XRSTOR: "XRSTOR",
+ XRSTOR64: "XRSTOR64",
+ XRSTORS: "XRSTORS",
+ XRSTORS64: "XRSTORS64",
+ XSAVE: "XSAVE",
+ XSAVE64: "XSAVE64",
+ XSAVEC: "XSAVEC",
+ XSAVEC64: "XSAVEC64",
+ XSAVEOPT: "XSAVEOPT",
+ XSAVEOPT64: "XSAVEOPT64",
+ XSAVES: "XSAVES",
+ XSAVES64: "XSAVES64",
+ XSETBV: "XSETBV",
+ XTEST: "XTEST",
+}
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/testdata/Makefile b/src/cmd/internal/rsc.io/x86/x86asm/testdata/Makefile
new file mode 100644
index 000000000..9cb44127a
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/testdata/Makefile
@@ -0,0 +1,12 @@
+libmach8db: libmach8db.c
+ 9c libmach8db.c && 9l -o libmach8db libmach8db.o; rm libmach8db.o
+
+newdecode.txt:
+ cd ..; go test -cover -run 'Objdump.*32' -v -timeout 10h -printtests 2>&1 | tee log
+ cd ..; go test -cover -run 'Objdump.*64' -v -timeout 10h -printtests 2>&1 | tee -a log
+ cd ..; go test -cover -run 'Xed.*32' -v -timeout 10h -printtests 2>&1 | tee -a log
+ cd ..; go test -cover -run 'Xed.*64' -v -timeout 10h -printtests 2>&1 | tee -a log
+ cd ..; go test -cover -run 'Plan9.*32' -v -timeout 10h -printtests 2>&1 | tee -a log
+ cd ..; go test -cover -run 'Plan9.*64' -v -timeout 10h -printtests 2>&1 | tee -a log
+ egrep ' (gnu|intel|plan9) ' ../log |sort >newdecode.txt
+
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/testdata/decode.txt b/src/cmd/internal/rsc.io/x86/x86asm/testdata/decode.txt
new file mode 100644
index 000000000..a899d75fd
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/testdata/decode.txt
@@ -0,0 +1,6731 @@
+000511223344|556677885f5f5f5f5f5f 32 intel add byte ptr [0x44332211], al
+000511223344|556677885f5f5f5f5f5f 64 gnu add %al,0x44332211(%rip)
+000511223344|556677885f5f5f5f5f5f 64 intel add byte ptr [rip+0x44332211], al
+0100|11223344556677885f5f5f5f5f5f 32 intel add dword ptr [eax], eax
+0100|11223344556677885f5f5f5f5f5f 32 plan9 ADDL AX, 0(AX)
+0100|11223344556677885f5f5f5f5f5f 64 gnu add %eax,(%rax)
+0100|11223344556677885f5f5f5f5f5f 64 intel add dword ptr [rax], eax
+0100|11223344556677885f5f5f5f5f5f 64 plan9 ADDL AX, 0(AX)
+0211|223344556677885f5f5f5f5f5f5f 32 intel add dl, byte ptr [ecx]
+0211|223344556677885f5f5f5f5f5f5f 32 plan9 ADDL 0(CX), DL
+0211|223344556677885f5f5f5f5f5f5f 64 gnu add (%rcx),%dl
+0211|223344556677885f5f5f5f5f5f5f 64 intel add dl, byte ptr [rcx]
+0211|223344556677885f5f5f5f5f5f5f 64 plan9 ADDL 0(CX), DL
+0311|223344556677885f5f5f5f5f5f5f 32 intel add edx, dword ptr [ecx]
+0311|223344556677885f5f5f5f5f5f5f 32 plan9 ADDL 0(CX), DX
+0311|223344556677885f5f5f5f5f5f5f 64 gnu add (%rcx),%edx
+0311|223344556677885f5f5f5f5f5f5f 64 intel add edx, dword ptr [rcx]
+0311|223344556677885f5f5f5f5f5f5f 64 plan9 ADDL 0(CX), DX
+0411|223344556677885f5f5f5f5f5f5f 32 intel add al, 0x11
+0411|223344556677885f5f5f5f5f5f5f 32 plan9 ADDL $0x11, AL
+0411|223344556677885f5f5f5f5f5f5f 64 gnu add $0x11,%al
+0411|223344556677885f5f5f5f5f5f5f 64 intel add al, 0x11
+0411|223344556677885f5f5f5f5f5f5f 64 plan9 ADDL $0x11, AL
+0511223344|556677885f5f5f5f5f5f5f 32 intel add eax, 0x44332211
+0511223344|556677885f5f5f5f5f5f5f 32 plan9 ADDL $0x44332211, AX
+0511223344|556677885f5f5f5f5f5f5f 64 gnu add $0x44332211,%eax
+0511223344|556677885f5f5f5f5f5f5f 64 intel add eax, 0x44332211
+0511223344|556677885f5f5f5f5f5f5f 64 plan9 ADDL $0x44332211, AX
+06|11223344556677885f5f5f5f5f5f5f 32 intel push es
+06|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL ES
+06|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+06|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+06|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+07|11223344556677885f5f5f5f5f5f5f 32 intel pop es
+07|11223344556677885f5f5f5f5f5f5f 32 plan9 POPL ES
+07|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+07|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+07|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0811|223344556677885f5f5f5f5f5f5f 32 intel or byte ptr [ecx], dl
+0811|223344556677885f5f5f5f5f5f5f 32 plan9 ORL DL, 0(CX)
+0811|223344556677885f5f5f5f5f5f5f 64 gnu or %dl,(%rcx)
+0811|223344556677885f5f5f5f5f5f5f 64 intel or byte ptr [rcx], dl
+0811|223344556677885f5f5f5f5f5f5f 64 plan9 ORL DL, 0(CX)
+0911|223344556677885f5f5f5f5f5f5f 32 intel or dword ptr [ecx], edx
+0911|223344556677885f5f5f5f5f5f5f 32 plan9 ORL DX, 0(CX)
+0911|223344556677885f5f5f5f5f5f5f 64 gnu or %edx,(%rcx)
+0911|223344556677885f5f5f5f5f5f5f 64 intel or dword ptr [rcx], edx
+0911|223344556677885f5f5f5f5f5f5f 64 plan9 ORL DX, 0(CX)
+0a11|223344556677885f5f5f5f5f5f5f 32 intel or dl, byte ptr [ecx]
+0a11|223344556677885f5f5f5f5f5f5f 32 plan9 ORL 0(CX), DL
+0a11|223344556677885f5f5f5f5f5f5f 64 gnu or (%rcx),%dl
+0a11|223344556677885f5f5f5f5f5f5f 64 intel or dl, byte ptr [rcx]
+0a11|223344556677885f5f5f5f5f5f5f 64 plan9 ORL 0(CX), DL
+0b11|223344556677885f5f5f5f5f5f5f 32 intel or edx, dword ptr [ecx]
+0b11|223344556677885f5f5f5f5f5f5f 32 plan9 ORL 0(CX), DX
+0b11|223344556677885f5f5f5f5f5f5f 64 gnu or (%rcx),%edx
+0b11|223344556677885f5f5f5f5f5f5f 64 intel or edx, dword ptr [rcx]
+0b11|223344556677885f5f5f5f5f5f5f 64 plan9 ORL 0(CX), DX
+0c11|223344556677885f5f5f5f5f5f5f 32 intel or al, 0x11
+0c11|223344556677885f5f5f5f5f5f5f 32 plan9 ORL $0x11, AL
+0c11|223344556677885f5f5f5f5f5f5f 64 gnu or $0x11,%al
+0c11|223344556677885f5f5f5f5f5f5f 64 intel or al, 0x11
+0c11|223344556677885f5f5f5f5f5f5f 64 plan9 ORL $0x11, AL
+0d11223344|556677885f5f5f5f5f5f5f 32 intel or eax, 0x44332211
+0d11223344|556677885f5f5f5f5f5f5f 32 plan9 ORL $0x44332211, AX
+0d11223344|556677885f5f5f5f5f5f5f 64 gnu or $0x44332211,%eax
+0d11223344|556677885f5f5f5f5f5f5f 64 intel or eax, 0x44332211
+0d11223344|556677885f5f5f5f5f5f5f 64 plan9 ORL $0x44332211, AX
+0e|11223344556677885f5f5f5f5f5f5f 32 intel push cs
+0e|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL CS
+0e|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0e|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+0e|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f0000|11223344556677885f5f5f5f5f 32 intel sldt word ptr [eax]
+0f0000|11223344556677885f5f5f5f5f 32 plan9 SLDT 0(AX)
+0f0000|11223344556677885f5f5f5f5f 64 gnu sldt (%rax)
+0f0000|11223344556677885f5f5f5f5f 64 intel sldt word ptr [rax]
+0f0000|11223344556677885f5f5f5f5f 64 plan9 SLDT 0(AX)
+0f0008|11223344556677885f5f5f5f5f 32 intel str word ptr [eax]
+0f0008|11223344556677885f5f5f5f5f 32 plan9 STR 0(AX)
+0f0008|11223344556677885f5f5f5f5f 64 gnu str (%rax)
+0f0008|11223344556677885f5f5f5f5f 64 intel str word ptr [rax]
+0f0008|11223344556677885f5f5f5f5f 64 plan9 STR 0(AX)
+0f0011|223344556677885f5f5f5f5f5f 32 intel lldt word ptr [ecx]
+0f0011|223344556677885f5f5f5f5f5f 32 plan9 LLDT 0(CX)
+0f0011|223344556677885f5f5f5f5f5f 64 gnu lldt (%rcx)
+0f0011|223344556677885f5f5f5f5f5f 64 intel lldt word ptr [rcx]
+0f0011|223344556677885f5f5f5f5f5f 64 plan9 LLDT 0(CX)
+0f0018|11223344556677885f5f5f5f5f 32 intel ltr word ptr [eax]
+0f0018|11223344556677885f5f5f5f5f 32 plan9 LTR 0(AX)
+0f0018|11223344556677885f5f5f5f5f 64 gnu ltr (%rax)
+0f0018|11223344556677885f5f5f5f5f 64 intel ltr word ptr [rax]
+0f0018|11223344556677885f5f5f5f5f 64 plan9 LTR 0(AX)
+0f0020|11223344556677885f5f5f5f5f 32 intel verr word ptr [eax]
+0f0020|11223344556677885f5f5f5f5f 32 plan9 VERR 0(AX)
+0f0020|11223344556677885f5f5f5f5f 64 gnu verr (%rax)
+0f0020|11223344556677885f5f5f5f5f 64 intel verr word ptr [rax]
+0f0020|11223344556677885f5f5f5f5f 64 plan9 VERR 0(AX)
+0f0028|11223344556677885f5f5f5f5f 32 intel verw word ptr [eax]
+0f0028|11223344556677885f5f5f5f5f 32 plan9 VERW 0(AX)
+0f0028|11223344556677885f5f5f5f5f 64 gnu verw (%rax)
+0f0028|11223344556677885f5f5f5f5f 64 intel verw word ptr [rax]
+0f0028|11223344556677885f5f5f5f5f 64 plan9 VERW 0(AX)
+0f0030|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f0030|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f0100|11223344556677885f5f5f5f5f 32 intel sgdt ptr [eax]
+0f0100|11223344556677885f5f5f5f5f 32 plan9 SGDT 0(AX)
+0f0100|11223344556677885f5f5f5f5f 64 gnu sgdtl (%rax)
+0f0100|11223344556677885f5f5f5f5f 64 intel sgdt ptr [rax]
+0f0100|11223344556677885f5f5f5f5f 64 plan9 SGDT 0(AX)
+0f0108|11223344556677885f5f5f5f5f 32 intel sidt ptr [eax]
+0f0108|11223344556677885f5f5f5f5f 32 plan9 SIDT 0(AX)
+0f0108|11223344556677885f5f5f5f5f 64 gnu sidtl (%rax)
+0f0108|11223344556677885f5f5f5f5f 64 intel sidt ptr [rax]
+0f0108|11223344556677885f5f5f5f5f 64 plan9 SIDT 0(AX)
+0f0111|223344556677885f5f5f5f5f5f 32 intel lgdt ptr [ecx]
+0f0111|223344556677885f5f5f5f5f5f 32 plan9 LGDT 0(CX)
+0f0111|223344556677885f5f5f5f5f5f 64 gnu lgdtl (%rcx)
+0f0111|223344556677885f5f5f5f5f5f 64 intel lgdt ptr [rcx]
+0f0111|223344556677885f5f5f5f5f5f 64 plan9 LGDT 0(CX)
+0f0118|11223344556677885f5f5f5f5f 32 intel lidt ptr [eax]
+0f0118|11223344556677885f5f5f5f5f 32 plan9 LIDT 0(AX)
+0f0118|11223344556677885f5f5f5f5f 64 gnu lidtl (%rax)
+0f0118|11223344556677885f5f5f5f5f 64 intel lidt ptr [rax]
+0f0118|11223344556677885f5f5f5f5f 64 plan9 LIDT 0(AX)
+0f0120|11223344556677885f5f5f5f5f 32 intel smsw word ptr [eax]
+0f0120|11223344556677885f5f5f5f5f 32 plan9 SMSW 0(AX)
+0f0120|11223344556677885f5f5f5f5f 64 gnu smsw (%rax)
+0f0120|11223344556677885f5f5f5f5f 64 intel smsw word ptr [rax]
+0f0120|11223344556677885f5f5f5f5f 64 plan9 SMSW 0(AX)
+0f0130|11223344556677885f5f5f5f5f 32 intel lmsw word ptr [eax]
+0f0130|11223344556677885f5f5f5f5f 32 plan9 LMSW 0(AX)
+0f0130|11223344556677885f5f5f5f5f 64 gnu lmsw (%rax)
+0f0130|11223344556677885f5f5f5f5f 64 intel lmsw word ptr [rax]
+0f0130|11223344556677885f5f5f5f5f 64 plan9 LMSW 0(AX)
+0f0138|11223344556677885f5f5f5f5f 32 intel invlpg byte ptr [eax]
+0f0138|11223344556677885f5f5f5f5f 32 plan9 INVLPG 0(AX)
+0f0138|11223344556677885f5f5f5f5f 64 gnu invlpg (%rax)
+0f0138|11223344556677885f5f5f5f5f 64 intel invlpg byte ptr [rax]
+0f0138|11223344556677885f5f5f5f5f 64 plan9 INVLPG 0(AX)
+0f01c8|11223344556677885f5f5f5f5f 32 intel monitor
+0f01c8|11223344556677885f5f5f5f5f 32 plan9 MONITOR
+0f01c8|11223344556677885f5f5f5f5f 64 gnu monitor %eax,%ecx,%edx
+0f01c8|11223344556677885f5f5f5f5f 64 intel monitor
+0f01c8|11223344556677885f5f5f5f5f 64 plan9 MONITOR
+0f01c9|11223344556677885f5f5f5f5f 32 intel mwait
+0f01c9|11223344556677885f5f5f5f5f 32 plan9 MWAIT
+0f01c9|11223344556677885f5f5f5f5f 64 gnu mwait %rax,%rcx
+0f01c9|11223344556677885f5f5f5f5f 64 intel mwait
+0f01c9|11223344556677885f5f5f5f5f 64 plan9 MWAIT
+0f01d0|11223344556677885f5f5f5f5f 32 intel xgetbv
+0f01d0|11223344556677885f5f5f5f5f 32 plan9 XGETBV
+0f01d0|11223344556677885f5f5f5f5f 64 gnu xgetbv
+0f01d0|11223344556677885f5f5f5f5f 64 intel xgetbv
+0f01d0|11223344556677885f5f5f5f5f 64 plan9 XGETBV
+0f01d1|11223344556677885f5f5f5f5f 32 intel xsetbv
+0f01d1|11223344556677885f5f5f5f5f 32 plan9 XSETBV
+0f01d1|11223344556677885f5f5f5f5f 64 gnu xsetbv
+0f01d1|11223344556677885f5f5f5f5f 64 intel xsetbv
+0f01d1|11223344556677885f5f5f5f5f 64 plan9 XSETBV
+0f01d5|11223344556677885f5f5f5f5f 32 intel xend
+0f01d5|11223344556677885f5f5f5f5f 32 plan9 XEND
+0f01d5|11223344556677885f5f5f5f5f 64 gnu xend
+0f01d5|11223344556677885f5f5f5f5f 64 intel xend
+0f01d5|11223344556677885f5f5f5f5f 64 plan9 XEND
+0f01d6|11223344556677885f5f5f5f5f 32 intel xtest
+0f01d6|11223344556677885f5f5f5f5f 32 plan9 XTEST
+0f01d6|11223344556677885f5f5f5f5f 64 gnu xtest
+0f01d6|11223344556677885f5f5f5f5f 64 intel xtest
+0f01d6|11223344556677885f5f5f5f5f 64 plan9 XTEST
+0f01f8|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f01f8|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f01f8|11223344556677885f5f5f5f5f 64 gnu swapgs
+0f01f8|11223344556677885f5f5f5f5f 64 intel swapgs
+0f01f8|11223344556677885f5f5f5f5f 64 plan9 SWAPGS
+0f01f9|11223344556677885f5f5f5f5f 32 intel rdtscp
+0f01f9|11223344556677885f5f5f5f5f 32 plan9 RDTSCP
+0f01f9|11223344556677885f5f5f5f5f 64 gnu rdtscp
+0f01f9|11223344556677885f5f5f5f5f 64 intel rdtscp
+0f01f9|11223344556677885f5f5f5f5f 64 plan9 RDTSCP
+0f0211|223344556677885f5f5f5f5f5f 32 intel lar edx, word ptr [ecx]
+0f0211|223344556677885f5f5f5f5f5f 32 plan9 LAR 0(CX), DX
+0f0211|223344556677885f5f5f5f5f5f 64 gnu lar (%rcx),%edx
+0f0211|223344556677885f5f5f5f5f5f 64 intel lar edx, word ptr [rcx]
+0f0211|223344556677885f5f5f5f5f5f 64 plan9 LAR 0(CX), DX
+0f0311|223344556677885f5f5f5f5f5f 32 intel lsl edx, word ptr [ecx]
+0f0311|223344556677885f5f5f5f5f5f 32 plan9 LSL 0(CX), DX
+0f0311|223344556677885f5f5f5f5f5f 64 gnu lsl (%rcx),%edx
+0f0311|223344556677885f5f5f5f5f5f 64 intel lsl edx, word ptr [rcx]
+0f0311|223344556677885f5f5f5f5f5f 64 plan9 LSL 0(CX), DX
+0f04|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f04|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f04|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f04|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f04|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f05|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f05|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f05|11223344556677885f5f5f5f5f5f 64 gnu syscall
+0f05|11223344556677885f5f5f5f5f5f 64 intel syscall
+0f05|11223344556677885f5f5f5f5f5f 64 plan9 SYSCALL
+0f06|11223344556677885f5f5f5f5f5f 32 intel clts
+0f06|11223344556677885f5f5f5f5f5f 32 plan9 CLTS
+0f06|11223344556677885f5f5f5f5f5f 64 gnu clts
+0f06|11223344556677885f5f5f5f5f5f 64 intel clts
+0f06|11223344556677885f5f5f5f5f5f 64 plan9 CLTS
+0f07|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f07|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f07|11223344556677885f5f5f5f5f5f 64 gnu sysretq
+0f07|11223344556677885f5f5f5f5f5f 64 intel sysret
+0f07|11223344556677885f5f5f5f5f5f 64 plan9 SYSRET
+0f08|11223344556677885f5f5f5f5f5f 32 intel invd
+0f08|11223344556677885f5f5f5f5f5f 32 plan9 INVD
+0f08|11223344556677885f5f5f5f5f5f 64 gnu invd
+0f08|11223344556677885f5f5f5f5f5f 64 intel invd
+0f08|11223344556677885f5f5f5f5f5f 64 plan9 INVD
+0f09|11223344556677885f5f5f5f5f5f 32 intel wbinvd
+0f09|11223344556677885f5f5f5f5f5f 32 plan9 WBINVD
+0f09|11223344556677885f5f5f5f5f5f 64 gnu wbinvd
+0f09|11223344556677885f5f5f5f5f5f 64 intel wbinvd
+0f09|11223344556677885f5f5f5f5f5f 64 plan9 WBINVD
+0f0b|11223344556677885f5f5f5f5f5f 32 intel ud2
+0f0b|11223344556677885f5f5f5f5f5f 32 plan9 UD2
+0f0b|11223344556677885f5f5f5f5f5f 64 gnu ud2
+0f0b|11223344556677885f5f5f5f5f5f 64 intel ud2
+0f0b|11223344556677885f5f5f5f5f5f 64 plan9 UD2
+0f0d08|11223344556677885f5f5f5f5f 32 intel prefetchw zmmword ptr [eax]
+0f0d08|11223344556677885f5f5f5f5f 32 plan9 PREFETCHW 0(AX)
+0f0d08|11223344556677885f5f5f5f5f 64 gnu prefetchw (%rax)
+0f0d08|11223344556677885f5f5f5f5f 64 intel prefetchw zmmword ptr [rax]
+0f0d08|11223344556677885f5f5f5f5f 64 plan9 PREFETCHW 0(AX)
+0f1011|223344556677885f5f5f5f5f5f 32 intel movups xmm2, xmmword ptr [ecx]
+0f1011|223344556677885f5f5f5f5f5f 32 plan9 MOVUPS 0(CX), X2
+0f1011|223344556677885f5f5f5f5f5f 64 gnu movups (%rcx),%xmm2
+0f1011|223344556677885f5f5f5f5f5f 64 intel movups xmm2, xmmword ptr [rcx]
+0f1011|223344556677885f5f5f5f5f5f 64 plan9 MOVUPS 0(CX), X2
+0f1122|3344556677885f5f5f5f5f5f5f 32 intel movups xmmword ptr [edx], xmm4
+0f1122|3344556677885f5f5f5f5f5f5f 32 plan9 MOVUPS X4, 0(DX)
+0f1122|3344556677885f5f5f5f5f5f5f 64 gnu movups %xmm4,(%rdx)
+0f1122|3344556677885f5f5f5f5f5f5f 64 intel movups xmmword ptr [rdx], xmm4
+0f1122|3344556677885f5f5f5f5f5f5f 64 plan9 MOVUPS X4, 0(DX)
+0f1211|223344556677885f5f5f5f5f5f 32 intel movlps xmm2, qword ptr [ecx]
+0f1211|223344556677885f5f5f5f5f5f 32 plan9 MOVLPS 0(CX), X2
+0f1211|223344556677885f5f5f5f5f5f 64 gnu movlps (%rcx),%xmm2
+0f1211|223344556677885f5f5f5f5f5f 64 intel movlps xmm2, qword ptr [rcx]
+0f1211|223344556677885f5f5f5f5f5f 64 plan9 MOVLPS 0(CX), X2
+0f12c0|11223344556677885f5f5f5f5f 32 intel movhlps xmm0, xmm0
+0f12c0|11223344556677885f5f5f5f5f 32 plan9 MOVHLPS X0, X0
+0f12c0|11223344556677885f5f5f5f5f 64 gnu movhlps %xmm0,%xmm0
+0f12c0|11223344556677885f5f5f5f5f 64 intel movhlps xmm0, xmm0
+0f12c0|11223344556677885f5f5f5f5f 64 plan9 MOVHLPS X0, X0
+0f1311|223344556677885f5f5f5f5f5f 32 intel movlps qword ptr [ecx], xmm2
+0f1311|223344556677885f5f5f5f5f5f 32 plan9 MOVLPS X2, 0(CX)
+0f1311|223344556677885f5f5f5f5f5f 64 gnu movlps %xmm2,(%rcx)
+0f1311|223344556677885f5f5f5f5f5f 64 intel movlps qword ptr [rcx], xmm2
+0f1311|223344556677885f5f5f5f5f5f 64 plan9 MOVLPS X2, 0(CX)
+0f1411|223344556677885f5f5f5f5f5f 32 intel unpcklps xmm2, xmmword ptr [ecx]
+0f1411|223344556677885f5f5f5f5f5f 32 plan9 UNPCKLPS 0(CX), X2
+0f1411|223344556677885f5f5f5f5f5f 64 gnu unpcklps (%rcx),%xmm2
+0f1411|223344556677885f5f5f5f5f5f 64 intel unpcklps xmm2, xmmword ptr [rcx]
+0f1411|223344556677885f5f5f5f5f5f 64 plan9 UNPCKLPS 0(CX), X2
+0f1511|223344556677885f5f5f5f5f5f 32 intel unpckhps xmm2, xmmword ptr [ecx]
+0f1511|223344556677885f5f5f5f5f5f 32 plan9 UNPCKHPS 0(CX), X2
+0f1511|223344556677885f5f5f5f5f5f 64 gnu unpckhps (%rcx),%xmm2
+0f1511|223344556677885f5f5f5f5f5f 64 intel unpckhps xmm2, xmmword ptr [rcx]
+0f1511|223344556677885f5f5f5f5f5f 64 plan9 UNPCKHPS 0(CX), X2
+0f1611|223344556677885f5f5f5f5f5f 32 intel movhps xmm2, qword ptr [ecx]
+0f1611|223344556677885f5f5f5f5f5f 32 plan9 MOVHPS 0(CX), X2
+0f1611|223344556677885f5f5f5f5f5f 64 gnu movhps (%rcx),%xmm2
+0f1611|223344556677885f5f5f5f5f5f 64 intel movhps xmm2, qword ptr [rcx]
+0f1611|223344556677885f5f5f5f5f5f 64 plan9 MOVHPS 0(CX), X2
+0f16c0|11223344556677885f5f5f5f5f 32 intel movlhps xmm0, xmm0
+0f16c0|11223344556677885f5f5f5f5f 32 plan9 MOVLHPS X0, X0
+0f16c0|11223344556677885f5f5f5f5f 64 gnu movlhps %xmm0,%xmm0
+0f16c0|11223344556677885f5f5f5f5f 64 intel movlhps xmm0, xmm0
+0f16c0|11223344556677885f5f5f5f5f 64 plan9 MOVLHPS X0, X0
+0f1711|223344556677885f5f5f5f5f5f 32 intel movhps qword ptr [ecx], xmm2
+0f1711|223344556677885f5f5f5f5f5f 32 plan9 MOVHPS X2, 0(CX)
+0f1711|223344556677885f5f5f5f5f5f 64 gnu movhps %xmm2,(%rcx)
+0f1711|223344556677885f5f5f5f5f5f 64 intel movhps qword ptr [rcx], xmm2
+0f1711|223344556677885f5f5f5f5f5f 64 plan9 MOVHPS X2, 0(CX)
+0f1800|11223344556677885f5f5f5f5f 32 intel prefetchnta zmmword ptr [eax]
+0f1800|11223344556677885f5f5f5f5f 32 plan9 PREFETCHNTA 0(AX)
+0f1800|11223344556677885f5f5f5f5f 64 gnu prefetchnta (%rax)
+0f1800|11223344556677885f5f5f5f5f 64 intel prefetchnta zmmword ptr [rax]
+0f1800|11223344556677885f5f5f5f5f 64 plan9 PREFETCHNTA 0(AX)
+0f1808|11223344556677885f5f5f5f5f 32 intel prefetcht0 zmmword ptr [eax]
+0f1808|11223344556677885f5f5f5f5f 32 plan9 PREFETCHT0 0(AX)
+0f1808|11223344556677885f5f5f5f5f 64 gnu prefetcht0 (%rax)
+0f1808|11223344556677885f5f5f5f5f 64 intel prefetcht0 zmmword ptr [rax]
+0f1808|11223344556677885f5f5f5f5f 64 plan9 PREFETCHT0 0(AX)
+0f1811|223344556677885f5f5f5f5f5f 32 intel prefetcht1 zmmword ptr [ecx]
+0f1811|223344556677885f5f5f5f5f5f 32 plan9 PREFETCHT1 0(CX)
+0f1811|223344556677885f5f5f5f5f5f 64 gnu prefetcht1 (%rcx)
+0f1811|223344556677885f5f5f5f5f5f 64 intel prefetcht1 zmmword ptr [rcx]
+0f1811|223344556677885f5f5f5f5f5f 64 plan9 PREFETCHT1 0(CX)
+0f1818|11223344556677885f5f5f5f5f 32 intel prefetcht2 zmmword ptr [eax]
+0f1818|11223344556677885f5f5f5f5f 32 plan9 PREFETCHT2 0(AX)
+0f1818|11223344556677885f5f5f5f5f 64 gnu prefetcht2 (%rax)
+0f1818|11223344556677885f5f5f5f5f 64 intel prefetcht2 zmmword ptr [rax]
+0f1818|11223344556677885f5f5f5f5f 64 plan9 PREFETCHT2 0(AX)
+0f1f00|11223344556677885f5f5f5f5f 32 intel nop dword ptr [eax], eax
+0f1f00|11223344556677885f5f5f5f5f 32 plan9 NOPL 0(AX)
+0f1f00|11223344556677885f5f5f5f5f 64 gnu nopl (%rax)
+0f1f00|11223344556677885f5f5f5f5f 64 intel nop dword ptr [rax], eax
+0f1f00|11223344556677885f5f5f5f5f 64 plan9 NOPL 0(AX)
+0f2011|223344556677885f5f5f5f5f5f 32 intel mov ecx, cr2
+0f2011|223344556677885f5f5f5f5f5f 32 plan9 MOVL CR2, CX
+0f2011|223344556677885f5f5f5f5f5f 64 gnu mov %cr2,%rcx
+0f2011|223344556677885f5f5f5f5f5f 64 intel mov rcx, cr2
+0f2011|223344556677885f5f5f5f5f5f 64 plan9 MOVL CR2, CX
+0f2111|223344556677885f5f5f5f5f5f 32 intel mov ecx, dr2
+0f2111|223344556677885f5f5f5f5f5f 32 plan9 MOVL DR2, CX
+0f2111|223344556677885f5f5f5f5f5f 64 gnu mov %db2,%rcx
+0f2111|223344556677885f5f5f5f5f5f 64 intel mov rcx, dr2
+0f2111|223344556677885f5f5f5f5f5f 64 plan9 MOVL DR2, CX
+0f2211|223344556677885f5f5f5f5f5f 32 intel mov cr2, ecx
+0f2211|223344556677885f5f5f5f5f5f 32 plan9 MOVL CX, CR2
+0f2211|223344556677885f5f5f5f5f5f 64 gnu mov %rcx,%cr2
+0f2211|223344556677885f5f5f5f5f5f 64 intel mov cr2, rcx
+0f2211|223344556677885f5f5f5f5f5f 64 plan9 MOVL CX, CR2
+0f2311|223344556677885f5f5f5f5f5f 32 intel mov dr2, ecx
+0f2311|223344556677885f5f5f5f5f5f 32 plan9 MOVL CX, DR2
+0f2311|223344556677885f5f5f5f5f5f 64 gnu mov %rcx,%db2
+0f2311|223344556677885f5f5f5f5f5f 64 intel mov dr2, rcx
+0f2311|223344556677885f5f5f5f5f5f 64 plan9 MOVL CX, DR2
+0f2411|223344556677885f5f5f5f5f5f 32 intel mov ecx, tr2
+0f2411|223344556677885f5f5f5f5f5f 32 plan9 MOVL TR2, CX
+0f2411|223344556677885f5f5f5f5f5f 64 gnu mov %tr2,%rcx
+0f2411|223344556677885f5f5f5f5f5f 64 intel mov rcx, tr2
+0f2411|223344556677885f5f5f5f5f5f 64 plan9 MOVL TR2, CX
+0f2611|223344556677885f5f5f5f5f5f 32 intel mov tr2, ecx
+0f2611|223344556677885f5f5f5f5f5f 32 plan9 MOVL CX, TR2
+0f2611|223344556677885f5f5f5f5f5f 64 gnu mov %rcx,%tr2
+0f2611|223344556677885f5f5f5f5f5f 64 intel mov tr2, rcx
+0f2611|223344556677885f5f5f5f5f5f 64 plan9 MOVL CX, TR2
+0f2811|223344556677885f5f5f5f5f5f 32 intel movaps xmm2, xmmword ptr [ecx]
+0f2811|223344556677885f5f5f5f5f5f 32 plan9 MOVAPS 0(CX), X2
+0f2811|223344556677885f5f5f5f5f5f 64 gnu movaps (%rcx),%xmm2
+0f2811|223344556677885f5f5f5f5f5f 64 intel movaps xmm2, xmmword ptr [rcx]
+0f2811|223344556677885f5f5f5f5f5f 64 plan9 MOVAPS 0(CX), X2
+0f2911|223344556677885f5f5f5f5f5f 32 intel movaps xmmword ptr [ecx], xmm2
+0f2911|223344556677885f5f5f5f5f5f 32 plan9 MOVAPS X2, 0(CX)
+0f2911|223344556677885f5f5f5f5f5f 64 gnu movaps %xmm2,(%rcx)
+0f2911|223344556677885f5f5f5f5f5f 64 intel movaps xmmword ptr [rcx], xmm2
+0f2911|223344556677885f5f5f5f5f5f 64 plan9 MOVAPS X2, 0(CX)
+0f2a11|223344556677885f5f5f5f5f5f 32 intel cvtpi2ps xmm2, qword ptr [ecx]
+0f2a11|223344556677885f5f5f5f5f5f 32 plan9 CVTPI2PS 0(CX), X2
+0f2a11|223344556677885f5f5f5f5f5f 64 gnu cvtpi2ps (%rcx),%xmm2
+0f2a11|223344556677885f5f5f5f5f5f 64 intel cvtpi2ps xmm2, qword ptr [rcx]
+0f2a11|223344556677885f5f5f5f5f5f 64 plan9 CVTPI2PS 0(CX), X2
+0f2b11|223344556677885f5f5f5f5f5f 32 intel movntps xmmword ptr [ecx], xmm2
+0f2b11|223344556677885f5f5f5f5f5f 32 plan9 MOVNTPS X2, 0(CX)
+0f2b11|223344556677885f5f5f5f5f5f 64 gnu movntps %xmm2,(%rcx)
+0f2b11|223344556677885f5f5f5f5f5f 64 intel movntps xmmword ptr [rcx], xmm2
+0f2b11|223344556677885f5f5f5f5f5f 64 plan9 MOVNTPS X2, 0(CX)
+0f2c11|223344556677885f5f5f5f5f5f 32 intel cvttps2pi mmx2, qword ptr [ecx]
+0f2c11|223344556677885f5f5f5f5f5f 32 plan9 CVTTPS2PI 0(CX), M2
+0f2c11|223344556677885f5f5f5f5f5f 64 gnu cvttps2pi (%rcx),%mm2
+0f2c11|223344556677885f5f5f5f5f5f 64 intel cvttps2pi mmx2, qword ptr [rcx]
+0f2c11|223344556677885f5f5f5f5f5f 64 plan9 CVTTPS2PI 0(CX), M2
+0f2d11|223344556677885f5f5f5f5f5f 32 intel cvtps2pi mmx2, qword ptr [ecx]
+0f2d11|223344556677885f5f5f5f5f5f 32 plan9 CVTPS2PI 0(CX), M2
+0f2d11|223344556677885f5f5f5f5f5f 64 gnu cvtps2pi (%rcx),%mm2
+0f2d11|223344556677885f5f5f5f5f5f 64 intel cvtps2pi mmx2, qword ptr [rcx]
+0f2d11|223344556677885f5f5f5f5f5f 64 plan9 CVTPS2PI 0(CX), M2
+0f2e11|223344556677885f5f5f5f5f5f 32 intel ucomiss xmm2, dword ptr [ecx]
+0f2e11|223344556677885f5f5f5f5f5f 32 plan9 UCOMISS 0(CX), X2
+0f2e11|223344556677885f5f5f5f5f5f 64 gnu ucomiss (%rcx),%xmm2
+0f2e11|223344556677885f5f5f5f5f5f 64 intel ucomiss xmm2, dword ptr [rcx]
+0f2e11|223344556677885f5f5f5f5f5f 64 plan9 UCOMISS 0(CX), X2
+0f2f11|223344556677885f5f5f5f5f5f 32 intel comiss xmm2, dword ptr [ecx]
+0f2f11|223344556677885f5f5f5f5f5f 32 plan9 COMISS 0(CX), X2
+0f2f11|223344556677885f5f5f5f5f5f 64 gnu comiss (%rcx),%xmm2
+0f2f11|223344556677885f5f5f5f5f5f 64 intel comiss xmm2, dword ptr [rcx]
+0f2f11|223344556677885f5f5f5f5f5f 64 plan9 COMISS 0(CX), X2
+0f30|11223344556677885f5f5f5f5f5f 32 intel wrmsr
+0f30|11223344556677885f5f5f5f5f5f 32 plan9 WRMSR
+0f30|11223344556677885f5f5f5f5f5f 64 gnu wrmsr
+0f30|11223344556677885f5f5f5f5f5f 64 intel wrmsr
+0f30|11223344556677885f5f5f5f5f5f 64 plan9 WRMSR
+0f31|11223344556677885f5f5f5f5f5f 32 intel rdtsc
+0f31|11223344556677885f5f5f5f5f5f 32 plan9 RDTSC
+0f31|11223344556677885f5f5f5f5f5f 64 gnu rdtsc
+0f31|11223344556677885f5f5f5f5f5f 64 intel rdtsc
+0f31|11223344556677885f5f5f5f5f5f 64 plan9 RDTSC
+0f32|11223344556677885f5f5f5f5f5f 32 intel rdmsr
+0f32|11223344556677885f5f5f5f5f5f 32 plan9 RDMSR
+0f32|11223344556677885f5f5f5f5f5f 64 gnu rdmsr
+0f32|11223344556677885f5f5f5f5f5f 64 intel rdmsr
+0f32|11223344556677885f5f5f5f5f5f 64 plan9 RDMSR
+0f33|11223344556677885f5f5f5f5f5f 32 intel rdpmc
+0f33|11223344556677885f5f5f5f5f5f 32 plan9 RDPMC
+0f33|11223344556677885f5f5f5f5f5f 64 gnu rdpmc
+0f33|11223344556677885f5f5f5f5f5f 64 intel rdpmc
+0f33|11223344556677885f5f5f5f5f5f 64 plan9 RDPMC
+0f34|11223344556677885f5f5f5f5f5f 32 intel sysenter
+0f34|11223344556677885f5f5f5f5f5f 32 plan9 SYSENTER
+0f34|11223344556677885f5f5f5f5f5f 64 gnu sysenter
+0f34|11223344556677885f5f5f5f5f5f 64 intel sysenter
+0f34|11223344556677885f5f5f5f5f5f 64 plan9 SYSENTER
+0f35|11223344556677885f5f5f5f5f5f 32 intel sysexit
+0f35|11223344556677885f5f5f5f5f5f 32 plan9 SYSEXIT
+0f35|11223344556677885f5f5f5f5f5f 64 gnu sysexit
+0f35|11223344556677885f5f5f5f5f5f 64 intel sysexit
+0f35|11223344556677885f5f5f5f5f5f 64 plan9 SYSEXIT
+0f380011|223344556677885f5f5f5f5f 32 intel pshufb mmx2, qword ptr [ecx]
+0f380011|223344556677885f5f5f5f5f 32 plan9 PSHUFB 0(CX), M2
+0f380011|223344556677885f5f5f5f5f 64 gnu pshufb (%rcx),%mm2
+0f380011|223344556677885f5f5f5f5f 64 intel pshufb mmx2, qword ptr [rcx]
+0f380011|223344556677885f5f5f5f5f 64 plan9 PSHUFB 0(CX), M2
+0f380111|223344556677885f5f5f5f5f 32 intel phaddw mmx2, qword ptr [ecx]
+0f380111|223344556677885f5f5f5f5f 32 plan9 PHADDW 0(CX), M2
+0f380111|223344556677885f5f5f5f5f 64 gnu phaddw (%rcx),%mm2
+0f380111|223344556677885f5f5f5f5f 64 intel phaddw mmx2, qword ptr [rcx]
+0f380111|223344556677885f5f5f5f5f 64 plan9 PHADDW 0(CX), M2
+0f380211|223344556677885f5f5f5f5f 32 intel phaddd mmx2, qword ptr [ecx]
+0f380211|223344556677885f5f5f5f5f 32 plan9 PHADDD 0(CX), M2
+0f380211|223344556677885f5f5f5f5f 64 gnu phaddd (%rcx),%mm2
+0f380211|223344556677885f5f5f5f5f 64 intel phaddd mmx2, qword ptr [rcx]
+0f380211|223344556677885f5f5f5f5f 64 plan9 PHADDD 0(CX), M2
+0f380311|223344556677885f5f5f5f5f 32 intel phaddsw mmx2, qword ptr [ecx]
+0f380311|223344556677885f5f5f5f5f 32 plan9 PHADDSW 0(CX), M2
+0f380311|223344556677885f5f5f5f5f 64 gnu phaddsw (%rcx),%mm2
+0f380311|223344556677885f5f5f5f5f 64 intel phaddsw mmx2, qword ptr [rcx]
+0f380311|223344556677885f5f5f5f5f 64 plan9 PHADDSW 0(CX), M2
+0f380411|223344556677885f5f5f5f5f 32 intel pmaddubsw mmx2, qword ptr [ecx]
+0f380411|223344556677885f5f5f5f5f 32 plan9 PMADDUBSW 0(CX), M2
+0f380411|223344556677885f5f5f5f5f 64 gnu pmaddubsw (%rcx),%mm2
+0f380411|223344556677885f5f5f5f5f 64 intel pmaddubsw mmx2, qword ptr [rcx]
+0f380411|223344556677885f5f5f5f5f 64 plan9 PMADDUBSW 0(CX), M2
+0f380511|223344556677885f5f5f5f5f 32 intel phsubw mmx2, qword ptr [ecx]
+0f380511|223344556677885f5f5f5f5f 32 plan9 PHSUBW 0(CX), M2
+0f380511|223344556677885f5f5f5f5f 64 gnu phsubw (%rcx),%mm2
+0f380511|223344556677885f5f5f5f5f 64 intel phsubw mmx2, qword ptr [rcx]
+0f380511|223344556677885f5f5f5f5f 64 plan9 PHSUBW 0(CX), M2
+0f380611|223344556677885f5f5f5f5f 32 intel phsubd mmx2, qword ptr [ecx]
+0f380611|223344556677885f5f5f5f5f 32 plan9 PHSUBD 0(CX), M2
+0f380611|223344556677885f5f5f5f5f 64 gnu phsubd (%rcx),%mm2
+0f380611|223344556677885f5f5f5f5f 64 intel phsubd mmx2, qword ptr [rcx]
+0f380611|223344556677885f5f5f5f5f 64 plan9 PHSUBD 0(CX), M2
+0f380711|223344556677885f5f5f5f5f 32 intel phsubsw mmx2, qword ptr [ecx]
+0f380711|223344556677885f5f5f5f5f 32 plan9 PHSUBSW 0(CX), M2
+0f380711|223344556677885f5f5f5f5f 64 gnu phsubsw (%rcx),%mm2
+0f380711|223344556677885f5f5f5f5f 64 intel phsubsw mmx2, qword ptr [rcx]
+0f380711|223344556677885f5f5f5f5f 64 plan9 PHSUBSW 0(CX), M2
+0f380811|223344556677885f5f5f5f5f 32 intel psignb mmx2, qword ptr [ecx]
+0f380811|223344556677885f5f5f5f5f 32 plan9 PSIGNB 0(CX), M2
+0f380811|223344556677885f5f5f5f5f 64 gnu psignb (%rcx),%mm2
+0f380811|223344556677885f5f5f5f5f 64 intel psignb mmx2, qword ptr [rcx]
+0f380811|223344556677885f5f5f5f5f 64 plan9 PSIGNB 0(CX), M2
+0f380911|223344556677885f5f5f5f5f 32 intel psignw mmx2, qword ptr [ecx]
+0f380911|223344556677885f5f5f5f5f 32 plan9 PSIGNW 0(CX), M2
+0f380911|223344556677885f5f5f5f5f 64 gnu psignw (%rcx),%mm2
+0f380911|223344556677885f5f5f5f5f 64 intel psignw mmx2, qword ptr [rcx]
+0f380911|223344556677885f5f5f5f5f 64 plan9 PSIGNW 0(CX), M2
+0f380a11|223344556677885f5f5f5f5f 32 intel psignd mmx2, qword ptr [ecx]
+0f380a11|223344556677885f5f5f5f5f 32 plan9 PSIGND 0(CX), M2
+0f380a11|223344556677885f5f5f5f5f 64 gnu psignd (%rcx),%mm2
+0f380a11|223344556677885f5f5f5f5f 64 intel psignd mmx2, qword ptr [rcx]
+0f380a11|223344556677885f5f5f5f5f 64 plan9 PSIGND 0(CX), M2
+0f380b11|223344556677885f5f5f5f5f 32 intel pmulhrsw mmx2, qword ptr [ecx]
+0f380b11|223344556677885f5f5f5f5f 32 plan9 PMULHRSW 0(CX), M2
+0f380b11|223344556677885f5f5f5f5f 64 gnu pmulhrsw (%rcx),%mm2
+0f380b11|223344556677885f5f5f5f5f 64 intel pmulhrsw mmx2, qword ptr [rcx]
+0f380b11|223344556677885f5f5f5f5f 64 plan9 PMULHRSW 0(CX), M2
+0f3810|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3810|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3810|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3810|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3810|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3811|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f3811|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3811|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3811|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f3811|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3814|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3814|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3814|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3814|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3814|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3815|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3815|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3815|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3815|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3815|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3817|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3817|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3817|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3817|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3817|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f381c11|223344556677885f5f5f5f5f 32 intel pabsb mmx2, qword ptr [ecx]
+0f381c11|223344556677885f5f5f5f5f 32 plan9 PABSB 0(CX), M2
+0f381c11|223344556677885f5f5f5f5f 64 gnu pabsb (%rcx),%mm2
+0f381c11|223344556677885f5f5f5f5f 64 intel pabsb mmx2, qword ptr [rcx]
+0f381c11|223344556677885f5f5f5f5f 64 plan9 PABSB 0(CX), M2
+0f381d11|223344556677885f5f5f5f5f 32 intel pabsw mmx2, qword ptr [ecx]
+0f381d11|223344556677885f5f5f5f5f 32 plan9 PABSW 0(CX), M2
+0f381d11|223344556677885f5f5f5f5f 64 gnu pabsw (%rcx),%mm2
+0f381d11|223344556677885f5f5f5f5f 64 intel pabsw mmx2, qword ptr [rcx]
+0f381d11|223344556677885f5f5f5f5f 64 plan9 PABSW 0(CX), M2
+0f381e11|223344556677885f5f5f5f5f 32 intel pabsd mmx2, qword ptr [ecx]
+0f381e11|223344556677885f5f5f5f5f 32 plan9 PABSD 0(CX), M2
+0f381e11|223344556677885f5f5f5f5f 64 gnu pabsd (%rcx),%mm2
+0f381e11|223344556677885f5f5f5f5f 64 intel pabsd mmx2, qword ptr [rcx]
+0f381e11|223344556677885f5f5f5f5f 64 plan9 PABSD 0(CX), M2
+0f3820|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3820|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3820|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3820|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3820|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3821|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3821|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3821|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3821|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3821|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3822|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3822|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3822|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3822|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3822|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3823|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3823|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3823|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3823|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3823|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3824|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3824|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3824|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3824|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3824|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3825|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3825|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3825|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3825|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3825|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3828|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3828|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3828|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3828|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3828|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3829|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3829|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3829|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3829|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3829|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f382a|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f382a|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f382a|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f382a|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f382a|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f382b|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f382b|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f382b|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f382b|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f382b|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3830|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3830|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3830|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3830|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3830|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3831|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3831|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3831|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3831|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3831|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3832|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3832|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3832|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3832|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3832|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3833|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3833|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3833|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3833|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3833|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3834|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3834|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3834|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3834|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3834|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3835|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3835|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3835|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3835|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3835|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3837|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3837|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3837|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3837|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3837|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3838|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3838|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3838|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3838|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3838|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3839|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3839|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3839|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3839|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3839|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f383a|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f383a|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f383a|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f383a|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f383a|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f383b|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f383b|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f383b|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f383b|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f383b|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f383c|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f383c|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f383c|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f383c|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f383c|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f383d|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f383d|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f383d|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f383d|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f383d|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f383e|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f383e|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f383e|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f383e|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f383e|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f383f|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f383f|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f383f|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f383f|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f383f|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3840|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3840|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3840|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3840|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3840|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3841|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3841|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3841|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3841|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3841|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3882|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3882|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3882|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3882|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3882|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f38db|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f38db|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f38db|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f38db|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f38db|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f38dc|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f38dc|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f38dc|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f38dc|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f38dc|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f38dd|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f38dd|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f38dd|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f38dd|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f38dd|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f38de|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f38de|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f38de|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f38de|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f38de|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f38df|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f38df|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f38df|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f38df|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f38df|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f38f011|223344556677885f5f5f5f5f 32 intel movbe edx, dword ptr [ecx]
+0f38f011|223344556677885f5f5f5f5f 32 plan9 MOVBE 0(CX), DX
+0f38f011|223344556677885f5f5f5f5f 64 gnu movbe (%rcx),%edx
+0f38f011|223344556677885f5f5f5f5f 64 intel movbe edx, dword ptr [rcx]
+0f38f011|223344556677885f5f5f5f5f 64 plan9 MOVBE 0(CX), DX
+0f38f111|223344556677885f5f5f5f5f 32 intel movbe dword ptr [ecx], edx
+0f38f111|223344556677885f5f5f5f5f 32 plan9 MOVBE DX, 0(CX)
+0f38f111|223344556677885f5f5f5f5f 64 gnu movbe %edx,(%rcx)
+0f38f111|223344556677885f5f5f5f5f 64 intel movbe dword ptr [rcx], edx
+0f38f111|223344556677885f5f5f5f5f 64 plan9 MOVBE DX, 0(CX)
+0f3a08|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a08|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a08|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a08|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a08|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a09|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a09|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a09|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a09|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a09|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a0a|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a0a|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a0a|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a0a|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a0a|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a0b|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a0b|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a0b|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a0b|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a0b|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a0c|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a0c|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a0c|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a0c|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a0c|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a0d|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a0d|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a0d|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a0d|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a0d|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a0e|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a0e|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a0e|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a0e|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a0e|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a0f1122|3344556677885f5f5f5f5f 32 intel palignr mmx2, qword ptr [ecx], 0x22
+0f3a0f1122|3344556677885f5f5f5f5f 32 plan9 PALIGNR $0x22, 0(CX), M2
+0f3a0f1122|3344556677885f5f5f5f5f 64 gnu palignr $0x22,(%rcx),%mm2
+0f3a0f1122|3344556677885f5f5f5f5f 64 intel palignr mmx2, qword ptr [rcx], 0x22
+0f3a0f1122|3344556677885f5f5f5f5f 64 plan9 PALIGNR $0x22, 0(CX), M2
+0f3a11|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a11|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a11|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a11|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a11|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a14|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a14|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a14|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a14|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a14|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a15|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a15|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a15|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a15|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a15|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a16|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a16|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a16|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a16|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a16|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a17|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a17|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a17|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a17|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a17|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a20|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a20|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a20|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a20|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a20|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a21|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a21|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a21|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a21|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a21|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a22|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a22|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a22|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a22|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a22|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a40|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a40|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a40|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a40|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a40|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a41|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a41|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a41|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a41|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a41|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a42|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a42|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a42|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a42|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a42|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a44|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a44|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a44|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a44|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a44|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a60|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a60|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a60|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a60|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a60|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a61|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a61|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a61|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a61|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a61|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a62|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a62|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a62|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a62|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a62|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3a63|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3a63|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3a63|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3a63|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3a63|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f3adf|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f3adf|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f3adf|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f3adf|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f3adf|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f4011|223344556677885f5f5f5f5f5f 32 intel cmovo edx, dword ptr [ecx]
+0f4011|223344556677885f5f5f5f5f5f 32 plan9 CMOVO 0(CX), DX
+0f4011|223344556677885f5f5f5f5f5f 64 gnu cmovo (%rcx),%edx
+0f4011|223344556677885f5f5f5f5f5f 64 intel cmovo edx, dword ptr [rcx]
+0f4011|223344556677885f5f5f5f5f5f 64 plan9 CMOVO 0(CX), DX
+0f4111|223344556677885f5f5f5f5f5f 32 intel cmovno edx, dword ptr [ecx]
+0f4111|223344556677885f5f5f5f5f5f 32 plan9 CMOVNO 0(CX), DX
+0f4111|223344556677885f5f5f5f5f5f 64 gnu cmovno (%rcx),%edx
+0f4111|223344556677885f5f5f5f5f5f 64 intel cmovno edx, dword ptr [rcx]
+0f4111|223344556677885f5f5f5f5f5f 64 plan9 CMOVNO 0(CX), DX
+0f4211|223344556677885f5f5f5f5f5f 32 intel cmovb edx, dword ptr [ecx]
+0f4211|223344556677885f5f5f5f5f5f 32 plan9 CMOVB 0(CX), DX
+0f4211|223344556677885f5f5f5f5f5f 64 gnu cmovb (%rcx),%edx
+0f4211|223344556677885f5f5f5f5f5f 64 intel cmovb edx, dword ptr [rcx]
+0f4211|223344556677885f5f5f5f5f5f 64 plan9 CMOVB 0(CX), DX
+0f4311|223344556677885f5f5f5f5f5f 32 intel cmovnb edx, dword ptr [ecx]
+0f4311|223344556677885f5f5f5f5f5f 32 plan9 CMOVAE 0(CX), DX
+0f4311|223344556677885f5f5f5f5f5f 64 gnu cmovae (%rcx),%edx
+0f4311|223344556677885f5f5f5f5f5f 64 intel cmovnb edx, dword ptr [rcx]
+0f4311|223344556677885f5f5f5f5f5f 64 plan9 CMOVAE 0(CX), DX
+0f4411|223344556677885f5f5f5f5f5f 32 intel cmovz edx, dword ptr [ecx]
+0f4411|223344556677885f5f5f5f5f5f 32 plan9 CMOVE 0(CX), DX
+0f4411|223344556677885f5f5f5f5f5f 64 gnu cmove (%rcx),%edx
+0f4411|223344556677885f5f5f5f5f5f 64 intel cmovz edx, dword ptr [rcx]
+0f4411|223344556677885f5f5f5f5f5f 64 plan9 CMOVE 0(CX), DX
+0f4511|223344556677885f5f5f5f5f5f 32 intel cmovnz edx, dword ptr [ecx]
+0f4511|223344556677885f5f5f5f5f5f 32 plan9 CMOVNE 0(CX), DX
+0f4511|223344556677885f5f5f5f5f5f 64 gnu cmovne (%rcx),%edx
+0f4511|223344556677885f5f5f5f5f5f 64 intel cmovnz edx, dword ptr [rcx]
+0f4511|223344556677885f5f5f5f5f5f 64 plan9 CMOVNE 0(CX), DX
+0f4611|223344556677885f5f5f5f5f5f 32 intel cmovbe edx, dword ptr [ecx]
+0f4611|223344556677885f5f5f5f5f5f 32 plan9 CMOVBE 0(CX), DX
+0f4611|223344556677885f5f5f5f5f5f 64 gnu cmovbe (%rcx),%edx
+0f4611|223344556677885f5f5f5f5f5f 64 intel cmovbe edx, dword ptr [rcx]
+0f4611|223344556677885f5f5f5f5f5f 64 plan9 CMOVBE 0(CX), DX
+0f4711|223344556677885f5f5f5f5f5f 32 intel cmovnbe edx, dword ptr [ecx]
+0f4711|223344556677885f5f5f5f5f5f 32 plan9 CMOVA 0(CX), DX
+0f4711|223344556677885f5f5f5f5f5f 64 gnu cmova (%rcx),%edx
+0f4711|223344556677885f5f5f5f5f5f 64 intel cmovnbe edx, dword ptr [rcx]
+0f4711|223344556677885f5f5f5f5f5f 64 plan9 CMOVA 0(CX), DX
+0f4811|223344556677885f5f5f5f5f5f 32 intel cmovs edx, dword ptr [ecx]
+0f4811|223344556677885f5f5f5f5f5f 32 plan9 CMOVS 0(CX), DX
+0f4811|223344556677885f5f5f5f5f5f 64 gnu cmovs (%rcx),%edx
+0f4811|223344556677885f5f5f5f5f5f 64 intel cmovs edx, dword ptr [rcx]
+0f4811|223344556677885f5f5f5f5f5f 64 plan9 CMOVS 0(CX), DX
+0f4911|223344556677885f5f5f5f5f5f 32 intel cmovns edx, dword ptr [ecx]
+0f4911|223344556677885f5f5f5f5f5f 32 plan9 CMOVNS 0(CX), DX
+0f4911|223344556677885f5f5f5f5f5f 64 gnu cmovns (%rcx),%edx
+0f4911|223344556677885f5f5f5f5f5f 64 intel cmovns edx, dword ptr [rcx]
+0f4911|223344556677885f5f5f5f5f5f 64 plan9 CMOVNS 0(CX), DX
+0f4a11|223344556677885f5f5f5f5f5f 32 intel cmovp edx, dword ptr [ecx]
+0f4a11|223344556677885f5f5f5f5f5f 32 plan9 CMOVP 0(CX), DX
+0f4a11|223344556677885f5f5f5f5f5f 64 gnu cmovp (%rcx),%edx
+0f4a11|223344556677885f5f5f5f5f5f 64 intel cmovp edx, dword ptr [rcx]
+0f4a11|223344556677885f5f5f5f5f5f 64 plan9 CMOVP 0(CX), DX
+0f4b11|223344556677885f5f5f5f5f5f 32 intel cmovnp edx, dword ptr [ecx]
+0f4b11|223344556677885f5f5f5f5f5f 32 plan9 CMOVNP 0(CX), DX
+0f4b11|223344556677885f5f5f5f5f5f 64 gnu cmovnp (%rcx),%edx
+0f4b11|223344556677885f5f5f5f5f5f 64 intel cmovnp edx, dword ptr [rcx]
+0f4b11|223344556677885f5f5f5f5f5f 64 plan9 CMOVNP 0(CX), DX
+0f4c11|223344556677885f5f5f5f5f5f 32 intel cmovl edx, dword ptr [ecx]
+0f4c11|223344556677885f5f5f5f5f5f 32 plan9 CMOVL 0(CX), DX
+0f4c11|223344556677885f5f5f5f5f5f 64 gnu cmovl (%rcx),%edx
+0f4c11|223344556677885f5f5f5f5f5f 64 intel cmovl edx, dword ptr [rcx]
+0f4c11|223344556677885f5f5f5f5f5f 64 plan9 CMOVL 0(CX), DX
+0f4d11|223344556677885f5f5f5f5f5f 32 intel cmovnl edx, dword ptr [ecx]
+0f4d11|223344556677885f5f5f5f5f5f 32 plan9 CMOVGE 0(CX), DX
+0f4d11|223344556677885f5f5f5f5f5f 64 gnu cmovge (%rcx),%edx
+0f4d11|223344556677885f5f5f5f5f5f 64 intel cmovnl edx, dword ptr [rcx]
+0f4d11|223344556677885f5f5f5f5f5f 64 plan9 CMOVGE 0(CX), DX
+0f4e11|223344556677885f5f5f5f5f5f 32 intel cmovle edx, dword ptr [ecx]
+0f4e11|223344556677885f5f5f5f5f5f 32 plan9 CMOVLE 0(CX), DX
+0f4e11|223344556677885f5f5f5f5f5f 64 gnu cmovle (%rcx),%edx
+0f4e11|223344556677885f5f5f5f5f5f 64 intel cmovle edx, dword ptr [rcx]
+0f4e11|223344556677885f5f5f5f5f5f 64 plan9 CMOVLE 0(CX), DX
+0f4f11|223344556677885f5f5f5f5f5f 32 intel cmovnle edx, dword ptr [ecx]
+0f4f11|223344556677885f5f5f5f5f5f 32 plan9 CMOVG 0(CX), DX
+0f4f11|223344556677885f5f5f5f5f5f 64 gnu cmovg (%rcx),%edx
+0f4f11|223344556677885f5f5f5f5f5f 64 intel cmovnle edx, dword ptr [rcx]
+0f4f11|223344556677885f5f5f5f5f5f 64 plan9 CMOVG 0(CX), DX
+0f5011|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f5011|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f5011|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f5011|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f5011|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f50c0|11223344556677885f5f5f5f5f 32 intel movmskps eax, xmm0
+0f50c0|11223344556677885f5f5f5f5f 32 plan9 MOVMSKPS X0, AX
+0f50c0|11223344556677885f5f5f5f5f 64 gnu movmskps %xmm0,%eax
+0f50c0|11223344556677885f5f5f5f5f 64 intel movmskps eax, xmm0
+0f50c0|11223344556677885f5f5f5f5f 64 plan9 MOVMSKPS X0, AX
+0f5111|223344556677885f5f5f5f5f5f 32 intel sqrtps xmm2, xmmword ptr [ecx]
+0f5111|223344556677885f5f5f5f5f5f 32 plan9 SQRTPS 0(CX), X2
+0f5111|223344556677885f5f5f5f5f5f 64 gnu sqrtps (%rcx),%xmm2
+0f5111|223344556677885f5f5f5f5f5f 64 intel sqrtps xmm2, xmmword ptr [rcx]
+0f5111|223344556677885f5f5f5f5f5f 64 plan9 SQRTPS 0(CX), X2
+0f5211|223344556677885f5f5f5f5f5f 32 intel rsqrtps xmm2, xmmword ptr [ecx]
+0f5211|223344556677885f5f5f5f5f5f 32 plan9 RSQRTPS 0(CX), X2
+0f5211|223344556677885f5f5f5f5f5f 64 gnu rsqrtps (%rcx),%xmm2
+0f5211|223344556677885f5f5f5f5f5f 64 intel rsqrtps xmm2, xmmword ptr [rcx]
+0f5211|223344556677885f5f5f5f5f5f 64 plan9 RSQRTPS 0(CX), X2
+0f5311|223344556677885f5f5f5f5f5f 32 intel rcpps xmm2, xmmword ptr [ecx]
+0f5311|223344556677885f5f5f5f5f5f 32 plan9 RCPPS 0(CX), X2
+0f5311|223344556677885f5f5f5f5f5f 64 gnu rcpps (%rcx),%xmm2
+0f5311|223344556677885f5f5f5f5f5f 64 intel rcpps xmm2, xmmword ptr [rcx]
+0f5311|223344556677885f5f5f5f5f5f 64 plan9 RCPPS 0(CX), X2
+0f5411|223344556677885f5f5f5f5f5f 32 intel andps xmm2, xmmword ptr [ecx]
+0f5411|223344556677885f5f5f5f5f5f 32 plan9 ANDPS 0(CX), X2
+0f5411|223344556677885f5f5f5f5f5f 64 gnu andps (%rcx),%xmm2
+0f5411|223344556677885f5f5f5f5f5f 64 intel andps xmm2, xmmword ptr [rcx]
+0f5411|223344556677885f5f5f5f5f5f 64 plan9 ANDPS 0(CX), X2
+0f5511|223344556677885f5f5f5f5f5f 32 intel andnps xmm2, xmmword ptr [ecx]
+0f5511|223344556677885f5f5f5f5f5f 32 plan9 ANDNPS 0(CX), X2
+0f5511|223344556677885f5f5f5f5f5f 64 gnu andnps (%rcx),%xmm2
+0f5511|223344556677885f5f5f5f5f5f 64 intel andnps xmm2, xmmword ptr [rcx]
+0f5511|223344556677885f5f5f5f5f5f 64 plan9 ANDNPS 0(CX), X2
+0f5611|223344556677885f5f5f5f5f5f 32 intel orps xmm2, xmmword ptr [ecx]
+0f5611|223344556677885f5f5f5f5f5f 32 plan9 ORPS 0(CX), X2
+0f5611|223344556677885f5f5f5f5f5f 64 gnu orps (%rcx),%xmm2
+0f5611|223344556677885f5f5f5f5f5f 64 intel orps xmm2, xmmword ptr [rcx]
+0f5611|223344556677885f5f5f5f5f5f 64 plan9 ORPS 0(CX), X2
+0f5711|223344556677885f5f5f5f5f5f 32 intel xorps xmm2, xmmword ptr [ecx]
+0f5711|223344556677885f5f5f5f5f5f 32 plan9 XORPS 0(CX), X2
+0f5711|223344556677885f5f5f5f5f5f 64 gnu xorps (%rcx),%xmm2
+0f5711|223344556677885f5f5f5f5f5f 64 intel xorps xmm2, xmmword ptr [rcx]
+0f5711|223344556677885f5f5f5f5f5f 64 plan9 XORPS 0(CX), X2
+0f5811|223344556677885f5f5f5f5f5f 32 intel addps xmm2, xmmword ptr [ecx]
+0f5811|223344556677885f5f5f5f5f5f 32 plan9 ADDPS 0(CX), X2
+0f5811|223344556677885f5f5f5f5f5f 64 gnu addps (%rcx),%xmm2
+0f5811|223344556677885f5f5f5f5f5f 64 intel addps xmm2, xmmword ptr [rcx]
+0f5811|223344556677885f5f5f5f5f5f 64 plan9 ADDPS 0(CX), X2
+0f5911|223344556677885f5f5f5f5f5f 32 intel mulps xmm2, xmmword ptr [ecx]
+0f5911|223344556677885f5f5f5f5f5f 32 plan9 MULPS 0(CX), X2
+0f5911|223344556677885f5f5f5f5f5f 64 gnu mulps (%rcx),%xmm2
+0f5911|223344556677885f5f5f5f5f5f 64 intel mulps xmm2, xmmword ptr [rcx]
+0f5911|223344556677885f5f5f5f5f5f 64 plan9 MULPS 0(CX), X2
+0f5a11|223344556677885f5f5f5f5f5f 32 intel cvtps2pd xmm2, qword ptr [ecx]
+0f5a11|223344556677885f5f5f5f5f5f 32 plan9 CVTPS2PD 0(CX), X2
+0f5a11|223344556677885f5f5f5f5f5f 64 gnu cvtps2pd (%rcx),%xmm2
+0f5a11|223344556677885f5f5f5f5f5f 64 intel cvtps2pd xmm2, qword ptr [rcx]
+0f5a11|223344556677885f5f5f5f5f5f 64 plan9 CVTPS2PD 0(CX), X2
+0f5b11|223344556677885f5f5f5f5f5f 32 intel cvtdq2ps xmm2, xmmword ptr [ecx]
+0f5b11|223344556677885f5f5f5f5f5f 32 plan9 CVTDQ2PS 0(CX), X2
+0f5b11|223344556677885f5f5f5f5f5f 64 gnu cvtdq2ps (%rcx),%xmm2
+0f5b11|223344556677885f5f5f5f5f5f 64 intel cvtdq2ps xmm2, xmmword ptr [rcx]
+0f5b11|223344556677885f5f5f5f5f5f 64 plan9 CVTDQ2PS 0(CX), X2
+0f5c11|223344556677885f5f5f5f5f5f 32 intel subps xmm2, xmmword ptr [ecx]
+0f5c11|223344556677885f5f5f5f5f5f 32 plan9 SUBPS 0(CX), X2
+0f5c11|223344556677885f5f5f5f5f5f 64 gnu subps (%rcx),%xmm2
+0f5c11|223344556677885f5f5f5f5f5f 64 intel subps xmm2, xmmword ptr [rcx]
+0f5c11|223344556677885f5f5f5f5f5f 64 plan9 SUBPS 0(CX), X2
+0f5d11|223344556677885f5f5f5f5f5f 32 intel minps xmm2, xmmword ptr [ecx]
+0f5d11|223344556677885f5f5f5f5f5f 32 plan9 MINPS 0(CX), X2
+0f5d11|223344556677885f5f5f5f5f5f 64 gnu minps (%rcx),%xmm2
+0f5d11|223344556677885f5f5f5f5f5f 64 intel minps xmm2, xmmword ptr [rcx]
+0f5d11|223344556677885f5f5f5f5f5f 64 plan9 MINPS 0(CX), X2
+0f5e11|223344556677885f5f5f5f5f5f 32 intel divps xmm2, xmmword ptr [ecx]
+0f5e11|223344556677885f5f5f5f5f5f 32 plan9 DIVPS 0(CX), X2
+0f5e11|223344556677885f5f5f5f5f5f 64 gnu divps (%rcx),%xmm2
+0f5e11|223344556677885f5f5f5f5f5f 64 intel divps xmm2, xmmword ptr [rcx]
+0f5e11|223344556677885f5f5f5f5f5f 64 plan9 DIVPS 0(CX), X2
+0f5f11|223344556677885f5f5f5f5f5f 32 intel maxps xmm2, xmmword ptr [ecx]
+0f5f11|223344556677885f5f5f5f5f5f 32 plan9 MAXPS 0(CX), X2
+0f5f11|223344556677885f5f5f5f5f5f 64 gnu maxps (%rcx),%xmm2
+0f5f11|223344556677885f5f5f5f5f5f 64 intel maxps xmm2, xmmword ptr [rcx]
+0f5f11|223344556677885f5f5f5f5f5f 64 plan9 MAXPS 0(CX), X2
+0f6011|223344556677885f5f5f5f5f5f 32 intel punpcklbw mmx2, dword ptr [ecx]
+0f6011|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKLBW 0(CX), M2
+0f6011|223344556677885f5f5f5f5f5f 64 gnu punpcklbw (%rcx),%mm2
+0f6011|223344556677885f5f5f5f5f5f 64 intel punpcklbw mmx2, dword ptr [rcx]
+0f6011|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKLBW 0(CX), M2
+0f6111|223344556677885f5f5f5f5f5f 32 intel punpcklwd mmx2, dword ptr [ecx]
+0f6111|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKLWD 0(CX), M2
+0f6111|223344556677885f5f5f5f5f5f 64 gnu punpcklwd (%rcx),%mm2
+0f6111|223344556677885f5f5f5f5f5f 64 intel punpcklwd mmx2, dword ptr [rcx]
+0f6111|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKLWD 0(CX), M2
+0f6211|223344556677885f5f5f5f5f5f 32 intel punpckldq mmx2, dword ptr [ecx]
+0f6211|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKLDQ 0(CX), M2
+0f6211|223344556677885f5f5f5f5f5f 64 gnu punpckldq (%rcx),%mm2
+0f6211|223344556677885f5f5f5f5f5f 64 intel punpckldq mmx2, dword ptr [rcx]
+0f6211|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKLDQ 0(CX), M2
+0f6311|223344556677885f5f5f5f5f5f 32 intel packsswb mmx2, qword ptr [ecx]
+0f6311|223344556677885f5f5f5f5f5f 32 plan9 PACKSSWB 0(CX), M2
+0f6311|223344556677885f5f5f5f5f5f 64 gnu packsswb (%rcx),%mm2
+0f6311|223344556677885f5f5f5f5f5f 64 intel packsswb mmx2, qword ptr [rcx]
+0f6311|223344556677885f5f5f5f5f5f 64 plan9 PACKSSWB 0(CX), M2
+0f6411|223344556677885f5f5f5f5f5f 32 intel pcmpgtb mmx2, qword ptr [ecx]
+0f6411|223344556677885f5f5f5f5f5f 32 plan9 PCMPGTB 0(CX), M2
+0f6411|223344556677885f5f5f5f5f5f 64 gnu pcmpgtb (%rcx),%mm2
+0f6411|223344556677885f5f5f5f5f5f 64 intel pcmpgtb mmx2, qword ptr [rcx]
+0f6411|223344556677885f5f5f5f5f5f 64 plan9 PCMPGTB 0(CX), M2
+0f6511|223344556677885f5f5f5f5f5f 32 intel pcmpgtw mmx2, qword ptr [ecx]
+0f6511|223344556677885f5f5f5f5f5f 32 plan9 PCMPGTW 0(CX), M2
+0f6511|223344556677885f5f5f5f5f5f 64 gnu pcmpgtw (%rcx),%mm2
+0f6511|223344556677885f5f5f5f5f5f 64 intel pcmpgtw mmx2, qword ptr [rcx]
+0f6511|223344556677885f5f5f5f5f5f 64 plan9 PCMPGTW 0(CX), M2
+0f6611|223344556677885f5f5f5f5f5f 32 intel pcmpgtd mmx2, qword ptr [ecx]
+0f6611|223344556677885f5f5f5f5f5f 32 plan9 PCMPGTD 0(CX), M2
+0f6611|223344556677885f5f5f5f5f5f 64 gnu pcmpgtd (%rcx),%mm2
+0f6611|223344556677885f5f5f5f5f5f 64 intel pcmpgtd mmx2, qword ptr [rcx]
+0f6611|223344556677885f5f5f5f5f5f 64 plan9 PCMPGTD 0(CX), M2
+0f6711|223344556677885f5f5f5f5f5f 32 intel packuswb mmx2, qword ptr [ecx]
+0f6711|223344556677885f5f5f5f5f5f 32 plan9 PACKUSWB 0(CX), M2
+0f6711|223344556677885f5f5f5f5f5f 64 gnu packuswb (%rcx),%mm2
+0f6711|223344556677885f5f5f5f5f5f 64 intel packuswb mmx2, qword ptr [rcx]
+0f6711|223344556677885f5f5f5f5f5f 64 plan9 PACKUSWB 0(CX), M2
+0f6811|223344556677885f5f5f5f5f5f 32 intel punpckhbw mmx2, qword ptr [ecx]
+0f6811|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKHBW 0(CX), M2
+0f6811|223344556677885f5f5f5f5f5f 64 gnu punpckhbw (%rcx),%mm2
+0f6811|223344556677885f5f5f5f5f5f 64 intel punpckhbw mmx2, qword ptr [rcx]
+0f6811|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKHBW 0(CX), M2
+0f6911|223344556677885f5f5f5f5f5f 32 intel punpckhwd mmx2, qword ptr [ecx]
+0f6911|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKHWD 0(CX), M2
+0f6911|223344556677885f5f5f5f5f5f 64 gnu punpckhwd (%rcx),%mm2
+0f6911|223344556677885f5f5f5f5f5f 64 intel punpckhwd mmx2, qword ptr [rcx]
+0f6911|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKHWD 0(CX), M2
+0f6a11|223344556677885f5f5f5f5f5f 32 intel punpckhdq mmx2, qword ptr [ecx]
+0f6a11|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKHDQ 0(CX), M2
+0f6a11|223344556677885f5f5f5f5f5f 64 gnu punpckhdq (%rcx),%mm2
+0f6a11|223344556677885f5f5f5f5f5f 64 intel punpckhdq mmx2, qword ptr [rcx]
+0f6a11|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKHDQ 0(CX), M2
+0f6b11|223344556677885f5f5f5f5f5f 32 intel packssdw mmx2, qword ptr [ecx]
+0f6b11|223344556677885f5f5f5f5f5f 32 plan9 PACKSSDW 0(CX), M2
+0f6b11|223344556677885f5f5f5f5f5f 64 gnu packssdw (%rcx),%mm2
+0f6b11|223344556677885f5f5f5f5f5f 64 intel packssdw mmx2, qword ptr [rcx]
+0f6b11|223344556677885f5f5f5f5f5f 64 plan9 PACKSSDW 0(CX), M2
+0f6c|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f6c|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f6c|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f6c|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f6c|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f6d|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f6d|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f6d|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f6d|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f6d|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f6e11|223344556677885f5f5f5f5f5f 32 intel movd mmx2, dword ptr [ecx]
+0f6e11|223344556677885f5f5f5f5f5f 32 plan9 MOVD 0(CX), M2
+0f6e11|223344556677885f5f5f5f5f5f 64 gnu movd (%rcx),%mm2
+0f6e11|223344556677885f5f5f5f5f5f 64 intel movd mmx2, dword ptr [rcx]
+0f6e11|223344556677885f5f5f5f5f5f 64 plan9 MOVD 0(CX), M2
+0f6f11|223344556677885f5f5f5f5f5f 32 intel movq mmx2, qword ptr [ecx]
+0f6f11|223344556677885f5f5f5f5f5f 32 plan9 MOVQ 0(CX), M2
+0f6f11|223344556677885f5f5f5f5f5f 64 gnu movq (%rcx),%mm2
+0f6f11|223344556677885f5f5f5f5f5f 64 intel movq mmx2, qword ptr [rcx]
+0f6f11|223344556677885f5f5f5f5f5f 64 plan9 MOVQ 0(CX), M2
+0f701122|3344556677885f5f5f5f5f5f 32 intel pshufw mmx2, qword ptr [ecx], 0x22
+0f701122|3344556677885f5f5f5f5f5f 32 plan9 PSHUFW $0x22, 0(CX), M2
+0f701122|3344556677885f5f5f5f5f5f 64 gnu pshufw $0x22,(%rcx),%mm2
+0f701122|3344556677885f5f5f5f5f5f 64 intel pshufw mmx2, qword ptr [rcx], 0x22
+0f701122|3344556677885f5f5f5f5f5f 64 plan9 PSHUFW $0x22, 0(CX), M2
+0f7100|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f7100|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f7100|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f7100|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f7100|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f711122|3344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f711122|3344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f711122|3344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f711122|3344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f711122|3344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f712011|223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f712011|223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f712011|223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f712011|223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f712011|223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f713011|223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f713011|223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f713011|223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f713011|223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f713011|223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f71d011|223344556677885f5f5f5f5f 32 intel psrlw mmx0, 0x11
+0f71d011|223344556677885f5f5f5f5f 32 plan9 PSRLW $0x11, M0
+0f71d011|223344556677885f5f5f5f5f 64 gnu psrlw $0x11,%mm0
+0f71d011|223344556677885f5f5f5f5f 64 intel psrlw mmx0, 0x11
+0f71d011|223344556677885f5f5f5f5f 64 plan9 PSRLW $0x11, M0
+0f71e011|223344556677885f5f5f5f5f 32 intel psraw mmx0, 0x11
+0f71e011|223344556677885f5f5f5f5f 32 plan9 PSRAW $0x11, M0
+0f71e011|223344556677885f5f5f5f5f 64 gnu psraw $0x11,%mm0
+0f71e011|223344556677885f5f5f5f5f 64 intel psraw mmx0, 0x11
+0f71e011|223344556677885f5f5f5f5f 64 plan9 PSRAW $0x11, M0
+0f71f011|223344556677885f5f5f5f5f 32 intel psllw mmx0, 0x11
+0f71f011|223344556677885f5f5f5f5f 32 plan9 PSLLW $0x11, M0
+0f71f011|223344556677885f5f5f5f5f 64 gnu psllw $0x11,%mm0
+0f71f011|223344556677885f5f5f5f5f 64 intel psllw mmx0, 0x11
+0f71f011|223344556677885f5f5f5f5f 64 plan9 PSLLW $0x11, M0
+0f7200|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f7200|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f7200|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f7200|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f7200|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f721122|3344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f721122|3344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f721122|3344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f721122|3344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f721122|3344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f722011|223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f722011|223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f722011|223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f722011|223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f722011|223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f723011|223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f723011|223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f723011|223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f723011|223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f723011|223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f72d011|223344556677885f5f5f5f5f 32 intel psrld mmx0, 0x11
+0f72d011|223344556677885f5f5f5f5f 32 plan9 PSRLD $0x11, M0
+0f72d011|223344556677885f5f5f5f5f 64 gnu psrld $0x11,%mm0
+0f72d011|223344556677885f5f5f5f5f 64 intel psrld mmx0, 0x11
+0f72d011|223344556677885f5f5f5f5f 64 plan9 PSRLD $0x11, M0
+0f72e011|223344556677885f5f5f5f5f 32 intel psrad mmx0, 0x11
+0f72e011|223344556677885f5f5f5f5f 32 plan9 PSRAD $0x11, M0
+0f72e011|223344556677885f5f5f5f5f 64 gnu psrad $0x11,%mm0
+0f72e011|223344556677885f5f5f5f5f 64 intel psrad mmx0, 0x11
+0f72e011|223344556677885f5f5f5f5f 64 plan9 PSRAD $0x11, M0
+0f72f011|223344556677885f5f5f5f5f 32 intel pslld mmx0, 0x11
+0f72f011|223344556677885f5f5f5f5f 32 plan9 PSLLD $0x11, M0
+0f72f011|223344556677885f5f5f5f5f 64 gnu pslld $0x11,%mm0
+0f72f011|223344556677885f5f5f5f5f 64 intel pslld mmx0, 0x11
+0f72f011|223344556677885f5f5f5f5f 64 plan9 PSLLD $0x11, M0
+0f7300|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f7300|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f7300|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f7300|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f7300|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f731122|3344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f731122|3344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f731122|3344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f731122|3344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f731122|3344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f7318|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f7318|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f7318|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f7318|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f7318|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f733011|223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f733011|223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f733011|223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f733011|223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f733011|223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f7338|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0f7338|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f7338|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0f7338|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0f7338|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f73d011|223344556677885f5f5f5f5f 32 intel psrlq mmx0, 0x11
+0f73d011|223344556677885f5f5f5f5f 32 plan9 PSRLQ $0x11, M0
+0f73d011|223344556677885f5f5f5f5f 64 gnu psrlq $0x11,%mm0
+0f73d011|223344556677885f5f5f5f5f 64 intel psrlq mmx0, 0x11
+0f73d011|223344556677885f5f5f5f5f 64 plan9 PSRLQ $0x11, M0
+0f73f011|223344556677885f5f5f5f5f 32 intel psllq mmx0, 0x11
+0f73f011|223344556677885f5f5f5f5f 32 plan9 PSLLQ $0x11, M0
+0f73f011|223344556677885f5f5f5f5f 64 gnu psllq $0x11,%mm0
+0f73f011|223344556677885f5f5f5f5f 64 intel psllq mmx0, 0x11
+0f73f011|223344556677885f5f5f5f5f 64 plan9 PSLLQ $0x11, M0
+0f7411|223344556677885f5f5f5f5f5f 32 intel pcmpeqb mmx2, qword ptr [ecx]
+0f7411|223344556677885f5f5f5f5f5f 32 plan9 PCMPEQB 0(CX), M2
+0f7411|223344556677885f5f5f5f5f5f 64 gnu pcmpeqb (%rcx),%mm2
+0f7411|223344556677885f5f5f5f5f5f 64 intel pcmpeqb mmx2, qword ptr [rcx]
+0f7411|223344556677885f5f5f5f5f5f 64 plan9 PCMPEQB 0(CX), M2
+0f7511|223344556677885f5f5f5f5f5f 32 intel pcmpeqw mmx2, qword ptr [ecx]
+0f7511|223344556677885f5f5f5f5f5f 32 plan9 PCMPEQW 0(CX), M2
+0f7511|223344556677885f5f5f5f5f5f 64 gnu pcmpeqw (%rcx),%mm2
+0f7511|223344556677885f5f5f5f5f5f 64 intel pcmpeqw mmx2, qword ptr [rcx]
+0f7511|223344556677885f5f5f5f5f5f 64 plan9 PCMPEQW 0(CX), M2
+0f7611|223344556677885f5f5f5f5f5f 32 intel pcmpeqd mmx2, qword ptr [ecx]
+0f7611|223344556677885f5f5f5f5f5f 32 plan9 PCMPEQD 0(CX), M2
+0f7611|223344556677885f5f5f5f5f5f 64 gnu pcmpeqd (%rcx),%mm2
+0f7611|223344556677885f5f5f5f5f5f 64 intel pcmpeqd mmx2, qword ptr [rcx]
+0f7611|223344556677885f5f5f5f5f5f 64 plan9 PCMPEQD 0(CX), M2
+0f77|11223344556677885f5f5f5f5f5f 32 intel emms
+0f77|11223344556677885f5f5f5f5f5f 32 plan9 EMMS
+0f77|11223344556677885f5f5f5f5f5f 64 gnu emms
+0f77|11223344556677885f5f5f5f5f5f 64 intel emms
+0f77|11223344556677885f5f5f5f5f5f 64 plan9 EMMS
+0f7c|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f7c|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f7c|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f7c|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f7c|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f7d|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0f7d|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0f7d|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0f7d|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0f7d|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0f7e11|223344556677885f5f5f5f5f5f 32 intel movd dword ptr [ecx], mmx2
+0f7e11|223344556677885f5f5f5f5f5f 32 plan9 MOVD M2, 0(CX)
+0f7e11|223344556677885f5f5f5f5f5f 64 gnu movd %mm2,(%rcx)
+0f7e11|223344556677885f5f5f5f5f5f 64 intel movd dword ptr [rcx], mmx2
+0f7e11|223344556677885f5f5f5f5f5f 64 plan9 MOVD M2, 0(CX)
+0f7f11|223344556677885f5f5f5f5f5f 32 intel movq qword ptr [ecx], mmx2
+0f7f11|223344556677885f5f5f5f5f5f 32 plan9 MOVQ M2, 0(CX)
+0f7f11|223344556677885f5f5f5f5f5f 64 gnu movq %mm2,(%rcx)
+0f7f11|223344556677885f5f5f5f5f5f 64 intel movq qword ptr [rcx], mmx2
+0f7f11|223344556677885f5f5f5f5f5f 64 plan9 MOVQ M2, 0(CX)
+0f8011223344|556677885f5f5f5f5f5f 32 intel jo .+0x44332211
+0f8011223344|556677885f5f5f5f5f5f 32 plan9 JO .+1144201745
+0f8011223344|556677885f5f5f5f5f5f 64 gnu jo .+0x44332211
+0f8011223344|556677885f5f5f5f5f5f 64 intel jo .+0x44332211
+0f8011223344|556677885f5f5f5f5f5f 64 plan9 JO .+1144201745
+0f8111223344|556677885f5f5f5f5f5f 32 intel jno .+0x44332211
+0f8111223344|556677885f5f5f5f5f5f 32 plan9 JNO .+1144201745
+0f8111223344|556677885f5f5f5f5f5f 64 gnu jno .+0x44332211
+0f8111223344|556677885f5f5f5f5f5f 64 intel jno .+0x44332211
+0f8111223344|556677885f5f5f5f5f5f 64 plan9 JNO .+1144201745
+0f8211223344|556677885f5f5f5f5f5f 32 intel jb .+0x44332211
+0f8211223344|556677885f5f5f5f5f5f 32 plan9 JB .+1144201745
+0f8211223344|556677885f5f5f5f5f5f 64 gnu jb .+0x44332211
+0f8211223344|556677885f5f5f5f5f5f 64 intel jb .+0x44332211
+0f8211223344|556677885f5f5f5f5f5f 64 plan9 JB .+1144201745
+0f8311223344|556677885f5f5f5f5f5f 32 intel jnb .+0x44332211
+0f8311223344|556677885f5f5f5f5f5f 32 plan9 JAE .+1144201745
+0f8311223344|556677885f5f5f5f5f5f 64 gnu jae .+0x44332211
+0f8311223344|556677885f5f5f5f5f5f 64 intel jnb .+0x44332211
+0f8311223344|556677885f5f5f5f5f5f 64 plan9 JAE .+1144201745
+0f8411223344|556677885f5f5f5f5f5f 32 intel jz .+0x44332211
+0f8411223344|556677885f5f5f5f5f5f 32 plan9 JE .+1144201745
+0f8411223344|556677885f5f5f5f5f5f 64 gnu je .+0x44332211
+0f8411223344|556677885f5f5f5f5f5f 64 intel jz .+0x44332211
+0f8411223344|556677885f5f5f5f5f5f 64 plan9 JE .+1144201745
+0f8511223344|556677885f5f5f5f5f5f 32 intel jnz .+0x44332211
+0f8511223344|556677885f5f5f5f5f5f 32 plan9 JNE .+1144201745
+0f8511223344|556677885f5f5f5f5f5f 64 gnu jne .+0x44332211
+0f8511223344|556677885f5f5f5f5f5f 64 intel jnz .+0x44332211
+0f8511223344|556677885f5f5f5f5f5f 64 plan9 JNE .+1144201745
+0f8611223344|556677885f5f5f5f5f5f 32 intel jbe .+0x44332211
+0f8611223344|556677885f5f5f5f5f5f 32 plan9 JBE .+1144201745
+0f8611223344|556677885f5f5f5f5f5f 64 gnu jbe .+0x44332211
+0f8611223344|556677885f5f5f5f5f5f 64 intel jbe .+0x44332211
+0f8611223344|556677885f5f5f5f5f5f 64 plan9 JBE .+1144201745
+0f8711223344|556677885f5f5f5f5f5f 32 intel jnbe .+0x44332211
+0f8711223344|556677885f5f5f5f5f5f 32 plan9 JA .+1144201745
+0f8711223344|556677885f5f5f5f5f5f 64 gnu ja .+0x44332211
+0f8711223344|556677885f5f5f5f5f5f 64 intel jnbe .+0x44332211
+0f8711223344|556677885f5f5f5f5f5f 64 plan9 JA .+1144201745
+0f8811223344|556677885f5f5f5f5f5f 32 intel js .+0x44332211
+0f8811223344|556677885f5f5f5f5f5f 32 plan9 JS .+1144201745
+0f8811223344|556677885f5f5f5f5f5f 64 gnu js .+0x44332211
+0f8811223344|556677885f5f5f5f5f5f 64 intel js .+0x44332211
+0f8811223344|556677885f5f5f5f5f5f 64 plan9 JS .+1144201745
+0f8911223344|556677885f5f5f5f5f5f 32 intel jns .+0x44332211
+0f8911223344|556677885f5f5f5f5f5f 32 plan9 JNS .+1144201745
+0f8911223344|556677885f5f5f5f5f5f 64 gnu jns .+0x44332211
+0f8911223344|556677885f5f5f5f5f5f 64 intel jns .+0x44332211
+0f8911223344|556677885f5f5f5f5f5f 64 plan9 JNS .+1144201745
+0f8a11223344|556677885f5f5f5f5f5f 32 intel jp .+0x44332211
+0f8a11223344|556677885f5f5f5f5f5f 32 plan9 JP .+1144201745
+0f8a11223344|556677885f5f5f5f5f5f 64 gnu jp .+0x44332211
+0f8a11223344|556677885f5f5f5f5f5f 64 intel jp .+0x44332211
+0f8a11223344|556677885f5f5f5f5f5f 64 plan9 JP .+1144201745
+0f8b11223344|556677885f5f5f5f5f5f 32 intel jnp .+0x44332211
+0f8b11223344|556677885f5f5f5f5f5f 32 plan9 JNP .+1144201745
+0f8b11223344|556677885f5f5f5f5f5f 64 gnu jnp .+0x44332211
+0f8b11223344|556677885f5f5f5f5f5f 64 intel jnp .+0x44332211
+0f8b11223344|556677885f5f5f5f5f5f 64 plan9 JNP .+1144201745
+0f8c11223344|556677885f5f5f5f5f5f 32 intel jl .+0x44332211
+0f8c11223344|556677885f5f5f5f5f5f 32 plan9 JL .+1144201745
+0f8c11223344|556677885f5f5f5f5f5f 64 gnu jl .+0x44332211
+0f8c11223344|556677885f5f5f5f5f5f 64 intel jl .+0x44332211
+0f8c11223344|556677885f5f5f5f5f5f 64 plan9 JL .+1144201745
+0f8d11223344|556677885f5f5f5f5f5f 32 intel jnl .+0x44332211
+0f8d11223344|556677885f5f5f5f5f5f 32 plan9 JGE .+1144201745
+0f8d11223344|556677885f5f5f5f5f5f 64 gnu jge .+0x44332211
+0f8d11223344|556677885f5f5f5f5f5f 64 intel jnl .+0x44332211
+0f8d11223344|556677885f5f5f5f5f5f 64 plan9 JGE .+1144201745
+0f8e11223344|556677885f5f5f5f5f5f 32 intel jle .+0x44332211
+0f8e11223344|556677885f5f5f5f5f5f 32 plan9 JLE .+1144201745
+0f8e11223344|556677885f5f5f5f5f5f 64 gnu jle .+0x44332211
+0f8e11223344|556677885f5f5f5f5f5f 64 intel jle .+0x44332211
+0f8e11223344|556677885f5f5f5f5f5f 64 plan9 JLE .+1144201745
+0f8f11223344|556677885f5f5f5f5f5f 32 intel jnle .+0x44332211
+0f8f11223344|556677885f5f5f5f5f5f 32 plan9 JG .+1144201745
+0f8f11223344|556677885f5f5f5f5f5f 64 gnu jg .+0x44332211
+0f8f11223344|556677885f5f5f5f5f5f 64 intel jnle .+0x44332211
+0f8f11223344|556677885f5f5f5f5f5f 64 plan9 JG .+1144201745
+0f9011|223344556677885f5f5f5f5f5f 32 intel seto byte ptr [ecx]
+0f9011|223344556677885f5f5f5f5f5f 32 plan9 SETO 0(CX)
+0f9011|223344556677885f5f5f5f5f5f 64 gnu seto (%rcx)
+0f9011|223344556677885f5f5f5f5f5f 64 intel seto byte ptr [rcx]
+0f9011|223344556677885f5f5f5f5f5f 64 plan9 SETO 0(CX)
+0f9111|223344556677885f5f5f5f5f5f 32 intel setno byte ptr [ecx]
+0f9111|223344556677885f5f5f5f5f5f 32 plan9 SETNO 0(CX)
+0f9111|223344556677885f5f5f5f5f5f 64 gnu setno (%rcx)
+0f9111|223344556677885f5f5f5f5f5f 64 intel setno byte ptr [rcx]
+0f9111|223344556677885f5f5f5f5f5f 64 plan9 SETNO 0(CX)
+0f9211|223344556677885f5f5f5f5f5f 32 intel setb byte ptr [ecx]
+0f9211|223344556677885f5f5f5f5f5f 32 plan9 SETB 0(CX)
+0f9211|223344556677885f5f5f5f5f5f 64 gnu setb (%rcx)
+0f9211|223344556677885f5f5f5f5f5f 64 intel setb byte ptr [rcx]
+0f9211|223344556677885f5f5f5f5f5f 64 plan9 SETB 0(CX)
+0f9311|223344556677885f5f5f5f5f5f 32 intel setnb byte ptr [ecx]
+0f9311|223344556677885f5f5f5f5f5f 32 plan9 SETAE 0(CX)
+0f9311|223344556677885f5f5f5f5f5f 64 gnu setae (%rcx)
+0f9311|223344556677885f5f5f5f5f5f 64 intel setnb byte ptr [rcx]
+0f9311|223344556677885f5f5f5f5f5f 64 plan9 SETAE 0(CX)
+0f9411|223344556677885f5f5f5f5f5f 32 intel setz byte ptr [ecx]
+0f9411|223344556677885f5f5f5f5f5f 32 plan9 SETE 0(CX)
+0f9411|223344556677885f5f5f5f5f5f 64 gnu sete (%rcx)
+0f9411|223344556677885f5f5f5f5f5f 64 intel setz byte ptr [rcx]
+0f9411|223344556677885f5f5f5f5f5f 64 plan9 SETE 0(CX)
+0f9511|223344556677885f5f5f5f5f5f 32 intel setnz byte ptr [ecx]
+0f9511|223344556677885f5f5f5f5f5f 32 plan9 SETNE 0(CX)
+0f9511|223344556677885f5f5f5f5f5f 64 gnu setne (%rcx)
+0f9511|223344556677885f5f5f5f5f5f 64 intel setnz byte ptr [rcx]
+0f9511|223344556677885f5f5f5f5f5f 64 plan9 SETNE 0(CX)
+0f9611|223344556677885f5f5f5f5f5f 32 intel setbe byte ptr [ecx]
+0f9611|223344556677885f5f5f5f5f5f 32 plan9 SETBE 0(CX)
+0f9611|223344556677885f5f5f5f5f5f 64 gnu setbe (%rcx)
+0f9611|223344556677885f5f5f5f5f5f 64 intel setbe byte ptr [rcx]
+0f9611|223344556677885f5f5f5f5f5f 64 plan9 SETBE 0(CX)
+0f9711|223344556677885f5f5f5f5f5f 32 intel setnbe byte ptr [ecx]
+0f9711|223344556677885f5f5f5f5f5f 32 plan9 SETA 0(CX)
+0f9711|223344556677885f5f5f5f5f5f 64 gnu seta (%rcx)
+0f9711|223344556677885f5f5f5f5f5f 64 intel setnbe byte ptr [rcx]
+0f9711|223344556677885f5f5f5f5f5f 64 plan9 SETA 0(CX)
+0f9811|223344556677885f5f5f5f5f5f 32 intel sets byte ptr [ecx]
+0f9811|223344556677885f5f5f5f5f5f 32 plan9 SETS 0(CX)
+0f9811|223344556677885f5f5f5f5f5f 64 gnu sets (%rcx)
+0f9811|223344556677885f5f5f5f5f5f 64 intel sets byte ptr [rcx]
+0f9811|223344556677885f5f5f5f5f5f 64 plan9 SETS 0(CX)
+0f9911|223344556677885f5f5f5f5f5f 32 intel setns byte ptr [ecx]
+0f9911|223344556677885f5f5f5f5f5f 32 plan9 SETNS 0(CX)
+0f9911|223344556677885f5f5f5f5f5f 64 gnu setns (%rcx)
+0f9911|223344556677885f5f5f5f5f5f 64 intel setns byte ptr [rcx]
+0f9911|223344556677885f5f5f5f5f5f 64 plan9 SETNS 0(CX)
+0f9a11|223344556677885f5f5f5f5f5f 32 intel setp byte ptr [ecx]
+0f9a11|223344556677885f5f5f5f5f5f 32 plan9 SETP 0(CX)
+0f9a11|223344556677885f5f5f5f5f5f 64 gnu setp (%rcx)
+0f9a11|223344556677885f5f5f5f5f5f 64 intel setp byte ptr [rcx]
+0f9a11|223344556677885f5f5f5f5f5f 64 plan9 SETP 0(CX)
+0f9b11|223344556677885f5f5f5f5f5f 32 intel setnp byte ptr [ecx]
+0f9b11|223344556677885f5f5f5f5f5f 32 plan9 SETNP 0(CX)
+0f9b11|223344556677885f5f5f5f5f5f 64 gnu setnp (%rcx)
+0f9b11|223344556677885f5f5f5f5f5f 64 intel setnp byte ptr [rcx]
+0f9b11|223344556677885f5f5f5f5f5f 64 plan9 SETNP 0(CX)
+0f9c11|223344556677885f5f5f5f5f5f 32 intel setl byte ptr [ecx]
+0f9c11|223344556677885f5f5f5f5f5f 32 plan9 SETL 0(CX)
+0f9c11|223344556677885f5f5f5f5f5f 64 gnu setl (%rcx)
+0f9c11|223344556677885f5f5f5f5f5f 64 intel setl byte ptr [rcx]
+0f9c11|223344556677885f5f5f5f5f5f 64 plan9 SETL 0(CX)
+0f9d11|223344556677885f5f5f5f5f5f 32 intel setnl byte ptr [ecx]
+0f9d11|223344556677885f5f5f5f5f5f 32 plan9 SETGE 0(CX)
+0f9d11|223344556677885f5f5f5f5f5f 64 gnu setge (%rcx)
+0f9d11|223344556677885f5f5f5f5f5f 64 intel setnl byte ptr [rcx]
+0f9d11|223344556677885f5f5f5f5f5f 64 plan9 SETGE 0(CX)
+0f9e11|223344556677885f5f5f5f5f5f 32 intel setle byte ptr [ecx]
+0f9e11|223344556677885f5f5f5f5f5f 32 plan9 SETLE 0(CX)
+0f9e11|223344556677885f5f5f5f5f5f 64 gnu setle (%rcx)
+0f9e11|223344556677885f5f5f5f5f5f 64 intel setle byte ptr [rcx]
+0f9e11|223344556677885f5f5f5f5f5f 64 plan9 SETLE 0(CX)
+0f9f11|223344556677885f5f5f5f5f5f 32 intel setnle byte ptr [ecx]
+0f9f11|223344556677885f5f5f5f5f5f 32 plan9 SETG 0(CX)
+0f9f11|223344556677885f5f5f5f5f5f 64 gnu setg (%rcx)
+0f9f11|223344556677885f5f5f5f5f5f 64 intel setnle byte ptr [rcx]
+0f9f11|223344556677885f5f5f5f5f5f 64 plan9 SETG 0(CX)
+0fa0|11223344556677885f5f5f5f5f5f 32 intel push fs
+0fa0|11223344556677885f5f5f5f5f5f 32 plan9 PUSHL FS
+0fa0|11223344556677885f5f5f5f5f5f 64 gnu pushq %fs
+0fa0|11223344556677885f5f5f5f5f5f 64 intel push fs
+0fa0|11223344556677885f5f5f5f5f5f 64 plan9 PUSHL FS
+0fa1|11223344556677885f5f5f5f5f5f 32 intel pop fs
+0fa1|11223344556677885f5f5f5f5f5f 32 plan9 POPL FS
+0fa1|11223344556677885f5f5f5f5f5f 64 gnu popq %fs
+0fa1|11223344556677885f5f5f5f5f5f 64 intel pop fs
+0fa1|11223344556677885f5f5f5f5f5f 64 plan9 POPL FS
+0fa2|11223344556677885f5f5f5f5f5f 32 intel cpuid
+0fa2|11223344556677885f5f5f5f5f5f 32 plan9 CPUID
+0fa2|11223344556677885f5f5f5f5f5f 64 gnu cpuid
+0fa2|11223344556677885f5f5f5f5f5f 64 intel cpuid
+0fa2|11223344556677885f5f5f5f5f5f 64 plan9 CPUID
+0fa311|223344556677885f5f5f5f5f5f 32 intel bt dword ptr [ecx], edx
+0fa311|223344556677885f5f5f5f5f5f 32 plan9 BTL DX, 0(CX)
+0fa311|223344556677885f5f5f5f5f5f 64 gnu bt %edx,(%rcx)
+0fa311|223344556677885f5f5f5f5f5f 64 intel bt dword ptr [rcx], edx
+0fa311|223344556677885f5f5f5f5f5f 64 plan9 BTL DX, 0(CX)
+0fa41122|3344556677885f5f5f5f5f5f 32 intel shld dword ptr [ecx], edx, 0x22
+0fa41122|3344556677885f5f5f5f5f5f 32 plan9 SHLDL $0x22, DX, 0(CX)
+0fa41122|3344556677885f5f5f5f5f5f 64 gnu shld $0x22,%edx,(%rcx)
+0fa41122|3344556677885f5f5f5f5f5f 64 intel shld dword ptr [rcx], edx, 0x22
+0fa41122|3344556677885f5f5f5f5f5f 64 plan9 SHLDL $0x22, DX, 0(CX)
+0fa511|223344556677885f5f5f5f5f5f 32 intel shld dword ptr [ecx], edx, cl
+0fa511|223344556677885f5f5f5f5f5f 32 plan9 SHLDL CL, DX, 0(CX)
+0fa511|223344556677885f5f5f5f5f5f 64 gnu shld %cl,%edx,(%rcx)
+0fa511|223344556677885f5f5f5f5f5f 64 intel shld dword ptr [rcx], edx, cl
+0fa511|223344556677885f5f5f5f5f5f 64 plan9 SHLDL CL, DX, 0(CX)
+0fa8|11223344556677885f5f5f5f5f5f 32 intel push gs
+0fa8|11223344556677885f5f5f5f5f5f 32 plan9 PUSHL GS
+0fa8|11223344556677885f5f5f5f5f5f 64 gnu pushq %gs
+0fa8|11223344556677885f5f5f5f5f5f 64 intel push gs
+0fa8|11223344556677885f5f5f5f5f5f 64 plan9 PUSHL GS
+0fa9|11223344556677885f5f5f5f5f5f 32 intel pop gs
+0fa9|11223344556677885f5f5f5f5f5f 32 plan9 POPL GS
+0fa9|11223344556677885f5f5f5f5f5f 64 gnu popq %gs
+0fa9|11223344556677885f5f5f5f5f5f 64 intel pop gs
+0fa9|11223344556677885f5f5f5f5f5f 64 plan9 POPL GS
+0faa|11223344556677885f5f5f5f5f5f 32 intel rsm
+0faa|11223344556677885f5f5f5f5f5f 32 plan9 RSM
+0faa|11223344556677885f5f5f5f5f5f 64 gnu rsm
+0faa|11223344556677885f5f5f5f5f5f 64 intel rsm
+0faa|11223344556677885f5f5f5f5f5f 64 plan9 RSM
+0fab11|223344556677885f5f5f5f5f5f 32 intel bts dword ptr [ecx], edx
+0fab11|223344556677885f5f5f5f5f5f 32 plan9 BTSL DX, 0(CX)
+0fab11|223344556677885f5f5f5f5f5f 64 gnu bts %edx,(%rcx)
+0fab11|223344556677885f5f5f5f5f5f 64 intel bts dword ptr [rcx], edx
+0fab11|223344556677885f5f5f5f5f5f 64 plan9 BTSL DX, 0(CX)
+0fac1122|3344556677885f5f5f5f5f5f 32 intel shrd dword ptr [ecx], edx, 0x22
+0fac1122|3344556677885f5f5f5f5f5f 32 plan9 SHRDL $0x22, DX, 0(CX)
+0fac1122|3344556677885f5f5f5f5f5f 64 gnu shrd $0x22,%edx,(%rcx)
+0fac1122|3344556677885f5f5f5f5f5f 64 intel shrd dword ptr [rcx], edx, 0x22
+0fac1122|3344556677885f5f5f5f5f5f 64 plan9 SHRDL $0x22, DX, 0(CX)
+0fad11|223344556677885f5f5f5f5f5f 32 intel shrd dword ptr [ecx], edx, cl
+0fad11|223344556677885f5f5f5f5f5f 32 plan9 SHRDL CL, DX, 0(CX)
+0fad11|223344556677885f5f5f5f5f5f 64 gnu shrd %cl,%edx,(%rcx)
+0fad11|223344556677885f5f5f5f5f5f 64 intel shrd dword ptr [rcx], edx, cl
+0fad11|223344556677885f5f5f5f5f5f 64 plan9 SHRDL CL, DX, 0(CX)
+0fae00|11223344556677885f5f5f5f5f 32 intel fxsave ptr [eax]
+0fae00|11223344556677885f5f5f5f5f 32 plan9 FXSAVE 0(AX)
+0fae00|11223344556677885f5f5f5f5f 64 gnu fxsave (%rax)
+0fae00|11223344556677885f5f5f5f5f 64 intel fxsave ptr [rax]
+0fae00|11223344556677885f5f5f5f5f 64 plan9 FXSAVE 0(AX)
+0fae08|11223344556677885f5f5f5f5f 32 intel fxrstor ptr [eax]
+0fae08|11223344556677885f5f5f5f5f 32 plan9 FXRSTOR 0(AX)
+0fae08|11223344556677885f5f5f5f5f 64 gnu fxrstor (%rax)
+0fae08|11223344556677885f5f5f5f5f 64 intel fxrstor ptr [rax]
+0fae08|11223344556677885f5f5f5f5f 64 plan9 FXRSTOR 0(AX)
+0fae11|223344556677885f5f5f5f5f5f 32 intel ldmxcsr dword ptr [ecx]
+0fae11|223344556677885f5f5f5f5f5f 32 plan9 LDMXCSR 0(CX)
+0fae11|223344556677885f5f5f5f5f5f 64 gnu ldmxcsr (%rcx)
+0fae11|223344556677885f5f5f5f5f5f 64 intel ldmxcsr dword ptr [rcx]
+0fae11|223344556677885f5f5f5f5f5f 64 plan9 LDMXCSR 0(CX)
+0fae18|11223344556677885f5f5f5f5f 32 intel stmxcsr dword ptr [eax]
+0fae18|11223344556677885f5f5f5f5f 32 plan9 STMXCSR 0(AX)
+0fae18|11223344556677885f5f5f5f5f 64 gnu stmxcsr (%rax)
+0fae18|11223344556677885f5f5f5f5f 64 intel stmxcsr dword ptr [rax]
+0fae18|11223344556677885f5f5f5f5f 64 plan9 STMXCSR 0(AX)
+0fae20|11223344556677885f5f5f5f5f 32 intel xsave ptr [eax]
+0fae20|11223344556677885f5f5f5f5f 32 plan9 XSAVE 0(AX)
+0fae20|11223344556677885f5f5f5f5f 64 gnu xsave (%rax)
+0fae20|11223344556677885f5f5f5f5f 64 intel xsave ptr [rax]
+0fae20|11223344556677885f5f5f5f5f 64 plan9 XSAVE 0(AX)
+0fae28|11223344556677885f5f5f5f5f 32 intel xrstor ptr [eax]
+0fae28|11223344556677885f5f5f5f5f 32 plan9 XRSTOR 0(AX)
+0fae28|11223344556677885f5f5f5f5f 64 gnu xrstor (%rax)
+0fae28|11223344556677885f5f5f5f5f 64 intel xrstor ptr [rax]
+0fae28|11223344556677885f5f5f5f5f 64 plan9 XRSTOR 0(AX)
+0fae30|11223344556677885f5f5f5f5f 32 intel xsaveopt ptr [eax]
+0fae30|11223344556677885f5f5f5f5f 32 plan9 XSAVEOPT 0(AX)
+0fae30|11223344556677885f5f5f5f5f 64 gnu xsaveopt (%rax)
+0fae30|11223344556677885f5f5f5f5f 64 intel xsaveopt ptr [rax]
+0fae30|11223344556677885f5f5f5f5f 64 plan9 XSAVEOPT 0(AX)
+0fae38|11223344556677885f5f5f5f5f 32 intel clflush zmmword ptr [eax]
+0fae38|11223344556677885f5f5f5f5f 32 plan9 CLFLUSH 0(AX)
+0fae38|11223344556677885f5f5f5f5f 64 gnu clflush (%rax)
+0fae38|11223344556677885f5f5f5f5f 64 intel clflush zmmword ptr [rax]
+0fae38|11223344556677885f5f5f5f5f 64 plan9 CLFLUSH 0(AX)
+0faee8|11223344556677885f5f5f5f5f 32 intel lfence
+0faee8|11223344556677885f5f5f5f5f 32 plan9 LFENCE
+0faee8|11223344556677885f5f5f5f5f 64 gnu lfence
+0faee8|11223344556677885f5f5f5f5f 64 intel lfence
+0faee8|11223344556677885f5f5f5f5f 64 plan9 LFENCE
+0faef0|11223344556677885f5f5f5f5f 32 intel mfence
+0faef0|11223344556677885f5f5f5f5f 32 plan9 MFENCE
+0faef0|11223344556677885f5f5f5f5f 64 gnu mfence
+0faef0|11223344556677885f5f5f5f5f 64 intel mfence
+0faef0|11223344556677885f5f5f5f5f 64 plan9 MFENCE
+0faef8|11223344556677885f5f5f5f5f 32 intel sfence
+0faef8|11223344556677885f5f5f5f5f 32 plan9 SFENCE
+0faef8|11223344556677885f5f5f5f5f 64 gnu sfence
+0faef8|11223344556677885f5f5f5f5f 64 intel sfence
+0faef8|11223344556677885f5f5f5f5f 64 plan9 SFENCE
+0faf11|223344556677885f5f5f5f5f5f 32 intel imul edx, dword ptr [ecx]
+0faf11|223344556677885f5f5f5f5f5f 32 plan9 IMULL 0(CX), DX
+0faf11|223344556677885f5f5f5f5f5f 64 gnu imul (%rcx),%edx
+0faf11|223344556677885f5f5f5f5f5f 64 intel imul edx, dword ptr [rcx]
+0faf11|223344556677885f5f5f5f5f5f 64 plan9 IMULL 0(CX), DX
+0fb011|223344556677885f5f5f5f5f5f 32 intel cmpxchg byte ptr [ecx], dl
+0fb011|223344556677885f5f5f5f5f5f 32 plan9 CMPXCHGL DL, 0(CX)
+0fb011|223344556677885f5f5f5f5f5f 64 gnu cmpxchg %dl,(%rcx)
+0fb011|223344556677885f5f5f5f5f5f 64 intel cmpxchg byte ptr [rcx], dl
+0fb011|223344556677885f5f5f5f5f5f 64 plan9 CMPXCHGL DL, 0(CX)
+0fb111|223344556677885f5f5f5f5f5f 32 intel cmpxchg dword ptr [ecx], edx
+0fb111|223344556677885f5f5f5f5f5f 32 plan9 CMPXCHGL DX, 0(CX)
+0fb111|223344556677885f5f5f5f5f5f 64 gnu cmpxchg %edx,(%rcx)
+0fb111|223344556677885f5f5f5f5f5f 64 intel cmpxchg dword ptr [rcx], edx
+0fb111|223344556677885f5f5f5f5f5f 64 plan9 CMPXCHGL DX, 0(CX)
+0fb211|223344556677885f5f5f5f5f5f 32 intel lss edx, ptr [ecx]
+0fb211|223344556677885f5f5f5f5f5f 32 plan9 LSS 0(CX), DX
+0fb211|223344556677885f5f5f5f5f5f 64 gnu lss (%rcx),%edx
+0fb211|223344556677885f5f5f5f5f5f 64 intel lss edx, ptr [rcx]
+0fb211|223344556677885f5f5f5f5f5f 64 plan9 LSS 0(CX), DX
+0fb311|223344556677885f5f5f5f5f5f 32 intel btr dword ptr [ecx], edx
+0fb311|223344556677885f5f5f5f5f5f 32 plan9 BTRL DX, 0(CX)
+0fb311|223344556677885f5f5f5f5f5f 64 gnu btr %edx,(%rcx)
+0fb311|223344556677885f5f5f5f5f5f 64 intel btr dword ptr [rcx], edx
+0fb311|223344556677885f5f5f5f5f5f 64 plan9 BTRL DX, 0(CX)
+0fb411|223344556677885f5f5f5f5f5f 32 intel lfs edx, ptr [ecx]
+0fb411|223344556677885f5f5f5f5f5f 32 plan9 LFS 0(CX), DX
+0fb411|223344556677885f5f5f5f5f5f 64 gnu lfs (%rcx),%edx
+0fb411|223344556677885f5f5f5f5f5f 64 intel lfs edx, ptr [rcx]
+0fb411|223344556677885f5f5f5f5f5f 64 plan9 LFS 0(CX), DX
+0fb511|223344556677885f5f5f5f5f5f 32 intel lgs edx, ptr [ecx]
+0fb511|223344556677885f5f5f5f5f5f 32 plan9 LGS 0(CX), DX
+0fb511|223344556677885f5f5f5f5f5f 64 gnu lgs (%rcx),%edx
+0fb511|223344556677885f5f5f5f5f5f 64 intel lgs edx, ptr [rcx]
+0fb511|223344556677885f5f5f5f5f5f 64 plan9 LGS 0(CX), DX
+0fb611|223344556677885f5f5f5f5f5f 32 intel movzx edx, byte ptr [ecx]
+0fb611|223344556677885f5f5f5f5f5f 32 plan9 MOVZX 0(CX), DX
+0fb611|223344556677885f5f5f5f5f5f 64 gnu movzbl (%rcx),%edx
+0fb611|223344556677885f5f5f5f5f5f 64 intel movzx edx, byte ptr [rcx]
+0fb611|223344556677885f5f5f5f5f5f 64 plan9 MOVZX 0(CX), DX
+0fb711|223344556677885f5f5f5f5f5f 32 intel movzx edx, word ptr [ecx]
+0fb711|223344556677885f5f5f5f5f5f 32 plan9 MOVZX 0(CX), DX
+0fb711|223344556677885f5f5f5f5f5f 64 gnu movzwl (%rcx),%edx
+0fb711|223344556677885f5f5f5f5f5f 64 intel movzx edx, word ptr [rcx]
+0fb711|223344556677885f5f5f5f5f5f 64 plan9 MOVZX 0(CX), DX
+0fb8|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0fb8|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0fb8|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0fb8|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0fb8|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0fb9|11223344556677885f5f5f5f5f5f 32 intel ud1
+0fb9|11223344556677885f5f5f5f5f5f 32 plan9 UD1
+0fb9|11223344556677885f5f5f5f5f5f 64 gnu ud1
+0fb9|11223344556677885f5f5f5f5f5f 64 intel ud1
+0fb9|11223344556677885f5f5f5f5f5f 64 plan9 UD1
+0fba11|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0fba11|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0fba11|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0fba11|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0fba11|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0fba2011|223344556677885f5f5f5f5f 32 intel bt dword ptr [eax], 0x11
+0fba2011|223344556677885f5f5f5f5f 32 plan9 BTL $0x11, 0(AX)
+0fba2011|223344556677885f5f5f5f5f 64 gnu btl $0x11,(%rax)
+0fba2011|223344556677885f5f5f5f5f 64 intel bt dword ptr [rax], 0x11
+0fba2011|223344556677885f5f5f5f5f 64 plan9 BTL $0x11, 0(AX)
+0fba2811|223344556677885f5f5f5f5f 32 intel bts dword ptr [eax], 0x11
+0fba2811|223344556677885f5f5f5f5f 32 plan9 BTSL $0x11, 0(AX)
+0fba2811|223344556677885f5f5f5f5f 64 gnu btsl $0x11,(%rax)
+0fba2811|223344556677885f5f5f5f5f 64 intel bts dword ptr [rax], 0x11
+0fba2811|223344556677885f5f5f5f5f 64 plan9 BTSL $0x11, 0(AX)
+0fba3011|223344556677885f5f5f5f5f 32 intel btr dword ptr [eax], 0x11
+0fba3011|223344556677885f5f5f5f5f 32 plan9 BTRL $0x11, 0(AX)
+0fba3011|223344556677885f5f5f5f5f 64 gnu btrl $0x11,(%rax)
+0fba3011|223344556677885f5f5f5f5f 64 intel btr dword ptr [rax], 0x11
+0fba3011|223344556677885f5f5f5f5f 64 plan9 BTRL $0x11, 0(AX)
+0fba3811|223344556677885f5f5f5f5f 32 intel btc dword ptr [eax], 0x11
+0fba3811|223344556677885f5f5f5f5f 32 plan9 BTCL $0x11, 0(AX)
+0fba3811|223344556677885f5f5f5f5f 64 gnu btcl $0x11,(%rax)
+0fba3811|223344556677885f5f5f5f5f 64 intel btc dword ptr [rax], 0x11
+0fba3811|223344556677885f5f5f5f5f 64 plan9 BTCL $0x11, 0(AX)
+0fbb11|223344556677885f5f5f5f5f5f 32 intel btc dword ptr [ecx], edx
+0fbb11|223344556677885f5f5f5f5f5f 32 plan9 BTCL DX, 0(CX)
+0fbb11|223344556677885f5f5f5f5f5f 64 gnu btc %edx,(%rcx)
+0fbb11|223344556677885f5f5f5f5f5f 64 intel btc dword ptr [rcx], edx
+0fbb11|223344556677885f5f5f5f5f5f 64 plan9 BTCL DX, 0(CX)
+0fbc11|223344556677885f5f5f5f5f5f 32 intel bsf edx, dword ptr [ecx]
+0fbc11|223344556677885f5f5f5f5f5f 32 plan9 BSFL 0(CX), DX
+0fbc11|223344556677885f5f5f5f5f5f 64 gnu bsf (%rcx),%edx
+0fbc11|223344556677885f5f5f5f5f5f 64 intel bsf edx, dword ptr [rcx]
+0fbc11|223344556677885f5f5f5f5f5f 64 plan9 BSFL 0(CX), DX
+0fbd11|223344556677885f5f5f5f5f5f 32 intel bsr edx, dword ptr [ecx]
+0fbd11|223344556677885f5f5f5f5f5f 32 plan9 BSRL 0(CX), DX
+0fbd11|223344556677885f5f5f5f5f5f 64 gnu bsr (%rcx),%edx
+0fbd11|223344556677885f5f5f5f5f5f 64 intel bsr edx, dword ptr [rcx]
+0fbd11|223344556677885f5f5f5f5f5f 64 plan9 BSRL 0(CX), DX
+0fbe11|223344556677885f5f5f5f5f5f 32 intel movsx edx, byte ptr [ecx]
+0fbe11|223344556677885f5f5f5f5f5f 32 plan9 MOVSX 0(CX), DX
+0fbe11|223344556677885f5f5f5f5f5f 64 gnu movsbl (%rcx),%edx
+0fbe11|223344556677885f5f5f5f5f5f 64 intel movsx edx, byte ptr [rcx]
+0fbe11|223344556677885f5f5f5f5f5f 64 plan9 MOVSX 0(CX), DX
+0fbf11|223344556677885f5f5f5f5f5f 32 intel movsx edx, word ptr [ecx]
+0fbf11|223344556677885f5f5f5f5f5f 32 plan9 MOVSX 0(CX), DX
+0fbf11|223344556677885f5f5f5f5f5f 64 gnu movswl (%rcx),%edx
+0fbf11|223344556677885f5f5f5f5f5f 64 intel movsx edx, word ptr [rcx]
+0fbf11|223344556677885f5f5f5f5f5f 64 plan9 MOVSX 0(CX), DX
+0fc011|223344556677885f5f5f5f5f5f 32 intel xadd byte ptr [ecx], dl
+0fc011|223344556677885f5f5f5f5f5f 32 plan9 XADDL DL, 0(CX)
+0fc011|223344556677885f5f5f5f5f5f 64 gnu xadd %dl,(%rcx)
+0fc011|223344556677885f5f5f5f5f5f 64 intel xadd byte ptr [rcx], dl
+0fc011|223344556677885f5f5f5f5f5f 64 plan9 XADDL DL, 0(CX)
+0fc111|223344556677885f5f5f5f5f5f 32 intel xadd dword ptr [ecx], edx
+0fc111|223344556677885f5f5f5f5f5f 32 plan9 XADDL DX, 0(CX)
+0fc111|223344556677885f5f5f5f5f5f 64 gnu xadd %edx,(%rcx)
+0fc111|223344556677885f5f5f5f5f5f 64 intel xadd dword ptr [rcx], edx
+0fc111|223344556677885f5f5f5f5f5f 64 plan9 XADDL DX, 0(CX)
+0fc20000|11223344556677885f5f5f5f 32 intel cmpps xmm0, xmmword ptr [eax], 0x0
+0fc20000|11223344556677885f5f5f5f 32 plan9 CMPPS $0x0, 0(AX), X0
+0fc20000|11223344556677885f5f5f5f 64 gnu cmpeqps (%rax),%xmm0
+0fc20000|11223344556677885f5f5f5f 64 intel cmpps xmm0, xmmword ptr [rax], 0x0
+0fc20000|11223344556677885f5f5f5f 64 plan9 CMPPS $0x0, 0(AX), X0
+0fc311|223344556677885f5f5f5f5f5f 32 intel movnti dword ptr [ecx], edx
+0fc311|223344556677885f5f5f5f5f5f 32 plan9 MOVNTIL DX, 0(CX)
+0fc311|223344556677885f5f5f5f5f5f 64 gnu movnti %edx,(%rcx)
+0fc311|223344556677885f5f5f5f5f5f 64 intel movnti dword ptr [rcx], edx
+0fc311|223344556677885f5f5f5f5f5f 64 plan9 MOVNTIL DX, 0(CX)
+0fc41122|3344556677885f5f5f5f5f5f 32 intel pinsrw mmx2, word ptr [ecx], 0x22
+0fc41122|3344556677885f5f5f5f5f5f 32 plan9 PINSRW $0x22, 0(CX), M2
+0fc41122|3344556677885f5f5f5f5f5f 64 gnu pinsrw $0x22,(%rcx),%mm2
+0fc41122|3344556677885f5f5f5f5f5f 64 intel pinsrw mmx2, word ptr [rcx], 0x22
+0fc41122|3344556677885f5f5f5f5f5f 64 plan9 PINSRW $0x22, 0(CX), M2
+0fc51122|3344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0fc51122|3344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0fc51122|3344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0fc51122|3344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0fc51122|3344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0fc5c011|223344556677885f5f5f5f5f 32 intel pextrw eax, mmx0, 0x11
+0fc5c011|223344556677885f5f5f5f5f 32 plan9 PEXTRW $0x11, M0, AX
+0fc5c011|223344556677885f5f5f5f5f 64 gnu pextrw $0x11,%mm0,%eax
+0fc5c011|223344556677885f5f5f5f5f 64 intel pextrw eax, mmx0, 0x11
+0fc5c011|223344556677885f5f5f5f5f 64 plan9 PEXTRW $0x11, M0, AX
+0fc61122|3344556677885f5f5f5f5f5f 32 intel shufps xmm2, xmmword ptr [ecx], 0x22
+0fc61122|3344556677885f5f5f5f5f5f 32 plan9 SHUFPS $0x22, 0(CX), X2
+0fc61122|3344556677885f5f5f5f5f5f 64 gnu shufps $0x22,(%rcx),%xmm2
+0fc61122|3344556677885f5f5f5f5f5f 64 intel shufps xmm2, xmmword ptr [rcx], 0x22
+0fc61122|3344556677885f5f5f5f5f5f 64 plan9 SHUFPS $0x22, 0(CX), X2
+0fc708|11223344556677885f5f5f5f5f 32 intel cmpxchg8b qword ptr [eax]
+0fc708|11223344556677885f5f5f5f5f 32 plan9 CMPXCHG8B 0(AX)
+0fc708|11223344556677885f5f5f5f5f 64 gnu cmpxchg8b (%rax)
+0fc708|11223344556677885f5f5f5f5f 64 intel cmpxchg8b qword ptr [rax]
+0fc708|11223344556677885f5f5f5f5f 64 plan9 CMPXCHG8B 0(AX)
+0fc718|11223344556677885f5f5f5f5f 32 intel xrstors ptr [eax]
+0fc718|11223344556677885f5f5f5f5f 32 plan9 XRSTORS 0(AX)
+0fc718|11223344556677885f5f5f5f5f 64 gnu xrstors (%rax)
+0fc718|11223344556677885f5f5f5f5f 64 intel xrstors ptr [rax]
+0fc718|11223344556677885f5f5f5f5f 64 plan9 XRSTORS 0(AX)
+0fc720|11223344556677885f5f5f5f5f 32 intel xsavec ptr [eax]
+0fc720|11223344556677885f5f5f5f5f 32 plan9 XSAVEC 0(AX)
+0fc720|11223344556677885f5f5f5f5f 64 gnu xsavec (%rax)
+0fc720|11223344556677885f5f5f5f5f 64 intel xsavec ptr [rax]
+0fc720|11223344556677885f5f5f5f5f 64 plan9 XSAVEC 0(AX)
+0fc728|11223344556677885f5f5f5f5f 32 intel xsaves ptr [eax]
+0fc728|11223344556677885f5f5f5f5f 32 plan9 XSAVES 0(AX)
+0fc728|11223344556677885f5f5f5f5f 64 gnu xsaves (%rax)
+0fc728|11223344556677885f5f5f5f5f 64 intel xsaves ptr [rax]
+0fc728|11223344556677885f5f5f5f5f 64 plan9 XSAVES 0(AX)
+0fc730|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction
+0fc730|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction
+0fc730|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction
+0fc730|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction
+0fc730|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction
+0fc7f0|11223344556677885f5f5f5f5f 32 intel rdrand eax
+0fc7f0|11223344556677885f5f5f5f5f 32 plan9 RDRAND AX
+0fc7f0|11223344556677885f5f5f5f5f 64 gnu rdrand %eax
+0fc7f0|11223344556677885f5f5f5f5f 64 intel rdrand eax
+0fc7f0|11223344556677885f5f5f5f5f 64 plan9 RDRAND AX
+0fc8|11223344556677885f5f5f5f5f5f 32 intel bswap eax
+0fc8|11223344556677885f5f5f5f5f5f 32 plan9 BSWAP AX
+0fc8|11223344556677885f5f5f5f5f5f 64 gnu bswap %eax
+0fc8|11223344556677885f5f5f5f5f5f 64 intel bswap eax
+0fc8|11223344556677885f5f5f5f5f5f 64 plan9 BSWAP AX
+0fd0|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0fd0|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0fd0|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0fd0|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0fd0|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0fd111|223344556677885f5f5f5f5f5f 32 intel psrlw mmx2, qword ptr [ecx]
+0fd111|223344556677885f5f5f5f5f5f 32 plan9 PSRLW 0(CX), M2
+0fd111|223344556677885f5f5f5f5f5f 64 gnu psrlw (%rcx),%mm2
+0fd111|223344556677885f5f5f5f5f5f 64 intel psrlw mmx2, qword ptr [rcx]
+0fd111|223344556677885f5f5f5f5f5f 64 plan9 PSRLW 0(CX), M2
+0fd211|223344556677885f5f5f5f5f5f 32 intel psrld mmx2, qword ptr [ecx]
+0fd211|223344556677885f5f5f5f5f5f 32 plan9 PSRLD 0(CX), M2
+0fd211|223344556677885f5f5f5f5f5f 64 gnu psrld (%rcx),%mm2
+0fd211|223344556677885f5f5f5f5f5f 64 intel psrld mmx2, qword ptr [rcx]
+0fd211|223344556677885f5f5f5f5f5f 64 plan9 PSRLD 0(CX), M2
+0fd311|223344556677885f5f5f5f5f5f 32 intel psrlq mmx2, qword ptr [ecx]
+0fd311|223344556677885f5f5f5f5f5f 32 plan9 PSRLQ 0(CX), M2
+0fd311|223344556677885f5f5f5f5f5f 64 gnu psrlq (%rcx),%mm2
+0fd311|223344556677885f5f5f5f5f5f 64 intel psrlq mmx2, qword ptr [rcx]
+0fd311|223344556677885f5f5f5f5f5f 64 plan9 PSRLQ 0(CX), M2
+0fd411|223344556677885f5f5f5f5f5f 32 intel paddq mmx2, qword ptr [ecx]
+0fd411|223344556677885f5f5f5f5f5f 32 plan9 PADDQ 0(CX), M2
+0fd411|223344556677885f5f5f5f5f5f 64 gnu paddq (%rcx),%mm2
+0fd411|223344556677885f5f5f5f5f5f 64 intel paddq mmx2, qword ptr [rcx]
+0fd411|223344556677885f5f5f5f5f5f 64 plan9 PADDQ 0(CX), M2
+0fd511|223344556677885f5f5f5f5f5f 32 intel pmullw mmx2, qword ptr [ecx]
+0fd511|223344556677885f5f5f5f5f5f 32 plan9 PMULLW 0(CX), M2
+0fd511|223344556677885f5f5f5f5f5f 64 gnu pmullw (%rcx),%mm2
+0fd511|223344556677885f5f5f5f5f5f 64 intel pmullw mmx2, qword ptr [rcx]
+0fd511|223344556677885f5f5f5f5f5f 64 plan9 PMULLW 0(CX), M2
+0fd6|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0fd6|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0fd6|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0fd6|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0fd6|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0fd711|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0fd711|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0fd711|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0fd711|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0fd711|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0fd7c0|11223344556677885f5f5f5f5f 32 intel pmovmskb eax, mmx0
+0fd7c0|11223344556677885f5f5f5f5f 32 plan9 PMOVMSKB M0, AX
+0fd7c0|11223344556677885f5f5f5f5f 64 gnu pmovmskb %mm0,%eax
+0fd7c0|11223344556677885f5f5f5f5f 64 intel pmovmskb eax, mmx0
+0fd7c0|11223344556677885f5f5f5f5f 64 plan9 PMOVMSKB M0, AX
+0fd811|223344556677885f5f5f5f5f5f 32 intel psubusb mmx2, qword ptr [ecx]
+0fd811|223344556677885f5f5f5f5f5f 32 plan9 PSUBUSB 0(CX), M2
+0fd811|223344556677885f5f5f5f5f5f 64 gnu psubusb (%rcx),%mm2
+0fd811|223344556677885f5f5f5f5f5f 64 intel psubusb mmx2, qword ptr [rcx]
+0fd811|223344556677885f5f5f5f5f5f 64 plan9 PSUBUSB 0(CX), M2
+0fd911|223344556677885f5f5f5f5f5f 32 intel psubusw mmx2, qword ptr [ecx]
+0fd911|223344556677885f5f5f5f5f5f 32 plan9 PSUBUSW 0(CX), M2
+0fd911|223344556677885f5f5f5f5f5f 64 gnu psubusw (%rcx),%mm2
+0fd911|223344556677885f5f5f5f5f5f 64 intel psubusw mmx2, qword ptr [rcx]
+0fd911|223344556677885f5f5f5f5f5f 64 plan9 PSUBUSW 0(CX), M2
+0fda11|223344556677885f5f5f5f5f5f 32 intel pminub mmx2, qword ptr [ecx]
+0fda11|223344556677885f5f5f5f5f5f 32 plan9 PMINUB 0(CX), M2
+0fda11|223344556677885f5f5f5f5f5f 64 gnu pminub (%rcx),%mm2
+0fda11|223344556677885f5f5f5f5f5f 64 intel pminub mmx2, qword ptr [rcx]
+0fda11|223344556677885f5f5f5f5f5f 64 plan9 PMINUB 0(CX), M2
+0fdb11|223344556677885f5f5f5f5f5f 32 intel pand mmx2, qword ptr [ecx]
+0fdb11|223344556677885f5f5f5f5f5f 32 plan9 PAND 0(CX), M2
+0fdb11|223344556677885f5f5f5f5f5f 64 gnu pand (%rcx),%mm2
+0fdb11|223344556677885f5f5f5f5f5f 64 intel pand mmx2, qword ptr [rcx]
+0fdb11|223344556677885f5f5f5f5f5f 64 plan9 PAND 0(CX), M2
+0fdc11|223344556677885f5f5f5f5f5f 32 intel paddusb mmx2, qword ptr [ecx]
+0fdc11|223344556677885f5f5f5f5f5f 32 plan9 PADDUSB 0(CX), M2
+0fdc11|223344556677885f5f5f5f5f5f 64 gnu paddusb (%rcx),%mm2
+0fdc11|223344556677885f5f5f5f5f5f 64 intel paddusb mmx2, qword ptr [rcx]
+0fdc11|223344556677885f5f5f5f5f5f 64 plan9 PADDUSB 0(CX), M2
+0fdd11|223344556677885f5f5f5f5f5f 32 intel paddusw mmx2, qword ptr [ecx]
+0fdd11|223344556677885f5f5f5f5f5f 32 plan9 PADDUSW 0(CX), M2
+0fdd11|223344556677885f5f5f5f5f5f 64 gnu paddusw (%rcx),%mm2
+0fdd11|223344556677885f5f5f5f5f5f 64 intel paddusw mmx2, qword ptr [rcx]
+0fdd11|223344556677885f5f5f5f5f5f 64 plan9 PADDUSW 0(CX), M2
+0fde11|223344556677885f5f5f5f5f5f 32 intel pmaxub mmx2, qword ptr [ecx]
+0fde11|223344556677885f5f5f5f5f5f 32 plan9 PMAXUB 0(CX), M2
+0fde11|223344556677885f5f5f5f5f5f 64 gnu pmaxub (%rcx),%mm2
+0fde11|223344556677885f5f5f5f5f5f 64 intel pmaxub mmx2, qword ptr [rcx]
+0fde11|223344556677885f5f5f5f5f5f 64 plan9 PMAXUB 0(CX), M2
+0fdf11|223344556677885f5f5f5f5f5f 32 intel pandn mmx2, qword ptr [ecx]
+0fdf11|223344556677885f5f5f5f5f5f 32 plan9 PANDN 0(CX), M2
+0fdf11|223344556677885f5f5f5f5f5f 64 gnu pandn (%rcx),%mm2
+0fdf11|223344556677885f5f5f5f5f5f 64 intel pandn mmx2, qword ptr [rcx]
+0fdf11|223344556677885f5f5f5f5f5f 64 plan9 PANDN 0(CX), M2
+0fe011|223344556677885f5f5f5f5f5f 32 intel pavgb mmx2, qword ptr [ecx]
+0fe011|223344556677885f5f5f5f5f5f 32 plan9 PAVGB 0(CX), M2
+0fe011|223344556677885f5f5f5f5f5f 64 gnu pavgb (%rcx),%mm2
+0fe011|223344556677885f5f5f5f5f5f 64 intel pavgb mmx2, qword ptr [rcx]
+0fe011|223344556677885f5f5f5f5f5f 64 plan9 PAVGB 0(CX), M2
+0fe111|223344556677885f5f5f5f5f5f 32 intel psraw mmx2, qword ptr [ecx]
+0fe111|223344556677885f5f5f5f5f5f 32 plan9 PSRAW 0(CX), M2
+0fe111|223344556677885f5f5f5f5f5f 64 gnu psraw (%rcx),%mm2
+0fe111|223344556677885f5f5f5f5f5f 64 intel psraw mmx2, qword ptr [rcx]
+0fe111|223344556677885f5f5f5f5f5f 64 plan9 PSRAW 0(CX), M2
+0fe211|223344556677885f5f5f5f5f5f 32 intel psrad mmx2, qword ptr [ecx]
+0fe211|223344556677885f5f5f5f5f5f 32 plan9 PSRAD 0(CX), M2
+0fe211|223344556677885f5f5f5f5f5f 64 gnu psrad (%rcx),%mm2
+0fe211|223344556677885f5f5f5f5f5f 64 intel psrad mmx2, qword ptr [rcx]
+0fe211|223344556677885f5f5f5f5f5f 64 plan9 PSRAD 0(CX), M2
+0fe311|223344556677885f5f5f5f5f5f 32 intel pavgw mmx2, qword ptr [ecx]
+0fe311|223344556677885f5f5f5f5f5f 32 plan9 PAVGW 0(CX), M2
+0fe311|223344556677885f5f5f5f5f5f 64 gnu pavgw (%rcx),%mm2
+0fe311|223344556677885f5f5f5f5f5f 64 intel pavgw mmx2, qword ptr [rcx]
+0fe311|223344556677885f5f5f5f5f5f 64 plan9 PAVGW 0(CX), M2
+0fe411|223344556677885f5f5f5f5f5f 32 intel pmulhuw mmx2, qword ptr [ecx]
+0fe411|223344556677885f5f5f5f5f5f 32 plan9 PMULHUW 0(CX), M2
+0fe411|223344556677885f5f5f5f5f5f 64 gnu pmulhuw (%rcx),%mm2
+0fe411|223344556677885f5f5f5f5f5f 64 intel pmulhuw mmx2, qword ptr [rcx]
+0fe411|223344556677885f5f5f5f5f5f 64 plan9 PMULHUW 0(CX), M2
+0fe511|223344556677885f5f5f5f5f5f 32 intel pmulhw mmx2, qword ptr [ecx]
+0fe511|223344556677885f5f5f5f5f5f 32 plan9 PMULHW 0(CX), M2
+0fe511|223344556677885f5f5f5f5f5f 64 gnu pmulhw (%rcx),%mm2
+0fe511|223344556677885f5f5f5f5f5f 64 intel pmulhw mmx2, qword ptr [rcx]
+0fe511|223344556677885f5f5f5f5f5f 64 plan9 PMULHW 0(CX), M2
+0fe6|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0fe6|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0fe6|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0fe6|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0fe6|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0fe711|223344556677885f5f5f5f5f5f 32 intel movntq qword ptr [ecx], mmx2
+0fe711|223344556677885f5f5f5f5f5f 32 plan9 MOVNTQ M2, 0(CX)
+0fe711|223344556677885f5f5f5f5f5f 64 gnu movntq %mm2,(%rcx)
+0fe711|223344556677885f5f5f5f5f5f 64 intel movntq qword ptr [rcx], mmx2
+0fe711|223344556677885f5f5f5f5f5f 64 plan9 MOVNTQ M2, 0(CX)
+0fe811|223344556677885f5f5f5f5f5f 32 intel psubsb mmx2, qword ptr [ecx]
+0fe811|223344556677885f5f5f5f5f5f 32 plan9 PSUBSB 0(CX), M2
+0fe811|223344556677885f5f5f5f5f5f 64 gnu psubsb (%rcx),%mm2
+0fe811|223344556677885f5f5f5f5f5f 64 intel psubsb mmx2, qword ptr [rcx]
+0fe811|223344556677885f5f5f5f5f5f 64 plan9 PSUBSB 0(CX), M2
+0fe911|223344556677885f5f5f5f5f5f 32 intel psubsw mmx2, qword ptr [ecx]
+0fe911|223344556677885f5f5f5f5f5f 32 plan9 PSUBSW 0(CX), M2
+0fe911|223344556677885f5f5f5f5f5f 64 gnu psubsw (%rcx),%mm2
+0fe911|223344556677885f5f5f5f5f5f 64 intel psubsw mmx2, qword ptr [rcx]
+0fe911|223344556677885f5f5f5f5f5f 64 plan9 PSUBSW 0(CX), M2
+0fea11|223344556677885f5f5f5f5f5f 32 intel pminsw mmx2, qword ptr [ecx]
+0fea11|223344556677885f5f5f5f5f5f 32 plan9 PMINSW 0(CX), M2
+0fea11|223344556677885f5f5f5f5f5f 64 gnu pminsw (%rcx),%mm2
+0fea11|223344556677885f5f5f5f5f5f 64 intel pminsw mmx2, qword ptr [rcx]
+0fea11|223344556677885f5f5f5f5f5f 64 plan9 PMINSW 0(CX), M2
+0feb11|223344556677885f5f5f5f5f5f 32 intel por mmx2, qword ptr [ecx]
+0feb11|223344556677885f5f5f5f5f5f 32 plan9 POR 0(CX), M2
+0feb11|223344556677885f5f5f5f5f5f 64 gnu por (%rcx),%mm2
+0feb11|223344556677885f5f5f5f5f5f 64 intel por mmx2, qword ptr [rcx]
+0feb11|223344556677885f5f5f5f5f5f 64 plan9 POR 0(CX), M2
+0fec11|223344556677885f5f5f5f5f5f 32 intel paddsb mmx2, qword ptr [ecx]
+0fec11|223344556677885f5f5f5f5f5f 32 plan9 PADDSB 0(CX), M2
+0fec11|223344556677885f5f5f5f5f5f 64 gnu paddsb (%rcx),%mm2
+0fec11|223344556677885f5f5f5f5f5f 64 intel paddsb mmx2, qword ptr [rcx]
+0fec11|223344556677885f5f5f5f5f5f 64 plan9 PADDSB 0(CX), M2
+0fed11|223344556677885f5f5f5f5f5f 32 intel paddsw mmx2, qword ptr [ecx]
+0fed11|223344556677885f5f5f5f5f5f 32 plan9 PADDSW 0(CX), M2
+0fed11|223344556677885f5f5f5f5f5f 64 gnu paddsw (%rcx),%mm2
+0fed11|223344556677885f5f5f5f5f5f 64 intel paddsw mmx2, qword ptr [rcx]
+0fed11|223344556677885f5f5f5f5f5f 64 plan9 PADDSW 0(CX), M2
+0fee11|223344556677885f5f5f5f5f5f 32 intel pmaxsw mmx2, qword ptr [ecx]
+0fee11|223344556677885f5f5f5f5f5f 32 plan9 PMAXSW 0(CX), M2
+0fee11|223344556677885f5f5f5f5f5f 64 gnu pmaxsw (%rcx),%mm2
+0fee11|223344556677885f5f5f5f5f5f 64 intel pmaxsw mmx2, qword ptr [rcx]
+0fee11|223344556677885f5f5f5f5f5f 64 plan9 PMAXSW 0(CX), M2
+0fef11|223344556677885f5f5f5f5f5f 32 intel pxor mmx2, qword ptr [ecx]
+0fef11|223344556677885f5f5f5f5f5f 32 plan9 PXOR 0(CX), M2
+0fef11|223344556677885f5f5f5f5f5f 64 gnu pxor (%rcx),%mm2
+0fef11|223344556677885f5f5f5f5f5f 64 intel pxor mmx2, qword ptr [rcx]
+0fef11|223344556677885f5f5f5f5f5f 64 plan9 PXOR 0(CX), M2
+0ff0|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0ff0|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0ff0|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0ff0|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0ff0|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0ff111|223344556677885f5f5f5f5f5f 32 intel psllw mmx2, qword ptr [ecx]
+0ff111|223344556677885f5f5f5f5f5f 32 plan9 PSLLW 0(CX), M2
+0ff111|223344556677885f5f5f5f5f5f 64 gnu psllw (%rcx),%mm2
+0ff111|223344556677885f5f5f5f5f5f 64 intel psllw mmx2, qword ptr [rcx]
+0ff111|223344556677885f5f5f5f5f5f 64 plan9 PSLLW 0(CX), M2
+0ff211|223344556677885f5f5f5f5f5f 32 intel pslld mmx2, qword ptr [ecx]
+0ff211|223344556677885f5f5f5f5f5f 32 plan9 PSLLD 0(CX), M2
+0ff211|223344556677885f5f5f5f5f5f 64 gnu pslld (%rcx),%mm2
+0ff211|223344556677885f5f5f5f5f5f 64 intel pslld mmx2, qword ptr [rcx]
+0ff211|223344556677885f5f5f5f5f5f 64 plan9 PSLLD 0(CX), M2
+0ff311|223344556677885f5f5f5f5f5f 32 intel psllq mmx2, qword ptr [ecx]
+0ff311|223344556677885f5f5f5f5f5f 32 plan9 PSLLQ 0(CX), M2
+0ff311|223344556677885f5f5f5f5f5f 64 gnu psllq (%rcx),%mm2
+0ff311|223344556677885f5f5f5f5f5f 64 intel psllq mmx2, qword ptr [rcx]
+0ff311|223344556677885f5f5f5f5f5f 64 plan9 PSLLQ 0(CX), M2
+0ff411|223344556677885f5f5f5f5f5f 32 intel pmuludq mmx2, qword ptr [ecx]
+0ff411|223344556677885f5f5f5f5f5f 32 plan9 PMULUDQ 0(CX), M2
+0ff411|223344556677885f5f5f5f5f5f 64 gnu pmuludq (%rcx),%mm2
+0ff411|223344556677885f5f5f5f5f5f 64 intel pmuludq mmx2, qword ptr [rcx]
+0ff411|223344556677885f5f5f5f5f5f 64 plan9 PMULUDQ 0(CX), M2
+0ff511|223344556677885f5f5f5f5f5f 32 intel pmaddwd mmx2, qword ptr [ecx]
+0ff511|223344556677885f5f5f5f5f5f 32 plan9 PMADDWD 0(CX), M2
+0ff511|223344556677885f5f5f5f5f5f 64 gnu pmaddwd (%rcx),%mm2
+0ff511|223344556677885f5f5f5f5f5f 64 intel pmaddwd mmx2, qword ptr [rcx]
+0ff511|223344556677885f5f5f5f5f5f 64 plan9 PMADDWD 0(CX), M2
+0ff611|223344556677885f5f5f5f5f5f 32 intel psadbw mmx2, qword ptr [ecx]
+0ff611|223344556677885f5f5f5f5f5f 32 plan9 PSADBW 0(CX), M2
+0ff611|223344556677885f5f5f5f5f5f 64 gnu psadbw (%rcx),%mm2
+0ff611|223344556677885f5f5f5f5f5f 64 intel psadbw mmx2, qword ptr [rcx]
+0ff611|223344556677885f5f5f5f5f5f 64 plan9 PSADBW 0(CX), M2
+0ff711|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction
+0ff711|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction
+0ff711|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+0ff711|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+0ff711|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+0ff7c0|11223344556677885f5f5f5f5f 32 intel maskmovq mmx0, mmx0
+0ff7c0|11223344556677885f5f5f5f5f 32 plan9 MASKMOVQ M0, M0
+0ff7c0|11223344556677885f5f5f5f5f 64 gnu maskmovq %mm0,%mm0
+0ff7c0|11223344556677885f5f5f5f5f 64 intel maskmovq mmx0, mmx0
+0ff7c0|11223344556677885f5f5f5f5f 64 plan9 MASKMOVQ M0, M0
+0ff811|223344556677885f5f5f5f5f5f 32 intel psubb mmx2, qword ptr [ecx]
+0ff811|223344556677885f5f5f5f5f5f 32 plan9 PSUBB 0(CX), M2
+0ff811|223344556677885f5f5f5f5f5f 64 gnu psubb (%rcx),%mm2
+0ff811|223344556677885f5f5f5f5f5f 64 intel psubb mmx2, qword ptr [rcx]
+0ff811|223344556677885f5f5f5f5f5f 64 plan9 PSUBB 0(CX), M2
+0ff911|223344556677885f5f5f5f5f5f 32 intel psubw mmx2, qword ptr [ecx]
+0ff911|223344556677885f5f5f5f5f5f 32 plan9 PSUBW 0(CX), M2
+0ff911|223344556677885f5f5f5f5f5f 64 gnu psubw (%rcx),%mm2
+0ff911|223344556677885f5f5f5f5f5f 64 intel psubw mmx2, qword ptr [rcx]
+0ff911|223344556677885f5f5f5f5f5f 64 plan9 PSUBW 0(CX), M2
+0ffa11|223344556677885f5f5f5f5f5f 32 intel psubd mmx2, qword ptr [ecx]
+0ffa11|223344556677885f5f5f5f5f5f 32 plan9 PSUBD 0(CX), M2
+0ffa11|223344556677885f5f5f5f5f5f 64 gnu psubd (%rcx),%mm2
+0ffa11|223344556677885f5f5f5f5f5f 64 intel psubd mmx2, qword ptr [rcx]
+0ffa11|223344556677885f5f5f5f5f5f 64 plan9 PSUBD 0(CX), M2
+0ffb11|223344556677885f5f5f5f5f5f 32 intel psubq mmx2, qword ptr [ecx]
+0ffb11|223344556677885f5f5f5f5f5f 32 plan9 PSUBQ 0(CX), M2
+0ffb11|223344556677885f5f5f5f5f5f 64 gnu psubq (%rcx),%mm2
+0ffb11|223344556677885f5f5f5f5f5f 64 intel psubq mmx2, qword ptr [rcx]
+0ffb11|223344556677885f5f5f5f5f5f 64 plan9 PSUBQ 0(CX), M2
+0ffc11|223344556677885f5f5f5f5f5f 32 intel paddb mmx2, qword ptr [ecx]
+0ffc11|223344556677885f5f5f5f5f5f 32 plan9 PADDB 0(CX), M2
+0ffc11|223344556677885f5f5f5f5f5f 64 gnu paddb (%rcx),%mm2
+0ffc11|223344556677885f5f5f5f5f5f 64 intel paddb mmx2, qword ptr [rcx]
+0ffc11|223344556677885f5f5f5f5f5f 64 plan9 PADDB 0(CX), M2
+0ffd11|223344556677885f5f5f5f5f5f 32 intel paddw mmx2, qword ptr [ecx]
+0ffd11|223344556677885f5f5f5f5f5f 32 plan9 PADDW 0(CX), M2
+0ffd11|223344556677885f5f5f5f5f5f 64 gnu paddw (%rcx),%mm2
+0ffd11|223344556677885f5f5f5f5f5f 64 intel paddw mmx2, qword ptr [rcx]
+0ffd11|223344556677885f5f5f5f5f5f 64 plan9 PADDW 0(CX), M2
+0ffe11|223344556677885f5f5f5f5f5f 32 intel paddd mmx2, qword ptr [ecx]
+0ffe11|223344556677885f5f5f5f5f5f 32 plan9 PADDD 0(CX), M2
+0ffe11|223344556677885f5f5f5f5f5f 64 gnu paddd (%rcx),%mm2
+0ffe11|223344556677885f5f5f5f5f5f 64 intel paddd mmx2, qword ptr [rcx]
+0ffe11|223344556677885f5f5f5f5f5f 64 plan9 PADDD 0(CX), M2
+1011|223344556677885f5f5f5f5f5f5f 32 intel adc byte ptr [ecx], dl
+1011|223344556677885f5f5f5f5f5f5f 32 plan9 ADCL DL, 0(CX)
+1011|223344556677885f5f5f5f5f5f5f 64 gnu adc %dl,(%rcx)
+1011|223344556677885f5f5f5f5f5f5f 64 intel adc byte ptr [rcx], dl
+1011|223344556677885f5f5f5f5f5f5f 64 plan9 ADCL DL, 0(CX)
+1111|223344556677885f5f5f5f5f5f5f 32 intel adc dword ptr [ecx], edx
+1111|223344556677885f5f5f5f5f5f5f 32 plan9 ADCL DX, 0(CX)
+1111|223344556677885f5f5f5f5f5f5f 64 gnu adc %edx,(%rcx)
+1111|223344556677885f5f5f5f5f5f5f 64 intel adc dword ptr [rcx], edx
+1111|223344556677885f5f5f5f5f5f5f 64 plan9 ADCL DX, 0(CX)
+1211|223344556677885f5f5f5f5f5f5f 32 intel adc dl, byte ptr [ecx]
+1211|223344556677885f5f5f5f5f5f5f 32 plan9 ADCL 0(CX), DL
+1211|223344556677885f5f5f5f5f5f5f 64 gnu adc (%rcx),%dl
+1211|223344556677885f5f5f5f5f5f5f 64 intel adc dl, byte ptr [rcx]
+1211|223344556677885f5f5f5f5f5f5f 64 plan9 ADCL 0(CX), DL
+1311|223344556677885f5f5f5f5f5f5f 32 intel adc edx, dword ptr [ecx]
+1311|223344556677885f5f5f5f5f5f5f 32 plan9 ADCL 0(CX), DX
+1311|223344556677885f5f5f5f5f5f5f 64 gnu adc (%rcx),%edx
+1311|223344556677885f5f5f5f5f5f5f 64 intel adc edx, dword ptr [rcx]
+1311|223344556677885f5f5f5f5f5f5f 64 plan9 ADCL 0(CX), DX
+1411|223344556677885f5f5f5f5f5f5f 32 intel adc al, 0x11
+1411|223344556677885f5f5f5f5f5f5f 32 plan9 ADCL $0x11, AL
+1411|223344556677885f5f5f5f5f5f5f 64 gnu adc $0x11,%al
+1411|223344556677885f5f5f5f5f5f5f 64 intel adc al, 0x11
+1411|223344556677885f5f5f5f5f5f5f 64 plan9 ADCL $0x11, AL
+1511223344|556677885f5f5f5f5f5f5f 32 intel adc eax, 0x44332211
+1511223344|556677885f5f5f5f5f5f5f 32 plan9 ADCL $0x44332211, AX
+1511223344|556677885f5f5f5f5f5f5f 64 gnu adc $0x44332211,%eax
+1511223344|556677885f5f5f5f5f5f5f 64 intel adc eax, 0x44332211
+1511223344|556677885f5f5f5f5f5f5f 64 plan9 ADCL $0x44332211, AX
+16|11223344556677885f5f5f5f5f5f5f 32 intel push ss
+16|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL SS
+16|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+16|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+16|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+17|11223344556677885f5f5f5f5f5f5f 32 intel pop ss
+17|11223344556677885f5f5f5f5f5f5f 32 plan9 POPL SS
+17|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+17|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+17|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+1811|223344556677885f5f5f5f5f5f5f 32 intel sbb byte ptr [ecx], dl
+1811|223344556677885f5f5f5f5f5f5f 32 plan9 SBBL DL, 0(CX)
+1811|223344556677885f5f5f5f5f5f5f 64 gnu sbb %dl,(%rcx)
+1811|223344556677885f5f5f5f5f5f5f 64 intel sbb byte ptr [rcx], dl
+1811|223344556677885f5f5f5f5f5f5f 64 plan9 SBBL DL, 0(CX)
+1911|223344556677885f5f5f5f5f5f5f 32 intel sbb dword ptr [ecx], edx
+1911|223344556677885f5f5f5f5f5f5f 32 plan9 SBBL DX, 0(CX)
+1911|223344556677885f5f5f5f5f5f5f 64 gnu sbb %edx,(%rcx)
+1911|223344556677885f5f5f5f5f5f5f 64 intel sbb dword ptr [rcx], edx
+1911|223344556677885f5f5f5f5f5f5f 64 plan9 SBBL DX, 0(CX)
+1a11|223344556677885f5f5f5f5f5f5f 32 intel sbb dl, byte ptr [ecx]
+1a11|223344556677885f5f5f5f5f5f5f 32 plan9 SBBL 0(CX), DL
+1a11|223344556677885f5f5f5f5f5f5f 64 gnu sbb (%rcx),%dl
+1a11|223344556677885f5f5f5f5f5f5f 64 intel sbb dl, byte ptr [rcx]
+1a11|223344556677885f5f5f5f5f5f5f 64 plan9 SBBL 0(CX), DL
+1b11|223344556677885f5f5f5f5f5f5f 32 intel sbb edx, dword ptr [ecx]
+1b11|223344556677885f5f5f5f5f5f5f 32 plan9 SBBL 0(CX), DX
+1b11|223344556677885f5f5f5f5f5f5f 64 gnu sbb (%rcx),%edx
+1b11|223344556677885f5f5f5f5f5f5f 64 intel sbb edx, dword ptr [rcx]
+1b11|223344556677885f5f5f5f5f5f5f 64 plan9 SBBL 0(CX), DX
+1c11|223344556677885f5f5f5f5f5f5f 32 intel sbb al, 0x11
+1c11|223344556677885f5f5f5f5f5f5f 32 plan9 SBBL $0x11, AL
+1c11|223344556677885f5f5f5f5f5f5f 64 gnu sbb $0x11,%al
+1c11|223344556677885f5f5f5f5f5f5f 64 intel sbb al, 0x11
+1c11|223344556677885f5f5f5f5f5f5f 64 plan9 SBBL $0x11, AL
+1d11223344|556677885f5f5f5f5f5f5f 32 intel sbb eax, 0x44332211
+1d11223344|556677885f5f5f5f5f5f5f 32 plan9 SBBL $0x44332211, AX
+1d11223344|556677885f5f5f5f5f5f5f 64 gnu sbb $0x44332211,%eax
+1d11223344|556677885f5f5f5f5f5f5f 64 intel sbb eax, 0x44332211
+1d11223344|556677885f5f5f5f5f5f5f 64 plan9 SBBL $0x44332211, AX
+1e|11223344556677885f5f5f5f5f5f5f 32 intel push ds
+1e|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL DS
+1e|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+1e|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+1e|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+1f|11223344556677885f5f5f5f5f5f5f 32 intel pop ds
+1f|11223344556677885f5f5f5f5f5f5f 32 plan9 POPL DS
+1f|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+1f|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+1f|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+2011|223344556677885f5f5f5f5f5f5f 32 intel and byte ptr [ecx], dl
+2011|223344556677885f5f5f5f5f5f5f 32 plan9 ANDL DL, 0(CX)
+2011|223344556677885f5f5f5f5f5f5f 64 gnu and %dl,(%rcx)
+2011|223344556677885f5f5f5f5f5f5f 64 intel and byte ptr [rcx], dl
+2011|223344556677885f5f5f5f5f5f5f 64 plan9 ANDL DL, 0(CX)
+2111|223344556677885f5f5f5f5f5f5f 32 intel and dword ptr [ecx], edx
+2111|223344556677885f5f5f5f5f5f5f 32 plan9 ANDL DX, 0(CX)
+2111|223344556677885f5f5f5f5f5f5f 64 gnu and %edx,(%rcx)
+2111|223344556677885f5f5f5f5f5f5f 64 intel and dword ptr [rcx], edx
+2111|223344556677885f5f5f5f5f5f5f 64 plan9 ANDL DX, 0(CX)
+2211|223344556677885f5f5f5f5f5f5f 32 intel and dl, byte ptr [ecx]
+2211|223344556677885f5f5f5f5f5f5f 32 plan9 ANDL 0(CX), DL
+2211|223344556677885f5f5f5f5f5f5f 64 gnu and (%rcx),%dl
+2211|223344556677885f5f5f5f5f5f5f 64 intel and dl, byte ptr [rcx]
+2211|223344556677885f5f5f5f5f5f5f 64 plan9 ANDL 0(CX), DL
+2311|223344556677885f5f5f5f5f5f5f 32 intel and edx, dword ptr [ecx]
+2311|223344556677885f5f5f5f5f5f5f 32 plan9 ANDL 0(CX), DX
+2311|223344556677885f5f5f5f5f5f5f 64 gnu and (%rcx),%edx
+2311|223344556677885f5f5f5f5f5f5f 64 intel and edx, dword ptr [rcx]
+2311|223344556677885f5f5f5f5f5f5f 64 plan9 ANDL 0(CX), DX
+2411|223344556677885f5f5f5f5f5f5f 32 intel and al, 0x11
+2411|223344556677885f5f5f5f5f5f5f 32 plan9 ANDL $0x11, AL
+2411|223344556677885f5f5f5f5f5f5f 64 gnu and $0x11,%al
+2411|223344556677885f5f5f5f5f5f5f 64 intel and al, 0x11
+2411|223344556677885f5f5f5f5f5f5f 64 plan9 ANDL $0x11, AL
+2511223344|556677885f5f5f5f5f5f5f 32 intel and eax, 0x44332211
+2511223344|556677885f5f5f5f5f5f5f 32 plan9 ANDL $0x44332211, AX
+2511223344|556677885f5f5f5f5f5f5f 64 gnu and $0x44332211,%eax
+2511223344|556677885f5f5f5f5f5f5f 64 intel and eax, 0x44332211
+2511223344|556677885f5f5f5f5f5f5f 64 plan9 ANDL $0x44332211, AX
+266e|11223344556677885f5f5f5f5f5f 32 intel outsb es
+266e|11223344556677885f5f5f5f5f5f 32 plan9 ES OUTSB ES:0(SI), DX
+266e|11223344556677885f5f5f5f5f5f 64 gnu outsb %ds:%es:(%rsi),(%dx)
+266e|11223344556677885f5f5f5f5f5f 64 intel outsb
+266e|11223344556677885f5f5f5f5f5f 64 plan9 ES OUTSB DS:0(SI), DX
+267011|223344556677885f5f5f5f5f5f 32 intel jo .+0x11
+267011|223344556677885f5f5f5f5f5f 32 plan9 ES JO .+17
+267011|223344556677885f5f5f5f5f5f 64 gnu es jo .+0x11
+267011|223344556677885f5f5f5f5f5f 64 intel jo .+0x11
+267011|223344556677885f5f5f5f5f5f 64 plan9 ES JO .+17
+26a01122334455667788|5f5f5f5f5f5f 64 gnu mov %es:-0x778899aabbccddef,%al
+26a01122334455667788|5f5f5f5f5f5f 64 intel mov al, byte ptr [0x8877665544332211]
+26a01122334455667788|5f5f5f5f5f5f 64 plan9 ES MOVL -0x778899aabbccddef, AL
+26a011223344|556677885f5f5f5f5f5f 32 intel mov al, byte ptr es:[0x44332211]
+26a011223344|556677885f5f5f5f5f5f 32 plan9 ES MOVL ES:0x44332211, AL
+26|8211223344556677885f5f5f5f5f5f 32 intel es
+26|8211223344556677885f5f5f5f5f5f 32 plan9 ES Op(0)
+26|8211223344556677885f5f5f5f5f5f 64 gnu es
+26|8211223344556677885f5f5f5f5f5f 64 intel es
+26|8211223344556677885f5f5f5f5f5f 64 plan9 ES Op(0)
+27|11223344556677885f5f5f5f5f5f5f 32 intel daa
+27|11223344556677885f5f5f5f5f5f5f 32 plan9 DAA
+27|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+27|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+27|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+2811|223344556677885f5f5f5f5f5f5f 32 intel sub byte ptr [ecx], dl
+2811|223344556677885f5f5f5f5f5f5f 32 plan9 SUBL DL, 0(CX)
+2811|223344556677885f5f5f5f5f5f5f 64 gnu sub %dl,(%rcx)
+2811|223344556677885f5f5f5f5f5f5f 64 intel sub byte ptr [rcx], dl
+2811|223344556677885f5f5f5f5f5f5f 64 plan9 SUBL DL, 0(CX)
+2911|223344556677885f5f5f5f5f5f5f 32 intel sub dword ptr [ecx], edx
+2911|223344556677885f5f5f5f5f5f5f 32 plan9 SUBL DX, 0(CX)
+2911|223344556677885f5f5f5f5f5f5f 64 gnu sub %edx,(%rcx)
+2911|223344556677885f5f5f5f5f5f5f 64 intel sub dword ptr [rcx], edx
+2911|223344556677885f5f5f5f5f5f5f 64 plan9 SUBL DX, 0(CX)
+2a11|223344556677885f5f5f5f5f5f5f 32 intel sub dl, byte ptr [ecx]
+2a11|223344556677885f5f5f5f5f5f5f 32 plan9 SUBL 0(CX), DL
+2a11|223344556677885f5f5f5f5f5f5f 64 gnu sub (%rcx),%dl
+2a11|223344556677885f5f5f5f5f5f5f 64 intel sub dl, byte ptr [rcx]
+2a11|223344556677885f5f5f5f5f5f5f 64 plan9 SUBL 0(CX), DL
+2b11|223344556677885f5f5f5f5f5f5f 32 intel sub edx, dword ptr [ecx]
+2b11|223344556677885f5f5f5f5f5f5f 32 plan9 SUBL 0(CX), DX
+2b11|223344556677885f5f5f5f5f5f5f 64 gnu sub (%rcx),%edx
+2b11|223344556677885f5f5f5f5f5f5f 64 intel sub edx, dword ptr [rcx]
+2b11|223344556677885f5f5f5f5f5f5f 64 plan9 SUBL 0(CX), DX
+2c11|223344556677885f5f5f5f5f5f5f 32 intel sub al, 0x11
+2c11|223344556677885f5f5f5f5f5f5f 32 plan9 SUBL $0x11, AL
+2c11|223344556677885f5f5f5f5f5f5f 64 gnu sub $0x11,%al
+2c11|223344556677885f5f5f5f5f5f5f 64 intel sub al, 0x11
+2c11|223344556677885f5f5f5f5f5f5f 64 plan9 SUBL $0x11, AL
+2d11223344|556677885f5f5f5f5f5f5f 32 intel sub eax, 0x44332211
+2d11223344|556677885f5f5f5f5f5f5f 32 plan9 SUBL $0x44332211, AX
+2d11223344|556677885f5f5f5f5f5f5f 64 gnu sub $0x44332211,%eax
+2d11223344|556677885f5f5f5f5f5f5f 64 intel sub eax, 0x44332211
+2d11223344|556677885f5f5f5f5f5f5f 64 plan9 SUBL $0x44332211, AX
+2f|11223344556677885f5f5f5f5f5f5f 32 intel das
+2f|11223344556677885f5f5f5f5f5f5f 32 plan9 DAS
+2f|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+2f|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+2f|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+3011|223344556677885f5f5f5f5f5f5f 32 intel xor byte ptr [ecx], dl
+3011|223344556677885f5f5f5f5f5f5f 32 plan9 XORL DL, 0(CX)
+3011|223344556677885f5f5f5f5f5f5f 64 gnu xor %dl,(%rcx)
+3011|223344556677885f5f5f5f5f5f5f 64 intel xor byte ptr [rcx], dl
+3011|223344556677885f5f5f5f5f5f5f 64 plan9 XORL DL, 0(CX)
+3111|223344556677885f5f5f5f5f5f5f 32 intel xor dword ptr [ecx], edx
+3111|223344556677885f5f5f5f5f5f5f 32 plan9 XORL DX, 0(CX)
+3111|223344556677885f5f5f5f5f5f5f 64 gnu xor %edx,(%rcx)
+3111|223344556677885f5f5f5f5f5f5f 64 intel xor dword ptr [rcx], edx
+3111|223344556677885f5f5f5f5f5f5f 64 plan9 XORL DX, 0(CX)
+3211|223344556677885f5f5f5f5f5f5f 32 intel xor dl, byte ptr [ecx]
+3211|223344556677885f5f5f5f5f5f5f 32 plan9 XORL 0(CX), DL
+3211|223344556677885f5f5f5f5f5f5f 64 gnu xor (%rcx),%dl
+3211|223344556677885f5f5f5f5f5f5f 64 intel xor dl, byte ptr [rcx]
+3211|223344556677885f5f5f5f5f5f5f 64 plan9 XORL 0(CX), DL
+3311|223344556677885f5f5f5f5f5f5f 32 intel xor edx, dword ptr [ecx]
+3311|223344556677885f5f5f5f5f5f5f 32 plan9 XORL 0(CX), DX
+3311|223344556677885f5f5f5f5f5f5f 64 gnu xor (%rcx),%edx
+3311|223344556677885f5f5f5f5f5f5f 64 intel xor edx, dword ptr [rcx]
+3311|223344556677885f5f5f5f5f5f5f 64 plan9 XORL 0(CX), DX
+3411|223344556677885f5f5f5f5f5f5f 32 intel xor al, 0x11
+3411|223344556677885f5f5f5f5f5f5f 32 plan9 XORL $0x11, AL
+3411|223344556677885f5f5f5f5f5f5f 64 gnu xor $0x11,%al
+3411|223344556677885f5f5f5f5f5f5f 64 intel xor al, 0x11
+3411|223344556677885f5f5f5f5f5f5f 64 plan9 XORL $0x11, AL
+3511223344|556677885f5f5f5f5f5f5f 32 intel xor eax, 0x44332211
+3511223344|556677885f5f5f5f5f5f5f 32 plan9 XORL $0x44332211, AX
+3511223344|556677885f5f5f5f5f5f5f 64 gnu xor $0x44332211,%eax
+3511223344|556677885f5f5f5f5f5f5f 64 intel xor eax, 0x44332211
+3511223344|556677885f5f5f5f5f5f5f 64 plan9 XORL $0x44332211, AX
+3667f3660f2ac0|11223344556677885f 32 intel addr16 cvtsi2ss xmm0, eax
+3667f3660f2ac0|11223344556677885f 32 plan9 CVTSI2SSW AX, X0
+3667f3660f2ac0|11223344556677885f 64 gnu ss addr32 cvtsi2ss %ax,%xmm0
+3667f3660f2ac0|11223344556677885f 64 intel addr32 cvtsi2ss xmm0, eax
+3667f3660f2ac0|11223344556677885f 64 plan9 CVTSI2SSW AX, X0
+36|67f3660ff7c011223344556677885f 64 gnu ss
+36|f0f2f33e66f066f2f33e3666818411 32 intel ss
+36|f0f2f33e66f066f2f33e3666818411 32 plan9 SS Op(0)
+36|f0f2f33e66f066f2f33e3666818411 64 gnu ss
+36|f0f2f33e66f066f2f33e3666818411 64 intel ss
+36|f0f2f33e66f066f2f33e3666818411 64 plan9 SS Op(0)
+36|f2f33ef0f78411223344556677885f 32 intel ss
+36|f2f33ef0f78411223344556677885f 32 plan9 SS Op(0)
+36|f2f33ef0f78411223344556677885f 64 gnu ss
+36|f2f33ef0f78411223344556677885f 64 intel ss
+36|f2f33ef0f78411223344556677885f 64 plan9 SS Op(0)
+37|11223344556677885f5f5f5f5f5f5f 32 intel aaa
+37|11223344556677885f5f5f5f5f5f5f 32 plan9 AAA
+37|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+37|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+37|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+3811|223344556677885f5f5f5f5f5f5f 32 intel cmp byte ptr [ecx], dl
+3811|223344556677885f5f5f5f5f5f5f 32 plan9 CMPL DL, 0(CX)
+3811|223344556677885f5f5f5f5f5f5f 64 gnu cmp %dl,(%rcx)
+3811|223344556677885f5f5f5f5f5f5f 64 intel cmp byte ptr [rcx], dl
+3811|223344556677885f5f5f5f5f5f5f 64 plan9 CMPL DL, 0(CX)
+3911|223344556677885f5f5f5f5f5f5f 32 intel cmp dword ptr [ecx], edx
+3911|223344556677885f5f5f5f5f5f5f 32 plan9 CMPL DX, 0(CX)
+3911|223344556677885f5f5f5f5f5f5f 64 gnu cmp %edx,(%rcx)
+3911|223344556677885f5f5f5f5f5f5f 64 intel cmp dword ptr [rcx], edx
+3911|223344556677885f5f5f5f5f5f5f 64 plan9 CMPL DX, 0(CX)
+3a11|223344556677885f5f5f5f5f5f5f 32 intel cmp dl, byte ptr [ecx]
+3a11|223344556677885f5f5f5f5f5f5f 32 plan9 CMPL 0(CX), DL
+3a11|223344556677885f5f5f5f5f5f5f 64 gnu cmp (%rcx),%dl
+3a11|223344556677885f5f5f5f5f5f5f 64 intel cmp dl, byte ptr [rcx]
+3a11|223344556677885f5f5f5f5f5f5f 64 plan9 CMPL 0(CX), DL
+3b11|223344556677885f5f5f5f5f5f5f 32 intel cmp edx, dword ptr [ecx]
+3b11|223344556677885f5f5f5f5f5f5f 32 plan9 CMPL 0(CX), DX
+3b11|223344556677885f5f5f5f5f5f5f 64 gnu cmp (%rcx),%edx
+3b11|223344556677885f5f5f5f5f5f5f 64 intel cmp edx, dword ptr [rcx]
+3b11|223344556677885f5f5f5f5f5f5f 64 plan9 CMPL 0(CX), DX
+3c11|223344556677885f5f5f5f5f5f5f 32 intel cmp al, 0x11
+3c11|223344556677885f5f5f5f5f5f5f 32 plan9 CMPL $0x11, AL
+3c11|223344556677885f5f5f5f5f5f5f 64 gnu cmp $0x11,%al
+3c11|223344556677885f5f5f5f5f5f5f 64 intel cmp al, 0x11
+3c11|223344556677885f5f5f5f5f5f5f 64 plan9 CMPL $0x11, AL
+3d11223344|556677885f5f5f5f5f5f5f 32 intel cmp eax, 0x44332211
+3d11223344|556677885f5f5f5f5f5f5f 32 plan9 CMPL $0x44332211, AX
+3d11223344|556677885f5f5f5f5f5f5f 64 gnu cmp $0x44332211,%eax
+3d11223344|556677885f5f5f5f5f5f5f 64 intel cmp eax, 0x44332211
+3d11223344|556677885f5f5f5f5f5f5f 64 plan9 CMPL $0x44332211, AX
+3e67e011|223344556677885f5f5f5f5f 32 intel addr16 loopne .+0x11
+3e67e011|223344556677885f5f5f5f5f 32 plan9 LOOPNE .+17
+3e67e011|223344556677885f5f5f5f5f 64 gnu loopne,pt .+0x11
+3e67e011|223344556677885f5f5f5f5f 64 intel addr32 loopne .+0x11
+3e67e011|223344556677885f5f5f5f5f 64 plan9 LOOPNE .+17
+3ef367660f38f011|223344556677885f 32 intel movbe dx, word ptr [bx+di*1]
+3ef367660f38f011|223344556677885f 32 plan9 MOVBE DS:0(BX)(DI*1), DX
+3ef367660f38f011|223344556677885f 64 gnu rep movbe %ds:(%ecx),%dx
+3ef367660f38f011|223344556677885f 64 intel movbe dx, word ptr [ecx]
+3ef367660f38f011|223344556677885f 64 plan9 MOVBE 0(CX), DX
+3f|11223344556677885f5f5f5f5f5f5f 32 intel aas
+3f|11223344556677885f5f5f5f5f5f5f 32 plan9 AAS
+3f|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+3f|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+3f|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+4040|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+4040|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+4040|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+4048|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction
+4048|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction
+4048|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+40|11223344556677885f5f5f5f5f5f5f 32 intel inc eax
+40|11223344556677885f5f5f5f5f5f5f 32 plan9 INCL AX
+480100|11223344556677885f5f5f5f5f 64 gnu add %rax,(%rax)
+480100|11223344556677885f5f5f5f5f 64 intel add qword ptr [rax], rax
+480100|11223344556677885f5f5f5f5f 64 plan9 ADDQ AX, 0(AX)
+480311|223344556677885f5f5f5f5f5f 64 gnu add (%rcx),%rdx
+480311|223344556677885f5f5f5f5f5f 64 intel add rdx, qword ptr [rcx]
+480311|223344556677885f5f5f5f5f5f 64 plan9 ADDQ 0(CX), DX
+480511223344|556677885f5f5f5f5f5f 64 gnu add $0x44332211,%rax
+480511223344|556677885f5f5f5f5f5f 64 intel add rax, 0x44332211
+480511223344|556677885f5f5f5f5f5f 64 plan9 ADDQ $0x44332211, AX
+480911|223344556677885f5f5f5f5f5f 64 gnu or %rdx,(%rcx)
+480911|223344556677885f5f5f5f5f5f 64 intel or qword ptr [rcx], rdx
+480911|223344556677885f5f5f5f5f5f 64 plan9 ORQ DX, 0(CX)
+480b11|223344556677885f5f5f5f5f5f 64 gnu or (%rcx),%rdx
+480b11|223344556677885f5f5f5f5f5f 64 intel or rdx, qword ptr [rcx]
+480b11|223344556677885f5f5f5f5f5f 64 plan9 ORQ 0(CX), DX
+480d11223344|556677885f5f5f5f5f5f 64 gnu or $0x44332211,%rax
+480d11223344|556677885f5f5f5f5f5f 64 intel or rax, 0x44332211
+480d11223344|556677885f5f5f5f5f5f 64 plan9 ORQ $0x44332211, AX
+480f0000|11223344556677885f5f5f5f 64 gnu sldt (%rax)
+480f0000|11223344556677885f5f5f5f 64 intel sldt word ptr [rax]
+480f0000|11223344556677885f5f5f5f 64 plan9 SLDT 0(AX)
+480f0008|11223344556677885f5f5f5f 64 gnu str (%rax)
+480f0008|11223344556677885f5f5f5f 64 intel str word ptr [rax]
+480f0008|11223344556677885f5f5f5f 64 plan9 STR 0(AX)
+480f0120|11223344556677885f5f5f5f 64 gnu smsw (%rax)
+480f0120|11223344556677885f5f5f5f 64 intel smsw word ptr [rax]
+480f0120|11223344556677885f5f5f5f 64 plan9 SMSW 0(AX)
+480f0211|223344556677885f5f5f5f5f 64 gnu lar (%rcx),%rdx
+480f0211|223344556677885f5f5f5f5f 64 intel lar rdx, word ptr [rcx]
+480f0211|223344556677885f5f5f5f5f 64 plan9 LAR 0(CX), DX
+480f0311|223344556677885f5f5f5f5f 64 gnu lsl (%rcx),%rdx
+480f0311|223344556677885f5f5f5f5f 64 intel lsl rdx, word ptr [rcx]
+480f0311|223344556677885f5f5f5f5f 64 plan9 LSL 0(CX), DX
+480f35|11223344556677885f5f5f5f5f 64 gnu sysexit
+480f35|11223344556677885f5f5f5f5f 64 intel sysexit
+480f35|11223344556677885f5f5f5f5f 64 plan9 SYSEXIT
+480f38f011|223344556677885f5f5f5f 64 gnu movbe (%rcx),%rdx
+480f38f011|223344556677885f5f5f5f 64 intel movbe rdx, qword ptr [rcx]
+480f38f011|223344556677885f5f5f5f 64 plan9 MOVBE 0(CX), DX
+480f38f111|223344556677885f5f5f5f 64 gnu movbe %rdx,(%rcx)
+480f38f111|223344556677885f5f5f5f 64 intel movbe qword ptr [rcx], rdx
+480f38f111|223344556677885f5f5f5f 64 plan9 MOVBE DX, 0(CX)
+480f4011|223344556677885f5f5f5f5f 64 gnu cmovo (%rcx),%rdx
+480f4011|223344556677885f5f5f5f5f 64 intel cmovo rdx, qword ptr [rcx]
+480f4011|223344556677885f5f5f5f5f 64 plan9 CMOVO 0(CX), DX
+480f4111|223344556677885f5f5f5f5f 64 gnu cmovno (%rcx),%rdx
+480f4111|223344556677885f5f5f5f5f 64 intel cmovno rdx, qword ptr [rcx]
+480f4111|223344556677885f5f5f5f5f 64 plan9 CMOVNO 0(CX), DX
+480f4211|223344556677885f5f5f5f5f 64 gnu cmovb (%rcx),%rdx
+480f4211|223344556677885f5f5f5f5f 64 intel cmovb rdx, qword ptr [rcx]
+480f4211|223344556677885f5f5f5f5f 64 plan9 CMOVB 0(CX), DX
+480f4311|223344556677885f5f5f5f5f 64 gnu cmovae (%rcx),%rdx
+480f4311|223344556677885f5f5f5f5f 64 intel cmovnb rdx, qword ptr [rcx]
+480f4311|223344556677885f5f5f5f5f 64 plan9 CMOVAE 0(CX), DX
+480f4411|223344556677885f5f5f5f5f 64 gnu cmove (%rcx),%rdx
+480f4411|223344556677885f5f5f5f5f 64 intel cmovz rdx, qword ptr [rcx]
+480f4411|223344556677885f5f5f5f5f 64 plan9 CMOVE 0(CX), DX
+480f4511|223344556677885f5f5f5f5f 64 gnu cmovne (%rcx),%rdx
+480f4511|223344556677885f5f5f5f5f 64 intel cmovnz rdx, qword ptr [rcx]
+480f4511|223344556677885f5f5f5f5f 64 plan9 CMOVNE 0(CX), DX
+480f4611|223344556677885f5f5f5f5f 64 gnu cmovbe (%rcx),%rdx
+480f4611|223344556677885f5f5f5f5f 64 intel cmovbe rdx, qword ptr [rcx]
+480f4611|223344556677885f5f5f5f5f 64 plan9 CMOVBE 0(CX), DX
+480f4711|223344556677885f5f5f5f5f 64 gnu cmova (%rcx),%rdx
+480f4711|223344556677885f5f5f5f5f 64 intel cmovnbe rdx, qword ptr [rcx]
+480f4711|223344556677885f5f5f5f5f 64 plan9 CMOVA 0(CX), DX
+480f4811|223344556677885f5f5f5f5f 64 gnu cmovs (%rcx),%rdx
+480f4811|223344556677885f5f5f5f5f 64 intel cmovs rdx, qword ptr [rcx]
+480f4811|223344556677885f5f5f5f5f 64 plan9 CMOVS 0(CX), DX
+480f4911|223344556677885f5f5f5f5f 64 gnu cmovns (%rcx),%rdx
+480f4911|223344556677885f5f5f5f5f 64 intel cmovns rdx, qword ptr [rcx]
+480f4911|223344556677885f5f5f5f5f 64 plan9 CMOVNS 0(CX), DX
+480f4a11|223344556677885f5f5f5f5f 64 gnu cmovp (%rcx),%rdx
+480f4a11|223344556677885f5f5f5f5f 64 intel cmovp rdx, qword ptr [rcx]
+480f4a11|223344556677885f5f5f5f5f 64 plan9 CMOVP 0(CX), DX
+480f4b11|223344556677885f5f5f5f5f 64 gnu cmovnp (%rcx),%rdx
+480f4b11|223344556677885f5f5f5f5f 64 intel cmovnp rdx, qword ptr [rcx]
+480f4b11|223344556677885f5f5f5f5f 64 plan9 CMOVNP 0(CX), DX
+480f4c11|223344556677885f5f5f5f5f 64 gnu cmovl (%rcx),%rdx
+480f4c11|223344556677885f5f5f5f5f 64 intel cmovl rdx, qword ptr [rcx]
+480f4c11|223344556677885f5f5f5f5f 64 plan9 CMOVL 0(CX), DX
+480f4d11|223344556677885f5f5f5f5f 64 gnu cmovge (%rcx),%rdx
+480f4d11|223344556677885f5f5f5f5f 64 intel cmovnl rdx, qword ptr [rcx]
+480f4d11|223344556677885f5f5f5f5f 64 plan9 CMOVGE 0(CX), DX
+480f4e11|223344556677885f5f5f5f5f 64 gnu cmovle (%rcx),%rdx
+480f4e11|223344556677885f5f5f5f5f 64 intel cmovle rdx, qword ptr [rcx]
+480f4e11|223344556677885f5f5f5f5f 64 plan9 CMOVLE 0(CX), DX
+480f4f11|223344556677885f5f5f5f5f 64 gnu cmovg (%rcx),%rdx
+480f4f11|223344556677885f5f5f5f5f 64 intel cmovnle rdx, qword ptr [rcx]
+480f4f11|223344556677885f5f5f5f5f 64 plan9 CMOVG 0(CX), DX
+480f6e11|223344556677885f5f5f5f5f 64 gnu movq (%rcx),%mm2
+480f6e11|223344556677885f5f5f5f5f 64 intel movq mmx2, qword ptr [rcx]
+480f6e11|223344556677885f5f5f5f5f 64 plan9 MOVQ 0(CX), M2
+480f7e11|223344556677885f5f5f5f5f 64 gnu movq %mm2,(%rcx)
+480f7e11|223344556677885f5f5f5f5f 64 intel movq qword ptr [rcx], mmx2
+480f7e11|223344556677885f5f5f5f5f 64 plan9 MOVQ M2, 0(CX)
+480f8011223344|556677885f5f5f5f5f 64 gnu jo .+0x44332211
+480f8011223344|556677885f5f5f5f5f 64 intel jo .+0x44332211
+480f8011223344|556677885f5f5f5f5f 64 plan9 JO .+1144201745
+480f8111223344|556677885f5f5f5f5f 64 gnu jno .+0x44332211
+480f8111223344|556677885f5f5f5f5f 64 intel jno .+0x44332211
+480f8111223344|556677885f5f5f5f5f 64 plan9 JNO .+1144201745
+480f8211223344|556677885f5f5f5f5f 64 gnu jb .+0x44332211
+480f8211223344|556677885f5f5f5f5f 64 intel jb .+0x44332211
+480f8211223344|556677885f5f5f5f5f 64 plan9 JB .+1144201745
+480f8311223344|556677885f5f5f5f5f 64 gnu jae .+0x44332211
+480f8311223344|556677885f5f5f5f5f 64 intel jnb .+0x44332211
+480f8311223344|556677885f5f5f5f5f 64 plan9 JAE .+1144201745
+480f8411223344|556677885f5f5f5f5f 64 gnu je .+0x44332211
+480f8411223344|556677885f5f5f5f5f 64 intel jz .+0x44332211
+480f8411223344|556677885f5f5f5f5f 64 plan9 JE .+1144201745
+480f8511223344|556677885f5f5f5f5f 64 gnu jne .+0x44332211
+480f8511223344|556677885f5f5f5f5f 64 intel jnz .+0x44332211
+480f8511223344|556677885f5f5f5f5f 64 plan9 JNE .+1144201745
+480f8611223344|556677885f5f5f5f5f 64 gnu jbe .+0x44332211
+480f8611223344|556677885f5f5f5f5f 64 intel jbe .+0x44332211
+480f8611223344|556677885f5f5f5f5f 64 plan9 JBE .+1144201745
+480f8711223344|556677885f5f5f5f5f 64 gnu ja .+0x44332211
+480f8711223344|556677885f5f5f5f5f 64 intel jnbe .+0x44332211
+480f8711223344|556677885f5f5f5f5f 64 plan9 JA .+1144201745
+480f8811223344|556677885f5f5f5f5f 64 gnu js .+0x44332211
+480f8811223344|556677885f5f5f5f5f 64 intel js .+0x44332211
+480f8811223344|556677885f5f5f5f5f 64 plan9 JS .+1144201745
+480f8911223344|556677885f5f5f5f5f 64 gnu jns .+0x44332211
+480f8911223344|556677885f5f5f5f5f 64 intel jns .+0x44332211
+480f8911223344|556677885f5f5f5f5f 64 plan9 JNS .+1144201745
+480f8a11223344|556677885f5f5f5f5f 64 gnu jp .+0x44332211
+480f8a11223344|556677885f5f5f5f5f 64 intel jp .+0x44332211
+480f8a11223344|556677885f5f5f5f5f 64 plan9 JP .+1144201745
+480f8b11223344|556677885f5f5f5f5f 64 gnu jnp .+0x44332211
+480f8b11223344|556677885f5f5f5f5f 64 intel jnp .+0x44332211
+480f8b11223344|556677885f5f5f5f5f 64 plan9 JNP .+1144201745
+480f8c11223344|556677885f5f5f5f5f 64 gnu jl .+0x44332211
+480f8c11223344|556677885f5f5f5f5f 64 intel jl .+0x44332211
+480f8c11223344|556677885f5f5f5f5f 64 plan9 JL .+1144201745
+480f8d11223344|556677885f5f5f5f5f 64 gnu jge .+0x44332211
+480f8d11223344|556677885f5f5f5f5f 64 intel jnl .+0x44332211
+480f8d11223344|556677885f5f5f5f5f 64 plan9 JGE .+1144201745
+480f8e11223344|556677885f5f5f5f5f 64 gnu jle .+0x44332211
+480f8e11223344|556677885f5f5f5f5f 64 intel jle .+0x44332211
+480f8e11223344|556677885f5f5f5f5f 64 plan9 JLE .+1144201745
+480f8f11223344|556677885f5f5f5f5f 64 gnu jg .+0x44332211
+480f8f11223344|556677885f5f5f5f5f 64 intel jnle .+0x44332211
+480f8f11223344|556677885f5f5f5f5f 64 plan9 JG .+1144201745
+480fa1|11223344556677885f5f5f5f5f 64 gnu popq %fs
+480fa1|11223344556677885f5f5f5f5f 64 intel pop fs
+480fa1|11223344556677885f5f5f5f5f 64 plan9 POPQ FS
+480fa311|223344556677885f5f5f5f5f 64 gnu bt %rdx,(%rcx)
+480fa311|223344556677885f5f5f5f5f 64 intel bt qword ptr [rcx], rdx
+480fa311|223344556677885f5f5f5f5f 64 plan9 BTQ DX, 0(CX)
+480fa41122|3344556677885f5f5f5f5f 64 gnu shld $0x22,%rdx,(%rcx)
+480fa41122|3344556677885f5f5f5f5f 64 intel shld qword ptr [rcx], rdx, 0x22
+480fa41122|3344556677885f5f5f5f5f 64 plan9 SHLDQ $0x22, DX, 0(CX)
+480fa511|223344556677885f5f5f5f5f 64 gnu shld %cl,%rdx,(%rcx)
+480fa511|223344556677885f5f5f5f5f 64 intel shld qword ptr [rcx], rdx, cl
+480fa511|223344556677885f5f5f5f5f 64 plan9 SHLDQ CL, DX, 0(CX)
+480fa9|11223344556677885f5f5f5f5f 64 gnu popq %gs
+480fa9|11223344556677885f5f5f5f5f 64 intel pop gs
+480fa9|11223344556677885f5f5f5f5f 64 plan9 POPQ GS
+480fab11|223344556677885f5f5f5f5f 64 gnu bts %rdx,(%rcx)
+480fab11|223344556677885f5f5f5f5f 64 intel bts qword ptr [rcx], rdx
+480fab11|223344556677885f5f5f5f5f 64 plan9 BTSQ DX, 0(CX)
+480fac1122|3344556677885f5f5f5f5f 64 gnu shrd $0x22,%rdx,(%rcx)
+480fac1122|3344556677885f5f5f5f5f 64 intel shrd qword ptr [rcx], rdx, 0x22
+480fac1122|3344556677885f5f5f5f5f 64 plan9 SHRDQ $0x22, DX, 0(CX)
+480fad11|223344556677885f5f5f5f5f 64 gnu shrd %cl,%rdx,(%rcx)
+480fad11|223344556677885f5f5f5f5f 64 intel shrd qword ptr [rcx], rdx, cl
+480fad11|223344556677885f5f5f5f5f 64 plan9 SHRDQ CL, DX, 0(CX)
+480fae00|11223344556677885f5f5f5f 64 gnu fxsave64 (%rax)
+480fae00|11223344556677885f5f5f5f 64 intel fxsave64 ptr [rax]
+480fae00|11223344556677885f5f5f5f 64 plan9 FXSAVE64 0(AX)
+480fae08|11223344556677885f5f5f5f 64 gnu fxrstor64 (%rax)
+480fae08|11223344556677885f5f5f5f 64 intel fxrstor64 ptr [rax]
+480fae08|11223344556677885f5f5f5f 64 plan9 FXRSTOR64 0(AX)
+480fae20|11223344556677885f5f5f5f 64 gnu xsave64 (%rax)
+480fae20|11223344556677885f5f5f5f 64 intel xsave64 ptr [rax]
+480fae20|11223344556677885f5f5f5f 64 plan9 XSAVE64 0(AX)
+480fae28|11223344556677885f5f5f5f 64 gnu xrstor64 (%rax)
+480fae28|11223344556677885f5f5f5f 64 intel xrstor64 ptr [rax]
+480fae28|11223344556677885f5f5f5f 64 plan9 XRSTOR64 0(AX)
+480fae30|11223344556677885f5f5f5f 64 gnu xsaveopt64 (%rax)
+480fae30|11223344556677885f5f5f5f 64 intel xsaveopt64 ptr [rax]
+480fae30|11223344556677885f5f5f5f 64 plan9 XSAVEOPT64 0(AX)
+480faf11|223344556677885f5f5f5f5f 64 gnu imul (%rcx),%rdx
+480faf11|223344556677885f5f5f5f5f 64 intel imul rdx, qword ptr [rcx]
+480faf11|223344556677885f5f5f5f5f 64 plan9 IMULQ 0(CX), DX
+480fb111|223344556677885f5f5f5f5f 64 gnu cmpxchg %rdx,(%rcx)
+480fb111|223344556677885f5f5f5f5f 64 intel cmpxchg qword ptr [rcx], rdx
+480fb111|223344556677885f5f5f5f5f 64 plan9 CMPXCHGQ DX, 0(CX)
+480fb211|223344556677885f5f5f5f5f 64 gnu lss (%rcx),%rdx
+480fb211|223344556677885f5f5f5f5f 64 intel lss rdx, ptr [rcx]
+480fb211|223344556677885f5f5f5f5f 64 plan9 LSS 0(CX), DX
+480fb311|223344556677885f5f5f5f5f 64 gnu btr %rdx,(%rcx)
+480fb311|223344556677885f5f5f5f5f 64 intel btr qword ptr [rcx], rdx
+480fb311|223344556677885f5f5f5f5f 64 plan9 BTRQ DX, 0(CX)
+480fb411|223344556677885f5f5f5f5f 64 gnu lfs (%rcx),%rdx
+480fb411|223344556677885f5f5f5f5f 64 intel lfs rdx, ptr [rcx]
+480fb411|223344556677885f5f5f5f5f 64 plan9 LFS 0(CX), DX
+480fb511|223344556677885f5f5f5f5f 64 gnu lgs (%rcx),%rdx
+480fb511|223344556677885f5f5f5f5f 64 intel lgs rdx, ptr [rcx]
+480fb511|223344556677885f5f5f5f5f 64 plan9 LGS 0(CX), DX
+480fb611|223344556677885f5f5f5f5f 64 gnu movzbq (%rcx),%rdx
+480fb611|223344556677885f5f5f5f5f 64 intel movzx rdx, byte ptr [rcx]
+480fb611|223344556677885f5f5f5f5f 64 plan9 MOVZX 0(CX), DX
+480fb711|223344556677885f5f5f5f5f 64 gnu movzwq (%rcx),%rdx
+480fb711|223344556677885f5f5f5f5f 64 intel movzx rdx, word ptr [rcx]
+480fb711|223344556677885f5f5f5f5f 64 plan9 MOVZX 0(CX), DX
+480fba2011|223344556677885f5f5f5f 64 gnu btq $0x11,(%rax)
+480fba2011|223344556677885f5f5f5f 64 intel bt qword ptr [rax], 0x11
+480fba2011|223344556677885f5f5f5f 64 plan9 BTQ $0x11, 0(AX)
+480fba2811|223344556677885f5f5f5f 64 gnu btsq $0x11,(%rax)
+480fba2811|223344556677885f5f5f5f 64 intel bts qword ptr [rax], 0x11
+480fba2811|223344556677885f5f5f5f 64 plan9 BTSQ $0x11, 0(AX)
+480fba3011|223344556677885f5f5f5f 64 gnu btrq $0x11,(%rax)
+480fba3011|223344556677885f5f5f5f 64 intel btr qword ptr [rax], 0x11
+480fba3011|223344556677885f5f5f5f 64 plan9 BTRQ $0x11, 0(AX)
+480fba3811|223344556677885f5f5f5f 64 gnu btcq $0x11,(%rax)
+480fba3811|223344556677885f5f5f5f 64 intel btc qword ptr [rax], 0x11
+480fba3811|223344556677885f5f5f5f 64 plan9 BTCQ $0x11, 0(AX)
+480fbb11|223344556677885f5f5f5f5f 64 gnu btc %rdx,(%rcx)
+480fbb11|223344556677885f5f5f5f5f 64 intel btc qword ptr [rcx], rdx
+480fbb11|223344556677885f5f5f5f5f 64 plan9 BTCQ DX, 0(CX)
+480fbc11|223344556677885f5f5f5f5f 64 gnu bsf (%rcx),%rdx
+480fbc11|223344556677885f5f5f5f5f 64 intel bsf rdx, qword ptr [rcx]
+480fbc11|223344556677885f5f5f5f5f 64 plan9 BSFQ 0(CX), DX
+480fbd11|223344556677885f5f5f5f5f 64 gnu bsr (%rcx),%rdx
+480fbd11|223344556677885f5f5f5f5f 64 intel bsr rdx, qword ptr [rcx]
+480fbd11|223344556677885f5f5f5f5f 64 plan9 BSRQ 0(CX), DX
+480fbe11|223344556677885f5f5f5f5f 64 gnu movsbq (%rcx),%rdx
+480fbe11|223344556677885f5f5f5f5f 64 intel movsx rdx, byte ptr [rcx]
+480fbe11|223344556677885f5f5f5f5f 64 plan9 MOVSX 0(CX), DX
+480fbf11|223344556677885f5f5f5f5f 64 gnu movswq (%rcx),%rdx
+480fbf11|223344556677885f5f5f5f5f 64 intel movsx rdx, word ptr [rcx]
+480fbf11|223344556677885f5f5f5f5f 64 plan9 MOVSX 0(CX), DX
+480fc111|223344556677885f5f5f5f5f 64 gnu xadd %rdx,(%rcx)
+480fc111|223344556677885f5f5f5f5f 64 intel xadd qword ptr [rcx], rdx
+480fc111|223344556677885f5f5f5f5f 64 plan9 XADDQ DX, 0(CX)
+480fc311|223344556677885f5f5f5f5f 64 gnu movnti %rdx,(%rcx)
+480fc311|223344556677885f5f5f5f5f 64 intel movnti qword ptr [rcx], rdx
+480fc311|223344556677885f5f5f5f5f 64 plan9 MOVNTIQ DX, 0(CX)
+480fc708|11223344556677885f5f5f5f 64 gnu cmpxchg16b (%rax)
+480fc708|11223344556677885f5f5f5f 64 intel cmpxchg16b xmmword ptr [rax]
+480fc708|11223344556677885f5f5f5f 64 plan9 CMPXCHG16B 0(AX)
+480fc718|11223344556677885f5f5f5f 64 gnu xrstors64 (%rax)
+480fc718|11223344556677885f5f5f5f 64 intel xrstors64 ptr [rax]
+480fc718|11223344556677885f5f5f5f 64 plan9 XRSTORS64 0(AX)
+480fc720|11223344556677885f5f5f5f 64 gnu xsavec64 (%rax)
+480fc720|11223344556677885f5f5f5f 64 intel xsavec64 ptr [rax]
+480fc720|11223344556677885f5f5f5f 64 plan9 XSAVEC64 0(AX)
+480fc728|11223344556677885f5f5f5f 64 gnu xsaves64 (%rax)
+480fc728|11223344556677885f5f5f5f 64 intel xsaves64 ptr [rax]
+480fc728|11223344556677885f5f5f5f 64 plan9 XSAVES64 0(AX)
+480fc730|11223344556677885f5f5f5f 64 gnu rdrand
+480fc730|11223344556677885f5f5f5f 64 intel rdrand
+480fc730|11223344556677885f5f5f5f 64 plan9 RDRAND
+480fc8|11223344556677885f5f5f5f5f 64 gnu bswap %rax
+480fc8|11223344556677885f5f5f5f5f 64 intel bswap rax
+480fc8|11223344556677885f5f5f5f5f 64 plan9 BSWAP AX
+481122|3344556677885f5f5f5f5f5f5f 64 gnu adc %rsp,(%rdx)
+481122|3344556677885f5f5f5f5f5f5f 64 intel adc qword ptr [rdx], rsp
+481122|3344556677885f5f5f5f5f5f5f 64 plan9 ADCQ SP, 0(DX)
+481311|223344556677885f5f5f5f5f5f 64 gnu adc (%rcx),%rdx
+481311|223344556677885f5f5f5f5f5f 64 intel adc rdx, qword ptr [rcx]
+481311|223344556677885f5f5f5f5f5f 64 plan9 ADCQ 0(CX), DX
+481511223344|556677885f5f5f5f5f5f 64 gnu adc $0x44332211,%rax
+481511223344|556677885f5f5f5f5f5f 64 intel adc rax, 0x44332211
+481511223344|556677885f5f5f5f5f5f 64 plan9 ADCQ $0x44332211, AX
+481911|223344556677885f5f5f5f5f5f 64 gnu sbb %rdx,(%rcx)
+481911|223344556677885f5f5f5f5f5f 64 intel sbb qword ptr [rcx], rdx
+481911|223344556677885f5f5f5f5f5f 64 plan9 SBBQ DX, 0(CX)
+481b11|223344556677885f5f5f5f5f5f 64 gnu sbb (%rcx),%rdx
+481b11|223344556677885f5f5f5f5f5f 64 intel sbb rdx, qword ptr [rcx]
+481b11|223344556677885f5f5f5f5f5f 64 plan9 SBBQ 0(CX), DX
+481d11223344|556677885f5f5f5f5f5f 64 gnu sbb $0x44332211,%rax
+481d11223344|556677885f5f5f5f5f5f 64 intel sbb rax, 0x44332211
+481d11223344|556677885f5f5f5f5f5f 64 plan9 SBBQ $0x44332211, AX
+482111|223344556677885f5f5f5f5f5f 64 gnu and %rdx,(%rcx)
+482111|223344556677885f5f5f5f5f5f 64 intel and qword ptr [rcx], rdx
+482111|223344556677885f5f5f5f5f5f 64 plan9 ANDQ DX, 0(CX)
+482311|223344556677885f5f5f5f5f5f 64 gnu and (%rcx),%rdx
+482311|223344556677885f5f5f5f5f5f 64 intel and rdx, qword ptr [rcx]
+482311|223344556677885f5f5f5f5f5f 64 plan9 ANDQ 0(CX), DX
+482511223344|556677885f5f5f5f5f5f 64 gnu and $0x44332211,%rax
+482511223344|556677885f5f5f5f5f5f 64 intel and rax, 0x44332211
+482511223344|556677885f5f5f5f5f5f 64 plan9 ANDQ $0x44332211, AX
+482911|223344556677885f5f5f5f5f5f 64 gnu sub %rdx,(%rcx)
+482911|223344556677885f5f5f5f5f5f 64 intel sub qword ptr [rcx], rdx
+482911|223344556677885f5f5f5f5f5f 64 plan9 SUBQ DX, 0(CX)
+482b11|223344556677885f5f5f5f5f5f 64 gnu sub (%rcx),%rdx
+482b11|223344556677885f5f5f5f5f5f 64 intel sub rdx, qword ptr [rcx]
+482b11|223344556677885f5f5f5f5f5f 64 plan9 SUBQ 0(CX), DX
+482d11223344|556677885f5f5f5f5f5f 64 gnu sub $0x44332211,%rax
+482d11223344|556677885f5f5f5f5f5f 64 intel sub rax, 0x44332211
+482d11223344|556677885f5f5f5f5f5f 64 plan9 SUBQ $0x44332211, AX
+483111|223344556677885f5f5f5f5f5f 64 gnu xor %rdx,(%rcx)
+483111|223344556677885f5f5f5f5f5f 64 intel xor qword ptr [rcx], rdx
+483111|223344556677885f5f5f5f5f5f 64 plan9 XORQ DX, 0(CX)
+483311|223344556677885f5f5f5f5f5f 64 gnu xor (%rcx),%rdx
+483311|223344556677885f5f5f5f5f5f 64 intel xor rdx, qword ptr [rcx]
+483311|223344556677885f5f5f5f5f5f 64 plan9 XORQ 0(CX), DX
+483511223344|556677885f5f5f5f5f5f 64 gnu xor $0x44332211,%rax
+483511223344|556677885f5f5f5f5f5f 64 intel xor rax, 0x44332211
+483511223344|556677885f5f5f5f5f5f 64 plan9 XORQ $0x44332211, AX
+483911|223344556677885f5f5f5f5f5f 64 gnu cmp %rdx,(%rcx)
+483911|223344556677885f5f5f5f5f5f 64 intel cmp qword ptr [rcx], rdx
+483911|223344556677885f5f5f5f5f5f 64 plan9 CMPQ DX, 0(CX)
+483b11|223344556677885f5f5f5f5f5f 64 gnu cmp (%rcx),%rdx
+483b11|223344556677885f5f5f5f5f5f 64 intel cmp rdx, qword ptr [rcx]
+483b11|223344556677885f5f5f5f5f5f 64 plan9 CMPQ 0(CX), DX
+483d11223344|556677885f5f5f5f5f5f 64 gnu cmp $0x44332211,%rax
+483d11223344|556677885f5f5f5f5f5f 64 intel cmp rax, 0x44332211
+483d11223344|556677885f5f5f5f5f5f 64 plan9 CMPQ $0x44332211, AX
+4850|11223344556677885f5f5f5f5f5f 64 gnu push %rax
+4850|11223344556677885f5f5f5f5f5f 64 intel push rax
+4850|11223344556677885f5f5f5f5f5f 64 plan9 PUSHQ AX
+4858|11223344556677885f5f5f5f5f5f 64 gnu pop %rax
+4858|11223344556677885f5f5f5f5f5f 64 intel pop rax
+4858|11223344556677885f5f5f5f5f5f 64 plan9 POPQ AX
+486311|223344556677885f5f5f5f5f5f 64 gnu movsxd (%rcx),%rdx
+486311|223344556677885f5f5f5f5f5f 64 intel movsxd rdx, dword ptr [rcx]
+486311|223344556677885f5f5f5f5f5f 64 plan9 MOVSXD 0(CX), DX
+486811223344|556677885f5f5f5f5f5f 64 gnu pushq $0x44332211
+486811223344|556677885f5f5f5f5f5f 64 intel push 0x44332211
+486811223344|556677885f5f5f5f5f5f 64 plan9 PUSHQ $0x44332211
+48691122334455|6677885f5f5f5f5f5f 64 gnu imul $0x55443322,(%rcx),%rdx
+48691122334455|6677885f5f5f5f5f5f 64 intel imul rdx, qword ptr [rcx], 0x55443322
+48691122334455|6677885f5f5f5f5f5f 64 plan9 IMULQ $0x55443322, 0(CX), DX
+486b1122|3344556677885f5f5f5f5f5f 64 gnu imul $0x22,(%rcx),%rdx
+486b1122|3344556677885f5f5f5f5f5f 64 intel imul rdx, qword ptr [rcx], 0x22
+486b1122|3344556677885f5f5f5f5f5f 64 plan9 IMULQ $0x22, 0(CX), DX
+486d|11223344556677885f5f5f5f5f5f 64 gnu insl (%dx),%es:(%rdi)
+486d|11223344556677885f5f5f5f5f5f 64 intel insd
+486d|11223344556677885f5f5f5f5f5f 64 plan9 INSD DX, ES:0(DI)
+486f|11223344556677885f5f5f5f5f5f 64 gnu outsl %ds:(%rsi),(%dx)
+486f|11223344556677885f5f5f5f5f5f 64 intel outsd
+486f|11223344556677885f5f5f5f5f5f 64 plan9 OUTSD DS:0(SI), DX
+48810011223344|556677885f5f5f5f5f 64 gnu addq $0x44332211,(%rax)
+48810011223344|556677885f5f5f5f5f 64 intel add qword ptr [rax], 0x44332211
+48810011223344|556677885f5f5f5f5f 64 plan9 ADDQ $0x44332211, 0(AX)
+48810811223344|556677885f5f5f5f5f 64 gnu orq $0x44332211,(%rax)
+48810811223344|556677885f5f5f5f5f 64 intel or qword ptr [rax], 0x44332211
+48810811223344|556677885f5f5f5f5f 64 plan9 ORQ $0x44332211, 0(AX)
+48811122334455|6677885f5f5f5f5f5f 64 gnu adcq $0x55443322,(%rcx)
+48811122334455|6677885f5f5f5f5f5f 64 intel adc qword ptr [rcx], 0x55443322
+48811122334455|6677885f5f5f5f5f5f 64 plan9 ADCQ $0x55443322, 0(CX)
+48811811223344|556677885f5f5f5f5f 64 gnu sbbq $0x44332211,(%rax)
+48811811223344|556677885f5f5f5f5f 64 intel sbb qword ptr [rax], 0x44332211
+48811811223344|556677885f5f5f5f5f 64 plan9 SBBQ $0x44332211, 0(AX)
+48812011223344|556677885f5f5f5f5f 64 gnu andq $0x44332211,(%rax)
+48812011223344|556677885f5f5f5f5f 64 intel and qword ptr [rax], 0x44332211
+48812011223344|556677885f5f5f5f5f 64 plan9 ANDQ $0x44332211, 0(AX)
+48812811223344|556677885f5f5f5f5f 64 gnu subq $0x44332211,(%rax)
+48812811223344|556677885f5f5f5f5f 64 intel sub qword ptr [rax], 0x44332211
+48812811223344|556677885f5f5f5f5f 64 plan9 SUBQ $0x44332211, 0(AX)
+48813011223344|556677885f5f5f5f5f 64 gnu xorq $0x44332211,(%rax)
+48813011223344|556677885f5f5f5f5f 64 intel xor qword ptr [rax], 0x44332211
+48813011223344|556677885f5f5f5f5f 64 plan9 XORQ $0x44332211, 0(AX)
+48813811223344|556677885f5f5f5f5f 64 gnu cmpq $0x44332211,(%rax)
+48813811223344|556677885f5f5f5f5f 64 intel cmp qword ptr [rax], 0x44332211
+48813811223344|556677885f5f5f5f5f 64 plan9 CMPQ $0x44332211, 0(AX)
+48830011|223344556677885f5f5f5f5f 64 gnu addq $0x11,(%rax)
+48830011|223344556677885f5f5f5f5f 64 intel add qword ptr [rax], 0x11
+48830011|223344556677885f5f5f5f5f 64 plan9 ADDQ $0x11, 0(AX)
+48830811|223344556677885f5f5f5f5f 64 gnu orq $0x11,(%rax)
+48830811|223344556677885f5f5f5f5f 64 intel or qword ptr [rax], 0x11
+48830811|223344556677885f5f5f5f5f 64 plan9 ORQ $0x11, 0(AX)
+48831122|3344556677885f5f5f5f5f5f 64 gnu adcq $0x22,(%rcx)
+48831122|3344556677885f5f5f5f5f5f 64 intel adc qword ptr [rcx], 0x22
+48831122|3344556677885f5f5f5f5f5f 64 plan9 ADCQ $0x22, 0(CX)
+48831811|223344556677885f5f5f5f5f 64 gnu sbbq $0x11,(%rax)
+48831811|223344556677885f5f5f5f5f 64 intel sbb qword ptr [rax], 0x11
+48831811|223344556677885f5f5f5f5f 64 plan9 SBBQ $0x11, 0(AX)
+48832011|223344556677885f5f5f5f5f 64 gnu andq $0x11,(%rax)
+48832011|223344556677885f5f5f5f5f 64 intel and qword ptr [rax], 0x11
+48832011|223344556677885f5f5f5f5f 64 plan9 ANDQ $0x11, 0(AX)
+48832811|223344556677885f5f5f5f5f 64 gnu subq $0x11,(%rax)
+48832811|223344556677885f5f5f5f5f 64 intel sub qword ptr [rax], 0x11
+48832811|223344556677885f5f5f5f5f 64 plan9 SUBQ $0x11, 0(AX)
+48833011|223344556677885f5f5f5f5f 64 gnu xorq $0x11,(%rax)
+48833011|223344556677885f5f5f5f5f 64 intel xor qword ptr [rax], 0x11
+48833011|223344556677885f5f5f5f5f 64 plan9 XORQ $0x11, 0(AX)
+48833811|223344556677885f5f5f5f5f 64 gnu cmpq $0x11,(%rax)
+48833811|223344556677885f5f5f5f5f 64 intel cmp qword ptr [rax], 0x11
+48833811|223344556677885f5f5f5f5f 64 plan9 CMPQ $0x11, 0(AX)
+488511|223344556677885f5f5f5f5f5f 64 gnu test %rdx,(%rcx)
+488511|223344556677885f5f5f5f5f5f 64 intel test qword ptr [rcx], rdx
+488511|223344556677885f5f5f5f5f5f 64 plan9 TESTQ DX, 0(CX)
+488711|223344556677885f5f5f5f5f5f 64 gnu xchg %rdx,(%rcx)
+488711|223344556677885f5f5f5f5f5f 64 intel xchg qword ptr [rcx], rdx
+488711|223344556677885f5f5f5f5f5f 64 plan9 XCHGQ DX, 0(CX)
+488911|223344556677885f5f5f5f5f5f 64 gnu mov %rdx,(%rcx)
+488911|223344556677885f5f5f5f5f5f 64 intel mov qword ptr [rcx], rdx
+488911|223344556677885f5f5f5f5f5f 64 plan9 MOVQ DX, 0(CX)
+488b11|223344556677885f5f5f5f5f5f 64 gnu mov (%rcx),%rdx
+488b11|223344556677885f5f5f5f5f5f 64 intel mov rdx, qword ptr [rcx]
+488b11|223344556677885f5f5f5f5f5f 64 plan9 MOVQ 0(CX), DX
+488c11|223344556677885f5f5f5f5f5f 64 gnu mov %ss,(%rcx)
+488c11|223344556677885f5f5f5f5f5f 64 intel mov word ptr [rcx], ss
+488c11|223344556677885f5f5f5f5f5f 64 plan9 MOVQ SS, 0(CX)
+488d11|223344556677885f5f5f5f5f5f 64 gnu lea (%rcx),%rdx
+488d11|223344556677885f5f5f5f5f5f 64 intel lea rdx, ptr [rcx]
+488d11|223344556677885f5f5f5f5f5f 64 plan9 LEAQ 0(CX), DX
+488e11|223344556677885f5f5f5f5f5f 64 gnu mov (%rcx),%ss
+488e11|223344556677885f5f5f5f5f5f 64 intel mov ss, word ptr [rcx]
+488e11|223344556677885f5f5f5f5f5f 64 plan9 MOVQ 0(CX), SS
+488f00|11223344556677885f5f5f5f5f 64 gnu popq (%rax)
+488f00|11223344556677885f5f5f5f5f 64 intel pop qword ptr [rax]
+488f00|11223344556677885f5f5f5f5f 64 plan9 POPQ 0(AX)
+4891|11223344556677885f5f5f5f5f5f 64 gnu xchg %rax,%rcx
+4891|11223344556677885f5f5f5f5f5f 64 intel xchg rcx, rax
+4891|11223344556677885f5f5f5f5f5f 64 plan9 XCHGQ AX, CX
+4898|11223344556677885f5f5f5f5f5f 64 gnu cdqe
+4898|11223344556677885f5f5f5f5f5f 64 intel cdqe
+4898|11223344556677885f5f5f5f5f5f 64 plan9 CDQE
+4899|11223344556677885f5f5f5f5f5f 64 gnu cqto
+4899|11223344556677885f5f5f5f5f5f 64 intel cqo
+4899|11223344556677885f5f5f5f5f5f 64 plan9 CQO
+489c|11223344556677885f5f5f5f5f5f 64 gnu pushfq
+489c|11223344556677885f5f5f5f5f5f 64 intel pushfq
+489c|11223344556677885f5f5f5f5f5f 64 plan9 PUSHFQ
+489d|11223344556677885f5f5f5f5f5f 64 gnu popfq
+489d|11223344556677885f5f5f5f5f5f 64 intel popfq
+489d|11223344556677885f5f5f5f5f5f 64 plan9 POPFQ
+48a01122334455667788|5f5f5f5f5f5f 64 gnu mov -0x778899aabbccddef,%al
+48a01122334455667788|5f5f5f5f5f5f 64 intel mov al, byte ptr [0x8877665544332211]
+48a01122334455667788|5f5f5f5f5f5f 64 plan9 MOVQ -0x778899aabbccddef, AL
+48a11122334455667788|5f5f5f5f5f5f 64 gnu mov -0x778899aabbccddef,%rax
+48a11122334455667788|5f5f5f5f5f5f 64 intel mov rax, qword ptr [0x8877665544332211]
+48a11122334455667788|5f5f5f5f5f5f 64 plan9 MOVQ -0x778899aabbccddef, AX
+48a21122334455667788|5f5f5f5f5f5f 64 gnu mov %al,-0x778899aabbccddef
+48a21122334455667788|5f5f5f5f5f5f 64 intel mov byte ptr [0x8877665544332211], al
+48a21122334455667788|5f5f5f5f5f5f 64 plan9 MOVQ AL, -0x778899aabbccddef
+48a31122334455667788|5f5f5f5f5f5f 64 gnu mov %rax,-0x778899aabbccddef
+48a31122334455667788|5f5f5f5f5f5f 64 intel mov qword ptr [0x8877665544332211], rax
+48a31122334455667788|5f5f5f5f5f5f 64 plan9 MOVQ AX, -0x778899aabbccddef
+48a5|11223344556677885f5f5f5f5f5f 64 gnu movsq %ds:(%rsi),%es:(%rdi)
+48a5|11223344556677885f5f5f5f5f5f 64 intel movsq qword ptr [rdi], qword ptr [rsi]
+48a5|11223344556677885f5f5f5f5f5f 64 plan9 MOVSQ DS:0(SI), ES:0(DI)
+48a7|11223344556677885f5f5f5f5f5f 64 gnu cmpsq %es:(%rdi),%ds:(%rsi)
+48a7|11223344556677885f5f5f5f5f5f 64 intel cmpsq qword ptr [rsi], qword ptr [rdi]
+48a7|11223344556677885f5f5f5f5f5f 64 plan9 CMPSQ ES:0(DI), DS:0(SI)
+48a911223344|556677885f5f5f5f5f5f 64 gnu test $0x44332211,%rax
+48a911223344|556677885f5f5f5f5f5f 64 intel test rax, 0x44332211
+48a911223344|556677885f5f5f5f5f5f 64 plan9 TESTQ $0x44332211, AX
+48ab|11223344556677885f5f5f5f5f5f 64 gnu stos %rax,%es:(%rdi)
+48ab|11223344556677885f5f5f5f5f5f 64 intel stosq qword ptr [rdi]
+48ab|11223344556677885f5f5f5f5f5f 64 plan9 STOSQ AX, ES:0(DI)
+48ad|11223344556677885f5f5f5f5f5f 64 gnu lods %ds:(%rsi),%rax
+48ad|11223344556677885f5f5f5f5f5f 64 intel lodsq qword ptr [rsi]
+48ad|11223344556677885f5f5f5f5f5f 64 plan9 LODSQ DS:0(SI), AX
+48af|11223344556677885f5f5f5f5f5f 64 gnu scas %es:(%rdi),%rax
+48af|11223344556677885f5f5f5f5f5f 64 intel scasq qword ptr [rdi]
+48af|11223344556677885f5f5f5f5f5f 64 plan9 SCASQ ES:0(DI), AX
+48b81122334455667788|5f5f5f5f5f5f 64 gnu mov $-0x778899aabbccddef,%rax
+48b81122334455667788|5f5f5f5f5f5f 64 intel mov rax, 0x8877665544332211
+48b81122334455667788|5f5f5f5f5f5f 64 plan9 MOVQ $0x8877665544332211, AX
+48c10011|223344556677885f5f5f5f5f 64 gnu rolq $0x11,(%rax)
+48c10011|223344556677885f5f5f5f5f 64 intel rol qword ptr [rax], 0x11
+48c10011|223344556677885f5f5f5f5f 64 plan9 ROLQ $0x11, 0(AX)
+48c10811|223344556677885f5f5f5f5f 64 gnu rorq $0x11,(%rax)
+48c10811|223344556677885f5f5f5f5f 64 intel ror qword ptr [rax], 0x11
+48c10811|223344556677885f5f5f5f5f 64 plan9 RORQ $0x11, 0(AX)
+48c11122|3344556677885f5f5f5f5f5f 64 gnu rclq $0x22,(%rcx)
+48c11122|3344556677885f5f5f5f5f5f 64 intel rcl qword ptr [rcx], 0x22
+48c11122|3344556677885f5f5f5f5f5f 64 plan9 RCLQ $0x22, 0(CX)
+48c11811|223344556677885f5f5f5f5f 64 gnu rcrq $0x11,(%rax)
+48c11811|223344556677885f5f5f5f5f 64 intel rcr qword ptr [rax], 0x11
+48c11811|223344556677885f5f5f5f5f 64 plan9 RCRQ $0x11, 0(AX)
+48c12011|223344556677885f5f5f5f5f 64 gnu shlq $0x11,(%rax)
+48c12011|223344556677885f5f5f5f5f 64 intel shl qword ptr [rax], 0x11
+48c12011|223344556677885f5f5f5f5f 64 plan9 SHLQ $0x11, 0(AX)
+48c12811|223344556677885f5f5f5f5f 64 gnu shrq $0x11,(%rax)
+48c12811|223344556677885f5f5f5f5f 64 intel shr qword ptr [rax], 0x11
+48c12811|223344556677885f5f5f5f5f 64 plan9 SHRQ $0x11, 0(AX)
+48c13811|223344556677885f5f5f5f5f 64 gnu sarq $0x11,(%rax)
+48c13811|223344556677885f5f5f5f5f 64 intel sar qword ptr [rax], 0x11
+48c13811|223344556677885f5f5f5f5f 64 plan9 SARQ $0x11, 0(AX)
+48c70011223344|556677885f5f5f5f5f 64 gnu movq $0x44332211,(%rax)
+48c70011223344|556677885f5f5f5f5f 64 intel mov qword ptr [rax], 0x44332211
+48c70011223344|556677885f5f5f5f5f 64 plan9 MOVQ $0x44332211, 0(AX)
+48c7f811223344|556677885f5f5f5f5f 64 gnu xbeginq .+0x44332211
+48c7f811223344|556677885f5f5f5f5f 64 intel xbegin .+0x44332211
+48c7f811223344|556677885f5f5f5f5f 64 plan9 XBEGIN .+1144201745
+48c9|11223344556677885f5f5f5f5f5f 64 gnu leaveq
+48c9|11223344556677885f5f5f5f5f5f 64 intel leave
+48c9|11223344556677885f5f5f5f5f5f 64 plan9 LEAVE
+48cf|11223344556677885f5f5f5f5f5f 64 gnu iretq
+48cf|11223344556677885f5f5f5f5f5f 64 intel iretq
+48cf|11223344556677885f5f5f5f5f5f 64 plan9 IRETQ
+48d100|11223344556677885f5f5f5f5f 64 gnu rolq (%rax)
+48d100|11223344556677885f5f5f5f5f 64 intel rol qword ptr [rax], 0x1
+48d100|11223344556677885f5f5f5f5f 64 plan9 ROLQ $0x1, 0(AX)
+48d108|11223344556677885f5f5f5f5f 64 gnu rorq (%rax)
+48d108|11223344556677885f5f5f5f5f 64 intel ror qword ptr [rax], 0x1
+48d108|11223344556677885f5f5f5f5f 64 plan9 RORQ $0x1, 0(AX)
+48d111|223344556677885f5f5f5f5f5f 64 gnu rclq (%rcx)
+48d111|223344556677885f5f5f5f5f5f 64 intel rcl qword ptr [rcx], 0x1
+48d111|223344556677885f5f5f5f5f5f 64 plan9 RCLQ $0x1, 0(CX)
+48d118|11223344556677885f5f5f5f5f 64 gnu rcrq (%rax)
+48d118|11223344556677885f5f5f5f5f 64 intel rcr qword ptr [rax], 0x1
+48d118|11223344556677885f5f5f5f5f 64 plan9 RCRQ $0x1, 0(AX)
+48d120|11223344556677885f5f5f5f5f 64 gnu shlq (%rax)
+48d120|11223344556677885f5f5f5f5f 64 intel shl qword ptr [rax], 0x1
+48d120|11223344556677885f5f5f5f5f 64 plan9 SHLQ $0x1, 0(AX)
+48d128|11223344556677885f5f5f5f5f 64 gnu shrq (%rax)
+48d128|11223344556677885f5f5f5f5f 64 intel shr qword ptr [rax], 0x1
+48d128|11223344556677885f5f5f5f5f 64 plan9 SHRQ $0x1, 0(AX)
+48d138|11223344556677885f5f5f5f5f 64 gnu sarq (%rax)
+48d138|11223344556677885f5f5f5f5f 64 intel sar qword ptr [rax], 0x1
+48d138|11223344556677885f5f5f5f5f 64 plan9 SARQ $0x1, 0(AX)
+48d300|11223344556677885f5f5f5f5f 64 gnu rolq %cl,(%rax)
+48d300|11223344556677885f5f5f5f5f 64 intel rol qword ptr [rax], cl
+48d300|11223344556677885f5f5f5f5f 64 plan9 ROLQ CL, 0(AX)
+48d308|11223344556677885f5f5f5f5f 64 gnu rorq %cl,(%rax)
+48d308|11223344556677885f5f5f5f5f 64 intel ror qword ptr [rax], cl
+48d308|11223344556677885f5f5f5f5f 64 plan9 RORQ CL, 0(AX)
+48d311|223344556677885f5f5f5f5f5f 64 gnu rclq %cl,(%rcx)
+48d311|223344556677885f5f5f5f5f5f 64 intel rcl qword ptr [rcx], cl
+48d311|223344556677885f5f5f5f5f5f 64 plan9 RCLQ CL, 0(CX)
+48d318|11223344556677885f5f5f5f5f 64 gnu rcrq %cl,(%rax)
+48d318|11223344556677885f5f5f5f5f 64 intel rcr qword ptr [rax], cl
+48d318|11223344556677885f5f5f5f5f 64 plan9 RCRQ CL, 0(AX)
+48d320|11223344556677885f5f5f5f5f 64 gnu shlq %cl,(%rax)
+48d320|11223344556677885f5f5f5f5f 64 intel shl qword ptr [rax], cl
+48d320|11223344556677885f5f5f5f5f 64 plan9 SHLQ CL, 0(AX)
+48d328|11223344556677885f5f5f5f5f 64 gnu shrq %cl,(%rax)
+48d328|11223344556677885f5f5f5f5f 64 intel shr qword ptr [rax], cl
+48d328|11223344556677885f5f5f5f5f 64 plan9 SHRQ CL, 0(AX)
+48d338|11223344556677885f5f5f5f5f 64 gnu sarq %cl,(%rax)
+48d338|11223344556677885f5f5f5f5f 64 intel sar qword ptr [rax], cl
+48d338|11223344556677885f5f5f5f5f 64 plan9 SARQ CL, 0(AX)
+48d7|11223344556677885f5f5f5f5f5f 64 gnu xlat %ds:(%rbx)
+48d7|11223344556677885f5f5f5f5f5f 64 intel xlat
+48d7|11223344556677885f5f5f5f5f5f 64 plan9 XLATB DS:0(BX)
+48e511|223344556677885f5f5f5f5f5f 64 gnu in $0x11,%eax
+48e511|223344556677885f5f5f5f5f5f 64 intel in eax, 0x11
+48e511|223344556677885f5f5f5f5f5f 64 plan9 INQ $0x11, AX
+48e711|223344556677885f5f5f5f5f5f 64 gnu out %eax,$0x11
+48e711|223344556677885f5f5f5f5f5f 64 intel out 0x11, eax
+48e711|223344556677885f5f5f5f5f5f 64 plan9 OUTQ AX, $0x11
+48e811223344|556677885f5f5f5f5f5f 64 gnu callq .+0x44332211
+48e811223344|556677885f5f5f5f5f5f 64 intel call .+0x44332211
+48e811223344|556677885f5f5f5f5f5f 64 plan9 CALL .+1144201745
+48e911223344|556677885f5f5f5f5f5f 64 gnu jmpq .+0x44332211
+48e911223344|556677885f5f5f5f5f5f 64 intel jmp .+0x44332211
+48e911223344|556677885f5f5f5f5f5f 64 plan9 JMP .+1144201745
+48ed|11223344556677885f5f5f5f5f5f 64 gnu in (%dx),%eax
+48ed|11223344556677885f5f5f5f5f5f 64 intel in eax, dx
+48ed|11223344556677885f5f5f5f5f5f 64 plan9 INQ DX, AX
+48ef|11223344556677885f5f5f5f5f5f 64 gnu out %eax,(%dx)
+48ef|11223344556677885f5f5f5f5f5f 64 intel out dx, eax
+48ef|11223344556677885f5f5f5f5f5f 64 plan9 OUTQ AX, DX
+48f70011223344|556677885f5f5f5f5f 64 gnu testq $0x44332211,(%rax)
+48f70011223344|556677885f5f5f5f5f 64 intel test qword ptr [rax], 0x44332211
+48f70011223344|556677885f5f5f5f5f 64 plan9 TESTQ $0x44332211, 0(AX)
+48f711|223344556677885f5f5f5f5f5f 64 gnu notq (%rcx)
+48f711|223344556677885f5f5f5f5f5f 64 intel not qword ptr [rcx]
+48f711|223344556677885f5f5f5f5f5f 64 plan9 NOTQ 0(CX)
+48f718|11223344556677885f5f5f5f5f 64 gnu negq (%rax)
+48f718|11223344556677885f5f5f5f5f 64 intel neg qword ptr [rax]
+48f718|11223344556677885f5f5f5f5f 64 plan9 NEGQ 0(AX)
+48f720|11223344556677885f5f5f5f5f 64 gnu mulq (%rax)
+48f720|11223344556677885f5f5f5f5f 64 intel mul qword ptr [rax]
+48f720|11223344556677885f5f5f5f5f 64 plan9 MULQ 0(AX)
+48f728|11223344556677885f5f5f5f5f 64 gnu imulq (%rax)
+48f728|11223344556677885f5f5f5f5f 64 intel imul qword ptr [rax]
+48f728|11223344556677885f5f5f5f5f 64 plan9 IMULQ 0(AX)
+48f730|11223344556677885f5f5f5f5f 64 gnu divq (%rax)
+48f730|11223344556677885f5f5f5f5f 64 intel div qword ptr [rax]
+48f730|11223344556677885f5f5f5f5f 64 plan9 DIVQ 0(AX)
+48f738|11223344556677885f5f5f5f5f 64 gnu idivq (%rax)
+48f738|11223344556677885f5f5f5f5f 64 intel idiv qword ptr [rax]
+48f738|11223344556677885f5f5f5f5f 64 plan9 IDIVQ 0(AX)
+48ff00|11223344556677885f5f5f5f5f 64 gnu incq (%rax)
+48ff00|11223344556677885f5f5f5f5f 64 intel inc qword ptr [rax]
+48ff00|11223344556677885f5f5f5f5f 64 plan9 INCQ 0(AX)
+48ff08|11223344556677885f5f5f5f5f 64 gnu decq (%rax)
+48ff08|11223344556677885f5f5f5f5f 64 intel dec qword ptr [rax]
+48ff08|11223344556677885f5f5f5f5f 64 plan9 DECQ 0(AX)
+48ff18|11223344556677885f5f5f5f5f 64 gnu lcallq *(%rax)
+48ff18|11223344556677885f5f5f5f5f 64 intel call far ptr [rax]
+48ff18|11223344556677885f5f5f5f5f 64 plan9 LCALL 0(AX)
+48ff28|11223344556677885f5f5f5f5f 64 gnu ljmpq *(%rax)
+48ff28|11223344556677885f5f5f5f5f 64 intel jmp far ptr [rax]
+48ff28|11223344556677885f5f5f5f5f 64 plan9 LJMP 0(AX)
+48ff30|11223344556677885f5f5f5f5f 64 gnu pushq (%rax)
+48ff30|11223344556677885f5f5f5f5f 64 intel push qword ptr [rax]
+48ff30|11223344556677885f5f5f5f5f 64 plan9 PUSHQ 0(AX)
+48|010011223344556677885f5f5f5f5f 32 intel dec eax
+48|010011223344556677885f5f5f5f5f 32 plan9 DECL AX
+50|11223344556677885f5f5f5f5f5f5f 32 intel push eax
+50|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL AX
+50|11223344556677885f5f5f5f5f5f5f 64 gnu push %rax
+50|11223344556677885f5f5f5f5f5f5f 64 intel push rax
+50|11223344556677885f5f5f5f5f5f5f 64 plan9 PUSHL AX
+58|11223344556677885f5f5f5f5f5f5f 32 intel pop eax
+58|11223344556677885f5f5f5f5f5f5f 32 plan9 POPL AX
+58|11223344556677885f5f5f5f5f5f5f 64 gnu pop %rax
+58|11223344556677885f5f5f5f5f5f5f 64 intel pop rax
+58|11223344556677885f5f5f5f5f5f5f 64 plan9 POPL AX
+60|11223344556677885f5f5f5f5f5f5f 32 intel pushad
+60|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHAD
+60|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+60|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+60|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+61|11223344556677885f5f5f5f5f5f5f 32 intel popad
+61|11223344556677885f5f5f5f5f5f5f 32 plan9 POPAD
+61|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+61|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+61|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+6211|223344556677885f5f5f5f5f5f5f 32 intel bound edx, qword ptr [ecx]
+6211|223344556677885f5f5f5f5f5f5f 32 plan9 BOUND 0(CX), DX
+62|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+62|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+62|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+6311|223344556677885f5f5f5f5f5f5f 32 intel arpl word ptr [ecx], dx
+6311|223344556677885f5f5f5f5f5f5f 32 plan9 ARPL DX, 0(CX)
+6311|223344556677885f5f5f5f5f5f5f 64 gnu movsxd (%rcx),%edx
+6311|223344556677885f5f5f5f5f5f5f 64 intel movsxd edx, dword ptr [rcx]
+6311|223344556677885f5f5f5f5f5f5f 64 plan9 MOVSXD 0(CX), DX
+660111|223344556677885f5f5f5f5f5f 32 intel add word ptr [ecx], dx
+660111|223344556677885f5f5f5f5f5f 32 plan9 ADDW DX, 0(CX)
+660111|223344556677885f5f5f5f5f5f 64 gnu add %dx,(%rcx)
+660111|223344556677885f5f5f5f5f5f 64 intel add word ptr [rcx], dx
+660111|223344556677885f5f5f5f5f5f 64 plan9 ADDW DX, 0(CX)
+660311|223344556677885f5f5f5f5f5f 32 intel add dx, word ptr [ecx]
+660311|223344556677885f5f5f5f5f5f 32 plan9 ADDW 0(CX), DX
+660311|223344556677885f5f5f5f5f5f 64 gnu add (%rcx),%dx
+660311|223344556677885f5f5f5f5f5f 64 intel add dx, word ptr [rcx]
+660311|223344556677885f5f5f5f5f5f 64 plan9 ADDW 0(CX), DX
+66051122|3344556677885f5f5f5f5f5f 32 intel add ax, 0x2211
+66051122|3344556677885f5f5f5f5f5f 32 plan9 ADDW $0x2211, AX
+66051122|3344556677885f5f5f5f5f5f 64 gnu add $0x2211,%ax
+66051122|3344556677885f5f5f5f5f5f 64 intel add ax, 0x2211
+66051122|3344556677885f5f5f5f5f5f 64 plan9 ADDW $0x2211, AX
+660911|223344556677885f5f5f5f5f5f 32 intel or word ptr [ecx], dx
+660911|223344556677885f5f5f5f5f5f 32 plan9 ORW DX, 0(CX)
+660911|223344556677885f5f5f5f5f5f 64 gnu or %dx,(%rcx)
+660911|223344556677885f5f5f5f5f5f 64 intel or word ptr [rcx], dx
+660911|223344556677885f5f5f5f5f5f 64 plan9 ORW DX, 0(CX)
+660b11|223344556677885f5f5f5f5f5f 32 intel or dx, word ptr [ecx]
+660b11|223344556677885f5f5f5f5f5f 32 plan9 ORW 0(CX), DX
+660b11|223344556677885f5f5f5f5f5f 64 gnu or (%rcx),%dx
+660b11|223344556677885f5f5f5f5f5f 64 intel or dx, word ptr [rcx]
+660b11|223344556677885f5f5f5f5f5f 64 plan9 ORW 0(CX), DX
+660d1122|3344556677885f5f5f5f5f5f 32 intel or ax, 0x2211
+660d1122|3344556677885f5f5f5f5f5f 32 plan9 ORW $0x2211, AX
+660d1122|3344556677885f5f5f5f5f5f 64 gnu or $0x2211,%ax
+660d1122|3344556677885f5f5f5f5f5f 64 intel or ax, 0x2211
+660d1122|3344556677885f5f5f5f5f5f 64 plan9 ORW $0x2211, AX
+660f0000|11223344556677885f5f5f5f 32 intel sldt word ptr [eax]
+660f0000|11223344556677885f5f5f5f 32 plan9 SLDT 0(AX)
+660f0000|11223344556677885f5f5f5f 64 gnu data16 sldt (%rax)
+660f0000|11223344556677885f5f5f5f 64 intel sldt word ptr [rax]
+660f0000|11223344556677885f5f5f5f 64 plan9 SLDT 0(AX)
+660f0008|11223344556677885f5f5f5f 32 intel str word ptr [eax]
+660f0008|11223344556677885f5f5f5f 32 plan9 STR 0(AX)
+660f0008|11223344556677885f5f5f5f 64 gnu data16 str (%rax)
+660f0008|11223344556677885f5f5f5f 64 intel str word ptr [rax]
+660f0008|11223344556677885f5f5f5f 64 plan9 STR 0(AX)
+660f01a611223344|556677885f5f5f5f 32 intel smsw word ptr [esi+0x44332211]
+660f01a611223344|556677885f5f5f5f 32 plan9 SMSW 0x44332211(SI)
+660f01a611223344|556677885f5f5f5f 64 gnu data16 smsw 0x44332211(%rsi)
+660f01a611223344|556677885f5f5f5f 64 intel smsw word ptr [rsi+0x44332211]
+660f01a611223344|556677885f5f5f5f 64 plan9 SMSW 0x44332211(SI)
+660f0211|223344556677885f5f5f5f5f 32 intel lar dx, word ptr [ecx]
+660f0211|223344556677885f5f5f5f5f 32 plan9 LAR 0(CX), DX
+660f0211|223344556677885f5f5f5f5f 64 gnu lar (%rcx),%dx
+660f0211|223344556677885f5f5f5f5f 64 intel lar dx, word ptr [rcx]
+660f0211|223344556677885f5f5f5f5f 64 plan9 LAR 0(CX), DX
+660f0311|223344556677885f5f5f5f5f 32 intel lsl dx, word ptr [ecx]
+660f0311|223344556677885f5f5f5f5f 32 plan9 LSL 0(CX), DX
+660f0311|223344556677885f5f5f5f5f 64 gnu lsl (%rcx),%dx
+660f0311|223344556677885f5f5f5f5f 64 intel lsl dx, word ptr [rcx]
+660f0311|223344556677885f5f5f5f5f 64 plan9 LSL 0(CX), DX
+660f1011|223344556677885f5f5f5f5f 32 intel movupd xmm2, xmmword ptr [ecx]
+660f1011|223344556677885f5f5f5f5f 32 plan9 MOVUPD 0(CX), X2
+660f1011|223344556677885f5f5f5f5f 64 gnu movupd (%rcx),%xmm2
+660f1011|223344556677885f5f5f5f5f 64 intel movupd xmm2, xmmword ptr [rcx]
+660f1011|223344556677885f5f5f5f5f 64 plan9 MOVUPD 0(CX), X2
+660f1122|3344556677885f5f5f5f5f5f 32 intel movupd xmmword ptr [edx], xmm4
+660f1122|3344556677885f5f5f5f5f5f 32 plan9 MOVUPD X4, 0(DX)
+660f1122|3344556677885f5f5f5f5f5f 64 gnu movupd %xmm4,(%rdx)
+660f1122|3344556677885f5f5f5f5f5f 64 intel movupd xmmword ptr [rdx], xmm4
+660f1122|3344556677885f5f5f5f5f5f 64 plan9 MOVUPD X4, 0(DX)
+660f1211|223344556677885f5f5f5f5f 32 intel movlpd xmm2, qword ptr [ecx]
+660f1211|223344556677885f5f5f5f5f 32 plan9 MOVLPD 0(CX), X2
+660f1211|223344556677885f5f5f5f5f 64 gnu movlpd (%rcx),%xmm2
+660f1211|223344556677885f5f5f5f5f 64 intel movlpd xmm2, qword ptr [rcx]
+660f1211|223344556677885f5f5f5f5f 64 plan9 MOVLPD 0(CX), X2
+660f1311|223344556677885f5f5f5f5f 32 intel movlpd qword ptr [ecx], xmm2
+660f1311|223344556677885f5f5f5f5f 32 plan9 MOVLPD X2, 0(CX)
+660f1311|223344556677885f5f5f5f5f 64 gnu movlpd %xmm2,(%rcx)
+660f1311|223344556677885f5f5f5f5f 64 intel movlpd qword ptr [rcx], xmm2
+660f1311|223344556677885f5f5f5f5f 64 plan9 MOVLPD X2, 0(CX)
+660f1411|223344556677885f5f5f5f5f 32 intel unpcklpd xmm2, xmmword ptr [ecx]
+660f1411|223344556677885f5f5f5f5f 32 plan9 UNPCKLPD 0(CX), X2
+660f1411|223344556677885f5f5f5f5f 64 gnu unpcklpd (%rcx),%xmm2
+660f1411|223344556677885f5f5f5f5f 64 intel unpcklpd xmm2, xmmword ptr [rcx]
+660f1411|223344556677885f5f5f5f5f 64 plan9 UNPCKLPD 0(CX), X2
+660f1511|223344556677885f5f5f5f5f 32 intel unpckhpd xmm2, xmmword ptr [ecx]
+660f1511|223344556677885f5f5f5f5f 32 plan9 UNPCKHPD 0(CX), X2
+660f1511|223344556677885f5f5f5f5f 64 gnu unpckhpd (%rcx),%xmm2
+660f1511|223344556677885f5f5f5f5f 64 intel unpckhpd xmm2, xmmword ptr [rcx]
+660f1511|223344556677885f5f5f5f5f 64 plan9 UNPCKHPD 0(CX), X2
+660f1611|223344556677885f5f5f5f5f 32 intel movhpd xmm2, qword ptr [ecx]
+660f1611|223344556677885f5f5f5f5f 32 plan9 MOVHPD 0(CX), X2
+660f1611|223344556677885f5f5f5f5f 64 gnu movhpd (%rcx),%xmm2
+660f1611|223344556677885f5f5f5f5f 64 intel movhpd xmm2, qword ptr [rcx]
+660f1611|223344556677885f5f5f5f5f 64 plan9 MOVHPD 0(CX), X2
+660f1711|223344556677885f5f5f5f5f 32 intel movhpd qword ptr [ecx], xmm2
+660f1711|223344556677885f5f5f5f5f 32 plan9 MOVHPD X2, 0(CX)
+660f1711|223344556677885f5f5f5f5f 64 gnu movhpd %xmm2,(%rcx)
+660f1711|223344556677885f5f5f5f5f 64 intel movhpd qword ptr [rcx], xmm2
+660f1711|223344556677885f5f5f5f5f 64 plan9 MOVHPD X2, 0(CX)
+660f1f00|11223344556677885f5f5f5f 32 intel nop word ptr [eax], ax
+660f1f00|11223344556677885f5f5f5f 32 plan9 NOPW 0(AX)
+660f1f00|11223344556677885f5f5f5f 64 gnu nopw (%rax)
+660f1f00|11223344556677885f5f5f5f 64 intel nop word ptr [rax], ax
+660f1f00|11223344556677885f5f5f5f 64 plan9 NOPW 0(AX)
+660f2811|223344556677885f5f5f5f5f 32 intel movapd xmm2, xmmword ptr [ecx]
+660f2811|223344556677885f5f5f5f5f 32 plan9 MOVAPD 0(CX), X2
+660f2811|223344556677885f5f5f5f5f 64 gnu movapd (%rcx),%xmm2
+660f2811|223344556677885f5f5f5f5f 64 intel movapd xmm2, xmmword ptr [rcx]
+660f2811|223344556677885f5f5f5f5f 64 plan9 MOVAPD 0(CX), X2
+660f2911|223344556677885f5f5f5f5f 32 intel movapd xmmword ptr [ecx], xmm2
+660f2911|223344556677885f5f5f5f5f 32 plan9 MOVAPD X2, 0(CX)
+660f2911|223344556677885f5f5f5f5f 64 gnu movapd %xmm2,(%rcx)
+660f2911|223344556677885f5f5f5f5f 64 intel movapd xmmword ptr [rcx], xmm2
+660f2911|223344556677885f5f5f5f5f 64 plan9 MOVAPD X2, 0(CX)
+660f2a11|223344556677885f5f5f5f5f 32 intel cvtpi2pd xmm2, qword ptr [ecx]
+660f2a11|223344556677885f5f5f5f5f 32 plan9 CVTPI2PD 0(CX), X2
+660f2a11|223344556677885f5f5f5f5f 64 gnu cvtpi2pd (%rcx),%xmm2
+660f2a11|223344556677885f5f5f5f5f 64 intel cvtpi2pd xmm2, qword ptr [rcx]
+660f2a11|223344556677885f5f5f5f5f 64 plan9 CVTPI2PD 0(CX), X2
+660f2b11|223344556677885f5f5f5f5f 32 intel movntpd xmmword ptr [ecx], xmm2
+660f2b11|223344556677885f5f5f5f5f 32 plan9 MOVNTPD X2, 0(CX)
+660f2b11|223344556677885f5f5f5f5f 64 gnu movntpd %xmm2,(%rcx)
+660f2b11|223344556677885f5f5f5f5f 64 intel movntpd xmmword ptr [rcx], xmm2
+660f2b11|223344556677885f5f5f5f5f 64 plan9 MOVNTPD X2, 0(CX)
+660f2c11|223344556677885f5f5f5f5f 32 intel cvttpd2pi mmx2, xmmword ptr [ecx]
+660f2c11|223344556677885f5f5f5f5f 32 plan9 CVTTPD2PI 0(CX), M2
+660f2c11|223344556677885f5f5f5f5f 64 gnu cvttpd2pi (%rcx),%mm2
+660f2c11|223344556677885f5f5f5f5f 64 intel cvttpd2pi mmx2, xmmword ptr [rcx]
+660f2c11|223344556677885f5f5f5f5f 64 plan9 CVTTPD2PI 0(CX), M2
+660f2d11|223344556677885f5f5f5f5f 32 intel cvtpd2pi mmx2, xmmword ptr [ecx]
+660f2d11|223344556677885f5f5f5f5f 32 plan9 CVTPD2PI 0(CX), M2
+660f2d11|223344556677885f5f5f5f5f 64 gnu cvtpd2pi (%rcx),%mm2
+660f2d11|223344556677885f5f5f5f5f 64 intel cvtpd2pi mmx2, xmmword ptr [rcx]
+660f2d11|223344556677885f5f5f5f5f 64 plan9 CVTPD2PI 0(CX), M2
+660f2e11|223344556677885f5f5f5f5f 32 intel ucomisd xmm2, qword ptr [ecx]
+660f2e11|223344556677885f5f5f5f5f 32 plan9 UCOMISD 0(CX), X2
+660f2e11|223344556677885f5f5f5f5f 64 gnu ucomisd (%rcx),%xmm2
+660f2e11|223344556677885f5f5f5f5f 64 intel ucomisd xmm2, qword ptr [rcx]
+660f2e11|223344556677885f5f5f5f5f 64 plan9 UCOMISD 0(CX), X2
+660f2f11|223344556677885f5f5f5f5f 32 intel comisd xmm2, qword ptr [ecx]
+660f2f11|223344556677885f5f5f5f5f 32 plan9 COMISD 0(CX), X2
+660f2f11|223344556677885f5f5f5f5f 64 gnu comisd (%rcx),%xmm2
+660f2f11|223344556677885f5f5f5f5f 64 intel comisd xmm2, qword ptr [rcx]
+660f2f11|223344556677885f5f5f5f5f 64 plan9 COMISD 0(CX), X2
+660f380011|223344556677885f5f5f5f 32 intel pshufb xmm2, xmmword ptr [ecx]
+660f380011|223344556677885f5f5f5f 32 plan9 PSHUFB 0(CX), X2
+660f380011|223344556677885f5f5f5f 64 gnu pshufb (%rcx),%xmm2
+660f380011|223344556677885f5f5f5f 64 intel pshufb xmm2, xmmword ptr [rcx]
+660f380011|223344556677885f5f5f5f 64 plan9 PSHUFB 0(CX), X2
+660f380111|223344556677885f5f5f5f 32 intel phaddw xmm2, xmmword ptr [ecx]
+660f380111|223344556677885f5f5f5f 32 plan9 PHADDW 0(CX), X2
+660f380111|223344556677885f5f5f5f 64 gnu phaddw (%rcx),%xmm2
+660f380111|223344556677885f5f5f5f 64 intel phaddw xmm2, xmmword ptr [rcx]
+660f380111|223344556677885f5f5f5f 64 plan9 PHADDW 0(CX), X2
+660f380211|223344556677885f5f5f5f 32 intel phaddd xmm2, xmmword ptr [ecx]
+660f380211|223344556677885f5f5f5f 32 plan9 PHADDD 0(CX), X2
+660f380211|223344556677885f5f5f5f 64 gnu phaddd (%rcx),%xmm2
+660f380211|223344556677885f5f5f5f 64 intel phaddd xmm2, xmmword ptr [rcx]
+660f380211|223344556677885f5f5f5f 64 plan9 PHADDD 0(CX), X2
+660f380311|223344556677885f5f5f5f 32 intel phaddsw xmm2, xmmword ptr [ecx]
+660f380311|223344556677885f5f5f5f 32 plan9 PHADDSW 0(CX), X2
+660f380311|223344556677885f5f5f5f 64 gnu phaddsw (%rcx),%xmm2
+660f380311|223344556677885f5f5f5f 64 intel phaddsw xmm2, xmmword ptr [rcx]
+660f380311|223344556677885f5f5f5f 64 plan9 PHADDSW 0(CX), X2
+660f380411|223344556677885f5f5f5f 32 intel pmaddubsw xmm2, xmmword ptr [ecx]
+660f380411|223344556677885f5f5f5f 32 plan9 PMADDUBSW 0(CX), X2
+660f380411|223344556677885f5f5f5f 64 gnu pmaddubsw (%rcx),%xmm2
+660f380411|223344556677885f5f5f5f 64 intel pmaddubsw xmm2, xmmword ptr [rcx]
+660f380411|223344556677885f5f5f5f 64 plan9 PMADDUBSW 0(CX), X2
+660f380511|223344556677885f5f5f5f 32 intel phsubw xmm2, xmmword ptr [ecx]
+660f380511|223344556677885f5f5f5f 32 plan9 PHSUBW 0(CX), X2
+660f380511|223344556677885f5f5f5f 64 gnu phsubw (%rcx),%xmm2
+660f380511|223344556677885f5f5f5f 64 intel phsubw xmm2, xmmword ptr [rcx]
+660f380511|223344556677885f5f5f5f 64 plan9 PHSUBW 0(CX), X2
+660f380611|223344556677885f5f5f5f 32 intel phsubd xmm2, xmmword ptr [ecx]
+660f380611|223344556677885f5f5f5f 32 plan9 PHSUBD 0(CX), X2
+660f380611|223344556677885f5f5f5f 64 gnu phsubd (%rcx),%xmm2
+660f380611|223344556677885f5f5f5f 64 intel phsubd xmm2, xmmword ptr [rcx]
+660f380611|223344556677885f5f5f5f 64 plan9 PHSUBD 0(CX), X2
+660f380711|223344556677885f5f5f5f 32 intel phsubsw xmm2, xmmword ptr [ecx]
+660f380711|223344556677885f5f5f5f 32 plan9 PHSUBSW 0(CX), X2
+660f380711|223344556677885f5f5f5f 64 gnu phsubsw (%rcx),%xmm2
+660f380711|223344556677885f5f5f5f 64 intel phsubsw xmm2, xmmword ptr [rcx]
+660f380711|223344556677885f5f5f5f 64 plan9 PHSUBSW 0(CX), X2
+660f380811|223344556677885f5f5f5f 32 intel psignb xmm2, xmmword ptr [ecx]
+660f380811|223344556677885f5f5f5f 32 plan9 PSIGNB 0(CX), X2
+660f380811|223344556677885f5f5f5f 64 gnu psignb (%rcx),%xmm2
+660f380811|223344556677885f5f5f5f 64 intel psignb xmm2, xmmword ptr [rcx]
+660f380811|223344556677885f5f5f5f 64 plan9 PSIGNB 0(CX), X2
+660f380911|223344556677885f5f5f5f 32 intel psignw xmm2, xmmword ptr [ecx]
+660f380911|223344556677885f5f5f5f 32 plan9 PSIGNW 0(CX), X2
+660f380911|223344556677885f5f5f5f 64 gnu psignw (%rcx),%xmm2
+660f380911|223344556677885f5f5f5f 64 intel psignw xmm2, xmmword ptr [rcx]
+660f380911|223344556677885f5f5f5f 64 plan9 PSIGNW 0(CX), X2
+660f380a11|223344556677885f5f5f5f 32 intel psignd xmm2, xmmword ptr [ecx]
+660f380a11|223344556677885f5f5f5f 32 plan9 PSIGND 0(CX), X2
+660f380a11|223344556677885f5f5f5f 64 gnu psignd (%rcx),%xmm2
+660f380a11|223344556677885f5f5f5f 64 intel psignd xmm2, xmmword ptr [rcx]
+660f380a11|223344556677885f5f5f5f 64 plan9 PSIGND 0(CX), X2
+660f380b11|223344556677885f5f5f5f 32 intel pmulhrsw xmm2, xmmword ptr [ecx]
+660f380b11|223344556677885f5f5f5f 32 plan9 PMULHRSW 0(CX), X2
+660f380b11|223344556677885f5f5f5f 64 gnu pmulhrsw (%rcx),%xmm2
+660f380b11|223344556677885f5f5f5f 64 intel pmulhrsw xmm2, xmmword ptr [rcx]
+660f380b11|223344556677885f5f5f5f 64 plan9 PMULHRSW 0(CX), X2
+660f381011|223344556677885f5f5f5f 32 intel pblendvb xmm2, xmmword ptr [ecx]
+660f381011|223344556677885f5f5f5f 32 plan9 PBLENDVB X0, 0(CX), X2
+660f381011|223344556677885f5f5f5f 64 gnu pblendvb %xmm0,(%rcx),%xmm2
+660f381011|223344556677885f5f5f5f 64 intel pblendvb xmm2, xmmword ptr [rcx]
+660f381011|223344556677885f5f5f5f 64 plan9 PBLENDVB X0, 0(CX), X2
+660f381411|223344556677885f5f5f5f 32 intel blendvps xmm2, xmmword ptr [ecx]
+660f381411|223344556677885f5f5f5f 32 plan9 BLENDVPS X0, 0(CX), X2
+660f381411|223344556677885f5f5f5f 64 gnu blendvps %xmm0,(%rcx),%xmm2
+660f381411|223344556677885f5f5f5f 64 intel blendvps xmm2, xmmword ptr [rcx]
+660f381411|223344556677885f5f5f5f 64 plan9 BLENDVPS X0, 0(CX), X2
+660f381511|223344556677885f5f5f5f 32 intel blendvpd xmm2, xmmword ptr [ecx]
+660f381511|223344556677885f5f5f5f 32 plan9 BLENDVPD X0, 0(CX), X2
+660f381511|223344556677885f5f5f5f 64 gnu blendvpd %xmm0,(%rcx),%xmm2
+660f381511|223344556677885f5f5f5f 64 intel blendvpd xmm2, xmmword ptr [rcx]
+660f381511|223344556677885f5f5f5f 64 plan9 BLENDVPD X0, 0(CX), X2
+660f381711|223344556677885f5f5f5f 32 intel ptest xmm2, xmmword ptr [ecx]
+660f381711|223344556677885f5f5f5f 32 plan9 PTEST 0(CX), X2
+660f381711|223344556677885f5f5f5f 64 gnu ptest (%rcx),%xmm2
+660f381711|223344556677885f5f5f5f 64 intel ptest xmm2, xmmword ptr [rcx]
+660f381711|223344556677885f5f5f5f 64 plan9 PTEST 0(CX), X2
+660f381c11|223344556677885f5f5f5f 32 intel pabsb xmm2, xmmword ptr [ecx]
+660f381c11|223344556677885f5f5f5f 32 plan9 PABSB 0(CX), X2
+660f381c11|223344556677885f5f5f5f 64 gnu pabsb (%rcx),%xmm2
+660f381c11|223344556677885f5f5f5f 64 intel pabsb xmm2, xmmword ptr [rcx]
+660f381c11|223344556677885f5f5f5f 64 plan9 PABSB 0(CX), X2
+660f381d11|223344556677885f5f5f5f 32 intel pabsw xmm2, xmmword ptr [ecx]
+660f381d11|223344556677885f5f5f5f 32 plan9 PABSW 0(CX), X2
+660f381d11|223344556677885f5f5f5f 64 gnu pabsw (%rcx),%xmm2
+660f381d11|223344556677885f5f5f5f 64 intel pabsw xmm2, xmmword ptr [rcx]
+660f381d11|223344556677885f5f5f5f 64 plan9 PABSW 0(CX), X2
+660f381e11|223344556677885f5f5f5f 32 intel pabsd xmm2, xmmword ptr [ecx]
+660f381e11|223344556677885f5f5f5f 32 plan9 PABSD 0(CX), X2
+660f381e11|223344556677885f5f5f5f 64 gnu pabsd (%rcx),%xmm2
+660f381e11|223344556677885f5f5f5f 64 intel pabsd xmm2, xmmword ptr [rcx]
+660f381e11|223344556677885f5f5f5f 64 plan9 PABSD 0(CX), X2
+660f382011|223344556677885f5f5f5f 32 intel pmovsxbw xmm2, qword ptr [ecx]
+660f382011|223344556677885f5f5f5f 32 plan9 PMOVSXBW 0(CX), X2
+660f382011|223344556677885f5f5f5f 64 gnu pmovsxbw (%rcx),%xmm2
+660f382011|223344556677885f5f5f5f 64 intel pmovsxbw xmm2, qword ptr [rcx]
+660f382011|223344556677885f5f5f5f 64 plan9 PMOVSXBW 0(CX), X2
+660f382111|223344556677885f5f5f5f 32 intel pmovsxbd xmm2, dword ptr [ecx]
+660f382111|223344556677885f5f5f5f 32 plan9 PMOVSXBD 0(CX), X2
+660f382111|223344556677885f5f5f5f 64 gnu pmovsxbd (%rcx),%xmm2
+660f382111|223344556677885f5f5f5f 64 intel pmovsxbd xmm2, dword ptr [rcx]
+660f382111|223344556677885f5f5f5f 64 plan9 PMOVSXBD 0(CX), X2
+660f382211|223344556677885f5f5f5f 32 intel pmovsxbq xmm2, word ptr [ecx]
+660f382211|223344556677885f5f5f5f 32 plan9 PMOVSXBQ 0(CX), X2
+660f382211|223344556677885f5f5f5f 64 gnu pmovsxbq (%rcx),%xmm2
+660f382211|223344556677885f5f5f5f 64 intel pmovsxbq xmm2, word ptr [rcx]
+660f382211|223344556677885f5f5f5f 64 plan9 PMOVSXBQ 0(CX), X2
+660f382311|223344556677885f5f5f5f 32 intel pmovsxwd xmm2, qword ptr [ecx]
+660f382311|223344556677885f5f5f5f 32 plan9 PMOVSXWD 0(CX), X2
+660f382311|223344556677885f5f5f5f 64 gnu pmovsxwd (%rcx),%xmm2
+660f382311|223344556677885f5f5f5f 64 intel pmovsxwd xmm2, qword ptr [rcx]
+660f382311|223344556677885f5f5f5f 64 plan9 PMOVSXWD 0(CX), X2
+660f382411|223344556677885f5f5f5f 32 intel pmovsxwq xmm2, dword ptr [ecx]
+660f382411|223344556677885f5f5f5f 32 plan9 PMOVSXWQ 0(CX), X2
+660f382411|223344556677885f5f5f5f 64 gnu pmovsxwq (%rcx),%xmm2
+660f382411|223344556677885f5f5f5f 64 intel pmovsxwq xmm2, dword ptr [rcx]
+660f382411|223344556677885f5f5f5f 64 plan9 PMOVSXWQ 0(CX), X2
+660f382511|223344556677885f5f5f5f 32 intel pmovsxdq xmm2, qword ptr [ecx]
+660f382511|223344556677885f5f5f5f 32 plan9 PMOVSXDQ 0(CX), X2
+660f382511|223344556677885f5f5f5f 64 gnu pmovsxdq (%rcx),%xmm2
+660f382511|223344556677885f5f5f5f 64 intel pmovsxdq xmm2, qword ptr [rcx]
+660f382511|223344556677885f5f5f5f 64 plan9 PMOVSXDQ 0(CX), X2
+660f382811|223344556677885f5f5f5f 32 intel pmuldq xmm2, xmmword ptr [ecx]
+660f382811|223344556677885f5f5f5f 32 plan9 PMULDQ 0(CX), X2
+660f382811|223344556677885f5f5f5f 64 gnu pmuldq (%rcx),%xmm2
+660f382811|223344556677885f5f5f5f 64 intel pmuldq xmm2, xmmword ptr [rcx]
+660f382811|223344556677885f5f5f5f 64 plan9 PMULDQ 0(CX), X2
+660f382911|223344556677885f5f5f5f 32 intel pcmpeqq xmm2, xmmword ptr [ecx]
+660f382911|223344556677885f5f5f5f 32 plan9 PCMPEQQ 0(CX), X2
+660f382911|223344556677885f5f5f5f 64 gnu pcmpeqq (%rcx),%xmm2
+660f382911|223344556677885f5f5f5f 64 intel pcmpeqq xmm2, xmmword ptr [rcx]
+660f382911|223344556677885f5f5f5f 64 plan9 PCMPEQQ 0(CX), X2
+660f382a11|223344556677885f5f5f5f 32 intel movntdqa xmm2, xmmword ptr [ecx]
+660f382a11|223344556677885f5f5f5f 32 plan9 MOVNTDQA 0(CX), X2
+660f382a11|223344556677885f5f5f5f 64 gnu movntdqa (%rcx),%xmm2
+660f382a11|223344556677885f5f5f5f 64 intel movntdqa xmm2, xmmword ptr [rcx]
+660f382a11|223344556677885f5f5f5f 64 plan9 MOVNTDQA 0(CX), X2
+660f382b11|223344556677885f5f5f5f 32 intel packusdw xmm2, xmmword ptr [ecx]
+660f382b11|223344556677885f5f5f5f 32 plan9 PACKUSDW 0(CX), X2
+660f382b11|223344556677885f5f5f5f 64 gnu packusdw (%rcx),%xmm2
+660f382b11|223344556677885f5f5f5f 64 intel packusdw xmm2, xmmword ptr [rcx]
+660f382b11|223344556677885f5f5f5f 64 plan9 PACKUSDW 0(CX), X2
+660f383011|223344556677885f5f5f5f 32 intel pmovzxbw xmm2, qword ptr [ecx]
+660f383011|223344556677885f5f5f5f 32 plan9 PMOVZXBW 0(CX), X2
+660f383011|223344556677885f5f5f5f 64 gnu pmovzxbw (%rcx),%xmm2
+660f383011|223344556677885f5f5f5f 64 intel pmovzxbw xmm2, qword ptr [rcx]
+660f383011|223344556677885f5f5f5f 64 plan9 PMOVZXBW 0(CX), X2
+660f383111|223344556677885f5f5f5f 32 intel pmovzxbd xmm2, dword ptr [ecx]
+660f383111|223344556677885f5f5f5f 32 plan9 PMOVZXBD 0(CX), X2
+660f383111|223344556677885f5f5f5f 64 gnu pmovzxbd (%rcx),%xmm2
+660f383111|223344556677885f5f5f5f 64 intel pmovzxbd xmm2, dword ptr [rcx]
+660f383111|223344556677885f5f5f5f 64 plan9 PMOVZXBD 0(CX), X2
+660f383211|223344556677885f5f5f5f 32 intel pmovzxbq xmm2, word ptr [ecx]
+660f383211|223344556677885f5f5f5f 32 plan9 PMOVZXBQ 0(CX), X2
+660f383211|223344556677885f5f5f5f 64 gnu pmovzxbq (%rcx),%xmm2
+660f383211|223344556677885f5f5f5f 64 intel pmovzxbq xmm2, word ptr [rcx]
+660f383211|223344556677885f5f5f5f 64 plan9 PMOVZXBQ 0(CX), X2
+660f383311|223344556677885f5f5f5f 32 intel pmovzxwd xmm2, qword ptr [ecx]
+660f383311|223344556677885f5f5f5f 32 plan9 PMOVZXWD 0(CX), X2
+660f383311|223344556677885f5f5f5f 64 gnu pmovzxwd (%rcx),%xmm2
+660f383311|223344556677885f5f5f5f 64 intel pmovzxwd xmm2, qword ptr [rcx]
+660f383311|223344556677885f5f5f5f 64 plan9 PMOVZXWD 0(CX), X2
+660f383411|223344556677885f5f5f5f 32 intel pmovzxwq xmm2, dword ptr [ecx]
+660f383411|223344556677885f5f5f5f 32 plan9 PMOVZXWQ 0(CX), X2
+660f383411|223344556677885f5f5f5f 64 gnu pmovzxwq (%rcx),%xmm2
+660f383411|223344556677885f5f5f5f 64 intel pmovzxwq xmm2, dword ptr [rcx]
+660f383411|223344556677885f5f5f5f 64 plan9 PMOVZXWQ 0(CX), X2
+660f383511|223344556677885f5f5f5f 32 intel pmovzxdq xmm2, qword ptr [ecx]
+660f383511|223344556677885f5f5f5f 32 plan9 PMOVZXDQ 0(CX), X2
+660f383511|223344556677885f5f5f5f 64 gnu pmovzxdq (%rcx),%xmm2
+660f383511|223344556677885f5f5f5f 64 intel pmovzxdq xmm2, qword ptr [rcx]
+660f383511|223344556677885f5f5f5f 64 plan9 PMOVZXDQ 0(CX), X2
+660f383711|223344556677885f5f5f5f 32 intel pcmpgtq xmm2, xmmword ptr [ecx]
+660f383711|223344556677885f5f5f5f 32 plan9 PCMPGTQ 0(CX), X2
+660f383711|223344556677885f5f5f5f 64 gnu pcmpgtq (%rcx),%xmm2
+660f383711|223344556677885f5f5f5f 64 intel pcmpgtq xmm2, xmmword ptr [rcx]
+660f383711|223344556677885f5f5f5f 64 plan9 PCMPGTQ 0(CX), X2
+660f383811|223344556677885f5f5f5f 32 intel pminsb xmm2, xmmword ptr [ecx]
+660f383811|223344556677885f5f5f5f 32 plan9 PMINSB 0(CX), X2
+660f383811|223344556677885f5f5f5f 64 gnu pminsb (%rcx),%xmm2
+660f383811|223344556677885f5f5f5f 64 intel pminsb xmm2, xmmword ptr [rcx]
+660f383811|223344556677885f5f5f5f 64 plan9 PMINSB 0(CX), X2
+660f383911|223344556677885f5f5f5f 32 intel pminsd xmm2, xmmword ptr [ecx]
+660f383911|223344556677885f5f5f5f 32 plan9 PMINSD 0(CX), X2
+660f383911|223344556677885f5f5f5f 64 gnu pminsd (%rcx),%xmm2
+660f383911|223344556677885f5f5f5f 64 intel pminsd xmm2, xmmword ptr [rcx]
+660f383911|223344556677885f5f5f5f 64 plan9 PMINSD 0(CX), X2
+660f383a11|223344556677885f5f5f5f 32 intel pminuw xmm2, xmmword ptr [ecx]
+660f383a11|223344556677885f5f5f5f 32 plan9 PMINUW 0(CX), X2
+660f383a11|223344556677885f5f5f5f 64 gnu pminuw (%rcx),%xmm2
+660f383a11|223344556677885f5f5f5f 64 intel pminuw xmm2, xmmword ptr [rcx]
+660f383a11|223344556677885f5f5f5f 64 plan9 PMINUW 0(CX), X2
+660f383b11|223344556677885f5f5f5f 32 intel pminud xmm2, xmmword ptr [ecx]
+660f383b11|223344556677885f5f5f5f 32 plan9 PMINUD 0(CX), X2
+660f383b11|223344556677885f5f5f5f 64 gnu pminud (%rcx),%xmm2
+660f383b11|223344556677885f5f5f5f 64 intel pminud xmm2, xmmword ptr [rcx]
+660f383b11|223344556677885f5f5f5f 64 plan9 PMINUD 0(CX), X2
+660f383c11|223344556677885f5f5f5f 32 intel pmaxsb xmm2, xmmword ptr [ecx]
+660f383c11|223344556677885f5f5f5f 32 plan9 PMAXSB 0(CX), X2
+660f383c11|223344556677885f5f5f5f 64 gnu pmaxsb (%rcx),%xmm2
+660f383c11|223344556677885f5f5f5f 64 intel pmaxsb xmm2, xmmword ptr [rcx]
+660f383c11|223344556677885f5f5f5f 64 plan9 PMAXSB 0(CX), X2
+660f383d11|223344556677885f5f5f5f 32 intel pmaxsd xmm2, xmmword ptr [ecx]
+660f383d11|223344556677885f5f5f5f 32 plan9 PMAXSD 0(CX), X2
+660f383d11|223344556677885f5f5f5f 64 gnu pmaxsd (%rcx),%xmm2
+660f383d11|223344556677885f5f5f5f 64 intel pmaxsd xmm2, xmmword ptr [rcx]
+660f383d11|223344556677885f5f5f5f 64 plan9 PMAXSD 0(CX), X2
+660f383e11|223344556677885f5f5f5f 32 intel pmaxuw xmm2, xmmword ptr [ecx]
+660f383e11|223344556677885f5f5f5f 32 plan9 PMAXUW 0(CX), X2
+660f383e11|223344556677885f5f5f5f 64 gnu pmaxuw (%rcx),%xmm2
+660f383e11|223344556677885f5f5f5f 64 intel pmaxuw xmm2, xmmword ptr [rcx]
+660f383e11|223344556677885f5f5f5f 64 plan9 PMAXUW 0(CX), X2
+660f383f11|223344556677885f5f5f5f 32 intel pmaxud xmm2, xmmword ptr [ecx]
+660f383f11|223344556677885f5f5f5f 32 plan9 PMAXUD 0(CX), X2
+660f383f11|223344556677885f5f5f5f 64 gnu pmaxud (%rcx),%xmm2
+660f383f11|223344556677885f5f5f5f 64 intel pmaxud xmm2, xmmword ptr [rcx]
+660f383f11|223344556677885f5f5f5f 64 plan9 PMAXUD 0(CX), X2
+660f384011|223344556677885f5f5f5f 32 intel pmulld xmm2, xmmword ptr [ecx]
+660f384011|223344556677885f5f5f5f 32 plan9 PMULLD 0(CX), X2
+660f384011|223344556677885f5f5f5f 64 gnu pmulld (%rcx),%xmm2
+660f384011|223344556677885f5f5f5f 64 intel pmulld xmm2, xmmword ptr [rcx]
+660f384011|223344556677885f5f5f5f 64 plan9 PMULLD 0(CX), X2
+660f384111|223344556677885f5f5f5f 32 intel phminposuw xmm2, xmmword ptr [ecx]
+660f384111|223344556677885f5f5f5f 32 plan9 PHMINPOSUW 0(CX), X2
+660f384111|223344556677885f5f5f5f 64 gnu phminposuw (%rcx),%xmm2
+660f384111|223344556677885f5f5f5f 64 intel phminposuw xmm2, xmmword ptr [rcx]
+660f384111|223344556677885f5f5f5f 64 plan9 PHMINPOSUW 0(CX), X2
+660f388211|223344556677885f5f5f5f 32 intel invpcid edx, xmmword ptr [ecx]
+660f388211|223344556677885f5f5f5f 32 plan9 INVPCID 0(CX), DX
+660f388211|223344556677885f5f5f5f 64 gnu invpcid (%rcx),%rdx
+660f388211|223344556677885f5f5f5f 64 intel invpcid rdx, xmmword ptr [rcx]
+660f388211|223344556677885f5f5f5f 64 plan9 INVPCID 0(CX), DX
+660f38db11|223344556677885f5f5f5f 32 intel aesimc xmm2, xmmword ptr [ecx]
+660f38db11|223344556677885f5f5f5f 32 plan9 AESIMC 0(CX), X2
+660f38db11|223344556677885f5f5f5f 64 gnu aesimc (%rcx),%xmm2
+660f38db11|223344556677885f5f5f5f 64 intel aesimc xmm2, xmmword ptr [rcx]
+660f38db11|223344556677885f5f5f5f 64 plan9 AESIMC 0(CX), X2
+660f38dc11|223344556677885f5f5f5f 32 intel aesenc xmm2, xmmword ptr [ecx]
+660f38dc11|223344556677885f5f5f5f 32 plan9 AESENC 0(CX), X2
+660f38dc11|223344556677885f5f5f5f 64 gnu aesenc (%rcx),%xmm2
+660f38dc11|223344556677885f5f5f5f 64 intel aesenc xmm2, xmmword ptr [rcx]
+660f38dc11|223344556677885f5f5f5f 64 plan9 AESENC 0(CX), X2
+660f38dd11|223344556677885f5f5f5f 32 intel aesenclast xmm2, xmmword ptr [ecx]
+660f38dd11|223344556677885f5f5f5f 32 plan9 AESENCLAST 0(CX), X2
+660f38dd11|223344556677885f5f5f5f 64 gnu aesenclast (%rcx),%xmm2
+660f38dd11|223344556677885f5f5f5f 64 intel aesenclast xmm2, xmmword ptr [rcx]
+660f38dd11|223344556677885f5f5f5f 64 plan9 AESENCLAST 0(CX), X2
+660f38de11|223344556677885f5f5f5f 32 intel aesdec xmm2, xmmword ptr [ecx]
+660f38de11|223344556677885f5f5f5f 32 plan9 AESDEC 0(CX), X2
+660f38de11|223344556677885f5f5f5f 64 gnu aesdec (%rcx),%xmm2
+660f38de11|223344556677885f5f5f5f 64 intel aesdec xmm2, xmmword ptr [rcx]
+660f38de11|223344556677885f5f5f5f 64 plan9 AESDEC 0(CX), X2
+660f38df11|223344556677885f5f5f5f 32 intel aesdeclast xmm2, xmmword ptr [ecx]
+660f38df11|223344556677885f5f5f5f 32 plan9 AESDECLAST 0(CX), X2
+660f38df11|223344556677885f5f5f5f 64 gnu aesdeclast (%rcx),%xmm2
+660f38df11|223344556677885f5f5f5f 64 intel aesdeclast xmm2, xmmword ptr [rcx]
+660f38df11|223344556677885f5f5f5f 64 plan9 AESDECLAST 0(CX), X2
+660f3a081122|3344556677885f5f5f5f 32 intel roundps xmm2, xmmword ptr [ecx], 0x22
+660f3a081122|3344556677885f5f5f5f 32 plan9 ROUNDPS $0x22, 0(CX), X2
+660f3a081122|3344556677885f5f5f5f 64 gnu roundps $0x22,(%rcx),%xmm2
+660f3a081122|3344556677885f5f5f5f 64 intel roundps xmm2, xmmword ptr [rcx], 0x22
+660f3a081122|3344556677885f5f5f5f 64 plan9 ROUNDPS $0x22, 0(CX), X2
+660f3a091122|3344556677885f5f5f5f 32 intel roundpd xmm2, xmmword ptr [ecx], 0x22
+660f3a091122|3344556677885f5f5f5f 32 plan9 ROUNDPD $0x22, 0(CX), X2
+660f3a091122|3344556677885f5f5f5f 64 gnu roundpd $0x22,(%rcx),%xmm2
+660f3a091122|3344556677885f5f5f5f 64 intel roundpd xmm2, xmmword ptr [rcx], 0x22
+660f3a091122|3344556677885f5f5f5f 64 plan9 ROUNDPD $0x22, 0(CX), X2
+660f3a0a1122|3344556677885f5f5f5f 32 intel roundss xmm2, dword ptr [ecx], 0x22
+660f3a0a1122|3344556677885f5f5f5f 32 plan9 ROUNDSS $0x22, 0(CX), X2
+660f3a0a1122|3344556677885f5f5f5f 64 gnu roundss $0x22,(%rcx),%xmm2
+660f3a0a1122|3344556677885f5f5f5f 64 intel roundss xmm2, dword ptr [rcx], 0x22
+660f3a0a1122|3344556677885f5f5f5f 64 plan9 ROUNDSS $0x22, 0(CX), X2
+660f3a0b1122|3344556677885f5f5f5f 32 intel roundsd xmm2, qword ptr [ecx], 0x22
+660f3a0b1122|3344556677885f5f5f5f 32 plan9 ROUNDSD $0x22, 0(CX), X2
+660f3a0b1122|3344556677885f5f5f5f 64 gnu roundsd $0x22,(%rcx),%xmm2
+660f3a0b1122|3344556677885f5f5f5f 64 intel roundsd xmm2, qword ptr [rcx], 0x22
+660f3a0b1122|3344556677885f5f5f5f 64 plan9 ROUNDSD $0x22, 0(CX), X2
+660f3a0c1122|3344556677885f5f5f5f 32 intel blendps xmm2, xmmword ptr [ecx], 0x22
+660f3a0c1122|3344556677885f5f5f5f 32 plan9 BLENDPS $0x22, 0(CX), X2
+660f3a0c1122|3344556677885f5f5f5f 64 gnu blendps $0x22,(%rcx),%xmm2
+660f3a0c1122|3344556677885f5f5f5f 64 intel blendps xmm2, xmmword ptr [rcx], 0x22
+660f3a0c1122|3344556677885f5f5f5f 64 plan9 BLENDPS $0x22, 0(CX), X2
+660f3a0d1122|3344556677885f5f5f5f 32 intel blendpd xmm2, xmmword ptr [ecx], 0x22
+660f3a0d1122|3344556677885f5f5f5f 32 plan9 BLENDPD $0x22, 0(CX), X2
+660f3a0d1122|3344556677885f5f5f5f 64 gnu blendpd $0x22,(%rcx),%xmm2
+660f3a0d1122|3344556677885f5f5f5f 64 intel blendpd xmm2, xmmword ptr [rcx], 0x22
+660f3a0d1122|3344556677885f5f5f5f 64 plan9 BLENDPD $0x22, 0(CX), X2
+660f3a0e1122|3344556677885f5f5f5f 32 intel pblendw xmm2, xmmword ptr [ecx], 0x22
+660f3a0e1122|3344556677885f5f5f5f 32 plan9 PBLENDW $0x22, 0(CX), X2
+660f3a0e1122|3344556677885f5f5f5f 64 gnu pblendw $0x22,(%rcx),%xmm2
+660f3a0e1122|3344556677885f5f5f5f 64 intel pblendw xmm2, xmmword ptr [rcx], 0x22
+660f3a0e1122|3344556677885f5f5f5f 64 plan9 PBLENDW $0x22, 0(CX), X2
+660f3a0f1122|3344556677885f5f5f5f 32 intel palignr xmm2, xmmword ptr [ecx], 0x22
+660f3a0f1122|3344556677885f5f5f5f 32 plan9 PALIGNR $0x22, 0(CX), X2
+660f3a0f1122|3344556677885f5f5f5f 64 gnu palignr $0x22,(%rcx),%xmm2
+660f3a0f1122|3344556677885f5f5f5f 64 intel palignr xmm2, xmmword ptr [rcx], 0x22
+660f3a0f1122|3344556677885f5f5f5f 64 plan9 PALIGNR $0x22, 0(CX), X2
+660f3a141122|3344556677885f5f5f5f 32 intel pextrb byte ptr [ecx], xmm2, 0x22
+660f3a141122|3344556677885f5f5f5f 32 plan9 PEXTRB $0x22, X2, 0(CX)
+660f3a141122|3344556677885f5f5f5f 64 gnu pextrb $0x22,%xmm2,(%rcx)
+660f3a141122|3344556677885f5f5f5f 64 intel pextrb byte ptr [rcx], xmm2, 0x22
+660f3a141122|3344556677885f5f5f5f 64 plan9 PEXTRB $0x22, X2, 0(CX)
+660f3a151122|3344556677885f5f5f5f 32 intel pextrw word ptr [ecx], xmm2, 0x22
+660f3a151122|3344556677885f5f5f5f 32 plan9 PEXTRW $0x22, X2, 0(CX)
+660f3a151122|3344556677885f5f5f5f 64 gnu pextrw $0x22,%xmm2,(%rcx)
+660f3a151122|3344556677885f5f5f5f 64 intel pextrw word ptr [rcx], xmm2, 0x22
+660f3a151122|3344556677885f5f5f5f 64 plan9 PEXTRW $0x22, X2, 0(CX)
+660f3a161122|3344556677885f5f5f5f 32 intel pextrd dword ptr [ecx], xmm2, 0x22
+660f3a161122|3344556677885f5f5f5f 32 plan9 PEXTRD $0x22, X2, 0(CX)
+660f3a161122|3344556677885f5f5f5f 64 gnu pextrd $0x22,%xmm2,(%rcx)
+660f3a161122|3344556677885f5f5f5f 64 intel pextrd dword ptr [rcx], xmm2, 0x22
+660f3a161122|3344556677885f5f5f5f 64 plan9 PEXTRD $0x22, X2, 0(CX)
+660f3a171122|3344556677885f5f5f5f 32 intel extractps dword ptr [ecx], xmm2, 0x22
+660f3a171122|3344556677885f5f5f5f 32 plan9 EXTRACTPS $0x22, X2, 0(CX)
+660f3a171122|3344556677885f5f5f5f 64 gnu extractps $0x22,%xmm2,(%rcx)
+660f3a171122|3344556677885f5f5f5f 64 intel extractps dword ptr [rcx], xmm2, 0x22
+660f3a171122|3344556677885f5f5f5f 64 plan9 EXTRACTPS $0x22, X2, 0(CX)
+660f3a201122|3344556677885f5f5f5f 32 intel pinsrb xmm2, byte ptr [ecx], 0x22
+660f3a201122|3344556677885f5f5f5f 32 plan9 PINSRB $0x22, 0(CX), X2
+660f3a201122|3344556677885f5f5f5f 64 gnu pinsrb $0x22,(%rcx),%xmm2
+660f3a201122|3344556677885f5f5f5f 64 intel pinsrb xmm2, byte ptr [rcx], 0x22
+660f3a201122|3344556677885f5f5f5f 64 plan9 PINSRB $0x22, 0(CX), X2
+660f3a211122|3344556677885f5f5f5f 32 intel insertps xmm2, dword ptr [ecx], 0x22
+660f3a211122|3344556677885f5f5f5f 32 plan9 INSERTPS $0x22, 0(CX), X2
+660f3a211122|3344556677885f5f5f5f 64 gnu insertps $0x22,(%rcx),%xmm2
+660f3a211122|3344556677885f5f5f5f 64 intel insertps xmm2, dword ptr [rcx], 0x22
+660f3a211122|3344556677885f5f5f5f 64 plan9 INSERTPS $0x22, 0(CX), X2
+660f3a221122|3344556677885f5f5f5f 32 intel pinsrd xmm2, dword ptr [ecx], 0x22
+660f3a221122|3344556677885f5f5f5f 32 plan9 PINSRD $0x22, 0(CX), X2
+660f3a221122|3344556677885f5f5f5f 64 gnu pinsrd $0x22,(%rcx),%xmm2
+660f3a221122|3344556677885f5f5f5f 64 intel pinsrd xmm2, dword ptr [rcx], 0x22
+660f3a221122|3344556677885f5f5f5f 64 plan9 PINSRD $0x22, 0(CX), X2
+660f3a401122|3344556677885f5f5f5f 32 intel dpps xmm2, xmmword ptr [ecx], 0x22
+660f3a401122|3344556677885f5f5f5f 32 plan9 DPPS $0x22, 0(CX), X2
+660f3a401122|3344556677885f5f5f5f 64 gnu dpps $0x22,(%rcx),%xmm2
+660f3a401122|3344556677885f5f5f5f 64 intel dpps xmm2, xmmword ptr [rcx], 0x22
+660f3a401122|3344556677885f5f5f5f 64 plan9 DPPS $0x22, 0(CX), X2
+660f3a411122|3344556677885f5f5f5f 32 intel dppd xmm2, xmmword ptr [ecx], 0x22
+660f3a411122|3344556677885f5f5f5f 32 plan9 DPPD $0x22, 0(CX), X2
+660f3a411122|3344556677885f5f5f5f 64 gnu dppd $0x22,(%rcx),%xmm2
+660f3a411122|3344556677885f5f5f5f 64 intel dppd xmm2, xmmword ptr [rcx], 0x22
+660f3a411122|3344556677885f5f5f5f 64 plan9 DPPD $0x22, 0(CX), X2
+660f3a421122|3344556677885f5f5f5f 32 intel mpsadbw xmm2, xmmword ptr [ecx], 0x22
+660f3a421122|3344556677885f5f5f5f 32 plan9 MPSADBW $0x22, 0(CX), X2
+660f3a421122|3344556677885f5f5f5f 64 gnu mpsadbw $0x22,(%rcx),%xmm2
+660f3a421122|3344556677885f5f5f5f 64 intel mpsadbw xmm2, xmmword ptr [rcx], 0x22
+660f3a421122|3344556677885f5f5f5f 64 plan9 MPSADBW $0x22, 0(CX), X2
+660f3a441122|3344556677885f5f5f5f 32 intel pclmulqdq xmm2, xmmword ptr [ecx], 0x22
+660f3a441122|3344556677885f5f5f5f 32 plan9 PCLMULQDQ $0x22, 0(CX), X2
+660f3a441122|3344556677885f5f5f5f 64 gnu pclmulqdq $0x22,(%rcx),%xmm2
+660f3a441122|3344556677885f5f5f5f 64 intel pclmulqdq xmm2, xmmword ptr [rcx], 0x22
+660f3a441122|3344556677885f5f5f5f 64 plan9 PCLMULQDQ $0x22, 0(CX), X2
+660f3a601122|3344556677885f5f5f5f 32 intel pcmpestrm xmm2, xmmword ptr [ecx], 0x22
+660f3a601122|3344556677885f5f5f5f 32 plan9 PCMPESTRM $0x22, 0(CX), X2
+660f3a601122|3344556677885f5f5f5f 64 gnu pcmpestrm $0x22,(%rcx),%xmm2
+660f3a601122|3344556677885f5f5f5f 64 intel pcmpestrm xmm2, xmmword ptr [rcx], 0x22
+660f3a601122|3344556677885f5f5f5f 64 plan9 PCMPESTRM $0x22, 0(CX), X2
+660f3a611122|3344556677885f5f5f5f 32 intel pcmpestri xmm2, xmmword ptr [ecx], 0x22
+660f3a611122|3344556677885f5f5f5f 32 plan9 PCMPESTRI $0x22, 0(CX), X2
+660f3a611122|3344556677885f5f5f5f 64 gnu pcmpestri $0x22,(%rcx),%xmm2
+660f3a611122|3344556677885f5f5f5f 64 intel pcmpestri xmm2, xmmword ptr [rcx], 0x22
+660f3a611122|3344556677885f5f5f5f 64 plan9 PCMPESTRI $0x22, 0(CX), X2
+660f3a621122|3344556677885f5f5f5f 32 intel pcmpistrm xmm2, xmmword ptr [ecx], 0x22
+660f3a621122|3344556677885f5f5f5f 32 plan9 PCMPISTRM $0x22, 0(CX), X2
+660f3a621122|3344556677885f5f5f5f 64 gnu pcmpistrm $0x22,(%rcx),%xmm2
+660f3a621122|3344556677885f5f5f5f 64 intel pcmpistrm xmm2, xmmword ptr [rcx], 0x22
+660f3a621122|3344556677885f5f5f5f 64 plan9 PCMPISTRM $0x22, 0(CX), X2
+660f3a631122|3344556677885f5f5f5f 32 intel pcmpistri xmm2, xmmword ptr [ecx], 0x22
+660f3a631122|3344556677885f5f5f5f 32 plan9 PCMPISTRI $0x22, 0(CX), X2
+660f3a631122|3344556677885f5f5f5f 64 gnu pcmpistri $0x22,(%rcx),%xmm2
+660f3a631122|3344556677885f5f5f5f 64 intel pcmpistri xmm2, xmmword ptr [rcx], 0x22
+660f3a631122|3344556677885f5f5f5f 64 plan9 PCMPISTRI $0x22, 0(CX), X2
+660f3adf1122|3344556677885f5f5f5f 32 intel aeskeygenassist xmm2, xmmword ptr [ecx], 0x22
+660f3adf1122|3344556677885f5f5f5f 32 plan9 AESKEYGENASSIST $0x22, 0(CX), X2
+660f3adf1122|3344556677885f5f5f5f 64 gnu aeskeygenassist $0x22,(%rcx),%xmm2
+660f3adf1122|3344556677885f5f5f5f 64 intel aeskeygenassist xmm2, xmmword ptr [rcx], 0x22
+660f3adf1122|3344556677885f5f5f5f 64 plan9 AESKEYGENASSIST $0x22, 0(CX), X2
+660f4011|223344556677885f5f5f5f5f 32 intel cmovo dx, word ptr [ecx]
+660f4011|223344556677885f5f5f5f5f 32 plan9 CMOVO 0(CX), DX
+660f4011|223344556677885f5f5f5f5f 64 gnu cmovo (%rcx),%dx
+660f4011|223344556677885f5f5f5f5f 64 intel cmovo dx, word ptr [rcx]
+660f4011|223344556677885f5f5f5f5f 64 plan9 CMOVO 0(CX), DX
+660f4111|223344556677885f5f5f5f5f 32 intel cmovno dx, word ptr [ecx]
+660f4111|223344556677885f5f5f5f5f 32 plan9 CMOVNO 0(CX), DX
+660f4111|223344556677885f5f5f5f5f 64 gnu cmovno (%rcx),%dx
+660f4111|223344556677885f5f5f5f5f 64 intel cmovno dx, word ptr [rcx]
+660f4111|223344556677885f5f5f5f5f 64 plan9 CMOVNO 0(CX), DX
+660f4211|223344556677885f5f5f5f5f 32 intel cmovb dx, word ptr [ecx]
+660f4211|223344556677885f5f5f5f5f 32 plan9 CMOVB 0(CX), DX
+660f4211|223344556677885f5f5f5f5f 64 gnu cmovb (%rcx),%dx
+660f4211|223344556677885f5f5f5f5f 64 intel cmovb dx, word ptr [rcx]
+660f4211|223344556677885f5f5f5f5f 64 plan9 CMOVB 0(CX), DX
+660f4311|223344556677885f5f5f5f5f 32 intel cmovnb dx, word ptr [ecx]
+660f4311|223344556677885f5f5f5f5f 32 plan9 CMOVAE 0(CX), DX
+660f4311|223344556677885f5f5f5f5f 64 gnu cmovae (%rcx),%dx
+660f4311|223344556677885f5f5f5f5f 64 intel cmovnb dx, word ptr [rcx]
+660f4311|223344556677885f5f5f5f5f 64 plan9 CMOVAE 0(CX), DX
+660f4411|223344556677885f5f5f5f5f 32 intel cmovz dx, word ptr [ecx]
+660f4411|223344556677885f5f5f5f5f 32 plan9 CMOVE 0(CX), DX
+660f4411|223344556677885f5f5f5f5f 64 gnu cmove (%rcx),%dx
+660f4411|223344556677885f5f5f5f5f 64 intel cmovz dx, word ptr [rcx]
+660f4411|223344556677885f5f5f5f5f 64 plan9 CMOVE 0(CX), DX
+660f4511|223344556677885f5f5f5f5f 32 intel cmovnz dx, word ptr [ecx]
+660f4511|223344556677885f5f5f5f5f 32 plan9 CMOVNE 0(CX), DX
+660f4511|223344556677885f5f5f5f5f 64 gnu cmovne (%rcx),%dx
+660f4511|223344556677885f5f5f5f5f 64 intel cmovnz dx, word ptr [rcx]
+660f4511|223344556677885f5f5f5f5f 64 plan9 CMOVNE 0(CX), DX
+660f4611|223344556677885f5f5f5f5f 32 intel cmovbe dx, word ptr [ecx]
+660f4611|223344556677885f5f5f5f5f 32 plan9 CMOVBE 0(CX), DX
+660f4611|223344556677885f5f5f5f5f 64 gnu cmovbe (%rcx),%dx
+660f4611|223344556677885f5f5f5f5f 64 intel cmovbe dx, word ptr [rcx]
+660f4611|223344556677885f5f5f5f5f 64 plan9 CMOVBE 0(CX), DX
+660f4711|223344556677885f5f5f5f5f 32 intel cmovnbe dx, word ptr [ecx]
+660f4711|223344556677885f5f5f5f5f 32 plan9 CMOVA 0(CX), DX
+660f4711|223344556677885f5f5f5f5f 64 gnu cmova (%rcx),%dx
+660f4711|223344556677885f5f5f5f5f 64 intel cmovnbe dx, word ptr [rcx]
+660f4711|223344556677885f5f5f5f5f 64 plan9 CMOVA 0(CX), DX
+660f4811|223344556677885f5f5f5f5f 32 intel cmovs dx, word ptr [ecx]
+660f4811|223344556677885f5f5f5f5f 32 plan9 CMOVS 0(CX), DX
+660f4811|223344556677885f5f5f5f5f 64 gnu cmovs (%rcx),%dx
+660f4811|223344556677885f5f5f5f5f 64 intel cmovs dx, word ptr [rcx]
+660f4811|223344556677885f5f5f5f5f 64 plan9 CMOVS 0(CX), DX
+660f4911|223344556677885f5f5f5f5f 32 intel cmovns dx, word ptr [ecx]
+660f4911|223344556677885f5f5f5f5f 32 plan9 CMOVNS 0(CX), DX
+660f4911|223344556677885f5f5f5f5f 64 gnu cmovns (%rcx),%dx
+660f4911|223344556677885f5f5f5f5f 64 intel cmovns dx, word ptr [rcx]
+660f4911|223344556677885f5f5f5f5f 64 plan9 CMOVNS 0(CX), DX
+660f4a11|223344556677885f5f5f5f5f 32 intel cmovp dx, word ptr [ecx]
+660f4a11|223344556677885f5f5f5f5f 32 plan9 CMOVP 0(CX), DX
+660f4a11|223344556677885f5f5f5f5f 64 gnu cmovp (%rcx),%dx
+660f4a11|223344556677885f5f5f5f5f 64 intel cmovp dx, word ptr [rcx]
+660f4a11|223344556677885f5f5f5f5f 64 plan9 CMOVP 0(CX), DX
+660f4b11|223344556677885f5f5f5f5f 32 intel cmovnp dx, word ptr [ecx]
+660f4b11|223344556677885f5f5f5f5f 32 plan9 CMOVNP 0(CX), DX
+660f4b11|223344556677885f5f5f5f5f 64 gnu cmovnp (%rcx),%dx
+660f4b11|223344556677885f5f5f5f5f 64 intel cmovnp dx, word ptr [rcx]
+660f4b11|223344556677885f5f5f5f5f 64 plan9 CMOVNP 0(CX), DX
+660f4c11|223344556677885f5f5f5f5f 32 intel cmovl dx, word ptr [ecx]
+660f4c11|223344556677885f5f5f5f5f 32 plan9 CMOVL 0(CX), DX
+660f4c11|223344556677885f5f5f5f5f 64 gnu cmovl (%rcx),%dx
+660f4c11|223344556677885f5f5f5f5f 64 intel cmovl dx, word ptr [rcx]
+660f4c11|223344556677885f5f5f5f5f 64 plan9 CMOVL 0(CX), DX
+660f4d11|223344556677885f5f5f5f5f 32 intel cmovnl dx, word ptr [ecx]
+660f4d11|223344556677885f5f5f5f5f 32 plan9 CMOVGE 0(CX), DX
+660f4d11|223344556677885f5f5f5f5f 64 gnu cmovge (%rcx),%dx
+660f4d11|223344556677885f5f5f5f5f 64 intel cmovnl dx, word ptr [rcx]
+660f4d11|223344556677885f5f5f5f5f 64 plan9 CMOVGE 0(CX), DX
+660f4e11|223344556677885f5f5f5f5f 32 intel cmovle dx, word ptr [ecx]
+660f4e11|223344556677885f5f5f5f5f 32 plan9 CMOVLE 0(CX), DX
+660f4e11|223344556677885f5f5f5f5f 64 gnu cmovle (%rcx),%dx
+660f4e11|223344556677885f5f5f5f5f 64 intel cmovle dx, word ptr [rcx]
+660f4e11|223344556677885f5f5f5f5f 64 plan9 CMOVLE 0(CX), DX
+660f4f11|223344556677885f5f5f5f5f 32 intel cmovnle dx, word ptr [ecx]
+660f4f11|223344556677885f5f5f5f5f 32 plan9 CMOVG 0(CX), DX
+660f4f11|223344556677885f5f5f5f5f 64 gnu cmovg (%rcx),%dx
+660f4f11|223344556677885f5f5f5f5f 64 intel cmovnle dx, word ptr [rcx]
+660f4f11|223344556677885f5f5f5f5f 64 plan9 CMOVG 0(CX), DX
+660f50c0|11223344556677885f5f5f5f 32 intel movmskpd eax, xmm0
+660f50c0|11223344556677885f5f5f5f 32 plan9 MOVMSKPD X0, AX
+660f50c0|11223344556677885f5f5f5f 64 gnu movmskpd %xmm0,%eax
+660f50c0|11223344556677885f5f5f5f 64 intel movmskpd eax, xmm0
+660f50c0|11223344556677885f5f5f5f 64 plan9 MOVMSKPD X0, AX
+660f5111|223344556677885f5f5f5f5f 32 intel sqrtpd xmm2, xmmword ptr [ecx]
+660f5111|223344556677885f5f5f5f5f 32 plan9 SQRTPD 0(CX), X2
+660f5111|223344556677885f5f5f5f5f 64 gnu sqrtpd (%rcx),%xmm2
+660f5111|223344556677885f5f5f5f5f 64 intel sqrtpd xmm2, xmmword ptr [rcx]
+660f5111|223344556677885f5f5f5f5f 64 plan9 SQRTPD 0(CX), X2
+660f5411|223344556677885f5f5f5f5f 32 intel andpd xmm2, xmmword ptr [ecx]
+660f5411|223344556677885f5f5f5f5f 32 plan9 ANDPD 0(CX), X2
+660f5411|223344556677885f5f5f5f5f 64 gnu andpd (%rcx),%xmm2
+660f5411|223344556677885f5f5f5f5f 64 intel andpd xmm2, xmmword ptr [rcx]
+660f5411|223344556677885f5f5f5f5f 64 plan9 ANDPD 0(CX), X2
+660f5511|223344556677885f5f5f5f5f 32 intel andnpd xmm2, xmmword ptr [ecx]
+660f5511|223344556677885f5f5f5f5f 32 plan9 ANDNPD 0(CX), X2
+660f5511|223344556677885f5f5f5f5f 64 gnu andnpd (%rcx),%xmm2
+660f5511|223344556677885f5f5f5f5f 64 intel andnpd xmm2, xmmword ptr [rcx]
+660f5511|223344556677885f5f5f5f5f 64 plan9 ANDNPD 0(CX), X2
+660f5611|223344556677885f5f5f5f5f 32 intel orpd xmm2, xmmword ptr [ecx]
+660f5611|223344556677885f5f5f5f5f 32 plan9 ORPD 0(CX), X2
+660f5611|223344556677885f5f5f5f5f 64 gnu orpd (%rcx),%xmm2
+660f5611|223344556677885f5f5f5f5f 64 intel orpd xmm2, xmmword ptr [rcx]
+660f5611|223344556677885f5f5f5f5f 64 plan9 ORPD 0(CX), X2
+660f5711|223344556677885f5f5f5f5f 32 intel xorpd xmm2, xmmword ptr [ecx]
+660f5711|223344556677885f5f5f5f5f 32 plan9 XORPD 0(CX), X2
+660f5711|223344556677885f5f5f5f5f 64 gnu xorpd (%rcx),%xmm2
+660f5711|223344556677885f5f5f5f5f 64 intel xorpd xmm2, xmmword ptr [rcx]
+660f5711|223344556677885f5f5f5f5f 64 plan9 XORPD 0(CX), X2
+660f5811|223344556677885f5f5f5f5f 32 intel addpd xmm2, xmmword ptr [ecx]
+660f5811|223344556677885f5f5f5f5f 32 plan9 ADDPD 0(CX), X2
+660f5811|223344556677885f5f5f5f5f 64 gnu addpd (%rcx),%xmm2
+660f5811|223344556677885f5f5f5f5f 64 intel addpd xmm2, xmmword ptr [rcx]
+660f5811|223344556677885f5f5f5f5f 64 plan9 ADDPD 0(CX), X2
+660f5911|223344556677885f5f5f5f5f 32 intel mulpd xmm2, xmmword ptr [ecx]
+660f5911|223344556677885f5f5f5f5f 32 plan9 MULPD 0(CX), X2
+660f5911|223344556677885f5f5f5f5f 64 gnu mulpd (%rcx),%xmm2
+660f5911|223344556677885f5f5f5f5f 64 intel mulpd xmm2, xmmword ptr [rcx]
+660f5911|223344556677885f5f5f5f5f 64 plan9 MULPD 0(CX), X2
+660f5a11|223344556677885f5f5f5f5f 32 intel cvtpd2ps xmm2, xmmword ptr [ecx]
+660f5a11|223344556677885f5f5f5f5f 32 plan9 CVTPD2PS 0(CX), X2
+660f5a11|223344556677885f5f5f5f5f 64 gnu cvtpd2ps (%rcx),%xmm2
+660f5a11|223344556677885f5f5f5f5f 64 intel cvtpd2ps xmm2, xmmword ptr [rcx]
+660f5a11|223344556677885f5f5f5f5f 64 plan9 CVTPD2PS 0(CX), X2
+660f5b11|223344556677885f5f5f5f5f 32 intel cvtps2dq xmm2, xmmword ptr [ecx]
+660f5b11|223344556677885f5f5f5f5f 32 plan9 CVTPS2DQ 0(CX), X2
+660f5b11|223344556677885f5f5f5f5f 64 gnu cvtps2dq (%rcx),%xmm2
+660f5b11|223344556677885f5f5f5f5f 64 intel cvtps2dq xmm2, xmmword ptr [rcx]
+660f5b11|223344556677885f5f5f5f5f 64 plan9 CVTPS2DQ 0(CX), X2
+660f5c11|223344556677885f5f5f5f5f 32 intel subpd xmm2, xmmword ptr [ecx]
+660f5c11|223344556677885f5f5f5f5f 32 plan9 SUBPD 0(CX), X2
+660f5c11|223344556677885f5f5f5f5f 64 gnu subpd (%rcx),%xmm2
+660f5c11|223344556677885f5f5f5f5f 64 intel subpd xmm2, xmmword ptr [rcx]
+660f5c11|223344556677885f5f5f5f5f 64 plan9 SUBPD 0(CX), X2
+660f5d11|223344556677885f5f5f5f5f 32 intel minpd xmm2, xmmword ptr [ecx]
+660f5d11|223344556677885f5f5f5f5f 32 plan9 MINPD 0(CX), X2
+660f5d11|223344556677885f5f5f5f5f 64 gnu minpd (%rcx),%xmm2
+660f5d11|223344556677885f5f5f5f5f 64 intel minpd xmm2, xmmword ptr [rcx]
+660f5d11|223344556677885f5f5f5f5f 64 plan9 MINPD 0(CX), X2
+660f5e11|223344556677885f5f5f5f5f 32 intel divpd xmm2, xmmword ptr [ecx]
+660f5e11|223344556677885f5f5f5f5f 32 plan9 DIVPD 0(CX), X2
+660f5e11|223344556677885f5f5f5f5f 64 gnu divpd (%rcx),%xmm2
+660f5e11|223344556677885f5f5f5f5f 64 intel divpd xmm2, xmmword ptr [rcx]
+660f5e11|223344556677885f5f5f5f5f 64 plan9 DIVPD 0(CX), X2
+660f5f11|223344556677885f5f5f5f5f 32 intel maxpd xmm2, xmmword ptr [ecx]
+660f5f11|223344556677885f5f5f5f5f 32 plan9 MAXPD 0(CX), X2
+660f5f11|223344556677885f5f5f5f5f 64 gnu maxpd (%rcx),%xmm2
+660f5f11|223344556677885f5f5f5f5f 64 intel maxpd xmm2, xmmword ptr [rcx]
+660f5f11|223344556677885f5f5f5f5f 64 plan9 MAXPD 0(CX), X2
+660f6011|223344556677885f5f5f5f5f 32 intel punpcklbw xmm2, xmmword ptr [ecx]
+660f6011|223344556677885f5f5f5f5f 32 plan9 PUNPCKLBW 0(CX), X2
+660f6011|223344556677885f5f5f5f5f 64 gnu punpcklbw (%rcx),%xmm2
+660f6011|223344556677885f5f5f5f5f 64 intel punpcklbw xmm2, xmmword ptr [rcx]
+660f6011|223344556677885f5f5f5f5f 64 plan9 PUNPCKLBW 0(CX), X2
+660f6111|223344556677885f5f5f5f5f 32 intel punpcklwd xmm2, xmmword ptr [ecx]
+660f6111|223344556677885f5f5f5f5f 32 plan9 PUNPCKLWD 0(CX), X2
+660f6111|223344556677885f5f5f5f5f 64 gnu punpcklwd (%rcx),%xmm2
+660f6111|223344556677885f5f5f5f5f 64 intel punpcklwd xmm2, xmmword ptr [rcx]
+660f6111|223344556677885f5f5f5f5f 64 plan9 PUNPCKLWD 0(CX), X2
+660f6211|223344556677885f5f5f5f5f 32 intel punpckldq xmm2, xmmword ptr [ecx]
+660f6211|223344556677885f5f5f5f5f 32 plan9 PUNPCKLDQ 0(CX), X2
+660f6211|223344556677885f5f5f5f5f 64 gnu punpckldq (%rcx),%xmm2
+660f6211|223344556677885f5f5f5f5f 64 intel punpckldq xmm2, xmmword ptr [rcx]
+660f6211|223344556677885f5f5f5f5f 64 plan9 PUNPCKLDQ 0(CX), X2
+660f6311|223344556677885f5f5f5f5f 32 intel packsswb xmm2, xmmword ptr [ecx]
+660f6311|223344556677885f5f5f5f5f 32 plan9 PACKSSWB 0(CX), X2
+660f6311|223344556677885f5f5f5f5f 64 gnu packsswb (%rcx),%xmm2
+660f6311|223344556677885f5f5f5f5f 64 intel packsswb xmm2, xmmword ptr [rcx]
+660f6311|223344556677885f5f5f5f5f 64 plan9 PACKSSWB 0(CX), X2
+660f6411|223344556677885f5f5f5f5f 32 intel pcmpgtb xmm2, xmmword ptr [ecx]
+660f6411|223344556677885f5f5f5f5f 32 plan9 PCMPGTB 0(CX), X2
+660f6411|223344556677885f5f5f5f5f 64 gnu pcmpgtb (%rcx),%xmm2
+660f6411|223344556677885f5f5f5f5f 64 intel pcmpgtb xmm2, xmmword ptr [rcx]
+660f6411|223344556677885f5f5f5f5f 64 plan9 PCMPGTB 0(CX), X2
+660f6511|223344556677885f5f5f5f5f 32 intel pcmpgtw xmm2, xmmword ptr [ecx]
+660f6511|223344556677885f5f5f5f5f 32 plan9 PCMPGTW 0(CX), X2
+660f6511|223344556677885f5f5f5f5f 64 gnu pcmpgtw (%rcx),%xmm2
+660f6511|223344556677885f5f5f5f5f 64 intel pcmpgtw xmm2, xmmword ptr [rcx]
+660f6511|223344556677885f5f5f5f5f 64 plan9 PCMPGTW 0(CX), X2
+660f6611|223344556677885f5f5f5f5f 32 intel pcmpgtd xmm2, xmmword ptr [ecx]
+660f6611|223344556677885f5f5f5f5f 32 plan9 PCMPGTD 0(CX), X2
+660f6611|223344556677885f5f5f5f5f 64 gnu pcmpgtd (%rcx),%xmm2
+660f6611|223344556677885f5f5f5f5f 64 intel pcmpgtd xmm2, xmmword ptr [rcx]
+660f6611|223344556677885f5f5f5f5f 64 plan9 PCMPGTD 0(CX), X2
+660f6711|223344556677885f5f5f5f5f 32 intel packuswb xmm2, xmmword ptr [ecx]
+660f6711|223344556677885f5f5f5f5f 32 plan9 PACKUSWB 0(CX), X2
+660f6711|223344556677885f5f5f5f5f 64 gnu packuswb (%rcx),%xmm2
+660f6711|223344556677885f5f5f5f5f 64 intel packuswb xmm2, xmmword ptr [rcx]
+660f6711|223344556677885f5f5f5f5f 64 plan9 PACKUSWB 0(CX), X2
+660f6811|223344556677885f5f5f5f5f 32 intel punpckhbw xmm2, xmmword ptr [ecx]
+660f6811|223344556677885f5f5f5f5f 32 plan9 PUNPCKHBW 0(CX), X2
+660f6811|223344556677885f5f5f5f5f 64 gnu punpckhbw (%rcx),%xmm2
+660f6811|223344556677885f5f5f5f5f 64 intel punpckhbw xmm2, xmmword ptr [rcx]
+660f6811|223344556677885f5f5f5f5f 64 plan9 PUNPCKHBW 0(CX), X2
+660f6911|223344556677885f5f5f5f5f 32 intel punpckhwd xmm2, xmmword ptr [ecx]
+660f6911|223344556677885f5f5f5f5f 32 plan9 PUNPCKHWD 0(CX), X2
+660f6911|223344556677885f5f5f5f5f 64 gnu punpckhwd (%rcx),%xmm2
+660f6911|223344556677885f5f5f5f5f 64 intel punpckhwd xmm2, xmmword ptr [rcx]
+660f6911|223344556677885f5f5f5f5f 64 plan9 PUNPCKHWD 0(CX), X2
+660f6a11|223344556677885f5f5f5f5f 32 intel punpckhdq xmm2, xmmword ptr [ecx]
+660f6a11|223344556677885f5f5f5f5f 32 plan9 PUNPCKHDQ 0(CX), X2
+660f6a11|223344556677885f5f5f5f5f 64 gnu punpckhdq (%rcx),%xmm2
+660f6a11|223344556677885f5f5f5f5f 64 intel punpckhdq xmm2, xmmword ptr [rcx]
+660f6a11|223344556677885f5f5f5f5f 64 plan9 PUNPCKHDQ 0(CX), X2
+660f6b11|223344556677885f5f5f5f5f 32 intel packssdw xmm2, xmmword ptr [ecx]
+660f6b11|223344556677885f5f5f5f5f 32 plan9 PACKSSDW 0(CX), X2
+660f6b11|223344556677885f5f5f5f5f 64 gnu packssdw (%rcx),%xmm2
+660f6b11|223344556677885f5f5f5f5f 64 intel packssdw xmm2, xmmword ptr [rcx]
+660f6b11|223344556677885f5f5f5f5f 64 plan9 PACKSSDW 0(CX), X2
+660f6c11|223344556677885f5f5f5f5f 32 intel punpcklqdq xmm2, xmmword ptr [ecx]
+660f6c11|223344556677885f5f5f5f5f 32 plan9 PUNPCKLQDQ 0(CX), X2
+660f6c11|223344556677885f5f5f5f5f 64 gnu punpcklqdq (%rcx),%xmm2
+660f6c11|223344556677885f5f5f5f5f 64 intel punpcklqdq xmm2, xmmword ptr [rcx]
+660f6c11|223344556677885f5f5f5f5f 64 plan9 PUNPCKLQDQ 0(CX), X2
+660f6d11|223344556677885f5f5f5f5f 32 intel punpckhqdq xmm2, xmmword ptr [ecx]
+660f6d11|223344556677885f5f5f5f5f 32 plan9 PUNPCKHQDQ 0(CX), X2
+660f6d11|223344556677885f5f5f5f5f 64 gnu punpckhqdq (%rcx),%xmm2
+660f6d11|223344556677885f5f5f5f5f 64 intel punpckhqdq xmm2, xmmword ptr [rcx]
+660f6d11|223344556677885f5f5f5f5f 64 plan9 PUNPCKHQDQ 0(CX), X2
+660f6e11|223344556677885f5f5f5f5f 32 intel movd xmm2, dword ptr [ecx]
+660f6e11|223344556677885f5f5f5f5f 32 plan9 MOVD 0(CX), X2
+660f6e11|223344556677885f5f5f5f5f 64 gnu movd (%rcx),%xmm2
+660f6e11|223344556677885f5f5f5f5f 64 intel movd xmm2, dword ptr [rcx]
+660f6e11|223344556677885f5f5f5f5f 64 plan9 MOVD 0(CX), X2
+660f6f11|223344556677885f5f5f5f5f 32 intel movdqa xmm2, xmmword ptr [ecx]
+660f6f11|223344556677885f5f5f5f5f 32 plan9 MOVDQA 0(CX), X2
+660f6f11|223344556677885f5f5f5f5f 64 gnu movdqa (%rcx),%xmm2
+660f6f11|223344556677885f5f5f5f5f 64 intel movdqa xmm2, xmmword ptr [rcx]
+660f6f11|223344556677885f5f5f5f5f 64 plan9 MOVDQA 0(CX), X2
+660f701122|3344556677885f5f5f5f5f 32 intel pshufd xmm2, xmmword ptr [ecx], 0x22
+660f701122|3344556677885f5f5f5f5f 32 plan9 PSHUFD $0x22, 0(CX), X2
+660f701122|3344556677885f5f5f5f5f 64 gnu pshufd $0x22,(%rcx),%xmm2
+660f701122|3344556677885f5f5f5f5f 64 intel pshufd xmm2, xmmword ptr [rcx], 0x22
+660f701122|3344556677885f5f5f5f5f 64 plan9 PSHUFD $0x22, 0(CX), X2
+660f71d011|223344556677885f5f5f5f 32 intel psrlw xmm0, 0x11
+660f71d011|223344556677885f5f5f5f 32 plan9 PSRLW $0x11, X0
+660f71d011|223344556677885f5f5f5f 64 gnu psrlw $0x11,%xmm0
+660f71d011|223344556677885f5f5f5f 64 intel psrlw xmm0, 0x11
+660f71d011|223344556677885f5f5f5f 64 plan9 PSRLW $0x11, X0
+660f71e011|223344556677885f5f5f5f 32 intel psraw xmm0, 0x11
+660f71e011|223344556677885f5f5f5f 32 plan9 PSRAW $0x11, X0
+660f71e011|223344556677885f5f5f5f 64 gnu psraw $0x11,%xmm0
+660f71e011|223344556677885f5f5f5f 64 intel psraw xmm0, 0x11
+660f71e011|223344556677885f5f5f5f 64 plan9 PSRAW $0x11, X0
+660f71f011|223344556677885f5f5f5f 32 intel psllw xmm0, 0x11
+660f71f011|223344556677885f5f5f5f 32 plan9 PSLLW $0x11, X0
+660f71f011|223344556677885f5f5f5f 64 gnu psllw $0x11,%xmm0
+660f71f011|223344556677885f5f5f5f 64 intel psllw xmm0, 0x11
+660f71f011|223344556677885f5f5f5f 64 plan9 PSLLW $0x11, X0
+660f72d011|223344556677885f5f5f5f 32 intel psrld xmm0, 0x11
+660f72d011|223344556677885f5f5f5f 32 plan9 PSRLD $0x11, X0
+660f72d011|223344556677885f5f5f5f 64 gnu psrld $0x11,%xmm0
+660f72d011|223344556677885f5f5f5f 64 intel psrld xmm0, 0x11
+660f72d011|223344556677885f5f5f5f 64 plan9 PSRLD $0x11, X0
+660f72e011|223344556677885f5f5f5f 32 intel psrad xmm0, 0x11
+660f72e011|223344556677885f5f5f5f 32 plan9 PSRAD $0x11, X0
+660f72e011|223344556677885f5f5f5f 64 gnu psrad $0x11,%xmm0
+660f72e011|223344556677885f5f5f5f 64 intel psrad xmm0, 0x11
+660f72e011|223344556677885f5f5f5f 64 plan9 PSRAD $0x11, X0
+660f72f011|223344556677885f5f5f5f 32 intel pslld xmm0, 0x11
+660f72f011|223344556677885f5f5f5f 32 plan9 PSLLD $0x11, X0
+660f72f011|223344556677885f5f5f5f 64 gnu pslld $0x11,%xmm0
+660f72f011|223344556677885f5f5f5f 64 intel pslld xmm0, 0x11
+660f72f011|223344556677885f5f5f5f 64 plan9 PSLLD $0x11, X0
+660f73d011|223344556677885f5f5f5f 32 intel psrlq xmm0, 0x11
+660f73d011|223344556677885f5f5f5f 32 plan9 PSRLQ $0x11, X0
+660f73d011|223344556677885f5f5f5f 64 gnu psrlq $0x11,%xmm0
+660f73d011|223344556677885f5f5f5f 64 intel psrlq xmm0, 0x11
+660f73d011|223344556677885f5f5f5f 64 plan9 PSRLQ $0x11, X0
+660f73d811|223344556677885f5f5f5f 32 intel psrldq xmm0, 0x11
+660f73d811|223344556677885f5f5f5f 32 plan9 PSRLDQ $0x11, X0
+660f73d811|223344556677885f5f5f5f 64 gnu psrldq $0x11,%xmm0
+660f73d811|223344556677885f5f5f5f 64 intel psrldq xmm0, 0x11
+660f73d811|223344556677885f5f5f5f 64 plan9 PSRLDQ $0x11, X0
+660f73f011|223344556677885f5f5f5f 32 intel psllq xmm0, 0x11
+660f73f011|223344556677885f5f5f5f 32 plan9 PSLLQ $0x11, X0
+660f73f011|223344556677885f5f5f5f 64 gnu psllq $0x11,%xmm0
+660f73f011|223344556677885f5f5f5f 64 intel psllq xmm0, 0x11
+660f73f011|223344556677885f5f5f5f 64 plan9 PSLLQ $0x11, X0
+660f73f811|223344556677885f5f5f5f 32 intel pslldq xmm0, 0x11
+660f73f811|223344556677885f5f5f5f 32 plan9 PSLLDQ $0x11, X0
+660f73f811|223344556677885f5f5f5f 64 gnu pslldq $0x11,%xmm0
+660f73f811|223344556677885f5f5f5f 64 intel pslldq xmm0, 0x11
+660f73f811|223344556677885f5f5f5f 64 plan9 PSLLDQ $0x11, X0
+660f7411|223344556677885f5f5f5f5f 32 intel pcmpeqb xmm2, xmmword ptr [ecx]
+660f7411|223344556677885f5f5f5f5f 32 plan9 PCMPEQB 0(CX), X2
+660f7411|223344556677885f5f5f5f5f 64 gnu pcmpeqb (%rcx),%xmm2
+660f7411|223344556677885f5f5f5f5f 64 intel pcmpeqb xmm2, xmmword ptr [rcx]
+660f7411|223344556677885f5f5f5f5f 64 plan9 PCMPEQB 0(CX), X2
+660f7511|223344556677885f5f5f5f5f 32 intel pcmpeqw xmm2, xmmword ptr [ecx]
+660f7511|223344556677885f5f5f5f5f 32 plan9 PCMPEQW 0(CX), X2
+660f7511|223344556677885f5f5f5f5f 64 gnu pcmpeqw (%rcx),%xmm2
+660f7511|223344556677885f5f5f5f5f 64 intel pcmpeqw xmm2, xmmword ptr [rcx]
+660f7511|223344556677885f5f5f5f5f 64 plan9 PCMPEQW 0(CX), X2
+660f7611|223344556677885f5f5f5f5f 32 intel pcmpeqd xmm2, xmmword ptr [ecx]
+660f7611|223344556677885f5f5f5f5f 32 plan9 PCMPEQD 0(CX), X2
+660f7611|223344556677885f5f5f5f5f 64 gnu pcmpeqd (%rcx),%xmm2
+660f7611|223344556677885f5f5f5f5f 64 intel pcmpeqd xmm2, xmmword ptr [rcx]
+660f7611|223344556677885f5f5f5f5f 64 plan9 PCMPEQD 0(CX), X2
+660f7c11|223344556677885f5f5f5f5f 32 intel haddpd xmm2, xmmword ptr [ecx]
+660f7c11|223344556677885f5f5f5f5f 32 plan9 HADDPD 0(CX), X2
+660f7c11|223344556677885f5f5f5f5f 64 gnu haddpd (%rcx),%xmm2
+660f7c11|223344556677885f5f5f5f5f 64 intel haddpd xmm2, xmmword ptr [rcx]
+660f7c11|223344556677885f5f5f5f5f 64 plan9 HADDPD 0(CX), X2
+660f7d11|223344556677885f5f5f5f5f 32 intel hsubpd xmm2, xmmword ptr [ecx]
+660f7d11|223344556677885f5f5f5f5f 32 plan9 HSUBPD 0(CX), X2
+660f7d11|223344556677885f5f5f5f5f 64 gnu hsubpd (%rcx),%xmm2
+660f7d11|223344556677885f5f5f5f5f 64 intel hsubpd xmm2, xmmword ptr [rcx]
+660f7d11|223344556677885f5f5f5f5f 64 plan9 HSUBPD 0(CX), X2
+660f7e11|223344556677885f5f5f5f5f 32 intel movd dword ptr [ecx], xmm2
+660f7e11|223344556677885f5f5f5f5f 32 plan9 MOVD X2, 0(CX)
+660f7e11|223344556677885f5f5f5f5f 64 gnu movd %xmm2,(%rcx)
+660f7e11|223344556677885f5f5f5f5f 64 intel movd dword ptr [rcx], xmm2
+660f7e11|223344556677885f5f5f5f5f 64 plan9 MOVD X2, 0(CX)
+660f7f11|223344556677885f5f5f5f5f 32 intel movdqa xmmword ptr [ecx], xmm2
+660f7f11|223344556677885f5f5f5f5f 32 plan9 MOVDQA X2, 0(CX)
+660f7f11|223344556677885f5f5f5f5f 64 gnu movdqa %xmm2,(%rcx)
+660f7f11|223344556677885f5f5f5f5f 64 intel movdqa xmmword ptr [rcx], xmm2
+660f7f11|223344556677885f5f5f5f5f 64 plan9 MOVDQA X2, 0(CX)
+660f8011223344|556677885f5f5f5f5f 64 gnu jo .+0x44332211
+660f8011223344|556677885f5f5f5f5f 64 intel jo .+0x44332211
+660f8011223344|556677885f5f5f5f5f 64 plan9 JO .+1144201745
+660f801122|3344556677885f5f5f5f5f 32 intel jo .+0x2211
+660f801122|3344556677885f5f5f5f5f 32 plan9 JO .+8721
+660f8111223344|556677885f5f5f5f5f 64 gnu jno .+0x44332211
+660f8111223344|556677885f5f5f5f5f 64 intel jno .+0x44332211
+660f8111223344|556677885f5f5f5f5f 64 plan9 JNO .+1144201745
+660f811122|3344556677885f5f5f5f5f 32 intel jno .+0x2211
+660f811122|3344556677885f5f5f5f5f 32 plan9 JNO .+8721
+660f8211223344|556677885f5f5f5f5f 64 gnu jb .+0x44332211
+660f8211223344|556677885f5f5f5f5f 64 intel jb .+0x44332211
+660f8211223344|556677885f5f5f5f5f 64 plan9 JB .+1144201745
+660f821122|3344556677885f5f5f5f5f 32 intel jb .+0x2211
+660f821122|3344556677885f5f5f5f5f 32 plan9 JB .+8721
+660f8311223344|556677885f5f5f5f5f 64 gnu jae .+0x44332211
+660f8311223344|556677885f5f5f5f5f 64 intel jnb .+0x44332211
+660f8311223344|556677885f5f5f5f5f 64 plan9 JAE .+1144201745
+660f831122|3344556677885f5f5f5f5f 32 intel jnb .+0x2211
+660f831122|3344556677885f5f5f5f5f 32 plan9 JAE .+8721
+660f8411223344|556677885f5f5f5f5f 64 gnu je .+0x44332211
+660f8411223344|556677885f5f5f5f5f 64 intel jz .+0x44332211
+660f8411223344|556677885f5f5f5f5f 64 plan9 JE .+1144201745
+660f841122|3344556677885f5f5f5f5f 32 intel jz .+0x2211
+660f841122|3344556677885f5f5f5f5f 32 plan9 JE .+8721
+660f8511223344|556677885f5f5f5f5f 64 gnu jne .+0x44332211
+660f8511223344|556677885f5f5f5f5f 64 intel jnz .+0x44332211
+660f8511223344|556677885f5f5f5f5f 64 plan9 JNE .+1144201745
+660f851122|3344556677885f5f5f5f5f 32 intel jnz .+0x2211
+660f851122|3344556677885f5f5f5f5f 32 plan9 JNE .+8721
+660f8611223344|556677885f5f5f5f5f 64 gnu jbe .+0x44332211
+660f8611223344|556677885f5f5f5f5f 64 intel jbe .+0x44332211
+660f8611223344|556677885f5f5f5f5f 64 plan9 JBE .+1144201745
+660f861122|3344556677885f5f5f5f5f 32 intel jbe .+0x2211
+660f861122|3344556677885f5f5f5f5f 32 plan9 JBE .+8721
+660f8711223344|556677885f5f5f5f5f 64 gnu ja .+0x44332211
+660f8711223344|556677885f5f5f5f5f 64 intel jnbe .+0x44332211
+660f8711223344|556677885f5f5f5f5f 64 plan9 JA .+1144201745
+660f871122|3344556677885f5f5f5f5f 32 intel jnbe .+0x2211
+660f871122|3344556677885f5f5f5f5f 32 plan9 JA .+8721
+660f8811223344|556677885f5f5f5f5f 64 gnu js .+0x44332211
+660f8811223344|556677885f5f5f5f5f 64 intel js .+0x44332211
+660f8811223344|556677885f5f5f5f5f 64 plan9 JS .+1144201745
+660f881122|3344556677885f5f5f5f5f 32 intel js .+0x2211
+660f881122|3344556677885f5f5f5f5f 32 plan9 JS .+8721
+660f8911223344|556677885f5f5f5f5f 64 gnu jns .+0x44332211
+660f8911223344|556677885f5f5f5f5f 64 intel jns .+0x44332211
+660f8911223344|556677885f5f5f5f5f 64 plan9 JNS .+1144201745
+660f891122|3344556677885f5f5f5f5f 32 intel jns .+0x2211
+660f891122|3344556677885f5f5f5f5f 32 plan9 JNS .+8721
+660f8a11223344|556677885f5f5f5f5f 64 gnu jp .+0x44332211
+660f8a11223344|556677885f5f5f5f5f 64 intel jp .+0x44332211
+660f8a11223344|556677885f5f5f5f5f 64 plan9 JP .+1144201745
+660f8a1122|3344556677885f5f5f5f5f 32 intel jp .+0x2211
+660f8a1122|3344556677885f5f5f5f5f 32 plan9 JP .+8721
+660f8b11223344|556677885f5f5f5f5f 64 gnu jnp .+0x44332211
+660f8b11223344|556677885f5f5f5f5f 64 intel jnp .+0x44332211
+660f8b11223344|556677885f5f5f5f5f 64 plan9 JNP .+1144201745
+660f8b1122|3344556677885f5f5f5f5f 32 intel jnp .+0x2211
+660f8b1122|3344556677885f5f5f5f5f 32 plan9 JNP .+8721
+660f8c11223344|556677885f5f5f5f5f 64 gnu jl .+0x44332211
+660f8c11223344|556677885f5f5f5f5f 64 intel jl .+0x44332211
+660f8c11223344|556677885f5f5f5f5f 64 plan9 JL .+1144201745
+660f8c1122|3344556677885f5f5f5f5f 32 intel jl .+0x2211
+660f8c1122|3344556677885f5f5f5f5f 32 plan9 JL .+8721
+660f8d11223344|556677885f5f5f5f5f 64 gnu jge .+0x44332211
+660f8d11223344|556677885f5f5f5f5f 64 intel jnl .+0x44332211
+660f8d11223344|556677885f5f5f5f5f 64 plan9 JGE .+1144201745
+660f8d1122|3344556677885f5f5f5f5f 32 intel jnl .+0x2211
+660f8d1122|3344556677885f5f5f5f5f 32 plan9 JGE .+8721
+660f8e11223344|556677885f5f5f5f5f 64 gnu jle .+0x44332211
+660f8e11223344|556677885f5f5f5f5f 64 intel jle .+0x44332211
+660f8e11223344|556677885f5f5f5f5f 64 plan9 JLE .+1144201745
+660f8e1122|3344556677885f5f5f5f5f 32 intel jle .+0x2211
+660f8e1122|3344556677885f5f5f5f5f 32 plan9 JLE .+8721
+660f8f11223344|556677885f5f5f5f5f 64 gnu jg .+0x44332211
+660f8f11223344|556677885f5f5f5f5f 64 intel jnle .+0x44332211
+660f8f11223344|556677885f5f5f5f5f 64 plan9 JG .+1144201745
+660f8f1122|3344556677885f5f5f5f5f 32 intel jnle .+0x2211
+660f8f1122|3344556677885f5f5f5f5f 32 plan9 JG .+8721
+660fa1|11223344556677885f5f5f5f5f 32 intel pop fs
+660fa1|11223344556677885f5f5f5f5f 32 plan9 POPW FS
+660fa1|11223344556677885f5f5f5f5f 64 gnu popw %fs
+660fa1|11223344556677885f5f5f5f5f 64 intel pop fs
+660fa1|11223344556677885f5f5f5f5f 64 plan9 POPW FS
+660fa311|223344556677885f5f5f5f5f 32 intel bt word ptr [ecx], dx
+660fa311|223344556677885f5f5f5f5f 32 plan9 BTW DX, 0(CX)
+660fa311|223344556677885f5f5f5f5f 64 gnu bt %dx,(%rcx)
+660fa311|223344556677885f5f5f5f5f 64 intel bt word ptr [rcx], dx
+660fa311|223344556677885f5f5f5f5f 64 plan9 BTW DX, 0(CX)
+660fa41122|3344556677885f5f5f5f5f 32 intel shld word ptr [ecx], dx, 0x22
+660fa41122|3344556677885f5f5f5f5f 32 plan9 SHLDW $0x22, DX, 0(CX)
+660fa41122|3344556677885f5f5f5f5f 64 gnu shld $0x22,%dx,(%rcx)
+660fa41122|3344556677885f5f5f5f5f 64 intel shld word ptr [rcx], dx, 0x22
+660fa41122|3344556677885f5f5f5f5f 64 plan9 SHLDW $0x22, DX, 0(CX)
+660fa511|223344556677885f5f5f5f5f 32 intel shld word ptr [ecx], dx, cl
+660fa511|223344556677885f5f5f5f5f 32 plan9 SHLDW CL, DX, 0(CX)
+660fa511|223344556677885f5f5f5f5f 64 gnu shld %cl,%dx,(%rcx)
+660fa511|223344556677885f5f5f5f5f 64 intel shld word ptr [rcx], dx, cl
+660fa511|223344556677885f5f5f5f5f 64 plan9 SHLDW CL, DX, 0(CX)
+660fa9|11223344556677885f5f5f5f5f 32 intel pop gs
+660fa9|11223344556677885f5f5f5f5f 32 plan9 POPW GS
+660fa9|11223344556677885f5f5f5f5f 64 gnu popw %gs
+660fa9|11223344556677885f5f5f5f5f 64 intel pop gs
+660fa9|11223344556677885f5f5f5f5f 64 plan9 POPW GS
+660fab11|223344556677885f5f5f5f5f 32 intel bts word ptr [ecx], dx
+660fab11|223344556677885f5f5f5f5f 32 plan9 BTSW DX, 0(CX)
+660fab11|223344556677885f5f5f5f5f 64 gnu bts %dx,(%rcx)
+660fab11|223344556677885f5f5f5f5f 64 intel bts word ptr [rcx], dx
+660fab11|223344556677885f5f5f5f5f 64 plan9 BTSW DX, 0(CX)
+660fac1122|3344556677885f5f5f5f5f 32 intel shrd word ptr [ecx], dx, 0x22
+660fac1122|3344556677885f5f5f5f5f 32 plan9 SHRDW $0x22, DX, 0(CX)
+660fac1122|3344556677885f5f5f5f5f 64 gnu shrd $0x22,%dx,(%rcx)
+660fac1122|3344556677885f5f5f5f5f 64 intel shrd word ptr [rcx], dx, 0x22
+660fac1122|3344556677885f5f5f5f5f 64 plan9 SHRDW $0x22, DX, 0(CX)
+660fad11|223344556677885f5f5f5f5f 32 intel shrd word ptr [ecx], dx, cl
+660fad11|223344556677885f5f5f5f5f 32 plan9 SHRDW CL, DX, 0(CX)
+660fad11|223344556677885f5f5f5f5f 64 gnu shrd %cl,%dx,(%rcx)
+660fad11|223344556677885f5f5f5f5f 64 intel shrd word ptr [rcx], dx, cl
+660fad11|223344556677885f5f5f5f5f 64 plan9 SHRDW CL, DX, 0(CX)
+660fae00|11223344556677885f5f5f5f 32 intel fxsave ptr [eax]
+660fae00|11223344556677885f5f5f5f 32 plan9 FXSAVE 0(AX)
+660fae00|11223344556677885f5f5f5f 64 gnu fxsave (%rax)
+660fae00|11223344556677885f5f5f5f 64 intel fxsave ptr [rax]
+660fae00|11223344556677885f5f5f5f 64 plan9 FXSAVE 0(AX)
+660fae08|11223344556677885f5f5f5f 32 intel fxrstor ptr [eax]
+660fae08|11223344556677885f5f5f5f 32 plan9 FXRSTOR 0(AX)
+660fae08|11223344556677885f5f5f5f 64 gnu data16 fxrstor (%rax)
+660fae08|11223344556677885f5f5f5f 64 intel fxrstor ptr [rax]
+660fae08|11223344556677885f5f5f5f 64 plan9 FXRSTOR 0(AX)
+660fae20|11223344556677885f5f5f5f 32 intel xsave ptr [eax]
+660fae20|11223344556677885f5f5f5f 32 plan9 XSAVE 0(AX)
+660fae20|11223344556677885f5f5f5f 64 gnu data16 xsave (%rax)
+660fae20|11223344556677885f5f5f5f 64 intel xsave ptr [rax]
+660fae20|11223344556677885f5f5f5f 64 plan9 XSAVE 0(AX)
+660fae28|11223344556677885f5f5f5f 32 intel xrstor ptr [eax]
+660fae28|11223344556677885f5f5f5f 32 plan9 XRSTOR 0(AX)
+660fae28|11223344556677885f5f5f5f 64 gnu data16 xrstor (%rax)
+660fae28|11223344556677885f5f5f5f 64 intel xrstor ptr [rax]
+660fae28|11223344556677885f5f5f5f 64 plan9 XRSTOR 0(AX)
+660fae30|11223344556677885f5f5f5f 32 intel xsaveopt ptr [eax]
+660fae30|11223344556677885f5f5f5f 32 plan9 XSAVEOPT 0(AX)
+660fae30|11223344556677885f5f5f5f 64 gnu data16 xsaveopt (%rax)
+660fae30|11223344556677885f5f5f5f 64 intel xsaveopt ptr [rax]
+660fae30|11223344556677885f5f5f5f 64 plan9 XSAVEOPT 0(AX)
+660faf11|223344556677885f5f5f5f5f 32 intel imul dx, word ptr [ecx]
+660faf11|223344556677885f5f5f5f5f 32 plan9 IMULW 0(CX), DX
+660faf11|223344556677885f5f5f5f5f 64 gnu imul (%rcx),%dx
+660faf11|223344556677885f5f5f5f5f 64 intel imul dx, word ptr [rcx]
+660faf11|223344556677885f5f5f5f5f 64 plan9 IMULW 0(CX), DX
+660fb111|223344556677885f5f5f5f5f 32 intel cmpxchg word ptr [ecx], dx
+660fb111|223344556677885f5f5f5f5f 32 plan9 CMPXCHGW DX, 0(CX)
+660fb111|223344556677885f5f5f5f5f 64 gnu cmpxchg %dx,(%rcx)
+660fb111|223344556677885f5f5f5f5f 64 intel cmpxchg word ptr [rcx], dx
+660fb111|223344556677885f5f5f5f5f 64 plan9 CMPXCHGW DX, 0(CX)
+660fb211|223344556677885f5f5f5f5f 32 intel lss dx, dword ptr [ecx]
+660fb211|223344556677885f5f5f5f5f 32 plan9 LSS 0(CX), DX
+660fb211|223344556677885f5f5f5f5f 64 gnu lss (%rcx),%dx
+660fb211|223344556677885f5f5f5f5f 64 intel lss dx, dword ptr [rcx]
+660fb211|223344556677885f5f5f5f5f 64 plan9 LSS 0(CX), DX
+660fb311|223344556677885f5f5f5f5f 32 intel btr word ptr [ecx], dx
+660fb311|223344556677885f5f5f5f5f 32 plan9 BTRW DX, 0(CX)
+660fb311|223344556677885f5f5f5f5f 64 gnu btr %dx,(%rcx)
+660fb311|223344556677885f5f5f5f5f 64 intel btr word ptr [rcx], dx
+660fb311|223344556677885f5f5f5f5f 64 plan9 BTRW DX, 0(CX)
+660fb411|223344556677885f5f5f5f5f 32 intel lfs dx, dword ptr [ecx]
+660fb411|223344556677885f5f5f5f5f 32 plan9 LFS 0(CX), DX
+660fb411|223344556677885f5f5f5f5f 64 gnu lfs (%rcx),%dx
+660fb411|223344556677885f5f5f5f5f 64 intel lfs dx, dword ptr [rcx]
+660fb411|223344556677885f5f5f5f5f 64 plan9 LFS 0(CX), DX
+660fb511|223344556677885f5f5f5f5f 32 intel lgs dx, dword ptr [ecx]
+660fb511|223344556677885f5f5f5f5f 32 plan9 LGS 0(CX), DX
+660fb511|223344556677885f5f5f5f5f 64 gnu lgs (%rcx),%dx
+660fb511|223344556677885f5f5f5f5f 64 intel lgs dx, dword ptr [rcx]
+660fb511|223344556677885f5f5f5f5f 64 plan9 LGS 0(CX), DX
+660fb611|223344556677885f5f5f5f5f 32 intel movzx dx, byte ptr [ecx]
+660fb611|223344556677885f5f5f5f5f 32 plan9 MOVZX 0(CX), DX
+660fb611|223344556677885f5f5f5f5f 64 gnu movzbw (%rcx),%dx
+660fb611|223344556677885f5f5f5f5f 64 intel movzx dx, byte ptr [rcx]
+660fb611|223344556677885f5f5f5f5f 64 plan9 MOVZX 0(CX), DX
+660fb711|223344556677885f5f5f5f5f 32 intel movzx dx, word ptr [ecx]
+660fb711|223344556677885f5f5f5f5f 32 plan9 MOVZX 0(CX), DX
+660fb711|223344556677885f5f5f5f5f 64 gnu movzww (%rcx),%dx
+660fb711|223344556677885f5f5f5f5f 64 intel movzx dx, word ptr [rcx]
+660fb711|223344556677885f5f5f5f5f 64 plan9 MOVZX 0(CX), DX
+660fba2011|223344556677885f5f5f5f 32 intel bt word ptr [eax], 0x11
+660fba2011|223344556677885f5f5f5f 32 plan9 BTW $0x11, 0(AX)
+660fba2011|223344556677885f5f5f5f 64 gnu btw $0x11,(%rax)
+660fba2011|223344556677885f5f5f5f 64 intel bt word ptr [rax], 0x11
+660fba2011|223344556677885f5f5f5f 64 plan9 BTW $0x11, 0(AX)
+660fba2811|223344556677885f5f5f5f 32 intel bts word ptr [eax], 0x11
+660fba2811|223344556677885f5f5f5f 32 plan9 BTSW $0x11, 0(AX)
+660fba2811|223344556677885f5f5f5f 64 gnu btsw $0x11,(%rax)
+660fba2811|223344556677885f5f5f5f 64 intel bts word ptr [rax], 0x11
+660fba2811|223344556677885f5f5f5f 64 plan9 BTSW $0x11, 0(AX)
+660fba3011|223344556677885f5f5f5f 32 intel btr word ptr [eax], 0x11
+660fba3011|223344556677885f5f5f5f 32 plan9 BTRW $0x11, 0(AX)
+660fba3011|223344556677885f5f5f5f 64 gnu btrw $0x11,(%rax)
+660fba3011|223344556677885f5f5f5f 64 intel btr word ptr [rax], 0x11
+660fba3011|223344556677885f5f5f5f 64 plan9 BTRW $0x11, 0(AX)
+660fba3811|223344556677885f5f5f5f 32 intel btc word ptr [eax], 0x11
+660fba3811|223344556677885f5f5f5f 32 plan9 BTCW $0x11, 0(AX)
+660fba3811|223344556677885f5f5f5f 64 gnu btcw $0x11,(%rax)
+660fba3811|223344556677885f5f5f5f 64 intel btc word ptr [rax], 0x11
+660fba3811|223344556677885f5f5f5f 64 plan9 BTCW $0x11, 0(AX)
+660fbb11|223344556677885f5f5f5f5f 32 intel btc word ptr [ecx], dx
+660fbb11|223344556677885f5f5f5f5f 32 plan9 BTCW DX, 0(CX)
+660fbb11|223344556677885f5f5f5f5f 64 gnu btc %dx,(%rcx)
+660fbb11|223344556677885f5f5f5f5f 64 intel btc word ptr [rcx], dx
+660fbb11|223344556677885f5f5f5f5f 64 plan9 BTCW DX, 0(CX)
+660fbc11|223344556677885f5f5f5f5f 32 intel bsf dx, word ptr [ecx]
+660fbc11|223344556677885f5f5f5f5f 32 plan9 BSFW 0(CX), DX
+660fbc11|223344556677885f5f5f5f5f 64 gnu bsf (%rcx),%dx
+660fbc11|223344556677885f5f5f5f5f 64 intel bsf dx, word ptr [rcx]
+660fbc11|223344556677885f5f5f5f5f 64 plan9 BSFW 0(CX), DX
+660fbd11|223344556677885f5f5f5f5f 32 intel bsr dx, word ptr [ecx]
+660fbd11|223344556677885f5f5f5f5f 32 plan9 BSRW 0(CX), DX
+660fbd11|223344556677885f5f5f5f5f 64 gnu bsr (%rcx),%dx
+660fbd11|223344556677885f5f5f5f5f 64 intel bsr dx, word ptr [rcx]
+660fbd11|223344556677885f5f5f5f5f 64 plan9 BSRW 0(CX), DX
+660fbe11|223344556677885f5f5f5f5f 32 intel movsx dx, byte ptr [ecx]
+660fbe11|223344556677885f5f5f5f5f 32 plan9 MOVSX 0(CX), DX
+660fbe11|223344556677885f5f5f5f5f 64 gnu movsbw (%rcx),%dx
+660fbe11|223344556677885f5f5f5f5f 64 intel movsx dx, byte ptr [rcx]
+660fbe11|223344556677885f5f5f5f5f 64 plan9 MOVSX 0(CX), DX
+660fbf11|223344556677885f5f5f5f5f 32 intel movsx dx, word ptr [ecx]
+660fbf11|223344556677885f5f5f5f5f 32 plan9 MOVSX 0(CX), DX
+660fbf11|223344556677885f5f5f5f5f 64 gnu movsww (%rcx),%dx
+660fbf11|223344556677885f5f5f5f5f 64 intel movsx dx, word ptr [rcx]
+660fbf11|223344556677885f5f5f5f5f 64 plan9 MOVSX 0(CX), DX
+660fc111|223344556677885f5f5f5f5f 32 intel xadd word ptr [ecx], dx
+660fc111|223344556677885f5f5f5f5f 32 plan9 XADDW DX, 0(CX)
+660fc111|223344556677885f5f5f5f5f 64 gnu xadd %dx,(%rcx)
+660fc111|223344556677885f5f5f5f5f 64 intel xadd word ptr [rcx], dx
+660fc111|223344556677885f5f5f5f5f 64 plan9 XADDW DX, 0(CX)
+660fc21122|3344556677885f5f5f5f5f 32 intel cmppd xmm2, xmmword ptr [ecx], 0x22
+660fc21122|3344556677885f5f5f5f5f 32 plan9 CMPPD $0x22, 0(CX), X2
+660fc21122|3344556677885f5f5f5f5f 64 gnu cmppd $0x22,(%rcx),%xmm2
+660fc21122|3344556677885f5f5f5f5f 64 intel cmppd xmm2, xmmword ptr [rcx], 0x22
+660fc21122|3344556677885f5f5f5f5f 64 plan9 CMPPD $0x22, 0(CX), X2
+660fc311|223344556677885f5f5f5f5f 32 intel movnti dword ptr [ecx], edx
+660fc311|223344556677885f5f5f5f5f 32 plan9 MOVNTIW DX, 0(CX)
+660fc311|223344556677885f5f5f5f5f 64 gnu movnti %edx,(%rcx)
+660fc311|223344556677885f5f5f5f5f 64 intel movnti dword ptr [rcx], edx
+660fc311|223344556677885f5f5f5f5f 64 plan9 MOVNTIW DX, 0(CX)
+660fc41122|3344556677885f5f5f5f5f 32 intel pinsrw xmm2, word ptr [ecx], 0x22
+660fc41122|3344556677885f5f5f5f5f 32 plan9 PINSRW $0x22, 0(CX), X2
+660fc41122|3344556677885f5f5f5f5f 64 gnu pinsrw $0x22,(%rcx),%xmm2
+660fc41122|3344556677885f5f5f5f5f 64 intel pinsrw xmm2, word ptr [rcx], 0x22
+660fc41122|3344556677885f5f5f5f5f 64 plan9 PINSRW $0x22, 0(CX), X2
+660fc5c011|223344556677885f5f5f5f 32 intel pextrw eax, xmm0, 0x11
+660fc5c011|223344556677885f5f5f5f 32 plan9 PEXTRW $0x11, X0, AX
+660fc5c011|223344556677885f5f5f5f 64 gnu pextrw $0x11,%xmm0,%eax
+660fc5c011|223344556677885f5f5f5f 64 intel pextrw eax, xmm0, 0x11
+660fc5c011|223344556677885f5f5f5f 64 plan9 PEXTRW $0x11, X0, AX
+660fc61122|3344556677885f5f5f5f5f 32 intel shufpd xmm2, xmmword ptr [ecx], 0x22
+660fc61122|3344556677885f5f5f5f5f 32 plan9 SHUFPD $0x22, 0(CX), X2
+660fc61122|3344556677885f5f5f5f5f 64 gnu shufpd $0x22,(%rcx),%xmm2
+660fc61122|3344556677885f5f5f5f5f 64 intel shufpd xmm2, xmmword ptr [rcx], 0x22
+660fc61122|3344556677885f5f5f5f5f 64 plan9 SHUFPD $0x22, 0(CX), X2
+660fc708|11223344556677885f5f5f5f 32 intel cmpxchg8b qword ptr [eax]
+660fc708|11223344556677885f5f5f5f 32 plan9 CMPXCHG8B 0(AX)
+660fc708|11223344556677885f5f5f5f 64 gnu data16 cmpxchg8b (%rax)
+660fc708|11223344556677885f5f5f5f 64 intel cmpxchg8b qword ptr [rax]
+660fc708|11223344556677885f5f5f5f 64 plan9 CMPXCHG8B 0(AX)
+660fc718|11223344556677885f5f5f5f 32 intel xrstors ptr [eax]
+660fc718|11223344556677885f5f5f5f 32 plan9 XRSTORS 0(AX)
+660fc718|11223344556677885f5f5f5f 64 gnu xrstors (%rax)
+660fc718|11223344556677885f5f5f5f 64 intel xrstors ptr [rax]
+660fc718|11223344556677885f5f5f5f 64 plan9 XRSTORS 0(AX)
+660fc720|11223344556677885f5f5f5f 32 intel xsavec ptr [eax]
+660fc720|11223344556677885f5f5f5f 32 plan9 XSAVEC 0(AX)
+660fc720|11223344556677885f5f5f5f 64 gnu xsavec (%rax)
+660fc720|11223344556677885f5f5f5f 64 intel xsavec ptr [rax]
+660fc720|11223344556677885f5f5f5f 64 plan9 XSAVEC 0(AX)
+660fc728|11223344556677885f5f5f5f 32 intel xsaves ptr [eax]
+660fc728|11223344556677885f5f5f5f 32 plan9 XSAVES 0(AX)
+660fc728|11223344556677885f5f5f5f 64 gnu xsaves (%rax)
+660fc728|11223344556677885f5f5f5f 64 intel xsaves ptr [rax]
+660fc728|11223344556677885f5f5f5f 64 plan9 XSAVES 0(AX)
+660fc7f2|11223344556677885f5f5f5f 32 intel rdrand dx
+660fc7f2|11223344556677885f5f5f5f 32 plan9 RDRAND DX
+660fc7f2|11223344556677885f5f5f5f 64 gnu rdrand %dx
+660fc7f2|11223344556677885f5f5f5f 64 intel rdrand dx
+660fc7f2|11223344556677885f5f5f5f 64 plan9 RDRAND DX
+660fc8|11223344556677885f5f5f5f5f 32 intel bswap ax
+660fc8|11223344556677885f5f5f5f5f 32 plan9 BSWAP AX
+660fc8|11223344556677885f5f5f5f5f 64 gnu bswap %ax
+660fc8|11223344556677885f5f5f5f5f 64 intel bswap ax
+660fc8|11223344556677885f5f5f5f5f 64 plan9 BSWAP AX
+660fd011|223344556677885f5f5f5f5f 32 intel addsubpd xmm2, xmmword ptr [ecx]
+660fd011|223344556677885f5f5f5f5f 32 plan9 ADDSUBPD 0(CX), X2
+660fd011|223344556677885f5f5f5f5f 64 gnu addsubpd (%rcx),%xmm2
+660fd011|223344556677885f5f5f5f5f 64 intel addsubpd xmm2, xmmword ptr [rcx]
+660fd011|223344556677885f5f5f5f5f 64 plan9 ADDSUBPD 0(CX), X2
+660fd111|223344556677885f5f5f5f5f 32 intel psrlw xmm2, xmmword ptr [ecx]
+660fd111|223344556677885f5f5f5f5f 32 plan9 PSRLW 0(CX), X2
+660fd111|223344556677885f5f5f5f5f 64 gnu psrlw (%rcx),%xmm2
+660fd111|223344556677885f5f5f5f5f 64 intel psrlw xmm2, xmmword ptr [rcx]
+660fd111|223344556677885f5f5f5f5f 64 plan9 PSRLW 0(CX), X2
+660fd211|223344556677885f5f5f5f5f 32 intel psrld xmm2, xmmword ptr [ecx]
+660fd211|223344556677885f5f5f5f5f 32 plan9 PSRLD 0(CX), X2
+660fd211|223344556677885f5f5f5f5f 64 gnu psrld (%rcx),%xmm2
+660fd211|223344556677885f5f5f5f5f 64 intel psrld xmm2, xmmword ptr [rcx]
+660fd211|223344556677885f5f5f5f5f 64 plan9 PSRLD 0(CX), X2
+660fd311|223344556677885f5f5f5f5f 32 intel psrlq xmm2, xmmword ptr [ecx]
+660fd311|223344556677885f5f5f5f5f 32 plan9 PSRLQ 0(CX), X2
+660fd311|223344556677885f5f5f5f5f 64 gnu psrlq (%rcx),%xmm2
+660fd311|223344556677885f5f5f5f5f 64 intel psrlq xmm2, xmmword ptr [rcx]
+660fd311|223344556677885f5f5f5f5f 64 plan9 PSRLQ 0(CX), X2
+660fd411|223344556677885f5f5f5f5f 32 intel paddq xmm2, xmmword ptr [ecx]
+660fd411|223344556677885f5f5f5f5f 32 plan9 PADDQ 0(CX), X2
+660fd411|223344556677885f5f5f5f5f 64 gnu paddq (%rcx),%xmm2
+660fd411|223344556677885f5f5f5f5f 64 intel paddq xmm2, xmmword ptr [rcx]
+660fd411|223344556677885f5f5f5f5f 64 plan9 PADDQ 0(CX), X2
+660fd511|223344556677885f5f5f5f5f 32 intel pmullw xmm2, xmmword ptr [ecx]
+660fd511|223344556677885f5f5f5f5f 32 plan9 PMULLW 0(CX), X2
+660fd511|223344556677885f5f5f5f5f 64 gnu pmullw (%rcx),%xmm2
+660fd511|223344556677885f5f5f5f5f 64 intel pmullw xmm2, xmmword ptr [rcx]
+660fd511|223344556677885f5f5f5f5f 64 plan9 PMULLW 0(CX), X2
+660fd611|223344556677885f5f5f5f5f 32 intel movq qword ptr [ecx], xmm2
+660fd611|223344556677885f5f5f5f5f 32 plan9 MOVQ X2, 0(CX)
+660fd611|223344556677885f5f5f5f5f 64 gnu movq %xmm2,(%rcx)
+660fd611|223344556677885f5f5f5f5f 64 intel movq qword ptr [rcx], xmm2
+660fd611|223344556677885f5f5f5f5f 64 plan9 MOVQ X2, 0(CX)
+660fd7c0|11223344556677885f5f5f5f 32 intel pmovmskb eax, xmm0
+660fd7c0|11223344556677885f5f5f5f 32 plan9 PMOVMSKB X0, AX
+660fd7c0|11223344556677885f5f5f5f 64 gnu pmovmskb %xmm0,%eax
+660fd7c0|11223344556677885f5f5f5f 64 intel pmovmskb eax, xmm0
+660fd7c0|11223344556677885f5f5f5f 64 plan9 PMOVMSKB X0, AX
+660fd811|223344556677885f5f5f5f5f 32 intel psubusb xmm2, xmmword ptr [ecx]
+660fd811|223344556677885f5f5f5f5f 32 plan9 PSUBUSB 0(CX), X2
+660fd811|223344556677885f5f5f5f5f 64 gnu psubusb (%rcx),%xmm2
+660fd811|223344556677885f5f5f5f5f 64 intel psubusb xmm2, xmmword ptr [rcx]
+660fd811|223344556677885f5f5f5f5f 64 plan9 PSUBUSB 0(CX), X2
+660fd911|223344556677885f5f5f5f5f 32 intel psubusw xmm2, xmmword ptr [ecx]
+660fd911|223344556677885f5f5f5f5f 32 plan9 PSUBUSW 0(CX), X2
+660fd911|223344556677885f5f5f5f5f 64 gnu psubusw (%rcx),%xmm2
+660fd911|223344556677885f5f5f5f5f 64 intel psubusw xmm2, xmmword ptr [rcx]
+660fd911|223344556677885f5f5f5f5f 64 plan9 PSUBUSW 0(CX), X2
+660fda11|223344556677885f5f5f5f5f 32 intel pminub xmm2, xmmword ptr [ecx]
+660fda11|223344556677885f5f5f5f5f 32 plan9 PMINUB 0(CX), X2
+660fda11|223344556677885f5f5f5f5f 64 gnu pminub (%rcx),%xmm2
+660fda11|223344556677885f5f5f5f5f 64 intel pminub xmm2, xmmword ptr [rcx]
+660fda11|223344556677885f5f5f5f5f 64 plan9 PMINUB 0(CX), X2
+660fdb11|223344556677885f5f5f5f5f 32 intel pand xmm2, xmmword ptr [ecx]
+660fdb11|223344556677885f5f5f5f5f 32 plan9 PAND 0(CX), X2
+660fdb11|223344556677885f5f5f5f5f 64 gnu pand (%rcx),%xmm2
+660fdb11|223344556677885f5f5f5f5f 64 intel pand xmm2, xmmword ptr [rcx]
+660fdb11|223344556677885f5f5f5f5f 64 plan9 PAND 0(CX), X2
+660fdc11|223344556677885f5f5f5f5f 32 intel paddusb xmm2, xmmword ptr [ecx]
+660fdc11|223344556677885f5f5f5f5f 32 plan9 PADDUSB 0(CX), X2
+660fdc11|223344556677885f5f5f5f5f 64 gnu paddusb (%rcx),%xmm2
+660fdc11|223344556677885f5f5f5f5f 64 intel paddusb xmm2, xmmword ptr [rcx]
+660fdc11|223344556677885f5f5f5f5f 64 plan9 PADDUSB 0(CX), X2
+660fdd11|223344556677885f5f5f5f5f 32 intel paddusw xmm2, xmmword ptr [ecx]
+660fdd11|223344556677885f5f5f5f5f 32 plan9 PADDUSW 0(CX), X2
+660fdd11|223344556677885f5f5f5f5f 64 gnu paddusw (%rcx),%xmm2
+660fdd11|223344556677885f5f5f5f5f 64 intel paddusw xmm2, xmmword ptr [rcx]
+660fdd11|223344556677885f5f5f5f5f 64 plan9 PADDUSW 0(CX), X2
+660fde11|223344556677885f5f5f5f5f 32 intel pmaxub xmm2, xmmword ptr [ecx]
+660fde11|223344556677885f5f5f5f5f 32 plan9 PMAXUB 0(CX), X2
+660fde11|223344556677885f5f5f5f5f 64 gnu pmaxub (%rcx),%xmm2
+660fde11|223344556677885f5f5f5f5f 64 intel pmaxub xmm2, xmmword ptr [rcx]
+660fde11|223344556677885f5f5f5f5f 64 plan9 PMAXUB 0(CX), X2
+660fdf11|223344556677885f5f5f5f5f 32 intel pandn xmm2, xmmword ptr [ecx]
+660fdf11|223344556677885f5f5f5f5f 32 plan9 PANDN 0(CX), X2
+660fdf11|223344556677885f5f5f5f5f 64 gnu pandn (%rcx),%xmm2
+660fdf11|223344556677885f5f5f5f5f 64 intel pandn xmm2, xmmword ptr [rcx]
+660fdf11|223344556677885f5f5f5f5f 64 plan9 PANDN 0(CX), X2
+660fe011|223344556677885f5f5f5f5f 32 intel pavgb xmm2, xmmword ptr [ecx]
+660fe011|223344556677885f5f5f5f5f 32 plan9 PAVGB 0(CX), X2
+660fe011|223344556677885f5f5f5f5f 64 gnu pavgb (%rcx),%xmm2
+660fe011|223344556677885f5f5f5f5f 64 intel pavgb xmm2, xmmword ptr [rcx]
+660fe011|223344556677885f5f5f5f5f 64 plan9 PAVGB 0(CX), X2
+660fe111|223344556677885f5f5f5f5f 32 intel psraw xmm2, xmmword ptr [ecx]
+660fe111|223344556677885f5f5f5f5f 32 plan9 PSRAW 0(CX), X2
+660fe111|223344556677885f5f5f5f5f 64 gnu psraw (%rcx),%xmm2
+660fe111|223344556677885f5f5f5f5f 64 intel psraw xmm2, xmmword ptr [rcx]
+660fe111|223344556677885f5f5f5f5f 64 plan9 PSRAW 0(CX), X2
+660fe211|223344556677885f5f5f5f5f 32 intel psrad xmm2, xmmword ptr [ecx]
+660fe211|223344556677885f5f5f5f5f 32 plan9 PSRAD 0(CX), X2
+660fe211|223344556677885f5f5f5f5f 64 gnu psrad (%rcx),%xmm2
+660fe211|223344556677885f5f5f5f5f 64 intel psrad xmm2, xmmword ptr [rcx]
+660fe211|223344556677885f5f5f5f5f 64 plan9 PSRAD 0(CX), X2
+660fe311|223344556677885f5f5f5f5f 32 intel pavgw xmm2, xmmword ptr [ecx]
+660fe311|223344556677885f5f5f5f5f 32 plan9 PAVGW 0(CX), X2
+660fe311|223344556677885f5f5f5f5f 64 gnu pavgw (%rcx),%xmm2
+660fe311|223344556677885f5f5f5f5f 64 intel pavgw xmm2, xmmword ptr [rcx]
+660fe311|223344556677885f5f5f5f5f 64 plan9 PAVGW 0(CX), X2
+660fe411|223344556677885f5f5f5f5f 32 intel pmulhuw xmm2, xmmword ptr [ecx]
+660fe411|223344556677885f5f5f5f5f 32 plan9 PMULHUW 0(CX), X2
+660fe411|223344556677885f5f5f5f5f 64 gnu pmulhuw (%rcx),%xmm2
+660fe411|223344556677885f5f5f5f5f 64 intel pmulhuw xmm2, xmmword ptr [rcx]
+660fe411|223344556677885f5f5f5f5f 64 plan9 PMULHUW 0(CX), X2
+660fe511|223344556677885f5f5f5f5f 32 intel pmulhw xmm2, xmmword ptr [ecx]
+660fe511|223344556677885f5f5f5f5f 32 plan9 PMULHW 0(CX), X2
+660fe511|223344556677885f5f5f5f5f 64 gnu pmulhw (%rcx),%xmm2
+660fe511|223344556677885f5f5f5f5f 64 intel pmulhw xmm2, xmmword ptr [rcx]
+660fe511|223344556677885f5f5f5f5f 64 plan9 PMULHW 0(CX), X2
+660fe611|223344556677885f5f5f5f5f 32 intel cvttpd2dq xmm2, xmmword ptr [ecx]
+660fe611|223344556677885f5f5f5f5f 32 plan9 CVTTPD2DQ 0(CX), X2
+660fe611|223344556677885f5f5f5f5f 64 gnu cvttpd2dq (%rcx),%xmm2
+660fe611|223344556677885f5f5f5f5f 64 intel cvttpd2dq xmm2, xmmword ptr [rcx]
+660fe611|223344556677885f5f5f5f5f 64 plan9 CVTTPD2DQ 0(CX), X2
+660fe711|223344556677885f5f5f5f5f 32 intel movntdq xmmword ptr [ecx], xmm2
+660fe711|223344556677885f5f5f5f5f 32 plan9 MOVNTDQ X2, 0(CX)
+660fe711|223344556677885f5f5f5f5f 64 gnu movntdq %xmm2,(%rcx)
+660fe711|223344556677885f5f5f5f5f 64 intel movntdq xmmword ptr [rcx], xmm2
+660fe711|223344556677885f5f5f5f5f 64 plan9 MOVNTDQ X2, 0(CX)
+660fe811|223344556677885f5f5f5f5f 32 intel psubsb xmm2, xmmword ptr [ecx]
+660fe811|223344556677885f5f5f5f5f 32 plan9 PSUBSB 0(CX), X2
+660fe811|223344556677885f5f5f5f5f 64 gnu psubsb (%rcx),%xmm2
+660fe811|223344556677885f5f5f5f5f 64 intel psubsb xmm2, xmmword ptr [rcx]
+660fe811|223344556677885f5f5f5f5f 64 plan9 PSUBSB 0(CX), X2
+660fe911|223344556677885f5f5f5f5f 32 intel psubsw xmm2, xmmword ptr [ecx]
+660fe911|223344556677885f5f5f5f5f 32 plan9 PSUBSW 0(CX), X2
+660fe911|223344556677885f5f5f5f5f 64 gnu psubsw (%rcx),%xmm2
+660fe911|223344556677885f5f5f5f5f 64 intel psubsw xmm2, xmmword ptr [rcx]
+660fe911|223344556677885f5f5f5f5f 64 plan9 PSUBSW 0(CX), X2
+660fea11|223344556677885f5f5f5f5f 32 intel pminsw xmm2, xmmword ptr [ecx]
+660fea11|223344556677885f5f5f5f5f 32 plan9 PMINSW 0(CX), X2
+660fea11|223344556677885f5f5f5f5f 64 gnu pminsw (%rcx),%xmm2
+660fea11|223344556677885f5f5f5f5f 64 intel pminsw xmm2, xmmword ptr [rcx]
+660fea11|223344556677885f5f5f5f5f 64 plan9 PMINSW 0(CX), X2
+660feb11|223344556677885f5f5f5f5f 32 intel por xmm2, xmmword ptr [ecx]
+660feb11|223344556677885f5f5f5f5f 32 plan9 POR 0(CX), X2
+660feb11|223344556677885f5f5f5f5f 64 gnu por (%rcx),%xmm2
+660feb11|223344556677885f5f5f5f5f 64 intel por xmm2, xmmword ptr [rcx]
+660feb11|223344556677885f5f5f5f5f 64 plan9 POR 0(CX), X2
+660fec11|223344556677885f5f5f5f5f 32 intel paddsb xmm2, xmmword ptr [ecx]
+660fec11|223344556677885f5f5f5f5f 32 plan9 PADDSB 0(CX), X2
+660fec11|223344556677885f5f5f5f5f 64 gnu paddsb (%rcx),%xmm2
+660fec11|223344556677885f5f5f5f5f 64 intel paddsb xmm2, xmmword ptr [rcx]
+660fec11|223344556677885f5f5f5f5f 64 plan9 PADDSB 0(CX), X2
+660fed11|223344556677885f5f5f5f5f 32 intel paddsw xmm2, xmmword ptr [ecx]
+660fed11|223344556677885f5f5f5f5f 32 plan9 PADDSW 0(CX), X2
+660fed11|223344556677885f5f5f5f5f 64 gnu paddsw (%rcx),%xmm2
+660fed11|223344556677885f5f5f5f5f 64 intel paddsw xmm2, xmmword ptr [rcx]
+660fed11|223344556677885f5f5f5f5f 64 plan9 PADDSW 0(CX), X2
+660fee11|223344556677885f5f5f5f5f 32 intel pmaxsw xmm2, xmmword ptr [ecx]
+660fee11|223344556677885f5f5f5f5f 32 plan9 PMAXSW 0(CX), X2
+660fee11|223344556677885f5f5f5f5f 64 gnu pmaxsw (%rcx),%xmm2
+660fee11|223344556677885f5f5f5f5f 64 intel pmaxsw xmm2, xmmword ptr [rcx]
+660fee11|223344556677885f5f5f5f5f 64 plan9 PMAXSW 0(CX), X2
+660fef11|223344556677885f5f5f5f5f 32 intel pxor xmm2, xmmword ptr [ecx]
+660fef11|223344556677885f5f5f5f5f 32 plan9 PXOR 0(CX), X2
+660fef11|223344556677885f5f5f5f5f 64 gnu pxor (%rcx),%xmm2
+660fef11|223344556677885f5f5f5f5f 64 intel pxor xmm2, xmmword ptr [rcx]
+660fef11|223344556677885f5f5f5f5f 64 plan9 PXOR 0(CX), X2
+660ff111|223344556677885f5f5f5f5f 32 intel psllw xmm2, xmmword ptr [ecx]
+660ff111|223344556677885f5f5f5f5f 32 plan9 PSLLW 0(CX), X2
+660ff111|223344556677885f5f5f5f5f 64 gnu psllw (%rcx),%xmm2
+660ff111|223344556677885f5f5f5f5f 64 intel psllw xmm2, xmmword ptr [rcx]
+660ff111|223344556677885f5f5f5f5f 64 plan9 PSLLW 0(CX), X2
+660ff211|223344556677885f5f5f5f5f 32 intel pslld xmm2, xmmword ptr [ecx]
+660ff211|223344556677885f5f5f5f5f 32 plan9 PSLLD 0(CX), X2
+660ff211|223344556677885f5f5f5f5f 64 gnu pslld (%rcx),%xmm2
+660ff211|223344556677885f5f5f5f5f 64 intel pslld xmm2, xmmword ptr [rcx]
+660ff211|223344556677885f5f5f5f5f 64 plan9 PSLLD 0(CX), X2
+660ff311|223344556677885f5f5f5f5f 32 intel psllq xmm2, xmmword ptr [ecx]
+660ff311|223344556677885f5f5f5f5f 32 plan9 PSLLQ 0(CX), X2
+660ff311|223344556677885f5f5f5f5f 64 gnu psllq (%rcx),%xmm2
+660ff311|223344556677885f5f5f5f5f 64 intel psllq xmm2, xmmword ptr [rcx]
+660ff311|223344556677885f5f5f5f5f 64 plan9 PSLLQ 0(CX), X2
+660ff411|223344556677885f5f5f5f5f 32 intel pmuludq xmm2, xmmword ptr [ecx]
+660ff411|223344556677885f5f5f5f5f 32 plan9 PMULUDQ 0(CX), X2
+660ff411|223344556677885f5f5f5f5f 64 gnu pmuludq (%rcx),%xmm2
+660ff411|223344556677885f5f5f5f5f 64 intel pmuludq xmm2, xmmword ptr [rcx]
+660ff411|223344556677885f5f5f5f5f 64 plan9 PMULUDQ 0(CX), X2
+660ff511|223344556677885f5f5f5f5f 32 intel pmaddwd xmm2, xmmword ptr [ecx]
+660ff511|223344556677885f5f5f5f5f 32 plan9 PMADDWD 0(CX), X2
+660ff511|223344556677885f5f5f5f5f 64 gnu pmaddwd (%rcx),%xmm2
+660ff511|223344556677885f5f5f5f5f 64 intel pmaddwd xmm2, xmmword ptr [rcx]
+660ff511|223344556677885f5f5f5f5f 64 plan9 PMADDWD 0(CX), X2
+660ff611|223344556677885f5f5f5f5f 32 intel psadbw xmm2, xmmword ptr [ecx]
+660ff611|223344556677885f5f5f5f5f 32 plan9 PSADBW 0(CX), X2
+660ff611|223344556677885f5f5f5f5f 64 gnu psadbw (%rcx),%xmm2
+660ff611|223344556677885f5f5f5f5f 64 intel psadbw xmm2, xmmword ptr [rcx]
+660ff611|223344556677885f5f5f5f5f 64 plan9 PSADBW 0(CX), X2
+660ff7c0|11223344556677885f5f5f5f 32 intel maskmovdqu xmm0, xmm0
+660ff7c0|11223344556677885f5f5f5f 32 plan9 MASKMOVDQU X0, X0
+660ff7c0|11223344556677885f5f5f5f 64 intel maskmovdqu xmm0, xmm0
+660ff7c0|11223344556677885f5f5f5f 64 plan9 MASKMOVDQU X0, X0
+660ff811|223344556677885f5f5f5f5f 32 intel psubb xmm2, xmmword ptr [ecx]
+660ff811|223344556677885f5f5f5f5f 32 plan9 PSUBB 0(CX), X2
+660ff811|223344556677885f5f5f5f5f 64 gnu psubb (%rcx),%xmm2
+660ff811|223344556677885f5f5f5f5f 64 intel psubb xmm2, xmmword ptr [rcx]
+660ff811|223344556677885f5f5f5f5f 64 plan9 PSUBB 0(CX), X2
+660ff911|223344556677885f5f5f5f5f 32 intel psubw xmm2, xmmword ptr [ecx]
+660ff911|223344556677885f5f5f5f5f 32 plan9 PSUBW 0(CX), X2
+660ff911|223344556677885f5f5f5f5f 64 gnu psubw (%rcx),%xmm2
+660ff911|223344556677885f5f5f5f5f 64 intel psubw xmm2, xmmword ptr [rcx]
+660ff911|223344556677885f5f5f5f5f 64 plan9 PSUBW 0(CX), X2
+660ffa11|223344556677885f5f5f5f5f 32 intel psubd xmm2, xmmword ptr [ecx]
+660ffa11|223344556677885f5f5f5f5f 32 plan9 PSUBD 0(CX), X2
+660ffa11|223344556677885f5f5f5f5f 64 gnu psubd (%rcx),%xmm2
+660ffa11|223344556677885f5f5f5f5f 64 intel psubd xmm2, xmmword ptr [rcx]
+660ffa11|223344556677885f5f5f5f5f 64 plan9 PSUBD 0(CX), X2
+660ffb11|223344556677885f5f5f5f5f 32 intel psubq xmm2, xmmword ptr [ecx]
+660ffb11|223344556677885f5f5f5f5f 32 plan9 PSUBQ 0(CX), X2
+660ffb11|223344556677885f5f5f5f5f 64 gnu psubq (%rcx),%xmm2
+660ffb11|223344556677885f5f5f5f5f 64 intel psubq xmm2, xmmword ptr [rcx]
+660ffb11|223344556677885f5f5f5f5f 64 plan9 PSUBQ 0(CX), X2
+660ffc11|223344556677885f5f5f5f5f 32 intel paddb xmm2, xmmword ptr [ecx]
+660ffc11|223344556677885f5f5f5f5f 32 plan9 PADDB 0(CX), X2
+660ffc11|223344556677885f5f5f5f5f 64 gnu paddb (%rcx),%xmm2
+660ffc11|223344556677885f5f5f5f5f 64 intel paddb xmm2, xmmword ptr [rcx]
+660ffc11|223344556677885f5f5f5f5f 64 plan9 PADDB 0(CX), X2
+660ffd11|223344556677885f5f5f5f5f 32 intel paddw xmm2, xmmword ptr [ecx]
+660ffd11|223344556677885f5f5f5f5f 32 plan9 PADDW 0(CX), X2
+660ffd11|223344556677885f5f5f5f5f 64 gnu paddw (%rcx),%xmm2
+660ffd11|223344556677885f5f5f5f5f 64 intel paddw xmm2, xmmword ptr [rcx]
+660ffd11|223344556677885f5f5f5f5f 64 plan9 PADDW 0(CX), X2
+660ffe11|223344556677885f5f5f5f5f 32 intel paddd xmm2, xmmword ptr [ecx]
+660ffe11|223344556677885f5f5f5f5f 32 plan9 PADDD 0(CX), X2
+660ffe11|223344556677885f5f5f5f5f 64 gnu paddd (%rcx),%xmm2
+660ffe11|223344556677885f5f5f5f5f 64 intel paddd xmm2, xmmword ptr [rcx]
+660ffe11|223344556677885f5f5f5f5f 64 plan9 PADDD 0(CX), X2
+661122|3344556677885f5f5f5f5f5f5f 32 intel adc word ptr [edx], sp
+661122|3344556677885f5f5f5f5f5f5f 32 plan9 ADCW SP, 0(DX)
+661122|3344556677885f5f5f5f5f5f5f 64 gnu adc %sp,(%rdx)
+661122|3344556677885f5f5f5f5f5f5f 64 intel adc word ptr [rdx], sp
+661122|3344556677885f5f5f5f5f5f5f 64 plan9 ADCW SP, 0(DX)
+661311|223344556677885f5f5f5f5f5f 32 intel adc dx, word ptr [ecx]
+661311|223344556677885f5f5f5f5f5f 32 plan9 ADCW 0(CX), DX
+661311|223344556677885f5f5f5f5f5f 64 gnu adc (%rcx),%dx
+661311|223344556677885f5f5f5f5f5f 64 intel adc dx, word ptr [rcx]
+661311|223344556677885f5f5f5f5f5f 64 plan9 ADCW 0(CX), DX
+66151122|3344556677885f5f5f5f5f5f 32 intel adc ax, 0x2211
+66151122|3344556677885f5f5f5f5f5f 32 plan9 ADCW $0x2211, AX
+66151122|3344556677885f5f5f5f5f5f 64 gnu adc $0x2211,%ax
+66151122|3344556677885f5f5f5f5f5f 64 intel adc ax, 0x2211
+66151122|3344556677885f5f5f5f5f5f 64 plan9 ADCW $0x2211, AX
+661911|223344556677885f5f5f5f5f5f 32 intel sbb word ptr [ecx], dx
+661911|223344556677885f5f5f5f5f5f 32 plan9 SBBW DX, 0(CX)
+661911|223344556677885f5f5f5f5f5f 64 gnu sbb %dx,(%rcx)
+661911|223344556677885f5f5f5f5f5f 64 intel sbb word ptr [rcx], dx
+661911|223344556677885f5f5f5f5f5f 64 plan9 SBBW DX, 0(CX)
+661b11|223344556677885f5f5f5f5f5f 32 intel sbb dx, word ptr [ecx]
+661b11|223344556677885f5f5f5f5f5f 32 plan9 SBBW 0(CX), DX
+661b11|223344556677885f5f5f5f5f5f 64 gnu sbb (%rcx),%dx
+661b11|223344556677885f5f5f5f5f5f 64 intel sbb dx, word ptr [rcx]
+661b11|223344556677885f5f5f5f5f5f 64 plan9 SBBW 0(CX), DX
+661d1122|3344556677885f5f5f5f5f5f 32 intel sbb ax, 0x2211
+661d1122|3344556677885f5f5f5f5f5f 32 plan9 SBBW $0x2211, AX
+661d1122|3344556677885f5f5f5f5f5f 64 gnu sbb $0x2211,%ax
+661d1122|3344556677885f5f5f5f5f5f 64 intel sbb ax, 0x2211
+661d1122|3344556677885f5f5f5f5f5f 64 plan9 SBBW $0x2211, AX
+662111|223344556677885f5f5f5f5f5f 32 intel and word ptr [ecx], dx
+662111|223344556677885f5f5f5f5f5f 32 plan9 ANDW DX, 0(CX)
+662111|223344556677885f5f5f5f5f5f 64 gnu and %dx,(%rcx)
+662111|223344556677885f5f5f5f5f5f 64 intel and word ptr [rcx], dx
+662111|223344556677885f5f5f5f5f5f 64 plan9 ANDW DX, 0(CX)
+662311|223344556677885f5f5f5f5f5f 32 intel and dx, word ptr [ecx]
+662311|223344556677885f5f5f5f5f5f 32 plan9 ANDW 0(CX), DX
+662311|223344556677885f5f5f5f5f5f 64 gnu and (%rcx),%dx
+662311|223344556677885f5f5f5f5f5f 64 intel and dx, word ptr [rcx]
+662311|223344556677885f5f5f5f5f5f 64 plan9 ANDW 0(CX), DX
+66251122|3344556677885f5f5f5f5f5f 32 intel and ax, 0x2211
+66251122|3344556677885f5f5f5f5f5f 32 plan9 ANDW $0x2211, AX
+66251122|3344556677885f5f5f5f5f5f 64 gnu and $0x2211,%ax
+66251122|3344556677885f5f5f5f5f5f 64 intel and ax, 0x2211
+66251122|3344556677885f5f5f5f5f5f 64 plan9 ANDW $0x2211, AX
+662911|223344556677885f5f5f5f5f5f 32 intel sub word ptr [ecx], dx
+662911|223344556677885f5f5f5f5f5f 32 plan9 SUBW DX, 0(CX)
+662911|223344556677885f5f5f5f5f5f 64 gnu sub %dx,(%rcx)
+662911|223344556677885f5f5f5f5f5f 64 intel sub word ptr [rcx], dx
+662911|223344556677885f5f5f5f5f5f 64 plan9 SUBW DX, 0(CX)
+662b11|223344556677885f5f5f5f5f5f 32 intel sub dx, word ptr [ecx]
+662b11|223344556677885f5f5f5f5f5f 32 plan9 SUBW 0(CX), DX
+662b11|223344556677885f5f5f5f5f5f 64 gnu sub (%rcx),%dx
+662b11|223344556677885f5f5f5f5f5f 64 intel sub dx, word ptr [rcx]
+662b11|223344556677885f5f5f5f5f5f 64 plan9 SUBW 0(CX), DX
+662d1122|3344556677885f5f5f5f5f5f 32 intel sub ax, 0x2211
+662d1122|3344556677885f5f5f5f5f5f 32 plan9 SUBW $0x2211, AX
+662d1122|3344556677885f5f5f5f5f5f 64 gnu sub $0x2211,%ax
+662d1122|3344556677885f5f5f5f5f5f 64 intel sub ax, 0x2211
+662d1122|3344556677885f5f5f5f5f5f 64 plan9 SUBW $0x2211, AX
+663111|223344556677885f5f5f5f5f5f 32 intel xor word ptr [ecx], dx
+663111|223344556677885f5f5f5f5f5f 32 plan9 XORW DX, 0(CX)
+663111|223344556677885f5f5f5f5f5f 64 gnu xor %dx,(%rcx)
+663111|223344556677885f5f5f5f5f5f 64 intel xor word ptr [rcx], dx
+663111|223344556677885f5f5f5f5f5f 64 plan9 XORW DX, 0(CX)
+663311|223344556677885f5f5f5f5f5f 32 intel xor dx, word ptr [ecx]
+663311|223344556677885f5f5f5f5f5f 32 plan9 XORW 0(CX), DX
+663311|223344556677885f5f5f5f5f5f 64 gnu xor (%rcx),%dx
+663311|223344556677885f5f5f5f5f5f 64 intel xor dx, word ptr [rcx]
+663311|223344556677885f5f5f5f5f5f 64 plan9 XORW 0(CX), DX
+66351122|3344556677885f5f5f5f5f5f 32 intel xor ax, 0x2211
+66351122|3344556677885f5f5f5f5f5f 32 plan9 XORW $0x2211, AX
+66351122|3344556677885f5f5f5f5f5f 64 gnu xor $0x2211,%ax
+66351122|3344556677885f5f5f5f5f5f 64 intel xor ax, 0x2211
+66351122|3344556677885f5f5f5f5f5f 64 plan9 XORW $0x2211, AX
+663911|223344556677885f5f5f5f5f5f 32 intel cmp word ptr [ecx], dx
+663911|223344556677885f5f5f5f5f5f 32 plan9 CMPW DX, 0(CX)
+663911|223344556677885f5f5f5f5f5f 64 gnu cmp %dx,(%rcx)
+663911|223344556677885f5f5f5f5f5f 64 intel cmp word ptr [rcx], dx
+663911|223344556677885f5f5f5f5f5f 64 plan9 CMPW DX, 0(CX)
+663b11|223344556677885f5f5f5f5f5f 32 intel cmp dx, word ptr [ecx]
+663b11|223344556677885f5f5f5f5f5f 32 plan9 CMPW 0(CX), DX
+663b11|223344556677885f5f5f5f5f5f 64 gnu cmp (%rcx),%dx
+663b11|223344556677885f5f5f5f5f5f 64 intel cmp dx, word ptr [rcx]
+663b11|223344556677885f5f5f5f5f5f 64 plan9 CMPW 0(CX), DX
+663d1122|3344556677885f5f5f5f5f5f 32 intel cmp ax, 0x2211
+663d1122|3344556677885f5f5f5f5f5f 32 plan9 CMPW $0x2211, AX
+663d1122|3344556677885f5f5f5f5f5f 64 gnu cmp $0x2211,%ax
+663d1122|3344556677885f5f5f5f5f5f 64 intel cmp ax, 0x2211
+663d1122|3344556677885f5f5f5f5f5f 64 plan9 CMPW $0x2211, AX
+6640|11223344556677885f5f5f5f5f5f 32 intel inc ax
+6640|11223344556677885f5f5f5f5f5f 32 plan9 INCW AX
+66480f3a161122|3344556677885f5f5f 64 gnu pextrq $0x22,%xmm2,(%rcx)
+66480f3a161122|3344556677885f5f5f 64 intel pextrq qword ptr [rcx], xmm2, 0x22
+66480f3a161122|3344556677885f5f5f 64 plan9 PEXTRQ $0x22, X2, 0(CX)
+66480f3a221122|3344556677885f5f5f 64 gnu pinsrq $0x22,(%rcx),%xmm2
+66480f3a221122|3344556677885f5f5f 64 intel pinsrq xmm2, qword ptr [rcx], 0x22
+66480f3a221122|3344556677885f5f5f 64 plan9 PINSRQ $0x22, 0(CX), X2
+66480f6e11|223344556677885f5f5f5f 64 gnu movq (%rcx),%xmm2
+66480f6e11|223344556677885f5f5f5f 64 intel movq xmm2, qword ptr [rcx]
+66480f6e11|223344556677885f5f5f5f 64 plan9 MOVQ 0(CX), X2
+66480f7e11|223344556677885f5f5f5f 64 gnu movq %xmm2,(%rcx)
+66480f7e11|223344556677885f5f5f5f 64 intel movq qword ptr [rcx], xmm2
+66480f7e11|223344556677885f5f5f5f 64 plan9 MOVQ X2, 0(CX)
+6648|0f3a1611223344556677885f5f5f 32 intel dec ax
+6648|0f3a1611223344556677885f5f5f 32 plan9 DECW AX
+6650|11223344556677885f5f5f5f5f5f 32 intel push ax
+6650|11223344556677885f5f5f5f5f5f 32 plan9 PUSHW AX
+6650|11223344556677885f5f5f5f5f5f 64 gnu push %ax
+6650|11223344556677885f5f5f5f5f5f 64 intel push ax
+6650|11223344556677885f5f5f5f5f5f 64 plan9 PUSHW AX
+6658|11223344556677885f5f5f5f5f5f 32 intel pop ax
+6658|11223344556677885f5f5f5f5f5f 32 plan9 POPW AX
+6658|11223344556677885f5f5f5f5f5f 64 gnu pop %ax
+6658|11223344556677885f5f5f5f5f5f 64 intel pop ax
+6658|11223344556677885f5f5f5f5f5f 64 plan9 POPW AX
+6660|11223344556677885f5f5f5f5f5f 32 intel data16 pusha
+6660|11223344556677885f5f5f5f5f5f 32 plan9 PUSHAW
+6661|11223344556677885f5f5f5f5f5f 32 intel data16 popa
+6661|11223344556677885f5f5f5f5f5f 32 plan9 POPAW
+666211|223344556677885f5f5f5f5f5f 32 intel bound dx, qword ptr [ecx]
+666211|223344556677885f5f5f5f5f5f 32 plan9 BOUND 0(CX), DX
+666311|223344556677885f5f5f5f5f5f 64 gnu movsxd (%rcx),%dx
+666311|223344556677885f5f5f5f5f5f 64 intel movsxd dx, dword ptr [rcx]
+666311|223344556677885f5f5f5f5f5f 64 plan9 MOVSXD 0(CX), DX
+66681122|3344556677885f5f5f5f5f5f 32 intel push 0x2211
+66681122|3344556677885f5f5f5f5f5f 32 plan9 PUSHW $0x2211
+66681122|3344556677885f5f5f5f5f5f 64 gnu pushw $0x2211
+66681122|3344556677885f5f5f5f5f5f 64 intel push 0x2211
+66681122|3344556677885f5f5f5f5f5f 64 plan9 PUSHW $0x2211
+6669112233|44556677885f5f5f5f5f5f 32 intel imul dx, word ptr [ecx], 0x3322
+6669112233|44556677885f5f5f5f5f5f 32 plan9 IMULW $0x3322, 0(CX), DX
+6669112233|44556677885f5f5f5f5f5f 64 gnu imul $0x3322,(%rcx),%dx
+6669112233|44556677885f5f5f5f5f5f 64 intel imul dx, word ptr [rcx], 0x3322
+6669112233|44556677885f5f5f5f5f5f 64 plan9 IMULW $0x3322, 0(CX), DX
+666b1122|3344556677885f5f5f5f5f5f 32 intel imul dx, word ptr [ecx], 0x22
+666b1122|3344556677885f5f5f5f5f5f 32 plan9 IMULW $0x22, 0(CX), DX
+666b1122|3344556677885f5f5f5f5f5f 64 gnu imul $0x22,(%rcx),%dx
+666b1122|3344556677885f5f5f5f5f5f 64 intel imul dx, word ptr [rcx], 0x22
+666b1122|3344556677885f5f5f5f5f5f 64 plan9 IMULW $0x22, 0(CX), DX
+666d|11223344556677885f5f5f5f5f5f 32 intel data16 insw
+666d|11223344556677885f5f5f5f5f5f 32 plan9 INSW DX, ES:0(DI)
+666d|11223344556677885f5f5f5f5f5f 64 gnu insw (%dx),%es:(%rdi)
+666d|11223344556677885f5f5f5f5f5f 64 intel data16 insw
+666d|11223344556677885f5f5f5f5f5f 64 plan9 INSW DX, ES:0(DI)
+666f|11223344556677885f5f5f5f5f5f 32 intel data16 outsw
+666f|11223344556677885f5f5f5f5f5f 32 plan9 OUTSW DS:0(SI), DX
+666f|11223344556677885f5f5f5f5f5f 64 gnu outsw %ds:(%rsi),(%dx)
+666f|11223344556677885f5f5f5f5f5f 64 intel data16 outsw
+666f|11223344556677885f5f5f5f5f5f 64 plan9 OUTSW DS:0(SI), DX
+6681001122|3344556677885f5f5f5f5f 32 intel add word ptr [eax], 0x2211
+6681001122|3344556677885f5f5f5f5f 32 plan9 ADDW $0x2211, 0(AX)
+6681001122|3344556677885f5f5f5f5f 64 gnu addw $0x2211,(%rax)
+6681001122|3344556677885f5f5f5f5f 64 intel add word ptr [rax], 0x2211
+6681001122|3344556677885f5f5f5f5f 64 plan9 ADDW $0x2211, 0(AX)
+6681081122|3344556677885f5f5f5f5f 32 intel or word ptr [eax], 0x2211
+6681081122|3344556677885f5f5f5f5f 32 plan9 ORW $0x2211, 0(AX)
+6681081122|3344556677885f5f5f5f5f 64 gnu orw $0x2211,(%rax)
+6681081122|3344556677885f5f5f5f5f 64 intel or word ptr [rax], 0x2211
+6681081122|3344556677885f5f5f5f5f 64 plan9 ORW $0x2211, 0(AX)
+6681112233|44556677885f5f5f5f5f5f 32 intel adc word ptr [ecx], 0x3322
+6681112233|44556677885f5f5f5f5f5f 32 plan9 ADCW $0x3322, 0(CX)
+6681112233|44556677885f5f5f5f5f5f 64 gnu adcw $0x3322,(%rcx)
+6681112233|44556677885f5f5f5f5f5f 64 intel adc word ptr [rcx], 0x3322
+6681112233|44556677885f5f5f5f5f5f 64 plan9 ADCW $0x3322, 0(CX)
+6681181122|3344556677885f5f5f5f5f 32 intel sbb word ptr [eax], 0x2211
+6681181122|3344556677885f5f5f5f5f 32 plan9 SBBW $0x2211, 0(AX)
+6681181122|3344556677885f5f5f5f5f 64 gnu sbbw $0x2211,(%rax)
+6681181122|3344556677885f5f5f5f5f 64 intel sbb word ptr [rax], 0x2211
+6681181122|3344556677885f5f5f5f5f 64 plan9 SBBW $0x2211, 0(AX)
+6681201122|3344556677885f5f5f5f5f 32 intel and word ptr [eax], 0x2211
+6681201122|3344556677885f5f5f5f5f 32 plan9 ANDW $0x2211, 0(AX)
+6681201122|3344556677885f5f5f5f5f 64 gnu andw $0x2211,(%rax)
+6681201122|3344556677885f5f5f5f5f 64 intel and word ptr [rax], 0x2211
+6681201122|3344556677885f5f5f5f5f 64 plan9 ANDW $0x2211, 0(AX)
+6681281122|3344556677885f5f5f5f5f 32 intel sub word ptr [eax], 0x2211
+6681281122|3344556677885f5f5f5f5f 32 plan9 SUBW $0x2211, 0(AX)
+6681281122|3344556677885f5f5f5f5f 64 gnu subw $0x2211,(%rax)
+6681281122|3344556677885f5f5f5f5f 64 intel sub word ptr [rax], 0x2211
+6681281122|3344556677885f5f5f5f5f 64 plan9 SUBW $0x2211, 0(AX)
+6681301122|3344556677885f5f5f5f5f 32 intel xor word ptr [eax], 0x2211
+6681301122|3344556677885f5f5f5f5f 32 plan9 XORW $0x2211, 0(AX)
+6681301122|3344556677885f5f5f5f5f 64 gnu xorw $0x2211,(%rax)
+6681301122|3344556677885f5f5f5f5f 64 intel xor word ptr [rax], 0x2211
+6681301122|3344556677885f5f5f5f5f 64 plan9 XORW $0x2211, 0(AX)
+6681381122|3344556677885f5f5f5f5f 32 intel cmp word ptr [eax], 0x2211
+6681381122|3344556677885f5f5f5f5f 32 plan9 CMPW $0x2211, 0(AX)
+6681381122|3344556677885f5f5f5f5f 64 gnu cmpw $0x2211,(%rax)
+6681381122|3344556677885f5f5f5f5f 64 intel cmp word ptr [rax], 0x2211
+6681381122|3344556677885f5f5f5f5f 64 plan9 CMPW $0x2211, 0(AX)
+66830011|223344556677885f5f5f5f5f 32 intel add word ptr [eax], 0x11
+66830011|223344556677885f5f5f5f5f 32 plan9 ADDW $0x11, 0(AX)
+66830011|223344556677885f5f5f5f5f 64 gnu addw $0x11,(%rax)
+66830011|223344556677885f5f5f5f5f 64 intel add word ptr [rax], 0x11
+66830011|223344556677885f5f5f5f5f 64 plan9 ADDW $0x11, 0(AX)
+66830811|223344556677885f5f5f5f5f 32 intel or word ptr [eax], 0x11
+66830811|223344556677885f5f5f5f5f 32 plan9 ORW $0x11, 0(AX)
+66830811|223344556677885f5f5f5f5f 64 gnu orw $0x11,(%rax)
+66830811|223344556677885f5f5f5f5f 64 intel or word ptr [rax], 0x11
+66830811|223344556677885f5f5f5f5f 64 plan9 ORW $0x11, 0(AX)
+66831122|3344556677885f5f5f5f5f5f 32 intel adc word ptr [ecx], 0x22
+66831122|3344556677885f5f5f5f5f5f 32 plan9 ADCW $0x22, 0(CX)
+66831122|3344556677885f5f5f5f5f5f 64 gnu adcw $0x22,(%rcx)
+66831122|3344556677885f5f5f5f5f5f 64 intel adc word ptr [rcx], 0x22
+66831122|3344556677885f5f5f5f5f5f 64 plan9 ADCW $0x22, 0(CX)
+66831811|223344556677885f5f5f5f5f 32 intel sbb word ptr [eax], 0x11
+66831811|223344556677885f5f5f5f5f 32 plan9 SBBW $0x11, 0(AX)
+66831811|223344556677885f5f5f5f5f 64 gnu sbbw $0x11,(%rax)
+66831811|223344556677885f5f5f5f5f 64 intel sbb word ptr [rax], 0x11
+66831811|223344556677885f5f5f5f5f 64 plan9 SBBW $0x11, 0(AX)
+66832011|223344556677885f5f5f5f5f 32 intel and word ptr [eax], 0x11
+66832011|223344556677885f5f5f5f5f 32 plan9 ANDW $0x11, 0(AX)
+66832011|223344556677885f5f5f5f5f 64 gnu andw $0x11,(%rax)
+66832011|223344556677885f5f5f5f5f 64 intel and word ptr [rax], 0x11
+66832011|223344556677885f5f5f5f5f 64 plan9 ANDW $0x11, 0(AX)
+66832811|223344556677885f5f5f5f5f 32 intel sub word ptr [eax], 0x11
+66832811|223344556677885f5f5f5f5f 32 plan9 SUBW $0x11, 0(AX)
+66832811|223344556677885f5f5f5f5f 64 gnu subw $0x11,(%rax)
+66832811|223344556677885f5f5f5f5f 64 intel sub word ptr [rax], 0x11
+66832811|223344556677885f5f5f5f5f 64 plan9 SUBW $0x11, 0(AX)
+66833011|223344556677885f5f5f5f5f 32 intel xor word ptr [eax], 0x11
+66833011|223344556677885f5f5f5f5f 32 plan9 XORW $0x11, 0(AX)
+66833011|223344556677885f5f5f5f5f 64 gnu xorw $0x11,(%rax)
+66833011|223344556677885f5f5f5f5f 64 intel xor word ptr [rax], 0x11
+66833011|223344556677885f5f5f5f5f 64 plan9 XORW $0x11, 0(AX)
+66833811|223344556677885f5f5f5f5f 32 intel cmp word ptr [eax], 0x11
+66833811|223344556677885f5f5f5f5f 32 plan9 CMPW $0x11, 0(AX)
+66833811|223344556677885f5f5f5f5f 64 gnu cmpw $0x11,(%rax)
+66833811|223344556677885f5f5f5f5f 64 intel cmp word ptr [rax], 0x11
+66833811|223344556677885f5f5f5f5f 64 plan9 CMPW $0x11, 0(AX)
+668511|223344556677885f5f5f5f5f5f 32 intel test word ptr [ecx], dx
+668511|223344556677885f5f5f5f5f5f 32 plan9 TESTW DX, 0(CX)
+668511|223344556677885f5f5f5f5f5f 64 gnu test %dx,(%rcx)
+668511|223344556677885f5f5f5f5f5f 64 intel test word ptr [rcx], dx
+668511|223344556677885f5f5f5f5f5f 64 plan9 TESTW DX, 0(CX)
+668711|223344556677885f5f5f5f5f5f 32 intel xchg word ptr [ecx], dx
+668711|223344556677885f5f5f5f5f5f 32 plan9 XCHGW DX, 0(CX)
+668711|223344556677885f5f5f5f5f5f 64 gnu xchg %dx,(%rcx)
+668711|223344556677885f5f5f5f5f5f 64 intel xchg word ptr [rcx], dx
+668711|223344556677885f5f5f5f5f5f 64 plan9 XCHGW DX, 0(CX)
+668911|223344556677885f5f5f5f5f5f 32 intel mov word ptr [ecx], dx
+668911|223344556677885f5f5f5f5f5f 32 plan9 MOVW DX, 0(CX)
+668911|223344556677885f5f5f5f5f5f 64 gnu mov %dx,(%rcx)
+668911|223344556677885f5f5f5f5f5f 64 intel mov word ptr [rcx], dx
+668911|223344556677885f5f5f5f5f5f 64 plan9 MOVW DX, 0(CX)
+668b11|223344556677885f5f5f5f5f5f 32 intel mov dx, word ptr [ecx]
+668b11|223344556677885f5f5f5f5f5f 32 plan9 MOVW 0(CX), DX
+668b11|223344556677885f5f5f5f5f5f 64 gnu mov (%rcx),%dx
+668b11|223344556677885f5f5f5f5f5f 64 intel mov dx, word ptr [rcx]
+668b11|223344556677885f5f5f5f5f5f 64 plan9 MOVW 0(CX), DX
+668c11|223344556677885f5f5f5f5f5f 32 intel mov word ptr [ecx], ss
+668c11|223344556677885f5f5f5f5f5f 32 plan9 MOVW SS, 0(CX)
+668c11|223344556677885f5f5f5f5f5f 64 gnu data16 mov %ss,(%rcx)
+668c11|223344556677885f5f5f5f5f5f 64 intel mov word ptr [rcx], ss
+668c11|223344556677885f5f5f5f5f5f 64 plan9 MOVW SS, 0(CX)
+668d11|223344556677885f5f5f5f5f5f 32 intel lea dx, ptr [ecx]
+668d11|223344556677885f5f5f5f5f5f 32 plan9 LEAW 0(CX), DX
+668d11|223344556677885f5f5f5f5f5f 64 gnu lea (%rcx),%dx
+668d11|223344556677885f5f5f5f5f5f 64 intel lea dx, ptr [rcx]
+668d11|223344556677885f5f5f5f5f5f 64 plan9 LEAW 0(CX), DX
+668ec0|11223344556677885f5f5f5f5f 32 intel mov es, ax
+668ec0|11223344556677885f5f5f5f5f 32 plan9 MOVW AX, ES
+668ec0|11223344556677885f5f5f5f5f 64 gnu mov %ax,%es
+668ec0|11223344556677885f5f5f5f5f 64 intel mov es, ax
+668ec0|11223344556677885f5f5f5f5f 64 plan9 MOVW AX, ES
+668f00|11223344556677885f5f5f5f5f 32 intel pop word ptr [eax]
+668f00|11223344556677885f5f5f5f5f 32 plan9 POPW 0(AX)
+668f00|11223344556677885f5f5f5f5f 64 gnu popw (%rax)
+668f00|11223344556677885f5f5f5f5f 64 intel pop word ptr [rax]
+668f00|11223344556677885f5f5f5f5f 64 plan9 POPW 0(AX)
+6690|11223344556677885f5f5f5f5f5f 32 plan9 NOPW
+6690|11223344556677885f5f5f5f5f5f 64 gnu data16 nop
+6690|11223344556677885f5f5f5f5f5f 64 plan9 NOPW
+6698|11223344556677885f5f5f5f5f5f 32 intel data16 cbw
+6698|11223344556677885f5f5f5f5f5f 32 plan9 CBW
+6698|11223344556677885f5f5f5f5f5f 64 gnu cbtw
+6698|11223344556677885f5f5f5f5f5f 64 intel data16 cbw
+6698|11223344556677885f5f5f5f5f5f 64 plan9 CBW
+6699|11223344556677885f5f5f5f5f5f 32 intel data16 cwd
+6699|11223344556677885f5f5f5f5f5f 32 plan9 CWD
+6699|11223344556677885f5f5f5f5f5f 64 gnu cwtd
+6699|11223344556677885f5f5f5f5f5f 64 intel data16 cwd
+6699|11223344556677885f5f5f5f5f5f 64 plan9 CWD
+669a11223344|556677885f5f5f5f5f5f 32 intel call far 0x2211, 0x4433
+669a11223344|556677885f5f5f5f5f5f 32 plan9 LCALL $0x2211, $0x4433
+669c|11223344556677885f5f5f5f5f5f 32 intel data16 pushf
+669c|11223344556677885f5f5f5f5f5f 32 plan9 PUSHF
+669c|11223344556677885f5f5f5f5f5f 64 gnu pushfw
+669c|11223344556677885f5f5f5f5f5f 64 intel data16 pushf
+669c|11223344556677885f5f5f5f5f5f 64 plan9 PUSHF
+669d|11223344556677885f5f5f5f5f5f 32 intel data16 popf
+669d|11223344556677885f5f5f5f5f5f 32 plan9 POPF
+669d|11223344556677885f5f5f5f5f5f 64 gnu popfw
+669d|11223344556677885f5f5f5f5f5f 64 intel data16 popf
+669d|11223344556677885f5f5f5f5f5f 64 plan9 POPF
+66a11122334455667788|5f5f5f5f5f5f 64 gnu mov -0x778899aabbccddef,%ax
+66a11122334455667788|5f5f5f5f5f5f 64 intel mov ax, word ptr [0x8877665544332211]
+66a11122334455667788|5f5f5f5f5f5f 64 plan9 MOVW -0x778899aabbccddef, AX
+66a111223344|556677885f5f5f5f5f5f 32 intel mov ax, word ptr [0x44332211]
+66a111223344|556677885f5f5f5f5f5f 32 plan9 MOVW 0x44332211, AX
+66a31122334455667788|5f5f5f5f5f5f 64 gnu mov %ax,-0x778899aabbccddef
+66a31122334455667788|5f5f5f5f5f5f 64 intel mov word ptr [0x8877665544332211], ax
+66a31122334455667788|5f5f5f5f5f5f 64 plan9 MOVW AX, -0x778899aabbccddef
+66a311223344|556677885f5f5f5f5f5f 32 intel mov word ptr [0x44332211], ax
+66a311223344|556677885f5f5f5f5f5f 32 plan9 MOVW AX, 0x44332211
+66a5|11223344556677885f5f5f5f5f5f 32 intel movsw word ptr [edi], word ptr [esi]
+66a5|11223344556677885f5f5f5f5f5f 32 plan9 MOVSW DS:0(SI), ES:0(DI)
+66a5|11223344556677885f5f5f5f5f5f 64 gnu movsw %ds:(%rsi),%es:(%rdi)
+66a5|11223344556677885f5f5f5f5f5f 64 intel movsw word ptr [rdi], word ptr [rsi]
+66a5|11223344556677885f5f5f5f5f5f 64 plan9 MOVSW DS:0(SI), ES:0(DI)
+66a7|11223344556677885f5f5f5f5f5f 32 intel cmpsw word ptr [esi], word ptr [edi]
+66a7|11223344556677885f5f5f5f5f5f 32 plan9 CMPSW ES:0(DI), DS:0(SI)
+66a7|11223344556677885f5f5f5f5f5f 64 gnu cmpsw %es:(%rdi),%ds:(%rsi)
+66a7|11223344556677885f5f5f5f5f5f 64 intel cmpsw word ptr [rsi], word ptr [rdi]
+66a7|11223344556677885f5f5f5f5f5f 64 plan9 CMPSW ES:0(DI), DS:0(SI)
+66a91122|3344556677885f5f5f5f5f5f 32 intel test ax, 0x2211
+66a91122|3344556677885f5f5f5f5f5f 32 plan9 TESTW $0x2211, AX
+66a91122|3344556677885f5f5f5f5f5f 64 gnu test $0x2211,%ax
+66a91122|3344556677885f5f5f5f5f5f 64 intel test ax, 0x2211
+66a91122|3344556677885f5f5f5f5f5f 64 plan9 TESTW $0x2211, AX
+66ab|11223344556677885f5f5f5f5f5f 32 intel stosw word ptr [edi]
+66ab|11223344556677885f5f5f5f5f5f 32 plan9 STOSW AX, ES:0(DI)
+66ab|11223344556677885f5f5f5f5f5f 64 gnu stos %ax,%es:(%rdi)
+66ab|11223344556677885f5f5f5f5f5f 64 intel stosw word ptr [rdi]
+66ab|11223344556677885f5f5f5f5f5f 64 plan9 STOSW AX, ES:0(DI)
+66ad|11223344556677885f5f5f5f5f5f 32 intel lodsw word ptr [esi]
+66ad|11223344556677885f5f5f5f5f5f 32 plan9 LODSW DS:0(SI), AX
+66ad|11223344556677885f5f5f5f5f5f 64 gnu lods %ds:(%rsi),%ax
+66ad|11223344556677885f5f5f5f5f5f 64 intel lodsw word ptr [rsi]
+66ad|11223344556677885f5f5f5f5f5f 64 plan9 LODSW DS:0(SI), AX
+66af|11223344556677885f5f5f5f5f5f 32 intel scasw word ptr [edi]
+66af|11223344556677885f5f5f5f5f5f 32 plan9 SCASW ES:0(DI), AX
+66af|11223344556677885f5f5f5f5f5f 64 gnu scas %es:(%rdi),%ax
+66af|11223344556677885f5f5f5f5f5f 64 intel scasw word ptr [rdi]
+66af|11223344556677885f5f5f5f5f5f 64 plan9 SCASW ES:0(DI), AX
+66b81122|3344556677885f5f5f5f5f5f 32 intel mov ax, 0x2211
+66b81122|3344556677885f5f5f5f5f5f 32 plan9 MOVW $0x2211, AX
+66b81122|3344556677885f5f5f5f5f5f 64 gnu mov $0x2211,%ax
+66b81122|3344556677885f5f5f5f5f5f 64 intel mov ax, 0x2211
+66b81122|3344556677885f5f5f5f5f5f 64 plan9 MOVW $0x2211, AX
+66c10011|223344556677885f5f5f5f5f 32 intel rol word ptr [eax], 0x11
+66c10011|223344556677885f5f5f5f5f 32 plan9 ROLW $0x11, 0(AX)
+66c10011|223344556677885f5f5f5f5f 64 gnu rolw $0x11,(%rax)
+66c10011|223344556677885f5f5f5f5f 64 intel rol word ptr [rax], 0x11
+66c10011|223344556677885f5f5f5f5f 64 plan9 ROLW $0x11, 0(AX)
+66c10811|223344556677885f5f5f5f5f 32 intel ror word ptr [eax], 0x11
+66c10811|223344556677885f5f5f5f5f 32 plan9 RORW $0x11, 0(AX)
+66c10811|223344556677885f5f5f5f5f 64 gnu rorw $0x11,(%rax)
+66c10811|223344556677885f5f5f5f5f 64 intel ror word ptr [rax], 0x11
+66c10811|223344556677885f5f5f5f5f 64 plan9 RORW $0x11, 0(AX)
+66c11122|3344556677885f5f5f5f5f5f 32 intel rcl word ptr [ecx], 0x22
+66c11122|3344556677885f5f5f5f5f5f 32 plan9 RCLW $0x22, 0(CX)
+66c11122|3344556677885f5f5f5f5f5f 64 gnu rclw $0x22,(%rcx)
+66c11122|3344556677885f5f5f5f5f5f 64 intel rcl word ptr [rcx], 0x22
+66c11122|3344556677885f5f5f5f5f5f 64 plan9 RCLW $0x22, 0(CX)
+66c11811|223344556677885f5f5f5f5f 32 intel rcr word ptr [eax], 0x11
+66c11811|223344556677885f5f5f5f5f 32 plan9 RCRW $0x11, 0(AX)
+66c11811|223344556677885f5f5f5f5f 64 gnu rcrw $0x11,(%rax)
+66c11811|223344556677885f5f5f5f5f 64 intel rcr word ptr [rax], 0x11
+66c11811|223344556677885f5f5f5f5f 64 plan9 RCRW $0x11, 0(AX)
+66c12011|223344556677885f5f5f5f5f 32 intel shl word ptr [eax], 0x11
+66c12011|223344556677885f5f5f5f5f 32 plan9 SHLW $0x11, 0(AX)
+66c12011|223344556677885f5f5f5f5f 64 gnu shlw $0x11,(%rax)
+66c12011|223344556677885f5f5f5f5f 64 intel shl word ptr [rax], 0x11
+66c12011|223344556677885f5f5f5f5f 64 plan9 SHLW $0x11, 0(AX)
+66c12811|223344556677885f5f5f5f5f 32 intel shr word ptr [eax], 0x11
+66c12811|223344556677885f5f5f5f5f 32 plan9 SHRW $0x11, 0(AX)
+66c12811|223344556677885f5f5f5f5f 64 gnu shrw $0x11,(%rax)
+66c12811|223344556677885f5f5f5f5f 64 intel shr word ptr [rax], 0x11
+66c12811|223344556677885f5f5f5f5f 64 plan9 SHRW $0x11, 0(AX)
+66c13811|223344556677885f5f5f5f5f 32 intel sar word ptr [eax], 0x11
+66c13811|223344556677885f5f5f5f5f 32 plan9 SARW $0x11, 0(AX)
+66c13811|223344556677885f5f5f5f5f 64 gnu sarw $0x11,(%rax)
+66c13811|223344556677885f5f5f5f5f 64 intel sar word ptr [rax], 0x11
+66c13811|223344556677885f5f5f5f5f 64 plan9 SARW $0x11, 0(AX)
+66c21122|3344556677885f5f5f5f5f5f 32 intel ret 0x2211
+66c21122|3344556677885f5f5f5f5f5f 32 plan9 RET $0x2211
+66c21122|3344556677885f5f5f5f5f5f 64 gnu retw $0x2211
+66c21122|3344556677885f5f5f5f5f5f 64 intel ret 0x2211
+66c21122|3344556677885f5f5f5f5f5f 64 plan9 RET $0x2211
+66c411|223344556677885f5f5f5f5f5f 32 intel les dx, dword ptr [ecx]
+66c411|223344556677885f5f5f5f5f5f 32 plan9 LES 0(CX), DX
+66c511|223344556677885f5f5f5f5f5f 32 intel lds dx, dword ptr [ecx]
+66c511|223344556677885f5f5f5f5f5f 32 plan9 LDS 0(CX), DX
+66c7001122|3344556677885f5f5f5f5f 32 intel mov word ptr [eax], 0x2211
+66c7001122|3344556677885f5f5f5f5f 32 plan9 MOVW $0x2211, 0(AX)
+66c7001122|3344556677885f5f5f5f5f 64 gnu movw $0x2211,(%rax)
+66c7001122|3344556677885f5f5f5f5f 64 intel mov word ptr [rax], 0x2211
+66c7001122|3344556677885f5f5f5f5f 64 plan9 MOVW $0x2211, 0(AX)
+66c7f81122|3344556677885f5f5f5f5f 32 intel xbegin .+0x2211
+66c7f81122|3344556677885f5f5f5f5f 32 plan9 XBEGIN .+8721
+66c7f81122|3344556677885f5f5f5f5f 64 gnu xbeginw .+0x2211
+66c7f81122|3344556677885f5f5f5f5f 64 intel xbegin .+0x2211
+66c7f81122|3344556677885f5f5f5f5f 64 plan9 XBEGIN .+8721
+66c9|11223344556677885f5f5f5f5f5f 32 intel data16 leave
+66c9|11223344556677885f5f5f5f5f5f 32 plan9 LEAVE
+66c9|11223344556677885f5f5f5f5f5f 64 gnu leavew
+66c9|11223344556677885f5f5f5f5f5f 64 intel data16 leave
+66c9|11223344556677885f5f5f5f5f5f 64 plan9 LEAVE
+66cf|11223344556677885f5f5f5f5f5f 32 intel data16 iret
+66cf|11223344556677885f5f5f5f5f5f 32 plan9 IRET
+66cf|11223344556677885f5f5f5f5f5f 64 gnu iretw
+66cf|11223344556677885f5f5f5f5f5f 64 intel data16 iret
+66cf|11223344556677885f5f5f5f5f5f 64 plan9 IRET
+66d100|11223344556677885f5f5f5f5f 32 intel rol word ptr [eax], 0x1
+66d100|11223344556677885f5f5f5f5f 32 plan9 ROLW $0x1, 0(AX)
+66d100|11223344556677885f5f5f5f5f 64 gnu rolw (%rax)
+66d100|11223344556677885f5f5f5f5f 64 intel rol word ptr [rax], 0x1
+66d100|11223344556677885f5f5f5f5f 64 plan9 ROLW $0x1, 0(AX)
+66d108|11223344556677885f5f5f5f5f 32 intel ror word ptr [eax], 0x1
+66d108|11223344556677885f5f5f5f5f 32 plan9 RORW $0x1, 0(AX)
+66d108|11223344556677885f5f5f5f5f 64 gnu rorw (%rax)
+66d108|11223344556677885f5f5f5f5f 64 intel ror word ptr [rax], 0x1
+66d108|11223344556677885f5f5f5f5f 64 plan9 RORW $0x1, 0(AX)
+66d111|223344556677885f5f5f5f5f5f 32 intel rcl word ptr [ecx], 0x1
+66d111|223344556677885f5f5f5f5f5f 32 plan9 RCLW $0x1, 0(CX)
+66d111|223344556677885f5f5f5f5f5f 64 gnu rclw (%rcx)
+66d111|223344556677885f5f5f5f5f5f 64 intel rcl word ptr [rcx], 0x1
+66d111|223344556677885f5f5f5f5f5f 64 plan9 RCLW $0x1, 0(CX)
+66d118|11223344556677885f5f5f5f5f 32 intel rcr word ptr [eax], 0x1
+66d118|11223344556677885f5f5f5f5f 32 plan9 RCRW $0x1, 0(AX)
+66d118|11223344556677885f5f5f5f5f 64 gnu rcrw (%rax)
+66d118|11223344556677885f5f5f5f5f 64 intel rcr word ptr [rax], 0x1
+66d118|11223344556677885f5f5f5f5f 64 plan9 RCRW $0x1, 0(AX)
+66d120|11223344556677885f5f5f5f5f 32 intel shl word ptr [eax], 0x1
+66d120|11223344556677885f5f5f5f5f 32 plan9 SHLW $0x1, 0(AX)
+66d120|11223344556677885f5f5f5f5f 64 gnu shlw (%rax)
+66d120|11223344556677885f5f5f5f5f 64 intel shl word ptr [rax], 0x1
+66d120|11223344556677885f5f5f5f5f 64 plan9 SHLW $0x1, 0(AX)
+66d128|11223344556677885f5f5f5f5f 32 intel shr word ptr [eax], 0x1
+66d128|11223344556677885f5f5f5f5f 32 plan9 SHRW $0x1, 0(AX)
+66d128|11223344556677885f5f5f5f5f 64 gnu shrw (%rax)
+66d128|11223344556677885f5f5f5f5f 64 intel shr word ptr [rax], 0x1
+66d128|11223344556677885f5f5f5f5f 64 plan9 SHRW $0x1, 0(AX)
+66d138|11223344556677885f5f5f5f5f 32 intel sar word ptr [eax], 0x1
+66d138|11223344556677885f5f5f5f5f 32 plan9 SARW $0x1, 0(AX)
+66d138|11223344556677885f5f5f5f5f 64 gnu sarw (%rax)
+66d138|11223344556677885f5f5f5f5f 64 intel sar word ptr [rax], 0x1
+66d138|11223344556677885f5f5f5f5f 64 plan9 SARW $0x1, 0(AX)
+66d300|11223344556677885f5f5f5f5f 32 intel rol word ptr [eax], cl
+66d300|11223344556677885f5f5f5f5f 32 plan9 ROLW CL, 0(AX)
+66d300|11223344556677885f5f5f5f5f 64 gnu rolw %cl,(%rax)
+66d300|11223344556677885f5f5f5f5f 64 intel rol word ptr [rax], cl
+66d300|11223344556677885f5f5f5f5f 64 plan9 ROLW CL, 0(AX)
+66d308|11223344556677885f5f5f5f5f 32 intel ror word ptr [eax], cl
+66d308|11223344556677885f5f5f5f5f 32 plan9 RORW CL, 0(AX)
+66d308|11223344556677885f5f5f5f5f 64 gnu rorw %cl,(%rax)
+66d308|11223344556677885f5f5f5f5f 64 intel ror word ptr [rax], cl
+66d308|11223344556677885f5f5f5f5f 64 plan9 RORW CL, 0(AX)
+66d311|223344556677885f5f5f5f5f5f 32 intel rcl word ptr [ecx], cl
+66d311|223344556677885f5f5f5f5f5f 32 plan9 RCLW CL, 0(CX)
+66d311|223344556677885f5f5f5f5f5f 64 gnu rclw %cl,(%rcx)
+66d311|223344556677885f5f5f5f5f5f 64 intel rcl word ptr [rcx], cl
+66d311|223344556677885f5f5f5f5f5f 64 plan9 RCLW CL, 0(CX)
+66d318|11223344556677885f5f5f5f5f 32 intel rcr word ptr [eax], cl
+66d318|11223344556677885f5f5f5f5f 32 plan9 RCRW CL, 0(AX)
+66d318|11223344556677885f5f5f5f5f 64 gnu rcrw %cl,(%rax)
+66d318|11223344556677885f5f5f5f5f 64 intel rcr word ptr [rax], cl
+66d318|11223344556677885f5f5f5f5f 64 plan9 RCRW CL, 0(AX)
+66d320|11223344556677885f5f5f5f5f 32 intel shl word ptr [eax], cl
+66d320|11223344556677885f5f5f5f5f 32 plan9 SHLW CL, 0(AX)
+66d320|11223344556677885f5f5f5f5f 64 gnu shlw %cl,(%rax)
+66d320|11223344556677885f5f5f5f5f 64 intel shl word ptr [rax], cl
+66d320|11223344556677885f5f5f5f5f 64 plan9 SHLW CL, 0(AX)
+66d328|11223344556677885f5f5f5f5f 32 intel shr word ptr [eax], cl
+66d328|11223344556677885f5f5f5f5f 32 plan9 SHRW CL, 0(AX)
+66d328|11223344556677885f5f5f5f5f 64 gnu shrw %cl,(%rax)
+66d328|11223344556677885f5f5f5f5f 64 intel shr word ptr [rax], cl
+66d328|11223344556677885f5f5f5f5f 64 plan9 SHRW CL, 0(AX)
+66d338|11223344556677885f5f5f5f5f 32 intel sar word ptr [eax], cl
+66d338|11223344556677885f5f5f5f5f 32 plan9 SARW CL, 0(AX)
+66d338|11223344556677885f5f5f5f5f 64 gnu sarw %cl,(%rax)
+66d338|11223344556677885f5f5f5f5f 64 intel sar word ptr [rax], cl
+66d338|11223344556677885f5f5f5f5f 64 plan9 SARW CL, 0(AX)
+66d411|223344556677885f5f5f5f5f5f 32 intel aam 0x11
+66d411|223344556677885f5f5f5f5f5f 32 plan9 AAM $0x11
+66d920|11223344556677885f5f5f5f5f 32 intel fldenv ptr [eax]
+66d920|11223344556677885f5f5f5f5f 32 plan9 FLDENVW 0(AX)
+66d920|11223344556677885f5f5f5f5f 64 gnu fldenvs (%rax)
+66d920|11223344556677885f5f5f5f5f 64 intel fldenv ptr [rax]
+66d920|11223344556677885f5f5f5f5f 64 plan9 FLDENVW 0(AX)
+66e511|223344556677885f5f5f5f5f5f 32 intel in ax, 0x11
+66e511|223344556677885f5f5f5f5f5f 32 plan9 INW $0x11, AX
+66e511|223344556677885f5f5f5f5f5f 64 gnu in $0x11,%ax
+66e511|223344556677885f5f5f5f5f5f 64 intel in ax, 0x11
+66e511|223344556677885f5f5f5f5f5f 64 plan9 INW $0x11, AX
+66e711|223344556677885f5f5f5f5f5f 32 intel out 0x11, ax
+66e711|223344556677885f5f5f5f5f5f 32 plan9 OUTW AX, $0x11
+66e711|223344556677885f5f5f5f5f5f 64 gnu out %ax,$0x11
+66e711|223344556677885f5f5f5f5f5f 64 intel out 0x11, ax
+66e711|223344556677885f5f5f5f5f5f 64 plan9 OUTW AX, $0x11
+66e811223344|556677885f5f5f5f5f5f 64 gnu callw .+0x44332211
+66e811223344|556677885f5f5f5f5f5f 64 intel call .+0x44332211
+66e811223344|556677885f5f5f5f5f5f 64 plan9 CALL .+1144201745
+66e81122|3344556677885f5f5f5f5f5f 32 intel call .+0x2211
+66e81122|3344556677885f5f5f5f5f5f 32 plan9 CALL .+8721
+66e911223344|556677885f5f5f5f5f5f 64 gnu jmpw .+0x44332211
+66e911223344|556677885f5f5f5f5f5f 64 intel jmp .+0x44332211
+66e911223344|556677885f5f5f5f5f5f 64 plan9 JMP .+1144201745
+66e91122|3344556677885f5f5f5f5f5f 32 intel jmp .+0x2211
+66e91122|3344556677885f5f5f5f5f5f 32 plan9 JMP .+8721
+66ea11223344|556677885f5f5f5f5f5f 32 intel jmp far 0x2211, 0x4433
+66ea11223344|556677885f5f5f5f5f5f 32 plan9 LJMP $0x2211, $0x4433
+66ed|11223344556677885f5f5f5f5f5f 32 intel in ax, dx
+66ed|11223344556677885f5f5f5f5f5f 32 plan9 INW DX, AX
+66ed|11223344556677885f5f5f5f5f5f 64 gnu in (%dx),%ax
+66ed|11223344556677885f5f5f5f5f5f 64 intel in ax, dx
+66ed|11223344556677885f5f5f5f5f5f 64 plan9 INW DX, AX
+66ef|11223344556677885f5f5f5f5f5f 32 intel out dx, ax
+66ef|11223344556677885f5f5f5f5f5f 32 plan9 OUTW AX, DX
+66ef|11223344556677885f5f5f5f5f5f 64 gnu out %ax,(%dx)
+66ef|11223344556677885f5f5f5f5f5f 64 intel out dx, ax
+66ef|11223344556677885f5f5f5f5f5f 64 plan9 OUTW AX, DX
+66f20f2a11|223344556677885f5f5f5f 32 intel cvtsi2sd xmm2, dword ptr [ecx]
+66f20f2a11|223344556677885f5f5f5f 32 plan9 REPNE CVTSI2SDW 0(CX), X2
+66f20f2a11|223344556677885f5f5f5f 64 gnu cvtsi2sdl (%rcx),%xmm2
+66f20f2a11|223344556677885f5f5f5f 64 intel cvtsi2sd xmm2, dword ptr [rcx]
+66f20f2a11|223344556677885f5f5f5f 64 plan9 REPNE CVTSI2SDW 0(CX), X2
+66f20f2c11|223344556677885f5f5f5f 32 intel cvttsd2si edx, qword ptr [ecx]
+66f20f2c11|223344556677885f5f5f5f 32 plan9 REPNE CVTTSD2SIW 0(CX), DX
+66f20f2c11|223344556677885f5f5f5f 64 gnu cvttsd2si (%rcx),%dx
+66f20f2c11|223344556677885f5f5f5f 64 intel cvttsd2si edx, qword ptr [rcx]
+66f20f2c11|223344556677885f5f5f5f 64 plan9 REPNE CVTTSD2SIW 0(CX), DX
+66f20f2d11|223344556677885f5f5f5f 32 intel cvtsd2si edx, qword ptr [ecx]
+66f20f2d11|223344556677885f5f5f5f 32 plan9 REPNE CVTSD2SIW 0(CX), DX
+66f20f2d11|223344556677885f5f5f5f 64 gnu cvtsd2si (%rcx),%dx
+66f20f2d11|223344556677885f5f5f5f 64 intel cvtsd2si edx, qword ptr [rcx]
+66f20f2d11|223344556677885f5f5f5f 64 plan9 REPNE CVTSD2SIW 0(CX), DX
+66f20f38f011|223344556677885f5f5f 32 intel crc32 edx, byte ptr [ecx]
+66f20f38f011|223344556677885f5f5f 32 plan9 REPNE CRC32 0(CX), DX
+66f20f38f011|223344556677885f5f5f 64 gnu crc32b (%rcx),%edx
+66f20f38f011|223344556677885f5f5f 64 intel crc32 edx, byte ptr [rcx]
+66f20f38f011|223344556677885f5f5f 64 plan9 REPNE CRC32 0(CX), DX
+66f30f2c11|223344556677885f5f5f5f 32 intel cvttss2si edx, dword ptr [ecx]
+66f30f2c11|223344556677885f5f5f5f 32 plan9 REP CVTTSS2SIW 0(CX), DX
+66f30f2c11|223344556677885f5f5f5f 64 gnu cvttss2si (%rcx),%dx
+66f30f2c11|223344556677885f5f5f5f 64 intel cvttss2si edx, dword ptr [rcx]
+66f30f2c11|223344556677885f5f5f5f 64 plan9 REP CVTTSS2SIW 0(CX), DX
+66f30f2d11|223344556677885f5f5f5f 32 intel cvtss2si edx, dword ptr [ecx]
+66f30f2d11|223344556677885f5f5f5f 32 plan9 REP CVTSS2SIW 0(CX), DX
+66f30f2d11|223344556677885f5f5f5f 64 gnu cvtss2si (%rcx),%dx
+66f30f2d11|223344556677885f5f5f5f 64 intel cvtss2si edx, dword ptr [rcx]
+66f30f2d11|223344556677885f5f5f5f 64 plan9 REP CVTSS2SIW 0(CX), DX
+66f30fae11|223344556677885f5f5f5f 64 gnu wrfsbasel (%rcx)
+66f30fae11|223344556677885f5f5f5f 64 intel wrfsbase dword ptr [rcx]
+66f30fae11|223344556677885f5f5f5f 64 plan9 REP WRFSBASE 0(CX)
+66f30fae18|11223344556677885f5f5f 64 gnu wrgsbasel (%rax)
+66f30fae18|11223344556677885f5f5f 64 intel wrgsbase dword ptr [rax]
+66f30fae18|11223344556677885f5f5f 64 plan9 REP WRGSBASE 0(AX)
+66f30faec0|11223344556677885f5f5f 64 gnu rdfsbase %eax
+66f30faec0|11223344556677885f5f5f 64 intel rdfsbase eax
+66f30faec0|11223344556677885f5f5f 64 plan9 REP RDFSBASE AX
+66f30faec8|11223344556677885f5f5f 64 gnu rdgsbase %eax
+66f30faec8|11223344556677885f5f5f 64 intel rdgsbase eax
+66f30faec8|11223344556677885f5f5f 64 plan9 REP RDGSBASE AX
+66f30fd6c5|11223344556677885f5f5f 32 intel movq2dq xmm0, mmx5
+66f30fd6c5|11223344556677885f5f5f 32 plan9 REP MOVQ2DQ M5, X0
+66f30fd6c5|11223344556677885f5f5f 64 gnu movq2dq %mm5,%xmm0
+66f30fd6c5|11223344556677885f5f5f 64 intel movq2dq xmm0, mmx5
+66f30fd6c5|11223344556677885f5f5f 64 plan9 REP MOVQ2DQ M5, X0
+66f7001122|3344556677885f5f5f5f5f 32 intel test word ptr [eax], 0x2211
+66f7001122|3344556677885f5f5f5f5f 32 plan9 TESTW $0x2211, 0(AX)
+66f7001122|3344556677885f5f5f5f5f 64 gnu testw $0x2211,(%rax)
+66f7001122|3344556677885f5f5f5f5f 64 intel test word ptr [rax], 0x2211
+66f7001122|3344556677885f5f5f5f5f 64 plan9 TESTW $0x2211, 0(AX)
+66f711|223344556677885f5f5f5f5f5f 32 intel not word ptr [ecx]
+66f711|223344556677885f5f5f5f5f5f 32 plan9 NOTW 0(CX)
+66f711|223344556677885f5f5f5f5f5f 64 gnu notw (%rcx)
+66f711|223344556677885f5f5f5f5f5f 64 intel not word ptr [rcx]
+66f711|223344556677885f5f5f5f5f5f 64 plan9 NOTW 0(CX)
+66f718|11223344556677885f5f5f5f5f 32 intel neg word ptr [eax]
+66f718|11223344556677885f5f5f5f5f 32 plan9 NEGW 0(AX)
+66f718|11223344556677885f5f5f5f5f 64 gnu negw (%rax)
+66f718|11223344556677885f5f5f5f5f 64 intel neg word ptr [rax]
+66f718|11223344556677885f5f5f5f5f 64 plan9 NEGW 0(AX)
+66f720|11223344556677885f5f5f5f5f 32 intel mul word ptr [eax]
+66f720|11223344556677885f5f5f5f5f 32 plan9 MULW 0(AX)
+66f720|11223344556677885f5f5f5f5f 64 gnu mulw (%rax)
+66f720|11223344556677885f5f5f5f5f 64 intel mul word ptr [rax]
+66f720|11223344556677885f5f5f5f5f 64 plan9 MULW 0(AX)
+66f728|11223344556677885f5f5f5f5f 32 intel imul word ptr [eax]
+66f728|11223344556677885f5f5f5f5f 32 plan9 IMULW 0(AX)
+66f728|11223344556677885f5f5f5f5f 64 gnu imulw (%rax)
+66f728|11223344556677885f5f5f5f5f 64 intel imul word ptr [rax]
+66f728|11223344556677885f5f5f5f5f 64 plan9 IMULW 0(AX)
+66f730|11223344556677885f5f5f5f5f 32 intel div word ptr [eax]
+66f730|11223344556677885f5f5f5f5f 32 plan9 DIVW 0(AX)
+66f730|11223344556677885f5f5f5f5f 64 gnu divw (%rax)
+66f730|11223344556677885f5f5f5f5f 64 intel div word ptr [rax]
+66f730|11223344556677885f5f5f5f5f 64 plan9 DIVW 0(AX)
+66f738|11223344556677885f5f5f5f5f 32 intel idiv word ptr [eax]
+66f738|11223344556677885f5f5f5f5f 32 plan9 IDIVW 0(AX)
+66f738|11223344556677885f5f5f5f5f 64 gnu idivw (%rax)
+66f738|11223344556677885f5f5f5f5f 64 intel idiv word ptr [rax]
+66f738|11223344556677885f5f5f5f5f 64 plan9 IDIVW 0(AX)
+66ff00|11223344556677885f5f5f5f5f 32 intel inc word ptr [eax]
+66ff00|11223344556677885f5f5f5f5f 32 plan9 INCW 0(AX)
+66ff00|11223344556677885f5f5f5f5f 64 gnu incw (%rax)
+66ff00|11223344556677885f5f5f5f5f 64 intel inc word ptr [rax]
+66ff00|11223344556677885f5f5f5f5f 64 plan9 INCW 0(AX)
+66ff08|11223344556677885f5f5f5f5f 32 intel dec word ptr [eax]
+66ff08|11223344556677885f5f5f5f5f 32 plan9 DECW 0(AX)
+66ff08|11223344556677885f5f5f5f5f 64 gnu decw (%rax)
+66ff08|11223344556677885f5f5f5f5f 64 intel dec word ptr [rax]
+66ff08|11223344556677885f5f5f5f5f 64 plan9 DECW 0(AX)
+66ff11|223344556677885f5f5f5f5f5f 32 intel call word ptr [ecx]
+66ff11|223344556677885f5f5f5f5f5f 32 plan9 CALL 0(CX)
+66ff11|223344556677885f5f5f5f5f5f 64 gnu callw *(%rcx)
+66ff11|223344556677885f5f5f5f5f5f 64 intel call qword ptr [rcx]
+66ff11|223344556677885f5f5f5f5f5f 64 plan9 CALL 0(CX)
+66ff18|11223344556677885f5f5f5f5f 32 intel call far dword ptr [eax]
+66ff18|11223344556677885f5f5f5f5f 32 plan9 LCALL 0(AX)
+66ff18|11223344556677885f5f5f5f5f 64 gnu lcallw *(%rax)
+66ff18|11223344556677885f5f5f5f5f 64 intel call far dword ptr [rax]
+66ff18|11223344556677885f5f5f5f5f 64 plan9 LCALL 0(AX)
+66ff20|11223344556677885f5f5f5f5f 32 intel jmp word ptr [eax]
+66ff20|11223344556677885f5f5f5f5f 32 plan9 JMP 0(AX)
+66ff20|11223344556677885f5f5f5f5f 64 gnu jmpw *(%rax)
+66ff20|11223344556677885f5f5f5f5f 64 intel jmp qword ptr [rax]
+66ff20|11223344556677885f5f5f5f5f 64 plan9 JMP 0(AX)
+66ff28|11223344556677885f5f5f5f5f 32 intel jmp far dword ptr [eax]
+66ff28|11223344556677885f5f5f5f5f 32 plan9 LJMP 0(AX)
+66ff28|11223344556677885f5f5f5f5f 64 gnu ljmpw *(%rax)
+66ff28|11223344556677885f5f5f5f5f 64 intel jmp far dword ptr [rax]
+66ff28|11223344556677885f5f5f5f5f 64 plan9 LJMP 0(AX)
+66ff30|11223344556677885f5f5f5f5f 32 intel push word ptr [eax]
+66ff30|11223344556677885f5f5f5f5f 32 plan9 PUSHW 0(AX)
+66ff30|11223344556677885f5f5f5f5f 64 gnu pushw (%rax)
+66ff30|11223344556677885f5f5f5f5f 64 intel push word ptr [rax]
+66ff30|11223344556677885f5f5f5f5f 64 plan9 PUSHW 0(AX)
+66|9a11223344556677885f5f5f5f5f5f 64 gnu data16
+66|9a11223344556677885f5f5f5f5f5f 64 intel data16
+66|9a11223344556677885f5f5f5f5f5f 64 plan9 Op(0)
+66|c411223344556677885f5f5f5f5f5f 64 gnu data16
+66|c411223344556677885f5f5f5f5f5f 64 intel data16
+66|c411223344556677885f5f5f5f5f5f 64 plan9 Op(0)
+66|c511223344556677885f5f5f5f5f5f 64 gnu data16
+66|c511223344556677885f5f5f5f5f5f 64 intel data16
+66|c511223344556677885f5f5f5f5f5f 64 plan9 Op(0)
+66|d411223344556677885f5f5f5f5f5f 64 gnu data16
+66|d411223344556677885f5f5f5f5f5f 64 intel data16
+66|d411223344556677885f5f5f5f5f5f 64 plan9 Op(0)
+66|ea11223344556677885f5f5f5f5f5f 64 gnu data16
+66|ea11223344556677885f5f5f5f5f5f 64 intel data16
+66|ea11223344556677885f5f5f5f5f5f 64 plan9 Op(0)
+676c|11223344556677885f5f5f5f5f5f 32 intel addr16 insb
+676c|11223344556677885f5f5f5f5f5f 32 plan9 INSB DX, ES:0(DI)
+676c|11223344556677885f5f5f5f5f5f 64 gnu insb (%dx),%es:(%edi)
+676c|11223344556677885f5f5f5f5f5f 64 intel addr32 insb
+676c|11223344556677885f5f5f5f5f5f 64 plan9 INSB DX, ES:0(DI)
+67d7|11223344556677885f5f5f5f5f5f 32 intel addr16 xlat
+67d7|11223344556677885f5f5f5f5f5f 32 plan9 XLATB DS:0(BX)
+67d7|11223344556677885f5f5f5f5f5f 64 gnu xlat %ds:(%ebx)
+67d7|11223344556677885f5f5f5f5f5f 64 intel addr32 xlat
+67d7|11223344556677885f5f5f5f5f5f 64 plan9 XLATB DS:0(BX)
+67e311|223344556677885f5f5f5f5f5f 32 intel addr16 jcxz .+0x11
+67e311|223344556677885f5f5f5f5f5f 32 plan9 JCXZ .+17
+67e311|223344556677885f5f5f5f5f5f 64 gnu jecxz .+0x11
+67e311|223344556677885f5f5f5f5f5f 64 intel addr32 jecxz .+0x11
+67e311|223344556677885f5f5f5f5f5f 64 plan9 JECXZ .+17
+6811223344|556677885f5f5f5f5f5f5f 32 intel push 0x44332211
+6811223344|556677885f5f5f5f5f5f5f 32 plan9 PUSHL $0x44332211
+6811223344|556677885f5f5f5f5f5f5f 64 gnu pushq $0x44332211
+6811223344|556677885f5f5f5f5f5f5f 64 intel push 0x44332211
+6811223344|556677885f5f5f5f5f5f5f 64 plan9 PUSHL $0x44332211
+691122334455|6677885f5f5f5f5f5f5f 32 intel imul edx, dword ptr [ecx], 0x55443322
+691122334455|6677885f5f5f5f5f5f5f 32 plan9 IMULL $0x55443322, 0(CX), DX
+691122334455|6677885f5f5f5f5f5f5f 64 gnu imul $0x55443322,(%rcx),%edx
+691122334455|6677885f5f5f5f5f5f5f 64 intel imul edx, dword ptr [rcx], 0x55443322
+691122334455|6677885f5f5f5f5f5f5f 64 plan9 IMULL $0x55443322, 0(CX), DX
+6a11|223344556677885f5f5f5f5f5f5f 32 intel push 0x11
+6a11|223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL $0x11
+6a11|223344556677885f5f5f5f5f5f5f 64 gnu pushq $0x11
+6a11|223344556677885f5f5f5f5f5f5f 64 intel push 0x11
+6a11|223344556677885f5f5f5f5f5f5f 64 plan9 PUSHL $0x11
+6b1122|3344556677885f5f5f5f5f5f5f 32 intel imul edx, dword ptr [ecx], 0x22
+6b1122|3344556677885f5f5f5f5f5f5f 32 plan9 IMULL $0x22, 0(CX), DX
+6b1122|3344556677885f5f5f5f5f5f5f 64 gnu imul $0x22,(%rcx),%edx
+6b1122|3344556677885f5f5f5f5f5f5f 64 intel imul edx, dword ptr [rcx], 0x22
+6b1122|3344556677885f5f5f5f5f5f5f 64 plan9 IMULL $0x22, 0(CX), DX
+6d|11223344556677885f5f5f5f5f5f5f 32 intel insd
+6d|11223344556677885f5f5f5f5f5f5f 32 plan9 INSD DX, ES:0(DI)
+6d|11223344556677885f5f5f5f5f5f5f 64 gnu insl (%dx),%es:(%rdi)
+6d|11223344556677885f5f5f5f5f5f5f 64 intel insd
+6d|11223344556677885f5f5f5f5f5f5f 64 plan9 INSD DX, ES:0(DI)
+6f|11223344556677885f5f5f5f5f5f5f 32 intel outsd
+6f|11223344556677885f5f5f5f5f5f5f 32 plan9 OUTSD DS:0(SI), DX
+6f|11223344556677885f5f5f5f5f5f5f 64 gnu outsl %ds:(%rsi),(%dx)
+6f|11223344556677885f5f5f5f5f5f5f 64 intel outsd
+6f|11223344556677885f5f5f5f5f5f5f 64 plan9 OUTSD DS:0(SI), DX
+7111|223344556677885f5f5f5f5f5f5f 32 intel jno .+0x11
+7111|223344556677885f5f5f5f5f5f5f 32 plan9 JNO .+17
+7111|223344556677885f5f5f5f5f5f5f 64 gnu jno .+0x11
+7111|223344556677885f5f5f5f5f5f5f 64 intel jno .+0x11
+7111|223344556677885f5f5f5f5f5f5f 64 plan9 JNO .+17
+7211|223344556677885f5f5f5f5f5f5f 32 intel jb .+0x11
+7211|223344556677885f5f5f5f5f5f5f 32 plan9 JB .+17
+7211|223344556677885f5f5f5f5f5f5f 64 gnu jb .+0x11
+7211|223344556677885f5f5f5f5f5f5f 64 intel jb .+0x11
+7211|223344556677885f5f5f5f5f5f5f 64 plan9 JB .+17
+7311|223344556677885f5f5f5f5f5f5f 32 intel jnb .+0x11
+7311|223344556677885f5f5f5f5f5f5f 32 plan9 JAE .+17
+7311|223344556677885f5f5f5f5f5f5f 64 gnu jae .+0x11
+7311|223344556677885f5f5f5f5f5f5f 64 intel jnb .+0x11
+7311|223344556677885f5f5f5f5f5f5f 64 plan9 JAE .+17
+7411|223344556677885f5f5f5f5f5f5f 32 intel jz .+0x11
+7411|223344556677885f5f5f5f5f5f5f 32 plan9 JE .+17
+7411|223344556677885f5f5f5f5f5f5f 64 gnu je .+0x11
+7411|223344556677885f5f5f5f5f5f5f 64 intel jz .+0x11
+7411|223344556677885f5f5f5f5f5f5f 64 plan9 JE .+17
+7511|223344556677885f5f5f5f5f5f5f 32 intel jnz .+0x11
+7511|223344556677885f5f5f5f5f5f5f 32 plan9 JNE .+17
+7511|223344556677885f5f5f5f5f5f5f 64 gnu jne .+0x11
+7511|223344556677885f5f5f5f5f5f5f 64 intel jnz .+0x11
+7511|223344556677885f5f5f5f5f5f5f 64 plan9 JNE .+17
+7611|223344556677885f5f5f5f5f5f5f 32 intel jbe .+0x11
+7611|223344556677885f5f5f5f5f5f5f 32 plan9 JBE .+17
+7611|223344556677885f5f5f5f5f5f5f 64 gnu jbe .+0x11
+7611|223344556677885f5f5f5f5f5f5f 64 intel jbe .+0x11
+7611|223344556677885f5f5f5f5f5f5f 64 plan9 JBE .+17
+7711|223344556677885f5f5f5f5f5f5f 32 intel jnbe .+0x11
+7711|223344556677885f5f5f5f5f5f5f 32 plan9 JA .+17
+7711|223344556677885f5f5f5f5f5f5f 64 gnu ja .+0x11
+7711|223344556677885f5f5f5f5f5f5f 64 intel jnbe .+0x11
+7711|223344556677885f5f5f5f5f5f5f 64 plan9 JA .+17
+7811|223344556677885f5f5f5f5f5f5f 32 intel js .+0x11
+7811|223344556677885f5f5f5f5f5f5f 32 plan9 JS .+17
+7811|223344556677885f5f5f5f5f5f5f 64 gnu js .+0x11
+7811|223344556677885f5f5f5f5f5f5f 64 intel js .+0x11
+7811|223344556677885f5f5f5f5f5f5f 64 plan9 JS .+17
+7911|223344556677885f5f5f5f5f5f5f 32 intel jns .+0x11
+7911|223344556677885f5f5f5f5f5f5f 32 plan9 JNS .+17
+7911|223344556677885f5f5f5f5f5f5f 64 gnu jns .+0x11
+7911|223344556677885f5f5f5f5f5f5f 64 intel jns .+0x11
+7911|223344556677885f5f5f5f5f5f5f 64 plan9 JNS .+17
+7a11|223344556677885f5f5f5f5f5f5f 32 intel jp .+0x11
+7a11|223344556677885f5f5f5f5f5f5f 32 plan9 JP .+17
+7a11|223344556677885f5f5f5f5f5f5f 64 gnu jp .+0x11
+7a11|223344556677885f5f5f5f5f5f5f 64 intel jp .+0x11
+7a11|223344556677885f5f5f5f5f5f5f 64 plan9 JP .+17
+7b11|223344556677885f5f5f5f5f5f5f 32 intel jnp .+0x11
+7b11|223344556677885f5f5f5f5f5f5f 32 plan9 JNP .+17
+7b11|223344556677885f5f5f5f5f5f5f 64 gnu jnp .+0x11
+7b11|223344556677885f5f5f5f5f5f5f 64 intel jnp .+0x11
+7b11|223344556677885f5f5f5f5f5f5f 64 plan9 JNP .+17
+7c11|223344556677885f5f5f5f5f5f5f 32 intel jl .+0x11
+7c11|223344556677885f5f5f5f5f5f5f 32 plan9 JL .+17
+7c11|223344556677885f5f5f5f5f5f5f 64 gnu jl .+0x11
+7c11|223344556677885f5f5f5f5f5f5f 64 intel jl .+0x11
+7c11|223344556677885f5f5f5f5f5f5f 64 plan9 JL .+17
+7d11|223344556677885f5f5f5f5f5f5f 32 intel jnl .+0x11
+7d11|223344556677885f5f5f5f5f5f5f 32 plan9 JGE .+17
+7d11|223344556677885f5f5f5f5f5f5f 64 gnu jge .+0x11
+7d11|223344556677885f5f5f5f5f5f5f 64 intel jnl .+0x11
+7d11|223344556677885f5f5f5f5f5f5f 64 plan9 JGE .+17
+7e11|223344556677885f5f5f5f5f5f5f 32 intel jle .+0x11
+7e11|223344556677885f5f5f5f5f5f5f 32 plan9 JLE .+17
+7e11|223344556677885f5f5f5f5f5f5f 64 gnu jle .+0x11
+7e11|223344556677885f5f5f5f5f5f5f 64 intel jle .+0x11
+7e11|223344556677885f5f5f5f5f5f5f 64 plan9 JLE .+17
+7f11|223344556677885f5f5f5f5f5f5f 32 intel jnle .+0x11
+7f11|223344556677885f5f5f5f5f5f5f 32 plan9 JG .+17
+7f11|223344556677885f5f5f5f5f5f5f 64 gnu jg .+0x11
+7f11|223344556677885f5f5f5f5f5f5f 64 intel jnle .+0x11
+7f11|223344556677885f5f5f5f5f5f5f 64 plan9 JG .+17
+800011|223344556677885f5f5f5f5f5f 32 intel add byte ptr [eax], 0x11
+800011|223344556677885f5f5f5f5f5f 32 plan9 ADDL $0x11, 0(AX)
+800011|223344556677885f5f5f5f5f5f 64 gnu addb $0x11,(%rax)
+800011|223344556677885f5f5f5f5f5f 64 intel add byte ptr [rax], 0x11
+800011|223344556677885f5f5f5f5f5f 64 plan9 ADDL $0x11, 0(AX)
+800811|223344556677885f5f5f5f5f5f 32 intel or byte ptr [eax], 0x11
+800811|223344556677885f5f5f5f5f5f 32 plan9 ORL $0x11, 0(AX)
+800811|223344556677885f5f5f5f5f5f 64 gnu orb $0x11,(%rax)
+800811|223344556677885f5f5f5f5f5f 64 intel or byte ptr [rax], 0x11
+800811|223344556677885f5f5f5f5f5f 64 plan9 ORL $0x11, 0(AX)
+801122|3344556677885f5f5f5f5f5f5f 32 intel adc byte ptr [ecx], 0x22
+801122|3344556677885f5f5f5f5f5f5f 32 plan9 ADCL $0x22, 0(CX)
+801122|3344556677885f5f5f5f5f5f5f 64 gnu adcb $0x22,(%rcx)
+801122|3344556677885f5f5f5f5f5f5f 64 intel adc byte ptr [rcx], 0x22
+801122|3344556677885f5f5f5f5f5f5f 64 plan9 ADCL $0x22, 0(CX)
+801811|223344556677885f5f5f5f5f5f 32 intel sbb byte ptr [eax], 0x11
+801811|223344556677885f5f5f5f5f5f 32 plan9 SBBL $0x11, 0(AX)
+801811|223344556677885f5f5f5f5f5f 64 gnu sbbb $0x11,(%rax)
+801811|223344556677885f5f5f5f5f5f 64 intel sbb byte ptr [rax], 0x11
+801811|223344556677885f5f5f5f5f5f 64 plan9 SBBL $0x11, 0(AX)
+802011|223344556677885f5f5f5f5f5f 32 intel and byte ptr [eax], 0x11
+802011|223344556677885f5f5f5f5f5f 32 plan9 ANDL $0x11, 0(AX)
+802011|223344556677885f5f5f5f5f5f 64 gnu andb $0x11,(%rax)
+802011|223344556677885f5f5f5f5f5f 64 intel and byte ptr [rax], 0x11
+802011|223344556677885f5f5f5f5f5f 64 plan9 ANDL $0x11, 0(AX)
+802811|223344556677885f5f5f5f5f5f 32 intel sub byte ptr [eax], 0x11
+802811|223344556677885f5f5f5f5f5f 32 plan9 SUBL $0x11, 0(AX)
+802811|223344556677885f5f5f5f5f5f 64 gnu subb $0x11,(%rax)
+802811|223344556677885f5f5f5f5f5f 64 intel sub byte ptr [rax], 0x11
+802811|223344556677885f5f5f5f5f5f 64 plan9 SUBL $0x11, 0(AX)
+803011|223344556677885f5f5f5f5f5f 32 intel xor byte ptr [eax], 0x11
+803011|223344556677885f5f5f5f5f5f 32 plan9 XORL $0x11, 0(AX)
+803011|223344556677885f5f5f5f5f5f 64 gnu xorb $0x11,(%rax)
+803011|223344556677885f5f5f5f5f5f 64 intel xor byte ptr [rax], 0x11
+803011|223344556677885f5f5f5f5f5f 64 plan9 XORL $0x11, 0(AX)
+803811|223344556677885f5f5f5f5f5f 32 intel cmp byte ptr [eax], 0x11
+803811|223344556677885f5f5f5f5f5f 32 plan9 CMPL $0x11, 0(AX)
+803811|223344556677885f5f5f5f5f5f 64 gnu cmpb $0x11,(%rax)
+803811|223344556677885f5f5f5f5f5f 64 intel cmp byte ptr [rax], 0x11
+803811|223344556677885f5f5f5f5f5f 64 plan9 CMPL $0x11, 0(AX)
+810011223344|556677885f5f5f5f5f5f 32 intel add dword ptr [eax], 0x44332211
+810011223344|556677885f5f5f5f5f5f 32 plan9 ADDL $0x44332211, 0(AX)
+810011223344|556677885f5f5f5f5f5f 64 gnu addl $0x44332211,(%rax)
+810011223344|556677885f5f5f5f5f5f 64 intel add dword ptr [rax], 0x44332211
+810011223344|556677885f5f5f5f5f5f 64 plan9 ADDL $0x44332211, 0(AX)
+810811223344|556677885f5f5f5f5f5f 32 intel or dword ptr [eax], 0x44332211
+810811223344|556677885f5f5f5f5f5f 32 plan9 ORL $0x44332211, 0(AX)
+810811223344|556677885f5f5f5f5f5f 64 gnu orl $0x44332211,(%rax)
+810811223344|556677885f5f5f5f5f5f 64 intel or dword ptr [rax], 0x44332211
+810811223344|556677885f5f5f5f5f5f 64 plan9 ORL $0x44332211, 0(AX)
+811122334455|6677885f5f5f5f5f5f5f 32 intel adc dword ptr [ecx], 0x55443322
+811122334455|6677885f5f5f5f5f5f5f 32 plan9 ADCL $0x55443322, 0(CX)
+811122334455|6677885f5f5f5f5f5f5f 64 gnu adcl $0x55443322,(%rcx)
+811122334455|6677885f5f5f5f5f5f5f 64 intel adc dword ptr [rcx], 0x55443322
+811122334455|6677885f5f5f5f5f5f5f 64 plan9 ADCL $0x55443322, 0(CX)
+811811223344|556677885f5f5f5f5f5f 32 intel sbb dword ptr [eax], 0x44332211
+811811223344|556677885f5f5f5f5f5f 32 plan9 SBBL $0x44332211, 0(AX)
+811811223344|556677885f5f5f5f5f5f 64 gnu sbbl $0x44332211,(%rax)
+811811223344|556677885f5f5f5f5f5f 64 intel sbb dword ptr [rax], 0x44332211
+811811223344|556677885f5f5f5f5f5f 64 plan9 SBBL $0x44332211, 0(AX)
+812011223344|556677885f5f5f5f5f5f 32 intel and dword ptr [eax], 0x44332211
+812011223344|556677885f5f5f5f5f5f 32 plan9 ANDL $0x44332211, 0(AX)
+812011223344|556677885f5f5f5f5f5f 64 gnu andl $0x44332211,(%rax)
+812011223344|556677885f5f5f5f5f5f 64 intel and dword ptr [rax], 0x44332211
+812011223344|556677885f5f5f5f5f5f 64 plan9 ANDL $0x44332211, 0(AX)
+812811223344|556677885f5f5f5f5f5f 32 intel sub dword ptr [eax], 0x44332211
+812811223344|556677885f5f5f5f5f5f 32 plan9 SUBL $0x44332211, 0(AX)
+812811223344|556677885f5f5f5f5f5f 64 gnu subl $0x44332211,(%rax)
+812811223344|556677885f5f5f5f5f5f 64 intel sub dword ptr [rax], 0x44332211
+812811223344|556677885f5f5f5f5f5f 64 plan9 SUBL $0x44332211, 0(AX)
+813011223344|556677885f5f5f5f5f5f 32 intel xor dword ptr [eax], 0x44332211
+813011223344|556677885f5f5f5f5f5f 32 plan9 XORL $0x44332211, 0(AX)
+813011223344|556677885f5f5f5f5f5f 64 gnu xorl $0x44332211,(%rax)
+813011223344|556677885f5f5f5f5f5f 64 intel xor dword ptr [rax], 0x44332211
+813011223344|556677885f5f5f5f5f5f 64 plan9 XORL $0x44332211, 0(AX)
+813811223344|556677885f5f5f5f5f5f 32 intel cmp dword ptr [eax], 0x44332211
+813811223344|556677885f5f5f5f5f5f 32 plan9 CMPL $0x44332211, 0(AX)
+813811223344|556677885f5f5f5f5f5f 64 gnu cmpl $0x44332211,(%rax)
+813811223344|556677885f5f5f5f5f5f 64 intel cmp dword ptr [rax], 0x44332211
+813811223344|556677885f5f5f5f5f5f 64 plan9 CMPL $0x44332211, 0(AX)
+830011|223344556677885f5f5f5f5f5f 32 intel add dword ptr [eax], 0x11
+830011|223344556677885f5f5f5f5f5f 32 plan9 ADDL $0x11, 0(AX)
+830011|223344556677885f5f5f5f5f5f 64 gnu addl $0x11,(%rax)
+830011|223344556677885f5f5f5f5f5f 64 intel add dword ptr [rax], 0x11
+830011|223344556677885f5f5f5f5f5f 64 plan9 ADDL $0x11, 0(AX)
+830811|223344556677885f5f5f5f5f5f 32 intel or dword ptr [eax], 0x11
+830811|223344556677885f5f5f5f5f5f 32 plan9 ORL $0x11, 0(AX)
+830811|223344556677885f5f5f5f5f5f 64 gnu orl $0x11,(%rax)
+830811|223344556677885f5f5f5f5f5f 64 intel or dword ptr [rax], 0x11
+830811|223344556677885f5f5f5f5f5f 64 plan9 ORL $0x11, 0(AX)
+831122|3344556677885f5f5f5f5f5f5f 32 intel adc dword ptr [ecx], 0x22
+831122|3344556677885f5f5f5f5f5f5f 32 plan9 ADCL $0x22, 0(CX)
+831122|3344556677885f5f5f5f5f5f5f 64 gnu adcl $0x22,(%rcx)
+831122|3344556677885f5f5f5f5f5f5f 64 intel adc dword ptr [rcx], 0x22
+831122|3344556677885f5f5f5f5f5f5f 64 plan9 ADCL $0x22, 0(CX)
+831811|223344556677885f5f5f5f5f5f 32 intel sbb dword ptr [eax], 0x11
+831811|223344556677885f5f5f5f5f5f 32 plan9 SBBL $0x11, 0(AX)
+831811|223344556677885f5f5f5f5f5f 64 gnu sbbl $0x11,(%rax)
+831811|223344556677885f5f5f5f5f5f 64 intel sbb dword ptr [rax], 0x11
+831811|223344556677885f5f5f5f5f5f 64 plan9 SBBL $0x11, 0(AX)
+832011|223344556677885f5f5f5f5f5f 32 intel and dword ptr [eax], 0x11
+832011|223344556677885f5f5f5f5f5f 32 plan9 ANDL $0x11, 0(AX)
+832011|223344556677885f5f5f5f5f5f 64 gnu andl $0x11,(%rax)
+832011|223344556677885f5f5f5f5f5f 64 intel and dword ptr [rax], 0x11
+832011|223344556677885f5f5f5f5f5f 64 plan9 ANDL $0x11, 0(AX)
+832811|223344556677885f5f5f5f5f5f 32 intel sub dword ptr [eax], 0x11
+832811|223344556677885f5f5f5f5f5f 32 plan9 SUBL $0x11, 0(AX)
+832811|223344556677885f5f5f5f5f5f 64 gnu subl $0x11,(%rax)
+832811|223344556677885f5f5f5f5f5f 64 intel sub dword ptr [rax], 0x11
+832811|223344556677885f5f5f5f5f5f 64 plan9 SUBL $0x11, 0(AX)
+833011|223344556677885f5f5f5f5f5f 32 intel xor dword ptr [eax], 0x11
+833011|223344556677885f5f5f5f5f5f 32 plan9 XORL $0x11, 0(AX)
+833011|223344556677885f5f5f5f5f5f 64 gnu xorl $0x11,(%rax)
+833011|223344556677885f5f5f5f5f5f 64 intel xor dword ptr [rax], 0x11
+833011|223344556677885f5f5f5f5f5f 64 plan9 XORL $0x11, 0(AX)
+833811|223344556677885f5f5f5f5f5f 32 intel cmp dword ptr [eax], 0x11
+833811|223344556677885f5f5f5f5f5f 32 plan9 CMPL $0x11, 0(AX)
+833811|223344556677885f5f5f5f5f5f 64 gnu cmpl $0x11,(%rax)
+833811|223344556677885f5f5f5f5f5f 64 intel cmp dword ptr [rax], 0x11
+833811|223344556677885f5f5f5f5f5f 64 plan9 CMPL $0x11, 0(AX)
+8411|223344556677885f5f5f5f5f5f5f 32 intel test byte ptr [ecx], dl
+8411|223344556677885f5f5f5f5f5f5f 32 plan9 TESTL DL, 0(CX)
+8411|223344556677885f5f5f5f5f5f5f 64 gnu test %dl,(%rcx)
+8411|223344556677885f5f5f5f5f5f5f 64 intel test byte ptr [rcx], dl
+8411|223344556677885f5f5f5f5f5f5f 64 plan9 TESTL DL, 0(CX)
+8511|223344556677885f5f5f5f5f5f5f 32 intel test dword ptr [ecx], edx
+8511|223344556677885f5f5f5f5f5f5f 32 plan9 TESTL DX, 0(CX)
+8511|223344556677885f5f5f5f5f5f5f 64 gnu test %edx,(%rcx)
+8511|223344556677885f5f5f5f5f5f5f 64 intel test dword ptr [rcx], edx
+8511|223344556677885f5f5f5f5f5f5f 64 plan9 TESTL DX, 0(CX)
+8611|223344556677885f5f5f5f5f5f5f 32 intel xchg byte ptr [ecx], dl
+8611|223344556677885f5f5f5f5f5f5f 32 plan9 XCHGL DL, 0(CX)
+8611|223344556677885f5f5f5f5f5f5f 64 gnu xchg %dl,(%rcx)
+8611|223344556677885f5f5f5f5f5f5f 64 intel xchg byte ptr [rcx], dl
+8611|223344556677885f5f5f5f5f5f5f 64 plan9 XCHGL DL, 0(CX)
+8711|223344556677885f5f5f5f5f5f5f 32 intel xchg dword ptr [ecx], edx
+8711|223344556677885f5f5f5f5f5f5f 32 plan9 XCHGL DX, 0(CX)
+8711|223344556677885f5f5f5f5f5f5f 64 gnu xchg %edx,(%rcx)
+8711|223344556677885f5f5f5f5f5f5f 64 intel xchg dword ptr [rcx], edx
+8711|223344556677885f5f5f5f5f5f5f 64 plan9 XCHGL DX, 0(CX)
+8811|223344556677885f5f5f5f5f5f5f 32 intel mov byte ptr [ecx], dl
+8811|223344556677885f5f5f5f5f5f5f 32 plan9 MOVL DL, 0(CX)
+8811|223344556677885f5f5f5f5f5f5f 64 gnu mov %dl,(%rcx)
+8811|223344556677885f5f5f5f5f5f5f 64 intel mov byte ptr [rcx], dl
+8811|223344556677885f5f5f5f5f5f5f 64 plan9 MOVL DL, 0(CX)
+8911|223344556677885f5f5f5f5f5f5f 32 intel mov dword ptr [ecx], edx
+8911|223344556677885f5f5f5f5f5f5f 32 plan9 MOVL DX, 0(CX)
+8911|223344556677885f5f5f5f5f5f5f 64 gnu mov %edx,(%rcx)
+8911|223344556677885f5f5f5f5f5f5f 64 intel mov dword ptr [rcx], edx
+8911|223344556677885f5f5f5f5f5f5f 64 plan9 MOVL DX, 0(CX)
+8a11|223344556677885f5f5f5f5f5f5f 32 intel mov dl, byte ptr [ecx]
+8a11|223344556677885f5f5f5f5f5f5f 32 plan9 MOVL 0(CX), DL
+8a11|223344556677885f5f5f5f5f5f5f 64 gnu mov (%rcx),%dl
+8a11|223344556677885f5f5f5f5f5f5f 64 intel mov dl, byte ptr [rcx]
+8a11|223344556677885f5f5f5f5f5f5f 64 plan9 MOVL 0(CX), DL
+8b11|223344556677885f5f5f5f5f5f5f 32 intel mov edx, dword ptr [ecx]
+8b11|223344556677885f5f5f5f5f5f5f 32 plan9 MOVL 0(CX), DX
+8b11|223344556677885f5f5f5f5f5f5f 64 gnu mov (%rcx),%edx
+8b11|223344556677885f5f5f5f5f5f5f 64 intel mov edx, dword ptr [rcx]
+8b11|223344556677885f5f5f5f5f5f5f 64 plan9 MOVL 0(CX), DX
+8c11|223344556677885f5f5f5f5f5f5f 32 intel mov word ptr [ecx], ss
+8c11|223344556677885f5f5f5f5f5f5f 32 plan9 MOVL SS, 0(CX)
+8c11|223344556677885f5f5f5f5f5f5f 64 gnu mov %ss,(%rcx)
+8c11|223344556677885f5f5f5f5f5f5f 64 intel mov word ptr [rcx], ss
+8c11|223344556677885f5f5f5f5f5f5f 64 plan9 MOVL SS, 0(CX)
+8d11|223344556677885f5f5f5f5f5f5f 32 intel lea edx, ptr [ecx]
+8d11|223344556677885f5f5f5f5f5f5f 32 plan9 LEAL 0(CX), DX
+8d11|223344556677885f5f5f5f5f5f5f 64 gnu lea (%rcx),%edx
+8d11|223344556677885f5f5f5f5f5f5f 64 intel lea edx, ptr [rcx]
+8d11|223344556677885f5f5f5f5f5f5f 64 plan9 LEAL 0(CX), DX
+8e11|223344556677885f5f5f5f5f5f5f 32 intel mov ss, word ptr [ecx]
+8e11|223344556677885f5f5f5f5f5f5f 32 plan9 MOVL 0(CX), SS
+8e11|223344556677885f5f5f5f5f5f5f 64 gnu mov (%rcx),%ss
+8e11|223344556677885f5f5f5f5f5f5f 64 intel mov ss, word ptr [rcx]
+8e11|223344556677885f5f5f5f5f5f5f 64 plan9 MOVL 0(CX), SS
+8f00|11223344556677885f5f5f5f5f5f 32 intel pop dword ptr [eax]
+8f00|11223344556677885f5f5f5f5f5f 32 plan9 POPL 0(AX)
+8f00|11223344556677885f5f5f5f5f5f 64 gnu popq (%rax)
+8f00|11223344556677885f5f5f5f5f5f 64 intel pop qword ptr [rax]
+8f00|11223344556677885f5f5f5f5f5f 64 plan9 POPL 0(AX)
+91|11223344556677885f5f5f5f5f5f5f 32 intel xchg ecx, eax
+91|11223344556677885f5f5f5f5f5f5f 32 plan9 XCHGL AX, CX
+91|11223344556677885f5f5f5f5f5f5f 64 intel xchg ecx, eax
+91|11223344556677885f5f5f5f5f5f5f 64 plan9 XCHGL AX, CX
+98|11223344556677885f5f5f5f5f5f5f 32 intel cwde
+98|11223344556677885f5f5f5f5f5f5f 32 plan9 CWDE
+98|11223344556677885f5f5f5f5f5f5f 64 gnu cwtl
+98|11223344556677885f5f5f5f5f5f5f 64 intel cwde
+98|11223344556677885f5f5f5f5f5f5f 64 plan9 CWDE
+99|11223344556677885f5f5f5f5f5f5f 32 intel cdq
+99|11223344556677885f5f5f5f5f5f5f 32 plan9 CDQ
+99|11223344556677885f5f5f5f5f5f5f 64 gnu cltd
+99|11223344556677885f5f5f5f5f5f5f 64 intel cdq
+99|11223344556677885f5f5f5f5f5f5f 64 plan9 CDQ
+9a112233445566|77885f5f5f5f5f5f5f 32 intel call far 0x44332211, 0x6655
+9a112233445566|77885f5f5f5f5f5f5f 32 plan9 LCALL $0x44332211, $0x6655
+9b|11223344556677885f5f5f5f5f5f5f 32 intel fwait
+9b|11223344556677885f5f5f5f5f5f5f 32 plan9 FWAIT
+9b|11223344556677885f5f5f5f5f5f5f 64 gnu fwait
+9b|11223344556677885f5f5f5f5f5f5f 64 intel fwait
+9b|11223344556677885f5f5f5f5f5f5f 64 plan9 FWAIT
+9c|11223344556677885f5f5f5f5f5f5f 32 intel pushfd
+9c|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHFD
+9c|11223344556677885f5f5f5f5f5f5f 64 gnu pushfq
+9c|11223344556677885f5f5f5f5f5f5f 64 intel pushfq
+9c|11223344556677885f5f5f5f5f5f5f 64 plan9 PUSHFQ
+9d|11223344556677885f5f5f5f5f5f5f 32 intel popfd
+9d|11223344556677885f5f5f5f5f5f5f 32 plan9 POPFD
+9d|11223344556677885f5f5f5f5f5f5f 64 gnu popfq
+9d|11223344556677885f5f5f5f5f5f5f 64 intel popfq
+9d|11223344556677885f5f5f5f5f5f5f 64 plan9 POPFQ
+9e|11223344556677885f5f5f5f5f5f5f 32 intel sahf
+9e|11223344556677885f5f5f5f5f5f5f 32 plan9 SAHF
+9e|11223344556677885f5f5f5f5f5f5f 64 gnu sahf
+9e|11223344556677885f5f5f5f5f5f5f 64 intel sahf
+9e|11223344556677885f5f5f5f5f5f5f 64 plan9 SAHF
+9f|11223344556677885f5f5f5f5f5f5f 32 intel lahf
+9f|11223344556677885f5f5f5f5f5f5f 32 plan9 LAHF
+9f|11223344556677885f5f5f5f5f5f5f 64 gnu lahf
+9f|11223344556677885f5f5f5f5f5f5f 64 intel lahf
+9f|11223344556677885f5f5f5f5f5f5f 64 plan9 LAHF
+a11122334455667788|5f5f5f5f5f5f5f 64 gnu mov -0x778899aabbccddef,%eax
+a11122334455667788|5f5f5f5f5f5f5f 64 intel mov eax, dword ptr [0x8877665544332211]
+a11122334455667788|5f5f5f5f5f5f5f 64 plan9 MOVL -0x778899aabbccddef, AX
+a111223344|556677885f5f5f5f5f5f5f 32 intel mov eax, dword ptr [0x44332211]
+a111223344|556677885f5f5f5f5f5f5f 32 plan9 MOVL 0x44332211, AX
+a21122334455667788|5f5f5f5f5f5f5f 64 gnu mov %al,-0x778899aabbccddef
+a21122334455667788|5f5f5f5f5f5f5f 64 intel mov byte ptr [0x8877665544332211], al
+a21122334455667788|5f5f5f5f5f5f5f 64 plan9 MOVL AL, -0x778899aabbccddef
+a211223344|556677885f5f5f5f5f5f5f 32 intel mov byte ptr [0x44332211], al
+a211223344|556677885f5f5f5f5f5f5f 32 plan9 MOVL AL, 0x44332211
+a31122334455667788|5f5f5f5f5f5f5f 64 gnu mov %eax,-0x778899aabbccddef
+a31122334455667788|5f5f5f5f5f5f5f 64 intel mov dword ptr [0x8877665544332211], eax
+a31122334455667788|5f5f5f5f5f5f5f 64 plan9 MOVL AX, -0x778899aabbccddef
+a311223344|556677885f5f5f5f5f5f5f 32 intel mov dword ptr [0x44332211], eax
+a311223344|556677885f5f5f5f5f5f5f 32 plan9 MOVL AX, 0x44332211
+a4|11223344556677885f5f5f5f5f5f5f 32 intel movsb byte ptr [edi], byte ptr [esi]
+a4|11223344556677885f5f5f5f5f5f5f 32 plan9 MOVSB DS:0(SI), ES:0(DI)
+a4|11223344556677885f5f5f5f5f5f5f 64 gnu movsb %ds:(%rsi),%es:(%rdi)
+a4|11223344556677885f5f5f5f5f5f5f 64 intel movsb byte ptr [rdi], byte ptr [rsi]
+a4|11223344556677885f5f5f5f5f5f5f 64 plan9 MOVSB DS:0(SI), ES:0(DI)
+a5|11223344556677885f5f5f5f5f5f5f 32 intel movsd dword ptr [edi], dword ptr [esi]
+a5|11223344556677885f5f5f5f5f5f5f 32 plan9 MOVSD DS:0(SI), ES:0(DI)
+a5|11223344556677885f5f5f5f5f5f5f 64 gnu movsl %ds:(%rsi),%es:(%rdi)
+a5|11223344556677885f5f5f5f5f5f5f 64 intel movsd dword ptr [rdi], dword ptr [rsi]
+a5|11223344556677885f5f5f5f5f5f5f 64 plan9 MOVSD DS:0(SI), ES:0(DI)
+a6|11223344556677885f5f5f5f5f5f5f 32 intel cmpsb byte ptr [esi], byte ptr [edi]
+a6|11223344556677885f5f5f5f5f5f5f 32 plan9 CMPSB ES:0(DI), DS:0(SI)
+a6|11223344556677885f5f5f5f5f5f5f 64 gnu cmpsb %es:(%rdi),%ds:(%rsi)
+a6|11223344556677885f5f5f5f5f5f5f 64 intel cmpsb byte ptr [rsi], byte ptr [rdi]
+a6|11223344556677885f5f5f5f5f5f5f 64 plan9 CMPSB ES:0(DI), DS:0(SI)
+a7|11223344556677885f5f5f5f5f5f5f 32 intel cmpsd dword ptr [esi], dword ptr [edi]
+a7|11223344556677885f5f5f5f5f5f5f 32 plan9 CMPSD ES:0(DI), DS:0(SI)
+a7|11223344556677885f5f5f5f5f5f5f 64 gnu cmpsl %es:(%rdi),%ds:(%rsi)
+a7|11223344556677885f5f5f5f5f5f5f 64 intel cmpsd dword ptr [rsi], dword ptr [rdi]
+a7|11223344556677885f5f5f5f5f5f5f 64 plan9 CMPSD ES:0(DI), DS:0(SI)
+a811|223344556677885f5f5f5f5f5f5f 32 intel test al, 0x11
+a811|223344556677885f5f5f5f5f5f5f 32 plan9 TESTL $0x11, AL
+a811|223344556677885f5f5f5f5f5f5f 64 gnu test $0x11,%al
+a811|223344556677885f5f5f5f5f5f5f 64 intel test al, 0x11
+a811|223344556677885f5f5f5f5f5f5f 64 plan9 TESTL $0x11, AL
+a911223344|556677885f5f5f5f5f5f5f 32 intel test eax, 0x44332211
+a911223344|556677885f5f5f5f5f5f5f 32 plan9 TESTL $0x44332211, AX
+a911223344|556677885f5f5f5f5f5f5f 64 gnu test $0x44332211,%eax
+a911223344|556677885f5f5f5f5f5f5f 64 intel test eax, 0x44332211
+a911223344|556677885f5f5f5f5f5f5f 64 plan9 TESTL $0x44332211, AX
+aa|11223344556677885f5f5f5f5f5f5f 32 intel stosb byte ptr [edi]
+aa|11223344556677885f5f5f5f5f5f5f 32 plan9 STOSB AL, ES:0(DI)
+aa|11223344556677885f5f5f5f5f5f5f 64 gnu stos %al,%es:(%rdi)
+aa|11223344556677885f5f5f5f5f5f5f 64 intel stosb byte ptr [rdi]
+aa|11223344556677885f5f5f5f5f5f5f 64 plan9 STOSB AL, ES:0(DI)
+ab|11223344556677885f5f5f5f5f5f5f 32 intel stosd dword ptr [edi]
+ab|11223344556677885f5f5f5f5f5f5f 32 plan9 STOSD AX, ES:0(DI)
+ab|11223344556677885f5f5f5f5f5f5f 64 gnu stos %eax,%es:(%rdi)
+ab|11223344556677885f5f5f5f5f5f5f 64 intel stosd dword ptr [rdi]
+ab|11223344556677885f5f5f5f5f5f5f 64 plan9 STOSD AX, ES:0(DI)
+ac|11223344556677885f5f5f5f5f5f5f 32 intel lodsb byte ptr [esi]
+ac|11223344556677885f5f5f5f5f5f5f 32 plan9 LODSB DS:0(SI), AL
+ac|11223344556677885f5f5f5f5f5f5f 64 gnu lods %ds:(%rsi),%al
+ac|11223344556677885f5f5f5f5f5f5f 64 intel lodsb byte ptr [rsi]
+ac|11223344556677885f5f5f5f5f5f5f 64 plan9 LODSB DS:0(SI), AL
+ad|11223344556677885f5f5f5f5f5f5f 32 intel lodsd dword ptr [esi]
+ad|11223344556677885f5f5f5f5f5f5f 32 plan9 LODSD DS:0(SI), AX
+ad|11223344556677885f5f5f5f5f5f5f 64 gnu lods %ds:(%rsi),%eax
+ad|11223344556677885f5f5f5f5f5f5f 64 intel lodsd dword ptr [rsi]
+ad|11223344556677885f5f5f5f5f5f5f 64 plan9 LODSD DS:0(SI), AX
+ae|11223344556677885f5f5f5f5f5f5f 32 intel scasb byte ptr [edi]
+ae|11223344556677885f5f5f5f5f5f5f 32 plan9 SCASB ES:0(DI), AL
+ae|11223344556677885f5f5f5f5f5f5f 64 gnu scas %es:(%rdi),%al
+ae|11223344556677885f5f5f5f5f5f5f 64 intel scasb byte ptr [rdi]
+ae|11223344556677885f5f5f5f5f5f5f 64 plan9 SCASB ES:0(DI), AL
+af|11223344556677885f5f5f5f5f5f5f 32 intel scasd dword ptr [edi]
+af|11223344556677885f5f5f5f5f5f5f 32 plan9 SCASD ES:0(DI), AX
+af|11223344556677885f5f5f5f5f5f5f 64 gnu scas %es:(%rdi),%eax
+af|11223344556677885f5f5f5f5f5f5f 64 intel scasd dword ptr [rdi]
+af|11223344556677885f5f5f5f5f5f5f 64 plan9 SCASD ES:0(DI), AX
+b011|223344556677885f5f5f5f5f5f5f 32 intel mov al, 0x11
+b011|223344556677885f5f5f5f5f5f5f 32 plan9 MOVL $0x11, AL
+b011|223344556677885f5f5f5f5f5f5f 64 gnu mov $0x11,%al
+b011|223344556677885f5f5f5f5f5f5f 64 intel mov al, 0x11
+b011|223344556677885f5f5f5f5f5f5f 64 plan9 MOVL $0x11, AL
+b811223344|556677885f5f5f5f5f5f5f 32 intel mov eax, 0x44332211
+b811223344|556677885f5f5f5f5f5f5f 32 plan9 MOVL $0x44332211, AX
+b811223344|556677885f5f5f5f5f5f5f 64 gnu mov $0x44332211,%eax
+b811223344|556677885f5f5f5f5f5f5f 64 intel mov eax, 0x44332211
+b811223344|556677885f5f5f5f5f5f5f 64 plan9 MOVL $0x44332211, AX
+c00011|223344556677885f5f5f5f5f5f 32 intel rol byte ptr [eax], 0x11
+c00011|223344556677885f5f5f5f5f5f 32 plan9 ROLL $0x11, 0(AX)
+c00011|223344556677885f5f5f5f5f5f 64 gnu rolb $0x11,(%rax)
+c00011|223344556677885f5f5f5f5f5f 64 intel rol byte ptr [rax], 0x11
+c00011|223344556677885f5f5f5f5f5f 64 plan9 ROLL $0x11, 0(AX)
+c00811|223344556677885f5f5f5f5f5f 32 intel ror byte ptr [eax], 0x11
+c00811|223344556677885f5f5f5f5f5f 32 plan9 RORL $0x11, 0(AX)
+c00811|223344556677885f5f5f5f5f5f 64 gnu rorb $0x11,(%rax)
+c00811|223344556677885f5f5f5f5f5f 64 intel ror byte ptr [rax], 0x11
+c00811|223344556677885f5f5f5f5f5f 64 plan9 RORL $0x11, 0(AX)
+c01122|3344556677885f5f5f5f5f5f5f 32 intel rcl byte ptr [ecx], 0x22
+c01122|3344556677885f5f5f5f5f5f5f 32 plan9 RCLL $0x22, 0(CX)
+c01122|3344556677885f5f5f5f5f5f5f 64 gnu rclb $0x22,(%rcx)
+c01122|3344556677885f5f5f5f5f5f5f 64 intel rcl byte ptr [rcx], 0x22
+c01122|3344556677885f5f5f5f5f5f5f 64 plan9 RCLL $0x22, 0(CX)
+c01811|223344556677885f5f5f5f5f5f 32 intel rcr byte ptr [eax], 0x11
+c01811|223344556677885f5f5f5f5f5f 32 plan9 RCRL $0x11, 0(AX)
+c01811|223344556677885f5f5f5f5f5f 64 gnu rcrb $0x11,(%rax)
+c01811|223344556677885f5f5f5f5f5f 64 intel rcr byte ptr [rax], 0x11
+c01811|223344556677885f5f5f5f5f5f 64 plan9 RCRL $0x11, 0(AX)
+c02011|223344556677885f5f5f5f5f5f 32 intel shl byte ptr [eax], 0x11
+c02011|223344556677885f5f5f5f5f5f 32 plan9 SHLL $0x11, 0(AX)
+c02011|223344556677885f5f5f5f5f5f 64 gnu shlb $0x11,(%rax)
+c02011|223344556677885f5f5f5f5f5f 64 intel shl byte ptr [rax], 0x11
+c02011|223344556677885f5f5f5f5f5f 64 plan9 SHLL $0x11, 0(AX)
+c02811|223344556677885f5f5f5f5f5f 32 intel shr byte ptr [eax], 0x11
+c02811|223344556677885f5f5f5f5f5f 32 plan9 SHRL $0x11, 0(AX)
+c02811|223344556677885f5f5f5f5f5f 64 gnu shrb $0x11,(%rax)
+c02811|223344556677885f5f5f5f5f5f 64 intel shr byte ptr [rax], 0x11
+c02811|223344556677885f5f5f5f5f5f 64 plan9 SHRL $0x11, 0(AX)
+c03811|223344556677885f5f5f5f5f5f 32 intel sar byte ptr [eax], 0x11
+c03811|223344556677885f5f5f5f5f5f 32 plan9 SARL $0x11, 0(AX)
+c03811|223344556677885f5f5f5f5f5f 64 gnu sarb $0x11,(%rax)
+c03811|223344556677885f5f5f5f5f5f 64 intel sar byte ptr [rax], 0x11
+c03811|223344556677885f5f5f5f5f5f 64 plan9 SARL $0x11, 0(AX)
+c10011|223344556677885f5f5f5f5f5f 32 intel rol dword ptr [eax], 0x11
+c10011|223344556677885f5f5f5f5f5f 32 plan9 ROLL $0x11, 0(AX)
+c10011|223344556677885f5f5f5f5f5f 64 gnu roll $0x11,(%rax)
+c10011|223344556677885f5f5f5f5f5f 64 intel rol dword ptr [rax], 0x11
+c10011|223344556677885f5f5f5f5f5f 64 plan9 ROLL $0x11, 0(AX)
+c10811|223344556677885f5f5f5f5f5f 32 intel ror dword ptr [eax], 0x11
+c10811|223344556677885f5f5f5f5f5f 32 plan9 RORL $0x11, 0(AX)
+c10811|223344556677885f5f5f5f5f5f 64 gnu rorl $0x11,(%rax)
+c10811|223344556677885f5f5f5f5f5f 64 intel ror dword ptr [rax], 0x11
+c10811|223344556677885f5f5f5f5f5f 64 plan9 RORL $0x11, 0(AX)
+c11122|3344556677885f5f5f5f5f5f5f 32 intel rcl dword ptr [ecx], 0x22
+c11122|3344556677885f5f5f5f5f5f5f 32 plan9 RCLL $0x22, 0(CX)
+c11122|3344556677885f5f5f5f5f5f5f 64 gnu rcll $0x22,(%rcx)
+c11122|3344556677885f5f5f5f5f5f5f 64 intel rcl dword ptr [rcx], 0x22
+c11122|3344556677885f5f5f5f5f5f5f 64 plan9 RCLL $0x22, 0(CX)
+c11811|223344556677885f5f5f5f5f5f 32 intel rcr dword ptr [eax], 0x11
+c11811|223344556677885f5f5f5f5f5f 32 plan9 RCRL $0x11, 0(AX)
+c11811|223344556677885f5f5f5f5f5f 64 gnu rcrl $0x11,(%rax)
+c11811|223344556677885f5f5f5f5f5f 64 intel rcr dword ptr [rax], 0x11
+c11811|223344556677885f5f5f5f5f5f 64 plan9 RCRL $0x11, 0(AX)
+c12011|223344556677885f5f5f5f5f5f 32 intel shl dword ptr [eax], 0x11
+c12011|223344556677885f5f5f5f5f5f 32 plan9 SHLL $0x11, 0(AX)
+c12011|223344556677885f5f5f5f5f5f 64 gnu shll $0x11,(%rax)
+c12011|223344556677885f5f5f5f5f5f 64 intel shl dword ptr [rax], 0x11
+c12011|223344556677885f5f5f5f5f5f 64 plan9 SHLL $0x11, 0(AX)
+c12811|223344556677885f5f5f5f5f5f 32 intel shr dword ptr [eax], 0x11
+c12811|223344556677885f5f5f5f5f5f 32 plan9 SHRL $0x11, 0(AX)
+c12811|223344556677885f5f5f5f5f5f 64 gnu shrl $0x11,(%rax)
+c12811|223344556677885f5f5f5f5f5f 64 intel shr dword ptr [rax], 0x11
+c12811|223344556677885f5f5f5f5f5f 64 plan9 SHRL $0x11, 0(AX)
+c13811|223344556677885f5f5f5f5f5f 32 intel sar dword ptr [eax], 0x11
+c13811|223344556677885f5f5f5f5f5f 32 plan9 SARL $0x11, 0(AX)
+c13811|223344556677885f5f5f5f5f5f 64 gnu sarl $0x11,(%rax)
+c13811|223344556677885f5f5f5f5f5f 64 intel sar dword ptr [rax], 0x11
+c13811|223344556677885f5f5f5f5f5f 64 plan9 SARL $0x11, 0(AX)
+c3|11223344556677885f5f5f5f5f5f5f 32 intel ret
+c3|11223344556677885f5f5f5f5f5f5f 32 plan9 RET
+c3|11223344556677885f5f5f5f5f5f5f 64 gnu retq
+c3|11223344556677885f5f5f5f5f5f5f 64 intel ret
+c3|11223344556677885f5f5f5f5f5f5f 64 plan9 RET
+c411|223344556677885f5f5f5f5f5f5f 32 intel les edx, ptr [ecx]
+c411|223344556677885f5f5f5f5f5f5f 32 plan9 LES 0(CX), DX
+c511|223344556677885f5f5f5f5f5f5f 32 intel lds edx, ptr [ecx]
+c511|223344556677885f5f5f5f5f5f5f 32 plan9 LDS 0(CX), DX
+c60011|223344556677885f5f5f5f5f5f 32 intel mov byte ptr [eax], 0x11
+c60011|223344556677885f5f5f5f5f5f 32 plan9 MOVL $0x11, 0(AX)
+c60011|223344556677885f5f5f5f5f5f 64 gnu movb $0x11,(%rax)
+c60011|223344556677885f5f5f5f5f5f 64 intel mov byte ptr [rax], 0x11
+c60011|223344556677885f5f5f5f5f5f 64 plan9 MOVL $0x11, 0(AX)
+c6f811|223344556677885f5f5f5f5f5f 32 intel xabort 0x11
+c6f811|223344556677885f5f5f5f5f5f 32 plan9 XABORT $0x11
+c6f811|223344556677885f5f5f5f5f5f 64 gnu xabort $0x11
+c6f811|223344556677885f5f5f5f5f5f 64 intel xabort 0x11
+c6f811|223344556677885f5f5f5f5f5f 64 plan9 XABORT $0x11
+c70011223344|556677885f5f5f5f5f5f 32 intel mov dword ptr [eax], 0x44332211
+c70011223344|556677885f5f5f5f5f5f 32 plan9 MOVL $0x44332211, 0(AX)
+c70011223344|556677885f5f5f5f5f5f 64 gnu movl $0x44332211,(%rax)
+c70011223344|556677885f5f5f5f5f5f 64 intel mov dword ptr [rax], 0x44332211
+c70011223344|556677885f5f5f5f5f5f 64 plan9 MOVL $0x44332211, 0(AX)
+c7f811223344|556677885f5f5f5f5f5f 32 intel xbegin .+0x44332211
+c7f811223344|556677885f5f5f5f5f5f 32 plan9 XBEGIN .+1144201745
+c7f811223344|556677885f5f5f5f5f5f 64 gnu xbeginq .+0x44332211
+c7f811223344|556677885f5f5f5f5f5f 64 intel xbegin .+0x44332211
+c7f811223344|556677885f5f5f5f5f5f 64 plan9 XBEGIN .+1144201745
+c8112233|44556677885f5f5f5f5f5f5f 32 intel enter 0x2211, 0x33
+c8112233|44556677885f5f5f5f5f5f5f 32 plan9 ENTER $0x33, $0x2211
+c8112233|44556677885f5f5f5f5f5f5f 64 gnu enterq $0x2211,$0x33
+c8112233|44556677885f5f5f5f5f5f5f 64 intel enter 0x2211, 0x33
+c8112233|44556677885f5f5f5f5f5f5f 64 plan9 ENTER $0x33, $0x2211
+c9|11223344556677885f5f5f5f5f5f5f 32 intel leave
+c9|11223344556677885f5f5f5f5f5f5f 32 plan9 LEAVE
+c9|11223344556677885f5f5f5f5f5f5f 64 gnu leaveq
+c9|11223344556677885f5f5f5f5f5f5f 64 intel leave
+c9|11223344556677885f5f5f5f5f5f5f 64 plan9 LEAVE
+ca1122|3344556677885f5f5f5f5f5f5f 32 intel ret far 0x2211
+ca1122|3344556677885f5f5f5f5f5f5f 32 plan9 LRET $0x2211
+ca1122|3344556677885f5f5f5f5f5f5f 64 gnu lretq $0x2211
+ca1122|3344556677885f5f5f5f5f5f5f 64 intel ret far 0x2211
+ca1122|3344556677885f5f5f5f5f5f5f 64 plan9 LRET $0x2211
+cb|11223344556677885f5f5f5f5f5f5f 32 intel ret far
+cb|11223344556677885f5f5f5f5f5f5f 32 plan9 LRET
+cb|11223344556677885f5f5f5f5f5f5f 64 gnu lretq
+cb|11223344556677885f5f5f5f5f5f5f 64 intel ret far
+cb|11223344556677885f5f5f5f5f5f5f 64 plan9 LRET
+cc|11223344556677885f5f5f5f5f5f5f 32 intel int3
+cc|11223344556677885f5f5f5f5f5f5f 32 plan9 INT $0x3
+cc|11223344556677885f5f5f5f5f5f5f 64 gnu int3
+cc|11223344556677885f5f5f5f5f5f5f 64 intel int3
+cc|11223344556677885f5f5f5f5f5f5f 64 plan9 INT $0x3
+cd11|223344556677885f5f5f5f5f5f5f 32 intel int 0x11
+cd11|223344556677885f5f5f5f5f5f5f 32 plan9 INT $0x11
+cd11|223344556677885f5f5f5f5f5f5f 64 gnu int $0x11
+cd11|223344556677885f5f5f5f5f5f5f 64 intel int 0x11
+cd11|223344556677885f5f5f5f5f5f5f 64 plan9 INT $0x11
+ce|11223344556677885f5f5f5f5f5f5f 32 intel into
+ce|11223344556677885f5f5f5f5f5f5f 32 plan9 INTO
+ce|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+ce|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+ce|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+cf|11223344556677885f5f5f5f5f5f5f 32 intel iretd
+cf|11223344556677885f5f5f5f5f5f5f 32 plan9 IRETD
+cf|11223344556677885f5f5f5f5f5f5f 64 gnu iret
+cf|11223344556677885f5f5f5f5f5f5f 64 intel iretd
+cf|11223344556677885f5f5f5f5f5f5f 64 plan9 IRETD
+d000|11223344556677885f5f5f5f5f5f 32 intel rol byte ptr [eax], 0x1
+d000|11223344556677885f5f5f5f5f5f 32 plan9 ROLL $0x1, 0(AX)
+d000|11223344556677885f5f5f5f5f5f 64 gnu rolb (%rax)
+d000|11223344556677885f5f5f5f5f5f 64 intel rol byte ptr [rax], 0x1
+d000|11223344556677885f5f5f5f5f5f 64 plan9 ROLL $0x1, 0(AX)
+d008|11223344556677885f5f5f5f5f5f 32 intel ror byte ptr [eax], 0x1
+d008|11223344556677885f5f5f5f5f5f 32 plan9 RORL $0x1, 0(AX)
+d008|11223344556677885f5f5f5f5f5f 64 gnu rorb (%rax)
+d008|11223344556677885f5f5f5f5f5f 64 intel ror byte ptr [rax], 0x1
+d008|11223344556677885f5f5f5f5f5f 64 plan9 RORL $0x1, 0(AX)
+d011|223344556677885f5f5f5f5f5f5f 32 intel rcl byte ptr [ecx], 0x1
+d011|223344556677885f5f5f5f5f5f5f 32 plan9 RCLL $0x1, 0(CX)
+d011|223344556677885f5f5f5f5f5f5f 64 gnu rclb (%rcx)
+d011|223344556677885f5f5f5f5f5f5f 64 intel rcl byte ptr [rcx], 0x1
+d011|223344556677885f5f5f5f5f5f5f 64 plan9 RCLL $0x1, 0(CX)
+d018|11223344556677885f5f5f5f5f5f 32 intel rcr byte ptr [eax], 0x1
+d018|11223344556677885f5f5f5f5f5f 32 plan9 RCRL $0x1, 0(AX)
+d018|11223344556677885f5f5f5f5f5f 64 gnu rcrb (%rax)
+d018|11223344556677885f5f5f5f5f5f 64 intel rcr byte ptr [rax], 0x1
+d018|11223344556677885f5f5f5f5f5f 64 plan9 RCRL $0x1, 0(AX)
+d020|11223344556677885f5f5f5f5f5f 32 intel shl byte ptr [eax], 0x1
+d020|11223344556677885f5f5f5f5f5f 32 plan9 SHLL $0x1, 0(AX)
+d020|11223344556677885f5f5f5f5f5f 64 gnu shlb (%rax)
+d020|11223344556677885f5f5f5f5f5f 64 intel shl byte ptr [rax], 0x1
+d020|11223344556677885f5f5f5f5f5f 64 plan9 SHLL $0x1, 0(AX)
+d028|11223344556677885f5f5f5f5f5f 32 intel shr byte ptr [eax], 0x1
+d028|11223344556677885f5f5f5f5f5f 32 plan9 SHRL $0x1, 0(AX)
+d028|11223344556677885f5f5f5f5f5f 64 gnu shrb (%rax)
+d028|11223344556677885f5f5f5f5f5f 64 intel shr byte ptr [rax], 0x1
+d028|11223344556677885f5f5f5f5f5f 64 plan9 SHRL $0x1, 0(AX)
+d038|11223344556677885f5f5f5f5f5f 32 intel sar byte ptr [eax], 0x1
+d038|11223344556677885f5f5f5f5f5f 32 plan9 SARL $0x1, 0(AX)
+d038|11223344556677885f5f5f5f5f5f 64 gnu sarb (%rax)
+d038|11223344556677885f5f5f5f5f5f 64 intel sar byte ptr [rax], 0x1
+d038|11223344556677885f5f5f5f5f5f 64 plan9 SARL $0x1, 0(AX)
+d100|11223344556677885f5f5f5f5f5f 32 intel rol dword ptr [eax], 0x1
+d100|11223344556677885f5f5f5f5f5f 32 plan9 ROLL $0x1, 0(AX)
+d100|11223344556677885f5f5f5f5f5f 64 gnu roll (%rax)
+d100|11223344556677885f5f5f5f5f5f 64 intel rol dword ptr [rax], 0x1
+d100|11223344556677885f5f5f5f5f5f 64 plan9 ROLL $0x1, 0(AX)
+d108|11223344556677885f5f5f5f5f5f 32 intel ror dword ptr [eax], 0x1
+d108|11223344556677885f5f5f5f5f5f 32 plan9 RORL $0x1, 0(AX)
+d108|11223344556677885f5f5f5f5f5f 64 gnu rorl (%rax)
+d108|11223344556677885f5f5f5f5f5f 64 intel ror dword ptr [rax], 0x1
+d108|11223344556677885f5f5f5f5f5f 64 plan9 RORL $0x1, 0(AX)
+d111|223344556677885f5f5f5f5f5f5f 32 intel rcl dword ptr [ecx], 0x1
+d111|223344556677885f5f5f5f5f5f5f 32 plan9 RCLL $0x1, 0(CX)
+d111|223344556677885f5f5f5f5f5f5f 64 gnu rcll (%rcx)
+d111|223344556677885f5f5f5f5f5f5f 64 intel rcl dword ptr [rcx], 0x1
+d111|223344556677885f5f5f5f5f5f5f 64 plan9 RCLL $0x1, 0(CX)
+d118|11223344556677885f5f5f5f5f5f 32 intel rcr dword ptr [eax], 0x1
+d118|11223344556677885f5f5f5f5f5f 32 plan9 RCRL $0x1, 0(AX)
+d118|11223344556677885f5f5f5f5f5f 64 gnu rcrl (%rax)
+d118|11223344556677885f5f5f5f5f5f 64 intel rcr dword ptr [rax], 0x1
+d118|11223344556677885f5f5f5f5f5f 64 plan9 RCRL $0x1, 0(AX)
+d120|11223344556677885f5f5f5f5f5f 32 intel shl dword ptr [eax], 0x1
+d120|11223344556677885f5f5f5f5f5f 32 plan9 SHLL $0x1, 0(AX)
+d120|11223344556677885f5f5f5f5f5f 64 gnu shll (%rax)
+d120|11223344556677885f5f5f5f5f5f 64 intel shl dword ptr [rax], 0x1
+d120|11223344556677885f5f5f5f5f5f 64 plan9 SHLL $0x1, 0(AX)
+d128|11223344556677885f5f5f5f5f5f 32 intel shr dword ptr [eax], 0x1
+d128|11223344556677885f5f5f5f5f5f 32 plan9 SHRL $0x1, 0(AX)
+d128|11223344556677885f5f5f5f5f5f 64 gnu shrl (%rax)
+d128|11223344556677885f5f5f5f5f5f 64 intel shr dword ptr [rax], 0x1
+d128|11223344556677885f5f5f5f5f5f 64 plan9 SHRL $0x1, 0(AX)
+d138|11223344556677885f5f5f5f5f5f 32 intel sar dword ptr [eax], 0x1
+d138|11223344556677885f5f5f5f5f5f 32 plan9 SARL $0x1, 0(AX)
+d138|11223344556677885f5f5f5f5f5f 64 gnu sarl (%rax)
+d138|11223344556677885f5f5f5f5f5f 64 intel sar dword ptr [rax], 0x1
+d138|11223344556677885f5f5f5f5f5f 64 plan9 SARL $0x1, 0(AX)
+d200|11223344556677885f5f5f5f5f5f 32 intel rol byte ptr [eax], cl
+d200|11223344556677885f5f5f5f5f5f 32 plan9 ROLL CL, 0(AX)
+d200|11223344556677885f5f5f5f5f5f 64 gnu rolb %cl,(%rax)
+d200|11223344556677885f5f5f5f5f5f 64 intel rol byte ptr [rax], cl
+d200|11223344556677885f5f5f5f5f5f 64 plan9 ROLL CL, 0(AX)
+d208|11223344556677885f5f5f5f5f5f 32 intel ror byte ptr [eax], cl
+d208|11223344556677885f5f5f5f5f5f 32 plan9 RORL CL, 0(AX)
+d208|11223344556677885f5f5f5f5f5f 64 gnu rorb %cl,(%rax)
+d208|11223344556677885f5f5f5f5f5f 64 intel ror byte ptr [rax], cl
+d208|11223344556677885f5f5f5f5f5f 64 plan9 RORL CL, 0(AX)
+d211|223344556677885f5f5f5f5f5f5f 32 intel rcl byte ptr [ecx], cl
+d211|223344556677885f5f5f5f5f5f5f 32 plan9 RCLL CL, 0(CX)
+d211|223344556677885f5f5f5f5f5f5f 64 gnu rclb %cl,(%rcx)
+d211|223344556677885f5f5f5f5f5f5f 64 intel rcl byte ptr [rcx], cl
+d211|223344556677885f5f5f5f5f5f5f 64 plan9 RCLL CL, 0(CX)
+d218|11223344556677885f5f5f5f5f5f 32 intel rcr byte ptr [eax], cl
+d218|11223344556677885f5f5f5f5f5f 32 plan9 RCRL CL, 0(AX)
+d218|11223344556677885f5f5f5f5f5f 64 gnu rcrb %cl,(%rax)
+d218|11223344556677885f5f5f5f5f5f 64 intel rcr byte ptr [rax], cl
+d218|11223344556677885f5f5f5f5f5f 64 plan9 RCRL CL, 0(AX)
+d220|11223344556677885f5f5f5f5f5f 32 intel shl byte ptr [eax], cl
+d220|11223344556677885f5f5f5f5f5f 32 plan9 SHLL CL, 0(AX)
+d220|11223344556677885f5f5f5f5f5f 64 gnu shlb %cl,(%rax)
+d220|11223344556677885f5f5f5f5f5f 64 intel shl byte ptr [rax], cl
+d220|11223344556677885f5f5f5f5f5f 64 plan9 SHLL CL, 0(AX)
+d228|11223344556677885f5f5f5f5f5f 32 intel shr byte ptr [eax], cl
+d228|11223344556677885f5f5f5f5f5f 32 plan9 SHRL CL, 0(AX)
+d228|11223344556677885f5f5f5f5f5f 64 gnu shrb %cl,(%rax)
+d228|11223344556677885f5f5f5f5f5f 64 intel shr byte ptr [rax], cl
+d228|11223344556677885f5f5f5f5f5f 64 plan9 SHRL CL, 0(AX)
+d238|11223344556677885f5f5f5f5f5f 32 intel sar byte ptr [eax], cl
+d238|11223344556677885f5f5f5f5f5f 32 plan9 SARL CL, 0(AX)
+d238|11223344556677885f5f5f5f5f5f 64 gnu sarb %cl,(%rax)
+d238|11223344556677885f5f5f5f5f5f 64 intel sar byte ptr [rax], cl
+d238|11223344556677885f5f5f5f5f5f 64 plan9 SARL CL, 0(AX)
+d300|11223344556677885f5f5f5f5f5f 32 intel rol dword ptr [eax], cl
+d300|11223344556677885f5f5f5f5f5f 32 plan9 ROLL CL, 0(AX)
+d300|11223344556677885f5f5f5f5f5f 64 gnu roll %cl,(%rax)
+d300|11223344556677885f5f5f5f5f5f 64 intel rol dword ptr [rax], cl
+d300|11223344556677885f5f5f5f5f5f 64 plan9 ROLL CL, 0(AX)
+d308|11223344556677885f5f5f5f5f5f 32 intel ror dword ptr [eax], cl
+d308|11223344556677885f5f5f5f5f5f 32 plan9 RORL CL, 0(AX)
+d308|11223344556677885f5f5f5f5f5f 64 gnu rorl %cl,(%rax)
+d308|11223344556677885f5f5f5f5f5f 64 intel ror dword ptr [rax], cl
+d308|11223344556677885f5f5f5f5f5f 64 plan9 RORL CL, 0(AX)
+d311|223344556677885f5f5f5f5f5f5f 32 intel rcl dword ptr [ecx], cl
+d311|223344556677885f5f5f5f5f5f5f 32 plan9 RCLL CL, 0(CX)
+d311|223344556677885f5f5f5f5f5f5f 64 gnu rcll %cl,(%rcx)
+d311|223344556677885f5f5f5f5f5f5f 64 intel rcl dword ptr [rcx], cl
+d311|223344556677885f5f5f5f5f5f5f 64 plan9 RCLL CL, 0(CX)
+d318|11223344556677885f5f5f5f5f5f 32 intel rcr dword ptr [eax], cl
+d318|11223344556677885f5f5f5f5f5f 32 plan9 RCRL CL, 0(AX)
+d318|11223344556677885f5f5f5f5f5f 64 gnu rcrl %cl,(%rax)
+d318|11223344556677885f5f5f5f5f5f 64 intel rcr dword ptr [rax], cl
+d318|11223344556677885f5f5f5f5f5f 64 plan9 RCRL CL, 0(AX)
+d320|11223344556677885f5f5f5f5f5f 32 intel shl dword ptr [eax], cl
+d320|11223344556677885f5f5f5f5f5f 32 plan9 SHLL CL, 0(AX)
+d320|11223344556677885f5f5f5f5f5f 64 gnu shll %cl,(%rax)
+d320|11223344556677885f5f5f5f5f5f 64 intel shl dword ptr [rax], cl
+d320|11223344556677885f5f5f5f5f5f 64 plan9 SHLL CL, 0(AX)
+d328|11223344556677885f5f5f5f5f5f 32 intel shr dword ptr [eax], cl
+d328|11223344556677885f5f5f5f5f5f 32 plan9 SHRL CL, 0(AX)
+d328|11223344556677885f5f5f5f5f5f 64 gnu shrl %cl,(%rax)
+d328|11223344556677885f5f5f5f5f5f 64 intel shr dword ptr [rax], cl
+d328|11223344556677885f5f5f5f5f5f 64 plan9 SHRL CL, 0(AX)
+d338|11223344556677885f5f5f5f5f5f 32 intel sar dword ptr [eax], cl
+d338|11223344556677885f5f5f5f5f5f 32 plan9 SARL CL, 0(AX)
+d338|11223344556677885f5f5f5f5f5f 64 gnu sarl %cl,(%rax)
+d338|11223344556677885f5f5f5f5f5f 64 intel sar dword ptr [rax], cl
+d338|11223344556677885f5f5f5f5f5f 64 plan9 SARL CL, 0(AX)
+d511|223344556677885f5f5f5f5f5f5f 32 intel aad 0x11
+d511|223344556677885f5f5f5f5f5f5f 32 plan9 AAD $0x11
+d5|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction
+d5|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction
+d5|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction
+d800|11223344556677885f5f5f5f5f5f 32 intel fadd st0, dword ptr [eax]
+d800|11223344556677885f5f5f5f5f5f 32 plan9 FADD 0(AX)
+d800|11223344556677885f5f5f5f5f5f 64 gnu fadds (%rax)
+d800|11223344556677885f5f5f5f5f5f 64 intel fadd st0, dword ptr [rax]
+d800|11223344556677885f5f5f5f5f5f 64 plan9 FADD 0(AX)
+d808|11223344556677885f5f5f5f5f5f 32 intel fmul st0, dword ptr [eax]
+d808|11223344556677885f5f5f5f5f5f 32 plan9 FMUL 0(AX)
+d808|11223344556677885f5f5f5f5f5f 64 gnu fmuls (%rax)
+d808|11223344556677885f5f5f5f5f5f 64 intel fmul st0, dword ptr [rax]
+d808|11223344556677885f5f5f5f5f5f 64 plan9 FMUL 0(AX)
+d811|223344556677885f5f5f5f5f5f5f 32 intel fcom st0, dword ptr [ecx]
+d811|223344556677885f5f5f5f5f5f5f 32 plan9 FCOM 0(CX)
+d811|223344556677885f5f5f5f5f5f5f 64 gnu fcoms (%rcx)
+d811|223344556677885f5f5f5f5f5f5f 64 intel fcom st0, dword ptr [rcx]
+d811|223344556677885f5f5f5f5f5f5f 64 plan9 FCOM 0(CX)
+d818|11223344556677885f5f5f5f5f5f 32 intel fcomp st0, dword ptr [eax]
+d818|11223344556677885f5f5f5f5f5f 32 plan9 FCOMP 0(AX)
+d818|11223344556677885f5f5f5f5f5f 64 gnu fcomps (%rax)
+d818|11223344556677885f5f5f5f5f5f 64 intel fcomp st0, dword ptr [rax]
+d818|11223344556677885f5f5f5f5f5f 64 plan9 FCOMP 0(AX)
+d820|11223344556677885f5f5f5f5f5f 32 intel fsub st0, dword ptr [eax]
+d820|11223344556677885f5f5f5f5f5f 32 plan9 FSUB 0(AX)
+d820|11223344556677885f5f5f5f5f5f 64 gnu fsubs (%rax)
+d820|11223344556677885f5f5f5f5f5f 64 intel fsub st0, dword ptr [rax]
+d820|11223344556677885f5f5f5f5f5f 64 plan9 FSUB 0(AX)
+d828|11223344556677885f5f5f5f5f5f 32 intel fsubr st0, dword ptr [eax]
+d828|11223344556677885f5f5f5f5f5f 32 plan9 FSUBR 0(AX)
+d828|11223344556677885f5f5f5f5f5f 64 gnu fsubrs (%rax)
+d828|11223344556677885f5f5f5f5f5f 64 intel fsubr st0, dword ptr [rax]
+d828|11223344556677885f5f5f5f5f5f 64 plan9 FSUBR 0(AX)
+d830|11223344556677885f5f5f5f5f5f 32 intel fdiv st0, dword ptr [eax]
+d830|11223344556677885f5f5f5f5f5f 32 plan9 FDIV 0(AX)
+d830|11223344556677885f5f5f5f5f5f 64 gnu fdivs (%rax)
+d830|11223344556677885f5f5f5f5f5f 64 intel fdiv st0, dword ptr [rax]
+d830|11223344556677885f5f5f5f5f5f 64 plan9 FDIV 0(AX)
+d838|11223344556677885f5f5f5f5f5f 32 intel fdivr st0, dword ptr [eax]
+d838|11223344556677885f5f5f5f5f5f 32 plan9 FDIVR 0(AX)
+d838|11223344556677885f5f5f5f5f5f 64 gnu fdivrs (%rax)
+d838|11223344556677885f5f5f5f5f5f 64 intel fdivr st0, dword ptr [rax]
+d838|11223344556677885f5f5f5f5f5f 64 plan9 FDIVR 0(AX)
+d8c0|11223344556677885f5f5f5f5f5f 32 intel fadd st0, st0
+d8c0|11223344556677885f5f5f5f5f5f 32 plan9 FADD F0, F0
+d8c0|11223344556677885f5f5f5f5f5f 64 gnu fadd %st,%st
+d8c0|11223344556677885f5f5f5f5f5f 64 intel fadd st0, st0
+d8c0|11223344556677885f5f5f5f5f5f 64 plan9 FADD F0, F0
+d8c8|11223344556677885f5f5f5f5f5f 32 intel fmul st0, st0
+d8c8|11223344556677885f5f5f5f5f5f 32 plan9 FMUL F0, F0
+d8c8|11223344556677885f5f5f5f5f5f 64 gnu fmul %st,%st
+d8c8|11223344556677885f5f5f5f5f5f 64 intel fmul st0, st0
+d8c8|11223344556677885f5f5f5f5f5f 64 plan9 FMUL F0, F0
+d8d0|11223344556677885f5f5f5f5f5f 32 intel fcom st0, st0
+d8d0|11223344556677885f5f5f5f5f5f 32 plan9 FCOM F0
+d8d0|11223344556677885f5f5f5f5f5f 64 gnu fcom %st
+d8d0|11223344556677885f5f5f5f5f5f 64 intel fcom st0, st0
+d8d0|11223344556677885f5f5f5f5f5f 64 plan9 FCOM F0
+d8d8|11223344556677885f5f5f5f5f5f 32 intel fcomp st0, st0
+d8d8|11223344556677885f5f5f5f5f5f 32 plan9 FCOMP F0
+d8d8|11223344556677885f5f5f5f5f5f 64 gnu fcomp %st
+d8d8|11223344556677885f5f5f5f5f5f 64 intel fcomp st0, st0
+d8d8|11223344556677885f5f5f5f5f5f 64 plan9 FCOMP F0
+d8e0|11223344556677885f5f5f5f5f5f 32 intel fsub st0, st0
+d8e0|11223344556677885f5f5f5f5f5f 32 plan9 FSUB F0, F0
+d8e0|11223344556677885f5f5f5f5f5f 64 gnu fsub %st,%st
+d8e0|11223344556677885f5f5f5f5f5f 64 intel fsub st0, st0
+d8e0|11223344556677885f5f5f5f5f5f 64 plan9 FSUB F0, F0
+d8e8|11223344556677885f5f5f5f5f5f 32 intel fsubr st0, st0
+d8e8|11223344556677885f5f5f5f5f5f 32 plan9 FSUBR F0, F0
+d8e8|11223344556677885f5f5f5f5f5f 64 gnu fsubr %st,%st
+d8e8|11223344556677885f5f5f5f5f5f 64 intel fsubr st0, st0
+d8e8|11223344556677885f5f5f5f5f5f 64 plan9 FSUBR F0, F0
+d8f0|11223344556677885f5f5f5f5f5f 32 intel fdiv st0, st0
+d8f0|11223344556677885f5f5f5f5f5f 32 plan9 FDIV F0, F0
+d8f0|11223344556677885f5f5f5f5f5f 64 gnu fdiv %st,%st
+d8f0|11223344556677885f5f5f5f5f5f 64 intel fdiv st0, st0
+d8f0|11223344556677885f5f5f5f5f5f 64 plan9 FDIV F0, F0
+d8f8|11223344556677885f5f5f5f5f5f 32 intel fdivr st0, st0
+d8f8|11223344556677885f5f5f5f5f5f 32 plan9 FDIVR F0, F0
+d8f8|11223344556677885f5f5f5f5f5f 64 gnu fdivr %st,%st
+d8f8|11223344556677885f5f5f5f5f5f 64 intel fdivr st0, st0
+d8f8|11223344556677885f5f5f5f5f5f 64 plan9 FDIVR F0, F0
+d900|11223344556677885f5f5f5f5f5f 32 intel fld st0, dword ptr [eax]
+d900|11223344556677885f5f5f5f5f5f 32 plan9 FLD 0(AX)
+d900|11223344556677885f5f5f5f5f5f 64 gnu flds (%rax)
+d900|11223344556677885f5f5f5f5f5f 64 intel fld st0, dword ptr [rax]
+d900|11223344556677885f5f5f5f5f5f 64 plan9 FLD 0(AX)
+d911|223344556677885f5f5f5f5f5f5f 32 intel fst dword ptr [ecx], st0
+d911|223344556677885f5f5f5f5f5f5f 32 plan9 FST 0(CX)
+d911|223344556677885f5f5f5f5f5f5f 64 gnu fsts (%rcx)
+d911|223344556677885f5f5f5f5f5f5f 64 intel fst dword ptr [rcx], st0
+d911|223344556677885f5f5f5f5f5f5f 64 plan9 FST 0(CX)
+d918|11223344556677885f5f5f5f5f5f 32 intel fstp dword ptr [eax], st0
+d918|11223344556677885f5f5f5f5f5f 32 plan9 FSTP 0(AX)
+d918|11223344556677885f5f5f5f5f5f 64 gnu fstps (%rax)
+d918|11223344556677885f5f5f5f5f5f 64 intel fstp dword ptr [rax], st0
+d918|11223344556677885f5f5f5f5f5f 64 plan9 FSTP 0(AX)
+d928|11223344556677885f5f5f5f5f5f 32 intel fldcw word ptr [eax]
+d928|11223344556677885f5f5f5f5f5f 32 plan9 FLDCW 0(AX)
+d928|11223344556677885f5f5f5f5f5f 64 gnu fldcw (%rax)
+d928|11223344556677885f5f5f5f5f5f 64 intel fldcw word ptr [rax]
+d928|11223344556677885f5f5f5f5f5f 64 plan9 FLDCW 0(AX)
+d930|11223344556677885f5f5f5f5f5f 32 intel fnstenv ptr [eax]
+d930|11223344556677885f5f5f5f5f5f 32 plan9 FNSTENV 0(AX)
+d930|11223344556677885f5f5f5f5f5f 64 gnu fnstenv (%rax)
+d930|11223344556677885f5f5f5f5f5f 64 intel fnstenv ptr [rax]
+d930|11223344556677885f5f5f5f5f5f 64 plan9 FNSTENV 0(AX)
+d938|11223344556677885f5f5f5f5f5f 32 intel fnstcw word ptr [eax]
+d938|11223344556677885f5f5f5f5f5f 32 plan9 FNSTCW 0(AX)
+d938|11223344556677885f5f5f5f5f5f 64 gnu fnstcw (%rax)
+d938|11223344556677885f5f5f5f5f5f 64 intel fnstcw word ptr [rax]
+d938|11223344556677885f5f5f5f5f5f 64 plan9 FNSTCW 0(AX)
+d9c0|11223344556677885f5f5f5f5f5f 32 intel fld st0, st0
+d9c0|11223344556677885f5f5f5f5f5f 32 plan9 FLD F0
+d9c0|11223344556677885f5f5f5f5f5f 64 gnu fld %st
+d9c0|11223344556677885f5f5f5f5f5f 64 intel fld st0, st0
+d9c0|11223344556677885f5f5f5f5f5f 64 plan9 FLD F0
+d9c8|11223344556677885f5f5f5f5f5f 32 intel fxch st0, st0
+d9c8|11223344556677885f5f5f5f5f5f 32 plan9 FXCH F0
+d9c8|11223344556677885f5f5f5f5f5f 64 gnu fxch %st
+d9c8|11223344556677885f5f5f5f5f5f 64 intel fxch st0, st0
+d9c8|11223344556677885f5f5f5f5f5f 64 plan9 FXCH F0
+d9d0|11223344556677885f5f5f5f5f5f 32 intel fnop
+d9d0|11223344556677885f5f5f5f5f5f 32 plan9 FNOP
+d9d0|11223344556677885f5f5f5f5f5f 64 gnu fnop
+d9d0|11223344556677885f5f5f5f5f5f 64 intel fnop
+d9d0|11223344556677885f5f5f5f5f5f 64 plan9 FNOP
+d9e0|11223344556677885f5f5f5f5f5f 32 intel fchs st0
+d9e0|11223344556677885f5f5f5f5f5f 32 plan9 FCHS
+d9e0|11223344556677885f5f5f5f5f5f 64 gnu fchs
+d9e0|11223344556677885f5f5f5f5f5f 64 intel fchs st0
+d9e0|11223344556677885f5f5f5f5f5f 64 plan9 FCHS
+d9e1|11223344556677885f5f5f5f5f5f 32 intel fabs st0
+d9e1|11223344556677885f5f5f5f5f5f 32 plan9 FABS
+d9e1|11223344556677885f5f5f5f5f5f 64 gnu fabs
+d9e1|11223344556677885f5f5f5f5f5f 64 intel fabs st0
+d9e1|11223344556677885f5f5f5f5f5f 64 plan9 FABS
+d9e4|11223344556677885f5f5f5f5f5f 32 intel ftst st0
+d9e4|11223344556677885f5f5f5f5f5f 32 plan9 FTST
+d9e4|11223344556677885f5f5f5f5f5f 64 gnu ftst
+d9e4|11223344556677885f5f5f5f5f5f 64 intel ftst st0
+d9e4|11223344556677885f5f5f5f5f5f 64 plan9 FTST
+d9e5|11223344556677885f5f5f5f5f5f 32 intel fxam st0
+d9e5|11223344556677885f5f5f5f5f5f 32 plan9 FXAM
+d9e5|11223344556677885f5f5f5f5f5f 64 gnu fxam
+d9e5|11223344556677885f5f5f5f5f5f 64 intel fxam st0
+d9e5|11223344556677885f5f5f5f5f5f 64 plan9 FXAM
+d9e8|11223344556677885f5f5f5f5f5f 32 intel fld1 st0
+d9e8|11223344556677885f5f5f5f5f5f 32 plan9 FLD1
+d9e8|11223344556677885f5f5f5f5f5f 64 gnu fld1
+d9e8|11223344556677885f5f5f5f5f5f 64 intel fld1 st0
+d9e8|11223344556677885f5f5f5f5f5f 64 plan9 FLD1
+d9e9|11223344556677885f5f5f5f5f5f 32 intel fldl2t st0
+d9e9|11223344556677885f5f5f5f5f5f 32 plan9 FLDL2T
+d9e9|11223344556677885f5f5f5f5f5f 64 gnu fldl2t
+d9e9|11223344556677885f5f5f5f5f5f 64 intel fldl2t st0
+d9e9|11223344556677885f5f5f5f5f5f 64 plan9 FLDL2T
+d9ea|11223344556677885f5f5f5f5f5f 32 intel fldl2e st0
+d9ea|11223344556677885f5f5f5f5f5f 32 plan9 FLDL2E
+d9ea|11223344556677885f5f5f5f5f5f 64 gnu fldl2e
+d9ea|11223344556677885f5f5f5f5f5f 64 intel fldl2e st0
+d9ea|11223344556677885f5f5f5f5f5f 64 plan9 FLDL2E
+d9eb|11223344556677885f5f5f5f5f5f 32 intel fldpi st0
+d9eb|11223344556677885f5f5f5f5f5f 32 plan9 FLDPI
+d9eb|11223344556677885f5f5f5f5f5f 64 gnu fldpi
+d9eb|11223344556677885f5f5f5f5f5f 64 intel fldpi st0
+d9eb|11223344556677885f5f5f5f5f5f 64 plan9 FLDPI
+d9ec|11223344556677885f5f5f5f5f5f 32 intel fldlg2 st0
+d9ec|11223344556677885f5f5f5f5f5f 32 plan9 FLDLG2
+d9ec|11223344556677885f5f5f5f5f5f 64 gnu fldlg2
+d9ec|11223344556677885f5f5f5f5f5f 64 intel fldlg2 st0
+d9ec|11223344556677885f5f5f5f5f5f 64 plan9 FLDLG2
+d9f0|11223344556677885f5f5f5f5f5f 32 intel f2xm1 st0
+d9f0|11223344556677885f5f5f5f5f5f 32 plan9 F2XM1
+d9f0|11223344556677885f5f5f5f5f5f 64 gnu f2xm1
+d9f0|11223344556677885f5f5f5f5f5f 64 intel f2xm1 st0
+d9f0|11223344556677885f5f5f5f5f5f 64 plan9 F2XM1
+d9f1|11223344556677885f5f5f5f5f5f 32 intel fyl2x st0, st1
+d9f1|11223344556677885f5f5f5f5f5f 32 plan9 FYL2X
+d9f1|11223344556677885f5f5f5f5f5f 64 gnu fyl2x
+d9f1|11223344556677885f5f5f5f5f5f 64 intel fyl2x st0, st1
+d9f1|11223344556677885f5f5f5f5f5f 64 plan9 FYL2X
+d9f2|11223344556677885f5f5f5f5f5f 32 intel fptan st0, st1
+d9f2|11223344556677885f5f5f5f5f5f 32 plan9 FPTAN
+d9f2|11223344556677885f5f5f5f5f5f 64 gnu fptan
+d9f2|11223344556677885f5f5f5f5f5f 64 intel fptan st0, st1
+d9f2|11223344556677885f5f5f5f5f5f 64 plan9 FPTAN
+d9f3|11223344556677885f5f5f5f5f5f 32 intel fpatan st0, st1
+d9f3|11223344556677885f5f5f5f5f5f 32 plan9 FPATAN
+d9f3|11223344556677885f5f5f5f5f5f 64 gnu fpatan
+d9f3|11223344556677885f5f5f5f5f5f 64 intel fpatan st0, st1
+d9f3|11223344556677885f5f5f5f5f5f 64 plan9 FPATAN
+d9f4|11223344556677885f5f5f5f5f5f 32 intel fxtract st0, st1
+d9f4|11223344556677885f5f5f5f5f5f 32 plan9 FXTRACT
+d9f4|11223344556677885f5f5f5f5f5f 64 gnu fxtract
+d9f4|11223344556677885f5f5f5f5f5f 64 intel fxtract st0, st1
+d9f4|11223344556677885f5f5f5f5f5f 64 plan9 FXTRACT
+d9f5|11223344556677885f5f5f5f5f5f 32 intel fprem1 st0, st1
+d9f5|11223344556677885f5f5f5f5f5f 32 plan9 FPREM1
+d9f5|11223344556677885f5f5f5f5f5f 64 gnu fprem1
+d9f5|11223344556677885f5f5f5f5f5f 64 intel fprem1 st0, st1
+d9f5|11223344556677885f5f5f5f5f5f 64 plan9 FPREM1
+d9f6|11223344556677885f5f5f5f5f5f 32 intel fdecstp
+d9f6|11223344556677885f5f5f5f5f5f 32 plan9 FDECSTP
+d9f6|11223344556677885f5f5f5f5f5f 64 gnu fdecstp
+d9f6|11223344556677885f5f5f5f5f5f 64 intel fdecstp
+d9f6|11223344556677885f5f5f5f5f5f 64 plan9 FDECSTP
+d9f7|11223344556677885f5f5f5f5f5f 32 intel fincstp
+d9f7|11223344556677885f5f5f5f5f5f 32 plan9 FINCSTP
+d9f7|11223344556677885f5f5f5f5f5f 64 gnu fincstp
+d9f7|11223344556677885f5f5f5f5f5f 64 intel fincstp
+d9f7|11223344556677885f5f5f5f5f5f 64 plan9 FINCSTP
+d9f8|11223344556677885f5f5f5f5f5f 32 intel fprem st0, st1
+d9f8|11223344556677885f5f5f5f5f5f 32 plan9 FPREM
+d9f8|11223344556677885f5f5f5f5f5f 64 gnu fprem
+d9f8|11223344556677885f5f5f5f5f5f 64 intel fprem st0, st1
+d9f8|11223344556677885f5f5f5f5f5f 64 plan9 FPREM
+d9f9|11223344556677885f5f5f5f5f5f 32 intel fyl2xp1 st0, st1
+d9f9|11223344556677885f5f5f5f5f5f 32 plan9 FYL2XP1
+d9f9|11223344556677885f5f5f5f5f5f 64 gnu fyl2xp1
+d9f9|11223344556677885f5f5f5f5f5f 64 intel fyl2xp1 st0, st1
+d9f9|11223344556677885f5f5f5f5f5f 64 plan9 FYL2XP1
+d9fa|11223344556677885f5f5f5f5f5f 32 intel fsqrt st0
+d9fa|11223344556677885f5f5f5f5f5f 32 plan9 FSQRT
+d9fa|11223344556677885f5f5f5f5f5f 64 gnu fsqrt
+d9fa|11223344556677885f5f5f5f5f5f 64 intel fsqrt st0
+d9fa|11223344556677885f5f5f5f5f5f 64 plan9 FSQRT
+d9fb|11223344556677885f5f5f5f5f5f 32 intel fsincos st0, st1
+d9fb|11223344556677885f5f5f5f5f5f 32 plan9 FSINCOS
+d9fb|11223344556677885f5f5f5f5f5f 64 gnu fsincos
+d9fb|11223344556677885f5f5f5f5f5f 64 intel fsincos st0, st1
+d9fb|11223344556677885f5f5f5f5f5f 64 plan9 FSINCOS
+d9fc|11223344556677885f5f5f5f5f5f 32 intel frndint st0
+d9fc|11223344556677885f5f5f5f5f5f 32 plan9 FRNDINT
+d9fc|11223344556677885f5f5f5f5f5f 64 gnu frndint
+d9fc|11223344556677885f5f5f5f5f5f 64 intel frndint st0
+d9fc|11223344556677885f5f5f5f5f5f 64 plan9 FRNDINT
+d9fd|11223344556677885f5f5f5f5f5f 32 intel fscale st0, st1
+d9fd|11223344556677885f5f5f5f5f5f 32 plan9 FSCALE
+d9fd|11223344556677885f5f5f5f5f5f 64 gnu fscale
+d9fd|11223344556677885f5f5f5f5f5f 64 intel fscale st0, st1
+d9fd|11223344556677885f5f5f5f5f5f 64 plan9 FSCALE
+d9fe|11223344556677885f5f5f5f5f5f 32 intel fsin st0
+d9fe|11223344556677885f5f5f5f5f5f 32 plan9 FSIN
+d9fe|11223344556677885f5f5f5f5f5f 64 gnu fsin
+d9fe|11223344556677885f5f5f5f5f5f 64 intel fsin st0
+d9fe|11223344556677885f5f5f5f5f5f 64 plan9 FSIN
+d9ff|11223344556677885f5f5f5f5f5f 32 intel fcos st0
+d9ff|11223344556677885f5f5f5f5f5f 32 plan9 FCOS
+d9ff|11223344556677885f5f5f5f5f5f 64 gnu fcos
+d9ff|11223344556677885f5f5f5f5f5f 64 intel fcos st0
+d9ff|11223344556677885f5f5f5f5f5f 64 plan9 FCOS
+da00|11223344556677885f5f5f5f5f5f 32 intel fiadd st0, dword ptr [eax]
+da00|11223344556677885f5f5f5f5f5f 32 plan9 FIADD 0(AX)
+da00|11223344556677885f5f5f5f5f5f 64 gnu fiaddl (%rax)
+da00|11223344556677885f5f5f5f5f5f 64 intel fiadd st0, dword ptr [rax]
+da00|11223344556677885f5f5f5f5f5f 64 plan9 FIADD 0(AX)
+da08|11223344556677885f5f5f5f5f5f 32 intel fimul st0, dword ptr [eax]
+da08|11223344556677885f5f5f5f5f5f 32 plan9 FIMUL 0(AX)
+da08|11223344556677885f5f5f5f5f5f 64 gnu fimull (%rax)
+da08|11223344556677885f5f5f5f5f5f 64 intel fimul st0, dword ptr [rax]
+da08|11223344556677885f5f5f5f5f5f 64 plan9 FIMUL 0(AX)
+da11|223344556677885f5f5f5f5f5f5f 32 intel ficom st0, dword ptr [ecx]
+da11|223344556677885f5f5f5f5f5f5f 32 plan9 FICOM 0(CX)
+da11|223344556677885f5f5f5f5f5f5f 64 gnu ficoml (%rcx)
+da11|223344556677885f5f5f5f5f5f5f 64 intel ficom st0, dword ptr [rcx]
+da11|223344556677885f5f5f5f5f5f5f 64 plan9 FICOM 0(CX)
+da18|11223344556677885f5f5f5f5f5f 32 intel ficomp st0, dword ptr [eax]
+da18|11223344556677885f5f5f5f5f5f 32 plan9 FICOMP 0(AX)
+da18|11223344556677885f5f5f5f5f5f 64 gnu ficompl (%rax)
+da18|11223344556677885f5f5f5f5f5f 64 intel ficomp st0, dword ptr [rax]
+da18|11223344556677885f5f5f5f5f5f 64 plan9 FICOMP 0(AX)
+da20|11223344556677885f5f5f5f5f5f 32 intel fisub st0, dword ptr [eax]
+da20|11223344556677885f5f5f5f5f5f 32 plan9 FISUB 0(AX)
+da20|11223344556677885f5f5f5f5f5f 64 gnu fisubl (%rax)
+da20|11223344556677885f5f5f5f5f5f 64 intel fisub st0, dword ptr [rax]
+da20|11223344556677885f5f5f5f5f5f 64 plan9 FISUB 0(AX)
+da28|11223344556677885f5f5f5f5f5f 32 intel fisubr st0, dword ptr [eax]
+da28|11223344556677885f5f5f5f5f5f 32 plan9 FISUBR 0(AX)
+da28|11223344556677885f5f5f5f5f5f 64 gnu fisubrl (%rax)
+da28|11223344556677885f5f5f5f5f5f 64 intel fisubr st0, dword ptr [rax]
+da28|11223344556677885f5f5f5f5f5f 64 plan9 FISUBR 0(AX)
+da30|11223344556677885f5f5f5f5f5f 32 intel fidiv st0, dword ptr [eax]
+da30|11223344556677885f5f5f5f5f5f 32 plan9 FIDIV 0(AX)
+da30|11223344556677885f5f5f5f5f5f 64 gnu fidivl (%rax)
+da30|11223344556677885f5f5f5f5f5f 64 intel fidiv st0, dword ptr [rax]
+da30|11223344556677885f5f5f5f5f5f 64 plan9 FIDIV 0(AX)
+da38|11223344556677885f5f5f5f5f5f 32 intel fidivr st0, dword ptr [eax]
+da38|11223344556677885f5f5f5f5f5f 32 plan9 FIDIVR 0(AX)
+da38|11223344556677885f5f5f5f5f5f 64 gnu fidivrl (%rax)
+da38|11223344556677885f5f5f5f5f5f 64 intel fidivr st0, dword ptr [rax]
+da38|11223344556677885f5f5f5f5f5f 64 plan9 FIDIVR 0(AX)
+dac0|11223344556677885f5f5f5f5f5f 32 intel fcmovb st0, st0
+dac0|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVB F0, F0
+dac0|11223344556677885f5f5f5f5f5f 64 gnu fcmovb %st,%st
+dac0|11223344556677885f5f5f5f5f5f 64 intel fcmovb st0, st0
+dac0|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVB F0, F0
+dac8|11223344556677885f5f5f5f5f5f 32 intel fcmove st0, st0
+dac8|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVE F0, F0
+dac8|11223344556677885f5f5f5f5f5f 64 gnu fcmove %st,%st
+dac8|11223344556677885f5f5f5f5f5f 64 intel fcmove st0, st0
+dac8|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVE F0, F0
+dad0|11223344556677885f5f5f5f5f5f 32 intel fcmovbe st0, st0
+dad0|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVBE F0, F0
+dad0|11223344556677885f5f5f5f5f5f 64 gnu fcmovbe %st,%st
+dad0|11223344556677885f5f5f5f5f5f 64 intel fcmovbe st0, st0
+dad0|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVBE F0, F0
+dad8|11223344556677885f5f5f5f5f5f 32 intel fcmovu st0, st0
+dad8|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVU F0, F0
+dad8|11223344556677885f5f5f5f5f5f 64 gnu fcmovu %st,%st
+dad8|11223344556677885f5f5f5f5f5f 64 intel fcmovu st0, st0
+dad8|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVU F0, F0
+dae9|11223344556677885f5f5f5f5f5f 32 intel fucompp st0, st1
+dae9|11223344556677885f5f5f5f5f5f 32 plan9 FUCOMPP
+dae9|11223344556677885f5f5f5f5f5f 64 gnu fucompp
+dae9|11223344556677885f5f5f5f5f5f 64 intel fucompp st0, st1
+dae9|11223344556677885f5f5f5f5f5f 64 plan9 FUCOMPP
+db00|11223344556677885f5f5f5f5f5f 32 intel fild st0, dword ptr [eax]
+db00|11223344556677885f5f5f5f5f5f 32 plan9 FILD 0(AX)
+db00|11223344556677885f5f5f5f5f5f 64 gnu fildl (%rax)
+db00|11223344556677885f5f5f5f5f5f 64 intel fild st0, dword ptr [rax]
+db00|11223344556677885f5f5f5f5f5f 64 plan9 FILD 0(AX)
+db08|11223344556677885f5f5f5f5f5f 32 intel fisttp dword ptr [eax], st0
+db08|11223344556677885f5f5f5f5f5f 32 plan9 FISTTP 0(AX)
+db08|11223344556677885f5f5f5f5f5f 64 gnu fisttpl (%rax)
+db08|11223344556677885f5f5f5f5f5f 64 intel fisttp dword ptr [rax], st0
+db08|11223344556677885f5f5f5f5f5f 64 plan9 FISTTP 0(AX)
+db11|223344556677885f5f5f5f5f5f5f 32 intel fist dword ptr [ecx], st0
+db11|223344556677885f5f5f5f5f5f5f 32 plan9 FIST 0(CX)
+db11|223344556677885f5f5f5f5f5f5f 64 gnu fistl (%rcx)
+db11|223344556677885f5f5f5f5f5f5f 64 intel fist dword ptr [rcx], st0
+db11|223344556677885f5f5f5f5f5f5f 64 plan9 FIST 0(CX)
+db18|11223344556677885f5f5f5f5f5f 32 intel fistp dword ptr [eax], st0
+db18|11223344556677885f5f5f5f5f5f 32 plan9 FISTP 0(AX)
+db18|11223344556677885f5f5f5f5f5f 64 gnu fistpl (%rax)
+db18|11223344556677885f5f5f5f5f5f 64 intel fistp dword ptr [rax], st0
+db18|11223344556677885f5f5f5f5f5f 64 plan9 FISTP 0(AX)
+db28|11223344556677885f5f5f5f5f5f 32 intel fld st0, ptr [eax]
+db28|11223344556677885f5f5f5f5f5f 32 plan9 FLD 0(AX)
+db28|11223344556677885f5f5f5f5f5f 64 gnu fldt (%rax)
+db28|11223344556677885f5f5f5f5f5f 64 intel fld st0, ptr [rax]
+db28|11223344556677885f5f5f5f5f5f 64 plan9 FLD 0(AX)
+db38|11223344556677885f5f5f5f5f5f 32 intel fstp ptr [eax], st0
+db38|11223344556677885f5f5f5f5f5f 32 plan9 FSTP 0(AX)
+db38|11223344556677885f5f5f5f5f5f 64 gnu fstpt (%rax)
+db38|11223344556677885f5f5f5f5f5f 64 intel fstp ptr [rax], st0
+db38|11223344556677885f5f5f5f5f5f 64 plan9 FSTP 0(AX)
+dbc0|11223344556677885f5f5f5f5f5f 32 intel fcmovnb st0, st0
+dbc0|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVNB F0, F0
+dbc0|11223344556677885f5f5f5f5f5f 64 gnu fcmovnb %st,%st
+dbc0|11223344556677885f5f5f5f5f5f 64 intel fcmovnb st0, st0
+dbc0|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVNB F0, F0
+dbc8|11223344556677885f5f5f5f5f5f 32 intel fcmovne st0, st0
+dbc8|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVNE F0, F0
+dbc8|11223344556677885f5f5f5f5f5f 64 gnu fcmovne %st,%st
+dbc8|11223344556677885f5f5f5f5f5f 64 intel fcmovne st0, st0
+dbc8|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVNE F0, F0
+dbd0|11223344556677885f5f5f5f5f5f 32 intel fcmovnbe st0, st0
+dbd0|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVNBE F0, F0
+dbd0|11223344556677885f5f5f5f5f5f 64 gnu fcmovnbe %st,%st
+dbd0|11223344556677885f5f5f5f5f5f 64 intel fcmovnbe st0, st0
+dbd0|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVNBE F0, F0
+dbd8|11223344556677885f5f5f5f5f5f 32 intel fcmovnu st0, st0
+dbd8|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVNU F0, F0
+dbd8|11223344556677885f5f5f5f5f5f 64 gnu fcmovnu %st,%st
+dbd8|11223344556677885f5f5f5f5f5f 64 intel fcmovnu st0, st0
+dbd8|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVNU F0, F0
+dbe2|11223344556677885f5f5f5f5f5f 32 intel fnclex
+dbe2|11223344556677885f5f5f5f5f5f 32 plan9 FNCLEX
+dbe2|11223344556677885f5f5f5f5f5f 64 gnu fnclex
+dbe2|11223344556677885f5f5f5f5f5f 64 intel fnclex
+dbe2|11223344556677885f5f5f5f5f5f 64 plan9 FNCLEX
+dbe3|11223344556677885f5f5f5f5f5f 32 intel fninit
+dbe3|11223344556677885f5f5f5f5f5f 32 plan9 FNINIT
+dbe3|11223344556677885f5f5f5f5f5f 64 gnu fninit
+dbe3|11223344556677885f5f5f5f5f5f 64 intel fninit
+dbe3|11223344556677885f5f5f5f5f5f 64 plan9 FNINIT
+dbe8|11223344556677885f5f5f5f5f5f 32 intel fucomi st0, st0
+dbe8|11223344556677885f5f5f5f5f5f 32 plan9 FUCOMI F0, F0
+dbe8|11223344556677885f5f5f5f5f5f 64 gnu fucomi %st,%st
+dbe8|11223344556677885f5f5f5f5f5f 64 intel fucomi st0, st0
+dbe8|11223344556677885f5f5f5f5f5f 64 plan9 FUCOMI F0, F0
+dbf0|11223344556677885f5f5f5f5f5f 32 intel fcomi st0, st0
+dbf0|11223344556677885f5f5f5f5f5f 32 plan9 FCOMI F0, F0
+dbf0|11223344556677885f5f5f5f5f5f 64 gnu fcomi %st,%st
+dbf0|11223344556677885f5f5f5f5f5f 64 intel fcomi st0, st0
+dbf0|11223344556677885f5f5f5f5f5f 64 plan9 FCOMI F0, F0
+dc00|11223344556677885f5f5f5f5f5f 32 intel fadd st0, qword ptr [eax]
+dc00|11223344556677885f5f5f5f5f5f 32 plan9 FADD 0(AX)
+dc00|11223344556677885f5f5f5f5f5f 64 gnu faddl (%rax)
+dc00|11223344556677885f5f5f5f5f5f 64 intel fadd st0, qword ptr [rax]
+dc00|11223344556677885f5f5f5f5f5f 64 plan9 FADD 0(AX)
+dc08|11223344556677885f5f5f5f5f5f 32 intel fmul st0, qword ptr [eax]
+dc08|11223344556677885f5f5f5f5f5f 32 plan9 FMUL 0(AX)
+dc08|11223344556677885f5f5f5f5f5f 64 gnu fmull (%rax)
+dc08|11223344556677885f5f5f5f5f5f 64 intel fmul st0, qword ptr [rax]
+dc08|11223344556677885f5f5f5f5f5f 64 plan9 FMUL 0(AX)
+dc11|223344556677885f5f5f5f5f5f5f 32 intel fcom st0, qword ptr [ecx]
+dc11|223344556677885f5f5f5f5f5f5f 32 plan9 FCOM 0(CX)
+dc11|223344556677885f5f5f5f5f5f5f 64 gnu fcoml (%rcx)
+dc11|223344556677885f5f5f5f5f5f5f 64 intel fcom st0, qword ptr [rcx]
+dc11|223344556677885f5f5f5f5f5f5f 64 plan9 FCOM 0(CX)
+dc18|11223344556677885f5f5f5f5f5f 32 intel fcomp st0, qword ptr [eax]
+dc18|11223344556677885f5f5f5f5f5f 32 plan9 FCOMP 0(AX)
+dc18|11223344556677885f5f5f5f5f5f 64 gnu fcompl (%rax)
+dc18|11223344556677885f5f5f5f5f5f 64 intel fcomp st0, qword ptr [rax]
+dc18|11223344556677885f5f5f5f5f5f 64 plan9 FCOMP 0(AX)
+dc20|11223344556677885f5f5f5f5f5f 32 intel fsub st0, qword ptr [eax]
+dc20|11223344556677885f5f5f5f5f5f 32 plan9 FSUB 0(AX)
+dc20|11223344556677885f5f5f5f5f5f 64 gnu fsubl (%rax)
+dc20|11223344556677885f5f5f5f5f5f 64 intel fsub st0, qword ptr [rax]
+dc20|11223344556677885f5f5f5f5f5f 64 plan9 FSUB 0(AX)
+dc28|11223344556677885f5f5f5f5f5f 32 intel fsubr st0, qword ptr [eax]
+dc28|11223344556677885f5f5f5f5f5f 32 plan9 FSUBR 0(AX)
+dc28|11223344556677885f5f5f5f5f5f 64 gnu fsubrl (%rax)
+dc28|11223344556677885f5f5f5f5f5f 64 intel fsubr st0, qword ptr [rax]
+dc28|11223344556677885f5f5f5f5f5f 64 plan9 FSUBR 0(AX)
+dc30|11223344556677885f5f5f5f5f5f 32 intel fdiv st0, qword ptr [eax]
+dc30|11223344556677885f5f5f5f5f5f 32 plan9 FDIV 0(AX)
+dc30|11223344556677885f5f5f5f5f5f 64 gnu fdivl (%rax)
+dc30|11223344556677885f5f5f5f5f5f 64 intel fdiv st0, qword ptr [rax]
+dc30|11223344556677885f5f5f5f5f5f 64 plan9 FDIV 0(AX)
+dc38|11223344556677885f5f5f5f5f5f 32 intel fdivr st0, qword ptr [eax]
+dc38|11223344556677885f5f5f5f5f5f 32 plan9 FDIVR 0(AX)
+dc38|11223344556677885f5f5f5f5f5f 64 gnu fdivrl (%rax)
+dc38|11223344556677885f5f5f5f5f5f 64 intel fdivr st0, qword ptr [rax]
+dc38|11223344556677885f5f5f5f5f5f 64 plan9 FDIVR 0(AX)
+dcc0|11223344556677885f5f5f5f5f5f 32 intel fadd st0, st0
+dcc0|11223344556677885f5f5f5f5f5f 32 plan9 FADD F0, F0
+dcc0|11223344556677885f5f5f5f5f5f 64 gnu fadd %st,%st
+dcc0|11223344556677885f5f5f5f5f5f 64 intel fadd st0, st0
+dcc0|11223344556677885f5f5f5f5f5f 64 plan9 FADD F0, F0
+dcc8|11223344556677885f5f5f5f5f5f 32 intel fmul st0, st0
+dcc8|11223344556677885f5f5f5f5f5f 32 plan9 FMUL F0, F0
+dcc8|11223344556677885f5f5f5f5f5f 64 gnu fmul %st,%st
+dcc8|11223344556677885f5f5f5f5f5f 64 intel fmul st0, st0
+dcc8|11223344556677885f5f5f5f5f5f 64 plan9 FMUL F0, F0
+dce0|11223344556677885f5f5f5f5f5f 32 intel fsubr st0, st0
+dce0|11223344556677885f5f5f5f5f5f 32 plan9 FSUBR F0, F0
+dce0|11223344556677885f5f5f5f5f5f 64 gnu fsub %st,%st
+dce0|11223344556677885f5f5f5f5f5f 64 intel fsubr st0, st0
+dce0|11223344556677885f5f5f5f5f5f 64 plan9 FSUBR F0, F0
+dce8|11223344556677885f5f5f5f5f5f 32 intel fsub st0, st0
+dce8|11223344556677885f5f5f5f5f5f 32 plan9 FSUB F0, F0
+dce8|11223344556677885f5f5f5f5f5f 64 gnu fsubr %st,%st
+dce8|11223344556677885f5f5f5f5f5f 64 intel fsub st0, st0
+dce8|11223344556677885f5f5f5f5f5f 64 plan9 FSUB F0, F0
+dcf0|11223344556677885f5f5f5f5f5f 32 intel fdivr st0, st0
+dcf0|11223344556677885f5f5f5f5f5f 32 plan9 FDIVR F0, F0
+dcf0|11223344556677885f5f5f5f5f5f 64 gnu fdiv %st,%st
+dcf0|11223344556677885f5f5f5f5f5f 64 intel fdivr st0, st0
+dcf0|11223344556677885f5f5f5f5f5f 64 plan9 FDIVR F0, F0
+dcf8|11223344556677885f5f5f5f5f5f 32 intel fdiv st0, st0
+dcf8|11223344556677885f5f5f5f5f5f 32 plan9 FDIV F0, F0
+dcf8|11223344556677885f5f5f5f5f5f 64 gnu fdivr %st,%st
+dcf8|11223344556677885f5f5f5f5f5f 64 intel fdiv st0, st0
+dcf8|11223344556677885f5f5f5f5f5f 64 plan9 FDIV F0, F0
+dd00|11223344556677885f5f5f5f5f5f 32 intel fld st0, qword ptr [eax]
+dd00|11223344556677885f5f5f5f5f5f 32 plan9 FLD 0(AX)
+dd00|11223344556677885f5f5f5f5f5f 64 gnu fldl (%rax)
+dd00|11223344556677885f5f5f5f5f5f 64 intel fld st0, qword ptr [rax]
+dd00|11223344556677885f5f5f5f5f5f 64 plan9 FLD 0(AX)
+dd08|11223344556677885f5f5f5f5f5f 32 intel fisttp qword ptr [eax], st0
+dd08|11223344556677885f5f5f5f5f5f 32 plan9 FISTTP 0(AX)
+dd08|11223344556677885f5f5f5f5f5f 64 gnu fisttpll (%rax)
+dd08|11223344556677885f5f5f5f5f5f 64 intel fisttp qword ptr [rax], st0
+dd08|11223344556677885f5f5f5f5f5f 64 plan9 FISTTP 0(AX)
+dd11|223344556677885f5f5f5f5f5f5f 32 intel fst qword ptr [ecx], st0
+dd11|223344556677885f5f5f5f5f5f5f 32 plan9 FST 0(CX)
+dd11|223344556677885f5f5f5f5f5f5f 64 gnu fstl (%rcx)
+dd11|223344556677885f5f5f5f5f5f5f 64 intel fst qword ptr [rcx], st0
+dd11|223344556677885f5f5f5f5f5f5f 64 plan9 FST 0(CX)
+dd18|11223344556677885f5f5f5f5f5f 32 intel fstp qword ptr [eax], st0
+dd18|11223344556677885f5f5f5f5f5f 32 plan9 FSTP 0(AX)
+dd18|11223344556677885f5f5f5f5f5f 64 gnu fstpl (%rax)
+dd18|11223344556677885f5f5f5f5f5f 64 intel fstp qword ptr [rax], st0
+dd18|11223344556677885f5f5f5f5f5f 64 plan9 FSTP 0(AX)
+dd20|11223344556677885f5f5f5f5f5f 32 intel frstor ptr [eax]
+dd20|11223344556677885f5f5f5f5f5f 32 plan9 FRSTORL 0(AX)
+dd20|11223344556677885f5f5f5f5f5f 64 gnu frstor (%rax)
+dd20|11223344556677885f5f5f5f5f5f 64 intel frstor ptr [rax]
+dd20|11223344556677885f5f5f5f5f5f 64 plan9 FRSTORL 0(AX)
+dd30|11223344556677885f5f5f5f5f5f 32 intel fnsave ptr [eax]
+dd30|11223344556677885f5f5f5f5f5f 32 plan9 FNSAVE 0(AX)
+dd30|11223344556677885f5f5f5f5f5f 64 gnu fnsave (%rax)
+dd30|11223344556677885f5f5f5f5f5f 64 intel fnsave ptr [rax]
+dd30|11223344556677885f5f5f5f5f5f 64 plan9 FNSAVE 0(AX)
+dd38|11223344556677885f5f5f5f5f5f 32 intel fnstsw word ptr [eax]
+dd38|11223344556677885f5f5f5f5f5f 32 plan9 FNSTSW 0(AX)
+dd38|11223344556677885f5f5f5f5f5f 64 gnu fnstsw (%rax)
+dd38|11223344556677885f5f5f5f5f5f 64 intel fnstsw word ptr [rax]
+dd38|11223344556677885f5f5f5f5f5f 64 plan9 FNSTSW 0(AX)
+ddc0|11223344556677885f5f5f5f5f5f 32 intel ffree st0
+ddc0|11223344556677885f5f5f5f5f5f 32 plan9 FFREE F0
+ddc0|11223344556677885f5f5f5f5f5f 64 gnu ffree %st
+ddc0|11223344556677885f5f5f5f5f5f 64 intel ffree st0
+ddc0|11223344556677885f5f5f5f5f5f 64 plan9 FFREE F0
+ddd0|11223344556677885f5f5f5f5f5f 32 intel fst st0, st0
+ddd0|11223344556677885f5f5f5f5f5f 32 plan9 FST F0
+ddd0|11223344556677885f5f5f5f5f5f 64 gnu fst %st
+ddd0|11223344556677885f5f5f5f5f5f 64 intel fst st0, st0
+ddd0|11223344556677885f5f5f5f5f5f 64 plan9 FST F0
+ddd8|11223344556677885f5f5f5f5f5f 32 intel fstp st0, st0
+ddd8|11223344556677885f5f5f5f5f5f 32 plan9 FSTP F0
+ddd8|11223344556677885f5f5f5f5f5f 64 gnu fstp %st
+ddd8|11223344556677885f5f5f5f5f5f 64 intel fstp st0, st0
+ddd8|11223344556677885f5f5f5f5f5f 64 plan9 FSTP F0
+dde0|11223344556677885f5f5f5f5f5f 32 intel fucom st0, st0
+dde0|11223344556677885f5f5f5f5f5f 32 plan9 FUCOM F0
+dde0|11223344556677885f5f5f5f5f5f 64 gnu fucom %st
+dde0|11223344556677885f5f5f5f5f5f 64 intel fucom st0, st0
+dde0|11223344556677885f5f5f5f5f5f 64 plan9 FUCOM F0
+dde8|11223344556677885f5f5f5f5f5f 32 intel fucomp st0, st0
+dde8|11223344556677885f5f5f5f5f5f 32 plan9 FUCOMP F0
+dde8|11223344556677885f5f5f5f5f5f 64 gnu fucomp %st
+dde8|11223344556677885f5f5f5f5f5f 64 intel fucomp st0, st0
+dde8|11223344556677885f5f5f5f5f5f 64 plan9 FUCOMP F0
+de00|11223344556677885f5f5f5f5f5f 32 intel fiadd st0, word ptr [eax]
+de00|11223344556677885f5f5f5f5f5f 32 plan9 FIADD 0(AX)
+de00|11223344556677885f5f5f5f5f5f 64 gnu fiadd (%rax)
+de00|11223344556677885f5f5f5f5f5f 64 intel fiadd st0, word ptr [rax]
+de00|11223344556677885f5f5f5f5f5f 64 plan9 FIADD 0(AX)
+de08|11223344556677885f5f5f5f5f5f 32 intel fimul st0, word ptr [eax]
+de08|11223344556677885f5f5f5f5f5f 32 plan9 FIMUL 0(AX)
+de08|11223344556677885f5f5f5f5f5f 64 gnu fimul (%rax)
+de08|11223344556677885f5f5f5f5f5f 64 intel fimul st0, word ptr [rax]
+de08|11223344556677885f5f5f5f5f5f 64 plan9 FIMUL 0(AX)
+de11|223344556677885f5f5f5f5f5f5f 32 intel ficom st0, word ptr [ecx]
+de11|223344556677885f5f5f5f5f5f5f 32 plan9 FICOM 0(CX)
+de11|223344556677885f5f5f5f5f5f5f 64 gnu ficom (%rcx)
+de11|223344556677885f5f5f5f5f5f5f 64 intel ficom st0, word ptr [rcx]
+de11|223344556677885f5f5f5f5f5f5f 64 plan9 FICOM 0(CX)
+de18|11223344556677885f5f5f5f5f5f 32 intel ficomp st0, word ptr [eax]
+de18|11223344556677885f5f5f5f5f5f 32 plan9 FICOMP 0(AX)
+de18|11223344556677885f5f5f5f5f5f 64 gnu ficomp (%rax)
+de18|11223344556677885f5f5f5f5f5f 64 intel ficomp st0, word ptr [rax]
+de18|11223344556677885f5f5f5f5f5f 64 plan9 FICOMP 0(AX)
+de20|11223344556677885f5f5f5f5f5f 32 intel fisub st0, word ptr [eax]
+de20|11223344556677885f5f5f5f5f5f 32 plan9 FISUB 0(AX)
+de20|11223344556677885f5f5f5f5f5f 64 gnu fisub (%rax)
+de20|11223344556677885f5f5f5f5f5f 64 intel fisub st0, word ptr [rax]
+de20|11223344556677885f5f5f5f5f5f 64 plan9 FISUB 0(AX)
+de28|11223344556677885f5f5f5f5f5f 32 intel fisubr st0, word ptr [eax]
+de28|11223344556677885f5f5f5f5f5f 32 plan9 FISUBR 0(AX)
+de28|11223344556677885f5f5f5f5f5f 64 gnu fisubr (%rax)
+de28|11223344556677885f5f5f5f5f5f 64 intel fisubr st0, word ptr [rax]
+de28|11223344556677885f5f5f5f5f5f 64 plan9 FISUBR 0(AX)
+de30|11223344556677885f5f5f5f5f5f 32 intel fidiv st0, word ptr [eax]
+de30|11223344556677885f5f5f5f5f5f 32 plan9 FIDIV 0(AX)
+de30|11223344556677885f5f5f5f5f5f 64 gnu fidiv (%rax)
+de30|11223344556677885f5f5f5f5f5f 64 intel fidiv st0, word ptr [rax]
+de30|11223344556677885f5f5f5f5f5f 64 plan9 FIDIV 0(AX)
+de38|11223344556677885f5f5f5f5f5f 32 intel fidivr st0, word ptr [eax]
+de38|11223344556677885f5f5f5f5f5f 32 plan9 FIDIVR 0(AX)
+de38|11223344556677885f5f5f5f5f5f 64 gnu fidivr (%rax)
+de38|11223344556677885f5f5f5f5f5f 64 intel fidivr st0, word ptr [rax]
+de38|11223344556677885f5f5f5f5f5f 64 plan9 FIDIVR 0(AX)
+dec0|11223344556677885f5f5f5f5f5f 32 intel faddp st0, st0
+dec0|11223344556677885f5f5f5f5f5f 32 plan9 FADDP F0, F0
+dec0|11223344556677885f5f5f5f5f5f 64 gnu faddp %st,%st
+dec0|11223344556677885f5f5f5f5f5f 64 intel faddp st0, st0
+dec0|11223344556677885f5f5f5f5f5f 64 plan9 FADDP F0, F0
+dec8|11223344556677885f5f5f5f5f5f 32 intel fmulp st0, st0
+dec8|11223344556677885f5f5f5f5f5f 32 plan9 FMULP F0, F0
+dec8|11223344556677885f5f5f5f5f5f 64 gnu fmulp %st,%st
+dec8|11223344556677885f5f5f5f5f5f 64 intel fmulp st0, st0
+dec8|11223344556677885f5f5f5f5f5f 64 plan9 FMULP F0, F0
+ded9|11223344556677885f5f5f5f5f5f 32 intel fcompp st0, st1
+ded9|11223344556677885f5f5f5f5f5f 32 plan9 FCOMPP
+ded9|11223344556677885f5f5f5f5f5f 64 gnu fcompp
+ded9|11223344556677885f5f5f5f5f5f 64 intel fcompp st0, st1
+ded9|11223344556677885f5f5f5f5f5f 64 plan9 FCOMPP
+dee0|11223344556677885f5f5f5f5f5f 32 intel fsubrp st0, st0
+dee0|11223344556677885f5f5f5f5f5f 32 plan9 FSUBRP F0, F0
+dee0|11223344556677885f5f5f5f5f5f 64 gnu fsubp %st,%st
+dee0|11223344556677885f5f5f5f5f5f 64 intel fsubrp st0, st0
+dee0|11223344556677885f5f5f5f5f5f 64 plan9 FSUBRP F0, F0
+dee8|11223344556677885f5f5f5f5f5f 32 intel fsubp st0, st0
+dee8|11223344556677885f5f5f5f5f5f 32 plan9 FSUBP F0, F0
+dee8|11223344556677885f5f5f5f5f5f 64 gnu fsubrp %st,%st
+dee8|11223344556677885f5f5f5f5f5f 64 intel fsubp st0, st0
+dee8|11223344556677885f5f5f5f5f5f 64 plan9 FSUBP F0, F0
+def0|11223344556677885f5f5f5f5f5f 32 intel fdivrp st0, st0
+def0|11223344556677885f5f5f5f5f5f 32 plan9 FDIVRP F0, F0
+def0|11223344556677885f5f5f5f5f5f 64 gnu fdivp %st,%st
+def0|11223344556677885f5f5f5f5f5f 64 intel fdivrp st0, st0
+def0|11223344556677885f5f5f5f5f5f 64 plan9 FDIVRP F0, F0
+def8|11223344556677885f5f5f5f5f5f 32 intel fdivp st0, st0
+def8|11223344556677885f5f5f5f5f5f 32 plan9 FDIVP F0, F0
+def8|11223344556677885f5f5f5f5f5f 64 gnu fdivrp %st,%st
+def8|11223344556677885f5f5f5f5f5f 64 intel fdivp st0, st0
+def8|11223344556677885f5f5f5f5f5f 64 plan9 FDIVP F0, F0
+df00|11223344556677885f5f5f5f5f5f 32 intel fild st0, word ptr [eax]
+df00|11223344556677885f5f5f5f5f5f 32 plan9 FILD 0(AX)
+df00|11223344556677885f5f5f5f5f5f 64 gnu fild (%rax)
+df00|11223344556677885f5f5f5f5f5f 64 intel fild st0, word ptr [rax]
+df00|11223344556677885f5f5f5f5f5f 64 plan9 FILD 0(AX)
+df08|11223344556677885f5f5f5f5f5f 32 intel fisttp word ptr [eax], st0
+df08|11223344556677885f5f5f5f5f5f 32 plan9 FISTTP 0(AX)
+df08|11223344556677885f5f5f5f5f5f 64 gnu fisttp (%rax)
+df08|11223344556677885f5f5f5f5f5f 64 intel fisttp word ptr [rax], st0
+df08|11223344556677885f5f5f5f5f5f 64 plan9 FISTTP 0(AX)
+df11|223344556677885f5f5f5f5f5f5f 32 intel fist word ptr [ecx], st0
+df11|223344556677885f5f5f5f5f5f5f 32 plan9 FIST 0(CX)
+df11|223344556677885f5f5f5f5f5f5f 64 gnu fist (%rcx)
+df11|223344556677885f5f5f5f5f5f5f 64 intel fist word ptr [rcx], st0
+df11|223344556677885f5f5f5f5f5f5f 64 plan9 FIST 0(CX)
+df18|11223344556677885f5f5f5f5f5f 32 intel fistp word ptr [eax], st0
+df18|11223344556677885f5f5f5f5f5f 32 plan9 FISTP 0(AX)
+df18|11223344556677885f5f5f5f5f5f 64 gnu fistp (%rax)
+df18|11223344556677885f5f5f5f5f5f 64 intel fistp word ptr [rax], st0
+df18|11223344556677885f5f5f5f5f5f 64 plan9 FISTP 0(AX)
+df20|11223344556677885f5f5f5f5f5f 32 intel fbld st0, ptr [eax]
+df20|11223344556677885f5f5f5f5f5f 32 plan9 FBLD 0(AX)
+df20|11223344556677885f5f5f5f5f5f 64 gnu fbld (%rax)
+df20|11223344556677885f5f5f5f5f5f 64 intel fbld st0, ptr [rax]
+df20|11223344556677885f5f5f5f5f5f 64 plan9 FBLD 0(AX)
+df28|11223344556677885f5f5f5f5f5f 32 intel fild st0, qword ptr [eax]
+df28|11223344556677885f5f5f5f5f5f 32 plan9 FILD 0(AX)
+df28|11223344556677885f5f5f5f5f5f 64 gnu fildll (%rax)
+df28|11223344556677885f5f5f5f5f5f 64 intel fild st0, qword ptr [rax]
+df28|11223344556677885f5f5f5f5f5f 64 plan9 FILD 0(AX)
+df30|11223344556677885f5f5f5f5f5f 32 intel fbstp ptr [eax], st0
+df30|11223344556677885f5f5f5f5f5f 32 plan9 FBSTP 0(AX)
+df30|11223344556677885f5f5f5f5f5f 64 gnu fbstp (%rax)
+df30|11223344556677885f5f5f5f5f5f 64 intel fbstp ptr [rax], st0
+df30|11223344556677885f5f5f5f5f5f 64 plan9 FBSTP 0(AX)
+df38|11223344556677885f5f5f5f5f5f 32 intel fistp qword ptr [eax], st0
+df38|11223344556677885f5f5f5f5f5f 32 plan9 FISTP 0(AX)
+df38|11223344556677885f5f5f5f5f5f 64 gnu fistpll (%rax)
+df38|11223344556677885f5f5f5f5f5f 64 intel fistp qword ptr [rax], st0
+df38|11223344556677885f5f5f5f5f5f 64 plan9 FISTP 0(AX)
+dfc0|11223344556677885f5f5f5f5f5f 32 intel ffreep st0
+dfc0|11223344556677885f5f5f5f5f5f 32 plan9 FFREEP F0
+dfc0|11223344556677885f5f5f5f5f5f 64 gnu ffreep %st
+dfc0|11223344556677885f5f5f5f5f5f 64 intel ffreep st0
+dfc0|11223344556677885f5f5f5f5f5f 64 plan9 FFREEP F0
+dfe0|11223344556677885f5f5f5f5f5f 32 intel fnstsw ax
+dfe0|11223344556677885f5f5f5f5f5f 32 plan9 FNSTSW AX
+dfe0|11223344556677885f5f5f5f5f5f 64 gnu fnstsw %ax
+dfe0|11223344556677885f5f5f5f5f5f 64 intel fnstsw ax
+dfe0|11223344556677885f5f5f5f5f5f 64 plan9 FNSTSW AX
+dfe8|11223344556677885f5f5f5f5f5f 32 intel fucomip st0, st0
+dfe8|11223344556677885f5f5f5f5f5f 32 plan9 FUCOMIP F0, F0
+dfe8|11223344556677885f5f5f5f5f5f 64 gnu fucomip %st,%st
+dfe8|11223344556677885f5f5f5f5f5f 64 intel fucomip st0, st0
+dfe8|11223344556677885f5f5f5f5f5f 64 plan9 FUCOMIP F0, F0
+dff0|11223344556677885f5f5f5f5f5f 32 intel fcomip st0, st0
+dff0|11223344556677885f5f5f5f5f5f 32 plan9 FCOMIP F0, F0
+dff0|11223344556677885f5f5f5f5f5f 64 gnu fcomip %st,%st
+dff0|11223344556677885f5f5f5f5f5f 64 intel fcomip st0, st0
+dff0|11223344556677885f5f5f5f5f5f 64 plan9 FCOMIP F0, F0
+e111|223344556677885f5f5f5f5f5f5f 32 intel loope .+0x11
+e111|223344556677885f5f5f5f5f5f5f 32 plan9 LOOPE .+17
+e111|223344556677885f5f5f5f5f5f5f 64 gnu loope .+0x11
+e111|223344556677885f5f5f5f5f5f5f 64 intel loope .+0x11
+e111|223344556677885f5f5f5f5f5f5f 64 plan9 LOOPE .+17
+e211|223344556677885f5f5f5f5f5f5f 32 intel loop .+0x11
+e211|223344556677885f5f5f5f5f5f5f 32 plan9 LOOP .+17
+e211|223344556677885f5f5f5f5f5f5f 64 gnu loop .+0x11
+e211|223344556677885f5f5f5f5f5f5f 64 intel loop .+0x11
+e211|223344556677885f5f5f5f5f5f5f 64 plan9 LOOP .+17
+e311|223344556677885f5f5f5f5f5f5f 32 intel jecxz .+0x11
+e311|223344556677885f5f5f5f5f5f5f 32 plan9 JECXZ .+17
+e311|223344556677885f5f5f5f5f5f5f 64 gnu jrcxz .+0x11
+e311|223344556677885f5f5f5f5f5f5f 64 intel jrcxz .+0x11
+e311|223344556677885f5f5f5f5f5f5f 64 plan9 JRCXZ .+17
+e411|223344556677885f5f5f5f5f5f5f 32 intel in al, 0x11
+e411|223344556677885f5f5f5f5f5f5f 32 plan9 INL $0x11, AL
+e411|223344556677885f5f5f5f5f5f5f 64 gnu in $0x11,%al
+e411|223344556677885f5f5f5f5f5f5f 64 intel in al, 0x11
+e411|223344556677885f5f5f5f5f5f5f 64 plan9 INL $0x11, AL
+e511|223344556677885f5f5f5f5f5f5f 32 intel in eax, 0x11
+e511|223344556677885f5f5f5f5f5f5f 32 plan9 INL $0x11, AX
+e511|223344556677885f5f5f5f5f5f5f 64 gnu in $0x11,%eax
+e511|223344556677885f5f5f5f5f5f5f 64 intel in eax, 0x11
+e511|223344556677885f5f5f5f5f5f5f 64 plan9 INL $0x11, AX
+e611|223344556677885f5f5f5f5f5f5f 32 intel out 0x11, al
+e611|223344556677885f5f5f5f5f5f5f 32 plan9 OUTL AL, $0x11
+e611|223344556677885f5f5f5f5f5f5f 64 gnu out %al,$0x11
+e611|223344556677885f5f5f5f5f5f5f 64 intel out 0x11, al
+e611|223344556677885f5f5f5f5f5f5f 64 plan9 OUTL AL, $0x11
+e711|223344556677885f5f5f5f5f5f5f 32 intel out 0x11, eax
+e711|223344556677885f5f5f5f5f5f5f 32 plan9 OUTL AX, $0x11
+e711|223344556677885f5f5f5f5f5f5f 64 gnu out %eax,$0x11
+e711|223344556677885f5f5f5f5f5f5f 64 intel out 0x11, eax
+e711|223344556677885f5f5f5f5f5f5f 64 plan9 OUTL AX, $0x11
+e811223344|556677885f5f5f5f5f5f5f 32 intel call .+0x44332211
+e811223344|556677885f5f5f5f5f5f5f 32 plan9 CALL .+1144201745
+e811223344|556677885f5f5f5f5f5f5f 64 gnu callq .+0x44332211
+e811223344|556677885f5f5f5f5f5f5f 64 intel call .+0x44332211
+e811223344|556677885f5f5f5f5f5f5f 64 plan9 CALL .+1144201745
+e911223344|556677885f5f5f5f5f5f5f 32 intel jmp .+0x44332211
+e911223344|556677885f5f5f5f5f5f5f 32 plan9 JMP .+1144201745
+e911223344|556677885f5f5f5f5f5f5f 64 gnu jmpq .+0x44332211
+e911223344|556677885f5f5f5f5f5f5f 64 intel jmp .+0x44332211
+e911223344|556677885f5f5f5f5f5f5f 64 plan9 JMP .+1144201745
+ea112233445566|77885f5f5f5f5f5f5f 32 intel jmp far 0x44332211, 0x6655
+ea112233445566|77885f5f5f5f5f5f5f 32 plan9 LJMP $0x44332211, $0x6655
+eb11|223344556677885f5f5f5f5f5f5f 32 intel jmp .+0x11
+eb11|223344556677885f5f5f5f5f5f5f 32 plan9 JMP .+17
+eb11|223344556677885f5f5f5f5f5f5f 64 gnu jmp .+0x11
+eb11|223344556677885f5f5f5f5f5f5f 64 intel jmp .+0x11
+eb11|223344556677885f5f5f5f5f5f5f 64 plan9 JMP .+17
+ec|11223344556677885f5f5f5f5f5f5f 32 intel in al, dx
+ec|11223344556677885f5f5f5f5f5f5f 32 plan9 INL DX, AL
+ec|11223344556677885f5f5f5f5f5f5f 64 gnu in (%dx),%al
+ec|11223344556677885f5f5f5f5f5f5f 64 intel in al, dx
+ec|11223344556677885f5f5f5f5f5f5f 64 plan9 INL DX, AL
+ed|11223344556677885f5f5f5f5f5f5f 32 intel in eax, dx
+ed|11223344556677885f5f5f5f5f5f5f 32 plan9 INL DX, AX
+ed|11223344556677885f5f5f5f5f5f5f 64 gnu in (%dx),%eax
+ed|11223344556677885f5f5f5f5f5f5f 64 intel in eax, dx
+ed|11223344556677885f5f5f5f5f5f5f 64 plan9 INL DX, AX
+ee|11223344556677885f5f5f5f5f5f5f 32 intel out dx, al
+ee|11223344556677885f5f5f5f5f5f5f 32 plan9 OUTL AL, DX
+ee|11223344556677885f5f5f5f5f5f5f 64 gnu out %al,(%dx)
+ee|11223344556677885f5f5f5f5f5f5f 64 intel out dx, al
+ee|11223344556677885f5f5f5f5f5f5f 64 plan9 OUTL AL, DX
+ef|11223344556677885f5f5f5f5f5f5f 32 intel out dx, eax
+ef|11223344556677885f5f5f5f5f5f5f 32 plan9 OUTL AX, DX
+ef|11223344556677885f5f5f5f5f5f5f 64 gnu out %eax,(%dx)
+ef|11223344556677885f5f5f5f5f5f5f 64 intel out dx, eax
+ef|11223344556677885f5f5f5f5f5f5f 64 plan9 OUTL AX, DX
+f1|11223344556677885f5f5f5f5f5f5f 32 intel int1
+f1|11223344556677885f5f5f5f5f5f5f 32 plan9 ICEBP
+f1|11223344556677885f5f5f5f5f5f5f 64 gnu icebp
+f1|11223344556677885f5f5f5f5f5f5f 64 intel int1
+f1|11223344556677885f5f5f5f5f5f5f 64 plan9 ICEBP
+f20f1011|223344556677885f5f5f5f5f 32 intel movsd xmm2, qword ptr [ecx]
+f20f1011|223344556677885f5f5f5f5f 32 plan9 REPNE MOVSD_XMM 0(CX), X2
+f20f1011|223344556677885f5f5f5f5f 64 gnu movsd (%rcx),%xmm2
+f20f1011|223344556677885f5f5f5f5f 64 intel movsd xmm2, qword ptr [rcx]
+f20f1011|223344556677885f5f5f5f5f 64 plan9 REPNE MOVSD_XMM 0(CX), X2
+f20f1122|3344556677885f5f5f5f5f5f 32 intel movsd qword ptr [edx], xmm4
+f20f1122|3344556677885f5f5f5f5f5f 32 plan9 REPNE MOVSD_XMM X4, 0(DX)
+f20f1122|3344556677885f5f5f5f5f5f 64 gnu movsd %xmm4,(%rdx)
+f20f1122|3344556677885f5f5f5f5f5f 64 intel movsd qword ptr [rdx], xmm4
+f20f1122|3344556677885f5f5f5f5f5f 64 plan9 REPNE MOVSD_XMM X4, 0(DX)
+f20f1211|223344556677885f5f5f5f5f 32 intel movddup xmm2, qword ptr [ecx]
+f20f1211|223344556677885f5f5f5f5f 32 plan9 REPNE MOVDDUP 0(CX), X2
+f20f1211|223344556677885f5f5f5f5f 64 gnu movddup (%rcx),%xmm2
+f20f1211|223344556677885f5f5f5f5f 64 intel movddup xmm2, qword ptr [rcx]
+f20f1211|223344556677885f5f5f5f5f 64 plan9 REPNE MOVDDUP 0(CX), X2
+f20f2a11|223344556677885f5f5f5f5f 32 intel cvtsi2sd xmm2, dword ptr [ecx]
+f20f2a11|223344556677885f5f5f5f5f 32 plan9 REPNE CVTSI2SDL 0(CX), X2
+f20f2a11|223344556677885f5f5f5f5f 64 gnu cvtsi2sdl (%rcx),%xmm2
+f20f2a11|223344556677885f5f5f5f5f 64 intel cvtsi2sd xmm2, dword ptr [rcx]
+f20f2a11|223344556677885f5f5f5f5f 64 plan9 REPNE CVTSI2SDL 0(CX), X2
+f20f2c11|223344556677885f5f5f5f5f 32 intel cvttsd2si edx, qword ptr [ecx]
+f20f2c11|223344556677885f5f5f5f5f 32 plan9 REPNE CVTTSD2SIL 0(CX), DX
+f20f2c11|223344556677885f5f5f5f5f 64 gnu cvttsd2si (%rcx),%edx
+f20f2c11|223344556677885f5f5f5f5f 64 intel cvttsd2si edx, qword ptr [rcx]
+f20f2c11|223344556677885f5f5f5f5f 64 plan9 REPNE CVTTSD2SIL 0(CX), DX
+f20f2d11|223344556677885f5f5f5f5f 32 intel cvtsd2si edx, qword ptr [ecx]
+f20f2d11|223344556677885f5f5f5f5f 32 plan9 REPNE CVTSD2SIL 0(CX), DX
+f20f2d11|223344556677885f5f5f5f5f 64 gnu cvtsd2si (%rcx),%edx
+f20f2d11|223344556677885f5f5f5f5f 64 intel cvtsd2si edx, qword ptr [rcx]
+f20f2d11|223344556677885f5f5f5f5f 64 plan9 REPNE CVTSD2SIL 0(CX), DX
+f20f38f011|223344556677885f5f5f5f 32 intel crc32 edx, byte ptr [ecx]
+f20f38f011|223344556677885f5f5f5f 32 plan9 REPNE CRC32 0(CX), DX
+f20f38f011|223344556677885f5f5f5f 64 gnu crc32b (%rcx),%edx
+f20f38f011|223344556677885f5f5f5f 64 intel crc32 edx, byte ptr [rcx]
+f20f38f011|223344556677885f5f5f5f 64 plan9 REPNE CRC32 0(CX), DX
+f20f38f111|223344556677885f5f5f5f 32 intel crc32 edx, dword ptr [ecx]
+f20f38f111|223344556677885f5f5f5f 32 plan9 REPNE CRC32 0(CX), DX
+f20f38f111|223344556677885f5f5f5f 64 gnu crc32l (%rcx),%edx
+f20f38f111|223344556677885f5f5f5f 64 intel crc32 edx, dword ptr [rcx]
+f20f38f111|223344556677885f5f5f5f 64 plan9 REPNE CRC32 0(CX), DX
+f20f5111|223344556677885f5f5f5f5f 32 intel sqrtsd xmm2, qword ptr [ecx]
+f20f5111|223344556677885f5f5f5f5f 32 plan9 REPNE SQRTSD 0(CX), X2
+f20f5111|223344556677885f5f5f5f5f 64 gnu sqrtsd (%rcx),%xmm2
+f20f5111|223344556677885f5f5f5f5f 64 intel sqrtsd xmm2, qword ptr [rcx]
+f20f5111|223344556677885f5f5f5f5f 64 plan9 REPNE SQRTSD 0(CX), X2
+f20f5811|223344556677885f5f5f5f5f 32 intel addsd xmm2, qword ptr [ecx]
+f20f5811|223344556677885f5f5f5f5f 32 plan9 REPNE ADDSD 0(CX), X2
+f20f5811|223344556677885f5f5f5f5f 64 gnu addsd (%rcx),%xmm2
+f20f5811|223344556677885f5f5f5f5f 64 intel addsd xmm2, qword ptr [rcx]
+f20f5811|223344556677885f5f5f5f5f 64 plan9 REPNE ADDSD 0(CX), X2
+f20f5911|223344556677885f5f5f5f5f 32 intel mulsd xmm2, qword ptr [ecx]
+f20f5911|223344556677885f5f5f5f5f 32 plan9 REPNE MULSD 0(CX), X2
+f20f5911|223344556677885f5f5f5f5f 64 gnu mulsd (%rcx),%xmm2
+f20f5911|223344556677885f5f5f5f5f 64 intel mulsd xmm2, qword ptr [rcx]
+f20f5911|223344556677885f5f5f5f5f 64 plan9 REPNE MULSD 0(CX), X2
+f20f5a11|223344556677885f5f5f5f5f 32 intel cvtsd2ss xmm2, qword ptr [ecx]
+f20f5a11|223344556677885f5f5f5f5f 32 plan9 REPNE CVTSD2SS 0(CX), X2
+f20f5a11|223344556677885f5f5f5f5f 64 gnu cvtsd2ss (%rcx),%xmm2
+f20f5a11|223344556677885f5f5f5f5f 64 intel cvtsd2ss xmm2, qword ptr [rcx]
+f20f5a11|223344556677885f5f5f5f5f 64 plan9 REPNE CVTSD2SS 0(CX), X2
+f20f5c11|223344556677885f5f5f5f5f 32 intel subsd xmm2, qword ptr [ecx]
+f20f5c11|223344556677885f5f5f5f5f 32 plan9 REPNE SUBSD 0(CX), X2
+f20f5c11|223344556677885f5f5f5f5f 64 gnu subsd (%rcx),%xmm2
+f20f5c11|223344556677885f5f5f5f5f 64 intel subsd xmm2, qword ptr [rcx]
+f20f5c11|223344556677885f5f5f5f5f 64 plan9 REPNE SUBSD 0(CX), X2
+f20f5d11|223344556677885f5f5f5f5f 32 intel minsd xmm2, qword ptr [ecx]
+f20f5d11|223344556677885f5f5f5f5f 32 plan9 REPNE MINSD 0(CX), X2
+f20f5d11|223344556677885f5f5f5f5f 64 gnu minsd (%rcx),%xmm2
+f20f5d11|223344556677885f5f5f5f5f 64 intel minsd xmm2, qword ptr [rcx]
+f20f5d11|223344556677885f5f5f5f5f 64 plan9 REPNE MINSD 0(CX), X2
+f20f5e11|223344556677885f5f5f5f5f 32 intel divsd xmm2, qword ptr [ecx]
+f20f5e11|223344556677885f5f5f5f5f 32 plan9 REPNE DIVSD 0(CX), X2
+f20f5e11|223344556677885f5f5f5f5f 64 gnu divsd (%rcx),%xmm2
+f20f5e11|223344556677885f5f5f5f5f 64 intel divsd xmm2, qword ptr [rcx]
+f20f5e11|223344556677885f5f5f5f5f 64 plan9 REPNE DIVSD 0(CX), X2
+f20f5f11|223344556677885f5f5f5f5f 32 intel maxsd xmm2, qword ptr [ecx]
+f20f5f11|223344556677885f5f5f5f5f 32 plan9 REPNE MAXSD 0(CX), X2
+f20f5f11|223344556677885f5f5f5f5f 64 gnu maxsd (%rcx),%xmm2
+f20f5f11|223344556677885f5f5f5f5f 64 intel maxsd xmm2, qword ptr [rcx]
+f20f5f11|223344556677885f5f5f5f5f 64 plan9 REPNE MAXSD 0(CX), X2
+f20f701122|3344556677885f5f5f5f5f 32 intel pshuflw xmm2, xmmword ptr [ecx], 0x22
+f20f701122|3344556677885f5f5f5f5f 32 plan9 REPNE PSHUFLW $0x22, 0(CX), X2
+f20f701122|3344556677885f5f5f5f5f 64 gnu pshuflw $0x22,(%rcx),%xmm2
+f20f701122|3344556677885f5f5f5f5f 64 intel pshuflw xmm2, xmmword ptr [rcx], 0x22
+f20f701122|3344556677885f5f5f5f5f 64 plan9 REPNE PSHUFLW $0x22, 0(CX), X2
+f20f7c11|223344556677885f5f5f5f5f 32 intel haddps xmm2, xmmword ptr [ecx]
+f20f7c11|223344556677885f5f5f5f5f 32 plan9 REPNE HADDPS 0(CX), X2
+f20f7c11|223344556677885f5f5f5f5f 64 gnu haddps (%rcx),%xmm2
+f20f7c11|223344556677885f5f5f5f5f 64 intel haddps xmm2, xmmword ptr [rcx]
+f20f7c11|223344556677885f5f5f5f5f 64 plan9 REPNE HADDPS 0(CX), X2
+f20f7d11|223344556677885f5f5f5f5f 32 intel hsubps xmm2, xmmword ptr [ecx]
+f20f7d11|223344556677885f5f5f5f5f 32 plan9 REPNE HSUBPS 0(CX), X2
+f20f7d11|223344556677885f5f5f5f5f 64 gnu hsubps (%rcx),%xmm2
+f20f7d11|223344556677885f5f5f5f5f 64 intel hsubps xmm2, xmmword ptr [rcx]
+f20f7d11|223344556677885f5f5f5f5f 64 plan9 REPNE HSUBPS 0(CX), X2
+f20fc21122|3344556677885f5f5f5f5f 32 intel cmpsd_xmm xmm2, qword ptr [ecx], 0x22
+f20fc21122|3344556677885f5f5f5f5f 32 plan9 REPNE CMPSD_XMM $0x22, 0(CX), X2
+f20fc21122|3344556677885f5f5f5f5f 64 gnu cmpsd $0x22,(%rcx),%xmm2
+f20fc21122|3344556677885f5f5f5f5f 64 intel cmpsd_xmm xmm2, qword ptr [rcx], 0x22
+f20fc21122|3344556677885f5f5f5f5f 64 plan9 REPNE CMPSD_XMM $0x22, 0(CX), X2
+f20fd011|223344556677885f5f5f5f5f 32 intel addsubps xmm2, xmmword ptr [ecx]
+f20fd011|223344556677885f5f5f5f5f 32 plan9 REPNE ADDSUBPS 0(CX), X2
+f20fd011|223344556677885f5f5f5f5f 64 gnu addsubps (%rcx),%xmm2
+f20fd011|223344556677885f5f5f5f5f 64 intel addsubps xmm2, xmmword ptr [rcx]
+f20fd011|223344556677885f5f5f5f5f 64 plan9 REPNE ADDSUBPS 0(CX), X2
+f20fd6c0|11223344556677885f5f5f5f 32 intel movdq2q mmx0, xmm0
+f20fd6c0|11223344556677885f5f5f5f 32 plan9 REPNE MOVDQ2Q X0, M0
+f20fd6c0|11223344556677885f5f5f5f 64 gnu movdq2q %xmm0,%mm0
+f20fd6c0|11223344556677885f5f5f5f 64 intel movdq2q mmx0, xmm0
+f20fd6c0|11223344556677885f5f5f5f 64 plan9 REPNE MOVDQ2Q X0, M0
+f20fe611|223344556677885f5f5f5f5f 32 intel cvtpd2dq xmm2, xmmword ptr [ecx]
+f20fe611|223344556677885f5f5f5f5f 32 plan9 REPNE CVTPD2DQ 0(CX), X2
+f20fe611|223344556677885f5f5f5f5f 64 gnu cvtpd2dq (%rcx),%xmm2
+f20fe611|223344556677885f5f5f5f5f 64 intel cvtpd2dq xmm2, xmmword ptr [rcx]
+f20fe611|223344556677885f5f5f5f5f 64 plan9 REPNE CVTPD2DQ 0(CX), X2
+f20ff011|223344556677885f5f5f5f5f 32 intel lddqu xmm2, xmmword ptr [ecx]
+f20ff011|223344556677885f5f5f5f5f 32 plan9 REPNE LDDQU 0(CX), X2
+f20ff011|223344556677885f5f5f5f5f 64 gnu lddqu (%rcx),%xmm2
+f20ff011|223344556677885f5f5f5f5f 64 intel lddqu xmm2, xmmword ptr [rcx]
+f20ff011|223344556677885f5f5f5f5f 64 plan9 REPNE LDDQU 0(CX), X2
+f2480f2a11|223344556677885f5f5f5f 64 gnu cvtsi2sdq (%rcx),%xmm2
+f2480f2a11|223344556677885f5f5f5f 64 intel cvtsi2sd xmm2, qword ptr [rcx]
+f2480f2a11|223344556677885f5f5f5f 64 plan9 REPNE CVTSI2SDQ 0(CX), X2
+f2480f2c11|223344556677885f5f5f5f 64 gnu cvttsd2si (%rcx),%rdx
+f2480f2c11|223344556677885f5f5f5f 64 intel cvttsd2si rdx, qword ptr [rcx]
+f2480f2c11|223344556677885f5f5f5f 64 plan9 REPNE CVTTSD2SIQ 0(CX), DX
+f2480f2d11|223344556677885f5f5f5f 64 gnu cvtsd2si (%rcx),%rdx
+f2480f2d11|223344556677885f5f5f5f 64 intel cvtsd2si rdx, qword ptr [rcx]
+f2480f2d11|223344556677885f5f5f5f 64 plan9 REPNE CVTSD2SIQ 0(CX), DX
+f2480f38f011|223344556677885f5f5f 64 gnu crc32b (%rcx),%rdx
+f2480f38f011|223344556677885f5f5f 64 intel crc32 rdx, byte ptr [rcx]
+f2480f38f011|223344556677885f5f5f 64 plan9 REPNE CRC32 0(CX), DX
+f2480f38f111|223344556677885f5f5f 64 gnu crc32q (%rcx),%rdx
+f2480f38f111|223344556677885f5f5f 64 intel crc32 rdx, qword ptr [rcx]
+f2480f38f111|223344556677885f5f5f 64 plan9 REPNE CRC32 0(CX), DX
+f267f0663e360f38f111|223344556677 32 intel lock crc32 edx, word ptr ss:[bx+di*1]
+f267f0663e360f38f111|223344556677 32 plan9 SS CRC32 SS:0(BX)(DI*1), DX
+f267f0663e360f38f111|223344556677 64 gnu lock crc32w %ds:%ss:(%ecx),%edx
+f267f0663e360f38f111|223344556677 64 intel lock crc32 edx, word ptr [ecx]
+f267f0663e360f38f111|223344556677 64 plan9 SS CRC32 0(CX), DX
+f2f30f2b11|5f5f5f5f5f5f5f5f5f5f5f 32 intel movntss dword ptr [ecx], xmm2
+f2f30f2b11|5f5f5f5f5f5f5f5f5f5f5f 32 plan9 REP MOVNTSS X2, 0(CX)
+f2f30f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 gnu repn movntss %xmm2,(%rcx)
+f2f30f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 intel movntss dword ptr [rcx], xmm2
+f2f30f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 plan9 REP MOVNTSS X2, 0(CX)
+f30f1011|223344556677885f5f5f5f5f 32 intel movss xmm2, dword ptr [ecx]
+f30f1011|223344556677885f5f5f5f5f 32 plan9 REP MOVSS 0(CX), X2
+f30f1011|223344556677885f5f5f5f5f 64 gnu movss (%rcx),%xmm2
+f30f1011|223344556677885f5f5f5f5f 64 intel movss xmm2, dword ptr [rcx]
+f30f1011|223344556677885f5f5f5f5f 64 plan9 REP MOVSS 0(CX), X2
+f30f1122|3344556677885f5f5f5f5f5f 32 intel movss dword ptr [edx], xmm4
+f30f1122|3344556677885f5f5f5f5f5f 32 plan9 REP MOVSS X4, 0(DX)
+f30f1122|3344556677885f5f5f5f5f5f 64 gnu movss %xmm4,(%rdx)
+f30f1122|3344556677885f5f5f5f5f5f 64 intel movss dword ptr [rdx], xmm4
+f30f1122|3344556677885f5f5f5f5f5f 64 plan9 REP MOVSS X4, 0(DX)
+f30f1211|223344556677885f5f5f5f5f 32 intel movsldup xmm2, xmmword ptr [ecx]
+f30f1211|223344556677885f5f5f5f5f 32 plan9 REP MOVSLDUP 0(CX), X2
+f30f1211|223344556677885f5f5f5f5f 64 gnu movsldup (%rcx),%xmm2
+f30f1211|223344556677885f5f5f5f5f 64 intel movsldup xmm2, xmmword ptr [rcx]
+f30f1211|223344556677885f5f5f5f5f 64 plan9 REP MOVSLDUP 0(CX), X2
+f30f1611|223344556677885f5f5f5f5f 32 intel movshdup xmm2, xmmword ptr [ecx]
+f30f1611|223344556677885f5f5f5f5f 32 plan9 REP MOVSHDUP 0(CX), X2
+f30f1611|223344556677885f5f5f5f5f 64 gnu movshdup (%rcx),%xmm2
+f30f1611|223344556677885f5f5f5f5f 64 intel movshdup xmm2, xmmword ptr [rcx]
+f30f1611|223344556677885f5f5f5f5f 64 plan9 REP MOVSHDUP 0(CX), X2
+f30f2a11|223344556677885f5f5f5f5f 32 intel cvtsi2ss xmm2, dword ptr [ecx]
+f30f2a11|223344556677885f5f5f5f5f 32 plan9 REP CVTSI2SSL 0(CX), X2
+f30f2a11|223344556677885f5f5f5f5f 64 gnu cvtsi2ssl (%rcx),%xmm2
+f30f2a11|223344556677885f5f5f5f5f 64 intel cvtsi2ss xmm2, dword ptr [rcx]
+f30f2a11|223344556677885f5f5f5f5f 64 plan9 REP CVTSI2SSL 0(CX), X2
+f30f2c11|223344556677885f5f5f5f5f 32 intel cvttss2si edx, dword ptr [ecx]
+f30f2c11|223344556677885f5f5f5f5f 32 plan9 REP CVTTSS2SIL 0(CX), DX
+f30f2c11|223344556677885f5f5f5f5f 64 gnu cvttss2si (%rcx),%edx
+f30f2c11|223344556677885f5f5f5f5f 64 intel cvttss2si edx, dword ptr [rcx]
+f30f2c11|223344556677885f5f5f5f5f 64 plan9 REP CVTTSS2SIL 0(CX), DX
+f30f2d11|223344556677885f5f5f5f5f 32 intel cvtss2si edx, dword ptr [ecx]
+f30f2d11|223344556677885f5f5f5f5f 32 plan9 REP CVTSS2SIL 0(CX), DX
+f30f2d11|223344556677885f5f5f5f5f 64 gnu cvtss2si (%rcx),%edx
+f30f2d11|223344556677885f5f5f5f5f 64 intel cvtss2si edx, dword ptr [rcx]
+f30f2d11|223344556677885f5f5f5f5f 64 plan9 REP CVTSS2SIL 0(CX), DX
+f30f5111|223344556677885f5f5f5f5f 32 intel sqrtss xmm2, dword ptr [ecx]
+f30f5111|223344556677885f5f5f5f5f 32 plan9 REP SQRTSS 0(CX), X2
+f30f5111|223344556677885f5f5f5f5f 64 gnu sqrtss (%rcx),%xmm2
+f30f5111|223344556677885f5f5f5f5f 64 intel sqrtss xmm2, dword ptr [rcx]
+f30f5111|223344556677885f5f5f5f5f 64 plan9 REP SQRTSS 0(CX), X2
+f30f5211|223344556677885f5f5f5f5f 32 intel rsqrtss xmm2, dword ptr [ecx]
+f30f5211|223344556677885f5f5f5f5f 32 plan9 REP RSQRTSS 0(CX), X2
+f30f5211|223344556677885f5f5f5f5f 64 gnu rsqrtss (%rcx),%xmm2
+f30f5211|223344556677885f5f5f5f5f 64 intel rsqrtss xmm2, dword ptr [rcx]
+f30f5211|223344556677885f5f5f5f5f 64 plan9 REP RSQRTSS 0(CX), X2
+f30f5311|223344556677885f5f5f5f5f 32 intel rcpss xmm2, dword ptr [ecx]
+f30f5311|223344556677885f5f5f5f5f 32 plan9 REP RCPSS 0(CX), X2
+f30f5311|223344556677885f5f5f5f5f 64 gnu rcpss (%rcx),%xmm2
+f30f5311|223344556677885f5f5f5f5f 64 intel rcpss xmm2, dword ptr [rcx]
+f30f5311|223344556677885f5f5f5f5f 64 plan9 REP RCPSS 0(CX), X2
+f30f5811|223344556677885f5f5f5f5f 32 intel addss xmm2, dword ptr [ecx]
+f30f5811|223344556677885f5f5f5f5f 32 plan9 REP ADDSS 0(CX), X2
+f30f5811|223344556677885f5f5f5f5f 64 gnu addss (%rcx),%xmm2
+f30f5811|223344556677885f5f5f5f5f 64 intel addss xmm2, dword ptr [rcx]
+f30f5811|223344556677885f5f5f5f5f 64 plan9 REP ADDSS 0(CX), X2
+f30f5911|223344556677885f5f5f5f5f 32 intel mulss xmm2, dword ptr [ecx]
+f30f5911|223344556677885f5f5f5f5f 32 plan9 REP MULSS 0(CX), X2
+f30f5911|223344556677885f5f5f5f5f 64 gnu mulss (%rcx),%xmm2
+f30f5911|223344556677885f5f5f5f5f 64 intel mulss xmm2, dword ptr [rcx]
+f30f5911|223344556677885f5f5f5f5f 64 plan9 REP MULSS 0(CX), X2
+f30f5a11|223344556677885f5f5f5f5f 32 intel cvtss2sd xmm2, dword ptr [ecx]
+f30f5a11|223344556677885f5f5f5f5f 32 plan9 REP CVTSS2SD 0(CX), X2
+f30f5a11|223344556677885f5f5f5f5f 64 gnu cvtss2sd (%rcx),%xmm2
+f30f5a11|223344556677885f5f5f5f5f 64 intel cvtss2sd xmm2, dword ptr [rcx]
+f30f5a11|223344556677885f5f5f5f5f 64 plan9 REP CVTSS2SD 0(CX), X2
+f30f5b11|223344556677885f5f5f5f5f 32 intel cvttps2dq xmm2, xmmword ptr [ecx]
+f30f5b11|223344556677885f5f5f5f5f 32 plan9 REP CVTTPS2DQ 0(CX), X2
+f30f5b11|223344556677885f5f5f5f5f 64 gnu cvttps2dq (%rcx),%xmm2
+f30f5b11|223344556677885f5f5f5f5f 64 intel cvttps2dq xmm2, xmmword ptr [rcx]
+f30f5b11|223344556677885f5f5f5f5f 64 plan9 REP CVTTPS2DQ 0(CX), X2
+f30f5c11|223344556677885f5f5f5f5f 32 intel subss xmm2, dword ptr [ecx]
+f30f5c11|223344556677885f5f5f5f5f 32 plan9 REP SUBSS 0(CX), X2
+f30f5c11|223344556677885f5f5f5f5f 64 gnu subss (%rcx),%xmm2
+f30f5c11|223344556677885f5f5f5f5f 64 intel subss xmm2, dword ptr [rcx]
+f30f5c11|223344556677885f5f5f5f5f 64 plan9 REP SUBSS 0(CX), X2
+f30f5d11|223344556677885f5f5f5f5f 32 intel minss xmm2, dword ptr [ecx]
+f30f5d11|223344556677885f5f5f5f5f 32 plan9 REP MINSS 0(CX), X2
+f30f5d11|223344556677885f5f5f5f5f 64 gnu minss (%rcx),%xmm2
+f30f5d11|223344556677885f5f5f5f5f 64 intel minss xmm2, dword ptr [rcx]
+f30f5d11|223344556677885f5f5f5f5f 64 plan9 REP MINSS 0(CX), X2
+f30f5e11|223344556677885f5f5f5f5f 32 intel divss xmm2, dword ptr [ecx]
+f30f5e11|223344556677885f5f5f5f5f 32 plan9 REP DIVSS 0(CX), X2
+f30f5e11|223344556677885f5f5f5f5f 64 gnu divss (%rcx),%xmm2
+f30f5e11|223344556677885f5f5f5f5f 64 intel divss xmm2, dword ptr [rcx]
+f30f5e11|223344556677885f5f5f5f5f 64 plan9 REP DIVSS 0(CX), X2
+f30f5f11|223344556677885f5f5f5f5f 32 intel maxss xmm2, dword ptr [ecx]
+f30f5f11|223344556677885f5f5f5f5f 32 plan9 REP MAXSS 0(CX), X2
+f30f5f11|223344556677885f5f5f5f5f 64 gnu maxss (%rcx),%xmm2
+f30f5f11|223344556677885f5f5f5f5f 64 intel maxss xmm2, dword ptr [rcx]
+f30f5f11|223344556677885f5f5f5f5f 64 plan9 REP MAXSS 0(CX), X2
+f30f6f11|223344556677885f5f5f5f5f 32 intel movdqu xmm2, xmmword ptr [ecx]
+f30f6f11|223344556677885f5f5f5f5f 32 plan9 REP MOVDQU 0(CX), X2
+f30f6f11|223344556677885f5f5f5f5f 64 gnu movdqu (%rcx),%xmm2
+f30f6f11|223344556677885f5f5f5f5f 64 intel movdqu xmm2, xmmword ptr [rcx]
+f30f6f11|223344556677885f5f5f5f5f 64 plan9 REP MOVDQU 0(CX), X2
+f30f701122|3344556677885f5f5f5f5f 32 intel pshufhw xmm2, xmmword ptr [ecx], 0x22
+f30f701122|3344556677885f5f5f5f5f 32 plan9 REP PSHUFHW $0x22, 0(CX), X2
+f30f701122|3344556677885f5f5f5f5f 64 gnu pshufhw $0x22,(%rcx),%xmm2
+f30f701122|3344556677885f5f5f5f5f 64 intel pshufhw xmm2, xmmword ptr [rcx], 0x22
+f30f701122|3344556677885f5f5f5f5f 64 plan9 REP PSHUFHW $0x22, 0(CX), X2
+f30f7e11|223344556677885f5f5f5f5f 32 intel movq xmm2, qword ptr [ecx]
+f30f7e11|223344556677885f5f5f5f5f 32 plan9 REP MOVQ 0(CX), X2
+f30f7e11|223344556677885f5f5f5f5f 64 gnu movq (%rcx),%xmm2
+f30f7e11|223344556677885f5f5f5f5f 64 intel movq xmm2, qword ptr [rcx]
+f30f7e11|223344556677885f5f5f5f5f 64 plan9 REP MOVQ 0(CX), X2
+f30f7f11|223344556677885f5f5f5f5f 32 intel movdqu xmmword ptr [ecx], xmm2
+f30f7f11|223344556677885f5f5f5f5f 32 plan9 REP MOVDQU X2, 0(CX)
+f30f7f11|223344556677885f5f5f5f5f 64 gnu movdqu %xmm2,(%rcx)
+f30f7f11|223344556677885f5f5f5f5f 64 intel movdqu xmmword ptr [rcx], xmm2
+f30f7f11|223344556677885f5f5f5f5f 64 plan9 REP MOVDQU X2, 0(CX)
+f30fae11|223344556677885f5f5f5f5f 64 gnu wrfsbasel (%rcx)
+f30fae11|223344556677885f5f5f5f5f 64 intel wrfsbase dword ptr [rcx]
+f30fae11|223344556677885f5f5f5f5f 64 plan9 REP WRFSBASE 0(CX)
+f30fae18|11223344556677885f5f5f5f 64 gnu wrgsbasel (%rax)
+f30fae18|11223344556677885f5f5f5f 64 intel wrgsbase dword ptr [rax]
+f30fae18|11223344556677885f5f5f5f 64 plan9 REP WRGSBASE 0(AX)
+f30faec0|11223344556677885f5f5f5f 64 gnu rdfsbase %eax
+f30faec0|11223344556677885f5f5f5f 64 intel rdfsbase eax
+f30faec0|11223344556677885f5f5f5f 64 plan9 REP RDFSBASE AX
+f30faec8|11223344556677885f5f5f5f 64 gnu rdgsbase %eax
+f30faec8|11223344556677885f5f5f5f 64 intel rdgsbase eax
+f30faec8|11223344556677885f5f5f5f 64 plan9 REP RDGSBASE AX
+f30fb811|223344556677885f5f5f5f5f 32 intel popcnt edx, dword ptr [ecx]
+f30fb811|223344556677885f5f5f5f5f 32 plan9 REP POPCNT 0(CX), DX
+f30fb811|223344556677885f5f5f5f5f 64 gnu popcnt (%rcx),%edx
+f30fb811|223344556677885f5f5f5f5f 64 intel popcnt edx, dword ptr [rcx]
+f30fb811|223344556677885f5f5f5f5f 64 plan9 REP POPCNT 0(CX), DX
+f30fbc11|223344556677885f5f5f5f5f 32 intel tzcnt edx, dword ptr [ecx]
+f30fbc11|223344556677885f5f5f5f5f 32 plan9 REP TZCNT 0(CX), DX
+f30fbc11|223344556677885f5f5f5f5f 64 gnu tzcnt (%rcx),%edx
+f30fbc11|223344556677885f5f5f5f5f 64 intel tzcnt edx, dword ptr [rcx]
+f30fbc11|223344556677885f5f5f5f5f 64 plan9 REP TZCNT 0(CX), DX
+f30fbd11|223344556677885f5f5f5f5f 32 intel lzcnt edx, dword ptr [ecx]
+f30fbd11|223344556677885f5f5f5f5f 32 plan9 REP LZCNT 0(CX), DX
+f30fbd11|223344556677885f5f5f5f5f 64 gnu lzcnt (%rcx),%edx
+f30fbd11|223344556677885f5f5f5f5f 64 intel lzcnt edx, dword ptr [rcx]
+f30fbd11|223344556677885f5f5f5f5f 64 plan9 REP LZCNT 0(CX), DX
+f30fc21122|3344556677885f5f5f5f5f 32 intel cmpss xmm2, dword ptr [ecx], 0x22
+f30fc21122|3344556677885f5f5f5f5f 32 plan9 REP CMPSS $0x22, 0(CX), X2
+f30fc21122|3344556677885f5f5f5f5f 64 gnu cmpss $0x22,(%rcx),%xmm2
+f30fc21122|3344556677885f5f5f5f5f 64 intel cmpss xmm2, dword ptr [rcx], 0x22
+f30fc21122|3344556677885f5f5f5f5f 64 plan9 REP CMPSS $0x22, 0(CX), X2
+f30fe611|223344556677885f5f5f5f5f 32 intel cvtdq2pd xmm2, qword ptr [ecx]
+f30fe611|223344556677885f5f5f5f5f 32 plan9 REP CVTDQ2PD 0(CX), X2
+f30fe611|223344556677885f5f5f5f5f 64 gnu cvtdq2pd (%rcx),%xmm2
+f30fe611|223344556677885f5f5f5f5f 64 intel cvtdq2pd xmm2, qword ptr [rcx]
+f30fe611|223344556677885f5f5f5f5f 64 plan9 REP CVTDQ2PD 0(CX), X2
+f3480f2a11|223344556677885f5f5f5f 64 gnu cvtsi2ssq (%rcx),%xmm2
+f3480f2a11|223344556677885f5f5f5f 64 intel cvtsi2ss xmm2, qword ptr [rcx]
+f3480f2a11|223344556677885f5f5f5f 64 plan9 REP CVTSI2SSQ 0(CX), X2
+f3480f2c11|223344556677885f5f5f5f 64 gnu cvttss2si (%rcx),%rdx
+f3480f2c11|223344556677885f5f5f5f 64 intel cvttss2si rdx, dword ptr [rcx]
+f3480f2c11|223344556677885f5f5f5f 64 plan9 REP CVTTSS2SIQ 0(CX), DX
+f3480f2d11|223344556677885f5f5f5f 64 gnu cvtss2si (%rcx),%rdx
+f3480f2d11|223344556677885f5f5f5f 64 intel cvtss2si rdx, dword ptr [rcx]
+f3480f2d11|223344556677885f5f5f5f 64 plan9 REP CVTSS2SIQ 0(CX), DX
+f3480fae11|223344556677885f5f5f5f 64 gnu wrfsbaseq (%rcx)
+f3480fae11|223344556677885f5f5f5f 64 intel wrfsbase qword ptr [rcx]
+f3480fae11|223344556677885f5f5f5f 64 plan9 REP WRFSBASE 0(CX)
+f3480fae18|11223344556677885f5f5f 64 gnu wrgsbaseq (%rax)
+f3480fae18|11223344556677885f5f5f 64 intel wrgsbase qword ptr [rax]
+f3480fae18|11223344556677885f5f5f 64 plan9 REP WRGSBASE 0(AX)
+f3480faec0|11223344556677885f5f5f 64 gnu rdfsbase %rax
+f3480faec0|11223344556677885f5f5f 64 intel rdfsbase rax
+f3480faec0|11223344556677885f5f5f 64 plan9 REP RDFSBASE AX
+f3480faec8|11223344556677885f5f5f 64 gnu rdgsbase %rax
+f3480faec8|11223344556677885f5f5f 64 intel rdgsbase rax
+f3480faec8|11223344556677885f5f5f 64 plan9 REP RDGSBASE AX
+f3480fb811|223344556677885f5f5f5f 64 gnu popcnt (%rcx),%rdx
+f3480fb811|223344556677885f5f5f5f 64 intel popcnt rdx, qword ptr [rcx]
+f3480fb811|223344556677885f5f5f5f 64 plan9 REP POPCNT 0(CX), DX
+f3480fbc11|223344556677885f5f5f5f 64 gnu tzcnt (%rcx),%rdx
+f3480fbc11|223344556677885f5f5f5f 64 intel tzcnt rdx, qword ptr [rcx]
+f3480fbc11|223344556677885f5f5f5f 64 plan9 REP TZCNT 0(CX), DX
+f3480fbd11|223344556677885f5f5f5f 64 gnu lzcnt (%rcx),%rdx
+f3480fbd11|223344556677885f5f5f5f 64 intel lzcnt rdx, qword ptr [rcx]
+f3480fbd11|223344556677885f5f5f5f 64 plan9 REP LZCNT 0(CX), DX
+f3660fb811|223344556677885f5f5f5f 32 intel popcnt dx, word ptr [ecx]
+f3660fb811|223344556677885f5f5f5f 32 plan9 POPCNT 0(CX), DX
+f3660fb811|223344556677885f5f5f5f 64 gnu popcnt (%rcx),%dx
+f3660fb811|223344556677885f5f5f5f 64 intel popcnt dx, word ptr [rcx]
+f3660fb811|223344556677885f5f5f5f 64 plan9 POPCNT 0(CX), DX
+f3660fbc11|223344556677885f5f5f5f 32 intel tzcnt dx, word ptr [ecx]
+f3660fbc11|223344556677885f5f5f5f 32 plan9 TZCNT 0(CX), DX
+f3660fbc11|223344556677885f5f5f5f 64 gnu tzcnt (%rcx),%dx
+f3660fbc11|223344556677885f5f5f5f 64 intel tzcnt dx, word ptr [rcx]
+f3660fbc11|223344556677885f5f5f5f 64 plan9 TZCNT 0(CX), DX
+f3660fbd11|223344556677885f5f5f5f 32 intel lzcnt dx, word ptr [ecx]
+f3660fbd11|223344556677885f5f5f5f 32 plan9 LZCNT 0(CX), DX
+f3660fbd11|223344556677885f5f5f5f 64 gnu lzcnt (%rcx),%dx
+f3660fbd11|223344556677885f5f5f5f 64 intel lzcnt dx, word ptr [rcx]
+f3660fbd11|223344556677885f5f5f5f 64 plan9 LZCNT 0(CX), DX
+f3f0673e660f38f111|22334455667788 32 intel lock movbe word ptr [bx+di*1], dx
+f3f0673e660f38f111|22334455667788 32 plan9 MOVBE DX, DS:0(BX)(DI*1)
+f3f0673e660f38f111|22334455667788 64 gnu rep lock movbe %dx,%ds:(%ecx)
+f3f0673e660f38f111|22334455667788 64 intel lock movbe word ptr [ecx], dx
+f3f0673e660f38f111|22334455667788 64 plan9 MOVBE DX, 0(CX)
+f3f20f2b11|5f5f5f5f5f5f5f5f5f5f5f 32 intel movntsd qword ptr [ecx], xmm2
+f3f20f2b11|5f5f5f5f5f5f5f5f5f5f5f 32 plan9 REPNE MOVNTSD X2, 0(CX)
+f3f20f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 gnu repn movntss %xmm2,(%rcx)
+f3f20f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 intel movntsd qword ptr [rcx], xmm2
+f3f20f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 plan9 REPNE MOVNTSD X2, 0(CX)
+f4|11223344556677885f5f5f5f5f5f5f 32 intel hlt
+f4|11223344556677885f5f5f5f5f5f5f 32 plan9 HLT
+f4|11223344556677885f5f5f5f5f5f5f 64 gnu hlt
+f4|11223344556677885f5f5f5f5f5f5f 64 intel hlt
+f4|11223344556677885f5f5f5f5f5f5f 64 plan9 HLT
+f5|11223344556677885f5f5f5f5f5f5f 32 intel cmc
+f5|11223344556677885f5f5f5f5f5f5f 32 plan9 CMC
+f5|11223344556677885f5f5f5f5f5f5f 64 gnu cmc
+f5|11223344556677885f5f5f5f5f5f5f 64 intel cmc
+f5|11223344556677885f5f5f5f5f5f5f 64 plan9 CMC
+f60011|223344556677885f5f5f5f5f5f 32 intel test byte ptr [eax], 0x11
+f60011|223344556677885f5f5f5f5f5f 32 plan9 TESTL $0x11, 0(AX)
+f60011|223344556677885f5f5f5f5f5f 64 gnu testb $0x11,(%rax)
+f60011|223344556677885f5f5f5f5f5f 64 intel test byte ptr [rax], 0x11
+f60011|223344556677885f5f5f5f5f5f 64 plan9 TESTL $0x11, 0(AX)
+f611|223344556677885f5f5f5f5f5f5f 32 intel not byte ptr [ecx]
+f611|223344556677885f5f5f5f5f5f5f 32 plan9 NOTL 0(CX)
+f611|223344556677885f5f5f5f5f5f5f 64 gnu notb (%rcx)
+f611|223344556677885f5f5f5f5f5f5f 64 intel not byte ptr [rcx]
+f611|223344556677885f5f5f5f5f5f5f 64 plan9 NOTL 0(CX)
+f618|11223344556677885f5f5f5f5f5f 32 intel neg byte ptr [eax]
+f618|11223344556677885f5f5f5f5f5f 32 plan9 NEGL 0(AX)
+f618|11223344556677885f5f5f5f5f5f 64 gnu negb (%rax)
+f618|11223344556677885f5f5f5f5f5f 64 intel neg byte ptr [rax]
+f618|11223344556677885f5f5f5f5f5f 64 plan9 NEGL 0(AX)
+f620|11223344556677885f5f5f5f5f5f 32 intel mul byte ptr [eax]
+f620|11223344556677885f5f5f5f5f5f 32 plan9 MULL 0(AX)
+f620|11223344556677885f5f5f5f5f5f 64 gnu mulb (%rax)
+f620|11223344556677885f5f5f5f5f5f 64 intel mul byte ptr [rax]
+f620|11223344556677885f5f5f5f5f5f 64 plan9 MULL 0(AX)
+f628|11223344556677885f5f5f5f5f5f 32 intel imul byte ptr [eax]
+f628|11223344556677885f5f5f5f5f5f 32 plan9 IMULL 0(AX)
+f628|11223344556677885f5f5f5f5f5f 64 gnu imulb (%rax)
+f628|11223344556677885f5f5f5f5f5f 64 intel imul byte ptr [rax]
+f628|11223344556677885f5f5f5f5f5f 64 plan9 IMULL 0(AX)
+f630|11223344556677885f5f5f5f5f5f 32 intel div byte ptr [eax]
+f630|11223344556677885f5f5f5f5f5f 32 plan9 DIVL 0(AX)
+f630|11223344556677885f5f5f5f5f5f 64 gnu divb (%rax)
+f630|11223344556677885f5f5f5f5f5f 64 intel div byte ptr [rax]
+f630|11223344556677885f5f5f5f5f5f 64 plan9 DIVL 0(AX)
+f638|11223344556677885f5f5f5f5f5f 32 intel idiv byte ptr [eax]
+f638|11223344556677885f5f5f5f5f5f 32 plan9 IDIVL 0(AX)
+f638|11223344556677885f5f5f5f5f5f 64 gnu idivb (%rax)
+f638|11223344556677885f5f5f5f5f5f 64 intel idiv byte ptr [rax]
+f638|11223344556677885f5f5f5f5f5f 64 plan9 IDIVL 0(AX)
+f70011223344|556677885f5f5f5f5f5f 32 intel test dword ptr [eax], 0x44332211
+f70011223344|556677885f5f5f5f5f5f 32 plan9 TESTL $0x44332211, 0(AX)
+f70011223344|556677885f5f5f5f5f5f 64 gnu testl $0x44332211,(%rax)
+f70011223344|556677885f5f5f5f5f5f 64 intel test dword ptr [rax], 0x44332211
+f70011223344|556677885f5f5f5f5f5f 64 plan9 TESTL $0x44332211, 0(AX)
+f711|223344556677885f5f5f5f5f5f5f 32 intel not dword ptr [ecx]
+f711|223344556677885f5f5f5f5f5f5f 32 plan9 NOTL 0(CX)
+f711|223344556677885f5f5f5f5f5f5f 64 gnu notl (%rcx)
+f711|223344556677885f5f5f5f5f5f5f 64 intel not dword ptr [rcx]
+f711|223344556677885f5f5f5f5f5f5f 64 plan9 NOTL 0(CX)
+f718|11223344556677885f5f5f5f5f5f 32 intel neg dword ptr [eax]
+f718|11223344556677885f5f5f5f5f5f 32 plan9 NEGL 0(AX)
+f718|11223344556677885f5f5f5f5f5f 64 gnu negl (%rax)
+f718|11223344556677885f5f5f5f5f5f 64 intel neg dword ptr [rax]
+f718|11223344556677885f5f5f5f5f5f 64 plan9 NEGL 0(AX)
+f720|11223344556677885f5f5f5f5f5f 32 intel mul dword ptr [eax]
+f720|11223344556677885f5f5f5f5f5f 32 plan9 MULL 0(AX)
+f720|11223344556677885f5f5f5f5f5f 64 gnu mull (%rax)
+f720|11223344556677885f5f5f5f5f5f 64 intel mul dword ptr [rax]
+f720|11223344556677885f5f5f5f5f5f 64 plan9 MULL 0(AX)
+f728|11223344556677885f5f5f5f5f5f 32 intel imul dword ptr [eax]
+f728|11223344556677885f5f5f5f5f5f 32 plan9 IMULL 0(AX)
+f728|11223344556677885f5f5f5f5f5f 64 gnu imull (%rax)
+f728|11223344556677885f5f5f5f5f5f 64 intel imul dword ptr [rax]
+f728|11223344556677885f5f5f5f5f5f 64 plan9 IMULL 0(AX)
+f730|11223344556677885f5f5f5f5f5f 32 intel div dword ptr [eax]
+f730|11223344556677885f5f5f5f5f5f 32 plan9 DIVL 0(AX)
+f730|11223344556677885f5f5f5f5f5f 64 gnu divl (%rax)
+f730|11223344556677885f5f5f5f5f5f 64 intel div dword ptr [rax]
+f730|11223344556677885f5f5f5f5f5f 64 plan9 DIVL 0(AX)
+f738|11223344556677885f5f5f5f5f5f 32 intel idiv dword ptr [eax]
+f738|11223344556677885f5f5f5f5f5f 32 plan9 IDIVL 0(AX)
+f738|11223344556677885f5f5f5f5f5f 64 gnu idivl (%rax)
+f738|11223344556677885f5f5f5f5f5f 64 intel idiv dword ptr [rax]
+f738|11223344556677885f5f5f5f5f5f 64 plan9 IDIVL 0(AX)
+f8|11223344556677885f5f5f5f5f5f5f 32 intel clc
+f8|11223344556677885f5f5f5f5f5f5f 32 plan9 CLC
+f8|11223344556677885f5f5f5f5f5f5f 64 gnu clc
+f8|11223344556677885f5f5f5f5f5f5f 64 intel clc
+f8|11223344556677885f5f5f5f5f5f5f 64 plan9 CLC
+f9|11223344556677885f5f5f5f5f5f5f 32 intel stc
+f9|11223344556677885f5f5f5f5f5f5f 32 plan9 STC
+f9|11223344556677885f5f5f5f5f5f5f 64 gnu stc
+f9|11223344556677885f5f5f5f5f5f5f 64 intel stc
+f9|11223344556677885f5f5f5f5f5f5f 64 plan9 STC
+fa|11223344556677885f5f5f5f5f5f5f 32 intel cli
+fa|11223344556677885f5f5f5f5f5f5f 32 plan9 CLI
+fa|11223344556677885f5f5f5f5f5f5f 64 gnu cli
+fa|11223344556677885f5f5f5f5f5f5f 64 intel cli
+fa|11223344556677885f5f5f5f5f5f5f 64 plan9 CLI
+fb|11223344556677885f5f5f5f5f5f5f 32 intel sti
+fb|11223344556677885f5f5f5f5f5f5f 32 plan9 STI
+fb|11223344556677885f5f5f5f5f5f5f 64 gnu sti
+fb|11223344556677885f5f5f5f5f5f5f 64 intel sti
+fb|11223344556677885f5f5f5f5f5f5f 64 plan9 STI
+fc|11223344556677885f5f5f5f5f5f5f 32 intel cld
+fc|11223344556677885f5f5f5f5f5f5f 32 plan9 CLD
+fc|11223344556677885f5f5f5f5f5f5f 64 gnu cld
+fc|11223344556677885f5f5f5f5f5f5f 64 intel cld
+fc|11223344556677885f5f5f5f5f5f5f 64 plan9 CLD
+fd|11223344556677885f5f5f5f5f5f5f 32 intel std
+fd|11223344556677885f5f5f5f5f5f5f 32 plan9 STD
+fd|11223344556677885f5f5f5f5f5f5f 64 gnu std
+fd|11223344556677885f5f5f5f5f5f5f 64 intel std
+fd|11223344556677885f5f5f5f5f5f5f 64 plan9 STD
+fe00|11223344556677885f5f5f5f5f5f 32 intel inc byte ptr [eax]
+fe00|11223344556677885f5f5f5f5f5f 32 plan9 INCL 0(AX)
+fe00|11223344556677885f5f5f5f5f5f 64 gnu incb (%rax)
+fe00|11223344556677885f5f5f5f5f5f 64 intel inc byte ptr [rax]
+fe00|11223344556677885f5f5f5f5f5f 64 plan9 INCL 0(AX)
+fe08|11223344556677885f5f5f5f5f5f 32 intel dec byte ptr [eax]
+fe08|11223344556677885f5f5f5f5f5f 32 plan9 DECL 0(AX)
+fe08|11223344556677885f5f5f5f5f5f 64 gnu decb (%rax)
+fe08|11223344556677885f5f5f5f5f5f 64 intel dec byte ptr [rax]
+fe08|11223344556677885f5f5f5f5f5f 64 plan9 DECL 0(AX)
+ff00|11223344556677885f5f5f5f5f5f 32 intel inc dword ptr [eax]
+ff00|11223344556677885f5f5f5f5f5f 32 plan9 INCL 0(AX)
+ff00|11223344556677885f5f5f5f5f5f 64 gnu incl (%rax)
+ff00|11223344556677885f5f5f5f5f5f 64 intel inc dword ptr [rax]
+ff00|11223344556677885f5f5f5f5f5f 64 plan9 INCL 0(AX)
+ff08|11223344556677885f5f5f5f5f5f 32 intel dec dword ptr [eax]
+ff08|11223344556677885f5f5f5f5f5f 32 plan9 DECL 0(AX)
+ff08|11223344556677885f5f5f5f5f5f 64 gnu decl (%rax)
+ff08|11223344556677885f5f5f5f5f5f 64 intel dec dword ptr [rax]
+ff08|11223344556677885f5f5f5f5f5f 64 plan9 DECL 0(AX)
+ff11|223344556677885f5f5f5f5f5f5f 32 intel call dword ptr [ecx]
+ff11|223344556677885f5f5f5f5f5f5f 32 plan9 CALL 0(CX)
+ff18|11223344556677885f5f5f5f5f5f 32 intel call far ptr [eax]
+ff18|11223344556677885f5f5f5f5f5f 32 plan9 LCALL 0(AX)
+ff18|11223344556677885f5f5f5f5f5f 64 gnu lcallq *(%rax)
+ff18|11223344556677885f5f5f5f5f5f 64 intel call far ptr [rax]
+ff18|11223344556677885f5f5f5f5f5f 64 plan9 LCALL 0(AX)
+ff20|11223344556677885f5f5f5f5f5f 32 intel jmp dword ptr [eax]
+ff20|11223344556677885f5f5f5f5f5f 32 plan9 JMP 0(AX)
+ff28|11223344556677885f5f5f5f5f5f 32 intel jmp far ptr [eax]
+ff28|11223344556677885f5f5f5f5f5f 32 plan9 LJMP 0(AX)
+ff28|11223344556677885f5f5f5f5f5f 64 gnu ljmpq *(%rax)
+ff28|11223344556677885f5f5f5f5f5f 64 intel jmp far ptr [rax]
+ff28|11223344556677885f5f5f5f5f5f 64 plan9 LJMP 0(AX)
+ff30|11223344556677885f5f5f5f5f5f 32 intel push dword ptr [eax]
+ff30|11223344556677885f5f5f5f5f5f 32 plan9 PUSHL 0(AX)
+ff30|11223344556677885f5f5f5f5f5f 64 gnu pushq (%rax)
+ff30|11223344556677885f5f5f5f5f5f 64 intel push qword ptr [rax]
+ff30|11223344556677885f5f5f5f5f5f 64 plan9 PUSHL 0(AX)
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/xed_test.go b/src/cmd/internal/rsc.io/x86/x86asm/xed_test.go
new file mode 100644
index 000000000..91cf82272
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/xed_test.go
@@ -0,0 +1,211 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package x86asm
+
+import (
+ "bytes"
+ "strings"
+ "testing"
+)
+
+func TestXed32Manual(t *testing.T) { testXed32(t, hexCases(t, xedManualTests)) }
+func TestXed32Testdata(t *testing.T) { testXed32(t, concat(basicPrefixes, testdataCases(t))) }
+func TestXed32ModRM(t *testing.T) { testXed32(t, concat(basicPrefixes, enumModRM)) }
+func TestXed32OneByte(t *testing.T) { testBasic(t, testXed32) }
+func TestXed320F(t *testing.T) { testBasic(t, testXed32, 0x0F) }
+func TestXed320F38(t *testing.T) { testBasic(t, testXed32, 0x0F, 0x38) }
+func TestXed320F3A(t *testing.T) { testBasic(t, testXed32, 0x0F, 0x3A) }
+func TestXed32Prefix(t *testing.T) { testPrefix(t, testXed32) }
+
+func TestXed64Manual(t *testing.T) { testXed64(t, hexCases(t, xedManualTests)) }
+func TestXed64Testdata(t *testing.T) { testXed64(t, concat(basicPrefixes, testdataCases(t))) }
+func TestXed64ModRM(t *testing.T) { testXed64(t, concat(basicPrefixes, enumModRM)) }
+func TestXed64OneByte(t *testing.T) { testBasic(t, testXed64) }
+func TestXed640F(t *testing.T) { testBasic(t, testXed64, 0x0F) }
+func TestXed640F38(t *testing.T) { testBasic(t, testXed64, 0x0F, 0x38) }
+func TestXed640F3A(t *testing.T) { testBasic(t, testXed64, 0x0F, 0x3A) }
+func TestXed64Prefix(t *testing.T) { testPrefix(t, testXed64) }
+
+func TestXed64REXTestdata(t *testing.T) {
+ testXed64(t, filter(concat3(basicPrefixes, rexPrefixes, testdataCases(t)), isValidREX))
+}
+func TestXed64REXModRM(t *testing.T) { testXed64(t, concat3(basicPrefixes, rexPrefixes, enumModRM)) }
+func TestXed64REXOneByte(t *testing.T) { testBasicREX(t, testXed64) }
+func TestXed64REX0F(t *testing.T) { testBasicREX(t, testXed64, 0x0F) }
+func TestXed64REX0F38(t *testing.T) { testBasicREX(t, testXed64, 0x0F, 0x38) }
+func TestXed64REX0F3A(t *testing.T) { testBasicREX(t, testXed64, 0x0F, 0x3A) }
+func TestXed64REXPrefix(t *testing.T) { testPrefixREX(t, testXed64) }
+
+// xedManualTests holds test cases that will be run by TestXedManual32 and TestXedManual64.
+// If you are debugging a few cases that turned up in a longer run, it can be useful
+// to list them here and then use -run=XedManual, particularly with tracing enabled.
+var xedManualTests = `
+6690
+`
+
+// allowedMismatchXed reports whether the mismatch between text and dec
+// should be allowed by the test.
+func allowedMismatchXed(text string, size int, inst *Inst, dec ExtInst) bool {
+ if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "GENERAL_ERROR", "INSTR_TOO_LONG", "BAD_LOCK_PREFIX") {
+ return true
+ }
+
+ if contains(dec.text, "BAD_LOCK_PREFIX") && countExactPrefix(inst, PrefixLOCK|PrefixInvalid) > 0 {
+ return true
+ }
+
+ if contains(dec.text, "BAD_LOCK_PREFIX", "GENERAL_ERROR") && countExactPrefix(inst, PrefixLOCK|PrefixImplicit) > 0 {
+ return true
+ }
+
+ if text == "lock" && size == 1 && contains(dec.text, "BAD_LOCK_PREFIX") {
+ return true
+ }
+
+ // Instructions not known to us.
+ if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, unsupported...) {
+ return true
+ }
+
+ // Instructions not known to xed.
+ if contains(text, xedUnsupported...) && contains(dec.text, "ERROR") {
+ return true
+ }
+
+ if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "shl ") && (inst.Opcode>>16)&0xEC38 == 0xC030 {
+ return true
+ }
+
+ // 82 11 22: xed says 'adc byte ptr [ecx], 0x22' but there is no justification in the manuals for that.
+ // C0 30 11: xed says 'shl byte ptr [eax], 0x11' but there is no justification in the manuals for that.
+ // F6 08 11: xed says 'test byte ptr [eax], 0x11' but there is no justification in the manuals for that.
+ if (contains(text, "error:") || isPrefix(text) && size == 1) && hasByte(dec.enc[:dec.nenc], 0x82, 0xC0, 0xC1, 0xD0, 0xD1, 0xD2, 0xD3, 0xF6, 0xF7) {
+ return true
+ }
+
+ // F3 11 22 and many others: xed allows and drops misused rep/repn prefix.
+ if (text == "rep" && dec.enc[0] == 0xF3 || (text == "repn" || text == "repne") && dec.enc[0] == 0xF2) && (!contains(dec.text, "ins", "outs", "movs", "lods", "cmps", "scas") || contains(dec.text, "xmm")) {
+ return true
+ }
+
+ // 0F C7 30: xed says vmptrld qword ptr [eax]; we say rdrand eax.
+ // TODO(rsc): Fix, since we are probably wrong, but we don't have vmptrld in the manual.
+ if contains(text, "rdrand") && contains(dec.text, "vmptrld", "vmxon", "vmclear") {
+ return true
+ }
+
+ // F3 0F AE 00: we say 'rdfsbase dword ptr [eax]' but RDFSBASE needs a register.
+ // Also, this is a 64-bit only instruction.
+ // TODO(rsc): Fix to reject this encoding.
+ if contains(text, "rdfsbase", "rdgsbase", "wrfsbase", "wrgsbase") && contains(dec.text, "ERROR") {
+ return true
+ }
+
+ // 0F 01 F8: we say swapgs but that's only valid in 64-bit mode.
+ // TODO(rsc): Fix.
+ if contains(text, "swapgs") {
+ return true
+ }
+
+ // 0F 24 11: 'mov ecx, tr2' except there is no TR2.
+ // Or maybe the MOV to TR registers doesn't use RMF.
+ if contains(text, "cr1", "cr5", "cr6", "cr7", "tr0", "tr1", "tr2", "tr3", "tr4", "tr5", "tr6", "tr7") && contains(dec.text, "ERROR") {
+ return true
+ }
+
+ // 0F 19 11, 0F 1C 11, 0F 1D 11, 0F 1E 11, 0F 1F 11: xed says nop,
+ // but the Intel manuals say that the only NOP there is 0F 1F /0.
+ // Perhaps xed is reporting an older encoding.
+ if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "nop ") && (inst.Opcode>>8)&0xFFFF38 != 0x0F1F00 {
+ return true
+ }
+
+ // 66 0F AE 38: clflushopt but we only know clflush
+ if contains(text, "clflush") && contains(dec.text, "clflushopt") {
+ return true
+ }
+
+ // 0F 20 04 11: MOV SP, CR0 but has mod!=3 despite register argument.
+ // (This encoding ignores the mod bits.) The decoder sees the non-register
+ // mod and reads farther ahead to decode the memory reference that
+ // isn't really there, causing the size to be too large.
+ // TODO(rsc): Fix.
+ if text == dec.text && size > dec.nenc && contains(text, " cr", " dr", " tr") {
+ return true
+ }
+
+ // 0F AE E9: xed says lfence, which is wrong (only 0F AE E8 is lfence). And so on.
+ if contains(dec.text, "fence") && hasByte(dec.enc[:dec.nenc], 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF) {
+ return true
+ }
+
+ // DD C9, DF C9: xed says 'fxch st0, st1' but that instruction is D9 C9.
+ if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "fxch ") && hasByte(dec.enc[:dec.nenc], 0xDD, 0xDF) {
+ return true
+ }
+
+ // DC D4: xed says 'fcom st0, st4' but that instruction is D8 D4.
+ if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "fcom ") && hasByte(dec.enc[:dec.nenc], 0xD8, 0xDC) {
+ return true
+ }
+
+ // DE D4: xed says 'fcomp st0, st4' but that instruction is D8 D4.
+ if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "fcomp ") && hasByte(dec.enc[:dec.nenc], 0xDC, 0xDE) {
+ return true
+ }
+
+ // DF D4: xed says 'fstp st4, st0' but that instruction is DD D4.
+ if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "fstp ") && hasByte(dec.enc[:dec.nenc], 0xDF) {
+ return true
+ }
+
+ return false
+}
+
+func countExactPrefix(inst *Inst, target Prefix) int {
+ n := 0
+ for _, p := range inst.Prefix {
+ if p == target {
+ n++
+ }
+ }
+ return n
+}
+
+func hasByte(src []byte, target ...byte) bool {
+ for _, b := range target {
+ if bytes.IndexByte(src, b) >= 0 {
+ return true
+ }
+ }
+ return false
+}
+
+// Instructions known to us but not to xed.
+var xedUnsupported = strings.Fields(`
+ xrstor
+ xsave
+ xsave
+ ud1
+ xgetbv
+ xsetbv
+ fxsave
+ fxrstor
+ clflush
+ lfence
+ mfence
+ sfence
+ rsqrtps
+ rcpps
+ emms
+ ldmxcsr
+ stmxcsr
+ movhpd
+ movnti
+ rdrand
+ movbe
+ movlpd
+ sysret
+`)
diff --git a/src/cmd/internal/rsc.io/x86/x86asm/xedext_test.go b/src/cmd/internal/rsc.io/x86/x86asm/xedext_test.go
new file mode 100644
index 000000000..d7aa8e3e2
--- /dev/null
+++ b/src/cmd/internal/rsc.io/x86/x86asm/xedext_test.go
@@ -0,0 +1,206 @@
+package x86asm
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "log"
+ "os"
+ "strconv"
+ "strings"
+ "testing"
+)
+
+// xed binary from Intel sde-external-6.22.0-2014-03-06.
+const xedPath = "/Users/rsc/bin/xed"
+
+func testXedArch(t *testing.T, arch int, generate func(func([]byte))) {
+ if testing.Short() {
+ t.Skip("skipping libmach test in short mode")
+ }
+
+ if _, err := os.Stat(xedPath); err != nil {
+ t.Fatal(err)
+ }
+
+ testExtDis(t, "intel", arch, xed, generate, allowedMismatchXed)
+}
+
+func testXed32(t *testing.T, generate func(func([]byte))) {
+ testXedArch(t, 32, generate)
+}
+
+func testXed64(t *testing.T, generate func(func([]byte))) {
+ testXedArch(t, 64, generate)
+}
+
+func xed(ext *ExtDis) error {
+ b, err := ext.Run(xedPath, fmt.Sprintf("-%d", ext.Arch), "-n", "1G", "-ir", ext.File.Name())
+ if err != nil {
+ return err
+ }
+
+ nmatch := 0
+ next := uint32(start)
+ var (
+ addr uint32
+ encbuf [32]byte
+ enc []byte
+ text string
+ )
+
+ var xedEnd = []byte("# end of text section")
+ var xedEnd1 = []byte("# Errors")
+
+ eof := false
+ for {
+ line, err := b.ReadSlice('\n')
+ if err != nil {
+ if err == io.EOF {
+ break
+ }
+ return fmt.Errorf("reading objdump output: %v", err)
+ }
+ if debug {
+ os.Stdout.Write(line)
+ }
+ if bytes.HasPrefix(line, xedEnd) || bytes.HasPrefix(line, xedEnd1) {
+ eof = true
+ }
+ if eof {
+ continue
+ }
+ nmatch++
+ addr, enc, text = parseLineXed(line, encbuf[:0])
+ if addr > next {
+ return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line)
+ }
+ if addr < next {
+ continue
+ }
+ switch text {
+ case "repz":
+ text = "rep"
+ case "repnz":
+ text = "repn"
+ default:
+ text = strings.Replace(text, "repz ", "rep ", -1)
+ text = strings.Replace(text, "repnz ", "repn ", -1)
+ }
+ if m := pcrelw.FindStringSubmatch(text); m != nil {
+ targ, _ := strconv.ParseUint(m[2], 16, 64)
+ text = fmt.Sprintf("%s .%+#x", m[1], int16(uint32(targ)-uint32(uint16(addr))-uint32(len(enc))))
+ }
+ if m := pcrel.FindStringSubmatch(text); m != nil {
+ targ, _ := strconv.ParseUint(m[2], 16, 64)
+ text = fmt.Sprintf("%s .%+#x", m[1], int32(uint32(targ)-addr-uint32(len(enc))))
+ }
+ ext.Dec <- ExtInst{addr, encbuf, len(enc), text}
+ encbuf = [32]byte{}
+ enc = nil
+ next += 32
+ }
+ if next != start+uint32(ext.Size) {
+ return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size)
+ }
+ if err := ext.Wait(); err != nil {
+ return fmt.Errorf("exec: %v", err)
+ }
+
+ return nil
+}
+
+var (
+ xedInRaw = []byte("In raw...")
+ xedDots = []byte("...")
+ xdis = []byte("XDIS ")
+ xedError = []byte("ERROR: ")
+ xedNoDecode = []byte("Could not decode at offset: 0x")
+)
+
+func parseLineXed(line []byte, encstart []byte) (addr uint32, enc []byte, text string) {
+ oline := line
+ if bytes.HasPrefix(line, xedInRaw) || bytes.HasPrefix(line, xedDots) {
+ return 0, nil, ""
+ }
+ if bytes.HasPrefix(line, xedError) {
+ i := bytes.IndexByte(line[len(xedError):], ' ')
+ if i < 0 {
+ log.Fatalf("cannot parse error: %q", oline)
+ }
+ errstr := string(line[len(xedError):])
+ i = bytes.Index(line, xedNoDecode)
+ if i < 0 {
+ log.Fatalf("cannot parse error: %q", oline)
+ }
+ i += len(xedNoDecode)
+ j := bytes.IndexByte(line[i:], ' ')
+ if j < 0 {
+ log.Fatalf("cannot parse error: %q", oline)
+ }
+ x, err := strconv.ParseUint(string(trimSpace(line[i:i+j])), 16, 32)
+ if err != nil {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ addr = uint32(x)
+ return addr, nil, errstr
+ }
+
+ if !bytes.HasPrefix(line, xdis) {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+
+ i := bytes.IndexByte(line, ':')
+ if i < 0 {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ x, err := strconv.ParseUint(string(trimSpace(line[len(xdis):i])), 16, 32)
+ if err != nil {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+ addr = uint32(x)
+
+ // spaces
+ i++
+ for i < len(line) && line[i] == ' ' {
+ i++
+ }
+ // instruction class, spaces
+ for i < len(line) && line[i] != ' ' {
+ i++
+ }
+ for i < len(line) && line[i] == ' ' {
+ i++
+ }
+ // instruction set, spaces
+ for i < len(line) && line[i] != ' ' {
+ i++
+ }
+ for i < len(line) && line[i] == ' ' {
+ i++
+ }
+
+ // hex
+ hexStart := i
+ for i < len(line) && line[i] != ' ' {
+ i++
+ }
+ hexEnd := i
+ for i < len(line) && line[i] == ' ' {
+ i++
+ }
+
+ // text
+ textStart := i
+ for i < len(line) && line[i] != '\n' {
+ i++
+ }
+ textEnd := i
+
+ enc, ok := parseHex(line[hexStart:hexEnd], encstart)
+ if !ok {
+ log.Fatalf("cannot parse disassembly: %q", oline)
+ }
+
+ return addr, enc, string(fixSpace(line[textStart:textEnd]))
+}
diff --git a/src/cmd/ld/data.c b/src/cmd/ld/data.c
index 55d020710..61847546a 100644
--- a/src/cmd/ld/data.c
+++ b/src/cmd/ld/data.c
@@ -35,7 +35,7 @@
#include "../ld/elf.h"
#include "../ld/macho.h"
#include "../ld/pe.h"
-#include "../../pkg/runtime/mgc0.h"
+#include "../../runtime/mgc0.h"
void dynreloc(void);
@@ -145,7 +145,7 @@ relocsym(LSym *s)
diag("%s: invalid relocation %d+%d not in [%d,%d)", s->name, off, siz, 0, s->np);
continue;
}
- if(r->sym != S && (r->sym->type & SMASK == 0 || r->sym->type & SMASK == SXREF)) {
+ if(r->sym != S && ((r->sym->type & (SMASK | SHIDDEN)) == 0 || (r->sym->type & SMASK) == SXREF)) {
diag("%s: not defined", r->sym->name);
continue;
}
@@ -160,6 +160,10 @@ relocsym(LSym *s)
if(r->sym != S && r->sym->type != STLSBSS && !r->sym->reachable)
diag("unreachable sym in relocation: %s %s", s->name, r->sym->name);
+ // Android emulates runtime.tlsg as a regular variable.
+ if (r->type == R_TLS && strcmp(goos, "android") == 0)
+ r->type = R_ADDR;
+
switch(r->type) {
default:
o = 0;
@@ -186,8 +190,8 @@ relocsym(LSym *s)
case R_TLS_LE:
if(linkmode == LinkExternal && iself && HEADTYPE != Hopenbsd) {
r->done = 0;
- r->sym = ctxt->gmsym;
- r->xsym = ctxt->gmsym;
+ r->sym = ctxt->tlsg;
+ r->xsym = ctxt->tlsg;
r->xadd = r->add;
o = 0;
if(thechar != '6')
@@ -200,8 +204,8 @@ relocsym(LSym *s)
case R_TLS_IE:
if(linkmode == LinkExternal && iself && HEADTYPE != Hopenbsd) {
r->done = 0;
- r->sym = ctxt->gmsym;
- r->xsym = ctxt->gmsym;
+ r->sym = ctxt->tlsg;
+ r->xsym = ctxt->tlsg;
r->xadd = r->add;
o = 0;
if(thechar != '6')
@@ -277,9 +281,13 @@ relocsym(LSym *s)
if(thechar == '6')
o = 0;
} else if(HEADTYPE == Hdarwin) {
- if(rs->type != SHOSTOBJ)
- o += symaddr(rs) - rs->sect->vaddr;
- o -= r->off; // WTF?
+ if(r->type == R_CALL) {
+ if(rs->type != SHOSTOBJ)
+ o += symaddr(rs) - rs->sect->vaddr;
+ o -= r->off; // relative to section offset, not symbol
+ } else {
+ o += r->siz;
+ }
} else {
diag("unhandled pcrel relocation for %s", headstring);
}
@@ -421,10 +429,10 @@ dynreloc(void)
}
static void
-blk(LSym *start, int32 addr, int32 size)
+blk(LSym *start, int64 addr, int64 size)
{
LSym *sym;
- int32 eaddr;
+ int64 eaddr;
uchar *p, *ep;
for(sym = start; sym != nil; sym = sym->next)
@@ -463,10 +471,10 @@ blk(LSym *start, int32 addr, int32 size)
}
void
-codeblk(int32 addr, int32 size)
+codeblk(int64 addr, int64 size)
{
LSym *sym;
- int32 eaddr, n;
+ int64 eaddr, n;
uchar *q;
if(debug['a'])
@@ -523,10 +531,10 @@ codeblk(int32 addr, int32 size)
}
void
-datblk(int32 addr, int32 size)
+datblk(int64 addr, int64 size)
{
LSym *sym;
- int32 i, eaddr;
+ int64 i, eaddr;
uchar *p, *ep;
char *typ, *rsname;
Reloc *r;
@@ -612,22 +620,26 @@ addstrdata(char *name, char *value)
{
LSym *s, *sp;
char *p;
+ uchar reachable;
p = smprint("%s.str", name);
sp = linklookup(ctxt, p, 0);
free(p);
addstring(sp, value);
+ sp->type = SRODATA;
s = linklookup(ctxt, name, 0);
s->size = 0;
s->dupok = 1;
+ reachable = s->reachable;
addaddr(ctxt, s, sp);
- adduint32(ctxt, s, strlen(value));
- if(PtrSize == 8)
- adduint32(ctxt, s, 0); // round struct to pointer width
+ adduintxx(ctxt, s, strlen(value), PtrSize);
- // in case reachability has already been computed
- sp->reachable = s->reachable;
+ // addstring, addaddr, etc., mark the symbols as reachable.
+ // In this case that is not necessarily true, so stick to what
+ // we know before entering this function.
+ s->reachable = reachable;
+ sp->reachable = reachable;
}
vlong
@@ -702,31 +714,176 @@ maxalign(LSym *s, int type)
return max;
}
+// Helper object for building GC type programs.
+typedef struct ProgGen ProgGen;
+struct ProgGen
+{
+ LSym* s;
+ int32 datasize;
+ uint8 data[256/PointersPerByte];
+ vlong pos;
+};
+
static void
-gcaddsym(LSym *gc, LSym *s, vlong off)
+proggeninit(ProgGen *g, LSym *s)
{
- vlong a;
- LSym *gotype;
+ g->s = s;
+ g->datasize = 0;
+ g->pos = 0;
+ memset(g->data, 0, sizeof(g->data));
+}
- if(s->size < PtrSize)
+static void
+proggenemit(ProgGen *g, uint8 v)
+{
+ adduint8(ctxt, g->s, v);
+}
+
+// Writes insData block from g->data.
+static void
+proggendataflush(ProgGen *g)
+{
+ int32 i, s;
+
+ if(g->datasize == 0)
return;
- if(strcmp(s->name, ".string") == 0)
+ proggenemit(g, insData);
+ proggenemit(g, g->datasize);
+ s = (g->datasize + PointersPerByte - 1)/PointersPerByte;
+ for(i = 0; i < s; i++)
+ proggenemit(g, g->data[i]);
+ g->datasize = 0;
+ memset(g->data, 0, sizeof(g->data));
+}
+
+static void
+proggendata(ProgGen *g, uint8 d)
+{
+ g->data[g->datasize/PointersPerByte] |= d << ((g->datasize%PointersPerByte)*BitsPerPointer);
+ g->datasize++;
+ if(g->datasize == 255)
+ proggendataflush(g);
+}
+
+// Skip v bytes due to alignment, etc.
+static void
+proggenskip(ProgGen *g, vlong off, vlong v)
+{
+ vlong i;
+
+ for(i = off; i < off+v; i++) {
+ if((i%PtrSize) == 0)
+ proggendata(g, BitsScalar);
+ }
+}
+
+// Emit insArray instruction.
+static void
+proggenarray(ProgGen *g, vlong len)
+{
+ int32 i;
+
+ proggendataflush(g);
+ proggenemit(g, insArray);
+ for(i = 0; i < PtrSize; i++, len >>= 8)
+ proggenemit(g, len);
+}
+
+static void
+proggenarrayend(ProgGen *g)
+{
+ proggendataflush(g);
+ proggenemit(g, insArrayEnd);
+}
+
+static void
+proggenfini(ProgGen *g, vlong size)
+{
+ proggenskip(g, g->pos, size - g->pos);
+ proggendataflush(g);
+ proggenemit(g, insEnd);
+}
+
+
+// This function generates GC pointer info for global variables.
+static void
+proggenaddsym(ProgGen *g, LSym *s)
+{
+ LSym *gcprog;
+ uint8 *mask;
+ vlong i, size;
+
+ if(s->size == 0)
return;
- gotype = s->gotype;
- if(gotype != nil) {
- //print("gcaddsym: %s %d %s\n", s->name, s->size, gotype->name);
- adduintxx(ctxt, gc, GC_CALL, PtrSize);
- adduintxx(ctxt, gc, off, PtrSize);
- addpcrelplus(ctxt, gc, decodetype_gc(gotype), 3*PtrSize+4);
- if(PtrSize == 8)
- adduintxx(ctxt, gc, 0, 4);
- } else {
- //print("gcaddsym: %s %d <unknown type>\n", s->name, s->size);
- for(a = -off&(PtrSize-1); a+PtrSize<=s->size; a+=PtrSize) {
- adduintxx(ctxt, gc, GC_APTR, PtrSize);
- adduintxx(ctxt, gc, off+a, PtrSize);
+ // Skip alignment hole from the previous symbol.
+ proggenskip(g, g->pos, s->value - g->pos);
+ g->pos += s->value - g->pos;
+
+ // The test for names beginning with . here is meant
+ // to keep .dynamic and .dynsym from turning up as
+ // conservative symbols. They should be marked SELFSECT
+ // and not SDATA, but sometimes that doesn't happen.
+ // Leave debugging the SDATA issue for the Go rewrite.
+
+ if(s->gotype == nil && s->size >= PtrSize && s->name[0] != '.') {
+ // conservative scan
+ diag("missing Go type information for global symbol: %s size %d", s->name, (int)s->size);
+ if((s->size%PtrSize) || (g->pos%PtrSize))
+ diag("proggenaddsym: unaligned conservative symbol %s: size=%lld pos=%lld",
+ s->name, s->size, g->pos);
+ size = (s->size+PtrSize-1)/PtrSize*PtrSize;
+ if(size < 32*PtrSize) {
+ // Emit small symbols as data.
+ for(i = 0; i < size/PtrSize; i++)
+ proggendata(g, BitsPointer);
+ } else {
+ // Emit large symbols as array.
+ proggenarray(g, size/PtrSize);
+ proggendata(g, BitsPointer);
+ proggenarrayend(g);
+ }
+ g->pos = s->value + size;
+ } else if(s->gotype == nil || decodetype_noptr(s->gotype) || s->size < PtrSize || s->name[0] == '.') {
+ // no scan
+ if(s->size < 32*PtrSize) {
+ // Emit small symbols as data.
+ // This case also handles unaligned and tiny symbols, so tread carefully.
+ for(i = s->value; i < s->value+s->size; i++) {
+ if((i%PtrSize) == 0)
+ proggendata(g, BitsScalar);
+ }
+ } else {
+ // Emit large symbols as array.
+ if((s->size%PtrSize) || (g->pos%PtrSize))
+ diag("proggenaddsym: unaligned noscan symbol %s: size=%lld pos=%lld",
+ s->name, s->size, g->pos);
+ proggenarray(g, s->size/PtrSize);
+ proggendata(g, BitsScalar);
+ proggenarrayend(g);
}
+ g->pos = s->value + s->size;
+ } else if(decodetype_usegcprog(s->gotype)) {
+ // gc program, copy directly
+ proggendataflush(g);
+ gcprog = decodetype_gcprog(s->gotype);
+ size = decodetype_size(s->gotype);
+ if((size%PtrSize) || (g->pos%PtrSize))
+ diag("proggenaddsym: unaligned gcprog symbol %s: size=%lld pos=%lld",
+ s->name, s->size, g->pos);
+ for(i = 0; i < gcprog->np-1; i++)
+ proggenemit(g, gcprog->p[i]);
+ g->pos = s->value + size;
+ } else {
+ // gc mask, it's small so emit as data
+ mask = decodetype_gcmask(s->gotype);
+ size = decodetype_size(s->gotype);
+ if((size%PtrSize) || (g->pos%PtrSize))
+ diag("proggenaddsym: unaligned gcmask symbol %s: size=%lld pos=%lld",
+ s->name, s->size, g->pos);
+ for(i = 0; i < size; i += PtrSize)
+ proggendata(g, (mask[i/PtrSize/2]>>((i/PtrSize%2)*4+2))&BitsMask);
+ g->pos = s->value + size;
}
}
@@ -751,19 +908,13 @@ dodata(void)
Section *sect;
Segment *segro;
LSym *s, *last, **l;
- LSym *gcdata1, *gcbss1;
+ LSym *gcdata, *gcbss;
+ ProgGen gen;
if(debug['v'])
Bprint(&bso, "%5.2f dodata\n", cputime());
Bflush(&bso);
- gcdata1 = linklookup(ctxt, "gcdata", 0);
- gcbss1 = linklookup(ctxt, "gcbss", 0);
-
- // size of .data and .bss section. the zero value is later replaced by the actual size of the section.
- adduintxx(ctxt, gcdata1, 0, PtrSize);
- adduintxx(ctxt, gcbss1, 0, PtrSize);
-
last = nil;
datap = nil;
@@ -847,8 +998,8 @@ dodata(void)
sect->align = maxalign(s, SINITARR-1);
datsize = rnd(datsize, sect->align);
sect->vaddr = datsize;
- linklookup(ctxt, "noptrdata", 0)->sect = sect;
- linklookup(ctxt, "enoptrdata", 0)->sect = sect;
+ linklookup(ctxt, "runtime.noptrdata", 0)->sect = sect;
+ linklookup(ctxt, "runtime.enoptrdata", 0)->sect = sect;
for(; s != nil && s->type < SINITARR; s = s->next) {
datsize = aligndatsize(datsize, s);
s->sect = sect;
@@ -878,8 +1029,10 @@ dodata(void)
sect->align = maxalign(s, SBSS-1);
datsize = rnd(datsize, sect->align);
sect->vaddr = datsize;
- linklookup(ctxt, "data", 0)->sect = sect;
- linklookup(ctxt, "edata", 0)->sect = sect;
+ linklookup(ctxt, "runtime.data", 0)->sect = sect;
+ linklookup(ctxt, "runtime.edata", 0)->sect = sect;
+ gcdata = linklookup(ctxt, "runtime.gcdata", 0);
+ proggeninit(&gen, gcdata);
for(; s != nil && s->type < SBSS; s = s->next) {
if(s->type == SINITARR) {
ctxt->cursym = s;
@@ -889,40 +1042,38 @@ dodata(void)
s->type = SDATA;
datsize = aligndatsize(datsize, s);
s->value = datsize - sect->vaddr;
- gcaddsym(gcdata1, s, datsize - sect->vaddr); // gc
+ proggenaddsym(&gen, s); // gc
growdatsize(&datsize, s);
}
sect->len = datsize - sect->vaddr;
-
- adduintxx(ctxt, gcdata1, GC_END, PtrSize);
- setuintxx(ctxt, gcdata1, 0, sect->len, PtrSize);
+ proggenfini(&gen, sect->len); // gc
/* bss */
sect = addsection(&segdata, ".bss", 06);
sect->align = maxalign(s, SNOPTRBSS-1);
datsize = rnd(datsize, sect->align);
sect->vaddr = datsize;
- linklookup(ctxt, "bss", 0)->sect = sect;
- linklookup(ctxt, "ebss", 0)->sect = sect;
+ linklookup(ctxt, "runtime.bss", 0)->sect = sect;
+ linklookup(ctxt, "runtime.ebss", 0)->sect = sect;
+ gcbss = linklookup(ctxt, "runtime.gcbss", 0);
+ proggeninit(&gen, gcbss);
for(; s != nil && s->type < SNOPTRBSS; s = s->next) {
s->sect = sect;
datsize = aligndatsize(datsize, s);
s->value = datsize - sect->vaddr;
- gcaddsym(gcbss1, s, datsize - sect->vaddr); // gc
+ proggenaddsym(&gen, s); // gc
growdatsize(&datsize, s);
}
sect->len = datsize - sect->vaddr;
-
- adduintxx(ctxt, gcbss1, GC_END, PtrSize);
- setuintxx(ctxt, gcbss1, 0, sect->len, PtrSize);
+ proggenfini(&gen, sect->len); // gc
/* pointer-free bss */
sect = addsection(&segdata, ".noptrbss", 06);
sect->align = maxalign(s, SNOPTRBSS);
datsize = rnd(datsize, sect->align);
sect->vaddr = datsize;
- linklookup(ctxt, "noptrbss", 0)->sect = sect;
- linklookup(ctxt, "enoptrbss", 0)->sect = sect;
+ linklookup(ctxt, "runtime.noptrbss", 0)->sect = sect;
+ linklookup(ctxt, "runtime.enoptrbss", 0)->sect = sect;
for(; s != nil && s->type == SNOPTRBSS; s = s->next) {
datsize = aligndatsize(datsize, s);
s->sect = sect;
@@ -930,7 +1081,7 @@ dodata(void)
growdatsize(&datsize, s);
}
sect->len = datsize - sect->vaddr;
- linklookup(ctxt, "end", 0)->sect = sect;
+ linklookup(ctxt, "runtime.end", 0)->sect = sect;
// 6g uses 4-byte relocation offsets, so the entire segment must fit in 32 bits.
if(datsize != (uint32)datsize) {
@@ -951,9 +1102,9 @@ dodata(void)
sect->len = datsize;
} else {
// Might be internal linking but still using cgo.
- // In that case, the only possible STLSBSS symbol is tlsgm.
+ // In that case, the only possible STLSBSS symbol is runtime.tlsg.
// Give it offset 0, because it's the only thing here.
- if(s != nil && s->type == STLSBSS && strcmp(s->name, "runtime.tlsgm") == 0) {
+ if(s != nil && s->type == STLSBSS && strcmp(s->name, "runtime.tlsg") == 0) {
s->value = 0;
s = s->next;
}
@@ -1001,8 +1152,8 @@ dodata(void)
sect->align = maxalign(s, STYPELINK-1);
datsize = rnd(datsize, sect->align);
sect->vaddr = 0;
- linklookup(ctxt, "rodata", 0)->sect = sect;
- linklookup(ctxt, "erodata", 0)->sect = sect;
+ linklookup(ctxt, "runtime.rodata", 0)->sect = sect;
+ linklookup(ctxt, "runtime.erodata", 0)->sect = sect;
for(; s != nil && s->type < STYPELINK; s = s->next) {
datsize = aligndatsize(datsize, s);
s->sect = sect;
@@ -1017,8 +1168,8 @@ dodata(void)
sect->align = maxalign(s, STYPELINK);
datsize = rnd(datsize, sect->align);
sect->vaddr = datsize;
- linklookup(ctxt, "typelink", 0)->sect = sect;
- linklookup(ctxt, "etypelink", 0)->sect = sect;
+ linklookup(ctxt, "runtime.typelink", 0)->sect = sect;
+ linklookup(ctxt, "runtime.etypelink", 0)->sect = sect;
for(; s != nil && s->type == STYPELINK; s = s->next) {
datsize = aligndatsize(datsize, s);
s->sect = sect;
@@ -1033,8 +1184,8 @@ dodata(void)
sect->align = maxalign(s, SPCLNTAB-1);
datsize = rnd(datsize, sect->align);
sect->vaddr = datsize;
- linklookup(ctxt, "symtab", 0)->sect = sect;
- linklookup(ctxt, "esymtab", 0)->sect = sect;
+ linklookup(ctxt, "runtime.symtab", 0)->sect = sect;
+ linklookup(ctxt, "runtime.esymtab", 0)->sect = sect;
for(; s != nil && s->type < SPCLNTAB; s = s->next) {
datsize = aligndatsize(datsize, s);
s->sect = sect;
@@ -1049,8 +1200,8 @@ dodata(void)
sect->align = maxalign(s, SELFROSECT-1);
datsize = rnd(datsize, sect->align);
sect->vaddr = datsize;
- linklookup(ctxt, "pclntab", 0)->sect = sect;
- linklookup(ctxt, "epclntab", 0)->sect = sect;
+ linklookup(ctxt, "runtime.pclntab", 0)->sect = sect;
+ linklookup(ctxt, "runtime.epclntab", 0)->sect = sect;
for(; s != nil && s->type < SELFROSECT; s = s->next) {
datsize = aligndatsize(datsize, s);
s->sect = sect;
@@ -1103,8 +1254,8 @@ textaddress(void)
// and then letting threads copy down, but probably not worth it.
sect = segtext.sect;
sect->align = funcalign;
- linklookup(ctxt, "text", 0)->sect = sect;
- linklookup(ctxt, "etext", 0)->sect = sect;
+ linklookup(ctxt, "runtime.text", 0)->sect = sect;
+ linklookup(ctxt, "runtime.etext", 0)->sect = sect;
va = INITTEXT;
sect->vaddr = va;
for(sym = ctxt->textp; sym != nil; sym = sym->next) {
@@ -1215,32 +1366,32 @@ address(void)
sub->value += sym->value;
}
- xdefine("text", STEXT, text->vaddr);
- xdefine("etext", STEXT, text->vaddr + text->len);
- xdefine("rodata", SRODATA, rodata->vaddr);
- xdefine("erodata", SRODATA, rodata->vaddr + rodata->len);
- xdefine("typelink", SRODATA, typelink->vaddr);
- xdefine("etypelink", SRODATA, typelink->vaddr + typelink->len);
-
- sym = linklookup(ctxt, "gcdata", 0);
- xdefine("egcdata", SRODATA, symaddr(sym) + sym->size);
- linklookup(ctxt, "egcdata", 0)->sect = sym->sect;
-
- sym = linklookup(ctxt, "gcbss", 0);
- xdefine("egcbss", SRODATA, symaddr(sym) + sym->size);
- linklookup(ctxt, "egcbss", 0)->sect = sym->sect;
-
- xdefine("symtab", SRODATA, symtab->vaddr);
- xdefine("esymtab", SRODATA, symtab->vaddr + symtab->len);
- xdefine("pclntab", SRODATA, pclntab->vaddr);
- xdefine("epclntab", SRODATA, pclntab->vaddr + pclntab->len);
- xdefine("noptrdata", SNOPTRDATA, noptr->vaddr);
- xdefine("enoptrdata", SNOPTRDATA, noptr->vaddr + noptr->len);
- xdefine("bss", SBSS, bss->vaddr);
- xdefine("ebss", SBSS, bss->vaddr + bss->len);
- xdefine("data", SDATA, data->vaddr);
- xdefine("edata", SDATA, data->vaddr + data->len);
- xdefine("noptrbss", SNOPTRBSS, noptrbss->vaddr);
- xdefine("enoptrbss", SNOPTRBSS, noptrbss->vaddr + noptrbss->len);
- xdefine("end", SBSS, segdata.vaddr + segdata.len);
+ xdefine("runtime.text", STEXT, text->vaddr);
+ xdefine("runtime.etext", STEXT, text->vaddr + text->len);
+ xdefine("runtime.rodata", SRODATA, rodata->vaddr);
+ xdefine("runtime.erodata", SRODATA, rodata->vaddr + rodata->len);
+ xdefine("runtime.typelink", SRODATA, typelink->vaddr);
+ xdefine("runtime.etypelink", SRODATA, typelink->vaddr + typelink->len);
+
+ sym = linklookup(ctxt, "runtime.gcdata", 0);
+ xdefine("runtime.egcdata", SRODATA, symaddr(sym) + sym->size);
+ linklookup(ctxt, "runtime.egcdata", 0)->sect = sym->sect;
+
+ sym = linklookup(ctxt, "runtime.gcbss", 0);
+ xdefine("runtime.egcbss", SRODATA, symaddr(sym) + sym->size);
+ linklookup(ctxt, "runtime.egcbss", 0)->sect = sym->sect;
+
+ xdefine("runtime.symtab", SRODATA, symtab->vaddr);
+ xdefine("runtime.esymtab", SRODATA, symtab->vaddr + symtab->len);
+ xdefine("runtime.pclntab", SRODATA, pclntab->vaddr);
+ xdefine("runtime.epclntab", SRODATA, pclntab->vaddr + pclntab->len);
+ xdefine("runtime.noptrdata", SNOPTRDATA, noptr->vaddr);
+ xdefine("runtime.enoptrdata", SNOPTRDATA, noptr->vaddr + noptr->len);
+ xdefine("runtime.bss", SBSS, bss->vaddr);
+ xdefine("runtime.ebss", SBSS, bss->vaddr + bss->len);
+ xdefine("runtime.data", SDATA, data->vaddr);
+ xdefine("runtime.edata", SDATA, data->vaddr + data->len);
+ xdefine("runtime.noptrbss", SNOPTRBSS, noptrbss->vaddr);
+ xdefine("runtime.enoptrbss", SNOPTRBSS, noptrbss->vaddr + noptrbss->len);
+ xdefine("runtime.end", SBSS, segdata.vaddr + segdata.len);
}
diff --git a/src/cmd/ld/decodesym.c b/src/cmd/ld/decodesym.c
index da48d3786..037263dce 100644
--- a/src/cmd/ld/decodesym.c
+++ b/src/cmd/ld/decodesym.c
@@ -4,10 +4,10 @@
#include "l.h"
#include "lib.h"
-#include "../../pkg/runtime/typekind.h"
+#include "../../runtime/typekind.h"
// Decoding the type.* symbols. This has to be in sync with
-// ../../pkg/runtime/type.go, or more specificaly, with what
+// ../../runtime/type.go, or more specificaly, with what
// ../gc/reflect.c stuffs in these.
static Reloc*
@@ -70,14 +70,28 @@ decode_inuxi(uchar* p, int sz)
static int
commonsize(void)
{
- return 7*PtrSize + 8;
+ return 8*PtrSize + 8;
}
// Type.commonType.kind
uint8
decodetype_kind(LSym *s)
{
- return s->p[1*PtrSize + 7] & ~KindNoPointers; // 0x13 / 0x1f
+ return s->p[1*PtrSize + 7] & KindMask; // 0x13 / 0x1f
+}
+
+// Type.commonType.kind
+uint8
+decodetype_noptr(LSym *s)
+{
+ return s->p[1*PtrSize + 7] & KindNoPointers; // 0x13 / 0x1f
+}
+
+// Type.commonType.kind
+uint8
+decodetype_usegcprog(LSym *s)
+{
+ return s->p[1*PtrSize + 7] & KindGCProg; // 0x13 / 0x1f
}
// Type.commonType.size
@@ -89,9 +103,18 @@ decodetype_size(LSym *s)
// Type.commonType.gc
LSym*
-decodetype_gc(LSym *s)
+decodetype_gcprog(LSym *s)
{
- return decode_reloc_sym(s, 1*PtrSize + 8 + 1*PtrSize);
+ return decode_reloc_sym(s, 1*PtrSize + 8 + 2*PtrSize);
+}
+
+uint8*
+decodetype_gcmask(LSym *s)
+{
+ LSym *mask;
+
+ mask = decode_reloc_sym(s, 1*PtrSize + 8 + 1*PtrSize);
+ return mask->p;
}
// Type.ArrayType.elem and Type.SliceType.Elem
@@ -104,7 +127,7 @@ decodetype_arrayelem(LSym *s)
vlong
decodetype_arraylen(LSym *s)
{
- return decode_inuxi(s->p + commonsize()+PtrSize, PtrSize);
+ return decode_inuxi(s->p + commonsize()+2*PtrSize, PtrSize);
}
// Type.PtrType.elem
@@ -120,6 +143,7 @@ decodetype_mapkey(LSym *s)
{
return decode_reloc_sym(s, commonsize()); // 0x1c / 0x30
}
+
LSym*
decodetype_mapvalue(LSym *s)
{
diff --git a/src/cmd/ld/doc.go b/src/cmd/ld/doc.go
index 8135bd549..5b5833db5 100644
--- a/src/cmd/ld/doc.go
+++ b/src/cmd/ld/doc.go
@@ -63,9 +63,9 @@ Options new in this version:
-w
Omit the DWARF symbol table.
-X symbol value
- Set the value of an otherwise uninitialized string variable.
- The symbol name should be of the form importpath.name,
- as displayed in the symbol table printed by "go tool nm".
+ Set the value of a string variable. The symbol name
+ should be of the form importpath.name, as displayed
+ in the symbol table printed by "go tool nm".
-race
Link with race detection libraries.
-B value
diff --git a/src/cmd/ld/dwarf.c b/src/cmd/ld/dwarf.c
index cc77b45cd..a3ba52325 100644
--- a/src/cmd/ld/dwarf.c
+++ b/src/cmd/ld/dwarf.c
@@ -19,7 +19,7 @@
#include "../ld/elf.h"
#include "../ld/macho.h"
#include "../ld/pe.h"
-#include "../../pkg/runtime/typekind.h"
+#include "../../runtime/typekind.h"
/*
* Offsets and sizes of the debug_* sections in the cout file.
@@ -141,16 +141,22 @@ sleb128put(vlong v)
* only a handful of them. The DWARF spec places no restriction on
* the ordering of attributes in the Abbrevs and DIEs, and we will
* always write them out in the order of declaration in the abbrev.
- * This implementation relies on tag, attr < 127, so they serialize as
- * a char. Higher numbered user-defined tags or attributes can be used
- * for storing internal data but won't be serialized.
*/
typedef struct DWAttrForm DWAttrForm;
struct DWAttrForm {
- uint8 attr;
+ uint16 attr;
uint8 form;
};
+// Go-specific type attributes.
+enum {
+ DW_AT_go_kind = 0x2900,
+ DW_AT_go_key = 0x2901,
+ DW_AT_go_elem = 0x2902,
+
+ DW_AT_internal_location = 253, // params and locals; not emitted
+};
+
// Index into the abbrevs table below.
// Keep in sync with ispubname() and ispubtype() below.
// ispubtype considers >= NULLTYPE public
@@ -260,7 +266,7 @@ static struct DWAbbrev {
DW_TAG_subrange_type, DW_CHILDREN_no,
// No name!
DW_AT_type, DW_FORM_ref_addr,
- DW_AT_upper_bound, DW_FORM_data1,
+ DW_AT_count, DW_FORM_udata,
0, 0
},
@@ -277,6 +283,7 @@ static struct DWAbbrev {
DW_AT_name, DW_FORM_string,
DW_AT_encoding, DW_FORM_data1,
DW_AT_byte_size, DW_FORM_data1,
+ DW_AT_go_kind, DW_FORM_data1,
0, 0
},
/* ARRAYTYPE */
@@ -286,6 +293,7 @@ static struct DWAbbrev {
DW_AT_name, DW_FORM_string,
DW_AT_type, DW_FORM_ref_addr,
DW_AT_byte_size, DW_FORM_udata,
+ DW_AT_go_kind, DW_FORM_data1,
0, 0
},
@@ -294,6 +302,8 @@ static struct DWAbbrev {
DW_TAG_typedef, DW_CHILDREN_no,
DW_AT_name, DW_FORM_string,
DW_AT_type, DW_FORM_ref_addr,
+ DW_AT_go_kind, DW_FORM_data1,
+ DW_AT_go_elem, DW_FORM_ref_addr,
0, 0
},
@@ -302,6 +312,7 @@ static struct DWAbbrev {
DW_TAG_subroutine_type, DW_CHILDREN_yes,
DW_AT_name, DW_FORM_string,
// DW_AT_type, DW_FORM_ref_addr,
+ DW_AT_go_kind, DW_FORM_data1,
0, 0
},
@@ -310,6 +321,7 @@ static struct DWAbbrev {
DW_TAG_typedef, DW_CHILDREN_yes,
DW_AT_name, DW_FORM_string,
DW_AT_type, DW_FORM_ref_addr,
+ DW_AT_go_kind, DW_FORM_data1,
0, 0
},
@@ -318,6 +330,9 @@ static struct DWAbbrev {
DW_TAG_typedef, DW_CHILDREN_no,
DW_AT_name, DW_FORM_string,
DW_AT_type, DW_FORM_ref_addr,
+ DW_AT_go_kind, DW_FORM_data1,
+ DW_AT_go_key, DW_FORM_ref_addr,
+ DW_AT_go_elem, DW_FORM_ref_addr,
0, 0
},
@@ -326,6 +341,7 @@ static struct DWAbbrev {
DW_TAG_pointer_type, DW_CHILDREN_no,
DW_AT_name, DW_FORM_string,
DW_AT_type, DW_FORM_ref_addr,
+ DW_AT_go_kind, DW_FORM_data1,
0, 0
},
/* BARE_PTRTYPE */
@@ -340,6 +356,8 @@ static struct DWAbbrev {
DW_TAG_structure_type, DW_CHILDREN_yes,
DW_AT_name, DW_FORM_string,
DW_AT_byte_size, DW_FORM_udata,
+ DW_AT_go_kind, DW_FORM_data1,
+ DW_AT_go_elem, DW_FORM_ref_addr,
0, 0
},
@@ -348,6 +366,7 @@ static struct DWAbbrev {
DW_TAG_structure_type, DW_CHILDREN_yes,
DW_AT_name, DW_FORM_string,
DW_AT_byte_size, DW_FORM_udata,
+ DW_AT_go_kind, DW_FORM_data1,
0, 0
},
@@ -356,6 +375,7 @@ static struct DWAbbrev {
DW_TAG_structure_type, DW_CHILDREN_yes,
DW_AT_name, DW_FORM_string,
DW_AT_byte_size, DW_FORM_udata,
+ DW_AT_go_kind, DW_FORM_data1,
0, 0
},
@@ -371,7 +391,8 @@ static struct DWAbbrev {
static void
writeabbrev(void)
{
- int i, n;
+ int i, j;
+ DWAttrForm *f;
abbrevo = cpos();
for (i = 1; i < DW_NABRV; i++) {
@@ -379,11 +400,13 @@ writeabbrev(void)
uleb128put(i);
uleb128put(abbrevs[i].tag);
cput(abbrevs[i].children);
- // 0 is not a valid attr or form, and DWAbbrev.attr is
- // 0-terminated, so we can treat it as a string
- n = strlen((char*)abbrevs[i].attr) / 2;
- strnput((char*)abbrevs[i].attr,
- (n+1) * sizeof(DWAttrForm));
+ for(j=0; j<nelem(abbrevs[i].attr); j++) {
+ f = &abbrevs[i].attr[j];
+ uleb128put(f->attr);
+ uleb128put(f->form);
+ if(f->attr == 0)
+ break;
+ }
}
cput(0);
abbrevsize = cpos() - abbrevo;
@@ -417,7 +440,7 @@ hashstr(char* s)
typedef struct DWAttr DWAttr;
struct DWAttr {
DWAttr *link;
- uint8 atr; // DW_AT_
+ uint16 atr; // DW_AT_
uint8 cls; // DW_CLS_
vlong value;
char *data;
@@ -445,7 +468,7 @@ static DWDie dwtypes;
static DWDie dwglobals;
static DWAttr*
-newattr(DWDie *die, uint8 attr, int cls, vlong value, char *data)
+newattr(DWDie *die, uint16 attr, int cls, vlong value, char *data)
{
DWAttr *a;
@@ -463,7 +486,7 @@ newattr(DWDie *die, uint8 attr, int cls, vlong value, char *data)
// name. getattr moves the desired one to the front so
// frequently searched ones are found faster.
static DWAttr*
-getattr(DWDie *die, uint8 attr)
+getattr(DWDie *die, uint16 attr)
{
DWAttr *a, *b;
@@ -622,7 +645,7 @@ adddwarfrel(LSym* sec, LSym* sym, vlong offsetbase, int siz, vlong addend)
}
static DWAttr*
-newrefattr(DWDie *die, uint8 attr, DWDie* ref)
+newrefattr(DWDie *die, uint16 attr, DWDie* ref)
{
if (ref == nil)
return nil;
@@ -762,22 +785,22 @@ putattr(int abbrev, int form, int cls, vlong value, char *data)
static void
putattrs(int abbrev, DWAttr* attr)
{
- DWAttr *attrs[DW_AT_recursive + 1];
DWAttrForm* af;
-
- memset(attrs, 0, sizeof attrs);
- for( ; attr; attr = attr->link)
- if (attr->atr < nelem(attrs))
- attrs[attr->atr] = attr;
-
- for(af = abbrevs[abbrev].attr; af->attr; af++)
- if (attrs[af->attr])
- putattr(abbrev, af->form,
- attrs[af->attr]->cls,
- attrs[af->attr]->value,
- attrs[af->attr]->data);
- else
- putattr(abbrev, af->form, 0, 0, nil);
+ DWAttr *ap;
+
+ for(af = abbrevs[abbrev].attr; af->attr; af++) {
+ for(ap=attr; ap; ap=ap->link) {
+ if(ap->atr == af->attr) {
+ putattr(abbrev, af->form,
+ ap->cls,
+ ap->value,
+ ap->data);
+ goto done;
+ }
+ }
+ putattr(abbrev, af->form, 0, 0, nil);
+ done:;
+ }
}
static void putdie(DWDie* die);
@@ -835,11 +858,8 @@ newmemberoffsetattr(DWDie *die, int32 offs)
int i;
i = 0;
- if (offs != 0) {
- block[i++] = DW_OP_consts;
- i += sleb128enc(offs, block+i);
- block[i++] = DW_OP_plus;
- }
+ block[i++] = DW_OP_plus_uconst;
+ i += uleb128enc(offs, block+i);
newattr(die, DW_AT_data_member_location, DW_CLS_BLOCK, i, mal(i));
memmove(die->attr->data, block, i);
}
@@ -852,15 +872,6 @@ newabslocexprattr(DWDie *die, vlong addr, LSym *sym)
newattr(die, DW_AT_location, DW_CLS_ADDRESS, addr, (char*)sym);
}
-
-// Fake attributes for slices, maps and channel
-enum {
- DW_AT_internal_elem_type = 250, // channels and slices
- DW_AT_internal_key_type = 251, // maps
- DW_AT_internal_val_type = 252, // maps
- DW_AT_internal_location = 253, // params and locals
-};
-
static DWDie* defptrto(DWDie *dwtype); // below
// Lookup predefined types
@@ -981,7 +992,8 @@ defgotype(LSym *gotype)
s = decodetype_arrayelem(gotype);
newrefattr(die, DW_AT_type, defgotype(s));
fld = newdie(die, DW_ABRV_ARRAYRANGE, "range");
- newattr(fld, DW_AT_upper_bound, DW_CLS_CONSTANT, decodetype_arraylen(gotype), 0);
+ // use actual length not upper bound; correct for 0-length arrays.
+ newattr(fld, DW_AT_count, DW_CLS_CONSTANT, decodetype_arraylen(gotype), 0);
newrefattr(fld, DW_AT_type, find_or_diag(&dwtypes, "uintptr"));
break;
@@ -989,7 +1001,7 @@ defgotype(LSym *gotype)
die = newdie(&dwtypes, DW_ABRV_CHANTYPE, name);
newattr(die, DW_AT_byte_size, DW_CLS_CONSTANT, bytesize, 0);
s = decodetype_chanelem(gotype);
- newrefattr(die, DW_AT_internal_elem_type, defgotype(s));
+ newrefattr(die, DW_AT_go_elem, defgotype(s));
break;
case KindFunc:
@@ -1027,9 +1039,9 @@ defgotype(LSym *gotype)
case KindMap:
die = newdie(&dwtypes, DW_ABRV_MAPTYPE, name);
s = decodetype_mapkey(gotype);
- newrefattr(die, DW_AT_internal_key_type, defgotype(s));
+ newrefattr(die, DW_AT_go_key, defgotype(s));
s = decodetype_mapvalue(gotype);
- newrefattr(die, DW_AT_internal_val_type, defgotype(s));
+ newrefattr(die, DW_AT_go_elem, defgotype(s));
break;
case KindPtr:
@@ -1044,7 +1056,7 @@ defgotype(LSym *gotype)
dotypedef(&dwtypes, name, die);
newattr(die, DW_AT_byte_size, DW_CLS_CONSTANT, bytesize, 0);
s = decodetype_arrayelem(gotype);
- newrefattr(die, DW_AT_internal_elem_type, defgotype(s));
+ newrefattr(die, DW_AT_go_elem, defgotype(s));
break;
case KindString:
@@ -1076,7 +1088,9 @@ defgotype(LSym *gotype)
diag("dwarf: definition of unknown kind %d: %s", kind, gotype->name);
die = newdie(&dwtypes, DW_ABRV_TYPEDECL, name);
newrefattr(die, DW_AT_type, find_or_diag(&dwtypes, "<unspecified>"));
- }
+ }
+
+ newattr(die, DW_AT_go_kind, DW_CLS_CONSTANT, kind, 0);
return die;
}
@@ -1171,7 +1185,7 @@ synthesizeslicetypes(DWDie *die)
if (die->abbrev != DW_ABRV_SLICETYPE)
continue;
copychildren(die, prototype);
- elem = (DWDie*) getattr(die, DW_AT_internal_elem_type)->data;
+ elem = (DWDie*) getattr(die, DW_AT_go_elem)->data;
substitutetype(die, "array", defptrto(elem));
}
}
@@ -1208,7 +1222,7 @@ synthesizemaptypes(DWDie *die)
DWAttr *a;
hash = walktypedef(defgotype(lookup_or_diag("type.runtime.hmap")));
- bucket = walktypedef(defgotype(lookup_or_diag("type.runtime.bucket")));
+ bucket = walktypedef(defgotype(lookup_or_diag("type.runtime.bmap")));
if (hash == nil)
return;
@@ -1217,8 +1231,8 @@ synthesizemaptypes(DWDie *die)
if (die->abbrev != DW_ABRV_MAPTYPE)
continue;
- keytype = walktypedef((DWDie*) getattr(die, DW_AT_internal_key_type)->data);
- valtype = walktypedef((DWDie*) getattr(die, DW_AT_internal_val_type)->data);
+ keytype = walktypedef((DWDie*) getattr(die, DW_AT_go_key)->data);
+ valtype = walktypedef((DWDie*) getattr(die, DW_AT_go_elem)->data);
// compute size info like hashmap.c does.
a = getattr(keytype, DW_AT_byte_size);
@@ -1243,7 +1257,7 @@ synthesizemaptypes(DWDie *die)
newattr(dwhk, DW_AT_byte_size, DW_CLS_CONSTANT, BucketSize * keysize, 0);
newrefattr(dwhk, DW_AT_type, indirect_key ? defptrto(keytype) : keytype);
fld = newdie(dwhk, DW_ABRV_ARRAYRANGE, "size");
- newattr(fld, DW_AT_upper_bound, DW_CLS_CONSTANT, BucketSize, 0);
+ newattr(fld, DW_AT_count, DW_CLS_CONSTANT, BucketSize, 0);
newrefattr(fld, DW_AT_type, find_or_diag(&dwtypes, "uintptr"));
// Construct type to represent an array of BucketSize values
@@ -1253,7 +1267,7 @@ synthesizemaptypes(DWDie *die)
newattr(dwhv, DW_AT_byte_size, DW_CLS_CONSTANT, BucketSize * valsize, 0);
newrefattr(dwhv, DW_AT_type, indirect_val ? defptrto(valtype) : valtype);
fld = newdie(dwhv, DW_ABRV_ARRAYRANGE, "size");
- newattr(fld, DW_AT_upper_bound, DW_CLS_CONSTANT, BucketSize, 0);
+ newattr(fld, DW_AT_count, DW_CLS_CONSTANT, BucketSize, 0);
newrefattr(fld, DW_AT_type, find_or_diag(&dwtypes, "uintptr"));
// Construct bucket<K,V>
@@ -1309,7 +1323,7 @@ synthesizechantypes(DWDie *die)
for (; die != nil; die = die->link) {
if (die->abbrev != DW_ABRV_CHANTYPE)
continue;
- elemtype = (DWDie*) getattr(die, DW_AT_internal_elem_type)->data;
+ elemtype = (DWDie*) getattr(die, DW_AT_go_elem)->data;
a = getattr(elemtype, DW_AT_byte_size);
elemsize = a ? a->value : PtrSize;
@@ -1696,6 +1710,9 @@ enum
static void
putpccfadelta(vlong deltapc, vlong cfa)
{
+ cput(DW_CFA_def_cfa_offset_sf);
+ sleb128put(cfa / DATAALIGNMENTFACTOR);
+
if (deltapc < 0x40) {
cput(DW_CFA_advance_loc + deltapc);
} else if (deltapc < 0x100) {
@@ -1708,9 +1725,6 @@ putpccfadelta(vlong deltapc, vlong cfa)
cput(DW_CFA_advance_loc4);
LPUT(deltapc);
}
-
- cput(DW_CFA_def_cfa_offset_sf);
- sleb128put(cfa / DATAALIGNMENTFACTOR);
}
static void
@@ -1719,6 +1733,7 @@ writeframes(void)
LSym *s;
vlong fdeo, fdesize, pad;
Pciter pcsp;
+ uint32 nextpc;
if(framesec == S)
framesec = linklookup(ctxt, ".dwarfframe", 0);
@@ -1761,8 +1776,17 @@ writeframes(void)
addrput(0); // initial location
addrput(0); // address range
- for(pciterinit(ctxt, &pcsp, &s->pcln->pcsp); !pcsp.done; pciternext(&pcsp))
- putpccfadelta(pcsp.nextpc - pcsp.pc, PtrSize + pcsp.value);
+ for(pciterinit(ctxt, &pcsp, &s->pcln->pcsp); !pcsp.done; pciternext(&pcsp)) {
+ nextpc = pcsp.nextpc;
+ // pciterinit goes up to the end of the function,
+ // but DWARF expects us to stop just before the end.
+ if(nextpc == s->size) {
+ nextpc--;
+ if(nextpc < pcsp.pc)
+ continue;
+ }
+ putpccfadelta(nextpc - pcsp.pc, PtrSize + pcsp.value);
+ }
fdesize = cpos() - fdeo - 4; // exclude the length field.
pad = rnd(fdesize, PtrSize) - fdesize;
@@ -2028,13 +2052,15 @@ dwarfemitdebugsections(void)
newdie(&dwtypes, DW_ABRV_NULLTYPE, "<unspecified>");
newdie(&dwtypes, DW_ABRV_NULLTYPE, "void");
newdie(&dwtypes, DW_ABRV_BARE_PTRTYPE, "unsafe.Pointer");
+
die = newdie(&dwtypes, DW_ABRV_BASETYPE, "uintptr"); // needed for array size
newattr(die, DW_AT_encoding, DW_CLS_CONSTANT, DW_ATE_unsigned, 0);
newattr(die, DW_AT_byte_size, DW_CLS_CONSTANT, PtrSize, 0);
+ newattr(die, DW_AT_go_kind, DW_CLS_CONSTANT, KindUintptr, 0);
// Needed by the prettyprinter code for interface inspection.
- defgotype(lookup_or_diag("type.runtime.rtype"));
- defgotype(lookup_or_diag("type.runtime.interfaceType"));
+ defgotype(lookup_or_diag("type.runtime._type"));
+ defgotype(lookup_or_diag("type.runtime.interfacetype"));
defgotype(lookup_or_diag("type.runtime.itab"));
genasmsym(defdwsymb);
diff --git a/src/cmd/ld/elf.c b/src/cmd/ld/elf.c
index 0555cf46a..3196961f3 100644
--- a/src/cmd/ld/elf.c
+++ b/src/cmd/ld/elf.c
@@ -776,7 +776,8 @@ elfshbits(Section *sect)
if(sect->rwx & 2)
sh->flags |= SHF_WRITE;
if(strcmp(sect->name, ".tbss") == 0) {
- sh->flags |= SHF_TLS;
+ if(strcmp(goos, "android") != 0)
+ sh->flags |= SHF_TLS; // no TLS on android
sh->type = SHT_NOBITS;
}
if(linkmode != LinkExternal)
diff --git a/src/cmd/ld/ldelf.c b/src/cmd/ld/ldelf.c
index 1d7c4c13e..b5d081949 100644
--- a/src/cmd/ld/ldelf.c
+++ b/src/cmd/ld/ldelf.c
@@ -539,7 +539,7 @@ ldelf(Biobuf *f, char *pkg, int64 len, char *pn)
s->type = SRODATA;
break;
case ElfSectFlagAlloc + ElfSectFlagWrite:
- s->type = SDATA;
+ s->type = SNOPTRDATA;
break;
case ElfSectFlagAlloc + ElfSectFlagExec:
s->type = STEXT;
@@ -572,7 +572,7 @@ ldelf(Biobuf *f, char *pkg, int64 len, char *pn)
if(s->size < sym.size)
s->size = sym.size;
if(s->type == 0 || s->type == SXREF)
- s->type = SBSS;
+ s->type = SNOPTRBSS;
continue;
}
if(sym.shndx >= obj->nsect || sym.shndx == 0)
@@ -582,6 +582,8 @@ ldelf(Biobuf *f, char *pkg, int64 len, char *pn)
continue;
sect = obj->sect+sym.shndx;
if(sect->sym == nil) {
+ if(strncmp(sym.name, ".Linfo_string", 13) == 0) // clang does this
+ continue;
diag("%s: sym#%d: ignoring %s in section %d (type %d)", pn, i, sym.name, sym.shndx, sym.type);
continue;
}
@@ -817,7 +819,7 @@ readsym(ElfObj *obj, int i, ElfSym *sym, int needSym)
}
break;
case ElfSymBindLocal:
- if(!(thechar == '5' && (strcmp(sym->name, "$a") == 0 || strcmp(sym->name, "$d") == 0))) // binutils for arm generate these mapping symbols, ignore these
+ if(!(thechar == '5' && (strncmp(sym->name, "$a", 2) == 0 || strncmp(sym->name, "$d", 2) == 0))) // binutils for arm generate these mapping symbols, ignore these
if(needSym) {
// local names and hidden visiblity global names are unique
// and should only reference by its index, not name, so we
diff --git a/src/cmd/ld/ldmacho.c b/src/cmd/ld/ldmacho.c
index 413dedabd..71cfa63de 100644
--- a/src/cmd/ld/ldmacho.c
+++ b/src/cmd/ld/ldmacho.c
@@ -589,10 +589,10 @@ ldmacho(Biobuf *f, char *pkg, int64 len, char *pn)
s->type = SRODATA;
} else {
if (strcmp(sect->name, "__bss") == 0) {
- s->type = SBSS;
+ s->type = SNOPTRBSS;
s->np = 0;
} else
- s->type = SDATA;
+ s->type = SNOPTRDATA;
}
sect->sym = s;
}
diff --git a/src/cmd/ld/ldpe.c b/src/cmd/ld/ldpe.c
index f6eda900d..4f5e51f2f 100644
--- a/src/cmd/ld/ldpe.c
+++ b/src/cmd/ld/ldpe.c
@@ -128,6 +128,7 @@ struct PeObj {
};
static int map(PeObj *obj, PeSect *sect);
+static int issect(PeSym *s);
static int readsym(PeObj *obj, int i, PeSym **sym);
void
@@ -179,6 +180,15 @@ ldpe(Biobuf *f, char *pkg, int64 len, char *pn)
Bseek(f, base+obj->fh.PointerToSymbolTable+sizeof(symbuf)*obj->fh.NumberOfSymbols, 0);
if(Bread(f, obj->snames, l) != l)
goto bad;
+ // rewrite section names if they start with /
+ for(i=0; i < obj->fh.NumberOfSections; i++) {
+ if(obj->sect[i].name == nil)
+ continue;
+ if(obj->sect[i].name[0] != '/')
+ continue;
+ l = atoi(obj->sect[i].name + 1);
+ obj->sect[i].name = (char*)&obj->snames[l];
+ }
// read symbols
obj->pesym = mal(obj->fh.NumberOfSymbols*sizeof obj->pesym[0]);
obj->npesym = obj->fh.NumberOfSymbols;
@@ -230,10 +240,10 @@ ldpe(Biobuf *f, char *pkg, int64 len, char *pn)
s->type = SRODATA;
break;
case IMAGE_SCN_CNT_UNINITIALIZED_DATA|IMAGE_SCN_MEM_READ|IMAGE_SCN_MEM_WRITE: //.bss
- s->type = SBSS;
+ s->type = SNOPTRBSS;
break;
case IMAGE_SCN_CNT_INITIALIZED_DATA|IMAGE_SCN_MEM_READ|IMAGE_SCN_MEM_WRITE: //.data
- s->type = SDATA;
+ s->type = SNOPTRDATA;
break;
case IMAGE_SCN_CNT_CODE|IMAGE_SCN_MEM_EXECUTE|IMAGE_SCN_MEM_READ: //.text
s->type = STEXT;
@@ -309,8 +319,8 @@ ldpe(Biobuf *f, char *pkg, int64 len, char *pn)
// ld -r could generate multiple section symbols for the
// same section but with different values, we have to take
// that into account
- if (obj->pesym[symindex].name[0] == '.')
- rp->add += obj->pesym[symindex].value;
+ if(issect(&obj->pesym[symindex]))
+ rp->add += obj->pesym[symindex].value;
}
qsort(r, rsect->sh.NumberOfRelocations, sizeof r[0], rbyoff);
@@ -318,12 +328,12 @@ ldpe(Biobuf *f, char *pkg, int64 len, char *pn)
s->r = r;
s->nr = rsect->sh.NumberOfRelocations;
}
-
+
// enter sub-symbols into symbol table.
for(i=0; i<obj->npesym; i++) {
if(obj->pesym[i].name == 0)
continue;
- if(obj->pesym[i].name[0] == '.') //skip section
+ if(issect(&obj->pesym[i]))
continue;
if(obj->pesym[i].sectnum > 0) {
sect = &obj->sect[obj->pesym[i].sectnum-1];
@@ -338,7 +348,7 @@ ldpe(Biobuf *f, char *pkg, int64 len, char *pn)
if(s->type == SDYNIMPORT)
s->plt = -2; // flag for dynimport in PE object files.
if (s->type == SXREF && sym->value > 0) {// global data
- s->type = SDATA;
+ s->type = SNOPTRDATA;
s->size = sym->value;
}
continue;
@@ -422,6 +432,12 @@ map(PeObj *obj, PeSect *sect)
}
static int
+issect(PeSym *s)
+{
+ return s->sclass == IMAGE_SYM_CLASS_STATIC && s->type == 0 && s->name[0] == '.';
+}
+
+static int
readsym(PeObj *obj, int i, PeSym **y)
{
LSym *s;
@@ -436,7 +452,7 @@ readsym(PeObj *obj, int i, PeSym **y)
sym = &obj->pesym[i];
*y = sym;
- if(sym->name[0] == '.') // .section
+ if(issect(sym))
name = obj->sect[sym->sectnum-1].sym->name;
else {
name = sym->name;
diff --git a/src/cmd/ld/lib.c b/src/cmd/ld/lib.c
index da6194e4f..f889aba8a 100644
--- a/src/cmd/ld/lib.c
+++ b/src/cmd/ld/lib.c
@@ -33,8 +33,8 @@
#include "lib.h"
#include "../ld/elf.h"
#include "../ld/dwarf.h"
-#include "../../pkg/runtime/stack.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/stack.h"
+#include "../../runtime/funcdata.h"
#include <ar.h>
#if !(defined(_WIN32) || defined(PLAN9))
@@ -144,6 +144,10 @@ libinit(void)
void
errorexit(void)
{
+ if(cout >= 0) {
+ // For rmtemp run at atexit time on Windows.
+ close(cout);
+ }
if(nerrors) {
if(cout >= 0)
mayberemoveoutfile();
@@ -177,7 +181,7 @@ void
loadlib(void)
{
int i, w, x;
- LSym *s, *gmsym;
+ LSym *s, *tlsg;
char* cgostrsym;
if(flag_shared) {
@@ -217,8 +221,12 @@ loadlib(void)
// Provided by the code that imports the package.
// Since we are simulating the import, we have to provide this string.
cgostrsym = "go.string.\"runtime/cgo\"";
- if(linkrlookup(ctxt, cgostrsym, 0) == nil)
+ if(linkrlookup(ctxt, cgostrsym, 0) == nil) {
+ s = linklookup(ctxt, cgostrsym, 0);
+ s->type = SRODATA;
+ s->reachable = 1;
addstrdata(cgostrsym, "runtime/cgo");
+ }
}
if(linkmode == LinkAuto) {
@@ -226,6 +234,10 @@ loadlib(void)
linkmode = LinkExternal;
else
linkmode = LinkInternal;
+
+ // Force external linking for android.
+ if(strcmp(goos, "android") == 0)
+ linkmode = LinkExternal;
}
if(linkmode == LinkInternal) {
@@ -244,12 +256,12 @@ loadlib(void)
}
}
- gmsym = linklookup(ctxt, "runtime.tlsgm", 0);
- gmsym->type = STLSBSS;
- gmsym->size = 2*PtrSize;
- gmsym->hide = 1;
- gmsym->reachable = 1;
- ctxt->gmsym = gmsym;
+ tlsg = linklookup(ctxt, "runtime.tlsg", 0);
+ tlsg->type = STLSBSS;
+ tlsg->size = PtrSize;
+ tlsg->hide = 1;
+ tlsg->reachable = 1;
+ ctxt->tlsg = tlsg;
// Now that we know the link mode, trim the dynexp list.
x = CgoExportDynamic;
@@ -895,7 +907,7 @@ unmal(void *v, uint32 n)
* escaping are %, ., and ", but we escape all control characters too.
*
* If you edit this, edit ../gc/subr.c:/^pathtoprefix too.
- * If you edit this, edit ../../pkg/debug/goobj/read.go:/importPathToPrefix too.
+ * If you edit this, edit ../../debug/goobj/read.go:/importPathToPrefix too.
*/
static char*
pathtoprefix(char *s)
@@ -1345,10 +1357,10 @@ genasmsym(void (*put)(LSym*, char*, int, vlong, vlong, int, LSym*))
// These symbols won't show up in the first loop below because we
// skip STEXT symbols. Normal STEXT symbols are emitted by walking textp.
- s = linklookup(ctxt, "text", 0);
+ s = linklookup(ctxt, "runtime.text", 0);
if(s->type == STEXT)
put(s, s->name, 'T', s->value, s->size, s->version, 0);
- s = linklookup(ctxt, "etext", 0);
+ s = linklookup(ctxt, "runtime.etext", 0);
if(s->type == STEXT)
put(s, s->name, 'T', s->value, s->size, s->version, 0);
@@ -1550,3 +1562,56 @@ diag(char *fmt, ...)
errorexit();
}
}
+
+void
+checkgo(void)
+{
+ LSym *s;
+ Reloc *r;
+ int i;
+ int changed;
+
+ if(!debug['C'])
+ return;
+
+ // TODO(rsc,khr): Eventually we want to get to no Go-called C functions at all,
+ // which would simplify this logic quite a bit.
+
+ // Mark every Go-called C function with cfunc=2, recursively.
+ do {
+ changed = 0;
+ for(s = ctxt->textp; s != nil; s = s->next) {
+ if(s->cfunc == 0 || (s->cfunc == 2 && s->nosplit)) {
+ for(i=0; i<s->nr; i++) {
+ r = &s->r[i];
+ if(r->sym == nil)
+ continue;
+ if((r->type == R_CALL || r->type == R_CALLARM) && r->sym->type == STEXT) {
+ if(r->sym->cfunc == 1) {
+ changed = 1;
+ r->sym->cfunc = 2;
+ }
+ }
+ }
+ }
+ }
+ }while(changed);
+
+ // Complain about Go-called C functions that can split the stack
+ // (that can be preempted for garbage collection or trigger a stack copy).
+ for(s = ctxt->textp; s != nil; s = s->next) {
+ if(s->cfunc == 0 || (s->cfunc == 2 && s->nosplit)) {
+ for(i=0; i<s->nr; i++) {
+ r = &s->r[i];
+ if(r->sym == nil)
+ continue;
+ if((r->type == R_CALL || r->type == R_CALLARM) && r->sym->type == STEXT) {
+ if(s->cfunc == 0 && r->sym->cfunc == 2 && !r->sym->nosplit)
+ print("Go %s calls C %s\n", s->name, r->sym->name);
+ else if(s->cfunc == 2 && s->nosplit && !r->sym->nosplit)
+ print("Go calls C %s calls %s\n", s->name, r->sym->name);
+ }
+ }
+ }
+ }
+}
diff --git a/src/cmd/ld/lib.h b/src/cmd/ld/lib.h
index 7267c6371..067ffa0bc 100644
--- a/src/cmd/ld/lib.h
+++ b/src/cmd/ld/lib.h
@@ -33,6 +33,10 @@
// A section further describes the pieces of that block for
// use in debuggers and such.
+enum {
+ MAXIO = 8192,
+};
+
typedef struct Segment Segment;
typedef struct Section Section;
@@ -179,12 +183,13 @@ uint16 be16(uchar *b);
uint32 be32(uchar *b);
uint64 be64(uchar *b);
void callgraph(void);
+void checkgo(void);
void cflush(void);
-void codeblk(int32 addr, int32 size);
+void codeblk(int64 addr, int64 size);
vlong cpos(void);
void cseek(vlong p);
void cwrite(void *buf, int n);
-void datblk(int32 addr, int32 size);
+void datblk(int64 addr, int64 size);
int datcmp(LSym *s1, LSym *s2);
vlong datoff(vlong addr);
void deadcode(void);
@@ -196,9 +201,12 @@ int decodetype_funcincount(LSym *s);
LSym* decodetype_funcintype(LSym *s, int i);
int decodetype_funcoutcount(LSym *s);
LSym* decodetype_funcouttype(LSym *s, int i);
-LSym* decodetype_gc(LSym *s);
+LSym* decodetype_gcprog(LSym *s);
+uint8* decodetype_gcmask(LSym *s);
vlong decodetype_ifacemethodcount(LSym *s);
uint8 decodetype_kind(LSym *s);
+uint8 decodetype_noptr(LSym *s);
+uint8 decodetype_usegcprog(LSym *s);
LSym* decodetype_mapkey(LSym *s);
LSym* decodetype_mapvalue(LSym *s);
LSym* decodetype_ptrelem(LSym *s);
diff --git a/src/cmd/ld/macho.c b/src/cmd/ld/macho.c
index 61306bb7c..fe7e10e46 100644
--- a/src/cmd/ld/macho.c
+++ b/src/cmd/ld/macho.c
@@ -590,8 +590,7 @@ machosymtab(void)
if(strstr(s->extname, "·") == nil) {
addstring(symstr, s->extname);
} else {
- p = s->extname;
- while (*p++ != '\0') {
+ for(p = s->extname; *p; p++) {
if((uchar)*p == 0xc2 && (uchar)*(p+1) == 0xb7) {
adduint8(ctxt, symstr, '.');
p++;
diff --git a/src/cmd/ld/pass.c b/src/cmd/ld/pass.c
deleted file mode 100644
index 788b7c75a..000000000
--- a/src/cmd/ld/pass.c
+++ /dev/null
@@ -1,104 +0,0 @@
-// Inferno utils/6l/pass.c
-// http://code.google.com/p/inferno-os/source/browse/utils/6l/pass.c
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-// Code and data passes.
-
-#include "l.h"
-#include "../ld/lib.h"
-#include "../../pkg/runtime/stack.h"
-
-void
-follow(void)
-{
- LSym *s;
-
- if(debug['v'])
- Bprint(&bso, "%5.2f follow\n", cputime());
- Bflush(&bso);
-
- for(s = ctxt->textp; s != nil; s = s->next)
- ctxt->arch->follow(ctxt, s);
-}
-
-void
-patch(void)
-{
- LSym *s;
-
- if(debug['v'])
- Bprint(&bso, "%5.2f mkfwd\n", cputime());
- Bflush(&bso);
- for(s = ctxt->textp; s != nil; s = s->next)
- mkfwd(s);
- if(debug['v'])
- Bprint(&bso, "%5.2f patch\n", cputime());
- Bflush(&bso);
-
- if(flag_shared) {
- s = linklookup(ctxt, "init_array", 0);
- s->type = SINITARR;
- s->reachable = 1;
- s->hide = 1;
- addaddr(ctxt, s, linklookup(ctxt, INITENTRY, 0));
- }
-
- for(s = ctxt->textp; s != nil; s = s->next)
- linkpatch(ctxt, s);
-}
-
-void
-dostkoff(void)
-{
- LSym *s;
-
- for(s = ctxt->textp; s != nil; s = s->next)
- ctxt->arch->addstacksplit(ctxt, s);
-}
-
-void
-span(void)
-{
- LSym *s;
-
- if(debug['v'])
- Bprint(&bso, "%5.2f span\n", cputime());
-
- for(s = ctxt->textp; s != nil; s = s->next)
- ctxt->arch->assemble(ctxt, s);
-}
-
-void
-pcln(void)
-{
- LSym *s;
-
- for(s = ctxt->textp; s != nil; s = s->next)
- linkpcln(ctxt, s);
-}
diff --git a/src/cmd/ld/pcln.c b/src/cmd/ld/pcln.c
index 4c2ffa78e..69671c0fc 100644
--- a/src/cmd/ld/pcln.c
+++ b/src/cmd/ld/pcln.c
@@ -4,7 +4,7 @@
#include "l.h"
#include "lib.h"
-#include "../../pkg/runtime/funcdata.h"
+#include "../../runtime/funcdata.h"
static void
addvarint(Pcdata *d, uint32 val)
@@ -90,7 +90,7 @@ renumberfiles(Link *ctxt, LSym **files, int nfiles, Pcdata *d)
}
dv = val - newval;
newval = val;
- v = (uint32)(dv<<1) ^ (uint32)(int32)(dv>>31);
+ v = ((uint32)dv<<1) ^ (uint32)(int32)(dv>>31);
addvarint(&out, v);
// pc delta
@@ -119,7 +119,7 @@ pclntab(void)
static Pcln zpcln;
funcdata_bytes = 0;
- ftab = linklookup(ctxt, "pclntab", 0);
+ ftab = linklookup(ctxt, "runtime.pclntab", 0);
ftab->type = SPCLNTAB;
ftab->reachable = 1;
diff --git a/src/cmd/ld/pobj.c b/src/cmd/ld/pobj.c
index 819c37954..63460df30 100644
--- a/src/cmd/ld/pobj.c
+++ b/src/cmd/ld/pobj.c
@@ -45,6 +45,8 @@ char* paramspace = "FP";
void
main(int argc, char *argv[])
{
+ int i;
+
linkarchinit();
ctxt = linknew(thelinkarch);
ctxt->thechar = thechar;
@@ -63,7 +65,13 @@ main(int argc, char *argv[])
INITRND = -1;
INITENTRY = 0;
linkmode = LinkAuto;
- nuxiinit();
+
+ // For testing behavior of go command when tools crash.
+ // Undocumented, not in standard flag parser to avoid
+ // exposing in usage message.
+ for(i=1; i<argc; i++)
+ if(strcmp(argv[i], "-crash_for_testing") == 0)
+ *(volatile int*)0 = 0;
if(thechar == '5' && ctxt->goarm == 5)
debug['F'] = 1;
@@ -72,6 +80,7 @@ main(int argc, char *argv[])
if(thechar == '6')
flagcount("8", "assume 64-bit addresses", &debug['8']);
flagfn1("B", "info: define ELF NT_GNU_BUILD_ID note", addbuildinfo);
+ flagcount("C", "check Go calls to C code", &debug['C']);
flagint64("D", "addr: data address", &INITDAT);
flagstr("E", "sym: entry symbol", &INITENTRY);
if(thechar == '5')
@@ -96,11 +105,11 @@ main(int argc, char *argv[])
flagcount("a", "disassemble output", &debug['a']);
flagcount("c", "dump call graph", &debug['c']);
flagcount("d", "disable dynamic executable", &debug['d']);
- flagstr("extld", "linker to run in external mode", &extld);
- flagstr("extldflags", "flags for external linker", &extldflags);
+ flagstr("extld", "ld: linker to run in external mode", &extld);
+ flagstr("extldflags", "ldflags: flags for external linker", &extldflags);
flagcount("f", "ignore version mismatch", &debug['f']);
flagcount("g", "disable go package data checks", &debug['g']);
- flagstr("installsuffix", "pkg directory suffix", &flag_installsuffix);
+ flagstr("installsuffix", "suffix: pkg directory suffix", &flag_installsuffix);
flagstr("k", "sym: set field tracking symbol", &tracksym);
flagfn1("linkmode", "mode: set link mode (internal, external, auto)", setlinkmode);
flagcount("n", "dump symbol table", &debug['n']);
@@ -110,7 +119,7 @@ main(int argc, char *argv[])
flagcount("s", "disable symbol table", &debug['s']);
if(thechar == '5' || thechar == '6')
flagcount("shared", "generate shared object (implies -linkmode external)", &flag_shared);
- flagstr("tmpdir", "leave temporary files in this directory", &tmpdir);
+ flagstr("tmpdir", "dir: leave temporary files in this directory", &tmpdir);
flagcount("u", "reject unsafe packages", &debug['u']);
flagcount("v", "print link trace", &debug['v']);
flagcount("w", "disable DWARF generation", &debug['w']);
@@ -139,7 +148,7 @@ main(int argc, char *argv[])
if(HEADTYPE == -1)
HEADTYPE = headtype(goos);
ctxt->headtype = HEADTYPE;
- if (headstring == nil)
+ if(headstring == nil)
headstring = headstr(HEADTYPE);
archinit();
@@ -163,6 +172,7 @@ main(int argc, char *argv[])
mark(linklookup(ctxt, "runtime.read_tls_fallback", 0));
}
+ checkgo();
deadcode();
callgraph();
paramspace = "SP"; /* (FP) now (SP) on output */
diff --git a/src/cmd/ld/symtab.c b/src/cmd/ld/symtab.c
index 6d321c0bb..156270c8f 100644
--- a/src/cmd/ld/symtab.c
+++ b/src/cmd/ld/symtab.c
@@ -198,13 +198,18 @@ asmelfsym(void)
genasmsym(putelfsym);
if(linkmode == LinkExternal && HEADTYPE != Hopenbsd) {
- s = linklookup(ctxt, "runtime.tlsgm", 0);
+ s = linklookup(ctxt, "runtime.tlsg", 0);
if(s->sect == nil) {
ctxt->cursym = nil;
diag("missing section for %s", s->name);
errorexit();
}
- putelfsyment(putelfstr(s->name), 0, 2*PtrSize, (STB_LOCAL<<4)|STT_TLS, s->sect->elfsect->shnum, 0);
+ if (strcmp(goos, "android") == 0) {
+ // Android emulates runtime.tlsg as a regular variable.
+ putelfsyment(putelfstr(s->name), 0, s->size, (STB_LOCAL<<4)|STT_OBJECT, s->sect->elfsect->shnum, 0);
+ } else {
+ putelfsyment(putelfstr(s->name), 0, s->size, (STB_LOCAL<<4)|STT_TLS, s->sect->elfsect->shnum, 0);
+ }
s->elfsym = numelfsym++;
}
@@ -341,36 +346,36 @@ symtab(void)
// Define these so that they'll get put into the symbol table.
// data.c:/^address will provide the actual values.
- xdefine("text", STEXT, 0);
- xdefine("etext", STEXT, 0);
- xdefine("typelink", SRODATA, 0);
- xdefine("etypelink", SRODATA, 0);
- xdefine("rodata", SRODATA, 0);
- xdefine("erodata", SRODATA, 0);
- xdefine("noptrdata", SNOPTRDATA, 0);
- xdefine("enoptrdata", SNOPTRDATA, 0);
- xdefine("data", SDATA, 0);
- xdefine("edata", SDATA, 0);
- xdefine("bss", SBSS, 0);
- xdefine("ebss", SBSS, 0);
- xdefine("noptrbss", SNOPTRBSS, 0);
- xdefine("enoptrbss", SNOPTRBSS, 0);
- xdefine("end", SBSS, 0);
- xdefine("epclntab", SRODATA, 0);
- xdefine("esymtab", SRODATA, 0);
+ xdefine("runtime.text", STEXT, 0);
+ xdefine("runtime.etext", STEXT, 0);
+ xdefine("runtime.typelink", SRODATA, 0);
+ xdefine("runtime.etypelink", SRODATA, 0);
+ xdefine("runtime.rodata", SRODATA, 0);
+ xdefine("runtime.erodata", SRODATA, 0);
+ xdefine("runtime.noptrdata", SNOPTRDATA, 0);
+ xdefine("runtime.enoptrdata", SNOPTRDATA, 0);
+ xdefine("runtime.data", SDATA, 0);
+ xdefine("runtime.edata", SDATA, 0);
+ xdefine("runtime.bss", SBSS, 0);
+ xdefine("runtime.ebss", SBSS, 0);
+ xdefine("runtime.noptrbss", SNOPTRBSS, 0);
+ xdefine("runtime.enoptrbss", SNOPTRBSS, 0);
+ xdefine("runtime.end", SBSS, 0);
+ xdefine("runtime.epclntab", SRODATA, 0);
+ xdefine("runtime.esymtab", SRODATA, 0);
// garbage collection symbols
- s = linklookup(ctxt, "gcdata", 0);
+ s = linklookup(ctxt, "runtime.gcdata", 0);
s->type = SRODATA;
s->size = 0;
s->reachable = 1;
- xdefine("egcdata", SRODATA, 0);
+ xdefine("runtime.egcdata", SRODATA, 0);
- s = linklookup(ctxt, "gcbss", 0);
+ s = linklookup(ctxt, "runtime.gcbss", 0);
s->type = SRODATA;
s->size = 0;
s->reachable = 1;
- xdefine("egcbss", SRODATA, 0);
+ xdefine("runtime.egcbss", SRODATA, 0);
// pseudo-symbols to mark locations of type, string, and go string data.
s = linklookup(ctxt, "type.*", 0);
@@ -391,9 +396,9 @@ symtab(void)
s->reachable = 1;
symgofunc = s;
- symtypelink = linklookup(ctxt, "typelink", 0);
+ symtypelink = linklookup(ctxt, "runtime.typelink", 0);
- symt = linklookup(ctxt, "symtab", 0);
+ symt = linklookup(ctxt, "runtime.symtab", 0);
symt->type = SSYMTAB;
symt->size = 0;
symt->reachable = 1;
diff --git a/src/cmd/ld/textflag.h b/src/cmd/ld/textflag.h
index 2a76e76c2..0ee8b5f1c 100644
--- a/src/cmd/ld/textflag.h
+++ b/src/cmd/ld/textflag.h
@@ -21,3 +21,16 @@
#define WRAPPER 32
// This function uses its incoming context register.
#define NEEDCTXT 64
+
+/*c2go
+enum
+{
+ NOPROF = 1,
+ DUPOK = 2,
+ NOSPLIT = 4,
+ RODATA = 8,
+ NOPTR = 16,
+ WRAPPER = 32,
+ NEEDCTXT = 64,
+};
+*/
diff --git a/src/cmd/nm/elf.go b/src/cmd/nm/elf.go
deleted file mode 100644
index 5aaa194dd..000000000
--- a/src/cmd/nm/elf.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Parsing of ELF executables (Linux, FreeBSD, and so on).
-
-package main
-
-import (
- "debug/elf"
- "os"
-)
-
-func elfSymbols(f *os.File) []Sym {
- p, err := elf.NewFile(f)
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return nil
- }
-
- elfSyms, err := p.Symbols()
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return nil
- }
-
- var syms []Sym
- for _, s := range elfSyms {
- sym := Sym{Addr: s.Value, Name: s.Name, Size: int64(s.Size), Code: '?'}
- switch s.Section {
- case elf.SHN_UNDEF:
- sym.Code = 'U'
- case elf.SHN_COMMON:
- sym.Code = 'B'
- default:
- i := int(s.Section)
- if i < 0 || i >= len(p.Sections) {
- break
- }
- sect := p.Sections[i]
- switch sect.Flags & (elf.SHF_WRITE | elf.SHF_ALLOC | elf.SHF_EXECINSTR) {
- case elf.SHF_ALLOC | elf.SHF_EXECINSTR:
- sym.Code = 'T'
- case elf.SHF_ALLOC:
- sym.Code = 'R'
- case elf.SHF_ALLOC | elf.SHF_WRITE:
- sym.Code = 'D'
- }
- }
- if elf.ST_BIND(s.Info) == elf.STB_LOCAL {
- sym.Code += 'a' - 'A'
- }
- syms = append(syms, sym)
- }
-
- return syms
-}
diff --git a/src/cmd/nm/goobj.go b/src/cmd/nm/goobj.go
deleted file mode 100644
index 5e0817d95..000000000
--- a/src/cmd/nm/goobj.go
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Parsing of Go intermediate object files and archives.
-
-package main
-
-import (
- "fmt"
- "os"
-)
-
-func goobjName(id goobj_SymID) string {
- if id.Version == 0 {
- return id.Name
- }
- return fmt.Sprintf("%s<%d>", id.Name, id.Version)
-}
-
-func goobjSymbols(f *os.File) []Sym {
- pkg, err := goobj_Parse(f, `""`)
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return nil
- }
-
- seen := make(map[goobj_SymID]bool)
-
- var syms []Sym
- for _, s := range pkg.Syms {
- seen[s.goobj_SymID] = true
- sym := Sym{Addr: uint64(s.Data.Offset), Name: goobjName(s.goobj_SymID), Size: int64(s.Size), Type: s.Type.Name, Code: '?'}
- switch s.Kind {
- case goobj_STEXT, goobj_SELFRXSECT:
- sym.Code = 'T'
- case goobj_STYPE, goobj_SSTRING, goobj_SGOSTRING, goobj_SGOFUNC, goobj_SRODATA, goobj_SFUNCTAB, goobj_STYPELINK, goobj_SSYMTAB, goobj_SPCLNTAB, goobj_SELFROSECT:
- sym.Code = 'R'
- case goobj_SMACHOPLT, goobj_SELFSECT, goobj_SMACHO, goobj_SMACHOGOT, goobj_SNOPTRDATA, goobj_SINITARR, goobj_SDATA, goobj_SWINDOWS:
- sym.Code = 'D'
- case goobj_SBSS, goobj_SNOPTRBSS, goobj_STLSBSS:
- sym.Code = 'B'
- case goobj_SXREF, goobj_SMACHOSYMSTR, goobj_SMACHOSYMTAB, goobj_SMACHOINDIRECTPLT, goobj_SMACHOINDIRECTGOT, goobj_SFILE, goobj_SFILEPATH, goobj_SCONST, goobj_SDYNIMPORT, goobj_SHOSTOBJ:
- sym.Code = 'X' // should not see
- }
- if s.Version != 0 {
- sym.Code += 'a' - 'A'
- }
- syms = append(syms, sym)
- }
-
- for _, s := range pkg.Syms {
- for _, r := range s.Reloc {
- if !seen[r.Sym] {
- seen[r.Sym] = true
- sym := Sym{Name: goobjName(r.Sym), Code: 'U'}
- if s.Version != 0 {
- // should not happen but handle anyway
- sym.Code = 'u'
- }
- syms = append(syms, sym)
- }
- }
- }
-
- return syms
-}
diff --git a/src/cmd/nm/macho.go b/src/cmd/nm/macho.go
deleted file mode 100644
index c60bde55b..000000000
--- a/src/cmd/nm/macho.go
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Parsing of Mach-O executables (OS X).
-
-package main
-
-import (
- "debug/macho"
- "os"
- "sort"
-)
-
-func machoSymbols(f *os.File) []Sym {
- p, err := macho.NewFile(f)
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return nil
- }
-
- if p.Symtab == nil {
- errorf("%s: no symbol table", f.Name())
- return nil
- }
-
- // Build sorted list of addresses of all symbols.
- // We infer the size of a symbol by looking at where the next symbol begins.
- var addrs []uint64
- for _, s := range p.Symtab.Syms {
- addrs = append(addrs, s.Value)
- }
- sort.Sort(uint64s(addrs))
-
- var syms []Sym
- for _, s := range p.Symtab.Syms {
- sym := Sym{Name: s.Name, Addr: s.Value, Code: '?'}
- i := sort.Search(len(addrs), func(x int) bool { return addrs[x] > s.Value })
- if i < len(addrs) {
- sym.Size = int64(addrs[i] - s.Value)
- }
- if s.Sect == 0 {
- sym.Code = 'U'
- } else if int(s.Sect) <= len(p.Sections) {
- sect := p.Sections[s.Sect-1]
- switch sect.Seg {
- case "__TEXT":
- sym.Code = 'R'
- case "__DATA":
- sym.Code = 'D'
- }
- switch sect.Seg + " " + sect.Name {
- case "__TEXT __text":
- sym.Code = 'T'
- case "__DATA __bss", "__DATA __noptrbss":
- sym.Code = 'B'
- }
- }
- syms = append(syms, sym)
- }
-
- return syms
-}
-
-type uint64s []uint64
-
-func (x uint64s) Len() int { return len(x) }
-func (x uint64s) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
-func (x uint64s) Less(i, j int) bool { return x[i] < x[j] }
diff --git a/src/cmd/nm/nm.go b/src/cmd/nm/nm.go
index a4036184e..3089e481b 100644
--- a/src/cmd/nm/nm.go
+++ b/src/cmd/nm/nm.go
@@ -6,13 +6,13 @@ package main
import (
"bufio"
- "bytes"
"flag"
"fmt"
- "io"
"log"
"os"
"sort"
+
+ "cmd/internal/objfile"
)
func usage() {
@@ -85,55 +85,22 @@ func errorf(format string, args ...interface{}) {
exitCode = 1
}
-type Sym struct {
- Addr uint64
- Size int64
- Code rune
- Name string
- Type string
-}
-
-var parsers = []struct {
- prefix []byte
- parse func(*os.File) []Sym
-}{
- {[]byte("!<arch>\n"), goobjSymbols},
- {[]byte("go object "), goobjSymbols},
- {[]byte("\x7FELF"), elfSymbols},
- {[]byte("\xFE\xED\xFA\xCE"), machoSymbols},
- {[]byte("\xFE\xED\xFA\xCF"), machoSymbols},
- {[]byte("\xCE\xFA\xED\xFE"), machoSymbols},
- {[]byte("\xCF\xFA\xED\xFE"), machoSymbols},
- {[]byte("MZ"), peSymbols},
- {[]byte("\x00\x00\x01\xEB"), plan9Symbols}, // 386
- {[]byte("\x00\x00\x04\x07"), plan9Symbols}, // mips
- {[]byte("\x00\x00\x06\x47"), plan9Symbols}, // arm
- {[]byte("\x00\x00\x8A\x97"), plan9Symbols}, // amd64
-}
-
func nm(file string) {
- f, err := os.Open(file)
+ f, err := objfile.Open(file)
if err != nil {
errorf("%v", err)
return
}
defer f.Close()
- buf := make([]byte, 16)
- io.ReadFull(f, buf)
- f.Seek(0, 0)
-
- var syms []Sym
- for _, p := range parsers {
- if bytes.HasPrefix(buf, p.prefix) {
- syms = p.parse(f)
- goto HaveSyms
- }
+ syms, err := f.Symbols()
+ if err != nil {
+ errorf("reading %s: %v", file, err)
+ }
+ if len(syms) == 0 {
+ errorf("reading %s: no symbols", file)
}
- errorf("%v: unknown file format", file)
- return
-HaveSyms:
switch *sortOrder {
case "address":
sort.Sort(byAddr(syms))
@@ -165,19 +132,19 @@ HaveSyms:
w.Flush()
}
-type byAddr []Sym
+type byAddr []objfile.Sym
func (x byAddr) Len() int { return len(x) }
func (x byAddr) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
func (x byAddr) Less(i, j int) bool { return x[i].Addr < x[j].Addr }
-type byName []Sym
+type byName []objfile.Sym
func (x byName) Len() int { return len(x) }
func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
func (x byName) Less(i, j int) bool { return x[i].Name < x[j].Name }
-type bySize []Sym
+type bySize []objfile.Sym
func (x bySize) Len() int { return len(x) }
func (x bySize) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
diff --git a/src/cmd/nm/nm_test.go b/src/cmd/nm/nm_test.go
index f4e47a42d..cb555d827 100644
--- a/src/cmd/nm/nm_test.go
+++ b/src/cmd/nm/nm_test.go
@@ -55,8 +55,9 @@ func checkSymbols(t *testing.T, nmoutput []byte) {
}
func TestNM(t *testing.T) {
- if runtime.GOOS == "nacl" {
- t.Skip("skipping on nacl")
+ switch runtime.GOOS {
+ case "android", "nacl":
+ t.Skipf("skipping on %s", runtime.GOOS)
}
tmpDir, err := ioutil.TempDir("", "TestNM")
@@ -76,17 +77,17 @@ func TestNM(t *testing.T) {
"elf/testdata/gcc-amd64-linux-exec",
"macho/testdata/gcc-386-darwin-exec",
"macho/testdata/gcc-amd64-darwin-exec",
- "pe/testdata/gcc-amd64-mingw-exec",
+ // "pe/testdata/gcc-amd64-mingw-exec", // no symbols!
"pe/testdata/gcc-386-mingw-exec",
"plan9obj/testdata/amd64-plan9-exec",
"plan9obj/testdata/386-plan9-exec",
}
for _, f := range testfiles {
- exepath := filepath.Join(runtime.GOROOT(), "src", "pkg", "debug", f)
+ exepath := filepath.Join(runtime.GOROOT(), "src", "debug", f)
cmd := exec.Command(testnmpath, exepath)
out, err := cmd.CombinedOutput()
if err != nil {
- t.Fatalf("go tool nm %v: %v\n%s", exepath, err, string(out))
+ t.Errorf("go tool nm %v: %v\n%s", exepath, err, string(out))
}
}
diff --git a/src/cmd/nm/pe.go b/src/cmd/nm/pe.go
deleted file mode 100644
index 52d05e51d..000000000
--- a/src/cmd/nm/pe.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Parsing of PE executables (Microsoft Windows).
-
-package main
-
-import (
- "debug/pe"
- "os"
- "sort"
-)
-
-func peSymbols(f *os.File) []Sym {
- p, err := pe.NewFile(f)
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return nil
- }
-
- // Build sorted list of addresses of all symbols.
- // We infer the size of a symbol by looking at where the next symbol begins.
- var addrs []uint64
-
- var imageBase uint64
- switch oh := p.OptionalHeader.(type) {
- case *pe.OptionalHeader32:
- imageBase = uint64(oh.ImageBase)
- case *pe.OptionalHeader64:
- imageBase = oh.ImageBase
- default:
- errorf("parsing %s: file format not recognized", f.Name())
- return nil
- }
-
- var syms []Sym
- for _, s := range p.Symbols {
- const (
- N_UNDEF = 0 // An undefined (extern) symbol
- N_ABS = -1 // An absolute symbol (e_value is a constant, not an address)
- N_DEBUG = -2 // A debugging symbol
- )
- sym := Sym{Name: s.Name, Addr: uint64(s.Value), Code: '?'}
- switch s.SectionNumber {
- case N_UNDEF:
- sym.Code = 'U'
- case N_ABS:
- sym.Code = 'C'
- case N_DEBUG:
- sym.Code = '?'
- default:
- if s.SectionNumber < 0 {
- errorf("parsing %s: invalid section number %d", f.Name(), s.SectionNumber)
- return nil
- }
- if len(p.Sections) < int(s.SectionNumber) {
- errorf("parsing %s: section number %d is large then max %d", f.Name(), s.SectionNumber, len(p.Sections))
- return nil
- }
- sect := p.Sections[s.SectionNumber-1]
- const (
- text = 0x20
- data = 0x40
- bss = 0x80
- permX = 0x20000000
- permR = 0x40000000
- permW = 0x80000000
- )
- ch := sect.Characteristics
- switch {
- case ch&text != 0:
- sym.Code = 'T'
- case ch&data != 0:
- if ch&permW == 0 {
- sym.Code = 'R'
- } else {
- sym.Code = 'D'
- }
- case ch&bss != 0:
- sym.Code = 'B'
- }
- sym.Addr += imageBase + uint64(sect.VirtualAddress)
- }
- syms = append(syms, sym)
- addrs = append(addrs, sym.Addr)
- }
-
- sort.Sort(uint64s(addrs))
- for i := range syms {
- j := sort.Search(len(addrs), func(x int) bool { return addrs[x] > syms[i].Addr })
- if j < len(addrs) {
- syms[i].Size = int64(addrs[j] - syms[i].Addr)
- }
- }
-
- return syms
-}
diff --git a/src/cmd/nm/plan9obj.go b/src/cmd/nm/plan9obj.go
deleted file mode 100644
index 006c66ebf..000000000
--- a/src/cmd/nm/plan9obj.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Parsing of Plan 9 a.out executables.
-
-package main
-
-import (
- "debug/plan9obj"
- "os"
- "sort"
-)
-
-func plan9Symbols(f *os.File) []Sym {
- p, err := plan9obj.NewFile(f)
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return nil
- }
-
- plan9Syms, err := p.Symbols()
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return nil
- }
-
- // Build sorted list of addresses of all symbols.
- // We infer the size of a symbol by looking at where the next symbol begins.
- var addrs []uint64
- for _, s := range plan9Syms {
- addrs = append(addrs, s.Value)
- }
- sort.Sort(uint64s(addrs))
-
- var syms []Sym
-
- for _, s := range plan9Syms {
- sym := Sym{Addr: s.Value, Name: s.Name, Code: rune(s.Type)}
- i := sort.Search(len(addrs), func(x int) bool { return addrs[x] > s.Value })
- if i < len(addrs) {
- sym.Size = int64(addrs[i] - s.Value)
- }
- syms = append(syms, sym)
- }
-
- return syms
-}
diff --git a/src/cmd/objdump/Makefile b/src/cmd/objdump/Makefile
deleted file mode 100644
index 1b66c26ba..000000000
--- a/src/cmd/objdump/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: x86.go armasm.go
-
-x86.go: bundle
- ./bundle -p main -x x86_ rsc.io/x86/x86asm | gofmt >x86.go
-
-armasm.go: bundle
- ./bundle -p main -x arm_ rsc.io/arm/armasm | gofmt >armasm.go
-
-bundle:
- go build -o bundle code.google.com/p/rsc/cmd/bundle
diff --git a/src/cmd/objdump/armasm.go b/src/cmd/objdump/armasm.go
deleted file mode 100644
index 764a3689e..000000000
--- a/src/cmd/objdump/armasm.go
+++ /dev/null
@@ -1,10821 +0,0 @@
-// DO NOT EDIT. Generated by code.google.com/p/rsc/cmd/bundle
-// bundle -p main -x arm_ rsc.io/arm/armasm
-
-/* decode.go */
-
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-import (
- "bytes"
- "encoding/binary"
- "fmt"
- "io"
- "strings"
-)
-
-// An instFormat describes the format of an instruction encoding.
-// An instruction with 32-bit value x matches the format if x&mask == value
-// and the condition matches.
-// The condition matches if x>>28 == 0xF && value>>28==0xF
-// or if x>>28 != 0xF and value>>28 == 0.
-// If x matches the format, then the rest of the fields describe how to interpret x.
-// The opBits describe bits that should be extracted from x and added to the opcode.
-// For example opBits = 0x1234 means that the value
-// (2 bits at offset 1) followed by (4 bits at offset 3)
-// should be added to op.
-// Finally the args describe how to decode the instruction arguments.
-// args is stored as a fixed-size array; if there are fewer than len(args) arguments,
-// args[i] == 0 marks the end of the argument list.
-type arm_instFormat struct {
- mask uint32
- value uint32
- priority int8
- op arm_Op
- opBits uint64
- args arm_instArgs
-}
-
-type arm_instArgs [4]arm_instArg
-
-var (
- arm_errMode = fmt.Errorf("unsupported execution mode")
- arm_errShort = fmt.Errorf("truncated instruction")
- arm_errUnknown = fmt.Errorf("unknown instruction")
-)
-
-var arm_decoderCover []bool
-
-// Decode decodes the leading bytes in src as a single instruction.
-func arm_Decode(src []byte, mode arm_Mode) (inst arm_Inst, err error) {
- if mode != arm_ModeARM {
- return arm_Inst{}, arm_errMode
- }
- if len(src) < 4 {
- return arm_Inst{}, arm_errShort
- }
-
- if arm_decoderCover == nil {
- arm_decoderCover = make([]bool, len(arm_instFormats))
- }
-
- x := binary.LittleEndian.Uint32(src)
-
- // The instFormat table contains both conditional and unconditional instructions.
- // Considering only the top 4 bits, the conditional instructions use mask=0, value=0,
- // while the unconditional instructions use mask=f, value=f.
- // Prepare a version of x with the condition cleared to 0 in conditional instructions
- // and then assume mask=f during matching.
- const condMask = 0xf0000000
- xNoCond := x
- if x&condMask != condMask {
- xNoCond &^= condMask
- }
- var priority int8
-Search:
- for i := range arm_instFormats {
- f := &arm_instFormats[i]
- if xNoCond&(f.mask|condMask) != f.value || f.priority <= priority {
- continue
- }
- delta := uint32(0)
- deltaShift := uint(0)
- for opBits := f.opBits; opBits != 0; opBits >>= 16 {
- n := uint(opBits & 0xFF)
- off := uint((opBits >> 8) & 0xFF)
- delta |= (x >> off) & (1<<n - 1) << deltaShift
- deltaShift += n
- }
- op := f.op + arm_Op(delta)
-
- // Special case: BKPT encodes with condition but cannot have one.
- if op&^15 == arm_BKPT_EQ && op != arm_BKPT {
- continue Search
- }
-
- var args arm_Args
- for j, aop := range f.args {
- if aop == 0 {
- break
- }
- arg := arm_decodeArg(aop, x)
- if arg == nil { // cannot decode argument
- continue Search
- }
- args[j] = arg
- }
-
- arm_decoderCover[i] = true
-
- inst = arm_Inst{
- Op: op,
- Args: args,
- Enc: x,
- Len: 4,
- }
- priority = f.priority
- continue Search
- }
- if inst.Op != 0 {
- return inst, nil
- }
- return arm_Inst{}, arm_errUnknown
-}
-
-// An instArg describes the encoding of a single argument.
-// In the names used for arguments, _p_ means +, _m_ means -,
-// _pm_ means ± (usually keyed by the U bit).
-// The _W suffix indicates a general addressing mode based on the P and W bits.
-// The _offset and _postindex suffixes force the given addressing mode.
-// The rest should be somewhat self-explanatory, at least given
-// the decodeArg function.
-type arm_instArg uint8
-
-const (
- _ arm_instArg = iota
- arm_arg_APSR
- arm_arg_FPSCR
- arm_arg_Dn_half
- arm_arg_R1_0
- arm_arg_R1_12
- arm_arg_R2_0
- arm_arg_R2_12
- arm_arg_R_0
- arm_arg_R_12
- arm_arg_R_12_nzcv
- arm_arg_R_16
- arm_arg_R_16_WB
- arm_arg_R_8
- arm_arg_R_rotate
- arm_arg_R_shift_R
- arm_arg_R_shift_imm
- arm_arg_SP
- arm_arg_Sd
- arm_arg_Sd_Dd
- arm_arg_Dd_Sd
- arm_arg_Sm
- arm_arg_Sm_Dm
- arm_arg_Sn
- arm_arg_Sn_Dn
- arm_arg_const
- arm_arg_endian
- arm_arg_fbits
- arm_arg_fp_0
- arm_arg_imm24
- arm_arg_imm5
- arm_arg_imm5_32
- arm_arg_imm5_nz
- arm_arg_imm_12at8_4at0
- arm_arg_imm_4at16_12at0
- arm_arg_imm_vfp
- arm_arg_label24
- arm_arg_label24H
- arm_arg_label_m_12
- arm_arg_label_p_12
- arm_arg_label_pm_12
- arm_arg_label_pm_4_4
- arm_arg_lsb_width
- arm_arg_mem_R
- arm_arg_mem_R_pm_R_W
- arm_arg_mem_R_pm_R_postindex
- arm_arg_mem_R_pm_R_shift_imm_W
- arm_arg_mem_R_pm_R_shift_imm_offset
- arm_arg_mem_R_pm_R_shift_imm_postindex
- arm_arg_mem_R_pm_imm12_W
- arm_arg_mem_R_pm_imm12_offset
- arm_arg_mem_R_pm_imm12_postindex
- arm_arg_mem_R_pm_imm8_W
- arm_arg_mem_R_pm_imm8_postindex
- arm_arg_mem_R_pm_imm8at0_offset
- arm_arg_option
- arm_arg_registers
- arm_arg_registers1
- arm_arg_registers2
- arm_arg_satimm4
- arm_arg_satimm5
- arm_arg_satimm4m1
- arm_arg_satimm5m1
- arm_arg_widthm1
-)
-
-// decodeArg decodes the arg described by aop from the instruction bits x.
-// It returns nil if x cannot be decoded according to aop.
-func arm_decodeArg(aop arm_instArg, x uint32) arm_Arg {
- switch aop {
- default:
- return nil
-
- case arm_arg_APSR:
- return arm_APSR
- case arm_arg_FPSCR:
- return arm_FPSCR
-
- case arm_arg_R_0:
- return arm_Reg(x & (1<<4 - 1))
- case arm_arg_R_8:
- return arm_Reg((x >> 8) & (1<<4 - 1))
- case arm_arg_R_12:
- return arm_Reg((x >> 12) & (1<<4 - 1))
- case arm_arg_R_16:
- return arm_Reg((x >> 16) & (1<<4 - 1))
-
- case arm_arg_R_12_nzcv:
- r := arm_Reg((x >> 12) & (1<<4 - 1))
- if r == arm_R15 {
- return arm_APSR_nzcv
- }
- return r
-
- case arm_arg_R_16_WB:
- mode := arm_AddrLDM
- if (x>>21)&1 != 0 {
- mode = arm_AddrLDM_WB
- }
- return arm_Mem{Base: arm_Reg((x >> 16) & (1<<4 - 1)), Mode: mode}
-
- case arm_arg_R_rotate:
- Rm := arm_Reg(x & (1<<4 - 1))
- typ, count := arm_decodeShift(x)
- // ROR #0 here means ROR #0, but decodeShift rewrites to RRX #1.
- if typ == arm_RotateRightExt {
- return arm_Reg(Rm)
- }
- return arm_RegShift{Rm, typ, uint8(count)}
-
- case arm_arg_R_shift_R:
- Rm := arm_Reg(x & (1<<4 - 1))
- Rs := arm_Reg((x >> 8) & (1<<4 - 1))
- typ := arm_Shift((x >> 5) & (1<<2 - 1))
- return arm_RegShiftReg{Rm, typ, Rs}
-
- case arm_arg_R_shift_imm:
- Rm := arm_Reg(x & (1<<4 - 1))
- typ, count := arm_decodeShift(x)
- if typ == arm_ShiftLeft && count == 0 {
- return arm_Reg(Rm)
- }
- return arm_RegShift{Rm, typ, uint8(count)}
-
- case arm_arg_R1_0:
- return arm_Reg((x & (1<<4 - 1)))
- case arm_arg_R1_12:
- return arm_Reg(((x >> 12) & (1<<4 - 1)))
- case arm_arg_R2_0:
- return arm_Reg((x & (1<<4 - 1)) | 1)
- case arm_arg_R2_12:
- return arm_Reg(((x >> 12) & (1<<4 - 1)) | 1)
-
- case arm_arg_SP:
- return arm_SP
-
- case arm_arg_Sd_Dd:
- v := (x >> 12) & (1<<4 - 1)
- vx := (x >> 22) & 1
- sz := (x >> 8) & 1
- if sz != 0 {
- return arm_D0 + arm_Reg(vx<<4+v)
- } else {
- return arm_S0 + arm_Reg(v<<1+vx)
- }
-
- case arm_arg_Dd_Sd:
- return arm_decodeArg(arm_arg_Sd_Dd, x^(1<<8))
-
- case arm_arg_Sd:
- v := (x >> 12) & (1<<4 - 1)
- vx := (x >> 22) & 1
- return arm_S0 + arm_Reg(v<<1+vx)
-
- case arm_arg_Sm_Dm:
- v := (x >> 0) & (1<<4 - 1)
- vx := (x >> 5) & 1
- sz := (x >> 8) & 1
- if sz != 0 {
- return arm_D0 + arm_Reg(vx<<4+v)
- } else {
- return arm_S0 + arm_Reg(v<<1+vx)
- }
-
- case arm_arg_Sm:
- v := (x >> 0) & (1<<4 - 1)
- vx := (x >> 5) & 1
- return arm_S0 + arm_Reg(v<<1+vx)
-
- case arm_arg_Dn_half:
- v := (x >> 16) & (1<<4 - 1)
- vx := (x >> 7) & 1
- return arm_RegX{arm_D0 + arm_Reg(vx<<4+v), int((x >> 21) & 1)}
-
- case arm_arg_Sn_Dn:
- v := (x >> 16) & (1<<4 - 1)
- vx := (x >> 7) & 1
- sz := (x >> 8) & 1
- if sz != 0 {
- return arm_D0 + arm_Reg(vx<<4+v)
- } else {
- return arm_S0 + arm_Reg(v<<1+vx)
- }
-
- case arm_arg_Sn:
- v := (x >> 16) & (1<<4 - 1)
- vx := (x >> 7) & 1
- return arm_S0 + arm_Reg(v<<1+vx)
-
- case arm_arg_const:
- v := x & (1<<8 - 1)
- rot := (x >> 8) & (1<<4 - 1) * 2
- if rot > 0 && v&3 == 0 {
- // could rotate less
- return arm_ImmAlt{uint8(v), uint8(rot)}
- }
- if rot >= 24 && ((v<<(32-rot))&0xFF)>>(32-rot) == v {
- // could wrap around to rot==0.
- return arm_ImmAlt{uint8(v), uint8(rot)}
- }
- return arm_Imm(v>>rot | v<<(32-rot))
-
- case arm_arg_endian:
- return arm_Endian((x >> 9) & 1)
-
- case arm_arg_fbits:
- return arm_Imm((16 << ((x >> 7) & 1)) - ((x&(1<<4-1))<<1 | (x>>5)&1))
-
- case arm_arg_fp_0:
- return arm_Imm(0)
-
- case arm_arg_imm24:
- return arm_Imm(x & (1<<24 - 1))
-
- case arm_arg_imm5:
- return arm_Imm((x >> 7) & (1<<5 - 1))
-
- case arm_arg_imm5_32:
- x = (x >> 7) & (1<<5 - 1)
- if x == 0 {
- x = 32
- }
- return arm_Imm(x)
-
- case arm_arg_imm5_nz:
- x = (x >> 7) & (1<<5 - 1)
- if x == 0 {
- return nil
- }
- return arm_Imm(x)
-
- case arm_arg_imm_4at16_12at0:
- return arm_Imm((x>>16)&(1<<4-1)<<12 | x&(1<<12-1))
-
- case arm_arg_imm_12at8_4at0:
- return arm_Imm((x>>8)&(1<<12-1)<<4 | x&(1<<4-1))
-
- case arm_arg_imm_vfp:
- x = (x>>16)&(1<<4-1)<<4 | x&(1<<4-1)
- return arm_Imm(x)
-
- case arm_arg_label24:
- imm := (x & (1<<24 - 1)) << 2
- return arm_PCRel(int32(imm<<6) >> 6)
-
- case arm_arg_label24H:
- h := (x >> 24) & 1
- imm := (x&(1<<24-1))<<2 | h<<1
- return arm_PCRel(int32(imm<<6) >> 6)
-
- case arm_arg_label_m_12:
- d := int32(x & (1<<12 - 1))
- return arm_Mem{Base: arm_PC, Mode: arm_AddrOffset, Offset: int16(-d)}
-
- case arm_arg_label_p_12:
- d := int32(x & (1<<12 - 1))
- return arm_Mem{Base: arm_PC, Mode: arm_AddrOffset, Offset: int16(d)}
-
- case arm_arg_label_pm_12:
- d := int32(x & (1<<12 - 1))
- u := (x >> 23) & 1
- if u == 0 {
- d = -d
- }
- return arm_Mem{Base: arm_PC, Mode: arm_AddrOffset, Offset: int16(d)}
-
- case arm_arg_label_pm_4_4:
- d := int32((x>>8)&(1<<4-1)<<4 | x&(1<<4-1))
- u := (x >> 23) & 1
- if u == 0 {
- d = -d
- }
- return arm_PCRel(d)
-
- case arm_arg_lsb_width:
- lsb := (x >> 7) & (1<<5 - 1)
- msb := (x >> 16) & (1<<5 - 1)
- if msb < lsb || msb >= 32 {
- return nil
- }
- return arm_Imm(msb + 1 - lsb)
-
- case arm_arg_mem_R:
- Rn := arm_Reg((x >> 16) & (1<<4 - 1))
- return arm_Mem{Base: Rn, Mode: arm_AddrOffset}
-
- case arm_arg_mem_R_pm_R_postindex:
- // Treat [<Rn>],+/-<Rm> like [<Rn>,+/-<Rm>{,<shift>}]{!}
- // by forcing shift bits to <<0 and P=0, W=0 (postindex=true).
- return arm_decodeArg(arm_arg_mem_R_pm_R_shift_imm_W, x&^((1<<7-1)<<5|1<<24|1<<21))
-
- case arm_arg_mem_R_pm_R_W:
- // Treat [<Rn>,+/-<Rm>]{!} like [<Rn>,+/-<Rm>{,<shift>}]{!}
- // by forcing shift bits to <<0.
- return arm_decodeArg(arm_arg_mem_R_pm_R_shift_imm_W, x&^((1<<7-1)<<5))
-
- case arm_arg_mem_R_pm_R_shift_imm_offset:
- // Treat [<Rn>],+/-<Rm>{,<shift>} like [<Rn>,+/-<Rm>{,<shift>}]{!}
- // by forcing P=1, W=0 (index=false, wback=false).
- return arm_decodeArg(arm_arg_mem_R_pm_R_shift_imm_W, x&^(1<<21)|1<<24)
-
- case arm_arg_mem_R_pm_R_shift_imm_postindex:
- // Treat [<Rn>],+/-<Rm>{,<shift>} like [<Rn>,+/-<Rm>{,<shift>}]{!}
- // by forcing P=0, W=0 (postindex=true).
- return arm_decodeArg(arm_arg_mem_R_pm_R_shift_imm_W, x&^(1<<24|1<<21))
-
- case arm_arg_mem_R_pm_R_shift_imm_W:
- Rn := arm_Reg((x >> 16) & (1<<4 - 1))
- Rm := arm_Reg(x & (1<<4 - 1))
- typ, count := arm_decodeShift(x)
- u := (x >> 23) & 1
- w := (x >> 21) & 1
- p := (x >> 24) & 1
- if p == 0 && w == 1 {
- return nil
- }
- sign := int8(+1)
- if u == 0 {
- sign = -1
- }
- mode := arm_AddrMode(uint8(p<<1) | uint8(w^1))
- return arm_Mem{Base: Rn, Mode: mode, Sign: sign, Index: Rm, Shift: typ, Count: count}
-
- case arm_arg_mem_R_pm_imm12_offset:
- // Treat [<Rn>,#+/-<imm12>] like [<Rn>{,#+/-<imm12>}]{!}
- // by forcing P=1, W=0 (index=false, wback=false).
- return arm_decodeArg(arm_arg_mem_R_pm_imm12_W, x&^(1<<21)|1<<24)
-
- case arm_arg_mem_R_pm_imm12_postindex:
- // Treat [<Rn>],#+/-<imm12> like [<Rn>{,#+/-<imm12>}]{!}
- // by forcing P=0, W=0 (postindex=true).
- return arm_decodeArg(arm_arg_mem_R_pm_imm12_W, x&^(1<<24|1<<21))
-
- case arm_arg_mem_R_pm_imm12_W:
- Rn := arm_Reg((x >> 16) & (1<<4 - 1))
- u := (x >> 23) & 1
- w := (x >> 21) & 1
- p := (x >> 24) & 1
- if p == 0 && w == 1 {
- return nil
- }
- sign := int8(+1)
- if u == 0 {
- sign = -1
- }
- imm := int16(x & (1<<12 - 1))
- mode := arm_AddrMode(uint8(p<<1) | uint8(w^1))
- return arm_Mem{Base: Rn, Mode: mode, Offset: int16(sign) * imm}
-
- case arm_arg_mem_R_pm_imm8_postindex:
- // Treat [<Rn>],#+/-<imm8> like [<Rn>{,#+/-<imm8>}]{!}
- // by forcing P=0, W=0 (postindex=true).
- return arm_decodeArg(arm_arg_mem_R_pm_imm8_W, x&^(1<<24|1<<21))
-
- case arm_arg_mem_R_pm_imm8_W:
- Rn := arm_Reg((x >> 16) & (1<<4 - 1))
- u := (x >> 23) & 1
- w := (x >> 21) & 1
- p := (x >> 24) & 1
- if p == 0 && w == 1 {
- return nil
- }
- sign := int8(+1)
- if u == 0 {
- sign = -1
- }
- imm := int16((x>>8)&(1<<4-1)<<4 | x&(1<<4-1))
- mode := arm_AddrMode(uint8(p<<1) | uint8(w^1))
- return arm_Mem{Base: Rn, Mode: mode, Offset: int16(sign) * imm}
-
- case arm_arg_mem_R_pm_imm8at0_offset:
- Rn := arm_Reg((x >> 16) & (1<<4 - 1))
- u := (x >> 23) & 1
- sign := int8(+1)
- if u == 0 {
- sign = -1
- }
- imm := int16(x&(1<<8-1)) << 2
- return arm_Mem{Base: Rn, Mode: arm_AddrOffset, Offset: int16(sign) * imm}
-
- case arm_arg_option:
- return arm_Imm(x & (1<<4 - 1))
-
- case arm_arg_registers:
- return arm_RegList(x & (1<<16 - 1))
-
- case arm_arg_registers2:
- x &= 1<<16 - 1
- n := 0
- for i := 0; i < 16; i++ {
- if x>>uint(i)&1 != 0 {
- n++
- }
- }
- if n < 2 {
- return nil
- }
- return arm_RegList(x)
-
- case arm_arg_registers1:
- Rt := (x >> 12) & (1<<4 - 1)
- return arm_RegList(1 << Rt)
-
- case arm_arg_satimm4:
- return arm_Imm((x >> 16) & (1<<4 - 1))
-
- case arm_arg_satimm5:
- return arm_Imm((x >> 16) & (1<<5 - 1))
-
- case arm_arg_satimm4m1:
- return arm_Imm((x>>16)&(1<<4-1) + 1)
-
- case arm_arg_satimm5m1:
- return arm_Imm((x>>16)&(1<<5-1) + 1)
-
- case arm_arg_widthm1:
- return arm_Imm((x>>16)&(1<<5-1) + 1)
-
- }
-}
-
-// decodeShift decodes the shift-by-immediate encoded in x.
-func arm_decodeShift(x uint32) (arm_Shift, uint8) {
- count := (x >> 7) & (1<<5 - 1)
- typ := arm_Shift((x >> 5) & (1<<2 - 1))
- switch typ {
- case arm_ShiftRight, arm_ShiftRightSigned:
- if count == 0 {
- count = 32
- }
- case arm_RotateRight:
- if count == 0 {
- typ = arm_RotateRightExt
- count = 1
- }
- }
- return typ, uint8(count)
-}
-
-/* gnu.go */
-
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-var arm_saveDot = strings.NewReplacer(
- ".F16", "_dot_F16",
- ".F32", "_dot_F32",
- ".F64", "_dot_F64",
- ".S32", "_dot_S32",
- ".U32", "_dot_U32",
- ".FXS", "_dot_S",
- ".FXU", "_dot_U",
- ".32", "_dot_32",
-)
-
-// GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.
-// This form typically matches the syntax defined in the ARM Reference Manual.
-func arm_GNUSyntax(inst arm_Inst) string {
- var buf bytes.Buffer
- op := inst.Op.String()
- op = arm_saveDot.Replace(op)
- op = strings.Replace(op, ".", "", -1)
- op = strings.Replace(op, "_dot_", ".", -1)
- op = strings.ToLower(op)
- buf.WriteString(op)
- sep := " "
- for i, arg := range inst.Args {
- if arg == nil {
- break
- }
- text := arm_gnuArg(&inst, i, arg)
- if text == "" {
- continue
- }
- buf.WriteString(sep)
- sep = ", "
- buf.WriteString(text)
- }
- return buf.String()
-}
-
-func arm_gnuArg(inst *arm_Inst, argIndex int, arg arm_Arg) string {
- switch inst.Op &^ 15 {
- case arm_LDRD_EQ, arm_LDREXD_EQ, arm_STRD_EQ:
- if argIndex == 1 {
- // second argument in consecutive pair not printed
- return ""
- }
- case arm_STREXD_EQ:
- if argIndex == 2 {
- // second argument in consecutive pair not printed
- return ""
- }
- }
-
- switch arg := arg.(type) {
- case arm_Imm:
- switch inst.Op &^ 15 {
- case arm_BKPT_EQ:
- return fmt.Sprintf("%#04x", uint32(arg))
- case arm_SVC_EQ:
- return fmt.Sprintf("%#08x", uint32(arg))
- }
- return fmt.Sprintf("#%d", int32(arg))
-
- case arm_ImmAlt:
- return fmt.Sprintf("#%d, %d", arg.Val, arg.Rot)
-
- case arm_Mem:
- R := arm_gnuArg(inst, -1, arg.Base)
- X := ""
- if arg.Sign != 0 {
- X = ""
- if arg.Sign < 0 {
- X = "-"
- }
- X += arm_gnuArg(inst, -1, arg.Index)
- if arg.Shift == arm_ShiftLeft && arg.Count == 0 {
- // nothing
- } else if arg.Shift == arm_RotateRightExt {
- X += ", rrx"
- } else {
- X += fmt.Sprintf(", %s #%d", strings.ToLower(arg.Shift.String()), arg.Count)
- }
- } else {
- X = fmt.Sprintf("#%d", arg.Offset)
- }
-
- switch arg.Mode {
- case arm_AddrOffset:
- if X == "#0" {
- return fmt.Sprintf("[%s]", R)
- }
- return fmt.Sprintf("[%s, %s]", R, X)
- case arm_AddrPreIndex:
- return fmt.Sprintf("[%s, %s]!", R, X)
- case arm_AddrPostIndex:
- return fmt.Sprintf("[%s], %s", R, X)
- case arm_AddrLDM:
- if X == "#0" {
- return R
- }
- case arm_AddrLDM_WB:
- if X == "#0" {
- return R + "!"
- }
- }
- return fmt.Sprintf("[%s Mode(%d) %s]", R, int(arg.Mode), X)
-
- case arm_PCRel:
- return fmt.Sprintf(".%+#x", int32(arg)+4)
-
- case arm_Reg:
- switch inst.Op &^ 15 {
- case arm_LDREX_EQ:
- if argIndex == 0 {
- return fmt.Sprintf("r%d", int32(arg))
- }
- }
- switch arg {
- case arm_R10:
- return "sl"
- case arm_R11:
- return "fp"
- case arm_R12:
- return "ip"
- }
-
- case arm_RegList:
- var buf bytes.Buffer
- fmt.Fprintf(&buf, "{")
- sep := ""
- for i := 0; i < 16; i++ {
- if arg&(1<<uint(i)) != 0 {
- fmt.Fprintf(&buf, "%s%s", sep, arm_gnuArg(inst, -1, arm_Reg(i)))
- sep = ", "
- }
- }
- fmt.Fprintf(&buf, "}")
- return buf.String()
-
- case arm_RegShift:
- if arg.Shift == arm_ShiftLeft && arg.Count == 0 {
- return arm_gnuArg(inst, -1, arg.Reg)
- }
- if arg.Shift == arm_RotateRightExt {
- return arm_gnuArg(inst, -1, arg.Reg) + ", rrx"
- }
- return fmt.Sprintf("%s, %s #%d", arm_gnuArg(inst, -1, arg.Reg), strings.ToLower(arg.Shift.String()), arg.Count)
-
- case arm_RegShiftReg:
- return fmt.Sprintf("%s, %s %s", arm_gnuArg(inst, -1, arg.Reg), strings.ToLower(arg.Shift.String()), arm_gnuArg(inst, -1, arg.RegCount))
-
- }
- return strings.ToLower(arg.String())
-}
-
-/* inst.go */
-
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// A Mode is an instruction execution mode.
-type arm_Mode int
-
-const (
- _ arm_Mode = iota
- arm_ModeARM
- arm_ModeThumb
-)
-
-func (m arm_Mode) String() string {
- switch m {
- case arm_ModeARM:
- return "ARM"
- case arm_ModeThumb:
- return "Thumb"
- }
- return fmt.Sprintf("Mode(%d)", int(m))
-}
-
-// An Op is an ARM opcode.
-type arm_Op uint16
-
-// NOTE: The actual Op values are defined in tables.go.
-// They are chosen to simplify instruction decoding and
-// are not a dense packing from 0 to N, although the
-// density is high, probably at least 90%.
-
-func (op arm_Op) String() string {
- if op >= arm_Op(len(arm_opstr)) || arm_opstr[op] == "" {
- return fmt.Sprintf("Op(%d)", int(op))
- }
- return arm_opstr[op]
-}
-
-// An Inst is a single instruction.
-type arm_Inst struct {
- Op arm_Op // Opcode mnemonic
- Enc uint32 // Raw encoding bits.
- Len int // Length of encoding in bytes.
- Args arm_Args // Instruction arguments, in ARM manual order.
-}
-
-func (i arm_Inst) String() string {
- var buf bytes.Buffer
- buf.WriteString(i.Op.String())
- for j, arg := range i.Args {
- if arg == nil {
- break
- }
- if j == 0 {
- buf.WriteString(" ")
- } else {
- buf.WriteString(", ")
- }
- buf.WriteString(arg.String())
- }
- return buf.String()
-}
-
-// An Args holds the instruction arguments.
-// If an instruction has fewer than 4 arguments,
-// the final elements in the array are nil.
-type arm_Args [4]arm_Arg
-
-// An Arg is a single instruction argument, one of these types:
-// Endian, Imm, Mem, PCRel, Reg, RegList, RegShift, RegShiftReg.
-type arm_Arg interface {
- IsArg()
- String() string
-}
-
-type arm_Float32Imm float32
-
-func (arm_Float32Imm) IsArg() {}
-
-func (f arm_Float32Imm) String() string {
- return fmt.Sprintf("#%v", float32(f))
-}
-
-type arm_Float64Imm float32
-
-func (arm_Float64Imm) IsArg() {}
-
-func (f arm_Float64Imm) String() string {
- return fmt.Sprintf("#%v", float64(f))
-}
-
-// An Imm is an integer constant.
-type arm_Imm uint32
-
-func (arm_Imm) IsArg() {}
-
-func (i arm_Imm) String() string {
- return fmt.Sprintf("#%#x", uint32(i))
-}
-
-// A ImmAlt is an alternate encoding of an integer constant.
-type arm_ImmAlt struct {
- Val uint8
- Rot uint8
-}
-
-func (arm_ImmAlt) IsArg() {}
-
-func (i arm_ImmAlt) Imm() arm_Imm {
- v := uint32(i.Val)
- r := uint(i.Rot)
- return arm_Imm(v>>r | v<<(32-r))
-}
-
-func (i arm_ImmAlt) String() string {
- return fmt.Sprintf("#%#x, %d", i.Val, i.Rot)
-}
-
-// A Label is a text (code) address.
-type arm_Label uint32
-
-func (arm_Label) IsArg() {}
-
-func (i arm_Label) String() string {
- return fmt.Sprintf("%#x", uint32(i))
-}
-
-// A Reg is a single register.
-// The zero value denotes R0, not the absence of a register.
-type arm_Reg uint8
-
-const (
- arm_R0 arm_Reg = iota
- arm_R1
- arm_R2
- arm_R3
- arm_R4
- arm_R5
- arm_R6
- arm_R7
- arm_R8
- arm_R9
- arm_R10
- arm_R11
- arm_R12
- arm_R13
- arm_R14
- arm_R15
-
- arm_S0
- arm_S1
- arm_S2
- arm_S3
- arm_S4
- arm_S5
- arm_S6
- arm_S7
- arm_S8
- arm_S9
- arm_S10
- arm_S11
- arm_S12
- arm_S13
- arm_S14
- arm_S15
- arm_S16
- arm_S17
- arm_S18
- arm_S19
- arm_S20
- arm_S21
- arm_S22
- arm_S23
- arm_S24
- arm_S25
- arm_S26
- arm_S27
- arm_S28
- arm_S29
- arm_S30
- arm_S31
-
- arm_D0
- arm_D1
- arm_D2
- arm_D3
- arm_D4
- arm_D5
- arm_D6
- arm_D7
- arm_D8
- arm_D9
- arm_D10
- arm_D11
- arm_D12
- arm_D13
- arm_D14
- arm_D15
- arm_D16
- arm_D17
- arm_D18
- arm_D19
- arm_D20
- arm_D21
- arm_D22
- arm_D23
- arm_D24
- arm_D25
- arm_D26
- arm_D27
- arm_D28
- arm_D29
- arm_D30
- arm_D31
-
- arm_APSR
- arm_APSR_nzcv
- arm_FPSCR
-
- arm_SP = arm_R13
- arm_LR = arm_R14
- arm_PC = arm_R15
-)
-
-func (arm_Reg) IsArg() {}
-
-func (r arm_Reg) String() string {
- switch r {
- case arm_APSR:
- return "APSR"
- case arm_APSR_nzcv:
- return "APSR_nzcv"
- case arm_FPSCR:
- return "FPSCR"
- case arm_SP:
- return "SP"
- case arm_PC:
- return "PC"
- case arm_LR:
- return "LR"
- }
- if arm_R0 <= r && r <= arm_R15 {
- return fmt.Sprintf("R%d", int(r-arm_R0))
- }
- if arm_S0 <= r && r <= arm_S31 {
- return fmt.Sprintf("S%d", int(r-arm_S0))
- }
- if arm_D0 <= r && r <= arm_D31 {
- return fmt.Sprintf("D%d", int(r-arm_D0))
- }
- return fmt.Sprintf("Reg(%d)", int(r))
-}
-
-// A RegX represents a fraction of a multi-value register.
-// The Index field specifies the index number,
-// but the size of the fraction is not specified.
-// It must be inferred from the instruction and the register type.
-// For example, in a VMOV instruction, RegX{D5, 1} represents
-// the top 32 bits of the 64-bit D5 register.
-type arm_RegX struct {
- Reg arm_Reg
- Index int
-}
-
-func (arm_RegX) IsArg() {}
-
-func (r arm_RegX) String() string {
- return fmt.Sprintf("%s[%d]", r.Reg, r.Index)
-}
-
-// A RegList is a register list.
-// Bits at indexes x = 0 through 15 indicate whether the corresponding Rx register is in the list.
-type arm_RegList uint16
-
-func (arm_RegList) IsArg() {}
-
-func (r arm_RegList) String() string {
- var buf bytes.Buffer
- fmt.Fprintf(&buf, "{")
- sep := ""
- for i := 0; i < 16; i++ {
- if r&(1<<uint(i)) != 0 {
- fmt.Fprintf(&buf, "%s%s", sep, arm_Reg(i).String())
- sep = ","
- }
- }
- fmt.Fprintf(&buf, "}")
- return buf.String()
-}
-
-// An Endian is the argument to the SETEND instruction.
-type arm_Endian uint8
-
-const (
- arm_LittleEndian arm_Endian = 0
- arm_BigEndian arm_Endian = 1
-)
-
-func (arm_Endian) IsArg() {}
-
-func (e arm_Endian) String() string {
- if e != 0 {
- return "BE"
- }
- return "LE"
-}
-
-// A Shift describes an ARM shift operation.
-type arm_Shift uint8
-
-const (
- arm_ShiftLeft arm_Shift = 0 // left shift
- arm_ShiftRight arm_Shift = 1 // logical (unsigned) right shift
- arm_ShiftRightSigned arm_Shift = 2 // arithmetic (signed) right shift
- arm_RotateRight arm_Shift = 3 // right rotate
- arm_RotateRightExt arm_Shift = 4 // right rotate through carry (Count will always be 1)
-)
-
-var arm_shiftName = [...]string{
- "LSL", "LSR", "ASR", "ROR", "RRX",
-}
-
-func (s arm_Shift) String() string {
- if s < 5 {
- return arm_shiftName[s]
- }
- return fmt.Sprintf("Shift(%d)", int(s))
-}
-
-// A RegShift is a register shifted by a constant.
-type arm_RegShift struct {
- Reg arm_Reg
- Shift arm_Shift
- Count uint8
-}
-
-func (arm_RegShift) IsArg() {}
-
-func (r arm_RegShift) String() string {
- return fmt.Sprintf("%s %s #%d", r.Reg, r.Shift, r.Count)
-}
-
-// A RegShiftReg is a register shifted by a register.
-type arm_RegShiftReg struct {
- Reg arm_Reg
- Shift arm_Shift
- RegCount arm_Reg
-}
-
-func (arm_RegShiftReg) IsArg() {}
-
-func (r arm_RegShiftReg) String() string {
- return fmt.Sprintf("%s %s %s", r.Reg, r.Shift, r.RegCount)
-}
-
-// A PCRel describes a memory address (usually a code label)
-// as a distance relative to the program counter.
-// TODO(rsc): Define which program counter (PC+4? PC+8? PC?).
-type arm_PCRel int32
-
-func (arm_PCRel) IsArg() {}
-
-func (r arm_PCRel) String() string {
- return fmt.Sprintf("PC%+#x", int32(r))
-}
-
-// An AddrMode is an ARM addressing mode.
-type arm_AddrMode uint8
-
-const (
- _ arm_AddrMode = iota
- arm_AddrPostIndex // [R], X – use address R, set R = R + X
- arm_AddrPreIndex // [R, X]! – use address R + X, set R = R + X
- arm_AddrOffset // [R, X] – use address R + X
- arm_AddrLDM // R – [R] but formats as R, for LDM/STM only
- arm_AddrLDM_WB // R! - [R], X where X is instruction-specific amount, for LDM/STM only
-)
-
-// A Mem is a memory reference made up of a base R and index expression X.
-// The effective memory address is R or R+X depending on AddrMode.
-// The index expression is X = Sign*(Index Shift Count) + Offset,
-// but in any instruction either Sign = 0 or Offset = 0.
-type arm_Mem struct {
- Base arm_Reg
- Mode arm_AddrMode
- Sign int8
- Index arm_Reg
- Shift arm_Shift
- Count uint8
- Offset int16
-}
-
-func (arm_Mem) IsArg() {}
-
-func (m arm_Mem) String() string {
- R := m.Base.String()
- X := ""
- if m.Sign != 0 {
- X = "+"
- if m.Sign < 0 {
- X = "-"
- }
- X += m.Index.String()
- if m.Shift != arm_ShiftLeft || m.Count != 0 {
- X += fmt.Sprintf(", %s #%d", m.Shift, m.Count)
- }
- } else {
- X = fmt.Sprintf("#%d", m.Offset)
- }
-
- switch m.Mode {
- case arm_AddrOffset:
- if X == "#0" {
- return fmt.Sprintf("[%s]", R)
- }
- return fmt.Sprintf("[%s, %s]", R, X)
- case arm_AddrPreIndex:
- return fmt.Sprintf("[%s, %s]!", R, X)
- case arm_AddrPostIndex:
- return fmt.Sprintf("[%s], %s", R, X)
- case arm_AddrLDM:
- if X == "#0" {
- return R
- }
- case arm_AddrLDM_WB:
- if X == "#0" {
- return R + "!"
- }
- }
- return fmt.Sprintf("[%s Mode(%d) %s]", R, int(m.Mode), X)
-}
-
-/* plan9x.go */
-
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// plan9Syntax returns the Go assembler syntax for the instruction.
-// The syntax was originally defined by Plan 9.
-// The pc is the program counter of the instruction, used for expanding
-// PC-relative addresses into absolute ones.
-// The symname function queries the symbol table for the program
-// being disassembled. Given a target address it returns the name and base
-// address of the symbol containing the target, if any; otherwise it returns "", 0.
-// The reader r should read from the text segment using text addresses
-// as offsets; it is used to display pc-relative loads as constant loads.
-func arm_plan9Syntax(inst arm_Inst, pc uint64, symname func(uint64) (string, uint64), text io.ReaderAt) string {
- if symname == nil {
- symname = func(uint64) (string, uint64) { return "", 0 }
- }
-
- var args []string
- for _, a := range inst.Args {
- if a == nil {
- break
- }
- args = append(args, arm_plan9Arg(&inst, pc, symname, a))
- }
-
- op := inst.Op.String()
-
- switch inst.Op &^ 15 {
- case arm_LDR_EQ, arm_LDRB_EQ, arm_LDRH_EQ:
- // Check for RET
- reg, _ := inst.Args[0].(arm_Reg)
- mem, _ := inst.Args[1].(arm_Mem)
- if inst.Op&^15 == arm_LDR_EQ && reg == arm_R15 && mem.Base == arm_SP && mem.Sign == 0 && mem.Mode == arm_AddrPostIndex {
- return fmt.Sprintf("RET%s #%d", op[3:], mem.Offset)
- }
-
- // Check for PC-relative load.
- if mem.Base == arm_PC && mem.Sign == 0 && mem.Mode == arm_AddrOffset && text != nil {
- addr := uint32(pc) + 8 + uint32(mem.Offset)
- buf := make([]byte, 4)
- switch inst.Op &^ 15 {
- case arm_LDRB_EQ:
- if _, err := text.ReadAt(buf[:1], int64(addr)); err != nil {
- break
- }
- args[1] = fmt.Sprintf("$%#x", buf[0])
-
- case arm_LDRH_EQ:
- if _, err := text.ReadAt(buf[:2], int64(addr)); err != nil {
- break
- }
- args[1] = fmt.Sprintf("$%#x", binary.LittleEndian.Uint16(buf))
-
- case arm_LDR_EQ:
- if _, err := text.ReadAt(buf, int64(addr)); err != nil {
- break
- }
- x := binary.LittleEndian.Uint32(buf)
- if s, base := symname(uint64(x)); s != "" && uint64(x) == base {
- args[1] = fmt.Sprintf("$%s(SB)", s)
- } else {
- args[1] = fmt.Sprintf("$%#x", x)
- }
- }
- }
- }
-
- // Move addressing mode into opcode suffix.
- suffix := ""
- switch inst.Op &^ 15 {
- case arm_LDR_EQ, arm_LDRB_EQ, arm_LDRH_EQ, arm_STR_EQ, arm_STRB_EQ, arm_STRH_EQ:
- mem, _ := inst.Args[1].(arm_Mem)
- switch mem.Mode {
- case arm_AddrOffset, arm_AddrLDM:
- // no suffix
- case arm_AddrPreIndex, arm_AddrLDM_WB:
- suffix = ".W"
- case arm_AddrPostIndex:
- suffix = ".P"
- }
- off := ""
- if mem.Offset != 0 {
- off = fmt.Sprintf("%#x", mem.Offset)
- }
- base := fmt.Sprintf("(R%d)", int(mem.Base))
- index := ""
- if mem.Sign != 0 {
- sign := ""
- if mem.Sign < 0 {
- sign = ""
- }
- shift := ""
- if mem.Count != 0 {
- shift = fmt.Sprintf("%s%d", arm_plan9Shift[mem.Shift], mem.Count)
- }
- index = fmt.Sprintf("(%sR%d%s)", sign, int(mem.Index), shift)
- }
- args[1] = off + base + index
- }
-
- // Reverse args, placing dest last.
- for i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {
- args[i], args[j] = args[j], args[i]
- }
-
- switch inst.Op &^ 15 {
- case arm_MOV_EQ:
- op = "MOVW" + op[3:]
-
- case arm_LDR_EQ:
- op = "MOVW" + op[3:] + suffix
- case arm_LDRB_EQ:
- op = "MOVB" + op[4:] + suffix
- case arm_LDRH_EQ:
- op = "MOVH" + op[4:] + suffix
-
- case arm_STR_EQ:
- op = "MOVW" + op[3:] + suffix
- args[0], args[1] = args[1], args[0]
- case arm_STRB_EQ:
- op = "MOVB" + op[4:] + suffix
- args[0], args[1] = args[1], args[0]
- case arm_STRH_EQ:
- op = "MOVH" + op[4:] + suffix
- args[0], args[1] = args[1], args[0]
- }
-
- if args != nil {
- op += " " + strings.Join(args, ", ")
- }
-
- return op
-}
-
-// assembler syntax for the various shifts.
-// @x> is a lie; the assembler uses @> 0
-// instead of @x> 1, but i wanted to be clear that it
-// was a different operation (rotate right extended, not rotate right).
-var arm_plan9Shift = []string{"<<", ">>", "->", "@>", "@x>"}
-
-func arm_plan9Arg(inst *arm_Inst, pc uint64, symname func(uint64) (string, uint64), arg arm_Arg) string {
- switch a := arg.(type) {
- case arm_Endian:
-
- case arm_Imm:
- return fmt.Sprintf("$%d", int(a))
-
- case arm_Mem:
-
- case arm_PCRel:
- addr := uint32(pc) + 8 + uint32(a)
- if s, base := symname(uint64(addr)); s != "" && uint64(addr) == base {
- return fmt.Sprintf("%s(SB)", s)
- }
- return fmt.Sprintf("%#x", addr)
-
- case arm_Reg:
- if a < 16 {
- return fmt.Sprintf("R%d", int(a))
- }
-
- case arm_RegList:
- var buf bytes.Buffer
- start := -2
- end := -2
- fmt.Fprintf(&buf, "[")
- flush := func() {
- if start >= 0 {
- if buf.Len() > 1 {
- fmt.Fprintf(&buf, ",")
- }
- if start == end {
- fmt.Fprintf(&buf, "R%d", start)
- } else {
- fmt.Fprintf(&buf, "R%d-R%d", start, end)
- }
- }
- }
- for i := 0; i < 16; i++ {
- if a&(1<<uint(i)) != 0 {
- if i == end+1 {
- end++
- continue
- }
- start = i
- end = i
- }
- }
- flush()
- fmt.Fprintf(&buf, "]")
- return buf.String()
-
- case arm_RegShift:
- return fmt.Sprintf("R%d%s$%d", int(a.Reg), arm_plan9Shift[a.Shift], int(a.Count))
-
- case arm_RegShiftReg:
- return fmt.Sprintf("R%d%sR%d", int(a.Reg), arm_plan9Shift[a.Shift], int(a.RegCount))
- }
- return strings.ToUpper(arg.String())
-}
-
-/* tables.go */
-
-const (
- _ arm_Op = iota
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- arm_ADC_EQ
- arm_ADC_NE
- arm_ADC_CS
- arm_ADC_CC
- arm_ADC_MI
- arm_ADC_PL
- arm_ADC_VS
- arm_ADC_VC
- arm_ADC_HI
- arm_ADC_LS
- arm_ADC_GE
- arm_ADC_LT
- arm_ADC_GT
- arm_ADC_LE
- arm_ADC
- arm_ADC_ZZ
- arm_ADC_S_EQ
- arm_ADC_S_NE
- arm_ADC_S_CS
- arm_ADC_S_CC
- arm_ADC_S_MI
- arm_ADC_S_PL
- arm_ADC_S_VS
- arm_ADC_S_VC
- arm_ADC_S_HI
- arm_ADC_S_LS
- arm_ADC_S_GE
- arm_ADC_S_LT
- arm_ADC_S_GT
- arm_ADC_S_LE
- arm_ADC_S
- arm_ADC_S_ZZ
- arm_ADD_EQ
- arm_ADD_NE
- arm_ADD_CS
- arm_ADD_CC
- arm_ADD_MI
- arm_ADD_PL
- arm_ADD_VS
- arm_ADD_VC
- arm_ADD_HI
- arm_ADD_LS
- arm_ADD_GE
- arm_ADD_LT
- arm_ADD_GT
- arm_ADD_LE
- arm_ADD
- arm_ADD_ZZ
- arm_ADD_S_EQ
- arm_ADD_S_NE
- arm_ADD_S_CS
- arm_ADD_S_CC
- arm_ADD_S_MI
- arm_ADD_S_PL
- arm_ADD_S_VS
- arm_ADD_S_VC
- arm_ADD_S_HI
- arm_ADD_S_LS
- arm_ADD_S_GE
- arm_ADD_S_LT
- arm_ADD_S_GT
- arm_ADD_S_LE
- arm_ADD_S
- arm_ADD_S_ZZ
- arm_AND_EQ
- arm_AND_NE
- arm_AND_CS
- arm_AND_CC
- arm_AND_MI
- arm_AND_PL
- arm_AND_VS
- arm_AND_VC
- arm_AND_HI
- arm_AND_LS
- arm_AND_GE
- arm_AND_LT
- arm_AND_GT
- arm_AND_LE
- arm_AND
- arm_AND_ZZ
- arm_AND_S_EQ
- arm_AND_S_NE
- arm_AND_S_CS
- arm_AND_S_CC
- arm_AND_S_MI
- arm_AND_S_PL
- arm_AND_S_VS
- arm_AND_S_VC
- arm_AND_S_HI
- arm_AND_S_LS
- arm_AND_S_GE
- arm_AND_S_LT
- arm_AND_S_GT
- arm_AND_S_LE
- arm_AND_S
- arm_AND_S_ZZ
- arm_ASR_EQ
- arm_ASR_NE
- arm_ASR_CS
- arm_ASR_CC
- arm_ASR_MI
- arm_ASR_PL
- arm_ASR_VS
- arm_ASR_VC
- arm_ASR_HI
- arm_ASR_LS
- arm_ASR_GE
- arm_ASR_LT
- arm_ASR_GT
- arm_ASR_LE
- arm_ASR
- arm_ASR_ZZ
- arm_ASR_S_EQ
- arm_ASR_S_NE
- arm_ASR_S_CS
- arm_ASR_S_CC
- arm_ASR_S_MI
- arm_ASR_S_PL
- arm_ASR_S_VS
- arm_ASR_S_VC
- arm_ASR_S_HI
- arm_ASR_S_LS
- arm_ASR_S_GE
- arm_ASR_S_LT
- arm_ASR_S_GT
- arm_ASR_S_LE
- arm_ASR_S
- arm_ASR_S_ZZ
- arm_B_EQ
- arm_B_NE
- arm_B_CS
- arm_B_CC
- arm_B_MI
- arm_B_PL
- arm_B_VS
- arm_B_VC
- arm_B_HI
- arm_B_LS
- arm_B_GE
- arm_B_LT
- arm_B_GT
- arm_B_LE
- arm_B
- arm_B_ZZ
- arm_BFC_EQ
- arm_BFC_NE
- arm_BFC_CS
- arm_BFC_CC
- arm_BFC_MI
- arm_BFC_PL
- arm_BFC_VS
- arm_BFC_VC
- arm_BFC_HI
- arm_BFC_LS
- arm_BFC_GE
- arm_BFC_LT
- arm_BFC_GT
- arm_BFC_LE
- arm_BFC
- arm_BFC_ZZ
- arm_BFI_EQ
- arm_BFI_NE
- arm_BFI_CS
- arm_BFI_CC
- arm_BFI_MI
- arm_BFI_PL
- arm_BFI_VS
- arm_BFI_VC
- arm_BFI_HI
- arm_BFI_LS
- arm_BFI_GE
- arm_BFI_LT
- arm_BFI_GT
- arm_BFI_LE
- arm_BFI
- arm_BFI_ZZ
- arm_BIC_EQ
- arm_BIC_NE
- arm_BIC_CS
- arm_BIC_CC
- arm_BIC_MI
- arm_BIC_PL
- arm_BIC_VS
- arm_BIC_VC
- arm_BIC_HI
- arm_BIC_LS
- arm_BIC_GE
- arm_BIC_LT
- arm_BIC_GT
- arm_BIC_LE
- arm_BIC
- arm_BIC_ZZ
- arm_BIC_S_EQ
- arm_BIC_S_NE
- arm_BIC_S_CS
- arm_BIC_S_CC
- arm_BIC_S_MI
- arm_BIC_S_PL
- arm_BIC_S_VS
- arm_BIC_S_VC
- arm_BIC_S_HI
- arm_BIC_S_LS
- arm_BIC_S_GE
- arm_BIC_S_LT
- arm_BIC_S_GT
- arm_BIC_S_LE
- arm_BIC_S
- arm_BIC_S_ZZ
- arm_BKPT_EQ
- arm_BKPT_NE
- arm_BKPT_CS
- arm_BKPT_CC
- arm_BKPT_MI
- arm_BKPT_PL
- arm_BKPT_VS
- arm_BKPT_VC
- arm_BKPT_HI
- arm_BKPT_LS
- arm_BKPT_GE
- arm_BKPT_LT
- arm_BKPT_GT
- arm_BKPT_LE
- arm_BKPT
- arm_BKPT_ZZ
- arm_BL_EQ
- arm_BL_NE
- arm_BL_CS
- arm_BL_CC
- arm_BL_MI
- arm_BL_PL
- arm_BL_VS
- arm_BL_VC
- arm_BL_HI
- arm_BL_LS
- arm_BL_GE
- arm_BL_LT
- arm_BL_GT
- arm_BL_LE
- arm_BL
- arm_BL_ZZ
- arm_BLX_EQ
- arm_BLX_NE
- arm_BLX_CS
- arm_BLX_CC
- arm_BLX_MI
- arm_BLX_PL
- arm_BLX_VS
- arm_BLX_VC
- arm_BLX_HI
- arm_BLX_LS
- arm_BLX_GE
- arm_BLX_LT
- arm_BLX_GT
- arm_BLX_LE
- arm_BLX
- arm_BLX_ZZ
- arm_BX_EQ
- arm_BX_NE
- arm_BX_CS
- arm_BX_CC
- arm_BX_MI
- arm_BX_PL
- arm_BX_VS
- arm_BX_VC
- arm_BX_HI
- arm_BX_LS
- arm_BX_GE
- arm_BX_LT
- arm_BX_GT
- arm_BX_LE
- arm_BX
- arm_BX_ZZ
- arm_BXJ_EQ
- arm_BXJ_NE
- arm_BXJ_CS
- arm_BXJ_CC
- arm_BXJ_MI
- arm_BXJ_PL
- arm_BXJ_VS
- arm_BXJ_VC
- arm_BXJ_HI
- arm_BXJ_LS
- arm_BXJ_GE
- arm_BXJ_LT
- arm_BXJ_GT
- arm_BXJ_LE
- arm_BXJ
- arm_BXJ_ZZ
- arm_CLREX
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- arm_CLZ_EQ
- arm_CLZ_NE
- arm_CLZ_CS
- arm_CLZ_CC
- arm_CLZ_MI
- arm_CLZ_PL
- arm_CLZ_VS
- arm_CLZ_VC
- arm_CLZ_HI
- arm_CLZ_LS
- arm_CLZ_GE
- arm_CLZ_LT
- arm_CLZ_GT
- arm_CLZ_LE
- arm_CLZ
- arm_CLZ_ZZ
- arm_CMN_EQ
- arm_CMN_NE
- arm_CMN_CS
- arm_CMN_CC
- arm_CMN_MI
- arm_CMN_PL
- arm_CMN_VS
- arm_CMN_VC
- arm_CMN_HI
- arm_CMN_LS
- arm_CMN_GE
- arm_CMN_LT
- arm_CMN_GT
- arm_CMN_LE
- arm_CMN
- arm_CMN_ZZ
- arm_CMP_EQ
- arm_CMP_NE
- arm_CMP_CS
- arm_CMP_CC
- arm_CMP_MI
- arm_CMP_PL
- arm_CMP_VS
- arm_CMP_VC
- arm_CMP_HI
- arm_CMP_LS
- arm_CMP_GE
- arm_CMP_LT
- arm_CMP_GT
- arm_CMP_LE
- arm_CMP
- arm_CMP_ZZ
- arm_DBG_EQ
- arm_DBG_NE
- arm_DBG_CS
- arm_DBG_CC
- arm_DBG_MI
- arm_DBG_PL
- arm_DBG_VS
- arm_DBG_VC
- arm_DBG_HI
- arm_DBG_LS
- arm_DBG_GE
- arm_DBG_LT
- arm_DBG_GT
- arm_DBG_LE
- arm_DBG
- arm_DBG_ZZ
- arm_DMB
- arm_DSB
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- arm_EOR_EQ
- arm_EOR_NE
- arm_EOR_CS
- arm_EOR_CC
- arm_EOR_MI
- arm_EOR_PL
- arm_EOR_VS
- arm_EOR_VC
- arm_EOR_HI
- arm_EOR_LS
- arm_EOR_GE
- arm_EOR_LT
- arm_EOR_GT
- arm_EOR_LE
- arm_EOR
- arm_EOR_ZZ
- arm_EOR_S_EQ
- arm_EOR_S_NE
- arm_EOR_S_CS
- arm_EOR_S_CC
- arm_EOR_S_MI
- arm_EOR_S_PL
- arm_EOR_S_VS
- arm_EOR_S_VC
- arm_EOR_S_HI
- arm_EOR_S_LS
- arm_EOR_S_GE
- arm_EOR_S_LT
- arm_EOR_S_GT
- arm_EOR_S_LE
- arm_EOR_S
- arm_EOR_S_ZZ
- arm_ISB
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- arm_LDM_EQ
- arm_LDM_NE
- arm_LDM_CS
- arm_LDM_CC
- arm_LDM_MI
- arm_LDM_PL
- arm_LDM_VS
- arm_LDM_VC
- arm_LDM_HI
- arm_LDM_LS
- arm_LDM_GE
- arm_LDM_LT
- arm_LDM_GT
- arm_LDM_LE
- arm_LDM
- arm_LDM_ZZ
- arm_LDMDA_EQ
- arm_LDMDA_NE
- arm_LDMDA_CS
- arm_LDMDA_CC
- arm_LDMDA_MI
- arm_LDMDA_PL
- arm_LDMDA_VS
- arm_LDMDA_VC
- arm_LDMDA_HI
- arm_LDMDA_LS
- arm_LDMDA_GE
- arm_LDMDA_LT
- arm_LDMDA_GT
- arm_LDMDA_LE
- arm_LDMDA
- arm_LDMDA_ZZ
- arm_LDMDB_EQ
- arm_LDMDB_NE
- arm_LDMDB_CS
- arm_LDMDB_CC
- arm_LDMDB_MI
- arm_LDMDB_PL
- arm_LDMDB_VS
- arm_LDMDB_VC
- arm_LDMDB_HI
- arm_LDMDB_LS
- arm_LDMDB_GE
- arm_LDMDB_LT
- arm_LDMDB_GT
- arm_LDMDB_LE
- arm_LDMDB
- arm_LDMDB_ZZ
- arm_LDMIB_EQ
- arm_LDMIB_NE
- arm_LDMIB_CS
- arm_LDMIB_CC
- arm_LDMIB_MI
- arm_LDMIB_PL
- arm_LDMIB_VS
- arm_LDMIB_VC
- arm_LDMIB_HI
- arm_LDMIB_LS
- arm_LDMIB_GE
- arm_LDMIB_LT
- arm_LDMIB_GT
- arm_LDMIB_LE
- arm_LDMIB
- arm_LDMIB_ZZ
- arm_LDR_EQ
- arm_LDR_NE
- arm_LDR_CS
- arm_LDR_CC
- arm_LDR_MI
- arm_LDR_PL
- arm_LDR_VS
- arm_LDR_VC
- arm_LDR_HI
- arm_LDR_LS
- arm_LDR_GE
- arm_LDR_LT
- arm_LDR_GT
- arm_LDR_LE
- arm_LDR
- arm_LDR_ZZ
- arm_LDRB_EQ
- arm_LDRB_NE
- arm_LDRB_CS
- arm_LDRB_CC
- arm_LDRB_MI
- arm_LDRB_PL
- arm_LDRB_VS
- arm_LDRB_VC
- arm_LDRB_HI
- arm_LDRB_LS
- arm_LDRB_GE
- arm_LDRB_LT
- arm_LDRB_GT
- arm_LDRB_LE
- arm_LDRB
- arm_LDRB_ZZ
- arm_LDRBT_EQ
- arm_LDRBT_NE
- arm_LDRBT_CS
- arm_LDRBT_CC
- arm_LDRBT_MI
- arm_LDRBT_PL
- arm_LDRBT_VS
- arm_LDRBT_VC
- arm_LDRBT_HI
- arm_LDRBT_LS
- arm_LDRBT_GE
- arm_LDRBT_LT
- arm_LDRBT_GT
- arm_LDRBT_LE
- arm_LDRBT
- arm_LDRBT_ZZ
- arm_LDRD_EQ
- arm_LDRD_NE
- arm_LDRD_CS
- arm_LDRD_CC
- arm_LDRD_MI
- arm_LDRD_PL
- arm_LDRD_VS
- arm_LDRD_VC
- arm_LDRD_HI
- arm_LDRD_LS
- arm_LDRD_GE
- arm_LDRD_LT
- arm_LDRD_GT
- arm_LDRD_LE
- arm_LDRD
- arm_LDRD_ZZ
- arm_LDREX_EQ
- arm_LDREX_NE
- arm_LDREX_CS
- arm_LDREX_CC
- arm_LDREX_MI
- arm_LDREX_PL
- arm_LDREX_VS
- arm_LDREX_VC
- arm_LDREX_HI
- arm_LDREX_LS
- arm_LDREX_GE
- arm_LDREX_LT
- arm_LDREX_GT
- arm_LDREX_LE
- arm_LDREX
- arm_LDREX_ZZ
- arm_LDREXB_EQ
- arm_LDREXB_NE
- arm_LDREXB_CS
- arm_LDREXB_CC
- arm_LDREXB_MI
- arm_LDREXB_PL
- arm_LDREXB_VS
- arm_LDREXB_VC
- arm_LDREXB_HI
- arm_LDREXB_LS
- arm_LDREXB_GE
- arm_LDREXB_LT
- arm_LDREXB_GT
- arm_LDREXB_LE
- arm_LDREXB
- arm_LDREXB_ZZ
- arm_LDREXD_EQ
- arm_LDREXD_NE
- arm_LDREXD_CS
- arm_LDREXD_CC
- arm_LDREXD_MI
- arm_LDREXD_PL
- arm_LDREXD_VS
- arm_LDREXD_VC
- arm_LDREXD_HI
- arm_LDREXD_LS
- arm_LDREXD_GE
- arm_LDREXD_LT
- arm_LDREXD_GT
- arm_LDREXD_LE
- arm_LDREXD
- arm_LDREXD_ZZ
- arm_LDREXH_EQ
- arm_LDREXH_NE
- arm_LDREXH_CS
- arm_LDREXH_CC
- arm_LDREXH_MI
- arm_LDREXH_PL
- arm_LDREXH_VS
- arm_LDREXH_VC
- arm_LDREXH_HI
- arm_LDREXH_LS
- arm_LDREXH_GE
- arm_LDREXH_LT
- arm_LDREXH_GT
- arm_LDREXH_LE
- arm_LDREXH
- arm_LDREXH_ZZ
- arm_LDRH_EQ
- arm_LDRH_NE
- arm_LDRH_CS
- arm_LDRH_CC
- arm_LDRH_MI
- arm_LDRH_PL
- arm_LDRH_VS
- arm_LDRH_VC
- arm_LDRH_HI
- arm_LDRH_LS
- arm_LDRH_GE
- arm_LDRH_LT
- arm_LDRH_GT
- arm_LDRH_LE
- arm_LDRH
- arm_LDRH_ZZ
- arm_LDRHT_EQ
- arm_LDRHT_NE
- arm_LDRHT_CS
- arm_LDRHT_CC
- arm_LDRHT_MI
- arm_LDRHT_PL
- arm_LDRHT_VS
- arm_LDRHT_VC
- arm_LDRHT_HI
- arm_LDRHT_LS
- arm_LDRHT_GE
- arm_LDRHT_LT
- arm_LDRHT_GT
- arm_LDRHT_LE
- arm_LDRHT
- arm_LDRHT_ZZ
- arm_LDRSB_EQ
- arm_LDRSB_NE
- arm_LDRSB_CS
- arm_LDRSB_CC
- arm_LDRSB_MI
- arm_LDRSB_PL
- arm_LDRSB_VS
- arm_LDRSB_VC
- arm_LDRSB_HI
- arm_LDRSB_LS
- arm_LDRSB_GE
- arm_LDRSB_LT
- arm_LDRSB_GT
- arm_LDRSB_LE
- arm_LDRSB
- arm_LDRSB_ZZ
- arm_LDRSBT_EQ
- arm_LDRSBT_NE
- arm_LDRSBT_CS
- arm_LDRSBT_CC
- arm_LDRSBT_MI
- arm_LDRSBT_PL
- arm_LDRSBT_VS
- arm_LDRSBT_VC
- arm_LDRSBT_HI
- arm_LDRSBT_LS
- arm_LDRSBT_GE
- arm_LDRSBT_LT
- arm_LDRSBT_GT
- arm_LDRSBT_LE
- arm_LDRSBT
- arm_LDRSBT_ZZ
- arm_LDRSH_EQ
- arm_LDRSH_NE
- arm_LDRSH_CS
- arm_LDRSH_CC
- arm_LDRSH_MI
- arm_LDRSH_PL
- arm_LDRSH_VS
- arm_LDRSH_VC
- arm_LDRSH_HI
- arm_LDRSH_LS
- arm_LDRSH_GE
- arm_LDRSH_LT
- arm_LDRSH_GT
- arm_LDRSH_LE
- arm_LDRSH
- arm_LDRSH_ZZ
- arm_LDRSHT_EQ
- arm_LDRSHT_NE
- arm_LDRSHT_CS
- arm_LDRSHT_CC
- arm_LDRSHT_MI
- arm_LDRSHT_PL
- arm_LDRSHT_VS
- arm_LDRSHT_VC
- arm_LDRSHT_HI
- arm_LDRSHT_LS
- arm_LDRSHT_GE
- arm_LDRSHT_LT
- arm_LDRSHT_GT
- arm_LDRSHT_LE
- arm_LDRSHT
- arm_LDRSHT_ZZ
- arm_LDRT_EQ
- arm_LDRT_NE
- arm_LDRT_CS
- arm_LDRT_CC
- arm_LDRT_MI
- arm_LDRT_PL
- arm_LDRT_VS
- arm_LDRT_VC
- arm_LDRT_HI
- arm_LDRT_LS
- arm_LDRT_GE
- arm_LDRT_LT
- arm_LDRT_GT
- arm_LDRT_LE
- arm_LDRT
- arm_LDRT_ZZ
- arm_LSL_EQ
- arm_LSL_NE
- arm_LSL_CS
- arm_LSL_CC
- arm_LSL_MI
- arm_LSL_PL
- arm_LSL_VS
- arm_LSL_VC
- arm_LSL_HI
- arm_LSL_LS
- arm_LSL_GE
- arm_LSL_LT
- arm_LSL_GT
- arm_LSL_LE
- arm_LSL
- arm_LSL_ZZ
- arm_LSL_S_EQ
- arm_LSL_S_NE
- arm_LSL_S_CS
- arm_LSL_S_CC
- arm_LSL_S_MI
- arm_LSL_S_PL
- arm_LSL_S_VS
- arm_LSL_S_VC
- arm_LSL_S_HI
- arm_LSL_S_LS
- arm_LSL_S_GE
- arm_LSL_S_LT
- arm_LSL_S_GT
- arm_LSL_S_LE
- arm_LSL_S
- arm_LSL_S_ZZ
- arm_LSR_EQ
- arm_LSR_NE
- arm_LSR_CS
- arm_LSR_CC
- arm_LSR_MI
- arm_LSR_PL
- arm_LSR_VS
- arm_LSR_VC
- arm_LSR_HI
- arm_LSR_LS
- arm_LSR_GE
- arm_LSR_LT
- arm_LSR_GT
- arm_LSR_LE
- arm_LSR
- arm_LSR_ZZ
- arm_LSR_S_EQ
- arm_LSR_S_NE
- arm_LSR_S_CS
- arm_LSR_S_CC
- arm_LSR_S_MI
- arm_LSR_S_PL
- arm_LSR_S_VS
- arm_LSR_S_VC
- arm_LSR_S_HI
- arm_LSR_S_LS
- arm_LSR_S_GE
- arm_LSR_S_LT
- arm_LSR_S_GT
- arm_LSR_S_LE
- arm_LSR_S
- arm_LSR_S_ZZ
- arm_MLA_EQ
- arm_MLA_NE
- arm_MLA_CS
- arm_MLA_CC
- arm_MLA_MI
- arm_MLA_PL
- arm_MLA_VS
- arm_MLA_VC
- arm_MLA_HI
- arm_MLA_LS
- arm_MLA_GE
- arm_MLA_LT
- arm_MLA_GT
- arm_MLA_LE
- arm_MLA
- arm_MLA_ZZ
- arm_MLA_S_EQ
- arm_MLA_S_NE
- arm_MLA_S_CS
- arm_MLA_S_CC
- arm_MLA_S_MI
- arm_MLA_S_PL
- arm_MLA_S_VS
- arm_MLA_S_VC
- arm_MLA_S_HI
- arm_MLA_S_LS
- arm_MLA_S_GE
- arm_MLA_S_LT
- arm_MLA_S_GT
- arm_MLA_S_LE
- arm_MLA_S
- arm_MLA_S_ZZ
- arm_MLS_EQ
- arm_MLS_NE
- arm_MLS_CS
- arm_MLS_CC
- arm_MLS_MI
- arm_MLS_PL
- arm_MLS_VS
- arm_MLS_VC
- arm_MLS_HI
- arm_MLS_LS
- arm_MLS_GE
- arm_MLS_LT
- arm_MLS_GT
- arm_MLS_LE
- arm_MLS
- arm_MLS_ZZ
- arm_MOV_EQ
- arm_MOV_NE
- arm_MOV_CS
- arm_MOV_CC
- arm_MOV_MI
- arm_MOV_PL
- arm_MOV_VS
- arm_MOV_VC
- arm_MOV_HI
- arm_MOV_LS
- arm_MOV_GE
- arm_MOV_LT
- arm_MOV_GT
- arm_MOV_LE
- arm_MOV
- arm_MOV_ZZ
- arm_MOV_S_EQ
- arm_MOV_S_NE
- arm_MOV_S_CS
- arm_MOV_S_CC
- arm_MOV_S_MI
- arm_MOV_S_PL
- arm_MOV_S_VS
- arm_MOV_S_VC
- arm_MOV_S_HI
- arm_MOV_S_LS
- arm_MOV_S_GE
- arm_MOV_S_LT
- arm_MOV_S_GT
- arm_MOV_S_LE
- arm_MOV_S
- arm_MOV_S_ZZ
- arm_MOVT_EQ
- arm_MOVT_NE
- arm_MOVT_CS
- arm_MOVT_CC
- arm_MOVT_MI
- arm_MOVT_PL
- arm_MOVT_VS
- arm_MOVT_VC
- arm_MOVT_HI
- arm_MOVT_LS
- arm_MOVT_GE
- arm_MOVT_LT
- arm_MOVT_GT
- arm_MOVT_LE
- arm_MOVT
- arm_MOVT_ZZ
- arm_MOVW_EQ
- arm_MOVW_NE
- arm_MOVW_CS
- arm_MOVW_CC
- arm_MOVW_MI
- arm_MOVW_PL
- arm_MOVW_VS
- arm_MOVW_VC
- arm_MOVW_HI
- arm_MOVW_LS
- arm_MOVW_GE
- arm_MOVW_LT
- arm_MOVW_GT
- arm_MOVW_LE
- arm_MOVW
- arm_MOVW_ZZ
- arm_MRS_EQ
- arm_MRS_NE
- arm_MRS_CS
- arm_MRS_CC
- arm_MRS_MI
- arm_MRS_PL
- arm_MRS_VS
- arm_MRS_VC
- arm_MRS_HI
- arm_MRS_LS
- arm_MRS_GE
- arm_MRS_LT
- arm_MRS_GT
- arm_MRS_LE
- arm_MRS
- arm_MRS_ZZ
- arm_MUL_EQ
- arm_MUL_NE
- arm_MUL_CS
- arm_MUL_CC
- arm_MUL_MI
- arm_MUL_PL
- arm_MUL_VS
- arm_MUL_VC
- arm_MUL_HI
- arm_MUL_LS
- arm_MUL_GE
- arm_MUL_LT
- arm_MUL_GT
- arm_MUL_LE
- arm_MUL
- arm_MUL_ZZ
- arm_MUL_S_EQ
- arm_MUL_S_NE
- arm_MUL_S_CS
- arm_MUL_S_CC
- arm_MUL_S_MI
- arm_MUL_S_PL
- arm_MUL_S_VS
- arm_MUL_S_VC
- arm_MUL_S_HI
- arm_MUL_S_LS
- arm_MUL_S_GE
- arm_MUL_S_LT
- arm_MUL_S_GT
- arm_MUL_S_LE
- arm_MUL_S
- arm_MUL_S_ZZ
- arm_MVN_EQ
- arm_MVN_NE
- arm_MVN_CS
- arm_MVN_CC
- arm_MVN_MI
- arm_MVN_PL
- arm_MVN_VS
- arm_MVN_VC
- arm_MVN_HI
- arm_MVN_LS
- arm_MVN_GE
- arm_MVN_LT
- arm_MVN_GT
- arm_MVN_LE
- arm_MVN
- arm_MVN_ZZ
- arm_MVN_S_EQ
- arm_MVN_S_NE
- arm_MVN_S_CS
- arm_MVN_S_CC
- arm_MVN_S_MI
- arm_MVN_S_PL
- arm_MVN_S_VS
- arm_MVN_S_VC
- arm_MVN_S_HI
- arm_MVN_S_LS
- arm_MVN_S_GE
- arm_MVN_S_LT
- arm_MVN_S_GT
- arm_MVN_S_LE
- arm_MVN_S
- arm_MVN_S_ZZ
- arm_NOP_EQ
- arm_NOP_NE
- arm_NOP_CS
- arm_NOP_CC
- arm_NOP_MI
- arm_NOP_PL
- arm_NOP_VS
- arm_NOP_VC
- arm_NOP_HI
- arm_NOP_LS
- arm_NOP_GE
- arm_NOP_LT
- arm_NOP_GT
- arm_NOP_LE
- arm_NOP
- arm_NOP_ZZ
- arm_ORR_EQ
- arm_ORR_NE
- arm_ORR_CS
- arm_ORR_CC
- arm_ORR_MI
- arm_ORR_PL
- arm_ORR_VS
- arm_ORR_VC
- arm_ORR_HI
- arm_ORR_LS
- arm_ORR_GE
- arm_ORR_LT
- arm_ORR_GT
- arm_ORR_LE
- arm_ORR
- arm_ORR_ZZ
- arm_ORR_S_EQ
- arm_ORR_S_NE
- arm_ORR_S_CS
- arm_ORR_S_CC
- arm_ORR_S_MI
- arm_ORR_S_PL
- arm_ORR_S_VS
- arm_ORR_S_VC
- arm_ORR_S_HI
- arm_ORR_S_LS
- arm_ORR_S_GE
- arm_ORR_S_LT
- arm_ORR_S_GT
- arm_ORR_S_LE
- arm_ORR_S
- arm_ORR_S_ZZ
- arm_PKHBT_EQ
- arm_PKHBT_NE
- arm_PKHBT_CS
- arm_PKHBT_CC
- arm_PKHBT_MI
- arm_PKHBT_PL
- arm_PKHBT_VS
- arm_PKHBT_VC
- arm_PKHBT_HI
- arm_PKHBT_LS
- arm_PKHBT_GE
- arm_PKHBT_LT
- arm_PKHBT_GT
- arm_PKHBT_LE
- arm_PKHBT
- arm_PKHBT_ZZ
- arm_PKHTB_EQ
- arm_PKHTB_NE
- arm_PKHTB_CS
- arm_PKHTB_CC
- arm_PKHTB_MI
- arm_PKHTB_PL
- arm_PKHTB_VS
- arm_PKHTB_VC
- arm_PKHTB_HI
- arm_PKHTB_LS
- arm_PKHTB_GE
- arm_PKHTB_LT
- arm_PKHTB_GT
- arm_PKHTB_LE
- arm_PKHTB
- arm_PKHTB_ZZ
- arm_PLD_W
- arm_PLD
- arm_PLI
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- arm_POP_EQ
- arm_POP_NE
- arm_POP_CS
- arm_POP_CC
- arm_POP_MI
- arm_POP_PL
- arm_POP_VS
- arm_POP_VC
- arm_POP_HI
- arm_POP_LS
- arm_POP_GE
- arm_POP_LT
- arm_POP_GT
- arm_POP_LE
- arm_POP
- arm_POP_ZZ
- arm_PUSH_EQ
- arm_PUSH_NE
- arm_PUSH_CS
- arm_PUSH_CC
- arm_PUSH_MI
- arm_PUSH_PL
- arm_PUSH_VS
- arm_PUSH_VC
- arm_PUSH_HI
- arm_PUSH_LS
- arm_PUSH_GE
- arm_PUSH_LT
- arm_PUSH_GT
- arm_PUSH_LE
- arm_PUSH
- arm_PUSH_ZZ
- arm_QADD_EQ
- arm_QADD_NE
- arm_QADD_CS
- arm_QADD_CC
- arm_QADD_MI
- arm_QADD_PL
- arm_QADD_VS
- arm_QADD_VC
- arm_QADD_HI
- arm_QADD_LS
- arm_QADD_GE
- arm_QADD_LT
- arm_QADD_GT
- arm_QADD_LE
- arm_QADD
- arm_QADD_ZZ
- arm_QADD16_EQ
- arm_QADD16_NE
- arm_QADD16_CS
- arm_QADD16_CC
- arm_QADD16_MI
- arm_QADD16_PL
- arm_QADD16_VS
- arm_QADD16_VC
- arm_QADD16_HI
- arm_QADD16_LS
- arm_QADD16_GE
- arm_QADD16_LT
- arm_QADD16_GT
- arm_QADD16_LE
- arm_QADD16
- arm_QADD16_ZZ
- arm_QADD8_EQ
- arm_QADD8_NE
- arm_QADD8_CS
- arm_QADD8_CC
- arm_QADD8_MI
- arm_QADD8_PL
- arm_QADD8_VS
- arm_QADD8_VC
- arm_QADD8_HI
- arm_QADD8_LS
- arm_QADD8_GE
- arm_QADD8_LT
- arm_QADD8_GT
- arm_QADD8_LE
- arm_QADD8
- arm_QADD8_ZZ
- arm_QASX_EQ
- arm_QASX_NE
- arm_QASX_CS
- arm_QASX_CC
- arm_QASX_MI
- arm_QASX_PL
- arm_QASX_VS
- arm_QASX_VC
- arm_QASX_HI
- arm_QASX_LS
- arm_QASX_GE
- arm_QASX_LT
- arm_QASX_GT
- arm_QASX_LE
- arm_QASX
- arm_QASX_ZZ
- arm_QDADD_EQ
- arm_QDADD_NE
- arm_QDADD_CS
- arm_QDADD_CC
- arm_QDADD_MI
- arm_QDADD_PL
- arm_QDADD_VS
- arm_QDADD_VC
- arm_QDADD_HI
- arm_QDADD_LS
- arm_QDADD_GE
- arm_QDADD_LT
- arm_QDADD_GT
- arm_QDADD_LE
- arm_QDADD
- arm_QDADD_ZZ
- arm_QDSUB_EQ
- arm_QDSUB_NE
- arm_QDSUB_CS
- arm_QDSUB_CC
- arm_QDSUB_MI
- arm_QDSUB_PL
- arm_QDSUB_VS
- arm_QDSUB_VC
- arm_QDSUB_HI
- arm_QDSUB_LS
- arm_QDSUB_GE
- arm_QDSUB_LT
- arm_QDSUB_GT
- arm_QDSUB_LE
- arm_QDSUB
- arm_QDSUB_ZZ
- arm_QSAX_EQ
- arm_QSAX_NE
- arm_QSAX_CS
- arm_QSAX_CC
- arm_QSAX_MI
- arm_QSAX_PL
- arm_QSAX_VS
- arm_QSAX_VC
- arm_QSAX_HI
- arm_QSAX_LS
- arm_QSAX_GE
- arm_QSAX_LT
- arm_QSAX_GT
- arm_QSAX_LE
- arm_QSAX
- arm_QSAX_ZZ
- arm_QSUB_EQ
- arm_QSUB_NE
- arm_QSUB_CS
- arm_QSUB_CC
- arm_QSUB_MI
- arm_QSUB_PL
- arm_QSUB_VS
- arm_QSUB_VC
- arm_QSUB_HI
- arm_QSUB_LS
- arm_QSUB_GE
- arm_QSUB_LT
- arm_QSUB_GT
- arm_QSUB_LE
- arm_QSUB
- arm_QSUB_ZZ
- arm_QSUB16_EQ
- arm_QSUB16_NE
- arm_QSUB16_CS
- arm_QSUB16_CC
- arm_QSUB16_MI
- arm_QSUB16_PL
- arm_QSUB16_VS
- arm_QSUB16_VC
- arm_QSUB16_HI
- arm_QSUB16_LS
- arm_QSUB16_GE
- arm_QSUB16_LT
- arm_QSUB16_GT
- arm_QSUB16_LE
- arm_QSUB16
- arm_QSUB16_ZZ
- arm_QSUB8_EQ
- arm_QSUB8_NE
- arm_QSUB8_CS
- arm_QSUB8_CC
- arm_QSUB8_MI
- arm_QSUB8_PL
- arm_QSUB8_VS
- arm_QSUB8_VC
- arm_QSUB8_HI
- arm_QSUB8_LS
- arm_QSUB8_GE
- arm_QSUB8_LT
- arm_QSUB8_GT
- arm_QSUB8_LE
- arm_QSUB8
- arm_QSUB8_ZZ
- arm_RBIT_EQ
- arm_RBIT_NE
- arm_RBIT_CS
- arm_RBIT_CC
- arm_RBIT_MI
- arm_RBIT_PL
- arm_RBIT_VS
- arm_RBIT_VC
- arm_RBIT_HI
- arm_RBIT_LS
- arm_RBIT_GE
- arm_RBIT_LT
- arm_RBIT_GT
- arm_RBIT_LE
- arm_RBIT
- arm_RBIT_ZZ
- arm_REV_EQ
- arm_REV_NE
- arm_REV_CS
- arm_REV_CC
- arm_REV_MI
- arm_REV_PL
- arm_REV_VS
- arm_REV_VC
- arm_REV_HI
- arm_REV_LS
- arm_REV_GE
- arm_REV_LT
- arm_REV_GT
- arm_REV_LE
- arm_REV
- arm_REV_ZZ
- arm_REV16_EQ
- arm_REV16_NE
- arm_REV16_CS
- arm_REV16_CC
- arm_REV16_MI
- arm_REV16_PL
- arm_REV16_VS
- arm_REV16_VC
- arm_REV16_HI
- arm_REV16_LS
- arm_REV16_GE
- arm_REV16_LT
- arm_REV16_GT
- arm_REV16_LE
- arm_REV16
- arm_REV16_ZZ
- arm_REVSH_EQ
- arm_REVSH_NE
- arm_REVSH_CS
- arm_REVSH_CC
- arm_REVSH_MI
- arm_REVSH_PL
- arm_REVSH_VS
- arm_REVSH_VC
- arm_REVSH_HI
- arm_REVSH_LS
- arm_REVSH_GE
- arm_REVSH_LT
- arm_REVSH_GT
- arm_REVSH_LE
- arm_REVSH
- arm_REVSH_ZZ
- arm_ROR_EQ
- arm_ROR_NE
- arm_ROR_CS
- arm_ROR_CC
- arm_ROR_MI
- arm_ROR_PL
- arm_ROR_VS
- arm_ROR_VC
- arm_ROR_HI
- arm_ROR_LS
- arm_ROR_GE
- arm_ROR_LT
- arm_ROR_GT
- arm_ROR_LE
- arm_ROR
- arm_ROR_ZZ
- arm_ROR_S_EQ
- arm_ROR_S_NE
- arm_ROR_S_CS
- arm_ROR_S_CC
- arm_ROR_S_MI
- arm_ROR_S_PL
- arm_ROR_S_VS
- arm_ROR_S_VC
- arm_ROR_S_HI
- arm_ROR_S_LS
- arm_ROR_S_GE
- arm_ROR_S_LT
- arm_ROR_S_GT
- arm_ROR_S_LE
- arm_ROR_S
- arm_ROR_S_ZZ
- arm_RRX_EQ
- arm_RRX_NE
- arm_RRX_CS
- arm_RRX_CC
- arm_RRX_MI
- arm_RRX_PL
- arm_RRX_VS
- arm_RRX_VC
- arm_RRX_HI
- arm_RRX_LS
- arm_RRX_GE
- arm_RRX_LT
- arm_RRX_GT
- arm_RRX_LE
- arm_RRX
- arm_RRX_ZZ
- arm_RRX_S_EQ
- arm_RRX_S_NE
- arm_RRX_S_CS
- arm_RRX_S_CC
- arm_RRX_S_MI
- arm_RRX_S_PL
- arm_RRX_S_VS
- arm_RRX_S_VC
- arm_RRX_S_HI
- arm_RRX_S_LS
- arm_RRX_S_GE
- arm_RRX_S_LT
- arm_RRX_S_GT
- arm_RRX_S_LE
- arm_RRX_S
- arm_RRX_S_ZZ
- arm_RSB_EQ
- arm_RSB_NE
- arm_RSB_CS
- arm_RSB_CC
- arm_RSB_MI
- arm_RSB_PL
- arm_RSB_VS
- arm_RSB_VC
- arm_RSB_HI
- arm_RSB_LS
- arm_RSB_GE
- arm_RSB_LT
- arm_RSB_GT
- arm_RSB_LE
- arm_RSB
- arm_RSB_ZZ
- arm_RSB_S_EQ
- arm_RSB_S_NE
- arm_RSB_S_CS
- arm_RSB_S_CC
- arm_RSB_S_MI
- arm_RSB_S_PL
- arm_RSB_S_VS
- arm_RSB_S_VC
- arm_RSB_S_HI
- arm_RSB_S_LS
- arm_RSB_S_GE
- arm_RSB_S_LT
- arm_RSB_S_GT
- arm_RSB_S_LE
- arm_RSB_S
- arm_RSB_S_ZZ
- arm_RSC_EQ
- arm_RSC_NE
- arm_RSC_CS
- arm_RSC_CC
- arm_RSC_MI
- arm_RSC_PL
- arm_RSC_VS
- arm_RSC_VC
- arm_RSC_HI
- arm_RSC_LS
- arm_RSC_GE
- arm_RSC_LT
- arm_RSC_GT
- arm_RSC_LE
- arm_RSC
- arm_RSC_ZZ
- arm_RSC_S_EQ
- arm_RSC_S_NE
- arm_RSC_S_CS
- arm_RSC_S_CC
- arm_RSC_S_MI
- arm_RSC_S_PL
- arm_RSC_S_VS
- arm_RSC_S_VC
- arm_RSC_S_HI
- arm_RSC_S_LS
- arm_RSC_S_GE
- arm_RSC_S_LT
- arm_RSC_S_GT
- arm_RSC_S_LE
- arm_RSC_S
- arm_RSC_S_ZZ
- arm_SADD16_EQ
- arm_SADD16_NE
- arm_SADD16_CS
- arm_SADD16_CC
- arm_SADD16_MI
- arm_SADD16_PL
- arm_SADD16_VS
- arm_SADD16_VC
- arm_SADD16_HI
- arm_SADD16_LS
- arm_SADD16_GE
- arm_SADD16_LT
- arm_SADD16_GT
- arm_SADD16_LE
- arm_SADD16
- arm_SADD16_ZZ
- arm_SADD8_EQ
- arm_SADD8_NE
- arm_SADD8_CS
- arm_SADD8_CC
- arm_SADD8_MI
- arm_SADD8_PL
- arm_SADD8_VS
- arm_SADD8_VC
- arm_SADD8_HI
- arm_SADD8_LS
- arm_SADD8_GE
- arm_SADD8_LT
- arm_SADD8_GT
- arm_SADD8_LE
- arm_SADD8
- arm_SADD8_ZZ
- arm_SASX_EQ
- arm_SASX_NE
- arm_SASX_CS
- arm_SASX_CC
- arm_SASX_MI
- arm_SASX_PL
- arm_SASX_VS
- arm_SASX_VC
- arm_SASX_HI
- arm_SASX_LS
- arm_SASX_GE
- arm_SASX_LT
- arm_SASX_GT
- arm_SASX_LE
- arm_SASX
- arm_SASX_ZZ
- arm_SBC_EQ
- arm_SBC_NE
- arm_SBC_CS
- arm_SBC_CC
- arm_SBC_MI
- arm_SBC_PL
- arm_SBC_VS
- arm_SBC_VC
- arm_SBC_HI
- arm_SBC_LS
- arm_SBC_GE
- arm_SBC_LT
- arm_SBC_GT
- arm_SBC_LE
- arm_SBC
- arm_SBC_ZZ
- arm_SBC_S_EQ
- arm_SBC_S_NE
- arm_SBC_S_CS
- arm_SBC_S_CC
- arm_SBC_S_MI
- arm_SBC_S_PL
- arm_SBC_S_VS
- arm_SBC_S_VC
- arm_SBC_S_HI
- arm_SBC_S_LS
- arm_SBC_S_GE
- arm_SBC_S_LT
- arm_SBC_S_GT
- arm_SBC_S_LE
- arm_SBC_S
- arm_SBC_S_ZZ
- arm_SBFX_EQ
- arm_SBFX_NE
- arm_SBFX_CS
- arm_SBFX_CC
- arm_SBFX_MI
- arm_SBFX_PL
- arm_SBFX_VS
- arm_SBFX_VC
- arm_SBFX_HI
- arm_SBFX_LS
- arm_SBFX_GE
- arm_SBFX_LT
- arm_SBFX_GT
- arm_SBFX_LE
- arm_SBFX
- arm_SBFX_ZZ
- arm_SEL_EQ
- arm_SEL_NE
- arm_SEL_CS
- arm_SEL_CC
- arm_SEL_MI
- arm_SEL_PL
- arm_SEL_VS
- arm_SEL_VC
- arm_SEL_HI
- arm_SEL_LS
- arm_SEL_GE
- arm_SEL_LT
- arm_SEL_GT
- arm_SEL_LE
- arm_SEL
- arm_SEL_ZZ
- arm_SETEND
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- arm_SEV_EQ
- arm_SEV_NE
- arm_SEV_CS
- arm_SEV_CC
- arm_SEV_MI
- arm_SEV_PL
- arm_SEV_VS
- arm_SEV_VC
- arm_SEV_HI
- arm_SEV_LS
- arm_SEV_GE
- arm_SEV_LT
- arm_SEV_GT
- arm_SEV_LE
- arm_SEV
- arm_SEV_ZZ
- arm_SHADD16_EQ
- arm_SHADD16_NE
- arm_SHADD16_CS
- arm_SHADD16_CC
- arm_SHADD16_MI
- arm_SHADD16_PL
- arm_SHADD16_VS
- arm_SHADD16_VC
- arm_SHADD16_HI
- arm_SHADD16_LS
- arm_SHADD16_GE
- arm_SHADD16_LT
- arm_SHADD16_GT
- arm_SHADD16_LE
- arm_SHADD16
- arm_SHADD16_ZZ
- arm_SHADD8_EQ
- arm_SHADD8_NE
- arm_SHADD8_CS
- arm_SHADD8_CC
- arm_SHADD8_MI
- arm_SHADD8_PL
- arm_SHADD8_VS
- arm_SHADD8_VC
- arm_SHADD8_HI
- arm_SHADD8_LS
- arm_SHADD8_GE
- arm_SHADD8_LT
- arm_SHADD8_GT
- arm_SHADD8_LE
- arm_SHADD8
- arm_SHADD8_ZZ
- arm_SHASX_EQ
- arm_SHASX_NE
- arm_SHASX_CS
- arm_SHASX_CC
- arm_SHASX_MI
- arm_SHASX_PL
- arm_SHASX_VS
- arm_SHASX_VC
- arm_SHASX_HI
- arm_SHASX_LS
- arm_SHASX_GE
- arm_SHASX_LT
- arm_SHASX_GT
- arm_SHASX_LE
- arm_SHASX
- arm_SHASX_ZZ
- arm_SHSAX_EQ
- arm_SHSAX_NE
- arm_SHSAX_CS
- arm_SHSAX_CC
- arm_SHSAX_MI
- arm_SHSAX_PL
- arm_SHSAX_VS
- arm_SHSAX_VC
- arm_SHSAX_HI
- arm_SHSAX_LS
- arm_SHSAX_GE
- arm_SHSAX_LT
- arm_SHSAX_GT
- arm_SHSAX_LE
- arm_SHSAX
- arm_SHSAX_ZZ
- arm_SHSUB16_EQ
- arm_SHSUB16_NE
- arm_SHSUB16_CS
- arm_SHSUB16_CC
- arm_SHSUB16_MI
- arm_SHSUB16_PL
- arm_SHSUB16_VS
- arm_SHSUB16_VC
- arm_SHSUB16_HI
- arm_SHSUB16_LS
- arm_SHSUB16_GE
- arm_SHSUB16_LT
- arm_SHSUB16_GT
- arm_SHSUB16_LE
- arm_SHSUB16
- arm_SHSUB16_ZZ
- arm_SHSUB8_EQ
- arm_SHSUB8_NE
- arm_SHSUB8_CS
- arm_SHSUB8_CC
- arm_SHSUB8_MI
- arm_SHSUB8_PL
- arm_SHSUB8_VS
- arm_SHSUB8_VC
- arm_SHSUB8_HI
- arm_SHSUB8_LS
- arm_SHSUB8_GE
- arm_SHSUB8_LT
- arm_SHSUB8_GT
- arm_SHSUB8_LE
- arm_SHSUB8
- arm_SHSUB8_ZZ
- arm_SMLABB_EQ
- arm_SMLABB_NE
- arm_SMLABB_CS
- arm_SMLABB_CC
- arm_SMLABB_MI
- arm_SMLABB_PL
- arm_SMLABB_VS
- arm_SMLABB_VC
- arm_SMLABB_HI
- arm_SMLABB_LS
- arm_SMLABB_GE
- arm_SMLABB_LT
- arm_SMLABB_GT
- arm_SMLABB_LE
- arm_SMLABB
- arm_SMLABB_ZZ
- arm_SMLABT_EQ
- arm_SMLABT_NE
- arm_SMLABT_CS
- arm_SMLABT_CC
- arm_SMLABT_MI
- arm_SMLABT_PL
- arm_SMLABT_VS
- arm_SMLABT_VC
- arm_SMLABT_HI
- arm_SMLABT_LS
- arm_SMLABT_GE
- arm_SMLABT_LT
- arm_SMLABT_GT
- arm_SMLABT_LE
- arm_SMLABT
- arm_SMLABT_ZZ
- arm_SMLATB_EQ
- arm_SMLATB_NE
- arm_SMLATB_CS
- arm_SMLATB_CC
- arm_SMLATB_MI
- arm_SMLATB_PL
- arm_SMLATB_VS
- arm_SMLATB_VC
- arm_SMLATB_HI
- arm_SMLATB_LS
- arm_SMLATB_GE
- arm_SMLATB_LT
- arm_SMLATB_GT
- arm_SMLATB_LE
- arm_SMLATB
- arm_SMLATB_ZZ
- arm_SMLATT_EQ
- arm_SMLATT_NE
- arm_SMLATT_CS
- arm_SMLATT_CC
- arm_SMLATT_MI
- arm_SMLATT_PL
- arm_SMLATT_VS
- arm_SMLATT_VC
- arm_SMLATT_HI
- arm_SMLATT_LS
- arm_SMLATT_GE
- arm_SMLATT_LT
- arm_SMLATT_GT
- arm_SMLATT_LE
- arm_SMLATT
- arm_SMLATT_ZZ
- arm_SMLAD_EQ
- arm_SMLAD_NE
- arm_SMLAD_CS
- arm_SMLAD_CC
- arm_SMLAD_MI
- arm_SMLAD_PL
- arm_SMLAD_VS
- arm_SMLAD_VC
- arm_SMLAD_HI
- arm_SMLAD_LS
- arm_SMLAD_GE
- arm_SMLAD_LT
- arm_SMLAD_GT
- arm_SMLAD_LE
- arm_SMLAD
- arm_SMLAD_ZZ
- arm_SMLAD_X_EQ
- arm_SMLAD_X_NE
- arm_SMLAD_X_CS
- arm_SMLAD_X_CC
- arm_SMLAD_X_MI
- arm_SMLAD_X_PL
- arm_SMLAD_X_VS
- arm_SMLAD_X_VC
- arm_SMLAD_X_HI
- arm_SMLAD_X_LS
- arm_SMLAD_X_GE
- arm_SMLAD_X_LT
- arm_SMLAD_X_GT
- arm_SMLAD_X_LE
- arm_SMLAD_X
- arm_SMLAD_X_ZZ
- arm_SMLAL_EQ
- arm_SMLAL_NE
- arm_SMLAL_CS
- arm_SMLAL_CC
- arm_SMLAL_MI
- arm_SMLAL_PL
- arm_SMLAL_VS
- arm_SMLAL_VC
- arm_SMLAL_HI
- arm_SMLAL_LS
- arm_SMLAL_GE
- arm_SMLAL_LT
- arm_SMLAL_GT
- arm_SMLAL_LE
- arm_SMLAL
- arm_SMLAL_ZZ
- arm_SMLAL_S_EQ
- arm_SMLAL_S_NE
- arm_SMLAL_S_CS
- arm_SMLAL_S_CC
- arm_SMLAL_S_MI
- arm_SMLAL_S_PL
- arm_SMLAL_S_VS
- arm_SMLAL_S_VC
- arm_SMLAL_S_HI
- arm_SMLAL_S_LS
- arm_SMLAL_S_GE
- arm_SMLAL_S_LT
- arm_SMLAL_S_GT
- arm_SMLAL_S_LE
- arm_SMLAL_S
- arm_SMLAL_S_ZZ
- arm_SMLALBB_EQ
- arm_SMLALBB_NE
- arm_SMLALBB_CS
- arm_SMLALBB_CC
- arm_SMLALBB_MI
- arm_SMLALBB_PL
- arm_SMLALBB_VS
- arm_SMLALBB_VC
- arm_SMLALBB_HI
- arm_SMLALBB_LS
- arm_SMLALBB_GE
- arm_SMLALBB_LT
- arm_SMLALBB_GT
- arm_SMLALBB_LE
- arm_SMLALBB
- arm_SMLALBB_ZZ
- arm_SMLALBT_EQ
- arm_SMLALBT_NE
- arm_SMLALBT_CS
- arm_SMLALBT_CC
- arm_SMLALBT_MI
- arm_SMLALBT_PL
- arm_SMLALBT_VS
- arm_SMLALBT_VC
- arm_SMLALBT_HI
- arm_SMLALBT_LS
- arm_SMLALBT_GE
- arm_SMLALBT_LT
- arm_SMLALBT_GT
- arm_SMLALBT_LE
- arm_SMLALBT
- arm_SMLALBT_ZZ
- arm_SMLALTB_EQ
- arm_SMLALTB_NE
- arm_SMLALTB_CS
- arm_SMLALTB_CC
- arm_SMLALTB_MI
- arm_SMLALTB_PL
- arm_SMLALTB_VS
- arm_SMLALTB_VC
- arm_SMLALTB_HI
- arm_SMLALTB_LS
- arm_SMLALTB_GE
- arm_SMLALTB_LT
- arm_SMLALTB_GT
- arm_SMLALTB_LE
- arm_SMLALTB
- arm_SMLALTB_ZZ
- arm_SMLALTT_EQ
- arm_SMLALTT_NE
- arm_SMLALTT_CS
- arm_SMLALTT_CC
- arm_SMLALTT_MI
- arm_SMLALTT_PL
- arm_SMLALTT_VS
- arm_SMLALTT_VC
- arm_SMLALTT_HI
- arm_SMLALTT_LS
- arm_SMLALTT_GE
- arm_SMLALTT_LT
- arm_SMLALTT_GT
- arm_SMLALTT_LE
- arm_SMLALTT
- arm_SMLALTT_ZZ
- arm_SMLALD_EQ
- arm_SMLALD_NE
- arm_SMLALD_CS
- arm_SMLALD_CC
- arm_SMLALD_MI
- arm_SMLALD_PL
- arm_SMLALD_VS
- arm_SMLALD_VC
- arm_SMLALD_HI
- arm_SMLALD_LS
- arm_SMLALD_GE
- arm_SMLALD_LT
- arm_SMLALD_GT
- arm_SMLALD_LE
- arm_SMLALD
- arm_SMLALD_ZZ
- arm_SMLALD_X_EQ
- arm_SMLALD_X_NE
- arm_SMLALD_X_CS
- arm_SMLALD_X_CC
- arm_SMLALD_X_MI
- arm_SMLALD_X_PL
- arm_SMLALD_X_VS
- arm_SMLALD_X_VC
- arm_SMLALD_X_HI
- arm_SMLALD_X_LS
- arm_SMLALD_X_GE
- arm_SMLALD_X_LT
- arm_SMLALD_X_GT
- arm_SMLALD_X_LE
- arm_SMLALD_X
- arm_SMLALD_X_ZZ
- arm_SMLAWB_EQ
- arm_SMLAWB_NE
- arm_SMLAWB_CS
- arm_SMLAWB_CC
- arm_SMLAWB_MI
- arm_SMLAWB_PL
- arm_SMLAWB_VS
- arm_SMLAWB_VC
- arm_SMLAWB_HI
- arm_SMLAWB_LS
- arm_SMLAWB_GE
- arm_SMLAWB_LT
- arm_SMLAWB_GT
- arm_SMLAWB_LE
- arm_SMLAWB
- arm_SMLAWB_ZZ
- arm_SMLAWT_EQ
- arm_SMLAWT_NE
- arm_SMLAWT_CS
- arm_SMLAWT_CC
- arm_SMLAWT_MI
- arm_SMLAWT_PL
- arm_SMLAWT_VS
- arm_SMLAWT_VC
- arm_SMLAWT_HI
- arm_SMLAWT_LS
- arm_SMLAWT_GE
- arm_SMLAWT_LT
- arm_SMLAWT_GT
- arm_SMLAWT_LE
- arm_SMLAWT
- arm_SMLAWT_ZZ
- arm_SMLSD_EQ
- arm_SMLSD_NE
- arm_SMLSD_CS
- arm_SMLSD_CC
- arm_SMLSD_MI
- arm_SMLSD_PL
- arm_SMLSD_VS
- arm_SMLSD_VC
- arm_SMLSD_HI
- arm_SMLSD_LS
- arm_SMLSD_GE
- arm_SMLSD_LT
- arm_SMLSD_GT
- arm_SMLSD_LE
- arm_SMLSD
- arm_SMLSD_ZZ
- arm_SMLSD_X_EQ
- arm_SMLSD_X_NE
- arm_SMLSD_X_CS
- arm_SMLSD_X_CC
- arm_SMLSD_X_MI
- arm_SMLSD_X_PL
- arm_SMLSD_X_VS
- arm_SMLSD_X_VC
- arm_SMLSD_X_HI
- arm_SMLSD_X_LS
- arm_SMLSD_X_GE
- arm_SMLSD_X_LT
- arm_SMLSD_X_GT
- arm_SMLSD_X_LE
- arm_SMLSD_X
- arm_SMLSD_X_ZZ
- arm_SMLSLD_EQ
- arm_SMLSLD_NE
- arm_SMLSLD_CS
- arm_SMLSLD_CC
- arm_SMLSLD_MI
- arm_SMLSLD_PL
- arm_SMLSLD_VS
- arm_SMLSLD_VC
- arm_SMLSLD_HI
- arm_SMLSLD_LS
- arm_SMLSLD_GE
- arm_SMLSLD_LT
- arm_SMLSLD_GT
- arm_SMLSLD_LE
- arm_SMLSLD
- arm_SMLSLD_ZZ
- arm_SMLSLD_X_EQ
- arm_SMLSLD_X_NE
- arm_SMLSLD_X_CS
- arm_SMLSLD_X_CC
- arm_SMLSLD_X_MI
- arm_SMLSLD_X_PL
- arm_SMLSLD_X_VS
- arm_SMLSLD_X_VC
- arm_SMLSLD_X_HI
- arm_SMLSLD_X_LS
- arm_SMLSLD_X_GE
- arm_SMLSLD_X_LT
- arm_SMLSLD_X_GT
- arm_SMLSLD_X_LE
- arm_SMLSLD_X
- arm_SMLSLD_X_ZZ
- arm_SMMLA_EQ
- arm_SMMLA_NE
- arm_SMMLA_CS
- arm_SMMLA_CC
- arm_SMMLA_MI
- arm_SMMLA_PL
- arm_SMMLA_VS
- arm_SMMLA_VC
- arm_SMMLA_HI
- arm_SMMLA_LS
- arm_SMMLA_GE
- arm_SMMLA_LT
- arm_SMMLA_GT
- arm_SMMLA_LE
- arm_SMMLA
- arm_SMMLA_ZZ
- arm_SMMLA_R_EQ
- arm_SMMLA_R_NE
- arm_SMMLA_R_CS
- arm_SMMLA_R_CC
- arm_SMMLA_R_MI
- arm_SMMLA_R_PL
- arm_SMMLA_R_VS
- arm_SMMLA_R_VC
- arm_SMMLA_R_HI
- arm_SMMLA_R_LS
- arm_SMMLA_R_GE
- arm_SMMLA_R_LT
- arm_SMMLA_R_GT
- arm_SMMLA_R_LE
- arm_SMMLA_R
- arm_SMMLA_R_ZZ
- arm_SMMLS_EQ
- arm_SMMLS_NE
- arm_SMMLS_CS
- arm_SMMLS_CC
- arm_SMMLS_MI
- arm_SMMLS_PL
- arm_SMMLS_VS
- arm_SMMLS_VC
- arm_SMMLS_HI
- arm_SMMLS_LS
- arm_SMMLS_GE
- arm_SMMLS_LT
- arm_SMMLS_GT
- arm_SMMLS_LE
- arm_SMMLS
- arm_SMMLS_ZZ
- arm_SMMLS_R_EQ
- arm_SMMLS_R_NE
- arm_SMMLS_R_CS
- arm_SMMLS_R_CC
- arm_SMMLS_R_MI
- arm_SMMLS_R_PL
- arm_SMMLS_R_VS
- arm_SMMLS_R_VC
- arm_SMMLS_R_HI
- arm_SMMLS_R_LS
- arm_SMMLS_R_GE
- arm_SMMLS_R_LT
- arm_SMMLS_R_GT
- arm_SMMLS_R_LE
- arm_SMMLS_R
- arm_SMMLS_R_ZZ
- arm_SMMUL_EQ
- arm_SMMUL_NE
- arm_SMMUL_CS
- arm_SMMUL_CC
- arm_SMMUL_MI
- arm_SMMUL_PL
- arm_SMMUL_VS
- arm_SMMUL_VC
- arm_SMMUL_HI
- arm_SMMUL_LS
- arm_SMMUL_GE
- arm_SMMUL_LT
- arm_SMMUL_GT
- arm_SMMUL_LE
- arm_SMMUL
- arm_SMMUL_ZZ
- arm_SMMUL_R_EQ
- arm_SMMUL_R_NE
- arm_SMMUL_R_CS
- arm_SMMUL_R_CC
- arm_SMMUL_R_MI
- arm_SMMUL_R_PL
- arm_SMMUL_R_VS
- arm_SMMUL_R_VC
- arm_SMMUL_R_HI
- arm_SMMUL_R_LS
- arm_SMMUL_R_GE
- arm_SMMUL_R_LT
- arm_SMMUL_R_GT
- arm_SMMUL_R_LE
- arm_SMMUL_R
- arm_SMMUL_R_ZZ
- arm_SMUAD_EQ
- arm_SMUAD_NE
- arm_SMUAD_CS
- arm_SMUAD_CC
- arm_SMUAD_MI
- arm_SMUAD_PL
- arm_SMUAD_VS
- arm_SMUAD_VC
- arm_SMUAD_HI
- arm_SMUAD_LS
- arm_SMUAD_GE
- arm_SMUAD_LT
- arm_SMUAD_GT
- arm_SMUAD_LE
- arm_SMUAD
- arm_SMUAD_ZZ
- arm_SMUAD_X_EQ
- arm_SMUAD_X_NE
- arm_SMUAD_X_CS
- arm_SMUAD_X_CC
- arm_SMUAD_X_MI
- arm_SMUAD_X_PL
- arm_SMUAD_X_VS
- arm_SMUAD_X_VC
- arm_SMUAD_X_HI
- arm_SMUAD_X_LS
- arm_SMUAD_X_GE
- arm_SMUAD_X_LT
- arm_SMUAD_X_GT
- arm_SMUAD_X_LE
- arm_SMUAD_X
- arm_SMUAD_X_ZZ
- arm_SMULBB_EQ
- arm_SMULBB_NE
- arm_SMULBB_CS
- arm_SMULBB_CC
- arm_SMULBB_MI
- arm_SMULBB_PL
- arm_SMULBB_VS
- arm_SMULBB_VC
- arm_SMULBB_HI
- arm_SMULBB_LS
- arm_SMULBB_GE
- arm_SMULBB_LT
- arm_SMULBB_GT
- arm_SMULBB_LE
- arm_SMULBB
- arm_SMULBB_ZZ
- arm_SMULBT_EQ
- arm_SMULBT_NE
- arm_SMULBT_CS
- arm_SMULBT_CC
- arm_SMULBT_MI
- arm_SMULBT_PL
- arm_SMULBT_VS
- arm_SMULBT_VC
- arm_SMULBT_HI
- arm_SMULBT_LS
- arm_SMULBT_GE
- arm_SMULBT_LT
- arm_SMULBT_GT
- arm_SMULBT_LE
- arm_SMULBT
- arm_SMULBT_ZZ
- arm_SMULTB_EQ
- arm_SMULTB_NE
- arm_SMULTB_CS
- arm_SMULTB_CC
- arm_SMULTB_MI
- arm_SMULTB_PL
- arm_SMULTB_VS
- arm_SMULTB_VC
- arm_SMULTB_HI
- arm_SMULTB_LS
- arm_SMULTB_GE
- arm_SMULTB_LT
- arm_SMULTB_GT
- arm_SMULTB_LE
- arm_SMULTB
- arm_SMULTB_ZZ
- arm_SMULTT_EQ
- arm_SMULTT_NE
- arm_SMULTT_CS
- arm_SMULTT_CC
- arm_SMULTT_MI
- arm_SMULTT_PL
- arm_SMULTT_VS
- arm_SMULTT_VC
- arm_SMULTT_HI
- arm_SMULTT_LS
- arm_SMULTT_GE
- arm_SMULTT_LT
- arm_SMULTT_GT
- arm_SMULTT_LE
- arm_SMULTT
- arm_SMULTT_ZZ
- arm_SMULL_EQ
- arm_SMULL_NE
- arm_SMULL_CS
- arm_SMULL_CC
- arm_SMULL_MI
- arm_SMULL_PL
- arm_SMULL_VS
- arm_SMULL_VC
- arm_SMULL_HI
- arm_SMULL_LS
- arm_SMULL_GE
- arm_SMULL_LT
- arm_SMULL_GT
- arm_SMULL_LE
- arm_SMULL
- arm_SMULL_ZZ
- arm_SMULL_S_EQ
- arm_SMULL_S_NE
- arm_SMULL_S_CS
- arm_SMULL_S_CC
- arm_SMULL_S_MI
- arm_SMULL_S_PL
- arm_SMULL_S_VS
- arm_SMULL_S_VC
- arm_SMULL_S_HI
- arm_SMULL_S_LS
- arm_SMULL_S_GE
- arm_SMULL_S_LT
- arm_SMULL_S_GT
- arm_SMULL_S_LE
- arm_SMULL_S
- arm_SMULL_S_ZZ
- arm_SMULWB_EQ
- arm_SMULWB_NE
- arm_SMULWB_CS
- arm_SMULWB_CC
- arm_SMULWB_MI
- arm_SMULWB_PL
- arm_SMULWB_VS
- arm_SMULWB_VC
- arm_SMULWB_HI
- arm_SMULWB_LS
- arm_SMULWB_GE
- arm_SMULWB_LT
- arm_SMULWB_GT
- arm_SMULWB_LE
- arm_SMULWB
- arm_SMULWB_ZZ
- arm_SMULWT_EQ
- arm_SMULWT_NE
- arm_SMULWT_CS
- arm_SMULWT_CC
- arm_SMULWT_MI
- arm_SMULWT_PL
- arm_SMULWT_VS
- arm_SMULWT_VC
- arm_SMULWT_HI
- arm_SMULWT_LS
- arm_SMULWT_GE
- arm_SMULWT_LT
- arm_SMULWT_GT
- arm_SMULWT_LE
- arm_SMULWT
- arm_SMULWT_ZZ
- arm_SMUSD_EQ
- arm_SMUSD_NE
- arm_SMUSD_CS
- arm_SMUSD_CC
- arm_SMUSD_MI
- arm_SMUSD_PL
- arm_SMUSD_VS
- arm_SMUSD_VC
- arm_SMUSD_HI
- arm_SMUSD_LS
- arm_SMUSD_GE
- arm_SMUSD_LT
- arm_SMUSD_GT
- arm_SMUSD_LE
- arm_SMUSD
- arm_SMUSD_ZZ
- arm_SMUSD_X_EQ
- arm_SMUSD_X_NE
- arm_SMUSD_X_CS
- arm_SMUSD_X_CC
- arm_SMUSD_X_MI
- arm_SMUSD_X_PL
- arm_SMUSD_X_VS
- arm_SMUSD_X_VC
- arm_SMUSD_X_HI
- arm_SMUSD_X_LS
- arm_SMUSD_X_GE
- arm_SMUSD_X_LT
- arm_SMUSD_X_GT
- arm_SMUSD_X_LE
- arm_SMUSD_X
- arm_SMUSD_X_ZZ
- arm_SSAT_EQ
- arm_SSAT_NE
- arm_SSAT_CS
- arm_SSAT_CC
- arm_SSAT_MI
- arm_SSAT_PL
- arm_SSAT_VS
- arm_SSAT_VC
- arm_SSAT_HI
- arm_SSAT_LS
- arm_SSAT_GE
- arm_SSAT_LT
- arm_SSAT_GT
- arm_SSAT_LE
- arm_SSAT
- arm_SSAT_ZZ
- arm_SSAT16_EQ
- arm_SSAT16_NE
- arm_SSAT16_CS
- arm_SSAT16_CC
- arm_SSAT16_MI
- arm_SSAT16_PL
- arm_SSAT16_VS
- arm_SSAT16_VC
- arm_SSAT16_HI
- arm_SSAT16_LS
- arm_SSAT16_GE
- arm_SSAT16_LT
- arm_SSAT16_GT
- arm_SSAT16_LE
- arm_SSAT16
- arm_SSAT16_ZZ
- arm_SSAX_EQ
- arm_SSAX_NE
- arm_SSAX_CS
- arm_SSAX_CC
- arm_SSAX_MI
- arm_SSAX_PL
- arm_SSAX_VS
- arm_SSAX_VC
- arm_SSAX_HI
- arm_SSAX_LS
- arm_SSAX_GE
- arm_SSAX_LT
- arm_SSAX_GT
- arm_SSAX_LE
- arm_SSAX
- arm_SSAX_ZZ
- arm_SSUB16_EQ
- arm_SSUB16_NE
- arm_SSUB16_CS
- arm_SSUB16_CC
- arm_SSUB16_MI
- arm_SSUB16_PL
- arm_SSUB16_VS
- arm_SSUB16_VC
- arm_SSUB16_HI
- arm_SSUB16_LS
- arm_SSUB16_GE
- arm_SSUB16_LT
- arm_SSUB16_GT
- arm_SSUB16_LE
- arm_SSUB16
- arm_SSUB16_ZZ
- arm_SSUB8_EQ
- arm_SSUB8_NE
- arm_SSUB8_CS
- arm_SSUB8_CC
- arm_SSUB8_MI
- arm_SSUB8_PL
- arm_SSUB8_VS
- arm_SSUB8_VC
- arm_SSUB8_HI
- arm_SSUB8_LS
- arm_SSUB8_GE
- arm_SSUB8_LT
- arm_SSUB8_GT
- arm_SSUB8_LE
- arm_SSUB8
- arm_SSUB8_ZZ
- arm_STM_EQ
- arm_STM_NE
- arm_STM_CS
- arm_STM_CC
- arm_STM_MI
- arm_STM_PL
- arm_STM_VS
- arm_STM_VC
- arm_STM_HI
- arm_STM_LS
- arm_STM_GE
- arm_STM_LT
- arm_STM_GT
- arm_STM_LE
- arm_STM
- arm_STM_ZZ
- arm_STMDA_EQ
- arm_STMDA_NE
- arm_STMDA_CS
- arm_STMDA_CC
- arm_STMDA_MI
- arm_STMDA_PL
- arm_STMDA_VS
- arm_STMDA_VC
- arm_STMDA_HI
- arm_STMDA_LS
- arm_STMDA_GE
- arm_STMDA_LT
- arm_STMDA_GT
- arm_STMDA_LE
- arm_STMDA
- arm_STMDA_ZZ
- arm_STMDB_EQ
- arm_STMDB_NE
- arm_STMDB_CS
- arm_STMDB_CC
- arm_STMDB_MI
- arm_STMDB_PL
- arm_STMDB_VS
- arm_STMDB_VC
- arm_STMDB_HI
- arm_STMDB_LS
- arm_STMDB_GE
- arm_STMDB_LT
- arm_STMDB_GT
- arm_STMDB_LE
- arm_STMDB
- arm_STMDB_ZZ
- arm_STMIB_EQ
- arm_STMIB_NE
- arm_STMIB_CS
- arm_STMIB_CC
- arm_STMIB_MI
- arm_STMIB_PL
- arm_STMIB_VS
- arm_STMIB_VC
- arm_STMIB_HI
- arm_STMIB_LS
- arm_STMIB_GE
- arm_STMIB_LT
- arm_STMIB_GT
- arm_STMIB_LE
- arm_STMIB
- arm_STMIB_ZZ
- arm_STR_EQ
- arm_STR_NE
- arm_STR_CS
- arm_STR_CC
- arm_STR_MI
- arm_STR_PL
- arm_STR_VS
- arm_STR_VC
- arm_STR_HI
- arm_STR_LS
- arm_STR_GE
- arm_STR_LT
- arm_STR_GT
- arm_STR_LE
- arm_STR
- arm_STR_ZZ
- arm_STRB_EQ
- arm_STRB_NE
- arm_STRB_CS
- arm_STRB_CC
- arm_STRB_MI
- arm_STRB_PL
- arm_STRB_VS
- arm_STRB_VC
- arm_STRB_HI
- arm_STRB_LS
- arm_STRB_GE
- arm_STRB_LT
- arm_STRB_GT
- arm_STRB_LE
- arm_STRB
- arm_STRB_ZZ
- arm_STRBT_EQ
- arm_STRBT_NE
- arm_STRBT_CS
- arm_STRBT_CC
- arm_STRBT_MI
- arm_STRBT_PL
- arm_STRBT_VS
- arm_STRBT_VC
- arm_STRBT_HI
- arm_STRBT_LS
- arm_STRBT_GE
- arm_STRBT_LT
- arm_STRBT_GT
- arm_STRBT_LE
- arm_STRBT
- arm_STRBT_ZZ
- arm_STRD_EQ
- arm_STRD_NE
- arm_STRD_CS
- arm_STRD_CC
- arm_STRD_MI
- arm_STRD_PL
- arm_STRD_VS
- arm_STRD_VC
- arm_STRD_HI
- arm_STRD_LS
- arm_STRD_GE
- arm_STRD_LT
- arm_STRD_GT
- arm_STRD_LE
- arm_STRD
- arm_STRD_ZZ
- arm_STREX_EQ
- arm_STREX_NE
- arm_STREX_CS
- arm_STREX_CC
- arm_STREX_MI
- arm_STREX_PL
- arm_STREX_VS
- arm_STREX_VC
- arm_STREX_HI
- arm_STREX_LS
- arm_STREX_GE
- arm_STREX_LT
- arm_STREX_GT
- arm_STREX_LE
- arm_STREX
- arm_STREX_ZZ
- arm_STREXB_EQ
- arm_STREXB_NE
- arm_STREXB_CS
- arm_STREXB_CC
- arm_STREXB_MI
- arm_STREXB_PL
- arm_STREXB_VS
- arm_STREXB_VC
- arm_STREXB_HI
- arm_STREXB_LS
- arm_STREXB_GE
- arm_STREXB_LT
- arm_STREXB_GT
- arm_STREXB_LE
- arm_STREXB
- arm_STREXB_ZZ
- arm_STREXD_EQ
- arm_STREXD_NE
- arm_STREXD_CS
- arm_STREXD_CC
- arm_STREXD_MI
- arm_STREXD_PL
- arm_STREXD_VS
- arm_STREXD_VC
- arm_STREXD_HI
- arm_STREXD_LS
- arm_STREXD_GE
- arm_STREXD_LT
- arm_STREXD_GT
- arm_STREXD_LE
- arm_STREXD
- arm_STREXD_ZZ
- arm_STREXH_EQ
- arm_STREXH_NE
- arm_STREXH_CS
- arm_STREXH_CC
- arm_STREXH_MI
- arm_STREXH_PL
- arm_STREXH_VS
- arm_STREXH_VC
- arm_STREXH_HI
- arm_STREXH_LS
- arm_STREXH_GE
- arm_STREXH_LT
- arm_STREXH_GT
- arm_STREXH_LE
- arm_STREXH
- arm_STREXH_ZZ
- arm_STRH_EQ
- arm_STRH_NE
- arm_STRH_CS
- arm_STRH_CC
- arm_STRH_MI
- arm_STRH_PL
- arm_STRH_VS
- arm_STRH_VC
- arm_STRH_HI
- arm_STRH_LS
- arm_STRH_GE
- arm_STRH_LT
- arm_STRH_GT
- arm_STRH_LE
- arm_STRH
- arm_STRH_ZZ
- arm_STRHT_EQ
- arm_STRHT_NE
- arm_STRHT_CS
- arm_STRHT_CC
- arm_STRHT_MI
- arm_STRHT_PL
- arm_STRHT_VS
- arm_STRHT_VC
- arm_STRHT_HI
- arm_STRHT_LS
- arm_STRHT_GE
- arm_STRHT_LT
- arm_STRHT_GT
- arm_STRHT_LE
- arm_STRHT
- arm_STRHT_ZZ
- arm_STRT_EQ
- arm_STRT_NE
- arm_STRT_CS
- arm_STRT_CC
- arm_STRT_MI
- arm_STRT_PL
- arm_STRT_VS
- arm_STRT_VC
- arm_STRT_HI
- arm_STRT_LS
- arm_STRT_GE
- arm_STRT_LT
- arm_STRT_GT
- arm_STRT_LE
- arm_STRT
- arm_STRT_ZZ
- arm_SUB_EQ
- arm_SUB_NE
- arm_SUB_CS
- arm_SUB_CC
- arm_SUB_MI
- arm_SUB_PL
- arm_SUB_VS
- arm_SUB_VC
- arm_SUB_HI
- arm_SUB_LS
- arm_SUB_GE
- arm_SUB_LT
- arm_SUB_GT
- arm_SUB_LE
- arm_SUB
- arm_SUB_ZZ
- arm_SUB_S_EQ
- arm_SUB_S_NE
- arm_SUB_S_CS
- arm_SUB_S_CC
- arm_SUB_S_MI
- arm_SUB_S_PL
- arm_SUB_S_VS
- arm_SUB_S_VC
- arm_SUB_S_HI
- arm_SUB_S_LS
- arm_SUB_S_GE
- arm_SUB_S_LT
- arm_SUB_S_GT
- arm_SUB_S_LE
- arm_SUB_S
- arm_SUB_S_ZZ
- arm_SVC_EQ
- arm_SVC_NE
- arm_SVC_CS
- arm_SVC_CC
- arm_SVC_MI
- arm_SVC_PL
- arm_SVC_VS
- arm_SVC_VC
- arm_SVC_HI
- arm_SVC_LS
- arm_SVC_GE
- arm_SVC_LT
- arm_SVC_GT
- arm_SVC_LE
- arm_SVC
- arm_SVC_ZZ
- arm_SWP_EQ
- arm_SWP_NE
- arm_SWP_CS
- arm_SWP_CC
- arm_SWP_MI
- arm_SWP_PL
- arm_SWP_VS
- arm_SWP_VC
- arm_SWP_HI
- arm_SWP_LS
- arm_SWP_GE
- arm_SWP_LT
- arm_SWP_GT
- arm_SWP_LE
- arm_SWP
- arm_SWP_ZZ
- arm_SWP_B_EQ
- arm_SWP_B_NE
- arm_SWP_B_CS
- arm_SWP_B_CC
- arm_SWP_B_MI
- arm_SWP_B_PL
- arm_SWP_B_VS
- arm_SWP_B_VC
- arm_SWP_B_HI
- arm_SWP_B_LS
- arm_SWP_B_GE
- arm_SWP_B_LT
- arm_SWP_B_GT
- arm_SWP_B_LE
- arm_SWP_B
- arm_SWP_B_ZZ
- arm_SXTAB_EQ
- arm_SXTAB_NE
- arm_SXTAB_CS
- arm_SXTAB_CC
- arm_SXTAB_MI
- arm_SXTAB_PL
- arm_SXTAB_VS
- arm_SXTAB_VC
- arm_SXTAB_HI
- arm_SXTAB_LS
- arm_SXTAB_GE
- arm_SXTAB_LT
- arm_SXTAB_GT
- arm_SXTAB_LE
- arm_SXTAB
- arm_SXTAB_ZZ
- arm_SXTAB16_EQ
- arm_SXTAB16_NE
- arm_SXTAB16_CS
- arm_SXTAB16_CC
- arm_SXTAB16_MI
- arm_SXTAB16_PL
- arm_SXTAB16_VS
- arm_SXTAB16_VC
- arm_SXTAB16_HI
- arm_SXTAB16_LS
- arm_SXTAB16_GE
- arm_SXTAB16_LT
- arm_SXTAB16_GT
- arm_SXTAB16_LE
- arm_SXTAB16
- arm_SXTAB16_ZZ
- arm_SXTAH_EQ
- arm_SXTAH_NE
- arm_SXTAH_CS
- arm_SXTAH_CC
- arm_SXTAH_MI
- arm_SXTAH_PL
- arm_SXTAH_VS
- arm_SXTAH_VC
- arm_SXTAH_HI
- arm_SXTAH_LS
- arm_SXTAH_GE
- arm_SXTAH_LT
- arm_SXTAH_GT
- arm_SXTAH_LE
- arm_SXTAH
- arm_SXTAH_ZZ
- arm_SXTB_EQ
- arm_SXTB_NE
- arm_SXTB_CS
- arm_SXTB_CC
- arm_SXTB_MI
- arm_SXTB_PL
- arm_SXTB_VS
- arm_SXTB_VC
- arm_SXTB_HI
- arm_SXTB_LS
- arm_SXTB_GE
- arm_SXTB_LT
- arm_SXTB_GT
- arm_SXTB_LE
- arm_SXTB
- arm_SXTB_ZZ
- arm_SXTB16_EQ
- arm_SXTB16_NE
- arm_SXTB16_CS
- arm_SXTB16_CC
- arm_SXTB16_MI
- arm_SXTB16_PL
- arm_SXTB16_VS
- arm_SXTB16_VC
- arm_SXTB16_HI
- arm_SXTB16_LS
- arm_SXTB16_GE
- arm_SXTB16_LT
- arm_SXTB16_GT
- arm_SXTB16_LE
- arm_SXTB16
- arm_SXTB16_ZZ
- arm_SXTH_EQ
- arm_SXTH_NE
- arm_SXTH_CS
- arm_SXTH_CC
- arm_SXTH_MI
- arm_SXTH_PL
- arm_SXTH_VS
- arm_SXTH_VC
- arm_SXTH_HI
- arm_SXTH_LS
- arm_SXTH_GE
- arm_SXTH_LT
- arm_SXTH_GT
- arm_SXTH_LE
- arm_SXTH
- arm_SXTH_ZZ
- arm_TEQ_EQ
- arm_TEQ_NE
- arm_TEQ_CS
- arm_TEQ_CC
- arm_TEQ_MI
- arm_TEQ_PL
- arm_TEQ_VS
- arm_TEQ_VC
- arm_TEQ_HI
- arm_TEQ_LS
- arm_TEQ_GE
- arm_TEQ_LT
- arm_TEQ_GT
- arm_TEQ_LE
- arm_TEQ
- arm_TEQ_ZZ
- arm_TST_EQ
- arm_TST_NE
- arm_TST_CS
- arm_TST_CC
- arm_TST_MI
- arm_TST_PL
- arm_TST_VS
- arm_TST_VC
- arm_TST_HI
- arm_TST_LS
- arm_TST_GE
- arm_TST_LT
- arm_TST_GT
- arm_TST_LE
- arm_TST
- arm_TST_ZZ
- arm_UADD16_EQ
- arm_UADD16_NE
- arm_UADD16_CS
- arm_UADD16_CC
- arm_UADD16_MI
- arm_UADD16_PL
- arm_UADD16_VS
- arm_UADD16_VC
- arm_UADD16_HI
- arm_UADD16_LS
- arm_UADD16_GE
- arm_UADD16_LT
- arm_UADD16_GT
- arm_UADD16_LE
- arm_UADD16
- arm_UADD16_ZZ
- arm_UADD8_EQ
- arm_UADD8_NE
- arm_UADD8_CS
- arm_UADD8_CC
- arm_UADD8_MI
- arm_UADD8_PL
- arm_UADD8_VS
- arm_UADD8_VC
- arm_UADD8_HI
- arm_UADD8_LS
- arm_UADD8_GE
- arm_UADD8_LT
- arm_UADD8_GT
- arm_UADD8_LE
- arm_UADD8
- arm_UADD8_ZZ
- arm_UASX_EQ
- arm_UASX_NE
- arm_UASX_CS
- arm_UASX_CC
- arm_UASX_MI
- arm_UASX_PL
- arm_UASX_VS
- arm_UASX_VC
- arm_UASX_HI
- arm_UASX_LS
- arm_UASX_GE
- arm_UASX_LT
- arm_UASX_GT
- arm_UASX_LE
- arm_UASX
- arm_UASX_ZZ
- arm_UBFX_EQ
- arm_UBFX_NE
- arm_UBFX_CS
- arm_UBFX_CC
- arm_UBFX_MI
- arm_UBFX_PL
- arm_UBFX_VS
- arm_UBFX_VC
- arm_UBFX_HI
- arm_UBFX_LS
- arm_UBFX_GE
- arm_UBFX_LT
- arm_UBFX_GT
- arm_UBFX_LE
- arm_UBFX
- arm_UBFX_ZZ
- arm_UHADD16_EQ
- arm_UHADD16_NE
- arm_UHADD16_CS
- arm_UHADD16_CC
- arm_UHADD16_MI
- arm_UHADD16_PL
- arm_UHADD16_VS
- arm_UHADD16_VC
- arm_UHADD16_HI
- arm_UHADD16_LS
- arm_UHADD16_GE
- arm_UHADD16_LT
- arm_UHADD16_GT
- arm_UHADD16_LE
- arm_UHADD16
- arm_UHADD16_ZZ
- arm_UHADD8_EQ
- arm_UHADD8_NE
- arm_UHADD8_CS
- arm_UHADD8_CC
- arm_UHADD8_MI
- arm_UHADD8_PL
- arm_UHADD8_VS
- arm_UHADD8_VC
- arm_UHADD8_HI
- arm_UHADD8_LS
- arm_UHADD8_GE
- arm_UHADD8_LT
- arm_UHADD8_GT
- arm_UHADD8_LE
- arm_UHADD8
- arm_UHADD8_ZZ
- arm_UHASX_EQ
- arm_UHASX_NE
- arm_UHASX_CS
- arm_UHASX_CC
- arm_UHASX_MI
- arm_UHASX_PL
- arm_UHASX_VS
- arm_UHASX_VC
- arm_UHASX_HI
- arm_UHASX_LS
- arm_UHASX_GE
- arm_UHASX_LT
- arm_UHASX_GT
- arm_UHASX_LE
- arm_UHASX
- arm_UHASX_ZZ
- arm_UHSAX_EQ
- arm_UHSAX_NE
- arm_UHSAX_CS
- arm_UHSAX_CC
- arm_UHSAX_MI
- arm_UHSAX_PL
- arm_UHSAX_VS
- arm_UHSAX_VC
- arm_UHSAX_HI
- arm_UHSAX_LS
- arm_UHSAX_GE
- arm_UHSAX_LT
- arm_UHSAX_GT
- arm_UHSAX_LE
- arm_UHSAX
- arm_UHSAX_ZZ
- arm_UHSUB16_EQ
- arm_UHSUB16_NE
- arm_UHSUB16_CS
- arm_UHSUB16_CC
- arm_UHSUB16_MI
- arm_UHSUB16_PL
- arm_UHSUB16_VS
- arm_UHSUB16_VC
- arm_UHSUB16_HI
- arm_UHSUB16_LS
- arm_UHSUB16_GE
- arm_UHSUB16_LT
- arm_UHSUB16_GT
- arm_UHSUB16_LE
- arm_UHSUB16
- arm_UHSUB16_ZZ
- arm_UHSUB8_EQ
- arm_UHSUB8_NE
- arm_UHSUB8_CS
- arm_UHSUB8_CC
- arm_UHSUB8_MI
- arm_UHSUB8_PL
- arm_UHSUB8_VS
- arm_UHSUB8_VC
- arm_UHSUB8_HI
- arm_UHSUB8_LS
- arm_UHSUB8_GE
- arm_UHSUB8_LT
- arm_UHSUB8_GT
- arm_UHSUB8_LE
- arm_UHSUB8
- arm_UHSUB8_ZZ
- arm_UMAAL_EQ
- arm_UMAAL_NE
- arm_UMAAL_CS
- arm_UMAAL_CC
- arm_UMAAL_MI
- arm_UMAAL_PL
- arm_UMAAL_VS
- arm_UMAAL_VC
- arm_UMAAL_HI
- arm_UMAAL_LS
- arm_UMAAL_GE
- arm_UMAAL_LT
- arm_UMAAL_GT
- arm_UMAAL_LE
- arm_UMAAL
- arm_UMAAL_ZZ
- arm_UMLAL_EQ
- arm_UMLAL_NE
- arm_UMLAL_CS
- arm_UMLAL_CC
- arm_UMLAL_MI
- arm_UMLAL_PL
- arm_UMLAL_VS
- arm_UMLAL_VC
- arm_UMLAL_HI
- arm_UMLAL_LS
- arm_UMLAL_GE
- arm_UMLAL_LT
- arm_UMLAL_GT
- arm_UMLAL_LE
- arm_UMLAL
- arm_UMLAL_ZZ
- arm_UMLAL_S_EQ
- arm_UMLAL_S_NE
- arm_UMLAL_S_CS
- arm_UMLAL_S_CC
- arm_UMLAL_S_MI
- arm_UMLAL_S_PL
- arm_UMLAL_S_VS
- arm_UMLAL_S_VC
- arm_UMLAL_S_HI
- arm_UMLAL_S_LS
- arm_UMLAL_S_GE
- arm_UMLAL_S_LT
- arm_UMLAL_S_GT
- arm_UMLAL_S_LE
- arm_UMLAL_S
- arm_UMLAL_S_ZZ
- arm_UMULL_EQ
- arm_UMULL_NE
- arm_UMULL_CS
- arm_UMULL_CC
- arm_UMULL_MI
- arm_UMULL_PL
- arm_UMULL_VS
- arm_UMULL_VC
- arm_UMULL_HI
- arm_UMULL_LS
- arm_UMULL_GE
- arm_UMULL_LT
- arm_UMULL_GT
- arm_UMULL_LE
- arm_UMULL
- arm_UMULL_ZZ
- arm_UMULL_S_EQ
- arm_UMULL_S_NE
- arm_UMULL_S_CS
- arm_UMULL_S_CC
- arm_UMULL_S_MI
- arm_UMULL_S_PL
- arm_UMULL_S_VS
- arm_UMULL_S_VC
- arm_UMULL_S_HI
- arm_UMULL_S_LS
- arm_UMULL_S_GE
- arm_UMULL_S_LT
- arm_UMULL_S_GT
- arm_UMULL_S_LE
- arm_UMULL_S
- arm_UMULL_S_ZZ
- arm_UNDEF
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- _
- arm_UQADD16_EQ
- arm_UQADD16_NE
- arm_UQADD16_CS
- arm_UQADD16_CC
- arm_UQADD16_MI
- arm_UQADD16_PL
- arm_UQADD16_VS
- arm_UQADD16_VC
- arm_UQADD16_HI
- arm_UQADD16_LS
- arm_UQADD16_GE
- arm_UQADD16_LT
- arm_UQADD16_GT
- arm_UQADD16_LE
- arm_UQADD16
- arm_UQADD16_ZZ
- arm_UQADD8_EQ
- arm_UQADD8_NE
- arm_UQADD8_CS
- arm_UQADD8_CC
- arm_UQADD8_MI
- arm_UQADD8_PL
- arm_UQADD8_VS
- arm_UQADD8_VC
- arm_UQADD8_HI
- arm_UQADD8_LS
- arm_UQADD8_GE
- arm_UQADD8_LT
- arm_UQADD8_GT
- arm_UQADD8_LE
- arm_UQADD8
- arm_UQADD8_ZZ
- arm_UQASX_EQ
- arm_UQASX_NE
- arm_UQASX_CS
- arm_UQASX_CC
- arm_UQASX_MI
- arm_UQASX_PL
- arm_UQASX_VS
- arm_UQASX_VC
- arm_UQASX_HI
- arm_UQASX_LS
- arm_UQASX_GE
- arm_UQASX_LT
- arm_UQASX_GT
- arm_UQASX_LE
- arm_UQASX
- arm_UQASX_ZZ
- arm_UQSAX_EQ
- arm_UQSAX_NE
- arm_UQSAX_CS
- arm_UQSAX_CC
- arm_UQSAX_MI
- arm_UQSAX_PL
- arm_UQSAX_VS
- arm_UQSAX_VC
- arm_UQSAX_HI
- arm_UQSAX_LS
- arm_UQSAX_GE
- arm_UQSAX_LT
- arm_UQSAX_GT
- arm_UQSAX_LE
- arm_UQSAX
- arm_UQSAX_ZZ
- arm_UQSUB16_EQ
- arm_UQSUB16_NE
- arm_UQSUB16_CS
- arm_UQSUB16_CC
- arm_UQSUB16_MI
- arm_UQSUB16_PL
- arm_UQSUB16_VS
- arm_UQSUB16_VC
- arm_UQSUB16_HI
- arm_UQSUB16_LS
- arm_UQSUB16_GE
- arm_UQSUB16_LT
- arm_UQSUB16_GT
- arm_UQSUB16_LE
- arm_UQSUB16
- arm_UQSUB16_ZZ
- arm_UQSUB8_EQ
- arm_UQSUB8_NE
- arm_UQSUB8_CS
- arm_UQSUB8_CC
- arm_UQSUB8_MI
- arm_UQSUB8_PL
- arm_UQSUB8_VS
- arm_UQSUB8_VC
- arm_UQSUB8_HI
- arm_UQSUB8_LS
- arm_UQSUB8_GE
- arm_UQSUB8_LT
- arm_UQSUB8_GT
- arm_UQSUB8_LE
- arm_UQSUB8
- arm_UQSUB8_ZZ
- arm_USAD8_EQ
- arm_USAD8_NE
- arm_USAD8_CS
- arm_USAD8_CC
- arm_USAD8_MI
- arm_USAD8_PL
- arm_USAD8_VS
- arm_USAD8_VC
- arm_USAD8_HI
- arm_USAD8_LS
- arm_USAD8_GE
- arm_USAD8_LT
- arm_USAD8_GT
- arm_USAD8_LE
- arm_USAD8
- arm_USAD8_ZZ
- arm_USADA8_EQ
- arm_USADA8_NE
- arm_USADA8_CS
- arm_USADA8_CC
- arm_USADA8_MI
- arm_USADA8_PL
- arm_USADA8_VS
- arm_USADA8_VC
- arm_USADA8_HI
- arm_USADA8_LS
- arm_USADA8_GE
- arm_USADA8_LT
- arm_USADA8_GT
- arm_USADA8_LE
- arm_USADA8
- arm_USADA8_ZZ
- arm_USAT_EQ
- arm_USAT_NE
- arm_USAT_CS
- arm_USAT_CC
- arm_USAT_MI
- arm_USAT_PL
- arm_USAT_VS
- arm_USAT_VC
- arm_USAT_HI
- arm_USAT_LS
- arm_USAT_GE
- arm_USAT_LT
- arm_USAT_GT
- arm_USAT_LE
- arm_USAT
- arm_USAT_ZZ
- arm_USAT16_EQ
- arm_USAT16_NE
- arm_USAT16_CS
- arm_USAT16_CC
- arm_USAT16_MI
- arm_USAT16_PL
- arm_USAT16_VS
- arm_USAT16_VC
- arm_USAT16_HI
- arm_USAT16_LS
- arm_USAT16_GE
- arm_USAT16_LT
- arm_USAT16_GT
- arm_USAT16_LE
- arm_USAT16
- arm_USAT16_ZZ
- arm_USAX_EQ
- arm_USAX_NE
- arm_USAX_CS
- arm_USAX_CC
- arm_USAX_MI
- arm_USAX_PL
- arm_USAX_VS
- arm_USAX_VC
- arm_USAX_HI
- arm_USAX_LS
- arm_USAX_GE
- arm_USAX_LT
- arm_USAX_GT
- arm_USAX_LE
- arm_USAX
- arm_USAX_ZZ
- arm_USUB16_EQ
- arm_USUB16_NE
- arm_USUB16_CS
- arm_USUB16_CC
- arm_USUB16_MI
- arm_USUB16_PL
- arm_USUB16_VS
- arm_USUB16_VC
- arm_USUB16_HI
- arm_USUB16_LS
- arm_USUB16_GE
- arm_USUB16_LT
- arm_USUB16_GT
- arm_USUB16_LE
- arm_USUB16
- arm_USUB16_ZZ
- arm_USUB8_EQ
- arm_USUB8_NE
- arm_USUB8_CS
- arm_USUB8_CC
- arm_USUB8_MI
- arm_USUB8_PL
- arm_USUB8_VS
- arm_USUB8_VC
- arm_USUB8_HI
- arm_USUB8_LS
- arm_USUB8_GE
- arm_USUB8_LT
- arm_USUB8_GT
- arm_USUB8_LE
- arm_USUB8
- arm_USUB8_ZZ
- arm_UXTAB_EQ
- arm_UXTAB_NE
- arm_UXTAB_CS
- arm_UXTAB_CC
- arm_UXTAB_MI
- arm_UXTAB_PL
- arm_UXTAB_VS
- arm_UXTAB_VC
- arm_UXTAB_HI
- arm_UXTAB_LS
- arm_UXTAB_GE
- arm_UXTAB_LT
- arm_UXTAB_GT
- arm_UXTAB_LE
- arm_UXTAB
- arm_UXTAB_ZZ
- arm_UXTAB16_EQ
- arm_UXTAB16_NE
- arm_UXTAB16_CS
- arm_UXTAB16_CC
- arm_UXTAB16_MI
- arm_UXTAB16_PL
- arm_UXTAB16_VS
- arm_UXTAB16_VC
- arm_UXTAB16_HI
- arm_UXTAB16_LS
- arm_UXTAB16_GE
- arm_UXTAB16_LT
- arm_UXTAB16_GT
- arm_UXTAB16_LE
- arm_UXTAB16
- arm_UXTAB16_ZZ
- arm_UXTAH_EQ
- arm_UXTAH_NE
- arm_UXTAH_CS
- arm_UXTAH_CC
- arm_UXTAH_MI
- arm_UXTAH_PL
- arm_UXTAH_VS
- arm_UXTAH_VC
- arm_UXTAH_HI
- arm_UXTAH_LS
- arm_UXTAH_GE
- arm_UXTAH_LT
- arm_UXTAH_GT
- arm_UXTAH_LE
- arm_UXTAH
- arm_UXTAH_ZZ
- arm_UXTB_EQ
- arm_UXTB_NE
- arm_UXTB_CS
- arm_UXTB_CC
- arm_UXTB_MI
- arm_UXTB_PL
- arm_UXTB_VS
- arm_UXTB_VC
- arm_UXTB_HI
- arm_UXTB_LS
- arm_UXTB_GE
- arm_UXTB_LT
- arm_UXTB_GT
- arm_UXTB_LE
- arm_UXTB
- arm_UXTB_ZZ
- arm_UXTB16_EQ
- arm_UXTB16_NE
- arm_UXTB16_CS
- arm_UXTB16_CC
- arm_UXTB16_MI
- arm_UXTB16_PL
- arm_UXTB16_VS
- arm_UXTB16_VC
- arm_UXTB16_HI
- arm_UXTB16_LS
- arm_UXTB16_GE
- arm_UXTB16_LT
- arm_UXTB16_GT
- arm_UXTB16_LE
- arm_UXTB16
- arm_UXTB16_ZZ
- arm_UXTH_EQ
- arm_UXTH_NE
- arm_UXTH_CS
- arm_UXTH_CC
- arm_UXTH_MI
- arm_UXTH_PL
- arm_UXTH_VS
- arm_UXTH_VC
- arm_UXTH_HI
- arm_UXTH_LS
- arm_UXTH_GE
- arm_UXTH_LT
- arm_UXTH_GT
- arm_UXTH_LE
- arm_UXTH
- arm_UXTH_ZZ
- arm_VABS_EQ_F32
- arm_VABS_NE_F32
- arm_VABS_CS_F32
- arm_VABS_CC_F32
- arm_VABS_MI_F32
- arm_VABS_PL_F32
- arm_VABS_VS_F32
- arm_VABS_VC_F32
- arm_VABS_HI_F32
- arm_VABS_LS_F32
- arm_VABS_GE_F32
- arm_VABS_LT_F32
- arm_VABS_GT_F32
- arm_VABS_LE_F32
- arm_VABS_F32
- arm_VABS_ZZ_F32
- arm_VABS_EQ_F64
- arm_VABS_NE_F64
- arm_VABS_CS_F64
- arm_VABS_CC_F64
- arm_VABS_MI_F64
- arm_VABS_PL_F64
- arm_VABS_VS_F64
- arm_VABS_VC_F64
- arm_VABS_HI_F64
- arm_VABS_LS_F64
- arm_VABS_GE_F64
- arm_VABS_LT_F64
- arm_VABS_GT_F64
- arm_VABS_LE_F64
- arm_VABS_F64
- arm_VABS_ZZ_F64
- arm_VADD_EQ_F32
- arm_VADD_NE_F32
- arm_VADD_CS_F32
- arm_VADD_CC_F32
- arm_VADD_MI_F32
- arm_VADD_PL_F32
- arm_VADD_VS_F32
- arm_VADD_VC_F32
- arm_VADD_HI_F32
- arm_VADD_LS_F32
- arm_VADD_GE_F32
- arm_VADD_LT_F32
- arm_VADD_GT_F32
- arm_VADD_LE_F32
- arm_VADD_F32
- arm_VADD_ZZ_F32
- arm_VADD_EQ_F64
- arm_VADD_NE_F64
- arm_VADD_CS_F64
- arm_VADD_CC_F64
- arm_VADD_MI_F64
- arm_VADD_PL_F64
- arm_VADD_VS_F64
- arm_VADD_VC_F64
- arm_VADD_HI_F64
- arm_VADD_LS_F64
- arm_VADD_GE_F64
- arm_VADD_LT_F64
- arm_VADD_GT_F64
- arm_VADD_LE_F64
- arm_VADD_F64
- arm_VADD_ZZ_F64
- arm_VCMP_EQ_F32
- arm_VCMP_NE_F32
- arm_VCMP_CS_F32
- arm_VCMP_CC_F32
- arm_VCMP_MI_F32
- arm_VCMP_PL_F32
- arm_VCMP_VS_F32
- arm_VCMP_VC_F32
- arm_VCMP_HI_F32
- arm_VCMP_LS_F32
- arm_VCMP_GE_F32
- arm_VCMP_LT_F32
- arm_VCMP_GT_F32
- arm_VCMP_LE_F32
- arm_VCMP_F32
- arm_VCMP_ZZ_F32
- arm_VCMP_EQ_F64
- arm_VCMP_NE_F64
- arm_VCMP_CS_F64
- arm_VCMP_CC_F64
- arm_VCMP_MI_F64
- arm_VCMP_PL_F64
- arm_VCMP_VS_F64
- arm_VCMP_VC_F64
- arm_VCMP_HI_F64
- arm_VCMP_LS_F64
- arm_VCMP_GE_F64
- arm_VCMP_LT_F64
- arm_VCMP_GT_F64
- arm_VCMP_LE_F64
- arm_VCMP_F64
- arm_VCMP_ZZ_F64
- arm_VCMP_E_EQ_F32
- arm_VCMP_E_NE_F32
- arm_VCMP_E_CS_F32
- arm_VCMP_E_CC_F32
- arm_VCMP_E_MI_F32
- arm_VCMP_E_PL_F32
- arm_VCMP_E_VS_F32
- arm_VCMP_E_VC_F32
- arm_VCMP_E_HI_F32
- arm_VCMP_E_LS_F32
- arm_VCMP_E_GE_F32
- arm_VCMP_E_LT_F32
- arm_VCMP_E_GT_F32
- arm_VCMP_E_LE_F32
- arm_VCMP_E_F32
- arm_VCMP_E_ZZ_F32
- arm_VCMP_E_EQ_F64
- arm_VCMP_E_NE_F64
- arm_VCMP_E_CS_F64
- arm_VCMP_E_CC_F64
- arm_VCMP_E_MI_F64
- arm_VCMP_E_PL_F64
- arm_VCMP_E_VS_F64
- arm_VCMP_E_VC_F64
- arm_VCMP_E_HI_F64
- arm_VCMP_E_LS_F64
- arm_VCMP_E_GE_F64
- arm_VCMP_E_LT_F64
- arm_VCMP_E_GT_F64
- arm_VCMP_E_LE_F64
- arm_VCMP_E_F64
- arm_VCMP_E_ZZ_F64
- arm_VCVT_EQ_F32_FXS16
- arm_VCVT_NE_F32_FXS16
- arm_VCVT_CS_F32_FXS16
- arm_VCVT_CC_F32_FXS16
- arm_VCVT_MI_F32_FXS16
- arm_VCVT_PL_F32_FXS16
- arm_VCVT_VS_F32_FXS16
- arm_VCVT_VC_F32_FXS16
- arm_VCVT_HI_F32_FXS16
- arm_VCVT_LS_F32_FXS16
- arm_VCVT_GE_F32_FXS16
- arm_VCVT_LT_F32_FXS16
- arm_VCVT_GT_F32_FXS16
- arm_VCVT_LE_F32_FXS16
- arm_VCVT_F32_FXS16
- arm_VCVT_ZZ_F32_FXS16
- arm_VCVT_EQ_F32_FXS32
- arm_VCVT_NE_F32_FXS32
- arm_VCVT_CS_F32_FXS32
- arm_VCVT_CC_F32_FXS32
- arm_VCVT_MI_F32_FXS32
- arm_VCVT_PL_F32_FXS32
- arm_VCVT_VS_F32_FXS32
- arm_VCVT_VC_F32_FXS32
- arm_VCVT_HI_F32_FXS32
- arm_VCVT_LS_F32_FXS32
- arm_VCVT_GE_F32_FXS32
- arm_VCVT_LT_F32_FXS32
- arm_VCVT_GT_F32_FXS32
- arm_VCVT_LE_F32_FXS32
- arm_VCVT_F32_FXS32
- arm_VCVT_ZZ_F32_FXS32
- arm_VCVT_EQ_F32_FXU16
- arm_VCVT_NE_F32_FXU16
- arm_VCVT_CS_F32_FXU16
- arm_VCVT_CC_F32_FXU16
- arm_VCVT_MI_F32_FXU16
- arm_VCVT_PL_F32_FXU16
- arm_VCVT_VS_F32_FXU16
- arm_VCVT_VC_F32_FXU16
- arm_VCVT_HI_F32_FXU16
- arm_VCVT_LS_F32_FXU16
- arm_VCVT_GE_F32_FXU16
- arm_VCVT_LT_F32_FXU16
- arm_VCVT_GT_F32_FXU16
- arm_VCVT_LE_F32_FXU16
- arm_VCVT_F32_FXU16
- arm_VCVT_ZZ_F32_FXU16
- arm_VCVT_EQ_F32_FXU32
- arm_VCVT_NE_F32_FXU32
- arm_VCVT_CS_F32_FXU32
- arm_VCVT_CC_F32_FXU32
- arm_VCVT_MI_F32_FXU32
- arm_VCVT_PL_F32_FXU32
- arm_VCVT_VS_F32_FXU32
- arm_VCVT_VC_F32_FXU32
- arm_VCVT_HI_F32_FXU32
- arm_VCVT_LS_F32_FXU32
- arm_VCVT_GE_F32_FXU32
- arm_VCVT_LT_F32_FXU32
- arm_VCVT_GT_F32_FXU32
- arm_VCVT_LE_F32_FXU32
- arm_VCVT_F32_FXU32
- arm_VCVT_ZZ_F32_FXU32
- arm_VCVT_EQ_F64_FXS16
- arm_VCVT_NE_F64_FXS16
- arm_VCVT_CS_F64_FXS16
- arm_VCVT_CC_F64_FXS16
- arm_VCVT_MI_F64_FXS16
- arm_VCVT_PL_F64_FXS16
- arm_VCVT_VS_F64_FXS16
- arm_VCVT_VC_F64_FXS16
- arm_VCVT_HI_F64_FXS16
- arm_VCVT_LS_F64_FXS16
- arm_VCVT_GE_F64_FXS16
- arm_VCVT_LT_F64_FXS16
- arm_VCVT_GT_F64_FXS16
- arm_VCVT_LE_F64_FXS16
- arm_VCVT_F64_FXS16
- arm_VCVT_ZZ_F64_FXS16
- arm_VCVT_EQ_F64_FXS32
- arm_VCVT_NE_F64_FXS32
- arm_VCVT_CS_F64_FXS32
- arm_VCVT_CC_F64_FXS32
- arm_VCVT_MI_F64_FXS32
- arm_VCVT_PL_F64_FXS32
- arm_VCVT_VS_F64_FXS32
- arm_VCVT_VC_F64_FXS32
- arm_VCVT_HI_F64_FXS32
- arm_VCVT_LS_F64_FXS32
- arm_VCVT_GE_F64_FXS32
- arm_VCVT_LT_F64_FXS32
- arm_VCVT_GT_F64_FXS32
- arm_VCVT_LE_F64_FXS32
- arm_VCVT_F64_FXS32
- arm_VCVT_ZZ_F64_FXS32
- arm_VCVT_EQ_F64_FXU16
- arm_VCVT_NE_F64_FXU16
- arm_VCVT_CS_F64_FXU16
- arm_VCVT_CC_F64_FXU16
- arm_VCVT_MI_F64_FXU16
- arm_VCVT_PL_F64_FXU16
- arm_VCVT_VS_F64_FXU16
- arm_VCVT_VC_F64_FXU16
- arm_VCVT_HI_F64_FXU16
- arm_VCVT_LS_F64_FXU16
- arm_VCVT_GE_F64_FXU16
- arm_VCVT_LT_F64_FXU16
- arm_VCVT_GT_F64_FXU16
- arm_VCVT_LE_F64_FXU16
- arm_VCVT_F64_FXU16
- arm_VCVT_ZZ_F64_FXU16
- arm_VCVT_EQ_F64_FXU32
- arm_VCVT_NE_F64_FXU32
- arm_VCVT_CS_F64_FXU32
- arm_VCVT_CC_F64_FXU32
- arm_VCVT_MI_F64_FXU32
- arm_VCVT_PL_F64_FXU32
- arm_VCVT_VS_F64_FXU32
- arm_VCVT_VC_F64_FXU32
- arm_VCVT_HI_F64_FXU32
- arm_VCVT_LS_F64_FXU32
- arm_VCVT_GE_F64_FXU32
- arm_VCVT_LT_F64_FXU32
- arm_VCVT_GT_F64_FXU32
- arm_VCVT_LE_F64_FXU32
- arm_VCVT_F64_FXU32
- arm_VCVT_ZZ_F64_FXU32
- arm_VCVT_EQ_F32_U32
- arm_VCVT_NE_F32_U32
- arm_VCVT_CS_F32_U32
- arm_VCVT_CC_F32_U32
- arm_VCVT_MI_F32_U32
- arm_VCVT_PL_F32_U32
- arm_VCVT_VS_F32_U32
- arm_VCVT_VC_F32_U32
- arm_VCVT_HI_F32_U32
- arm_VCVT_LS_F32_U32
- arm_VCVT_GE_F32_U32
- arm_VCVT_LT_F32_U32
- arm_VCVT_GT_F32_U32
- arm_VCVT_LE_F32_U32
- arm_VCVT_F32_U32
- arm_VCVT_ZZ_F32_U32
- arm_VCVT_EQ_F32_S32
- arm_VCVT_NE_F32_S32
- arm_VCVT_CS_F32_S32
- arm_VCVT_CC_F32_S32
- arm_VCVT_MI_F32_S32
- arm_VCVT_PL_F32_S32
- arm_VCVT_VS_F32_S32
- arm_VCVT_VC_F32_S32
- arm_VCVT_HI_F32_S32
- arm_VCVT_LS_F32_S32
- arm_VCVT_GE_F32_S32
- arm_VCVT_LT_F32_S32
- arm_VCVT_GT_F32_S32
- arm_VCVT_LE_F32_S32
- arm_VCVT_F32_S32
- arm_VCVT_ZZ_F32_S32
- arm_VCVT_EQ_F64_U32
- arm_VCVT_NE_F64_U32
- arm_VCVT_CS_F64_U32
- arm_VCVT_CC_F64_U32
- arm_VCVT_MI_F64_U32
- arm_VCVT_PL_F64_U32
- arm_VCVT_VS_F64_U32
- arm_VCVT_VC_F64_U32
- arm_VCVT_HI_F64_U32
- arm_VCVT_LS_F64_U32
- arm_VCVT_GE_F64_U32
- arm_VCVT_LT_F64_U32
- arm_VCVT_GT_F64_U32
- arm_VCVT_LE_F64_U32
- arm_VCVT_F64_U32
- arm_VCVT_ZZ_F64_U32
- arm_VCVT_EQ_F64_S32
- arm_VCVT_NE_F64_S32
- arm_VCVT_CS_F64_S32
- arm_VCVT_CC_F64_S32
- arm_VCVT_MI_F64_S32
- arm_VCVT_PL_F64_S32
- arm_VCVT_VS_F64_S32
- arm_VCVT_VC_F64_S32
- arm_VCVT_HI_F64_S32
- arm_VCVT_LS_F64_S32
- arm_VCVT_GE_F64_S32
- arm_VCVT_LT_F64_S32
- arm_VCVT_GT_F64_S32
- arm_VCVT_LE_F64_S32
- arm_VCVT_F64_S32
- arm_VCVT_ZZ_F64_S32
- arm_VCVT_EQ_F64_F32
- arm_VCVT_NE_F64_F32
- arm_VCVT_CS_F64_F32
- arm_VCVT_CC_F64_F32
- arm_VCVT_MI_F64_F32
- arm_VCVT_PL_F64_F32
- arm_VCVT_VS_F64_F32
- arm_VCVT_VC_F64_F32
- arm_VCVT_HI_F64_F32
- arm_VCVT_LS_F64_F32
- arm_VCVT_GE_F64_F32
- arm_VCVT_LT_F64_F32
- arm_VCVT_GT_F64_F32
- arm_VCVT_LE_F64_F32
- arm_VCVT_F64_F32
- arm_VCVT_ZZ_F64_F32
- arm_VCVT_EQ_F32_F64
- arm_VCVT_NE_F32_F64
- arm_VCVT_CS_F32_F64
- arm_VCVT_CC_F32_F64
- arm_VCVT_MI_F32_F64
- arm_VCVT_PL_F32_F64
- arm_VCVT_VS_F32_F64
- arm_VCVT_VC_F32_F64
- arm_VCVT_HI_F32_F64
- arm_VCVT_LS_F32_F64
- arm_VCVT_GE_F32_F64
- arm_VCVT_LT_F32_F64
- arm_VCVT_GT_F32_F64
- arm_VCVT_LE_F32_F64
- arm_VCVT_F32_F64
- arm_VCVT_ZZ_F32_F64
- arm_VCVT_EQ_FXS16_F32
- arm_VCVT_NE_FXS16_F32
- arm_VCVT_CS_FXS16_F32
- arm_VCVT_CC_FXS16_F32
- arm_VCVT_MI_FXS16_F32
- arm_VCVT_PL_FXS16_F32
- arm_VCVT_VS_FXS16_F32
- arm_VCVT_VC_FXS16_F32
- arm_VCVT_HI_FXS16_F32
- arm_VCVT_LS_FXS16_F32
- arm_VCVT_GE_FXS16_F32
- arm_VCVT_LT_FXS16_F32
- arm_VCVT_GT_FXS16_F32
- arm_VCVT_LE_FXS16_F32
- arm_VCVT_FXS16_F32
- arm_VCVT_ZZ_FXS16_F32
- arm_VCVT_EQ_FXS16_F64
- arm_VCVT_NE_FXS16_F64
- arm_VCVT_CS_FXS16_F64
- arm_VCVT_CC_FXS16_F64
- arm_VCVT_MI_FXS16_F64
- arm_VCVT_PL_FXS16_F64
- arm_VCVT_VS_FXS16_F64
- arm_VCVT_VC_FXS16_F64
- arm_VCVT_HI_FXS16_F64
- arm_VCVT_LS_FXS16_F64
- arm_VCVT_GE_FXS16_F64
- arm_VCVT_LT_FXS16_F64
- arm_VCVT_GT_FXS16_F64
- arm_VCVT_LE_FXS16_F64
- arm_VCVT_FXS16_F64
- arm_VCVT_ZZ_FXS16_F64
- arm_VCVT_EQ_FXS32_F32
- arm_VCVT_NE_FXS32_F32
- arm_VCVT_CS_FXS32_F32
- arm_VCVT_CC_FXS32_F32
- arm_VCVT_MI_FXS32_F32
- arm_VCVT_PL_FXS32_F32
- arm_VCVT_VS_FXS32_F32
- arm_VCVT_VC_FXS32_F32
- arm_VCVT_HI_FXS32_F32
- arm_VCVT_LS_FXS32_F32
- arm_VCVT_GE_FXS32_F32
- arm_VCVT_LT_FXS32_F32
- arm_VCVT_GT_FXS32_F32
- arm_VCVT_LE_FXS32_F32
- arm_VCVT_FXS32_F32
- arm_VCVT_ZZ_FXS32_F32
- arm_VCVT_EQ_FXS32_F64
- arm_VCVT_NE_FXS32_F64
- arm_VCVT_CS_FXS32_F64
- arm_VCVT_CC_FXS32_F64
- arm_VCVT_MI_FXS32_F64
- arm_VCVT_PL_FXS32_F64
- arm_VCVT_VS_FXS32_F64
- arm_VCVT_VC_FXS32_F64
- arm_VCVT_HI_FXS32_F64
- arm_VCVT_LS_FXS32_F64
- arm_VCVT_GE_FXS32_F64
- arm_VCVT_LT_FXS32_F64
- arm_VCVT_GT_FXS32_F64
- arm_VCVT_LE_FXS32_F64
- arm_VCVT_FXS32_F64
- arm_VCVT_ZZ_FXS32_F64
- arm_VCVT_EQ_FXU16_F32
- arm_VCVT_NE_FXU16_F32
- arm_VCVT_CS_FXU16_F32
- arm_VCVT_CC_FXU16_F32
- arm_VCVT_MI_FXU16_F32
- arm_VCVT_PL_FXU16_F32
- arm_VCVT_VS_FXU16_F32
- arm_VCVT_VC_FXU16_F32
- arm_VCVT_HI_FXU16_F32
- arm_VCVT_LS_FXU16_F32
- arm_VCVT_GE_FXU16_F32
- arm_VCVT_LT_FXU16_F32
- arm_VCVT_GT_FXU16_F32
- arm_VCVT_LE_FXU16_F32
- arm_VCVT_FXU16_F32
- arm_VCVT_ZZ_FXU16_F32
- arm_VCVT_EQ_FXU16_F64
- arm_VCVT_NE_FXU16_F64
- arm_VCVT_CS_FXU16_F64
- arm_VCVT_CC_FXU16_F64
- arm_VCVT_MI_FXU16_F64
- arm_VCVT_PL_FXU16_F64
- arm_VCVT_VS_FXU16_F64
- arm_VCVT_VC_FXU16_F64
- arm_VCVT_HI_FXU16_F64
- arm_VCVT_LS_FXU16_F64
- arm_VCVT_GE_FXU16_F64
- arm_VCVT_LT_FXU16_F64
- arm_VCVT_GT_FXU16_F64
- arm_VCVT_LE_FXU16_F64
- arm_VCVT_FXU16_F64
- arm_VCVT_ZZ_FXU16_F64
- arm_VCVT_EQ_FXU32_F32
- arm_VCVT_NE_FXU32_F32
- arm_VCVT_CS_FXU32_F32
- arm_VCVT_CC_FXU32_F32
- arm_VCVT_MI_FXU32_F32
- arm_VCVT_PL_FXU32_F32
- arm_VCVT_VS_FXU32_F32
- arm_VCVT_VC_FXU32_F32
- arm_VCVT_HI_FXU32_F32
- arm_VCVT_LS_FXU32_F32
- arm_VCVT_GE_FXU32_F32
- arm_VCVT_LT_FXU32_F32
- arm_VCVT_GT_FXU32_F32
- arm_VCVT_LE_FXU32_F32
- arm_VCVT_FXU32_F32
- arm_VCVT_ZZ_FXU32_F32
- arm_VCVT_EQ_FXU32_F64
- arm_VCVT_NE_FXU32_F64
- arm_VCVT_CS_FXU32_F64
- arm_VCVT_CC_FXU32_F64
- arm_VCVT_MI_FXU32_F64
- arm_VCVT_PL_FXU32_F64
- arm_VCVT_VS_FXU32_F64
- arm_VCVT_VC_FXU32_F64
- arm_VCVT_HI_FXU32_F64
- arm_VCVT_LS_FXU32_F64
- arm_VCVT_GE_FXU32_F64
- arm_VCVT_LT_FXU32_F64
- arm_VCVT_GT_FXU32_F64
- arm_VCVT_LE_FXU32_F64
- arm_VCVT_FXU32_F64
- arm_VCVT_ZZ_FXU32_F64
- arm_VCVTB_EQ_F32_F16
- arm_VCVTB_NE_F32_F16
- arm_VCVTB_CS_F32_F16
- arm_VCVTB_CC_F32_F16
- arm_VCVTB_MI_F32_F16
- arm_VCVTB_PL_F32_F16
- arm_VCVTB_VS_F32_F16
- arm_VCVTB_VC_F32_F16
- arm_VCVTB_HI_F32_F16
- arm_VCVTB_LS_F32_F16
- arm_VCVTB_GE_F32_F16
- arm_VCVTB_LT_F32_F16
- arm_VCVTB_GT_F32_F16
- arm_VCVTB_LE_F32_F16
- arm_VCVTB_F32_F16
- arm_VCVTB_ZZ_F32_F16
- arm_VCVTB_EQ_F16_F32
- arm_VCVTB_NE_F16_F32
- arm_VCVTB_CS_F16_F32
- arm_VCVTB_CC_F16_F32
- arm_VCVTB_MI_F16_F32
- arm_VCVTB_PL_F16_F32
- arm_VCVTB_VS_F16_F32
- arm_VCVTB_VC_F16_F32
- arm_VCVTB_HI_F16_F32
- arm_VCVTB_LS_F16_F32
- arm_VCVTB_GE_F16_F32
- arm_VCVTB_LT_F16_F32
- arm_VCVTB_GT_F16_F32
- arm_VCVTB_LE_F16_F32
- arm_VCVTB_F16_F32
- arm_VCVTB_ZZ_F16_F32
- arm_VCVTT_EQ_F32_F16
- arm_VCVTT_NE_F32_F16
- arm_VCVTT_CS_F32_F16
- arm_VCVTT_CC_F32_F16
- arm_VCVTT_MI_F32_F16
- arm_VCVTT_PL_F32_F16
- arm_VCVTT_VS_F32_F16
- arm_VCVTT_VC_F32_F16
- arm_VCVTT_HI_F32_F16
- arm_VCVTT_LS_F32_F16
- arm_VCVTT_GE_F32_F16
- arm_VCVTT_LT_F32_F16
- arm_VCVTT_GT_F32_F16
- arm_VCVTT_LE_F32_F16
- arm_VCVTT_F32_F16
- arm_VCVTT_ZZ_F32_F16
- arm_VCVTT_EQ_F16_F32
- arm_VCVTT_NE_F16_F32
- arm_VCVTT_CS_F16_F32
- arm_VCVTT_CC_F16_F32
- arm_VCVTT_MI_F16_F32
- arm_VCVTT_PL_F16_F32
- arm_VCVTT_VS_F16_F32
- arm_VCVTT_VC_F16_F32
- arm_VCVTT_HI_F16_F32
- arm_VCVTT_LS_F16_F32
- arm_VCVTT_GE_F16_F32
- arm_VCVTT_LT_F16_F32
- arm_VCVTT_GT_F16_F32
- arm_VCVTT_LE_F16_F32
- arm_VCVTT_F16_F32
- arm_VCVTT_ZZ_F16_F32
- arm_VCVTR_EQ_U32_F32
- arm_VCVTR_NE_U32_F32
- arm_VCVTR_CS_U32_F32
- arm_VCVTR_CC_U32_F32
- arm_VCVTR_MI_U32_F32
- arm_VCVTR_PL_U32_F32
- arm_VCVTR_VS_U32_F32
- arm_VCVTR_VC_U32_F32
- arm_VCVTR_HI_U32_F32
- arm_VCVTR_LS_U32_F32
- arm_VCVTR_GE_U32_F32
- arm_VCVTR_LT_U32_F32
- arm_VCVTR_GT_U32_F32
- arm_VCVTR_LE_U32_F32
- arm_VCVTR_U32_F32
- arm_VCVTR_ZZ_U32_F32
- arm_VCVTR_EQ_U32_F64
- arm_VCVTR_NE_U32_F64
- arm_VCVTR_CS_U32_F64
- arm_VCVTR_CC_U32_F64
- arm_VCVTR_MI_U32_F64
- arm_VCVTR_PL_U32_F64
- arm_VCVTR_VS_U32_F64
- arm_VCVTR_VC_U32_F64
- arm_VCVTR_HI_U32_F64
- arm_VCVTR_LS_U32_F64
- arm_VCVTR_GE_U32_F64
- arm_VCVTR_LT_U32_F64
- arm_VCVTR_GT_U32_F64
- arm_VCVTR_LE_U32_F64
- arm_VCVTR_U32_F64
- arm_VCVTR_ZZ_U32_F64
- arm_VCVTR_EQ_S32_F32
- arm_VCVTR_NE_S32_F32
- arm_VCVTR_CS_S32_F32
- arm_VCVTR_CC_S32_F32
- arm_VCVTR_MI_S32_F32
- arm_VCVTR_PL_S32_F32
- arm_VCVTR_VS_S32_F32
- arm_VCVTR_VC_S32_F32
- arm_VCVTR_HI_S32_F32
- arm_VCVTR_LS_S32_F32
- arm_VCVTR_GE_S32_F32
- arm_VCVTR_LT_S32_F32
- arm_VCVTR_GT_S32_F32
- arm_VCVTR_LE_S32_F32
- arm_VCVTR_S32_F32
- arm_VCVTR_ZZ_S32_F32
- arm_VCVTR_EQ_S32_F64
- arm_VCVTR_NE_S32_F64
- arm_VCVTR_CS_S32_F64
- arm_VCVTR_CC_S32_F64
- arm_VCVTR_MI_S32_F64
- arm_VCVTR_PL_S32_F64
- arm_VCVTR_VS_S32_F64
- arm_VCVTR_VC_S32_F64
- arm_VCVTR_HI_S32_F64
- arm_VCVTR_LS_S32_F64
- arm_VCVTR_GE_S32_F64
- arm_VCVTR_LT_S32_F64
- arm_VCVTR_GT_S32_F64
- arm_VCVTR_LE_S32_F64
- arm_VCVTR_S32_F64
- arm_VCVTR_ZZ_S32_F64
- arm_VCVT_EQ_U32_F32
- arm_VCVT_NE_U32_F32
- arm_VCVT_CS_U32_F32
- arm_VCVT_CC_U32_F32
- arm_VCVT_MI_U32_F32
- arm_VCVT_PL_U32_F32
- arm_VCVT_VS_U32_F32
- arm_VCVT_VC_U32_F32
- arm_VCVT_HI_U32_F32
- arm_VCVT_LS_U32_F32
- arm_VCVT_GE_U32_F32
- arm_VCVT_LT_U32_F32
- arm_VCVT_GT_U32_F32
- arm_VCVT_LE_U32_F32
- arm_VCVT_U32_F32
- arm_VCVT_ZZ_U32_F32
- arm_VCVT_EQ_U32_F64
- arm_VCVT_NE_U32_F64
- arm_VCVT_CS_U32_F64
- arm_VCVT_CC_U32_F64
- arm_VCVT_MI_U32_F64
- arm_VCVT_PL_U32_F64
- arm_VCVT_VS_U32_F64
- arm_VCVT_VC_U32_F64
- arm_VCVT_HI_U32_F64
- arm_VCVT_LS_U32_F64
- arm_VCVT_GE_U32_F64
- arm_VCVT_LT_U32_F64
- arm_VCVT_GT_U32_F64
- arm_VCVT_LE_U32_F64
- arm_VCVT_U32_F64
- arm_VCVT_ZZ_U32_F64
- arm_VCVT_EQ_S32_F32
- arm_VCVT_NE_S32_F32
- arm_VCVT_CS_S32_F32
- arm_VCVT_CC_S32_F32
- arm_VCVT_MI_S32_F32
- arm_VCVT_PL_S32_F32
- arm_VCVT_VS_S32_F32
- arm_VCVT_VC_S32_F32
- arm_VCVT_HI_S32_F32
- arm_VCVT_LS_S32_F32
- arm_VCVT_GE_S32_F32
- arm_VCVT_LT_S32_F32
- arm_VCVT_GT_S32_F32
- arm_VCVT_LE_S32_F32
- arm_VCVT_S32_F32
- arm_VCVT_ZZ_S32_F32
- arm_VCVT_EQ_S32_F64
- arm_VCVT_NE_S32_F64
- arm_VCVT_CS_S32_F64
- arm_VCVT_CC_S32_F64
- arm_VCVT_MI_S32_F64
- arm_VCVT_PL_S32_F64
- arm_VCVT_VS_S32_F64
- arm_VCVT_VC_S32_F64
- arm_VCVT_HI_S32_F64
- arm_VCVT_LS_S32_F64
- arm_VCVT_GE_S32_F64
- arm_VCVT_LT_S32_F64
- arm_VCVT_GT_S32_F64
- arm_VCVT_LE_S32_F64
- arm_VCVT_S32_F64
- arm_VCVT_ZZ_S32_F64
- arm_VDIV_EQ_F32
- arm_VDIV_NE_F32
- arm_VDIV_CS_F32
- arm_VDIV_CC_F32
- arm_VDIV_MI_F32
- arm_VDIV_PL_F32
- arm_VDIV_VS_F32
- arm_VDIV_VC_F32
- arm_VDIV_HI_F32
- arm_VDIV_LS_F32
- arm_VDIV_GE_F32
- arm_VDIV_LT_F32
- arm_VDIV_GT_F32
- arm_VDIV_LE_F32
- arm_VDIV_F32
- arm_VDIV_ZZ_F32
- arm_VDIV_EQ_F64
- arm_VDIV_NE_F64
- arm_VDIV_CS_F64
- arm_VDIV_CC_F64
- arm_VDIV_MI_F64
- arm_VDIV_PL_F64
- arm_VDIV_VS_F64
- arm_VDIV_VC_F64
- arm_VDIV_HI_F64
- arm_VDIV_LS_F64
- arm_VDIV_GE_F64
- arm_VDIV_LT_F64
- arm_VDIV_GT_F64
- arm_VDIV_LE_F64
- arm_VDIV_F64
- arm_VDIV_ZZ_F64
- arm_VLDR_EQ
- arm_VLDR_NE
- arm_VLDR_CS
- arm_VLDR_CC
- arm_VLDR_MI
- arm_VLDR_PL
- arm_VLDR_VS
- arm_VLDR_VC
- arm_VLDR_HI
- arm_VLDR_LS
- arm_VLDR_GE
- arm_VLDR_LT
- arm_VLDR_GT
- arm_VLDR_LE
- arm_VLDR
- arm_VLDR_ZZ
- arm_VMLA_EQ_F32
- arm_VMLA_NE_F32
- arm_VMLA_CS_F32
- arm_VMLA_CC_F32
- arm_VMLA_MI_F32
- arm_VMLA_PL_F32
- arm_VMLA_VS_F32
- arm_VMLA_VC_F32
- arm_VMLA_HI_F32
- arm_VMLA_LS_F32
- arm_VMLA_GE_F32
- arm_VMLA_LT_F32
- arm_VMLA_GT_F32
- arm_VMLA_LE_F32
- arm_VMLA_F32
- arm_VMLA_ZZ_F32
- arm_VMLA_EQ_F64
- arm_VMLA_NE_F64
- arm_VMLA_CS_F64
- arm_VMLA_CC_F64
- arm_VMLA_MI_F64
- arm_VMLA_PL_F64
- arm_VMLA_VS_F64
- arm_VMLA_VC_F64
- arm_VMLA_HI_F64
- arm_VMLA_LS_F64
- arm_VMLA_GE_F64
- arm_VMLA_LT_F64
- arm_VMLA_GT_F64
- arm_VMLA_LE_F64
- arm_VMLA_F64
- arm_VMLA_ZZ_F64
- arm_VMLS_EQ_F32
- arm_VMLS_NE_F32
- arm_VMLS_CS_F32
- arm_VMLS_CC_F32
- arm_VMLS_MI_F32
- arm_VMLS_PL_F32
- arm_VMLS_VS_F32
- arm_VMLS_VC_F32
- arm_VMLS_HI_F32
- arm_VMLS_LS_F32
- arm_VMLS_GE_F32
- arm_VMLS_LT_F32
- arm_VMLS_GT_F32
- arm_VMLS_LE_F32
- arm_VMLS_F32
- arm_VMLS_ZZ_F32
- arm_VMLS_EQ_F64
- arm_VMLS_NE_F64
- arm_VMLS_CS_F64
- arm_VMLS_CC_F64
- arm_VMLS_MI_F64
- arm_VMLS_PL_F64
- arm_VMLS_VS_F64
- arm_VMLS_VC_F64
- arm_VMLS_HI_F64
- arm_VMLS_LS_F64
- arm_VMLS_GE_F64
- arm_VMLS_LT_F64
- arm_VMLS_GT_F64
- arm_VMLS_LE_F64
- arm_VMLS_F64
- arm_VMLS_ZZ_F64
- arm_VMOV_EQ
- arm_VMOV_NE
- arm_VMOV_CS
- arm_VMOV_CC
- arm_VMOV_MI
- arm_VMOV_PL
- arm_VMOV_VS
- arm_VMOV_VC
- arm_VMOV_HI
- arm_VMOV_LS
- arm_VMOV_GE
- arm_VMOV_LT
- arm_VMOV_GT
- arm_VMOV_LE
- arm_VMOV
- arm_VMOV_ZZ
- arm_VMOV_EQ_32
- arm_VMOV_NE_32
- arm_VMOV_CS_32
- arm_VMOV_CC_32
- arm_VMOV_MI_32
- arm_VMOV_PL_32
- arm_VMOV_VS_32
- arm_VMOV_VC_32
- arm_VMOV_HI_32
- arm_VMOV_LS_32
- arm_VMOV_GE_32
- arm_VMOV_LT_32
- arm_VMOV_GT_32
- arm_VMOV_LE_32
- arm_VMOV_32
- arm_VMOV_ZZ_32
- arm_VMOV_EQ_F32
- arm_VMOV_NE_F32
- arm_VMOV_CS_F32
- arm_VMOV_CC_F32
- arm_VMOV_MI_F32
- arm_VMOV_PL_F32
- arm_VMOV_VS_F32
- arm_VMOV_VC_F32
- arm_VMOV_HI_F32
- arm_VMOV_LS_F32
- arm_VMOV_GE_F32
- arm_VMOV_LT_F32
- arm_VMOV_GT_F32
- arm_VMOV_LE_F32
- arm_VMOV_F32
- arm_VMOV_ZZ_F32
- arm_VMOV_EQ_F64
- arm_VMOV_NE_F64
- arm_VMOV_CS_F64
- arm_VMOV_CC_F64
- arm_VMOV_MI_F64
- arm_VMOV_PL_F64
- arm_VMOV_VS_F64
- arm_VMOV_VC_F64
- arm_VMOV_HI_F64
- arm_VMOV_LS_F64
- arm_VMOV_GE_F64
- arm_VMOV_LT_F64
- arm_VMOV_GT_F64
- arm_VMOV_LE_F64
- arm_VMOV_F64
- arm_VMOV_ZZ_F64
- arm_VMRS_EQ
- arm_VMRS_NE
- arm_VMRS_CS
- arm_VMRS_CC
- arm_VMRS_MI
- arm_VMRS_PL
- arm_VMRS_VS
- arm_VMRS_VC
- arm_VMRS_HI
- arm_VMRS_LS
- arm_VMRS_GE
- arm_VMRS_LT
- arm_VMRS_GT
- arm_VMRS_LE
- arm_VMRS
- arm_VMRS_ZZ
- arm_VMSR_EQ
- arm_VMSR_NE
- arm_VMSR_CS
- arm_VMSR_CC
- arm_VMSR_MI
- arm_VMSR_PL
- arm_VMSR_VS
- arm_VMSR_VC
- arm_VMSR_HI
- arm_VMSR_LS
- arm_VMSR_GE
- arm_VMSR_LT
- arm_VMSR_GT
- arm_VMSR_LE
- arm_VMSR
- arm_VMSR_ZZ
- arm_VMUL_EQ_F32
- arm_VMUL_NE_F32
- arm_VMUL_CS_F32
- arm_VMUL_CC_F32
- arm_VMUL_MI_F32
- arm_VMUL_PL_F32
- arm_VMUL_VS_F32
- arm_VMUL_VC_F32
- arm_VMUL_HI_F32
- arm_VMUL_LS_F32
- arm_VMUL_GE_F32
- arm_VMUL_LT_F32
- arm_VMUL_GT_F32
- arm_VMUL_LE_F32
- arm_VMUL_F32
- arm_VMUL_ZZ_F32
- arm_VMUL_EQ_F64
- arm_VMUL_NE_F64
- arm_VMUL_CS_F64
- arm_VMUL_CC_F64
- arm_VMUL_MI_F64
- arm_VMUL_PL_F64
- arm_VMUL_VS_F64
- arm_VMUL_VC_F64
- arm_VMUL_HI_F64
- arm_VMUL_LS_F64
- arm_VMUL_GE_F64
- arm_VMUL_LT_F64
- arm_VMUL_GT_F64
- arm_VMUL_LE_F64
- arm_VMUL_F64
- arm_VMUL_ZZ_F64
- arm_VNEG_EQ_F32
- arm_VNEG_NE_F32
- arm_VNEG_CS_F32
- arm_VNEG_CC_F32
- arm_VNEG_MI_F32
- arm_VNEG_PL_F32
- arm_VNEG_VS_F32
- arm_VNEG_VC_F32
- arm_VNEG_HI_F32
- arm_VNEG_LS_F32
- arm_VNEG_GE_F32
- arm_VNEG_LT_F32
- arm_VNEG_GT_F32
- arm_VNEG_LE_F32
- arm_VNEG_F32
- arm_VNEG_ZZ_F32
- arm_VNEG_EQ_F64
- arm_VNEG_NE_F64
- arm_VNEG_CS_F64
- arm_VNEG_CC_F64
- arm_VNEG_MI_F64
- arm_VNEG_PL_F64
- arm_VNEG_VS_F64
- arm_VNEG_VC_F64
- arm_VNEG_HI_F64
- arm_VNEG_LS_F64
- arm_VNEG_GE_F64
- arm_VNEG_LT_F64
- arm_VNEG_GT_F64
- arm_VNEG_LE_F64
- arm_VNEG_F64
- arm_VNEG_ZZ_F64
- arm_VNMLS_EQ_F32
- arm_VNMLS_NE_F32
- arm_VNMLS_CS_F32
- arm_VNMLS_CC_F32
- arm_VNMLS_MI_F32
- arm_VNMLS_PL_F32
- arm_VNMLS_VS_F32
- arm_VNMLS_VC_F32
- arm_VNMLS_HI_F32
- arm_VNMLS_LS_F32
- arm_VNMLS_GE_F32
- arm_VNMLS_LT_F32
- arm_VNMLS_GT_F32
- arm_VNMLS_LE_F32
- arm_VNMLS_F32
- arm_VNMLS_ZZ_F32
- arm_VNMLS_EQ_F64
- arm_VNMLS_NE_F64
- arm_VNMLS_CS_F64
- arm_VNMLS_CC_F64
- arm_VNMLS_MI_F64
- arm_VNMLS_PL_F64
- arm_VNMLS_VS_F64
- arm_VNMLS_VC_F64
- arm_VNMLS_HI_F64
- arm_VNMLS_LS_F64
- arm_VNMLS_GE_F64
- arm_VNMLS_LT_F64
- arm_VNMLS_GT_F64
- arm_VNMLS_LE_F64
- arm_VNMLS_F64
- arm_VNMLS_ZZ_F64
- arm_VNMLA_EQ_F32
- arm_VNMLA_NE_F32
- arm_VNMLA_CS_F32
- arm_VNMLA_CC_F32
- arm_VNMLA_MI_F32
- arm_VNMLA_PL_F32
- arm_VNMLA_VS_F32
- arm_VNMLA_VC_F32
- arm_VNMLA_HI_F32
- arm_VNMLA_LS_F32
- arm_VNMLA_GE_F32
- arm_VNMLA_LT_F32
- arm_VNMLA_GT_F32
- arm_VNMLA_LE_F32
- arm_VNMLA_F32
- arm_VNMLA_ZZ_F32
- arm_VNMLA_EQ_F64
- arm_VNMLA_NE_F64
- arm_VNMLA_CS_F64
- arm_VNMLA_CC_F64
- arm_VNMLA_MI_F64
- arm_VNMLA_PL_F64
- arm_VNMLA_VS_F64
- arm_VNMLA_VC_F64
- arm_VNMLA_HI_F64
- arm_VNMLA_LS_F64
- arm_VNMLA_GE_F64
- arm_VNMLA_LT_F64
- arm_VNMLA_GT_F64
- arm_VNMLA_LE_F64
- arm_VNMLA_F64
- arm_VNMLA_ZZ_F64
- arm_VNMUL_EQ_F32
- arm_VNMUL_NE_F32
- arm_VNMUL_CS_F32
- arm_VNMUL_CC_F32
- arm_VNMUL_MI_F32
- arm_VNMUL_PL_F32
- arm_VNMUL_VS_F32
- arm_VNMUL_VC_F32
- arm_VNMUL_HI_F32
- arm_VNMUL_LS_F32
- arm_VNMUL_GE_F32
- arm_VNMUL_LT_F32
- arm_VNMUL_GT_F32
- arm_VNMUL_LE_F32
- arm_VNMUL_F32
- arm_VNMUL_ZZ_F32
- arm_VNMUL_EQ_F64
- arm_VNMUL_NE_F64
- arm_VNMUL_CS_F64
- arm_VNMUL_CC_F64
- arm_VNMUL_MI_F64
- arm_VNMUL_PL_F64
- arm_VNMUL_VS_F64
- arm_VNMUL_VC_F64
- arm_VNMUL_HI_F64
- arm_VNMUL_LS_F64
- arm_VNMUL_GE_F64
- arm_VNMUL_LT_F64
- arm_VNMUL_GT_F64
- arm_VNMUL_LE_F64
- arm_VNMUL_F64
- arm_VNMUL_ZZ_F64
- arm_VSQRT_EQ_F32
- arm_VSQRT_NE_F32
- arm_VSQRT_CS_F32
- arm_VSQRT_CC_F32
- arm_VSQRT_MI_F32
- arm_VSQRT_PL_F32
- arm_VSQRT_VS_F32
- arm_VSQRT_VC_F32
- arm_VSQRT_HI_F32
- arm_VSQRT_LS_F32
- arm_VSQRT_GE_F32
- arm_VSQRT_LT_F32
- arm_VSQRT_GT_F32
- arm_VSQRT_LE_F32
- arm_VSQRT_F32
- arm_VSQRT_ZZ_F32
- arm_VSQRT_EQ_F64
- arm_VSQRT_NE_F64
- arm_VSQRT_CS_F64
- arm_VSQRT_CC_F64
- arm_VSQRT_MI_F64
- arm_VSQRT_PL_F64
- arm_VSQRT_VS_F64
- arm_VSQRT_VC_F64
- arm_VSQRT_HI_F64
- arm_VSQRT_LS_F64
- arm_VSQRT_GE_F64
- arm_VSQRT_LT_F64
- arm_VSQRT_GT_F64
- arm_VSQRT_LE_F64
- arm_VSQRT_F64
- arm_VSQRT_ZZ_F64
- arm_VSTR_EQ
- arm_VSTR_NE
- arm_VSTR_CS
- arm_VSTR_CC
- arm_VSTR_MI
- arm_VSTR_PL
- arm_VSTR_VS
- arm_VSTR_VC
- arm_VSTR_HI
- arm_VSTR_LS
- arm_VSTR_GE
- arm_VSTR_LT
- arm_VSTR_GT
- arm_VSTR_LE
- arm_VSTR
- arm_VSTR_ZZ
- arm_VSUB_EQ_F32
- arm_VSUB_NE_F32
- arm_VSUB_CS_F32
- arm_VSUB_CC_F32
- arm_VSUB_MI_F32
- arm_VSUB_PL_F32
- arm_VSUB_VS_F32
- arm_VSUB_VC_F32
- arm_VSUB_HI_F32
- arm_VSUB_LS_F32
- arm_VSUB_GE_F32
- arm_VSUB_LT_F32
- arm_VSUB_GT_F32
- arm_VSUB_LE_F32
- arm_VSUB_F32
- arm_VSUB_ZZ_F32
- arm_VSUB_EQ_F64
- arm_VSUB_NE_F64
- arm_VSUB_CS_F64
- arm_VSUB_CC_F64
- arm_VSUB_MI_F64
- arm_VSUB_PL_F64
- arm_VSUB_VS_F64
- arm_VSUB_VC_F64
- arm_VSUB_HI_F64
- arm_VSUB_LS_F64
- arm_VSUB_GE_F64
- arm_VSUB_LT_F64
- arm_VSUB_GT_F64
- arm_VSUB_LE_F64
- arm_VSUB_F64
- arm_VSUB_ZZ_F64
- arm_WFE_EQ
- arm_WFE_NE
- arm_WFE_CS
- arm_WFE_CC
- arm_WFE_MI
- arm_WFE_PL
- arm_WFE_VS
- arm_WFE_VC
- arm_WFE_HI
- arm_WFE_LS
- arm_WFE_GE
- arm_WFE_LT
- arm_WFE_GT
- arm_WFE_LE
- arm_WFE
- arm_WFE_ZZ
- arm_WFI_EQ
- arm_WFI_NE
- arm_WFI_CS
- arm_WFI_CC
- arm_WFI_MI
- arm_WFI_PL
- arm_WFI_VS
- arm_WFI_VC
- arm_WFI_HI
- arm_WFI_LS
- arm_WFI_GE
- arm_WFI_LT
- arm_WFI_GT
- arm_WFI_LE
- arm_WFI
- arm_WFI_ZZ
- arm_YIELD_EQ
- arm_YIELD_NE
- arm_YIELD_CS
- arm_YIELD_CC
- arm_YIELD_MI
- arm_YIELD_PL
- arm_YIELD_VS
- arm_YIELD_VC
- arm_YIELD_HI
- arm_YIELD_LS
- arm_YIELD_GE
- arm_YIELD_LT
- arm_YIELD_GT
- arm_YIELD_LE
- arm_YIELD
- arm_YIELD_ZZ
-)
-
-var arm_opstr = [...]string{
- arm_ADC_EQ: "ADC.EQ",
- arm_ADC_NE: "ADC.NE",
- arm_ADC_CS: "ADC.CS",
- arm_ADC_CC: "ADC.CC",
- arm_ADC_MI: "ADC.MI",
- arm_ADC_PL: "ADC.PL",
- arm_ADC_VS: "ADC.VS",
- arm_ADC_VC: "ADC.VC",
- arm_ADC_HI: "ADC.HI",
- arm_ADC_LS: "ADC.LS",
- arm_ADC_GE: "ADC.GE",
- arm_ADC_LT: "ADC.LT",
- arm_ADC_GT: "ADC.GT",
- arm_ADC_LE: "ADC.LE",
- arm_ADC: "ADC",
- arm_ADC_ZZ: "ADC.ZZ",
- arm_ADC_S_EQ: "ADC.S.EQ",
- arm_ADC_S_NE: "ADC.S.NE",
- arm_ADC_S_CS: "ADC.S.CS",
- arm_ADC_S_CC: "ADC.S.CC",
- arm_ADC_S_MI: "ADC.S.MI",
- arm_ADC_S_PL: "ADC.S.PL",
- arm_ADC_S_VS: "ADC.S.VS",
- arm_ADC_S_VC: "ADC.S.VC",
- arm_ADC_S_HI: "ADC.S.HI",
- arm_ADC_S_LS: "ADC.S.LS",
- arm_ADC_S_GE: "ADC.S.GE",
- arm_ADC_S_LT: "ADC.S.LT",
- arm_ADC_S_GT: "ADC.S.GT",
- arm_ADC_S_LE: "ADC.S.LE",
- arm_ADC_S: "ADC.S",
- arm_ADC_S_ZZ: "ADC.S.ZZ",
- arm_ADD_EQ: "ADD.EQ",
- arm_ADD_NE: "ADD.NE",
- arm_ADD_CS: "ADD.CS",
- arm_ADD_CC: "ADD.CC",
- arm_ADD_MI: "ADD.MI",
- arm_ADD_PL: "ADD.PL",
- arm_ADD_VS: "ADD.VS",
- arm_ADD_VC: "ADD.VC",
- arm_ADD_HI: "ADD.HI",
- arm_ADD_LS: "ADD.LS",
- arm_ADD_GE: "ADD.GE",
- arm_ADD_LT: "ADD.LT",
- arm_ADD_GT: "ADD.GT",
- arm_ADD_LE: "ADD.LE",
- arm_ADD: "ADD",
- arm_ADD_ZZ: "ADD.ZZ",
- arm_ADD_S_EQ: "ADD.S.EQ",
- arm_ADD_S_NE: "ADD.S.NE",
- arm_ADD_S_CS: "ADD.S.CS",
- arm_ADD_S_CC: "ADD.S.CC",
- arm_ADD_S_MI: "ADD.S.MI",
- arm_ADD_S_PL: "ADD.S.PL",
- arm_ADD_S_VS: "ADD.S.VS",
- arm_ADD_S_VC: "ADD.S.VC",
- arm_ADD_S_HI: "ADD.S.HI",
- arm_ADD_S_LS: "ADD.S.LS",
- arm_ADD_S_GE: "ADD.S.GE",
- arm_ADD_S_LT: "ADD.S.LT",
- arm_ADD_S_GT: "ADD.S.GT",
- arm_ADD_S_LE: "ADD.S.LE",
- arm_ADD_S: "ADD.S",
- arm_ADD_S_ZZ: "ADD.S.ZZ",
- arm_AND_EQ: "AND.EQ",
- arm_AND_NE: "AND.NE",
- arm_AND_CS: "AND.CS",
- arm_AND_CC: "AND.CC",
- arm_AND_MI: "AND.MI",
- arm_AND_PL: "AND.PL",
- arm_AND_VS: "AND.VS",
- arm_AND_VC: "AND.VC",
- arm_AND_HI: "AND.HI",
- arm_AND_LS: "AND.LS",
- arm_AND_GE: "AND.GE",
- arm_AND_LT: "AND.LT",
- arm_AND_GT: "AND.GT",
- arm_AND_LE: "AND.LE",
- arm_AND: "AND",
- arm_AND_ZZ: "AND.ZZ",
- arm_AND_S_EQ: "AND.S.EQ",
- arm_AND_S_NE: "AND.S.NE",
- arm_AND_S_CS: "AND.S.CS",
- arm_AND_S_CC: "AND.S.CC",
- arm_AND_S_MI: "AND.S.MI",
- arm_AND_S_PL: "AND.S.PL",
- arm_AND_S_VS: "AND.S.VS",
- arm_AND_S_VC: "AND.S.VC",
- arm_AND_S_HI: "AND.S.HI",
- arm_AND_S_LS: "AND.S.LS",
- arm_AND_S_GE: "AND.S.GE",
- arm_AND_S_LT: "AND.S.LT",
- arm_AND_S_GT: "AND.S.GT",
- arm_AND_S_LE: "AND.S.LE",
- arm_AND_S: "AND.S",
- arm_AND_S_ZZ: "AND.S.ZZ",
- arm_ASR_EQ: "ASR.EQ",
- arm_ASR_NE: "ASR.NE",
- arm_ASR_CS: "ASR.CS",
- arm_ASR_CC: "ASR.CC",
- arm_ASR_MI: "ASR.MI",
- arm_ASR_PL: "ASR.PL",
- arm_ASR_VS: "ASR.VS",
- arm_ASR_VC: "ASR.VC",
- arm_ASR_HI: "ASR.HI",
- arm_ASR_LS: "ASR.LS",
- arm_ASR_GE: "ASR.GE",
- arm_ASR_LT: "ASR.LT",
- arm_ASR_GT: "ASR.GT",
- arm_ASR_LE: "ASR.LE",
- arm_ASR: "ASR",
- arm_ASR_ZZ: "ASR.ZZ",
- arm_ASR_S_EQ: "ASR.S.EQ",
- arm_ASR_S_NE: "ASR.S.NE",
- arm_ASR_S_CS: "ASR.S.CS",
- arm_ASR_S_CC: "ASR.S.CC",
- arm_ASR_S_MI: "ASR.S.MI",
- arm_ASR_S_PL: "ASR.S.PL",
- arm_ASR_S_VS: "ASR.S.VS",
- arm_ASR_S_VC: "ASR.S.VC",
- arm_ASR_S_HI: "ASR.S.HI",
- arm_ASR_S_LS: "ASR.S.LS",
- arm_ASR_S_GE: "ASR.S.GE",
- arm_ASR_S_LT: "ASR.S.LT",
- arm_ASR_S_GT: "ASR.S.GT",
- arm_ASR_S_LE: "ASR.S.LE",
- arm_ASR_S: "ASR.S",
- arm_ASR_S_ZZ: "ASR.S.ZZ",
- arm_B_EQ: "B.EQ",
- arm_B_NE: "B.NE",
- arm_B_CS: "B.CS",
- arm_B_CC: "B.CC",
- arm_B_MI: "B.MI",
- arm_B_PL: "B.PL",
- arm_B_VS: "B.VS",
- arm_B_VC: "B.VC",
- arm_B_HI: "B.HI",
- arm_B_LS: "B.LS",
- arm_B_GE: "B.GE",
- arm_B_LT: "B.LT",
- arm_B_GT: "B.GT",
- arm_B_LE: "B.LE",
- arm_B: "B",
- arm_B_ZZ: "B.ZZ",
- arm_BFC_EQ: "BFC.EQ",
- arm_BFC_NE: "BFC.NE",
- arm_BFC_CS: "BFC.CS",
- arm_BFC_CC: "BFC.CC",
- arm_BFC_MI: "BFC.MI",
- arm_BFC_PL: "BFC.PL",
- arm_BFC_VS: "BFC.VS",
- arm_BFC_VC: "BFC.VC",
- arm_BFC_HI: "BFC.HI",
- arm_BFC_LS: "BFC.LS",
- arm_BFC_GE: "BFC.GE",
- arm_BFC_LT: "BFC.LT",
- arm_BFC_GT: "BFC.GT",
- arm_BFC_LE: "BFC.LE",
- arm_BFC: "BFC",
- arm_BFC_ZZ: "BFC.ZZ",
- arm_BFI_EQ: "BFI.EQ",
- arm_BFI_NE: "BFI.NE",
- arm_BFI_CS: "BFI.CS",
- arm_BFI_CC: "BFI.CC",
- arm_BFI_MI: "BFI.MI",
- arm_BFI_PL: "BFI.PL",
- arm_BFI_VS: "BFI.VS",
- arm_BFI_VC: "BFI.VC",
- arm_BFI_HI: "BFI.HI",
- arm_BFI_LS: "BFI.LS",
- arm_BFI_GE: "BFI.GE",
- arm_BFI_LT: "BFI.LT",
- arm_BFI_GT: "BFI.GT",
- arm_BFI_LE: "BFI.LE",
- arm_BFI: "BFI",
- arm_BFI_ZZ: "BFI.ZZ",
- arm_BIC_EQ: "BIC.EQ",
- arm_BIC_NE: "BIC.NE",
- arm_BIC_CS: "BIC.CS",
- arm_BIC_CC: "BIC.CC",
- arm_BIC_MI: "BIC.MI",
- arm_BIC_PL: "BIC.PL",
- arm_BIC_VS: "BIC.VS",
- arm_BIC_VC: "BIC.VC",
- arm_BIC_HI: "BIC.HI",
- arm_BIC_LS: "BIC.LS",
- arm_BIC_GE: "BIC.GE",
- arm_BIC_LT: "BIC.LT",
- arm_BIC_GT: "BIC.GT",
- arm_BIC_LE: "BIC.LE",
- arm_BIC: "BIC",
- arm_BIC_ZZ: "BIC.ZZ",
- arm_BIC_S_EQ: "BIC.S.EQ",
- arm_BIC_S_NE: "BIC.S.NE",
- arm_BIC_S_CS: "BIC.S.CS",
- arm_BIC_S_CC: "BIC.S.CC",
- arm_BIC_S_MI: "BIC.S.MI",
- arm_BIC_S_PL: "BIC.S.PL",
- arm_BIC_S_VS: "BIC.S.VS",
- arm_BIC_S_VC: "BIC.S.VC",
- arm_BIC_S_HI: "BIC.S.HI",
- arm_BIC_S_LS: "BIC.S.LS",
- arm_BIC_S_GE: "BIC.S.GE",
- arm_BIC_S_LT: "BIC.S.LT",
- arm_BIC_S_GT: "BIC.S.GT",
- arm_BIC_S_LE: "BIC.S.LE",
- arm_BIC_S: "BIC.S",
- arm_BIC_S_ZZ: "BIC.S.ZZ",
- arm_BKPT_EQ: "BKPT.EQ",
- arm_BKPT_NE: "BKPT.NE",
- arm_BKPT_CS: "BKPT.CS",
- arm_BKPT_CC: "BKPT.CC",
- arm_BKPT_MI: "BKPT.MI",
- arm_BKPT_PL: "BKPT.PL",
- arm_BKPT_VS: "BKPT.VS",
- arm_BKPT_VC: "BKPT.VC",
- arm_BKPT_HI: "BKPT.HI",
- arm_BKPT_LS: "BKPT.LS",
- arm_BKPT_GE: "BKPT.GE",
- arm_BKPT_LT: "BKPT.LT",
- arm_BKPT_GT: "BKPT.GT",
- arm_BKPT_LE: "BKPT.LE",
- arm_BKPT: "BKPT",
- arm_BKPT_ZZ: "BKPT.ZZ",
- arm_BL_EQ: "BL.EQ",
- arm_BL_NE: "BL.NE",
- arm_BL_CS: "BL.CS",
- arm_BL_CC: "BL.CC",
- arm_BL_MI: "BL.MI",
- arm_BL_PL: "BL.PL",
- arm_BL_VS: "BL.VS",
- arm_BL_VC: "BL.VC",
- arm_BL_HI: "BL.HI",
- arm_BL_LS: "BL.LS",
- arm_BL_GE: "BL.GE",
- arm_BL_LT: "BL.LT",
- arm_BL_GT: "BL.GT",
- arm_BL_LE: "BL.LE",
- arm_BL: "BL",
- arm_BL_ZZ: "BL.ZZ",
- arm_BLX_EQ: "BLX.EQ",
- arm_BLX_NE: "BLX.NE",
- arm_BLX_CS: "BLX.CS",
- arm_BLX_CC: "BLX.CC",
- arm_BLX_MI: "BLX.MI",
- arm_BLX_PL: "BLX.PL",
- arm_BLX_VS: "BLX.VS",
- arm_BLX_VC: "BLX.VC",
- arm_BLX_HI: "BLX.HI",
- arm_BLX_LS: "BLX.LS",
- arm_BLX_GE: "BLX.GE",
- arm_BLX_LT: "BLX.LT",
- arm_BLX_GT: "BLX.GT",
- arm_BLX_LE: "BLX.LE",
- arm_BLX: "BLX",
- arm_BLX_ZZ: "BLX.ZZ",
- arm_BX_EQ: "BX.EQ",
- arm_BX_NE: "BX.NE",
- arm_BX_CS: "BX.CS",
- arm_BX_CC: "BX.CC",
- arm_BX_MI: "BX.MI",
- arm_BX_PL: "BX.PL",
- arm_BX_VS: "BX.VS",
- arm_BX_VC: "BX.VC",
- arm_BX_HI: "BX.HI",
- arm_BX_LS: "BX.LS",
- arm_BX_GE: "BX.GE",
- arm_BX_LT: "BX.LT",
- arm_BX_GT: "BX.GT",
- arm_BX_LE: "BX.LE",
- arm_BX: "BX",
- arm_BX_ZZ: "BX.ZZ",
- arm_BXJ_EQ: "BXJ.EQ",
- arm_BXJ_NE: "BXJ.NE",
- arm_BXJ_CS: "BXJ.CS",
- arm_BXJ_CC: "BXJ.CC",
- arm_BXJ_MI: "BXJ.MI",
- arm_BXJ_PL: "BXJ.PL",
- arm_BXJ_VS: "BXJ.VS",
- arm_BXJ_VC: "BXJ.VC",
- arm_BXJ_HI: "BXJ.HI",
- arm_BXJ_LS: "BXJ.LS",
- arm_BXJ_GE: "BXJ.GE",
- arm_BXJ_LT: "BXJ.LT",
- arm_BXJ_GT: "BXJ.GT",
- arm_BXJ_LE: "BXJ.LE",
- arm_BXJ: "BXJ",
- arm_BXJ_ZZ: "BXJ.ZZ",
- arm_CLREX: "CLREX",
- arm_CLZ_EQ: "CLZ.EQ",
- arm_CLZ_NE: "CLZ.NE",
- arm_CLZ_CS: "CLZ.CS",
- arm_CLZ_CC: "CLZ.CC",
- arm_CLZ_MI: "CLZ.MI",
- arm_CLZ_PL: "CLZ.PL",
- arm_CLZ_VS: "CLZ.VS",
- arm_CLZ_VC: "CLZ.VC",
- arm_CLZ_HI: "CLZ.HI",
- arm_CLZ_LS: "CLZ.LS",
- arm_CLZ_GE: "CLZ.GE",
- arm_CLZ_LT: "CLZ.LT",
- arm_CLZ_GT: "CLZ.GT",
- arm_CLZ_LE: "CLZ.LE",
- arm_CLZ: "CLZ",
- arm_CLZ_ZZ: "CLZ.ZZ",
- arm_CMN_EQ: "CMN.EQ",
- arm_CMN_NE: "CMN.NE",
- arm_CMN_CS: "CMN.CS",
- arm_CMN_CC: "CMN.CC",
- arm_CMN_MI: "CMN.MI",
- arm_CMN_PL: "CMN.PL",
- arm_CMN_VS: "CMN.VS",
- arm_CMN_VC: "CMN.VC",
- arm_CMN_HI: "CMN.HI",
- arm_CMN_LS: "CMN.LS",
- arm_CMN_GE: "CMN.GE",
- arm_CMN_LT: "CMN.LT",
- arm_CMN_GT: "CMN.GT",
- arm_CMN_LE: "CMN.LE",
- arm_CMN: "CMN",
- arm_CMN_ZZ: "CMN.ZZ",
- arm_CMP_EQ: "CMP.EQ",
- arm_CMP_NE: "CMP.NE",
- arm_CMP_CS: "CMP.CS",
- arm_CMP_CC: "CMP.CC",
- arm_CMP_MI: "CMP.MI",
- arm_CMP_PL: "CMP.PL",
- arm_CMP_VS: "CMP.VS",
- arm_CMP_VC: "CMP.VC",
- arm_CMP_HI: "CMP.HI",
- arm_CMP_LS: "CMP.LS",
- arm_CMP_GE: "CMP.GE",
- arm_CMP_LT: "CMP.LT",
- arm_CMP_GT: "CMP.GT",
- arm_CMP_LE: "CMP.LE",
- arm_CMP: "CMP",
- arm_CMP_ZZ: "CMP.ZZ",
- arm_DBG_EQ: "DBG.EQ",
- arm_DBG_NE: "DBG.NE",
- arm_DBG_CS: "DBG.CS",
- arm_DBG_CC: "DBG.CC",
- arm_DBG_MI: "DBG.MI",
- arm_DBG_PL: "DBG.PL",
- arm_DBG_VS: "DBG.VS",
- arm_DBG_VC: "DBG.VC",
- arm_DBG_HI: "DBG.HI",
- arm_DBG_LS: "DBG.LS",
- arm_DBG_GE: "DBG.GE",
- arm_DBG_LT: "DBG.LT",
- arm_DBG_GT: "DBG.GT",
- arm_DBG_LE: "DBG.LE",
- arm_DBG: "DBG",
- arm_DBG_ZZ: "DBG.ZZ",
- arm_DMB: "DMB",
- arm_DSB: "DSB",
- arm_EOR_EQ: "EOR.EQ",
- arm_EOR_NE: "EOR.NE",
- arm_EOR_CS: "EOR.CS",
- arm_EOR_CC: "EOR.CC",
- arm_EOR_MI: "EOR.MI",
- arm_EOR_PL: "EOR.PL",
- arm_EOR_VS: "EOR.VS",
- arm_EOR_VC: "EOR.VC",
- arm_EOR_HI: "EOR.HI",
- arm_EOR_LS: "EOR.LS",
- arm_EOR_GE: "EOR.GE",
- arm_EOR_LT: "EOR.LT",
- arm_EOR_GT: "EOR.GT",
- arm_EOR_LE: "EOR.LE",
- arm_EOR: "EOR",
- arm_EOR_ZZ: "EOR.ZZ",
- arm_EOR_S_EQ: "EOR.S.EQ",
- arm_EOR_S_NE: "EOR.S.NE",
- arm_EOR_S_CS: "EOR.S.CS",
- arm_EOR_S_CC: "EOR.S.CC",
- arm_EOR_S_MI: "EOR.S.MI",
- arm_EOR_S_PL: "EOR.S.PL",
- arm_EOR_S_VS: "EOR.S.VS",
- arm_EOR_S_VC: "EOR.S.VC",
- arm_EOR_S_HI: "EOR.S.HI",
- arm_EOR_S_LS: "EOR.S.LS",
- arm_EOR_S_GE: "EOR.S.GE",
- arm_EOR_S_LT: "EOR.S.LT",
- arm_EOR_S_GT: "EOR.S.GT",
- arm_EOR_S_LE: "EOR.S.LE",
- arm_EOR_S: "EOR.S",
- arm_EOR_S_ZZ: "EOR.S.ZZ",
- arm_ISB: "ISB",
- arm_LDM_EQ: "LDM.EQ",
- arm_LDM_NE: "LDM.NE",
- arm_LDM_CS: "LDM.CS",
- arm_LDM_CC: "LDM.CC",
- arm_LDM_MI: "LDM.MI",
- arm_LDM_PL: "LDM.PL",
- arm_LDM_VS: "LDM.VS",
- arm_LDM_VC: "LDM.VC",
- arm_LDM_HI: "LDM.HI",
- arm_LDM_LS: "LDM.LS",
- arm_LDM_GE: "LDM.GE",
- arm_LDM_LT: "LDM.LT",
- arm_LDM_GT: "LDM.GT",
- arm_LDM_LE: "LDM.LE",
- arm_LDM: "LDM",
- arm_LDM_ZZ: "LDM.ZZ",
- arm_LDMDA_EQ: "LDMDA.EQ",
- arm_LDMDA_NE: "LDMDA.NE",
- arm_LDMDA_CS: "LDMDA.CS",
- arm_LDMDA_CC: "LDMDA.CC",
- arm_LDMDA_MI: "LDMDA.MI",
- arm_LDMDA_PL: "LDMDA.PL",
- arm_LDMDA_VS: "LDMDA.VS",
- arm_LDMDA_VC: "LDMDA.VC",
- arm_LDMDA_HI: "LDMDA.HI",
- arm_LDMDA_LS: "LDMDA.LS",
- arm_LDMDA_GE: "LDMDA.GE",
- arm_LDMDA_LT: "LDMDA.LT",
- arm_LDMDA_GT: "LDMDA.GT",
- arm_LDMDA_LE: "LDMDA.LE",
- arm_LDMDA: "LDMDA",
- arm_LDMDA_ZZ: "LDMDA.ZZ",
- arm_LDMDB_EQ: "LDMDB.EQ",
- arm_LDMDB_NE: "LDMDB.NE",
- arm_LDMDB_CS: "LDMDB.CS",
- arm_LDMDB_CC: "LDMDB.CC",
- arm_LDMDB_MI: "LDMDB.MI",
- arm_LDMDB_PL: "LDMDB.PL",
- arm_LDMDB_VS: "LDMDB.VS",
- arm_LDMDB_VC: "LDMDB.VC",
- arm_LDMDB_HI: "LDMDB.HI",
- arm_LDMDB_LS: "LDMDB.LS",
- arm_LDMDB_GE: "LDMDB.GE",
- arm_LDMDB_LT: "LDMDB.LT",
- arm_LDMDB_GT: "LDMDB.GT",
- arm_LDMDB_LE: "LDMDB.LE",
- arm_LDMDB: "LDMDB",
- arm_LDMDB_ZZ: "LDMDB.ZZ",
- arm_LDMIB_EQ: "LDMIB.EQ",
- arm_LDMIB_NE: "LDMIB.NE",
- arm_LDMIB_CS: "LDMIB.CS",
- arm_LDMIB_CC: "LDMIB.CC",
- arm_LDMIB_MI: "LDMIB.MI",
- arm_LDMIB_PL: "LDMIB.PL",
- arm_LDMIB_VS: "LDMIB.VS",
- arm_LDMIB_VC: "LDMIB.VC",
- arm_LDMIB_HI: "LDMIB.HI",
- arm_LDMIB_LS: "LDMIB.LS",
- arm_LDMIB_GE: "LDMIB.GE",
- arm_LDMIB_LT: "LDMIB.LT",
- arm_LDMIB_GT: "LDMIB.GT",
- arm_LDMIB_LE: "LDMIB.LE",
- arm_LDMIB: "LDMIB",
- arm_LDMIB_ZZ: "LDMIB.ZZ",
- arm_LDR_EQ: "LDR.EQ",
- arm_LDR_NE: "LDR.NE",
- arm_LDR_CS: "LDR.CS",
- arm_LDR_CC: "LDR.CC",
- arm_LDR_MI: "LDR.MI",
- arm_LDR_PL: "LDR.PL",
- arm_LDR_VS: "LDR.VS",
- arm_LDR_VC: "LDR.VC",
- arm_LDR_HI: "LDR.HI",
- arm_LDR_LS: "LDR.LS",
- arm_LDR_GE: "LDR.GE",
- arm_LDR_LT: "LDR.LT",
- arm_LDR_GT: "LDR.GT",
- arm_LDR_LE: "LDR.LE",
- arm_LDR: "LDR",
- arm_LDR_ZZ: "LDR.ZZ",
- arm_LDRB_EQ: "LDRB.EQ",
- arm_LDRB_NE: "LDRB.NE",
- arm_LDRB_CS: "LDRB.CS",
- arm_LDRB_CC: "LDRB.CC",
- arm_LDRB_MI: "LDRB.MI",
- arm_LDRB_PL: "LDRB.PL",
- arm_LDRB_VS: "LDRB.VS",
- arm_LDRB_VC: "LDRB.VC",
- arm_LDRB_HI: "LDRB.HI",
- arm_LDRB_LS: "LDRB.LS",
- arm_LDRB_GE: "LDRB.GE",
- arm_LDRB_LT: "LDRB.LT",
- arm_LDRB_GT: "LDRB.GT",
- arm_LDRB_LE: "LDRB.LE",
- arm_LDRB: "LDRB",
- arm_LDRB_ZZ: "LDRB.ZZ",
- arm_LDRBT_EQ: "LDRBT.EQ",
- arm_LDRBT_NE: "LDRBT.NE",
- arm_LDRBT_CS: "LDRBT.CS",
- arm_LDRBT_CC: "LDRBT.CC",
- arm_LDRBT_MI: "LDRBT.MI",
- arm_LDRBT_PL: "LDRBT.PL",
- arm_LDRBT_VS: "LDRBT.VS",
- arm_LDRBT_VC: "LDRBT.VC",
- arm_LDRBT_HI: "LDRBT.HI",
- arm_LDRBT_LS: "LDRBT.LS",
- arm_LDRBT_GE: "LDRBT.GE",
- arm_LDRBT_LT: "LDRBT.LT",
- arm_LDRBT_GT: "LDRBT.GT",
- arm_LDRBT_LE: "LDRBT.LE",
- arm_LDRBT: "LDRBT",
- arm_LDRBT_ZZ: "LDRBT.ZZ",
- arm_LDRD_EQ: "LDRD.EQ",
- arm_LDRD_NE: "LDRD.NE",
- arm_LDRD_CS: "LDRD.CS",
- arm_LDRD_CC: "LDRD.CC",
- arm_LDRD_MI: "LDRD.MI",
- arm_LDRD_PL: "LDRD.PL",
- arm_LDRD_VS: "LDRD.VS",
- arm_LDRD_VC: "LDRD.VC",
- arm_LDRD_HI: "LDRD.HI",
- arm_LDRD_LS: "LDRD.LS",
- arm_LDRD_GE: "LDRD.GE",
- arm_LDRD_LT: "LDRD.LT",
- arm_LDRD_GT: "LDRD.GT",
- arm_LDRD_LE: "LDRD.LE",
- arm_LDRD: "LDRD",
- arm_LDRD_ZZ: "LDRD.ZZ",
- arm_LDREX_EQ: "LDREX.EQ",
- arm_LDREX_NE: "LDREX.NE",
- arm_LDREX_CS: "LDREX.CS",
- arm_LDREX_CC: "LDREX.CC",
- arm_LDREX_MI: "LDREX.MI",
- arm_LDREX_PL: "LDREX.PL",
- arm_LDREX_VS: "LDREX.VS",
- arm_LDREX_VC: "LDREX.VC",
- arm_LDREX_HI: "LDREX.HI",
- arm_LDREX_LS: "LDREX.LS",
- arm_LDREX_GE: "LDREX.GE",
- arm_LDREX_LT: "LDREX.LT",
- arm_LDREX_GT: "LDREX.GT",
- arm_LDREX_LE: "LDREX.LE",
- arm_LDREX: "LDREX",
- arm_LDREX_ZZ: "LDREX.ZZ",
- arm_LDREXB_EQ: "LDREXB.EQ",
- arm_LDREXB_NE: "LDREXB.NE",
- arm_LDREXB_CS: "LDREXB.CS",
- arm_LDREXB_CC: "LDREXB.CC",
- arm_LDREXB_MI: "LDREXB.MI",
- arm_LDREXB_PL: "LDREXB.PL",
- arm_LDREXB_VS: "LDREXB.VS",
- arm_LDREXB_VC: "LDREXB.VC",
- arm_LDREXB_HI: "LDREXB.HI",
- arm_LDREXB_LS: "LDREXB.LS",
- arm_LDREXB_GE: "LDREXB.GE",
- arm_LDREXB_LT: "LDREXB.LT",
- arm_LDREXB_GT: "LDREXB.GT",
- arm_LDREXB_LE: "LDREXB.LE",
- arm_LDREXB: "LDREXB",
- arm_LDREXB_ZZ: "LDREXB.ZZ",
- arm_LDREXD_EQ: "LDREXD.EQ",
- arm_LDREXD_NE: "LDREXD.NE",
- arm_LDREXD_CS: "LDREXD.CS",
- arm_LDREXD_CC: "LDREXD.CC",
- arm_LDREXD_MI: "LDREXD.MI",
- arm_LDREXD_PL: "LDREXD.PL",
- arm_LDREXD_VS: "LDREXD.VS",
- arm_LDREXD_VC: "LDREXD.VC",
- arm_LDREXD_HI: "LDREXD.HI",
- arm_LDREXD_LS: "LDREXD.LS",
- arm_LDREXD_GE: "LDREXD.GE",
- arm_LDREXD_LT: "LDREXD.LT",
- arm_LDREXD_GT: "LDREXD.GT",
- arm_LDREXD_LE: "LDREXD.LE",
- arm_LDREXD: "LDREXD",
- arm_LDREXD_ZZ: "LDREXD.ZZ",
- arm_LDREXH_EQ: "LDREXH.EQ",
- arm_LDREXH_NE: "LDREXH.NE",
- arm_LDREXH_CS: "LDREXH.CS",
- arm_LDREXH_CC: "LDREXH.CC",
- arm_LDREXH_MI: "LDREXH.MI",
- arm_LDREXH_PL: "LDREXH.PL",
- arm_LDREXH_VS: "LDREXH.VS",
- arm_LDREXH_VC: "LDREXH.VC",
- arm_LDREXH_HI: "LDREXH.HI",
- arm_LDREXH_LS: "LDREXH.LS",
- arm_LDREXH_GE: "LDREXH.GE",
- arm_LDREXH_LT: "LDREXH.LT",
- arm_LDREXH_GT: "LDREXH.GT",
- arm_LDREXH_LE: "LDREXH.LE",
- arm_LDREXH: "LDREXH",
- arm_LDREXH_ZZ: "LDREXH.ZZ",
- arm_LDRH_EQ: "LDRH.EQ",
- arm_LDRH_NE: "LDRH.NE",
- arm_LDRH_CS: "LDRH.CS",
- arm_LDRH_CC: "LDRH.CC",
- arm_LDRH_MI: "LDRH.MI",
- arm_LDRH_PL: "LDRH.PL",
- arm_LDRH_VS: "LDRH.VS",
- arm_LDRH_VC: "LDRH.VC",
- arm_LDRH_HI: "LDRH.HI",
- arm_LDRH_LS: "LDRH.LS",
- arm_LDRH_GE: "LDRH.GE",
- arm_LDRH_LT: "LDRH.LT",
- arm_LDRH_GT: "LDRH.GT",
- arm_LDRH_LE: "LDRH.LE",
- arm_LDRH: "LDRH",
- arm_LDRH_ZZ: "LDRH.ZZ",
- arm_LDRHT_EQ: "LDRHT.EQ",
- arm_LDRHT_NE: "LDRHT.NE",
- arm_LDRHT_CS: "LDRHT.CS",
- arm_LDRHT_CC: "LDRHT.CC",
- arm_LDRHT_MI: "LDRHT.MI",
- arm_LDRHT_PL: "LDRHT.PL",
- arm_LDRHT_VS: "LDRHT.VS",
- arm_LDRHT_VC: "LDRHT.VC",
- arm_LDRHT_HI: "LDRHT.HI",
- arm_LDRHT_LS: "LDRHT.LS",
- arm_LDRHT_GE: "LDRHT.GE",
- arm_LDRHT_LT: "LDRHT.LT",
- arm_LDRHT_GT: "LDRHT.GT",
- arm_LDRHT_LE: "LDRHT.LE",
- arm_LDRHT: "LDRHT",
- arm_LDRHT_ZZ: "LDRHT.ZZ",
- arm_LDRSB_EQ: "LDRSB.EQ",
- arm_LDRSB_NE: "LDRSB.NE",
- arm_LDRSB_CS: "LDRSB.CS",
- arm_LDRSB_CC: "LDRSB.CC",
- arm_LDRSB_MI: "LDRSB.MI",
- arm_LDRSB_PL: "LDRSB.PL",
- arm_LDRSB_VS: "LDRSB.VS",
- arm_LDRSB_VC: "LDRSB.VC",
- arm_LDRSB_HI: "LDRSB.HI",
- arm_LDRSB_LS: "LDRSB.LS",
- arm_LDRSB_GE: "LDRSB.GE",
- arm_LDRSB_LT: "LDRSB.LT",
- arm_LDRSB_GT: "LDRSB.GT",
- arm_LDRSB_LE: "LDRSB.LE",
- arm_LDRSB: "LDRSB",
- arm_LDRSB_ZZ: "LDRSB.ZZ",
- arm_LDRSBT_EQ: "LDRSBT.EQ",
- arm_LDRSBT_NE: "LDRSBT.NE",
- arm_LDRSBT_CS: "LDRSBT.CS",
- arm_LDRSBT_CC: "LDRSBT.CC",
- arm_LDRSBT_MI: "LDRSBT.MI",
- arm_LDRSBT_PL: "LDRSBT.PL",
- arm_LDRSBT_VS: "LDRSBT.VS",
- arm_LDRSBT_VC: "LDRSBT.VC",
- arm_LDRSBT_HI: "LDRSBT.HI",
- arm_LDRSBT_LS: "LDRSBT.LS",
- arm_LDRSBT_GE: "LDRSBT.GE",
- arm_LDRSBT_LT: "LDRSBT.LT",
- arm_LDRSBT_GT: "LDRSBT.GT",
- arm_LDRSBT_LE: "LDRSBT.LE",
- arm_LDRSBT: "LDRSBT",
- arm_LDRSBT_ZZ: "LDRSBT.ZZ",
- arm_LDRSH_EQ: "LDRSH.EQ",
- arm_LDRSH_NE: "LDRSH.NE",
- arm_LDRSH_CS: "LDRSH.CS",
- arm_LDRSH_CC: "LDRSH.CC",
- arm_LDRSH_MI: "LDRSH.MI",
- arm_LDRSH_PL: "LDRSH.PL",
- arm_LDRSH_VS: "LDRSH.VS",
- arm_LDRSH_VC: "LDRSH.VC",
- arm_LDRSH_HI: "LDRSH.HI",
- arm_LDRSH_LS: "LDRSH.LS",
- arm_LDRSH_GE: "LDRSH.GE",
- arm_LDRSH_LT: "LDRSH.LT",
- arm_LDRSH_GT: "LDRSH.GT",
- arm_LDRSH_LE: "LDRSH.LE",
- arm_LDRSH: "LDRSH",
- arm_LDRSH_ZZ: "LDRSH.ZZ",
- arm_LDRSHT_EQ: "LDRSHT.EQ",
- arm_LDRSHT_NE: "LDRSHT.NE",
- arm_LDRSHT_CS: "LDRSHT.CS",
- arm_LDRSHT_CC: "LDRSHT.CC",
- arm_LDRSHT_MI: "LDRSHT.MI",
- arm_LDRSHT_PL: "LDRSHT.PL",
- arm_LDRSHT_VS: "LDRSHT.VS",
- arm_LDRSHT_VC: "LDRSHT.VC",
- arm_LDRSHT_HI: "LDRSHT.HI",
- arm_LDRSHT_LS: "LDRSHT.LS",
- arm_LDRSHT_GE: "LDRSHT.GE",
- arm_LDRSHT_LT: "LDRSHT.LT",
- arm_LDRSHT_GT: "LDRSHT.GT",
- arm_LDRSHT_LE: "LDRSHT.LE",
- arm_LDRSHT: "LDRSHT",
- arm_LDRSHT_ZZ: "LDRSHT.ZZ",
- arm_LDRT_EQ: "LDRT.EQ",
- arm_LDRT_NE: "LDRT.NE",
- arm_LDRT_CS: "LDRT.CS",
- arm_LDRT_CC: "LDRT.CC",
- arm_LDRT_MI: "LDRT.MI",
- arm_LDRT_PL: "LDRT.PL",
- arm_LDRT_VS: "LDRT.VS",
- arm_LDRT_VC: "LDRT.VC",
- arm_LDRT_HI: "LDRT.HI",
- arm_LDRT_LS: "LDRT.LS",
- arm_LDRT_GE: "LDRT.GE",
- arm_LDRT_LT: "LDRT.LT",
- arm_LDRT_GT: "LDRT.GT",
- arm_LDRT_LE: "LDRT.LE",
- arm_LDRT: "LDRT",
- arm_LDRT_ZZ: "LDRT.ZZ",
- arm_LSL_EQ: "LSL.EQ",
- arm_LSL_NE: "LSL.NE",
- arm_LSL_CS: "LSL.CS",
- arm_LSL_CC: "LSL.CC",
- arm_LSL_MI: "LSL.MI",
- arm_LSL_PL: "LSL.PL",
- arm_LSL_VS: "LSL.VS",
- arm_LSL_VC: "LSL.VC",
- arm_LSL_HI: "LSL.HI",
- arm_LSL_LS: "LSL.LS",
- arm_LSL_GE: "LSL.GE",
- arm_LSL_LT: "LSL.LT",
- arm_LSL_GT: "LSL.GT",
- arm_LSL_LE: "LSL.LE",
- arm_LSL: "LSL",
- arm_LSL_ZZ: "LSL.ZZ",
- arm_LSL_S_EQ: "LSL.S.EQ",
- arm_LSL_S_NE: "LSL.S.NE",
- arm_LSL_S_CS: "LSL.S.CS",
- arm_LSL_S_CC: "LSL.S.CC",
- arm_LSL_S_MI: "LSL.S.MI",
- arm_LSL_S_PL: "LSL.S.PL",
- arm_LSL_S_VS: "LSL.S.VS",
- arm_LSL_S_VC: "LSL.S.VC",
- arm_LSL_S_HI: "LSL.S.HI",
- arm_LSL_S_LS: "LSL.S.LS",
- arm_LSL_S_GE: "LSL.S.GE",
- arm_LSL_S_LT: "LSL.S.LT",
- arm_LSL_S_GT: "LSL.S.GT",
- arm_LSL_S_LE: "LSL.S.LE",
- arm_LSL_S: "LSL.S",
- arm_LSL_S_ZZ: "LSL.S.ZZ",
- arm_LSR_EQ: "LSR.EQ",
- arm_LSR_NE: "LSR.NE",
- arm_LSR_CS: "LSR.CS",
- arm_LSR_CC: "LSR.CC",
- arm_LSR_MI: "LSR.MI",
- arm_LSR_PL: "LSR.PL",
- arm_LSR_VS: "LSR.VS",
- arm_LSR_VC: "LSR.VC",
- arm_LSR_HI: "LSR.HI",
- arm_LSR_LS: "LSR.LS",
- arm_LSR_GE: "LSR.GE",
- arm_LSR_LT: "LSR.LT",
- arm_LSR_GT: "LSR.GT",
- arm_LSR_LE: "LSR.LE",
- arm_LSR: "LSR",
- arm_LSR_ZZ: "LSR.ZZ",
- arm_LSR_S_EQ: "LSR.S.EQ",
- arm_LSR_S_NE: "LSR.S.NE",
- arm_LSR_S_CS: "LSR.S.CS",
- arm_LSR_S_CC: "LSR.S.CC",
- arm_LSR_S_MI: "LSR.S.MI",
- arm_LSR_S_PL: "LSR.S.PL",
- arm_LSR_S_VS: "LSR.S.VS",
- arm_LSR_S_VC: "LSR.S.VC",
- arm_LSR_S_HI: "LSR.S.HI",
- arm_LSR_S_LS: "LSR.S.LS",
- arm_LSR_S_GE: "LSR.S.GE",
- arm_LSR_S_LT: "LSR.S.LT",
- arm_LSR_S_GT: "LSR.S.GT",
- arm_LSR_S_LE: "LSR.S.LE",
- arm_LSR_S: "LSR.S",
- arm_LSR_S_ZZ: "LSR.S.ZZ",
- arm_MLA_EQ: "MLA.EQ",
- arm_MLA_NE: "MLA.NE",
- arm_MLA_CS: "MLA.CS",
- arm_MLA_CC: "MLA.CC",
- arm_MLA_MI: "MLA.MI",
- arm_MLA_PL: "MLA.PL",
- arm_MLA_VS: "MLA.VS",
- arm_MLA_VC: "MLA.VC",
- arm_MLA_HI: "MLA.HI",
- arm_MLA_LS: "MLA.LS",
- arm_MLA_GE: "MLA.GE",
- arm_MLA_LT: "MLA.LT",
- arm_MLA_GT: "MLA.GT",
- arm_MLA_LE: "MLA.LE",
- arm_MLA: "MLA",
- arm_MLA_ZZ: "MLA.ZZ",
- arm_MLA_S_EQ: "MLA.S.EQ",
- arm_MLA_S_NE: "MLA.S.NE",
- arm_MLA_S_CS: "MLA.S.CS",
- arm_MLA_S_CC: "MLA.S.CC",
- arm_MLA_S_MI: "MLA.S.MI",
- arm_MLA_S_PL: "MLA.S.PL",
- arm_MLA_S_VS: "MLA.S.VS",
- arm_MLA_S_VC: "MLA.S.VC",
- arm_MLA_S_HI: "MLA.S.HI",
- arm_MLA_S_LS: "MLA.S.LS",
- arm_MLA_S_GE: "MLA.S.GE",
- arm_MLA_S_LT: "MLA.S.LT",
- arm_MLA_S_GT: "MLA.S.GT",
- arm_MLA_S_LE: "MLA.S.LE",
- arm_MLA_S: "MLA.S",
- arm_MLA_S_ZZ: "MLA.S.ZZ",
- arm_MLS_EQ: "MLS.EQ",
- arm_MLS_NE: "MLS.NE",
- arm_MLS_CS: "MLS.CS",
- arm_MLS_CC: "MLS.CC",
- arm_MLS_MI: "MLS.MI",
- arm_MLS_PL: "MLS.PL",
- arm_MLS_VS: "MLS.VS",
- arm_MLS_VC: "MLS.VC",
- arm_MLS_HI: "MLS.HI",
- arm_MLS_LS: "MLS.LS",
- arm_MLS_GE: "MLS.GE",
- arm_MLS_LT: "MLS.LT",
- arm_MLS_GT: "MLS.GT",
- arm_MLS_LE: "MLS.LE",
- arm_MLS: "MLS",
- arm_MLS_ZZ: "MLS.ZZ",
- arm_MOV_EQ: "MOV.EQ",
- arm_MOV_NE: "MOV.NE",
- arm_MOV_CS: "MOV.CS",
- arm_MOV_CC: "MOV.CC",
- arm_MOV_MI: "MOV.MI",
- arm_MOV_PL: "MOV.PL",
- arm_MOV_VS: "MOV.VS",
- arm_MOV_VC: "MOV.VC",
- arm_MOV_HI: "MOV.HI",
- arm_MOV_LS: "MOV.LS",
- arm_MOV_GE: "MOV.GE",
- arm_MOV_LT: "MOV.LT",
- arm_MOV_GT: "MOV.GT",
- arm_MOV_LE: "MOV.LE",
- arm_MOV: "MOV",
- arm_MOV_ZZ: "MOV.ZZ",
- arm_MOV_S_EQ: "MOV.S.EQ",
- arm_MOV_S_NE: "MOV.S.NE",
- arm_MOV_S_CS: "MOV.S.CS",
- arm_MOV_S_CC: "MOV.S.CC",
- arm_MOV_S_MI: "MOV.S.MI",
- arm_MOV_S_PL: "MOV.S.PL",
- arm_MOV_S_VS: "MOV.S.VS",
- arm_MOV_S_VC: "MOV.S.VC",
- arm_MOV_S_HI: "MOV.S.HI",
- arm_MOV_S_LS: "MOV.S.LS",
- arm_MOV_S_GE: "MOV.S.GE",
- arm_MOV_S_LT: "MOV.S.LT",
- arm_MOV_S_GT: "MOV.S.GT",
- arm_MOV_S_LE: "MOV.S.LE",
- arm_MOV_S: "MOV.S",
- arm_MOV_S_ZZ: "MOV.S.ZZ",
- arm_MOVT_EQ: "MOVT.EQ",
- arm_MOVT_NE: "MOVT.NE",
- arm_MOVT_CS: "MOVT.CS",
- arm_MOVT_CC: "MOVT.CC",
- arm_MOVT_MI: "MOVT.MI",
- arm_MOVT_PL: "MOVT.PL",
- arm_MOVT_VS: "MOVT.VS",
- arm_MOVT_VC: "MOVT.VC",
- arm_MOVT_HI: "MOVT.HI",
- arm_MOVT_LS: "MOVT.LS",
- arm_MOVT_GE: "MOVT.GE",
- arm_MOVT_LT: "MOVT.LT",
- arm_MOVT_GT: "MOVT.GT",
- arm_MOVT_LE: "MOVT.LE",
- arm_MOVT: "MOVT",
- arm_MOVT_ZZ: "MOVT.ZZ",
- arm_MOVW_EQ: "MOVW.EQ",
- arm_MOVW_NE: "MOVW.NE",
- arm_MOVW_CS: "MOVW.CS",
- arm_MOVW_CC: "MOVW.CC",
- arm_MOVW_MI: "MOVW.MI",
- arm_MOVW_PL: "MOVW.PL",
- arm_MOVW_VS: "MOVW.VS",
- arm_MOVW_VC: "MOVW.VC",
- arm_MOVW_HI: "MOVW.HI",
- arm_MOVW_LS: "MOVW.LS",
- arm_MOVW_GE: "MOVW.GE",
- arm_MOVW_LT: "MOVW.LT",
- arm_MOVW_GT: "MOVW.GT",
- arm_MOVW_LE: "MOVW.LE",
- arm_MOVW: "MOVW",
- arm_MOVW_ZZ: "MOVW.ZZ",
- arm_MRS_EQ: "MRS.EQ",
- arm_MRS_NE: "MRS.NE",
- arm_MRS_CS: "MRS.CS",
- arm_MRS_CC: "MRS.CC",
- arm_MRS_MI: "MRS.MI",
- arm_MRS_PL: "MRS.PL",
- arm_MRS_VS: "MRS.VS",
- arm_MRS_VC: "MRS.VC",
- arm_MRS_HI: "MRS.HI",
- arm_MRS_LS: "MRS.LS",
- arm_MRS_GE: "MRS.GE",
- arm_MRS_LT: "MRS.LT",
- arm_MRS_GT: "MRS.GT",
- arm_MRS_LE: "MRS.LE",
- arm_MRS: "MRS",
- arm_MRS_ZZ: "MRS.ZZ",
- arm_MUL_EQ: "MUL.EQ",
- arm_MUL_NE: "MUL.NE",
- arm_MUL_CS: "MUL.CS",
- arm_MUL_CC: "MUL.CC",
- arm_MUL_MI: "MUL.MI",
- arm_MUL_PL: "MUL.PL",
- arm_MUL_VS: "MUL.VS",
- arm_MUL_VC: "MUL.VC",
- arm_MUL_HI: "MUL.HI",
- arm_MUL_LS: "MUL.LS",
- arm_MUL_GE: "MUL.GE",
- arm_MUL_LT: "MUL.LT",
- arm_MUL_GT: "MUL.GT",
- arm_MUL_LE: "MUL.LE",
- arm_MUL: "MUL",
- arm_MUL_ZZ: "MUL.ZZ",
- arm_MUL_S_EQ: "MUL.S.EQ",
- arm_MUL_S_NE: "MUL.S.NE",
- arm_MUL_S_CS: "MUL.S.CS",
- arm_MUL_S_CC: "MUL.S.CC",
- arm_MUL_S_MI: "MUL.S.MI",
- arm_MUL_S_PL: "MUL.S.PL",
- arm_MUL_S_VS: "MUL.S.VS",
- arm_MUL_S_VC: "MUL.S.VC",
- arm_MUL_S_HI: "MUL.S.HI",
- arm_MUL_S_LS: "MUL.S.LS",
- arm_MUL_S_GE: "MUL.S.GE",
- arm_MUL_S_LT: "MUL.S.LT",
- arm_MUL_S_GT: "MUL.S.GT",
- arm_MUL_S_LE: "MUL.S.LE",
- arm_MUL_S: "MUL.S",
- arm_MUL_S_ZZ: "MUL.S.ZZ",
- arm_MVN_EQ: "MVN.EQ",
- arm_MVN_NE: "MVN.NE",
- arm_MVN_CS: "MVN.CS",
- arm_MVN_CC: "MVN.CC",
- arm_MVN_MI: "MVN.MI",
- arm_MVN_PL: "MVN.PL",
- arm_MVN_VS: "MVN.VS",
- arm_MVN_VC: "MVN.VC",
- arm_MVN_HI: "MVN.HI",
- arm_MVN_LS: "MVN.LS",
- arm_MVN_GE: "MVN.GE",
- arm_MVN_LT: "MVN.LT",
- arm_MVN_GT: "MVN.GT",
- arm_MVN_LE: "MVN.LE",
- arm_MVN: "MVN",
- arm_MVN_ZZ: "MVN.ZZ",
- arm_MVN_S_EQ: "MVN.S.EQ",
- arm_MVN_S_NE: "MVN.S.NE",
- arm_MVN_S_CS: "MVN.S.CS",
- arm_MVN_S_CC: "MVN.S.CC",
- arm_MVN_S_MI: "MVN.S.MI",
- arm_MVN_S_PL: "MVN.S.PL",
- arm_MVN_S_VS: "MVN.S.VS",
- arm_MVN_S_VC: "MVN.S.VC",
- arm_MVN_S_HI: "MVN.S.HI",
- arm_MVN_S_LS: "MVN.S.LS",
- arm_MVN_S_GE: "MVN.S.GE",
- arm_MVN_S_LT: "MVN.S.LT",
- arm_MVN_S_GT: "MVN.S.GT",
- arm_MVN_S_LE: "MVN.S.LE",
- arm_MVN_S: "MVN.S",
- arm_MVN_S_ZZ: "MVN.S.ZZ",
- arm_NOP_EQ: "NOP.EQ",
- arm_NOP_NE: "NOP.NE",
- arm_NOP_CS: "NOP.CS",
- arm_NOP_CC: "NOP.CC",
- arm_NOP_MI: "NOP.MI",
- arm_NOP_PL: "NOP.PL",
- arm_NOP_VS: "NOP.VS",
- arm_NOP_VC: "NOP.VC",
- arm_NOP_HI: "NOP.HI",
- arm_NOP_LS: "NOP.LS",
- arm_NOP_GE: "NOP.GE",
- arm_NOP_LT: "NOP.LT",
- arm_NOP_GT: "NOP.GT",
- arm_NOP_LE: "NOP.LE",
- arm_NOP: "NOP",
- arm_NOP_ZZ: "NOP.ZZ",
- arm_ORR_EQ: "ORR.EQ",
- arm_ORR_NE: "ORR.NE",
- arm_ORR_CS: "ORR.CS",
- arm_ORR_CC: "ORR.CC",
- arm_ORR_MI: "ORR.MI",
- arm_ORR_PL: "ORR.PL",
- arm_ORR_VS: "ORR.VS",
- arm_ORR_VC: "ORR.VC",
- arm_ORR_HI: "ORR.HI",
- arm_ORR_LS: "ORR.LS",
- arm_ORR_GE: "ORR.GE",
- arm_ORR_LT: "ORR.LT",
- arm_ORR_GT: "ORR.GT",
- arm_ORR_LE: "ORR.LE",
- arm_ORR: "ORR",
- arm_ORR_ZZ: "ORR.ZZ",
- arm_ORR_S_EQ: "ORR.S.EQ",
- arm_ORR_S_NE: "ORR.S.NE",
- arm_ORR_S_CS: "ORR.S.CS",
- arm_ORR_S_CC: "ORR.S.CC",
- arm_ORR_S_MI: "ORR.S.MI",
- arm_ORR_S_PL: "ORR.S.PL",
- arm_ORR_S_VS: "ORR.S.VS",
- arm_ORR_S_VC: "ORR.S.VC",
- arm_ORR_S_HI: "ORR.S.HI",
- arm_ORR_S_LS: "ORR.S.LS",
- arm_ORR_S_GE: "ORR.S.GE",
- arm_ORR_S_LT: "ORR.S.LT",
- arm_ORR_S_GT: "ORR.S.GT",
- arm_ORR_S_LE: "ORR.S.LE",
- arm_ORR_S: "ORR.S",
- arm_ORR_S_ZZ: "ORR.S.ZZ",
- arm_PKHBT_EQ: "PKHBT.EQ",
- arm_PKHBT_NE: "PKHBT.NE",
- arm_PKHBT_CS: "PKHBT.CS",
- arm_PKHBT_CC: "PKHBT.CC",
- arm_PKHBT_MI: "PKHBT.MI",
- arm_PKHBT_PL: "PKHBT.PL",
- arm_PKHBT_VS: "PKHBT.VS",
- arm_PKHBT_VC: "PKHBT.VC",
- arm_PKHBT_HI: "PKHBT.HI",
- arm_PKHBT_LS: "PKHBT.LS",
- arm_PKHBT_GE: "PKHBT.GE",
- arm_PKHBT_LT: "PKHBT.LT",
- arm_PKHBT_GT: "PKHBT.GT",
- arm_PKHBT_LE: "PKHBT.LE",
- arm_PKHBT: "PKHBT",
- arm_PKHBT_ZZ: "PKHBT.ZZ",
- arm_PKHTB_EQ: "PKHTB.EQ",
- arm_PKHTB_NE: "PKHTB.NE",
- arm_PKHTB_CS: "PKHTB.CS",
- arm_PKHTB_CC: "PKHTB.CC",
- arm_PKHTB_MI: "PKHTB.MI",
- arm_PKHTB_PL: "PKHTB.PL",
- arm_PKHTB_VS: "PKHTB.VS",
- arm_PKHTB_VC: "PKHTB.VC",
- arm_PKHTB_HI: "PKHTB.HI",
- arm_PKHTB_LS: "PKHTB.LS",
- arm_PKHTB_GE: "PKHTB.GE",
- arm_PKHTB_LT: "PKHTB.LT",
- arm_PKHTB_GT: "PKHTB.GT",
- arm_PKHTB_LE: "PKHTB.LE",
- arm_PKHTB: "PKHTB",
- arm_PKHTB_ZZ: "PKHTB.ZZ",
- arm_PLD_W: "PLD.W",
- arm_PLD: "PLD",
- arm_PLI: "PLI",
- arm_POP_EQ: "POP.EQ",
- arm_POP_NE: "POP.NE",
- arm_POP_CS: "POP.CS",
- arm_POP_CC: "POP.CC",
- arm_POP_MI: "POP.MI",
- arm_POP_PL: "POP.PL",
- arm_POP_VS: "POP.VS",
- arm_POP_VC: "POP.VC",
- arm_POP_HI: "POP.HI",
- arm_POP_LS: "POP.LS",
- arm_POP_GE: "POP.GE",
- arm_POP_LT: "POP.LT",
- arm_POP_GT: "POP.GT",
- arm_POP_LE: "POP.LE",
- arm_POP: "POP",
- arm_POP_ZZ: "POP.ZZ",
- arm_PUSH_EQ: "PUSH.EQ",
- arm_PUSH_NE: "PUSH.NE",
- arm_PUSH_CS: "PUSH.CS",
- arm_PUSH_CC: "PUSH.CC",
- arm_PUSH_MI: "PUSH.MI",
- arm_PUSH_PL: "PUSH.PL",
- arm_PUSH_VS: "PUSH.VS",
- arm_PUSH_VC: "PUSH.VC",
- arm_PUSH_HI: "PUSH.HI",
- arm_PUSH_LS: "PUSH.LS",
- arm_PUSH_GE: "PUSH.GE",
- arm_PUSH_LT: "PUSH.LT",
- arm_PUSH_GT: "PUSH.GT",
- arm_PUSH_LE: "PUSH.LE",
- arm_PUSH: "PUSH",
- arm_PUSH_ZZ: "PUSH.ZZ",
- arm_QADD_EQ: "QADD.EQ",
- arm_QADD_NE: "QADD.NE",
- arm_QADD_CS: "QADD.CS",
- arm_QADD_CC: "QADD.CC",
- arm_QADD_MI: "QADD.MI",
- arm_QADD_PL: "QADD.PL",
- arm_QADD_VS: "QADD.VS",
- arm_QADD_VC: "QADD.VC",
- arm_QADD_HI: "QADD.HI",
- arm_QADD_LS: "QADD.LS",
- arm_QADD_GE: "QADD.GE",
- arm_QADD_LT: "QADD.LT",
- arm_QADD_GT: "QADD.GT",
- arm_QADD_LE: "QADD.LE",
- arm_QADD: "QADD",
- arm_QADD_ZZ: "QADD.ZZ",
- arm_QADD16_EQ: "QADD16.EQ",
- arm_QADD16_NE: "QADD16.NE",
- arm_QADD16_CS: "QADD16.CS",
- arm_QADD16_CC: "QADD16.CC",
- arm_QADD16_MI: "QADD16.MI",
- arm_QADD16_PL: "QADD16.PL",
- arm_QADD16_VS: "QADD16.VS",
- arm_QADD16_VC: "QADD16.VC",
- arm_QADD16_HI: "QADD16.HI",
- arm_QADD16_LS: "QADD16.LS",
- arm_QADD16_GE: "QADD16.GE",
- arm_QADD16_LT: "QADD16.LT",
- arm_QADD16_GT: "QADD16.GT",
- arm_QADD16_LE: "QADD16.LE",
- arm_QADD16: "QADD16",
- arm_QADD16_ZZ: "QADD16.ZZ",
- arm_QADD8_EQ: "QADD8.EQ",
- arm_QADD8_NE: "QADD8.NE",
- arm_QADD8_CS: "QADD8.CS",
- arm_QADD8_CC: "QADD8.CC",
- arm_QADD8_MI: "QADD8.MI",
- arm_QADD8_PL: "QADD8.PL",
- arm_QADD8_VS: "QADD8.VS",
- arm_QADD8_VC: "QADD8.VC",
- arm_QADD8_HI: "QADD8.HI",
- arm_QADD8_LS: "QADD8.LS",
- arm_QADD8_GE: "QADD8.GE",
- arm_QADD8_LT: "QADD8.LT",
- arm_QADD8_GT: "QADD8.GT",
- arm_QADD8_LE: "QADD8.LE",
- arm_QADD8: "QADD8",
- arm_QADD8_ZZ: "QADD8.ZZ",
- arm_QASX_EQ: "QASX.EQ",
- arm_QASX_NE: "QASX.NE",
- arm_QASX_CS: "QASX.CS",
- arm_QASX_CC: "QASX.CC",
- arm_QASX_MI: "QASX.MI",
- arm_QASX_PL: "QASX.PL",
- arm_QASX_VS: "QASX.VS",
- arm_QASX_VC: "QASX.VC",
- arm_QASX_HI: "QASX.HI",
- arm_QASX_LS: "QASX.LS",
- arm_QASX_GE: "QASX.GE",
- arm_QASX_LT: "QASX.LT",
- arm_QASX_GT: "QASX.GT",
- arm_QASX_LE: "QASX.LE",
- arm_QASX: "QASX",
- arm_QASX_ZZ: "QASX.ZZ",
- arm_QDADD_EQ: "QDADD.EQ",
- arm_QDADD_NE: "QDADD.NE",
- arm_QDADD_CS: "QDADD.CS",
- arm_QDADD_CC: "QDADD.CC",
- arm_QDADD_MI: "QDADD.MI",
- arm_QDADD_PL: "QDADD.PL",
- arm_QDADD_VS: "QDADD.VS",
- arm_QDADD_VC: "QDADD.VC",
- arm_QDADD_HI: "QDADD.HI",
- arm_QDADD_LS: "QDADD.LS",
- arm_QDADD_GE: "QDADD.GE",
- arm_QDADD_LT: "QDADD.LT",
- arm_QDADD_GT: "QDADD.GT",
- arm_QDADD_LE: "QDADD.LE",
- arm_QDADD: "QDADD",
- arm_QDADD_ZZ: "QDADD.ZZ",
- arm_QDSUB_EQ: "QDSUB.EQ",
- arm_QDSUB_NE: "QDSUB.NE",
- arm_QDSUB_CS: "QDSUB.CS",
- arm_QDSUB_CC: "QDSUB.CC",
- arm_QDSUB_MI: "QDSUB.MI",
- arm_QDSUB_PL: "QDSUB.PL",
- arm_QDSUB_VS: "QDSUB.VS",
- arm_QDSUB_VC: "QDSUB.VC",
- arm_QDSUB_HI: "QDSUB.HI",
- arm_QDSUB_LS: "QDSUB.LS",
- arm_QDSUB_GE: "QDSUB.GE",
- arm_QDSUB_LT: "QDSUB.LT",
- arm_QDSUB_GT: "QDSUB.GT",
- arm_QDSUB_LE: "QDSUB.LE",
- arm_QDSUB: "QDSUB",
- arm_QDSUB_ZZ: "QDSUB.ZZ",
- arm_QSAX_EQ: "QSAX.EQ",
- arm_QSAX_NE: "QSAX.NE",
- arm_QSAX_CS: "QSAX.CS",
- arm_QSAX_CC: "QSAX.CC",
- arm_QSAX_MI: "QSAX.MI",
- arm_QSAX_PL: "QSAX.PL",
- arm_QSAX_VS: "QSAX.VS",
- arm_QSAX_VC: "QSAX.VC",
- arm_QSAX_HI: "QSAX.HI",
- arm_QSAX_LS: "QSAX.LS",
- arm_QSAX_GE: "QSAX.GE",
- arm_QSAX_LT: "QSAX.LT",
- arm_QSAX_GT: "QSAX.GT",
- arm_QSAX_LE: "QSAX.LE",
- arm_QSAX: "QSAX",
- arm_QSAX_ZZ: "QSAX.ZZ",
- arm_QSUB_EQ: "QSUB.EQ",
- arm_QSUB_NE: "QSUB.NE",
- arm_QSUB_CS: "QSUB.CS",
- arm_QSUB_CC: "QSUB.CC",
- arm_QSUB_MI: "QSUB.MI",
- arm_QSUB_PL: "QSUB.PL",
- arm_QSUB_VS: "QSUB.VS",
- arm_QSUB_VC: "QSUB.VC",
- arm_QSUB_HI: "QSUB.HI",
- arm_QSUB_LS: "QSUB.LS",
- arm_QSUB_GE: "QSUB.GE",
- arm_QSUB_LT: "QSUB.LT",
- arm_QSUB_GT: "QSUB.GT",
- arm_QSUB_LE: "QSUB.LE",
- arm_QSUB: "QSUB",
- arm_QSUB_ZZ: "QSUB.ZZ",
- arm_QSUB16_EQ: "QSUB16.EQ",
- arm_QSUB16_NE: "QSUB16.NE",
- arm_QSUB16_CS: "QSUB16.CS",
- arm_QSUB16_CC: "QSUB16.CC",
- arm_QSUB16_MI: "QSUB16.MI",
- arm_QSUB16_PL: "QSUB16.PL",
- arm_QSUB16_VS: "QSUB16.VS",
- arm_QSUB16_VC: "QSUB16.VC",
- arm_QSUB16_HI: "QSUB16.HI",
- arm_QSUB16_LS: "QSUB16.LS",
- arm_QSUB16_GE: "QSUB16.GE",
- arm_QSUB16_LT: "QSUB16.LT",
- arm_QSUB16_GT: "QSUB16.GT",
- arm_QSUB16_LE: "QSUB16.LE",
- arm_QSUB16: "QSUB16",
- arm_QSUB16_ZZ: "QSUB16.ZZ",
- arm_QSUB8_EQ: "QSUB8.EQ",
- arm_QSUB8_NE: "QSUB8.NE",
- arm_QSUB8_CS: "QSUB8.CS",
- arm_QSUB8_CC: "QSUB8.CC",
- arm_QSUB8_MI: "QSUB8.MI",
- arm_QSUB8_PL: "QSUB8.PL",
- arm_QSUB8_VS: "QSUB8.VS",
- arm_QSUB8_VC: "QSUB8.VC",
- arm_QSUB8_HI: "QSUB8.HI",
- arm_QSUB8_LS: "QSUB8.LS",
- arm_QSUB8_GE: "QSUB8.GE",
- arm_QSUB8_LT: "QSUB8.LT",
- arm_QSUB8_GT: "QSUB8.GT",
- arm_QSUB8_LE: "QSUB8.LE",
- arm_QSUB8: "QSUB8",
- arm_QSUB8_ZZ: "QSUB8.ZZ",
- arm_RBIT_EQ: "RBIT.EQ",
- arm_RBIT_NE: "RBIT.NE",
- arm_RBIT_CS: "RBIT.CS",
- arm_RBIT_CC: "RBIT.CC",
- arm_RBIT_MI: "RBIT.MI",
- arm_RBIT_PL: "RBIT.PL",
- arm_RBIT_VS: "RBIT.VS",
- arm_RBIT_VC: "RBIT.VC",
- arm_RBIT_HI: "RBIT.HI",
- arm_RBIT_LS: "RBIT.LS",
- arm_RBIT_GE: "RBIT.GE",
- arm_RBIT_LT: "RBIT.LT",
- arm_RBIT_GT: "RBIT.GT",
- arm_RBIT_LE: "RBIT.LE",
- arm_RBIT: "RBIT",
- arm_RBIT_ZZ: "RBIT.ZZ",
- arm_REV_EQ: "REV.EQ",
- arm_REV_NE: "REV.NE",
- arm_REV_CS: "REV.CS",
- arm_REV_CC: "REV.CC",
- arm_REV_MI: "REV.MI",
- arm_REV_PL: "REV.PL",
- arm_REV_VS: "REV.VS",
- arm_REV_VC: "REV.VC",
- arm_REV_HI: "REV.HI",
- arm_REV_LS: "REV.LS",
- arm_REV_GE: "REV.GE",
- arm_REV_LT: "REV.LT",
- arm_REV_GT: "REV.GT",
- arm_REV_LE: "REV.LE",
- arm_REV: "REV",
- arm_REV_ZZ: "REV.ZZ",
- arm_REV16_EQ: "REV16.EQ",
- arm_REV16_NE: "REV16.NE",
- arm_REV16_CS: "REV16.CS",
- arm_REV16_CC: "REV16.CC",
- arm_REV16_MI: "REV16.MI",
- arm_REV16_PL: "REV16.PL",
- arm_REV16_VS: "REV16.VS",
- arm_REV16_VC: "REV16.VC",
- arm_REV16_HI: "REV16.HI",
- arm_REV16_LS: "REV16.LS",
- arm_REV16_GE: "REV16.GE",
- arm_REV16_LT: "REV16.LT",
- arm_REV16_GT: "REV16.GT",
- arm_REV16_LE: "REV16.LE",
- arm_REV16: "REV16",
- arm_REV16_ZZ: "REV16.ZZ",
- arm_REVSH_EQ: "REVSH.EQ",
- arm_REVSH_NE: "REVSH.NE",
- arm_REVSH_CS: "REVSH.CS",
- arm_REVSH_CC: "REVSH.CC",
- arm_REVSH_MI: "REVSH.MI",
- arm_REVSH_PL: "REVSH.PL",
- arm_REVSH_VS: "REVSH.VS",
- arm_REVSH_VC: "REVSH.VC",
- arm_REVSH_HI: "REVSH.HI",
- arm_REVSH_LS: "REVSH.LS",
- arm_REVSH_GE: "REVSH.GE",
- arm_REVSH_LT: "REVSH.LT",
- arm_REVSH_GT: "REVSH.GT",
- arm_REVSH_LE: "REVSH.LE",
- arm_REVSH: "REVSH",
- arm_REVSH_ZZ: "REVSH.ZZ",
- arm_ROR_EQ: "ROR.EQ",
- arm_ROR_NE: "ROR.NE",
- arm_ROR_CS: "ROR.CS",
- arm_ROR_CC: "ROR.CC",
- arm_ROR_MI: "ROR.MI",
- arm_ROR_PL: "ROR.PL",
- arm_ROR_VS: "ROR.VS",
- arm_ROR_VC: "ROR.VC",
- arm_ROR_HI: "ROR.HI",
- arm_ROR_LS: "ROR.LS",
- arm_ROR_GE: "ROR.GE",
- arm_ROR_LT: "ROR.LT",
- arm_ROR_GT: "ROR.GT",
- arm_ROR_LE: "ROR.LE",
- arm_ROR: "ROR",
- arm_ROR_ZZ: "ROR.ZZ",
- arm_ROR_S_EQ: "ROR.S.EQ",
- arm_ROR_S_NE: "ROR.S.NE",
- arm_ROR_S_CS: "ROR.S.CS",
- arm_ROR_S_CC: "ROR.S.CC",
- arm_ROR_S_MI: "ROR.S.MI",
- arm_ROR_S_PL: "ROR.S.PL",
- arm_ROR_S_VS: "ROR.S.VS",
- arm_ROR_S_VC: "ROR.S.VC",
- arm_ROR_S_HI: "ROR.S.HI",
- arm_ROR_S_LS: "ROR.S.LS",
- arm_ROR_S_GE: "ROR.S.GE",
- arm_ROR_S_LT: "ROR.S.LT",
- arm_ROR_S_GT: "ROR.S.GT",
- arm_ROR_S_LE: "ROR.S.LE",
- arm_ROR_S: "ROR.S",
- arm_ROR_S_ZZ: "ROR.S.ZZ",
- arm_RRX_EQ: "RRX.EQ",
- arm_RRX_NE: "RRX.NE",
- arm_RRX_CS: "RRX.CS",
- arm_RRX_CC: "RRX.CC",
- arm_RRX_MI: "RRX.MI",
- arm_RRX_PL: "RRX.PL",
- arm_RRX_VS: "RRX.VS",
- arm_RRX_VC: "RRX.VC",
- arm_RRX_HI: "RRX.HI",
- arm_RRX_LS: "RRX.LS",
- arm_RRX_GE: "RRX.GE",
- arm_RRX_LT: "RRX.LT",
- arm_RRX_GT: "RRX.GT",
- arm_RRX_LE: "RRX.LE",
- arm_RRX: "RRX",
- arm_RRX_ZZ: "RRX.ZZ",
- arm_RRX_S_EQ: "RRX.S.EQ",
- arm_RRX_S_NE: "RRX.S.NE",
- arm_RRX_S_CS: "RRX.S.CS",
- arm_RRX_S_CC: "RRX.S.CC",
- arm_RRX_S_MI: "RRX.S.MI",
- arm_RRX_S_PL: "RRX.S.PL",
- arm_RRX_S_VS: "RRX.S.VS",
- arm_RRX_S_VC: "RRX.S.VC",
- arm_RRX_S_HI: "RRX.S.HI",
- arm_RRX_S_LS: "RRX.S.LS",
- arm_RRX_S_GE: "RRX.S.GE",
- arm_RRX_S_LT: "RRX.S.LT",
- arm_RRX_S_GT: "RRX.S.GT",
- arm_RRX_S_LE: "RRX.S.LE",
- arm_RRX_S: "RRX.S",
- arm_RRX_S_ZZ: "RRX.S.ZZ",
- arm_RSB_EQ: "RSB.EQ",
- arm_RSB_NE: "RSB.NE",
- arm_RSB_CS: "RSB.CS",
- arm_RSB_CC: "RSB.CC",
- arm_RSB_MI: "RSB.MI",
- arm_RSB_PL: "RSB.PL",
- arm_RSB_VS: "RSB.VS",
- arm_RSB_VC: "RSB.VC",
- arm_RSB_HI: "RSB.HI",
- arm_RSB_LS: "RSB.LS",
- arm_RSB_GE: "RSB.GE",
- arm_RSB_LT: "RSB.LT",
- arm_RSB_GT: "RSB.GT",
- arm_RSB_LE: "RSB.LE",
- arm_RSB: "RSB",
- arm_RSB_ZZ: "RSB.ZZ",
- arm_RSB_S_EQ: "RSB.S.EQ",
- arm_RSB_S_NE: "RSB.S.NE",
- arm_RSB_S_CS: "RSB.S.CS",
- arm_RSB_S_CC: "RSB.S.CC",
- arm_RSB_S_MI: "RSB.S.MI",
- arm_RSB_S_PL: "RSB.S.PL",
- arm_RSB_S_VS: "RSB.S.VS",
- arm_RSB_S_VC: "RSB.S.VC",
- arm_RSB_S_HI: "RSB.S.HI",
- arm_RSB_S_LS: "RSB.S.LS",
- arm_RSB_S_GE: "RSB.S.GE",
- arm_RSB_S_LT: "RSB.S.LT",
- arm_RSB_S_GT: "RSB.S.GT",
- arm_RSB_S_LE: "RSB.S.LE",
- arm_RSB_S: "RSB.S",
- arm_RSB_S_ZZ: "RSB.S.ZZ",
- arm_RSC_EQ: "RSC.EQ",
- arm_RSC_NE: "RSC.NE",
- arm_RSC_CS: "RSC.CS",
- arm_RSC_CC: "RSC.CC",
- arm_RSC_MI: "RSC.MI",
- arm_RSC_PL: "RSC.PL",
- arm_RSC_VS: "RSC.VS",
- arm_RSC_VC: "RSC.VC",
- arm_RSC_HI: "RSC.HI",
- arm_RSC_LS: "RSC.LS",
- arm_RSC_GE: "RSC.GE",
- arm_RSC_LT: "RSC.LT",
- arm_RSC_GT: "RSC.GT",
- arm_RSC_LE: "RSC.LE",
- arm_RSC: "RSC",
- arm_RSC_ZZ: "RSC.ZZ",
- arm_RSC_S_EQ: "RSC.S.EQ",
- arm_RSC_S_NE: "RSC.S.NE",
- arm_RSC_S_CS: "RSC.S.CS",
- arm_RSC_S_CC: "RSC.S.CC",
- arm_RSC_S_MI: "RSC.S.MI",
- arm_RSC_S_PL: "RSC.S.PL",
- arm_RSC_S_VS: "RSC.S.VS",
- arm_RSC_S_VC: "RSC.S.VC",
- arm_RSC_S_HI: "RSC.S.HI",
- arm_RSC_S_LS: "RSC.S.LS",
- arm_RSC_S_GE: "RSC.S.GE",
- arm_RSC_S_LT: "RSC.S.LT",
- arm_RSC_S_GT: "RSC.S.GT",
- arm_RSC_S_LE: "RSC.S.LE",
- arm_RSC_S: "RSC.S",
- arm_RSC_S_ZZ: "RSC.S.ZZ",
- arm_SADD16_EQ: "SADD16.EQ",
- arm_SADD16_NE: "SADD16.NE",
- arm_SADD16_CS: "SADD16.CS",
- arm_SADD16_CC: "SADD16.CC",
- arm_SADD16_MI: "SADD16.MI",
- arm_SADD16_PL: "SADD16.PL",
- arm_SADD16_VS: "SADD16.VS",
- arm_SADD16_VC: "SADD16.VC",
- arm_SADD16_HI: "SADD16.HI",
- arm_SADD16_LS: "SADD16.LS",
- arm_SADD16_GE: "SADD16.GE",
- arm_SADD16_LT: "SADD16.LT",
- arm_SADD16_GT: "SADD16.GT",
- arm_SADD16_LE: "SADD16.LE",
- arm_SADD16: "SADD16",
- arm_SADD16_ZZ: "SADD16.ZZ",
- arm_SADD8_EQ: "SADD8.EQ",
- arm_SADD8_NE: "SADD8.NE",
- arm_SADD8_CS: "SADD8.CS",
- arm_SADD8_CC: "SADD8.CC",
- arm_SADD8_MI: "SADD8.MI",
- arm_SADD8_PL: "SADD8.PL",
- arm_SADD8_VS: "SADD8.VS",
- arm_SADD8_VC: "SADD8.VC",
- arm_SADD8_HI: "SADD8.HI",
- arm_SADD8_LS: "SADD8.LS",
- arm_SADD8_GE: "SADD8.GE",
- arm_SADD8_LT: "SADD8.LT",
- arm_SADD8_GT: "SADD8.GT",
- arm_SADD8_LE: "SADD8.LE",
- arm_SADD8: "SADD8",
- arm_SADD8_ZZ: "SADD8.ZZ",
- arm_SASX_EQ: "SASX.EQ",
- arm_SASX_NE: "SASX.NE",
- arm_SASX_CS: "SASX.CS",
- arm_SASX_CC: "SASX.CC",
- arm_SASX_MI: "SASX.MI",
- arm_SASX_PL: "SASX.PL",
- arm_SASX_VS: "SASX.VS",
- arm_SASX_VC: "SASX.VC",
- arm_SASX_HI: "SASX.HI",
- arm_SASX_LS: "SASX.LS",
- arm_SASX_GE: "SASX.GE",
- arm_SASX_LT: "SASX.LT",
- arm_SASX_GT: "SASX.GT",
- arm_SASX_LE: "SASX.LE",
- arm_SASX: "SASX",
- arm_SASX_ZZ: "SASX.ZZ",
- arm_SBC_EQ: "SBC.EQ",
- arm_SBC_NE: "SBC.NE",
- arm_SBC_CS: "SBC.CS",
- arm_SBC_CC: "SBC.CC",
- arm_SBC_MI: "SBC.MI",
- arm_SBC_PL: "SBC.PL",
- arm_SBC_VS: "SBC.VS",
- arm_SBC_VC: "SBC.VC",
- arm_SBC_HI: "SBC.HI",
- arm_SBC_LS: "SBC.LS",
- arm_SBC_GE: "SBC.GE",
- arm_SBC_LT: "SBC.LT",
- arm_SBC_GT: "SBC.GT",
- arm_SBC_LE: "SBC.LE",
- arm_SBC: "SBC",
- arm_SBC_ZZ: "SBC.ZZ",
- arm_SBC_S_EQ: "SBC.S.EQ",
- arm_SBC_S_NE: "SBC.S.NE",
- arm_SBC_S_CS: "SBC.S.CS",
- arm_SBC_S_CC: "SBC.S.CC",
- arm_SBC_S_MI: "SBC.S.MI",
- arm_SBC_S_PL: "SBC.S.PL",
- arm_SBC_S_VS: "SBC.S.VS",
- arm_SBC_S_VC: "SBC.S.VC",
- arm_SBC_S_HI: "SBC.S.HI",
- arm_SBC_S_LS: "SBC.S.LS",
- arm_SBC_S_GE: "SBC.S.GE",
- arm_SBC_S_LT: "SBC.S.LT",
- arm_SBC_S_GT: "SBC.S.GT",
- arm_SBC_S_LE: "SBC.S.LE",
- arm_SBC_S: "SBC.S",
- arm_SBC_S_ZZ: "SBC.S.ZZ",
- arm_SBFX_EQ: "SBFX.EQ",
- arm_SBFX_NE: "SBFX.NE",
- arm_SBFX_CS: "SBFX.CS",
- arm_SBFX_CC: "SBFX.CC",
- arm_SBFX_MI: "SBFX.MI",
- arm_SBFX_PL: "SBFX.PL",
- arm_SBFX_VS: "SBFX.VS",
- arm_SBFX_VC: "SBFX.VC",
- arm_SBFX_HI: "SBFX.HI",
- arm_SBFX_LS: "SBFX.LS",
- arm_SBFX_GE: "SBFX.GE",
- arm_SBFX_LT: "SBFX.LT",
- arm_SBFX_GT: "SBFX.GT",
- arm_SBFX_LE: "SBFX.LE",
- arm_SBFX: "SBFX",
- arm_SBFX_ZZ: "SBFX.ZZ",
- arm_SEL_EQ: "SEL.EQ",
- arm_SEL_NE: "SEL.NE",
- arm_SEL_CS: "SEL.CS",
- arm_SEL_CC: "SEL.CC",
- arm_SEL_MI: "SEL.MI",
- arm_SEL_PL: "SEL.PL",
- arm_SEL_VS: "SEL.VS",
- arm_SEL_VC: "SEL.VC",
- arm_SEL_HI: "SEL.HI",
- arm_SEL_LS: "SEL.LS",
- arm_SEL_GE: "SEL.GE",
- arm_SEL_LT: "SEL.LT",
- arm_SEL_GT: "SEL.GT",
- arm_SEL_LE: "SEL.LE",
- arm_SEL: "SEL",
- arm_SEL_ZZ: "SEL.ZZ",
- arm_SETEND: "SETEND",
- arm_SEV_EQ: "SEV.EQ",
- arm_SEV_NE: "SEV.NE",
- arm_SEV_CS: "SEV.CS",
- arm_SEV_CC: "SEV.CC",
- arm_SEV_MI: "SEV.MI",
- arm_SEV_PL: "SEV.PL",
- arm_SEV_VS: "SEV.VS",
- arm_SEV_VC: "SEV.VC",
- arm_SEV_HI: "SEV.HI",
- arm_SEV_LS: "SEV.LS",
- arm_SEV_GE: "SEV.GE",
- arm_SEV_LT: "SEV.LT",
- arm_SEV_GT: "SEV.GT",
- arm_SEV_LE: "SEV.LE",
- arm_SEV: "SEV",
- arm_SEV_ZZ: "SEV.ZZ",
- arm_SHADD16_EQ: "SHADD16.EQ",
- arm_SHADD16_NE: "SHADD16.NE",
- arm_SHADD16_CS: "SHADD16.CS",
- arm_SHADD16_CC: "SHADD16.CC",
- arm_SHADD16_MI: "SHADD16.MI",
- arm_SHADD16_PL: "SHADD16.PL",
- arm_SHADD16_VS: "SHADD16.VS",
- arm_SHADD16_VC: "SHADD16.VC",
- arm_SHADD16_HI: "SHADD16.HI",
- arm_SHADD16_LS: "SHADD16.LS",
- arm_SHADD16_GE: "SHADD16.GE",
- arm_SHADD16_LT: "SHADD16.LT",
- arm_SHADD16_GT: "SHADD16.GT",
- arm_SHADD16_LE: "SHADD16.LE",
- arm_SHADD16: "SHADD16",
- arm_SHADD16_ZZ: "SHADD16.ZZ",
- arm_SHADD8_EQ: "SHADD8.EQ",
- arm_SHADD8_NE: "SHADD8.NE",
- arm_SHADD8_CS: "SHADD8.CS",
- arm_SHADD8_CC: "SHADD8.CC",
- arm_SHADD8_MI: "SHADD8.MI",
- arm_SHADD8_PL: "SHADD8.PL",
- arm_SHADD8_VS: "SHADD8.VS",
- arm_SHADD8_VC: "SHADD8.VC",
- arm_SHADD8_HI: "SHADD8.HI",
- arm_SHADD8_LS: "SHADD8.LS",
- arm_SHADD8_GE: "SHADD8.GE",
- arm_SHADD8_LT: "SHADD8.LT",
- arm_SHADD8_GT: "SHADD8.GT",
- arm_SHADD8_LE: "SHADD8.LE",
- arm_SHADD8: "SHADD8",
- arm_SHADD8_ZZ: "SHADD8.ZZ",
- arm_SHASX_EQ: "SHASX.EQ",
- arm_SHASX_NE: "SHASX.NE",
- arm_SHASX_CS: "SHASX.CS",
- arm_SHASX_CC: "SHASX.CC",
- arm_SHASX_MI: "SHASX.MI",
- arm_SHASX_PL: "SHASX.PL",
- arm_SHASX_VS: "SHASX.VS",
- arm_SHASX_VC: "SHASX.VC",
- arm_SHASX_HI: "SHASX.HI",
- arm_SHASX_LS: "SHASX.LS",
- arm_SHASX_GE: "SHASX.GE",
- arm_SHASX_LT: "SHASX.LT",
- arm_SHASX_GT: "SHASX.GT",
- arm_SHASX_LE: "SHASX.LE",
- arm_SHASX: "SHASX",
- arm_SHASX_ZZ: "SHASX.ZZ",
- arm_SHSAX_EQ: "SHSAX.EQ",
- arm_SHSAX_NE: "SHSAX.NE",
- arm_SHSAX_CS: "SHSAX.CS",
- arm_SHSAX_CC: "SHSAX.CC",
- arm_SHSAX_MI: "SHSAX.MI",
- arm_SHSAX_PL: "SHSAX.PL",
- arm_SHSAX_VS: "SHSAX.VS",
- arm_SHSAX_VC: "SHSAX.VC",
- arm_SHSAX_HI: "SHSAX.HI",
- arm_SHSAX_LS: "SHSAX.LS",
- arm_SHSAX_GE: "SHSAX.GE",
- arm_SHSAX_LT: "SHSAX.LT",
- arm_SHSAX_GT: "SHSAX.GT",
- arm_SHSAX_LE: "SHSAX.LE",
- arm_SHSAX: "SHSAX",
- arm_SHSAX_ZZ: "SHSAX.ZZ",
- arm_SHSUB16_EQ: "SHSUB16.EQ",
- arm_SHSUB16_NE: "SHSUB16.NE",
- arm_SHSUB16_CS: "SHSUB16.CS",
- arm_SHSUB16_CC: "SHSUB16.CC",
- arm_SHSUB16_MI: "SHSUB16.MI",
- arm_SHSUB16_PL: "SHSUB16.PL",
- arm_SHSUB16_VS: "SHSUB16.VS",
- arm_SHSUB16_VC: "SHSUB16.VC",
- arm_SHSUB16_HI: "SHSUB16.HI",
- arm_SHSUB16_LS: "SHSUB16.LS",
- arm_SHSUB16_GE: "SHSUB16.GE",
- arm_SHSUB16_LT: "SHSUB16.LT",
- arm_SHSUB16_GT: "SHSUB16.GT",
- arm_SHSUB16_LE: "SHSUB16.LE",
- arm_SHSUB16: "SHSUB16",
- arm_SHSUB16_ZZ: "SHSUB16.ZZ",
- arm_SHSUB8_EQ: "SHSUB8.EQ",
- arm_SHSUB8_NE: "SHSUB8.NE",
- arm_SHSUB8_CS: "SHSUB8.CS",
- arm_SHSUB8_CC: "SHSUB8.CC",
- arm_SHSUB8_MI: "SHSUB8.MI",
- arm_SHSUB8_PL: "SHSUB8.PL",
- arm_SHSUB8_VS: "SHSUB8.VS",
- arm_SHSUB8_VC: "SHSUB8.VC",
- arm_SHSUB8_HI: "SHSUB8.HI",
- arm_SHSUB8_LS: "SHSUB8.LS",
- arm_SHSUB8_GE: "SHSUB8.GE",
- arm_SHSUB8_LT: "SHSUB8.LT",
- arm_SHSUB8_GT: "SHSUB8.GT",
- arm_SHSUB8_LE: "SHSUB8.LE",
- arm_SHSUB8: "SHSUB8",
- arm_SHSUB8_ZZ: "SHSUB8.ZZ",
- arm_SMLABB_EQ: "SMLABB.EQ",
- arm_SMLABB_NE: "SMLABB.NE",
- arm_SMLABB_CS: "SMLABB.CS",
- arm_SMLABB_CC: "SMLABB.CC",
- arm_SMLABB_MI: "SMLABB.MI",
- arm_SMLABB_PL: "SMLABB.PL",
- arm_SMLABB_VS: "SMLABB.VS",
- arm_SMLABB_VC: "SMLABB.VC",
- arm_SMLABB_HI: "SMLABB.HI",
- arm_SMLABB_LS: "SMLABB.LS",
- arm_SMLABB_GE: "SMLABB.GE",
- arm_SMLABB_LT: "SMLABB.LT",
- arm_SMLABB_GT: "SMLABB.GT",
- arm_SMLABB_LE: "SMLABB.LE",
- arm_SMLABB: "SMLABB",
- arm_SMLABB_ZZ: "SMLABB.ZZ",
- arm_SMLABT_EQ: "SMLABT.EQ",
- arm_SMLABT_NE: "SMLABT.NE",
- arm_SMLABT_CS: "SMLABT.CS",
- arm_SMLABT_CC: "SMLABT.CC",
- arm_SMLABT_MI: "SMLABT.MI",
- arm_SMLABT_PL: "SMLABT.PL",
- arm_SMLABT_VS: "SMLABT.VS",
- arm_SMLABT_VC: "SMLABT.VC",
- arm_SMLABT_HI: "SMLABT.HI",
- arm_SMLABT_LS: "SMLABT.LS",
- arm_SMLABT_GE: "SMLABT.GE",
- arm_SMLABT_LT: "SMLABT.LT",
- arm_SMLABT_GT: "SMLABT.GT",
- arm_SMLABT_LE: "SMLABT.LE",
- arm_SMLABT: "SMLABT",
- arm_SMLABT_ZZ: "SMLABT.ZZ",
- arm_SMLATB_EQ: "SMLATB.EQ",
- arm_SMLATB_NE: "SMLATB.NE",
- arm_SMLATB_CS: "SMLATB.CS",
- arm_SMLATB_CC: "SMLATB.CC",
- arm_SMLATB_MI: "SMLATB.MI",
- arm_SMLATB_PL: "SMLATB.PL",
- arm_SMLATB_VS: "SMLATB.VS",
- arm_SMLATB_VC: "SMLATB.VC",
- arm_SMLATB_HI: "SMLATB.HI",
- arm_SMLATB_LS: "SMLATB.LS",
- arm_SMLATB_GE: "SMLATB.GE",
- arm_SMLATB_LT: "SMLATB.LT",
- arm_SMLATB_GT: "SMLATB.GT",
- arm_SMLATB_LE: "SMLATB.LE",
- arm_SMLATB: "SMLATB",
- arm_SMLATB_ZZ: "SMLATB.ZZ",
- arm_SMLATT_EQ: "SMLATT.EQ",
- arm_SMLATT_NE: "SMLATT.NE",
- arm_SMLATT_CS: "SMLATT.CS",
- arm_SMLATT_CC: "SMLATT.CC",
- arm_SMLATT_MI: "SMLATT.MI",
- arm_SMLATT_PL: "SMLATT.PL",
- arm_SMLATT_VS: "SMLATT.VS",
- arm_SMLATT_VC: "SMLATT.VC",
- arm_SMLATT_HI: "SMLATT.HI",
- arm_SMLATT_LS: "SMLATT.LS",
- arm_SMLATT_GE: "SMLATT.GE",
- arm_SMLATT_LT: "SMLATT.LT",
- arm_SMLATT_GT: "SMLATT.GT",
- arm_SMLATT_LE: "SMLATT.LE",
- arm_SMLATT: "SMLATT",
- arm_SMLATT_ZZ: "SMLATT.ZZ",
- arm_SMLAD_EQ: "SMLAD.EQ",
- arm_SMLAD_NE: "SMLAD.NE",
- arm_SMLAD_CS: "SMLAD.CS",
- arm_SMLAD_CC: "SMLAD.CC",
- arm_SMLAD_MI: "SMLAD.MI",
- arm_SMLAD_PL: "SMLAD.PL",
- arm_SMLAD_VS: "SMLAD.VS",
- arm_SMLAD_VC: "SMLAD.VC",
- arm_SMLAD_HI: "SMLAD.HI",
- arm_SMLAD_LS: "SMLAD.LS",
- arm_SMLAD_GE: "SMLAD.GE",
- arm_SMLAD_LT: "SMLAD.LT",
- arm_SMLAD_GT: "SMLAD.GT",
- arm_SMLAD_LE: "SMLAD.LE",
- arm_SMLAD: "SMLAD",
- arm_SMLAD_ZZ: "SMLAD.ZZ",
- arm_SMLAD_X_EQ: "SMLAD.X.EQ",
- arm_SMLAD_X_NE: "SMLAD.X.NE",
- arm_SMLAD_X_CS: "SMLAD.X.CS",
- arm_SMLAD_X_CC: "SMLAD.X.CC",
- arm_SMLAD_X_MI: "SMLAD.X.MI",
- arm_SMLAD_X_PL: "SMLAD.X.PL",
- arm_SMLAD_X_VS: "SMLAD.X.VS",
- arm_SMLAD_X_VC: "SMLAD.X.VC",
- arm_SMLAD_X_HI: "SMLAD.X.HI",
- arm_SMLAD_X_LS: "SMLAD.X.LS",
- arm_SMLAD_X_GE: "SMLAD.X.GE",
- arm_SMLAD_X_LT: "SMLAD.X.LT",
- arm_SMLAD_X_GT: "SMLAD.X.GT",
- arm_SMLAD_X_LE: "SMLAD.X.LE",
- arm_SMLAD_X: "SMLAD.X",
- arm_SMLAD_X_ZZ: "SMLAD.X.ZZ",
- arm_SMLAL_EQ: "SMLAL.EQ",
- arm_SMLAL_NE: "SMLAL.NE",
- arm_SMLAL_CS: "SMLAL.CS",
- arm_SMLAL_CC: "SMLAL.CC",
- arm_SMLAL_MI: "SMLAL.MI",
- arm_SMLAL_PL: "SMLAL.PL",
- arm_SMLAL_VS: "SMLAL.VS",
- arm_SMLAL_VC: "SMLAL.VC",
- arm_SMLAL_HI: "SMLAL.HI",
- arm_SMLAL_LS: "SMLAL.LS",
- arm_SMLAL_GE: "SMLAL.GE",
- arm_SMLAL_LT: "SMLAL.LT",
- arm_SMLAL_GT: "SMLAL.GT",
- arm_SMLAL_LE: "SMLAL.LE",
- arm_SMLAL: "SMLAL",
- arm_SMLAL_ZZ: "SMLAL.ZZ",
- arm_SMLAL_S_EQ: "SMLAL.S.EQ",
- arm_SMLAL_S_NE: "SMLAL.S.NE",
- arm_SMLAL_S_CS: "SMLAL.S.CS",
- arm_SMLAL_S_CC: "SMLAL.S.CC",
- arm_SMLAL_S_MI: "SMLAL.S.MI",
- arm_SMLAL_S_PL: "SMLAL.S.PL",
- arm_SMLAL_S_VS: "SMLAL.S.VS",
- arm_SMLAL_S_VC: "SMLAL.S.VC",
- arm_SMLAL_S_HI: "SMLAL.S.HI",
- arm_SMLAL_S_LS: "SMLAL.S.LS",
- arm_SMLAL_S_GE: "SMLAL.S.GE",
- arm_SMLAL_S_LT: "SMLAL.S.LT",
- arm_SMLAL_S_GT: "SMLAL.S.GT",
- arm_SMLAL_S_LE: "SMLAL.S.LE",
- arm_SMLAL_S: "SMLAL.S",
- arm_SMLAL_S_ZZ: "SMLAL.S.ZZ",
- arm_SMLALBB_EQ: "SMLALBB.EQ",
- arm_SMLALBB_NE: "SMLALBB.NE",
- arm_SMLALBB_CS: "SMLALBB.CS",
- arm_SMLALBB_CC: "SMLALBB.CC",
- arm_SMLALBB_MI: "SMLALBB.MI",
- arm_SMLALBB_PL: "SMLALBB.PL",
- arm_SMLALBB_VS: "SMLALBB.VS",
- arm_SMLALBB_VC: "SMLALBB.VC",
- arm_SMLALBB_HI: "SMLALBB.HI",
- arm_SMLALBB_LS: "SMLALBB.LS",
- arm_SMLALBB_GE: "SMLALBB.GE",
- arm_SMLALBB_LT: "SMLALBB.LT",
- arm_SMLALBB_GT: "SMLALBB.GT",
- arm_SMLALBB_LE: "SMLALBB.LE",
- arm_SMLALBB: "SMLALBB",
- arm_SMLALBB_ZZ: "SMLALBB.ZZ",
- arm_SMLALBT_EQ: "SMLALBT.EQ",
- arm_SMLALBT_NE: "SMLALBT.NE",
- arm_SMLALBT_CS: "SMLALBT.CS",
- arm_SMLALBT_CC: "SMLALBT.CC",
- arm_SMLALBT_MI: "SMLALBT.MI",
- arm_SMLALBT_PL: "SMLALBT.PL",
- arm_SMLALBT_VS: "SMLALBT.VS",
- arm_SMLALBT_VC: "SMLALBT.VC",
- arm_SMLALBT_HI: "SMLALBT.HI",
- arm_SMLALBT_LS: "SMLALBT.LS",
- arm_SMLALBT_GE: "SMLALBT.GE",
- arm_SMLALBT_LT: "SMLALBT.LT",
- arm_SMLALBT_GT: "SMLALBT.GT",
- arm_SMLALBT_LE: "SMLALBT.LE",
- arm_SMLALBT: "SMLALBT",
- arm_SMLALBT_ZZ: "SMLALBT.ZZ",
- arm_SMLALTB_EQ: "SMLALTB.EQ",
- arm_SMLALTB_NE: "SMLALTB.NE",
- arm_SMLALTB_CS: "SMLALTB.CS",
- arm_SMLALTB_CC: "SMLALTB.CC",
- arm_SMLALTB_MI: "SMLALTB.MI",
- arm_SMLALTB_PL: "SMLALTB.PL",
- arm_SMLALTB_VS: "SMLALTB.VS",
- arm_SMLALTB_VC: "SMLALTB.VC",
- arm_SMLALTB_HI: "SMLALTB.HI",
- arm_SMLALTB_LS: "SMLALTB.LS",
- arm_SMLALTB_GE: "SMLALTB.GE",
- arm_SMLALTB_LT: "SMLALTB.LT",
- arm_SMLALTB_GT: "SMLALTB.GT",
- arm_SMLALTB_LE: "SMLALTB.LE",
- arm_SMLALTB: "SMLALTB",
- arm_SMLALTB_ZZ: "SMLALTB.ZZ",
- arm_SMLALTT_EQ: "SMLALTT.EQ",
- arm_SMLALTT_NE: "SMLALTT.NE",
- arm_SMLALTT_CS: "SMLALTT.CS",
- arm_SMLALTT_CC: "SMLALTT.CC",
- arm_SMLALTT_MI: "SMLALTT.MI",
- arm_SMLALTT_PL: "SMLALTT.PL",
- arm_SMLALTT_VS: "SMLALTT.VS",
- arm_SMLALTT_VC: "SMLALTT.VC",
- arm_SMLALTT_HI: "SMLALTT.HI",
- arm_SMLALTT_LS: "SMLALTT.LS",
- arm_SMLALTT_GE: "SMLALTT.GE",
- arm_SMLALTT_LT: "SMLALTT.LT",
- arm_SMLALTT_GT: "SMLALTT.GT",
- arm_SMLALTT_LE: "SMLALTT.LE",
- arm_SMLALTT: "SMLALTT",
- arm_SMLALTT_ZZ: "SMLALTT.ZZ",
- arm_SMLALD_EQ: "SMLALD.EQ",
- arm_SMLALD_NE: "SMLALD.NE",
- arm_SMLALD_CS: "SMLALD.CS",
- arm_SMLALD_CC: "SMLALD.CC",
- arm_SMLALD_MI: "SMLALD.MI",
- arm_SMLALD_PL: "SMLALD.PL",
- arm_SMLALD_VS: "SMLALD.VS",
- arm_SMLALD_VC: "SMLALD.VC",
- arm_SMLALD_HI: "SMLALD.HI",
- arm_SMLALD_LS: "SMLALD.LS",
- arm_SMLALD_GE: "SMLALD.GE",
- arm_SMLALD_LT: "SMLALD.LT",
- arm_SMLALD_GT: "SMLALD.GT",
- arm_SMLALD_LE: "SMLALD.LE",
- arm_SMLALD: "SMLALD",
- arm_SMLALD_ZZ: "SMLALD.ZZ",
- arm_SMLALD_X_EQ: "SMLALD.X.EQ",
- arm_SMLALD_X_NE: "SMLALD.X.NE",
- arm_SMLALD_X_CS: "SMLALD.X.CS",
- arm_SMLALD_X_CC: "SMLALD.X.CC",
- arm_SMLALD_X_MI: "SMLALD.X.MI",
- arm_SMLALD_X_PL: "SMLALD.X.PL",
- arm_SMLALD_X_VS: "SMLALD.X.VS",
- arm_SMLALD_X_VC: "SMLALD.X.VC",
- arm_SMLALD_X_HI: "SMLALD.X.HI",
- arm_SMLALD_X_LS: "SMLALD.X.LS",
- arm_SMLALD_X_GE: "SMLALD.X.GE",
- arm_SMLALD_X_LT: "SMLALD.X.LT",
- arm_SMLALD_X_GT: "SMLALD.X.GT",
- arm_SMLALD_X_LE: "SMLALD.X.LE",
- arm_SMLALD_X: "SMLALD.X",
- arm_SMLALD_X_ZZ: "SMLALD.X.ZZ",
- arm_SMLAWB_EQ: "SMLAWB.EQ",
- arm_SMLAWB_NE: "SMLAWB.NE",
- arm_SMLAWB_CS: "SMLAWB.CS",
- arm_SMLAWB_CC: "SMLAWB.CC",
- arm_SMLAWB_MI: "SMLAWB.MI",
- arm_SMLAWB_PL: "SMLAWB.PL",
- arm_SMLAWB_VS: "SMLAWB.VS",
- arm_SMLAWB_VC: "SMLAWB.VC",
- arm_SMLAWB_HI: "SMLAWB.HI",
- arm_SMLAWB_LS: "SMLAWB.LS",
- arm_SMLAWB_GE: "SMLAWB.GE",
- arm_SMLAWB_LT: "SMLAWB.LT",
- arm_SMLAWB_GT: "SMLAWB.GT",
- arm_SMLAWB_LE: "SMLAWB.LE",
- arm_SMLAWB: "SMLAWB",
- arm_SMLAWB_ZZ: "SMLAWB.ZZ",
- arm_SMLAWT_EQ: "SMLAWT.EQ",
- arm_SMLAWT_NE: "SMLAWT.NE",
- arm_SMLAWT_CS: "SMLAWT.CS",
- arm_SMLAWT_CC: "SMLAWT.CC",
- arm_SMLAWT_MI: "SMLAWT.MI",
- arm_SMLAWT_PL: "SMLAWT.PL",
- arm_SMLAWT_VS: "SMLAWT.VS",
- arm_SMLAWT_VC: "SMLAWT.VC",
- arm_SMLAWT_HI: "SMLAWT.HI",
- arm_SMLAWT_LS: "SMLAWT.LS",
- arm_SMLAWT_GE: "SMLAWT.GE",
- arm_SMLAWT_LT: "SMLAWT.LT",
- arm_SMLAWT_GT: "SMLAWT.GT",
- arm_SMLAWT_LE: "SMLAWT.LE",
- arm_SMLAWT: "SMLAWT",
- arm_SMLAWT_ZZ: "SMLAWT.ZZ",
- arm_SMLSD_EQ: "SMLSD.EQ",
- arm_SMLSD_NE: "SMLSD.NE",
- arm_SMLSD_CS: "SMLSD.CS",
- arm_SMLSD_CC: "SMLSD.CC",
- arm_SMLSD_MI: "SMLSD.MI",
- arm_SMLSD_PL: "SMLSD.PL",
- arm_SMLSD_VS: "SMLSD.VS",
- arm_SMLSD_VC: "SMLSD.VC",
- arm_SMLSD_HI: "SMLSD.HI",
- arm_SMLSD_LS: "SMLSD.LS",
- arm_SMLSD_GE: "SMLSD.GE",
- arm_SMLSD_LT: "SMLSD.LT",
- arm_SMLSD_GT: "SMLSD.GT",
- arm_SMLSD_LE: "SMLSD.LE",
- arm_SMLSD: "SMLSD",
- arm_SMLSD_ZZ: "SMLSD.ZZ",
- arm_SMLSD_X_EQ: "SMLSD.X.EQ",
- arm_SMLSD_X_NE: "SMLSD.X.NE",
- arm_SMLSD_X_CS: "SMLSD.X.CS",
- arm_SMLSD_X_CC: "SMLSD.X.CC",
- arm_SMLSD_X_MI: "SMLSD.X.MI",
- arm_SMLSD_X_PL: "SMLSD.X.PL",
- arm_SMLSD_X_VS: "SMLSD.X.VS",
- arm_SMLSD_X_VC: "SMLSD.X.VC",
- arm_SMLSD_X_HI: "SMLSD.X.HI",
- arm_SMLSD_X_LS: "SMLSD.X.LS",
- arm_SMLSD_X_GE: "SMLSD.X.GE",
- arm_SMLSD_X_LT: "SMLSD.X.LT",
- arm_SMLSD_X_GT: "SMLSD.X.GT",
- arm_SMLSD_X_LE: "SMLSD.X.LE",
- arm_SMLSD_X: "SMLSD.X",
- arm_SMLSD_X_ZZ: "SMLSD.X.ZZ",
- arm_SMLSLD_EQ: "SMLSLD.EQ",
- arm_SMLSLD_NE: "SMLSLD.NE",
- arm_SMLSLD_CS: "SMLSLD.CS",
- arm_SMLSLD_CC: "SMLSLD.CC",
- arm_SMLSLD_MI: "SMLSLD.MI",
- arm_SMLSLD_PL: "SMLSLD.PL",
- arm_SMLSLD_VS: "SMLSLD.VS",
- arm_SMLSLD_VC: "SMLSLD.VC",
- arm_SMLSLD_HI: "SMLSLD.HI",
- arm_SMLSLD_LS: "SMLSLD.LS",
- arm_SMLSLD_GE: "SMLSLD.GE",
- arm_SMLSLD_LT: "SMLSLD.LT",
- arm_SMLSLD_GT: "SMLSLD.GT",
- arm_SMLSLD_LE: "SMLSLD.LE",
- arm_SMLSLD: "SMLSLD",
- arm_SMLSLD_ZZ: "SMLSLD.ZZ",
- arm_SMLSLD_X_EQ: "SMLSLD.X.EQ",
- arm_SMLSLD_X_NE: "SMLSLD.X.NE",
- arm_SMLSLD_X_CS: "SMLSLD.X.CS",
- arm_SMLSLD_X_CC: "SMLSLD.X.CC",
- arm_SMLSLD_X_MI: "SMLSLD.X.MI",
- arm_SMLSLD_X_PL: "SMLSLD.X.PL",
- arm_SMLSLD_X_VS: "SMLSLD.X.VS",
- arm_SMLSLD_X_VC: "SMLSLD.X.VC",
- arm_SMLSLD_X_HI: "SMLSLD.X.HI",
- arm_SMLSLD_X_LS: "SMLSLD.X.LS",
- arm_SMLSLD_X_GE: "SMLSLD.X.GE",
- arm_SMLSLD_X_LT: "SMLSLD.X.LT",
- arm_SMLSLD_X_GT: "SMLSLD.X.GT",
- arm_SMLSLD_X_LE: "SMLSLD.X.LE",
- arm_SMLSLD_X: "SMLSLD.X",
- arm_SMLSLD_X_ZZ: "SMLSLD.X.ZZ",
- arm_SMMLA_EQ: "SMMLA.EQ",
- arm_SMMLA_NE: "SMMLA.NE",
- arm_SMMLA_CS: "SMMLA.CS",
- arm_SMMLA_CC: "SMMLA.CC",
- arm_SMMLA_MI: "SMMLA.MI",
- arm_SMMLA_PL: "SMMLA.PL",
- arm_SMMLA_VS: "SMMLA.VS",
- arm_SMMLA_VC: "SMMLA.VC",
- arm_SMMLA_HI: "SMMLA.HI",
- arm_SMMLA_LS: "SMMLA.LS",
- arm_SMMLA_GE: "SMMLA.GE",
- arm_SMMLA_LT: "SMMLA.LT",
- arm_SMMLA_GT: "SMMLA.GT",
- arm_SMMLA_LE: "SMMLA.LE",
- arm_SMMLA: "SMMLA",
- arm_SMMLA_ZZ: "SMMLA.ZZ",
- arm_SMMLA_R_EQ: "SMMLA.R.EQ",
- arm_SMMLA_R_NE: "SMMLA.R.NE",
- arm_SMMLA_R_CS: "SMMLA.R.CS",
- arm_SMMLA_R_CC: "SMMLA.R.CC",
- arm_SMMLA_R_MI: "SMMLA.R.MI",
- arm_SMMLA_R_PL: "SMMLA.R.PL",
- arm_SMMLA_R_VS: "SMMLA.R.VS",
- arm_SMMLA_R_VC: "SMMLA.R.VC",
- arm_SMMLA_R_HI: "SMMLA.R.HI",
- arm_SMMLA_R_LS: "SMMLA.R.LS",
- arm_SMMLA_R_GE: "SMMLA.R.GE",
- arm_SMMLA_R_LT: "SMMLA.R.LT",
- arm_SMMLA_R_GT: "SMMLA.R.GT",
- arm_SMMLA_R_LE: "SMMLA.R.LE",
- arm_SMMLA_R: "SMMLA.R",
- arm_SMMLA_R_ZZ: "SMMLA.R.ZZ",
- arm_SMMLS_EQ: "SMMLS.EQ",
- arm_SMMLS_NE: "SMMLS.NE",
- arm_SMMLS_CS: "SMMLS.CS",
- arm_SMMLS_CC: "SMMLS.CC",
- arm_SMMLS_MI: "SMMLS.MI",
- arm_SMMLS_PL: "SMMLS.PL",
- arm_SMMLS_VS: "SMMLS.VS",
- arm_SMMLS_VC: "SMMLS.VC",
- arm_SMMLS_HI: "SMMLS.HI",
- arm_SMMLS_LS: "SMMLS.LS",
- arm_SMMLS_GE: "SMMLS.GE",
- arm_SMMLS_LT: "SMMLS.LT",
- arm_SMMLS_GT: "SMMLS.GT",
- arm_SMMLS_LE: "SMMLS.LE",
- arm_SMMLS: "SMMLS",
- arm_SMMLS_ZZ: "SMMLS.ZZ",
- arm_SMMLS_R_EQ: "SMMLS.R.EQ",
- arm_SMMLS_R_NE: "SMMLS.R.NE",
- arm_SMMLS_R_CS: "SMMLS.R.CS",
- arm_SMMLS_R_CC: "SMMLS.R.CC",
- arm_SMMLS_R_MI: "SMMLS.R.MI",
- arm_SMMLS_R_PL: "SMMLS.R.PL",
- arm_SMMLS_R_VS: "SMMLS.R.VS",
- arm_SMMLS_R_VC: "SMMLS.R.VC",
- arm_SMMLS_R_HI: "SMMLS.R.HI",
- arm_SMMLS_R_LS: "SMMLS.R.LS",
- arm_SMMLS_R_GE: "SMMLS.R.GE",
- arm_SMMLS_R_LT: "SMMLS.R.LT",
- arm_SMMLS_R_GT: "SMMLS.R.GT",
- arm_SMMLS_R_LE: "SMMLS.R.LE",
- arm_SMMLS_R: "SMMLS.R",
- arm_SMMLS_R_ZZ: "SMMLS.R.ZZ",
- arm_SMMUL_EQ: "SMMUL.EQ",
- arm_SMMUL_NE: "SMMUL.NE",
- arm_SMMUL_CS: "SMMUL.CS",
- arm_SMMUL_CC: "SMMUL.CC",
- arm_SMMUL_MI: "SMMUL.MI",
- arm_SMMUL_PL: "SMMUL.PL",
- arm_SMMUL_VS: "SMMUL.VS",
- arm_SMMUL_VC: "SMMUL.VC",
- arm_SMMUL_HI: "SMMUL.HI",
- arm_SMMUL_LS: "SMMUL.LS",
- arm_SMMUL_GE: "SMMUL.GE",
- arm_SMMUL_LT: "SMMUL.LT",
- arm_SMMUL_GT: "SMMUL.GT",
- arm_SMMUL_LE: "SMMUL.LE",
- arm_SMMUL: "SMMUL",
- arm_SMMUL_ZZ: "SMMUL.ZZ",
- arm_SMMUL_R_EQ: "SMMUL.R.EQ",
- arm_SMMUL_R_NE: "SMMUL.R.NE",
- arm_SMMUL_R_CS: "SMMUL.R.CS",
- arm_SMMUL_R_CC: "SMMUL.R.CC",
- arm_SMMUL_R_MI: "SMMUL.R.MI",
- arm_SMMUL_R_PL: "SMMUL.R.PL",
- arm_SMMUL_R_VS: "SMMUL.R.VS",
- arm_SMMUL_R_VC: "SMMUL.R.VC",
- arm_SMMUL_R_HI: "SMMUL.R.HI",
- arm_SMMUL_R_LS: "SMMUL.R.LS",
- arm_SMMUL_R_GE: "SMMUL.R.GE",
- arm_SMMUL_R_LT: "SMMUL.R.LT",
- arm_SMMUL_R_GT: "SMMUL.R.GT",
- arm_SMMUL_R_LE: "SMMUL.R.LE",
- arm_SMMUL_R: "SMMUL.R",
- arm_SMMUL_R_ZZ: "SMMUL.R.ZZ",
- arm_SMUAD_EQ: "SMUAD.EQ",
- arm_SMUAD_NE: "SMUAD.NE",
- arm_SMUAD_CS: "SMUAD.CS",
- arm_SMUAD_CC: "SMUAD.CC",
- arm_SMUAD_MI: "SMUAD.MI",
- arm_SMUAD_PL: "SMUAD.PL",
- arm_SMUAD_VS: "SMUAD.VS",
- arm_SMUAD_VC: "SMUAD.VC",
- arm_SMUAD_HI: "SMUAD.HI",
- arm_SMUAD_LS: "SMUAD.LS",
- arm_SMUAD_GE: "SMUAD.GE",
- arm_SMUAD_LT: "SMUAD.LT",
- arm_SMUAD_GT: "SMUAD.GT",
- arm_SMUAD_LE: "SMUAD.LE",
- arm_SMUAD: "SMUAD",
- arm_SMUAD_ZZ: "SMUAD.ZZ",
- arm_SMUAD_X_EQ: "SMUAD.X.EQ",
- arm_SMUAD_X_NE: "SMUAD.X.NE",
- arm_SMUAD_X_CS: "SMUAD.X.CS",
- arm_SMUAD_X_CC: "SMUAD.X.CC",
- arm_SMUAD_X_MI: "SMUAD.X.MI",
- arm_SMUAD_X_PL: "SMUAD.X.PL",
- arm_SMUAD_X_VS: "SMUAD.X.VS",
- arm_SMUAD_X_VC: "SMUAD.X.VC",
- arm_SMUAD_X_HI: "SMUAD.X.HI",
- arm_SMUAD_X_LS: "SMUAD.X.LS",
- arm_SMUAD_X_GE: "SMUAD.X.GE",
- arm_SMUAD_X_LT: "SMUAD.X.LT",
- arm_SMUAD_X_GT: "SMUAD.X.GT",
- arm_SMUAD_X_LE: "SMUAD.X.LE",
- arm_SMUAD_X: "SMUAD.X",
- arm_SMUAD_X_ZZ: "SMUAD.X.ZZ",
- arm_SMULBB_EQ: "SMULBB.EQ",
- arm_SMULBB_NE: "SMULBB.NE",
- arm_SMULBB_CS: "SMULBB.CS",
- arm_SMULBB_CC: "SMULBB.CC",
- arm_SMULBB_MI: "SMULBB.MI",
- arm_SMULBB_PL: "SMULBB.PL",
- arm_SMULBB_VS: "SMULBB.VS",
- arm_SMULBB_VC: "SMULBB.VC",
- arm_SMULBB_HI: "SMULBB.HI",
- arm_SMULBB_LS: "SMULBB.LS",
- arm_SMULBB_GE: "SMULBB.GE",
- arm_SMULBB_LT: "SMULBB.LT",
- arm_SMULBB_GT: "SMULBB.GT",
- arm_SMULBB_LE: "SMULBB.LE",
- arm_SMULBB: "SMULBB",
- arm_SMULBB_ZZ: "SMULBB.ZZ",
- arm_SMULBT_EQ: "SMULBT.EQ",
- arm_SMULBT_NE: "SMULBT.NE",
- arm_SMULBT_CS: "SMULBT.CS",
- arm_SMULBT_CC: "SMULBT.CC",
- arm_SMULBT_MI: "SMULBT.MI",
- arm_SMULBT_PL: "SMULBT.PL",
- arm_SMULBT_VS: "SMULBT.VS",
- arm_SMULBT_VC: "SMULBT.VC",
- arm_SMULBT_HI: "SMULBT.HI",
- arm_SMULBT_LS: "SMULBT.LS",
- arm_SMULBT_GE: "SMULBT.GE",
- arm_SMULBT_LT: "SMULBT.LT",
- arm_SMULBT_GT: "SMULBT.GT",
- arm_SMULBT_LE: "SMULBT.LE",
- arm_SMULBT: "SMULBT",
- arm_SMULBT_ZZ: "SMULBT.ZZ",
- arm_SMULTB_EQ: "SMULTB.EQ",
- arm_SMULTB_NE: "SMULTB.NE",
- arm_SMULTB_CS: "SMULTB.CS",
- arm_SMULTB_CC: "SMULTB.CC",
- arm_SMULTB_MI: "SMULTB.MI",
- arm_SMULTB_PL: "SMULTB.PL",
- arm_SMULTB_VS: "SMULTB.VS",
- arm_SMULTB_VC: "SMULTB.VC",
- arm_SMULTB_HI: "SMULTB.HI",
- arm_SMULTB_LS: "SMULTB.LS",
- arm_SMULTB_GE: "SMULTB.GE",
- arm_SMULTB_LT: "SMULTB.LT",
- arm_SMULTB_GT: "SMULTB.GT",
- arm_SMULTB_LE: "SMULTB.LE",
- arm_SMULTB: "SMULTB",
- arm_SMULTB_ZZ: "SMULTB.ZZ",
- arm_SMULTT_EQ: "SMULTT.EQ",
- arm_SMULTT_NE: "SMULTT.NE",
- arm_SMULTT_CS: "SMULTT.CS",
- arm_SMULTT_CC: "SMULTT.CC",
- arm_SMULTT_MI: "SMULTT.MI",
- arm_SMULTT_PL: "SMULTT.PL",
- arm_SMULTT_VS: "SMULTT.VS",
- arm_SMULTT_VC: "SMULTT.VC",
- arm_SMULTT_HI: "SMULTT.HI",
- arm_SMULTT_LS: "SMULTT.LS",
- arm_SMULTT_GE: "SMULTT.GE",
- arm_SMULTT_LT: "SMULTT.LT",
- arm_SMULTT_GT: "SMULTT.GT",
- arm_SMULTT_LE: "SMULTT.LE",
- arm_SMULTT: "SMULTT",
- arm_SMULTT_ZZ: "SMULTT.ZZ",
- arm_SMULL_EQ: "SMULL.EQ",
- arm_SMULL_NE: "SMULL.NE",
- arm_SMULL_CS: "SMULL.CS",
- arm_SMULL_CC: "SMULL.CC",
- arm_SMULL_MI: "SMULL.MI",
- arm_SMULL_PL: "SMULL.PL",
- arm_SMULL_VS: "SMULL.VS",
- arm_SMULL_VC: "SMULL.VC",
- arm_SMULL_HI: "SMULL.HI",
- arm_SMULL_LS: "SMULL.LS",
- arm_SMULL_GE: "SMULL.GE",
- arm_SMULL_LT: "SMULL.LT",
- arm_SMULL_GT: "SMULL.GT",
- arm_SMULL_LE: "SMULL.LE",
- arm_SMULL: "SMULL",
- arm_SMULL_ZZ: "SMULL.ZZ",
- arm_SMULL_S_EQ: "SMULL.S.EQ",
- arm_SMULL_S_NE: "SMULL.S.NE",
- arm_SMULL_S_CS: "SMULL.S.CS",
- arm_SMULL_S_CC: "SMULL.S.CC",
- arm_SMULL_S_MI: "SMULL.S.MI",
- arm_SMULL_S_PL: "SMULL.S.PL",
- arm_SMULL_S_VS: "SMULL.S.VS",
- arm_SMULL_S_VC: "SMULL.S.VC",
- arm_SMULL_S_HI: "SMULL.S.HI",
- arm_SMULL_S_LS: "SMULL.S.LS",
- arm_SMULL_S_GE: "SMULL.S.GE",
- arm_SMULL_S_LT: "SMULL.S.LT",
- arm_SMULL_S_GT: "SMULL.S.GT",
- arm_SMULL_S_LE: "SMULL.S.LE",
- arm_SMULL_S: "SMULL.S",
- arm_SMULL_S_ZZ: "SMULL.S.ZZ",
- arm_SMULWB_EQ: "SMULWB.EQ",
- arm_SMULWB_NE: "SMULWB.NE",
- arm_SMULWB_CS: "SMULWB.CS",
- arm_SMULWB_CC: "SMULWB.CC",
- arm_SMULWB_MI: "SMULWB.MI",
- arm_SMULWB_PL: "SMULWB.PL",
- arm_SMULWB_VS: "SMULWB.VS",
- arm_SMULWB_VC: "SMULWB.VC",
- arm_SMULWB_HI: "SMULWB.HI",
- arm_SMULWB_LS: "SMULWB.LS",
- arm_SMULWB_GE: "SMULWB.GE",
- arm_SMULWB_LT: "SMULWB.LT",
- arm_SMULWB_GT: "SMULWB.GT",
- arm_SMULWB_LE: "SMULWB.LE",
- arm_SMULWB: "SMULWB",
- arm_SMULWB_ZZ: "SMULWB.ZZ",
- arm_SMULWT_EQ: "SMULWT.EQ",
- arm_SMULWT_NE: "SMULWT.NE",
- arm_SMULWT_CS: "SMULWT.CS",
- arm_SMULWT_CC: "SMULWT.CC",
- arm_SMULWT_MI: "SMULWT.MI",
- arm_SMULWT_PL: "SMULWT.PL",
- arm_SMULWT_VS: "SMULWT.VS",
- arm_SMULWT_VC: "SMULWT.VC",
- arm_SMULWT_HI: "SMULWT.HI",
- arm_SMULWT_LS: "SMULWT.LS",
- arm_SMULWT_GE: "SMULWT.GE",
- arm_SMULWT_LT: "SMULWT.LT",
- arm_SMULWT_GT: "SMULWT.GT",
- arm_SMULWT_LE: "SMULWT.LE",
- arm_SMULWT: "SMULWT",
- arm_SMULWT_ZZ: "SMULWT.ZZ",
- arm_SMUSD_EQ: "SMUSD.EQ",
- arm_SMUSD_NE: "SMUSD.NE",
- arm_SMUSD_CS: "SMUSD.CS",
- arm_SMUSD_CC: "SMUSD.CC",
- arm_SMUSD_MI: "SMUSD.MI",
- arm_SMUSD_PL: "SMUSD.PL",
- arm_SMUSD_VS: "SMUSD.VS",
- arm_SMUSD_VC: "SMUSD.VC",
- arm_SMUSD_HI: "SMUSD.HI",
- arm_SMUSD_LS: "SMUSD.LS",
- arm_SMUSD_GE: "SMUSD.GE",
- arm_SMUSD_LT: "SMUSD.LT",
- arm_SMUSD_GT: "SMUSD.GT",
- arm_SMUSD_LE: "SMUSD.LE",
- arm_SMUSD: "SMUSD",
- arm_SMUSD_ZZ: "SMUSD.ZZ",
- arm_SMUSD_X_EQ: "SMUSD.X.EQ",
- arm_SMUSD_X_NE: "SMUSD.X.NE",
- arm_SMUSD_X_CS: "SMUSD.X.CS",
- arm_SMUSD_X_CC: "SMUSD.X.CC",
- arm_SMUSD_X_MI: "SMUSD.X.MI",
- arm_SMUSD_X_PL: "SMUSD.X.PL",
- arm_SMUSD_X_VS: "SMUSD.X.VS",
- arm_SMUSD_X_VC: "SMUSD.X.VC",
- arm_SMUSD_X_HI: "SMUSD.X.HI",
- arm_SMUSD_X_LS: "SMUSD.X.LS",
- arm_SMUSD_X_GE: "SMUSD.X.GE",
- arm_SMUSD_X_LT: "SMUSD.X.LT",
- arm_SMUSD_X_GT: "SMUSD.X.GT",
- arm_SMUSD_X_LE: "SMUSD.X.LE",
- arm_SMUSD_X: "SMUSD.X",
- arm_SMUSD_X_ZZ: "SMUSD.X.ZZ",
- arm_SSAT_EQ: "SSAT.EQ",
- arm_SSAT_NE: "SSAT.NE",
- arm_SSAT_CS: "SSAT.CS",
- arm_SSAT_CC: "SSAT.CC",
- arm_SSAT_MI: "SSAT.MI",
- arm_SSAT_PL: "SSAT.PL",
- arm_SSAT_VS: "SSAT.VS",
- arm_SSAT_VC: "SSAT.VC",
- arm_SSAT_HI: "SSAT.HI",
- arm_SSAT_LS: "SSAT.LS",
- arm_SSAT_GE: "SSAT.GE",
- arm_SSAT_LT: "SSAT.LT",
- arm_SSAT_GT: "SSAT.GT",
- arm_SSAT_LE: "SSAT.LE",
- arm_SSAT: "SSAT",
- arm_SSAT_ZZ: "SSAT.ZZ",
- arm_SSAT16_EQ: "SSAT16.EQ",
- arm_SSAT16_NE: "SSAT16.NE",
- arm_SSAT16_CS: "SSAT16.CS",
- arm_SSAT16_CC: "SSAT16.CC",
- arm_SSAT16_MI: "SSAT16.MI",
- arm_SSAT16_PL: "SSAT16.PL",
- arm_SSAT16_VS: "SSAT16.VS",
- arm_SSAT16_VC: "SSAT16.VC",
- arm_SSAT16_HI: "SSAT16.HI",
- arm_SSAT16_LS: "SSAT16.LS",
- arm_SSAT16_GE: "SSAT16.GE",
- arm_SSAT16_LT: "SSAT16.LT",
- arm_SSAT16_GT: "SSAT16.GT",
- arm_SSAT16_LE: "SSAT16.LE",
- arm_SSAT16: "SSAT16",
- arm_SSAT16_ZZ: "SSAT16.ZZ",
- arm_SSAX_EQ: "SSAX.EQ",
- arm_SSAX_NE: "SSAX.NE",
- arm_SSAX_CS: "SSAX.CS",
- arm_SSAX_CC: "SSAX.CC",
- arm_SSAX_MI: "SSAX.MI",
- arm_SSAX_PL: "SSAX.PL",
- arm_SSAX_VS: "SSAX.VS",
- arm_SSAX_VC: "SSAX.VC",
- arm_SSAX_HI: "SSAX.HI",
- arm_SSAX_LS: "SSAX.LS",
- arm_SSAX_GE: "SSAX.GE",
- arm_SSAX_LT: "SSAX.LT",
- arm_SSAX_GT: "SSAX.GT",
- arm_SSAX_LE: "SSAX.LE",
- arm_SSAX: "SSAX",
- arm_SSAX_ZZ: "SSAX.ZZ",
- arm_SSUB16_EQ: "SSUB16.EQ",
- arm_SSUB16_NE: "SSUB16.NE",
- arm_SSUB16_CS: "SSUB16.CS",
- arm_SSUB16_CC: "SSUB16.CC",
- arm_SSUB16_MI: "SSUB16.MI",
- arm_SSUB16_PL: "SSUB16.PL",
- arm_SSUB16_VS: "SSUB16.VS",
- arm_SSUB16_VC: "SSUB16.VC",
- arm_SSUB16_HI: "SSUB16.HI",
- arm_SSUB16_LS: "SSUB16.LS",
- arm_SSUB16_GE: "SSUB16.GE",
- arm_SSUB16_LT: "SSUB16.LT",
- arm_SSUB16_GT: "SSUB16.GT",
- arm_SSUB16_LE: "SSUB16.LE",
- arm_SSUB16: "SSUB16",
- arm_SSUB16_ZZ: "SSUB16.ZZ",
- arm_SSUB8_EQ: "SSUB8.EQ",
- arm_SSUB8_NE: "SSUB8.NE",
- arm_SSUB8_CS: "SSUB8.CS",
- arm_SSUB8_CC: "SSUB8.CC",
- arm_SSUB8_MI: "SSUB8.MI",
- arm_SSUB8_PL: "SSUB8.PL",
- arm_SSUB8_VS: "SSUB8.VS",
- arm_SSUB8_VC: "SSUB8.VC",
- arm_SSUB8_HI: "SSUB8.HI",
- arm_SSUB8_LS: "SSUB8.LS",
- arm_SSUB8_GE: "SSUB8.GE",
- arm_SSUB8_LT: "SSUB8.LT",
- arm_SSUB8_GT: "SSUB8.GT",
- arm_SSUB8_LE: "SSUB8.LE",
- arm_SSUB8: "SSUB8",
- arm_SSUB8_ZZ: "SSUB8.ZZ",
- arm_STM_EQ: "STM.EQ",
- arm_STM_NE: "STM.NE",
- arm_STM_CS: "STM.CS",
- arm_STM_CC: "STM.CC",
- arm_STM_MI: "STM.MI",
- arm_STM_PL: "STM.PL",
- arm_STM_VS: "STM.VS",
- arm_STM_VC: "STM.VC",
- arm_STM_HI: "STM.HI",
- arm_STM_LS: "STM.LS",
- arm_STM_GE: "STM.GE",
- arm_STM_LT: "STM.LT",
- arm_STM_GT: "STM.GT",
- arm_STM_LE: "STM.LE",
- arm_STM: "STM",
- arm_STM_ZZ: "STM.ZZ",
- arm_STMDA_EQ: "STMDA.EQ",
- arm_STMDA_NE: "STMDA.NE",
- arm_STMDA_CS: "STMDA.CS",
- arm_STMDA_CC: "STMDA.CC",
- arm_STMDA_MI: "STMDA.MI",
- arm_STMDA_PL: "STMDA.PL",
- arm_STMDA_VS: "STMDA.VS",
- arm_STMDA_VC: "STMDA.VC",
- arm_STMDA_HI: "STMDA.HI",
- arm_STMDA_LS: "STMDA.LS",
- arm_STMDA_GE: "STMDA.GE",
- arm_STMDA_LT: "STMDA.LT",
- arm_STMDA_GT: "STMDA.GT",
- arm_STMDA_LE: "STMDA.LE",
- arm_STMDA: "STMDA",
- arm_STMDA_ZZ: "STMDA.ZZ",
- arm_STMDB_EQ: "STMDB.EQ",
- arm_STMDB_NE: "STMDB.NE",
- arm_STMDB_CS: "STMDB.CS",
- arm_STMDB_CC: "STMDB.CC",
- arm_STMDB_MI: "STMDB.MI",
- arm_STMDB_PL: "STMDB.PL",
- arm_STMDB_VS: "STMDB.VS",
- arm_STMDB_VC: "STMDB.VC",
- arm_STMDB_HI: "STMDB.HI",
- arm_STMDB_LS: "STMDB.LS",
- arm_STMDB_GE: "STMDB.GE",
- arm_STMDB_LT: "STMDB.LT",
- arm_STMDB_GT: "STMDB.GT",
- arm_STMDB_LE: "STMDB.LE",
- arm_STMDB: "STMDB",
- arm_STMDB_ZZ: "STMDB.ZZ",
- arm_STMIB_EQ: "STMIB.EQ",
- arm_STMIB_NE: "STMIB.NE",
- arm_STMIB_CS: "STMIB.CS",
- arm_STMIB_CC: "STMIB.CC",
- arm_STMIB_MI: "STMIB.MI",
- arm_STMIB_PL: "STMIB.PL",
- arm_STMIB_VS: "STMIB.VS",
- arm_STMIB_VC: "STMIB.VC",
- arm_STMIB_HI: "STMIB.HI",
- arm_STMIB_LS: "STMIB.LS",
- arm_STMIB_GE: "STMIB.GE",
- arm_STMIB_LT: "STMIB.LT",
- arm_STMIB_GT: "STMIB.GT",
- arm_STMIB_LE: "STMIB.LE",
- arm_STMIB: "STMIB",
- arm_STMIB_ZZ: "STMIB.ZZ",
- arm_STR_EQ: "STR.EQ",
- arm_STR_NE: "STR.NE",
- arm_STR_CS: "STR.CS",
- arm_STR_CC: "STR.CC",
- arm_STR_MI: "STR.MI",
- arm_STR_PL: "STR.PL",
- arm_STR_VS: "STR.VS",
- arm_STR_VC: "STR.VC",
- arm_STR_HI: "STR.HI",
- arm_STR_LS: "STR.LS",
- arm_STR_GE: "STR.GE",
- arm_STR_LT: "STR.LT",
- arm_STR_GT: "STR.GT",
- arm_STR_LE: "STR.LE",
- arm_STR: "STR",
- arm_STR_ZZ: "STR.ZZ",
- arm_STRB_EQ: "STRB.EQ",
- arm_STRB_NE: "STRB.NE",
- arm_STRB_CS: "STRB.CS",
- arm_STRB_CC: "STRB.CC",
- arm_STRB_MI: "STRB.MI",
- arm_STRB_PL: "STRB.PL",
- arm_STRB_VS: "STRB.VS",
- arm_STRB_VC: "STRB.VC",
- arm_STRB_HI: "STRB.HI",
- arm_STRB_LS: "STRB.LS",
- arm_STRB_GE: "STRB.GE",
- arm_STRB_LT: "STRB.LT",
- arm_STRB_GT: "STRB.GT",
- arm_STRB_LE: "STRB.LE",
- arm_STRB: "STRB",
- arm_STRB_ZZ: "STRB.ZZ",
- arm_STRBT_EQ: "STRBT.EQ",
- arm_STRBT_NE: "STRBT.NE",
- arm_STRBT_CS: "STRBT.CS",
- arm_STRBT_CC: "STRBT.CC",
- arm_STRBT_MI: "STRBT.MI",
- arm_STRBT_PL: "STRBT.PL",
- arm_STRBT_VS: "STRBT.VS",
- arm_STRBT_VC: "STRBT.VC",
- arm_STRBT_HI: "STRBT.HI",
- arm_STRBT_LS: "STRBT.LS",
- arm_STRBT_GE: "STRBT.GE",
- arm_STRBT_LT: "STRBT.LT",
- arm_STRBT_GT: "STRBT.GT",
- arm_STRBT_LE: "STRBT.LE",
- arm_STRBT: "STRBT",
- arm_STRBT_ZZ: "STRBT.ZZ",
- arm_STRD_EQ: "STRD.EQ",
- arm_STRD_NE: "STRD.NE",
- arm_STRD_CS: "STRD.CS",
- arm_STRD_CC: "STRD.CC",
- arm_STRD_MI: "STRD.MI",
- arm_STRD_PL: "STRD.PL",
- arm_STRD_VS: "STRD.VS",
- arm_STRD_VC: "STRD.VC",
- arm_STRD_HI: "STRD.HI",
- arm_STRD_LS: "STRD.LS",
- arm_STRD_GE: "STRD.GE",
- arm_STRD_LT: "STRD.LT",
- arm_STRD_GT: "STRD.GT",
- arm_STRD_LE: "STRD.LE",
- arm_STRD: "STRD",
- arm_STRD_ZZ: "STRD.ZZ",
- arm_STREX_EQ: "STREX.EQ",
- arm_STREX_NE: "STREX.NE",
- arm_STREX_CS: "STREX.CS",
- arm_STREX_CC: "STREX.CC",
- arm_STREX_MI: "STREX.MI",
- arm_STREX_PL: "STREX.PL",
- arm_STREX_VS: "STREX.VS",
- arm_STREX_VC: "STREX.VC",
- arm_STREX_HI: "STREX.HI",
- arm_STREX_LS: "STREX.LS",
- arm_STREX_GE: "STREX.GE",
- arm_STREX_LT: "STREX.LT",
- arm_STREX_GT: "STREX.GT",
- arm_STREX_LE: "STREX.LE",
- arm_STREX: "STREX",
- arm_STREX_ZZ: "STREX.ZZ",
- arm_STREXB_EQ: "STREXB.EQ",
- arm_STREXB_NE: "STREXB.NE",
- arm_STREXB_CS: "STREXB.CS",
- arm_STREXB_CC: "STREXB.CC",
- arm_STREXB_MI: "STREXB.MI",
- arm_STREXB_PL: "STREXB.PL",
- arm_STREXB_VS: "STREXB.VS",
- arm_STREXB_VC: "STREXB.VC",
- arm_STREXB_HI: "STREXB.HI",
- arm_STREXB_LS: "STREXB.LS",
- arm_STREXB_GE: "STREXB.GE",
- arm_STREXB_LT: "STREXB.LT",
- arm_STREXB_GT: "STREXB.GT",
- arm_STREXB_LE: "STREXB.LE",
- arm_STREXB: "STREXB",
- arm_STREXB_ZZ: "STREXB.ZZ",
- arm_STREXD_EQ: "STREXD.EQ",
- arm_STREXD_NE: "STREXD.NE",
- arm_STREXD_CS: "STREXD.CS",
- arm_STREXD_CC: "STREXD.CC",
- arm_STREXD_MI: "STREXD.MI",
- arm_STREXD_PL: "STREXD.PL",
- arm_STREXD_VS: "STREXD.VS",
- arm_STREXD_VC: "STREXD.VC",
- arm_STREXD_HI: "STREXD.HI",
- arm_STREXD_LS: "STREXD.LS",
- arm_STREXD_GE: "STREXD.GE",
- arm_STREXD_LT: "STREXD.LT",
- arm_STREXD_GT: "STREXD.GT",
- arm_STREXD_LE: "STREXD.LE",
- arm_STREXD: "STREXD",
- arm_STREXD_ZZ: "STREXD.ZZ",
- arm_STREXH_EQ: "STREXH.EQ",
- arm_STREXH_NE: "STREXH.NE",
- arm_STREXH_CS: "STREXH.CS",
- arm_STREXH_CC: "STREXH.CC",
- arm_STREXH_MI: "STREXH.MI",
- arm_STREXH_PL: "STREXH.PL",
- arm_STREXH_VS: "STREXH.VS",
- arm_STREXH_VC: "STREXH.VC",
- arm_STREXH_HI: "STREXH.HI",
- arm_STREXH_LS: "STREXH.LS",
- arm_STREXH_GE: "STREXH.GE",
- arm_STREXH_LT: "STREXH.LT",
- arm_STREXH_GT: "STREXH.GT",
- arm_STREXH_LE: "STREXH.LE",
- arm_STREXH: "STREXH",
- arm_STREXH_ZZ: "STREXH.ZZ",
- arm_STRH_EQ: "STRH.EQ",
- arm_STRH_NE: "STRH.NE",
- arm_STRH_CS: "STRH.CS",
- arm_STRH_CC: "STRH.CC",
- arm_STRH_MI: "STRH.MI",
- arm_STRH_PL: "STRH.PL",
- arm_STRH_VS: "STRH.VS",
- arm_STRH_VC: "STRH.VC",
- arm_STRH_HI: "STRH.HI",
- arm_STRH_LS: "STRH.LS",
- arm_STRH_GE: "STRH.GE",
- arm_STRH_LT: "STRH.LT",
- arm_STRH_GT: "STRH.GT",
- arm_STRH_LE: "STRH.LE",
- arm_STRH: "STRH",
- arm_STRH_ZZ: "STRH.ZZ",
- arm_STRHT_EQ: "STRHT.EQ",
- arm_STRHT_NE: "STRHT.NE",
- arm_STRHT_CS: "STRHT.CS",
- arm_STRHT_CC: "STRHT.CC",
- arm_STRHT_MI: "STRHT.MI",
- arm_STRHT_PL: "STRHT.PL",
- arm_STRHT_VS: "STRHT.VS",
- arm_STRHT_VC: "STRHT.VC",
- arm_STRHT_HI: "STRHT.HI",
- arm_STRHT_LS: "STRHT.LS",
- arm_STRHT_GE: "STRHT.GE",
- arm_STRHT_LT: "STRHT.LT",
- arm_STRHT_GT: "STRHT.GT",
- arm_STRHT_LE: "STRHT.LE",
- arm_STRHT: "STRHT",
- arm_STRHT_ZZ: "STRHT.ZZ",
- arm_STRT_EQ: "STRT.EQ",
- arm_STRT_NE: "STRT.NE",
- arm_STRT_CS: "STRT.CS",
- arm_STRT_CC: "STRT.CC",
- arm_STRT_MI: "STRT.MI",
- arm_STRT_PL: "STRT.PL",
- arm_STRT_VS: "STRT.VS",
- arm_STRT_VC: "STRT.VC",
- arm_STRT_HI: "STRT.HI",
- arm_STRT_LS: "STRT.LS",
- arm_STRT_GE: "STRT.GE",
- arm_STRT_LT: "STRT.LT",
- arm_STRT_GT: "STRT.GT",
- arm_STRT_LE: "STRT.LE",
- arm_STRT: "STRT",
- arm_STRT_ZZ: "STRT.ZZ",
- arm_SUB_EQ: "SUB.EQ",
- arm_SUB_NE: "SUB.NE",
- arm_SUB_CS: "SUB.CS",
- arm_SUB_CC: "SUB.CC",
- arm_SUB_MI: "SUB.MI",
- arm_SUB_PL: "SUB.PL",
- arm_SUB_VS: "SUB.VS",
- arm_SUB_VC: "SUB.VC",
- arm_SUB_HI: "SUB.HI",
- arm_SUB_LS: "SUB.LS",
- arm_SUB_GE: "SUB.GE",
- arm_SUB_LT: "SUB.LT",
- arm_SUB_GT: "SUB.GT",
- arm_SUB_LE: "SUB.LE",
- arm_SUB: "SUB",
- arm_SUB_ZZ: "SUB.ZZ",
- arm_SUB_S_EQ: "SUB.S.EQ",
- arm_SUB_S_NE: "SUB.S.NE",
- arm_SUB_S_CS: "SUB.S.CS",
- arm_SUB_S_CC: "SUB.S.CC",
- arm_SUB_S_MI: "SUB.S.MI",
- arm_SUB_S_PL: "SUB.S.PL",
- arm_SUB_S_VS: "SUB.S.VS",
- arm_SUB_S_VC: "SUB.S.VC",
- arm_SUB_S_HI: "SUB.S.HI",
- arm_SUB_S_LS: "SUB.S.LS",
- arm_SUB_S_GE: "SUB.S.GE",
- arm_SUB_S_LT: "SUB.S.LT",
- arm_SUB_S_GT: "SUB.S.GT",
- arm_SUB_S_LE: "SUB.S.LE",
- arm_SUB_S: "SUB.S",
- arm_SUB_S_ZZ: "SUB.S.ZZ",
- arm_SVC_EQ: "SVC.EQ",
- arm_SVC_NE: "SVC.NE",
- arm_SVC_CS: "SVC.CS",
- arm_SVC_CC: "SVC.CC",
- arm_SVC_MI: "SVC.MI",
- arm_SVC_PL: "SVC.PL",
- arm_SVC_VS: "SVC.VS",
- arm_SVC_VC: "SVC.VC",
- arm_SVC_HI: "SVC.HI",
- arm_SVC_LS: "SVC.LS",
- arm_SVC_GE: "SVC.GE",
- arm_SVC_LT: "SVC.LT",
- arm_SVC_GT: "SVC.GT",
- arm_SVC_LE: "SVC.LE",
- arm_SVC: "SVC",
- arm_SVC_ZZ: "SVC.ZZ",
- arm_SWP_EQ: "SWP.EQ",
- arm_SWP_NE: "SWP.NE",
- arm_SWP_CS: "SWP.CS",
- arm_SWP_CC: "SWP.CC",
- arm_SWP_MI: "SWP.MI",
- arm_SWP_PL: "SWP.PL",
- arm_SWP_VS: "SWP.VS",
- arm_SWP_VC: "SWP.VC",
- arm_SWP_HI: "SWP.HI",
- arm_SWP_LS: "SWP.LS",
- arm_SWP_GE: "SWP.GE",
- arm_SWP_LT: "SWP.LT",
- arm_SWP_GT: "SWP.GT",
- arm_SWP_LE: "SWP.LE",
- arm_SWP: "SWP",
- arm_SWP_ZZ: "SWP.ZZ",
- arm_SWP_B_EQ: "SWP.B.EQ",
- arm_SWP_B_NE: "SWP.B.NE",
- arm_SWP_B_CS: "SWP.B.CS",
- arm_SWP_B_CC: "SWP.B.CC",
- arm_SWP_B_MI: "SWP.B.MI",
- arm_SWP_B_PL: "SWP.B.PL",
- arm_SWP_B_VS: "SWP.B.VS",
- arm_SWP_B_VC: "SWP.B.VC",
- arm_SWP_B_HI: "SWP.B.HI",
- arm_SWP_B_LS: "SWP.B.LS",
- arm_SWP_B_GE: "SWP.B.GE",
- arm_SWP_B_LT: "SWP.B.LT",
- arm_SWP_B_GT: "SWP.B.GT",
- arm_SWP_B_LE: "SWP.B.LE",
- arm_SWP_B: "SWP.B",
- arm_SWP_B_ZZ: "SWP.B.ZZ",
- arm_SXTAB_EQ: "SXTAB.EQ",
- arm_SXTAB_NE: "SXTAB.NE",
- arm_SXTAB_CS: "SXTAB.CS",
- arm_SXTAB_CC: "SXTAB.CC",
- arm_SXTAB_MI: "SXTAB.MI",
- arm_SXTAB_PL: "SXTAB.PL",
- arm_SXTAB_VS: "SXTAB.VS",
- arm_SXTAB_VC: "SXTAB.VC",
- arm_SXTAB_HI: "SXTAB.HI",
- arm_SXTAB_LS: "SXTAB.LS",
- arm_SXTAB_GE: "SXTAB.GE",
- arm_SXTAB_LT: "SXTAB.LT",
- arm_SXTAB_GT: "SXTAB.GT",
- arm_SXTAB_LE: "SXTAB.LE",
- arm_SXTAB: "SXTAB",
- arm_SXTAB_ZZ: "SXTAB.ZZ",
- arm_SXTAB16_EQ: "SXTAB16.EQ",
- arm_SXTAB16_NE: "SXTAB16.NE",
- arm_SXTAB16_CS: "SXTAB16.CS",
- arm_SXTAB16_CC: "SXTAB16.CC",
- arm_SXTAB16_MI: "SXTAB16.MI",
- arm_SXTAB16_PL: "SXTAB16.PL",
- arm_SXTAB16_VS: "SXTAB16.VS",
- arm_SXTAB16_VC: "SXTAB16.VC",
- arm_SXTAB16_HI: "SXTAB16.HI",
- arm_SXTAB16_LS: "SXTAB16.LS",
- arm_SXTAB16_GE: "SXTAB16.GE",
- arm_SXTAB16_LT: "SXTAB16.LT",
- arm_SXTAB16_GT: "SXTAB16.GT",
- arm_SXTAB16_LE: "SXTAB16.LE",
- arm_SXTAB16: "SXTAB16",
- arm_SXTAB16_ZZ: "SXTAB16.ZZ",
- arm_SXTAH_EQ: "SXTAH.EQ",
- arm_SXTAH_NE: "SXTAH.NE",
- arm_SXTAH_CS: "SXTAH.CS",
- arm_SXTAH_CC: "SXTAH.CC",
- arm_SXTAH_MI: "SXTAH.MI",
- arm_SXTAH_PL: "SXTAH.PL",
- arm_SXTAH_VS: "SXTAH.VS",
- arm_SXTAH_VC: "SXTAH.VC",
- arm_SXTAH_HI: "SXTAH.HI",
- arm_SXTAH_LS: "SXTAH.LS",
- arm_SXTAH_GE: "SXTAH.GE",
- arm_SXTAH_LT: "SXTAH.LT",
- arm_SXTAH_GT: "SXTAH.GT",
- arm_SXTAH_LE: "SXTAH.LE",
- arm_SXTAH: "SXTAH",
- arm_SXTAH_ZZ: "SXTAH.ZZ",
- arm_SXTB_EQ: "SXTB.EQ",
- arm_SXTB_NE: "SXTB.NE",
- arm_SXTB_CS: "SXTB.CS",
- arm_SXTB_CC: "SXTB.CC",
- arm_SXTB_MI: "SXTB.MI",
- arm_SXTB_PL: "SXTB.PL",
- arm_SXTB_VS: "SXTB.VS",
- arm_SXTB_VC: "SXTB.VC",
- arm_SXTB_HI: "SXTB.HI",
- arm_SXTB_LS: "SXTB.LS",
- arm_SXTB_GE: "SXTB.GE",
- arm_SXTB_LT: "SXTB.LT",
- arm_SXTB_GT: "SXTB.GT",
- arm_SXTB_LE: "SXTB.LE",
- arm_SXTB: "SXTB",
- arm_SXTB_ZZ: "SXTB.ZZ",
- arm_SXTB16_EQ: "SXTB16.EQ",
- arm_SXTB16_NE: "SXTB16.NE",
- arm_SXTB16_CS: "SXTB16.CS",
- arm_SXTB16_CC: "SXTB16.CC",
- arm_SXTB16_MI: "SXTB16.MI",
- arm_SXTB16_PL: "SXTB16.PL",
- arm_SXTB16_VS: "SXTB16.VS",
- arm_SXTB16_VC: "SXTB16.VC",
- arm_SXTB16_HI: "SXTB16.HI",
- arm_SXTB16_LS: "SXTB16.LS",
- arm_SXTB16_GE: "SXTB16.GE",
- arm_SXTB16_LT: "SXTB16.LT",
- arm_SXTB16_GT: "SXTB16.GT",
- arm_SXTB16_LE: "SXTB16.LE",
- arm_SXTB16: "SXTB16",
- arm_SXTB16_ZZ: "SXTB16.ZZ",
- arm_SXTH_EQ: "SXTH.EQ",
- arm_SXTH_NE: "SXTH.NE",
- arm_SXTH_CS: "SXTH.CS",
- arm_SXTH_CC: "SXTH.CC",
- arm_SXTH_MI: "SXTH.MI",
- arm_SXTH_PL: "SXTH.PL",
- arm_SXTH_VS: "SXTH.VS",
- arm_SXTH_VC: "SXTH.VC",
- arm_SXTH_HI: "SXTH.HI",
- arm_SXTH_LS: "SXTH.LS",
- arm_SXTH_GE: "SXTH.GE",
- arm_SXTH_LT: "SXTH.LT",
- arm_SXTH_GT: "SXTH.GT",
- arm_SXTH_LE: "SXTH.LE",
- arm_SXTH: "SXTH",
- arm_SXTH_ZZ: "SXTH.ZZ",
- arm_TEQ_EQ: "TEQ.EQ",
- arm_TEQ_NE: "TEQ.NE",
- arm_TEQ_CS: "TEQ.CS",
- arm_TEQ_CC: "TEQ.CC",
- arm_TEQ_MI: "TEQ.MI",
- arm_TEQ_PL: "TEQ.PL",
- arm_TEQ_VS: "TEQ.VS",
- arm_TEQ_VC: "TEQ.VC",
- arm_TEQ_HI: "TEQ.HI",
- arm_TEQ_LS: "TEQ.LS",
- arm_TEQ_GE: "TEQ.GE",
- arm_TEQ_LT: "TEQ.LT",
- arm_TEQ_GT: "TEQ.GT",
- arm_TEQ_LE: "TEQ.LE",
- arm_TEQ: "TEQ",
- arm_TEQ_ZZ: "TEQ.ZZ",
- arm_TST_EQ: "TST.EQ",
- arm_TST_NE: "TST.NE",
- arm_TST_CS: "TST.CS",
- arm_TST_CC: "TST.CC",
- arm_TST_MI: "TST.MI",
- arm_TST_PL: "TST.PL",
- arm_TST_VS: "TST.VS",
- arm_TST_VC: "TST.VC",
- arm_TST_HI: "TST.HI",
- arm_TST_LS: "TST.LS",
- arm_TST_GE: "TST.GE",
- arm_TST_LT: "TST.LT",
- arm_TST_GT: "TST.GT",
- arm_TST_LE: "TST.LE",
- arm_TST: "TST",
- arm_TST_ZZ: "TST.ZZ",
- arm_UADD16_EQ: "UADD16.EQ",
- arm_UADD16_NE: "UADD16.NE",
- arm_UADD16_CS: "UADD16.CS",
- arm_UADD16_CC: "UADD16.CC",
- arm_UADD16_MI: "UADD16.MI",
- arm_UADD16_PL: "UADD16.PL",
- arm_UADD16_VS: "UADD16.VS",
- arm_UADD16_VC: "UADD16.VC",
- arm_UADD16_HI: "UADD16.HI",
- arm_UADD16_LS: "UADD16.LS",
- arm_UADD16_GE: "UADD16.GE",
- arm_UADD16_LT: "UADD16.LT",
- arm_UADD16_GT: "UADD16.GT",
- arm_UADD16_LE: "UADD16.LE",
- arm_UADD16: "UADD16",
- arm_UADD16_ZZ: "UADD16.ZZ",
- arm_UADD8_EQ: "UADD8.EQ",
- arm_UADD8_NE: "UADD8.NE",
- arm_UADD8_CS: "UADD8.CS",
- arm_UADD8_CC: "UADD8.CC",
- arm_UADD8_MI: "UADD8.MI",
- arm_UADD8_PL: "UADD8.PL",
- arm_UADD8_VS: "UADD8.VS",
- arm_UADD8_VC: "UADD8.VC",
- arm_UADD8_HI: "UADD8.HI",
- arm_UADD8_LS: "UADD8.LS",
- arm_UADD8_GE: "UADD8.GE",
- arm_UADD8_LT: "UADD8.LT",
- arm_UADD8_GT: "UADD8.GT",
- arm_UADD8_LE: "UADD8.LE",
- arm_UADD8: "UADD8",
- arm_UADD8_ZZ: "UADD8.ZZ",
- arm_UASX_EQ: "UASX.EQ",
- arm_UASX_NE: "UASX.NE",
- arm_UASX_CS: "UASX.CS",
- arm_UASX_CC: "UASX.CC",
- arm_UASX_MI: "UASX.MI",
- arm_UASX_PL: "UASX.PL",
- arm_UASX_VS: "UASX.VS",
- arm_UASX_VC: "UASX.VC",
- arm_UASX_HI: "UASX.HI",
- arm_UASX_LS: "UASX.LS",
- arm_UASX_GE: "UASX.GE",
- arm_UASX_LT: "UASX.LT",
- arm_UASX_GT: "UASX.GT",
- arm_UASX_LE: "UASX.LE",
- arm_UASX: "UASX",
- arm_UASX_ZZ: "UASX.ZZ",
- arm_UBFX_EQ: "UBFX.EQ",
- arm_UBFX_NE: "UBFX.NE",
- arm_UBFX_CS: "UBFX.CS",
- arm_UBFX_CC: "UBFX.CC",
- arm_UBFX_MI: "UBFX.MI",
- arm_UBFX_PL: "UBFX.PL",
- arm_UBFX_VS: "UBFX.VS",
- arm_UBFX_VC: "UBFX.VC",
- arm_UBFX_HI: "UBFX.HI",
- arm_UBFX_LS: "UBFX.LS",
- arm_UBFX_GE: "UBFX.GE",
- arm_UBFX_LT: "UBFX.LT",
- arm_UBFX_GT: "UBFX.GT",
- arm_UBFX_LE: "UBFX.LE",
- arm_UBFX: "UBFX",
- arm_UBFX_ZZ: "UBFX.ZZ",
- arm_UHADD16_EQ: "UHADD16.EQ",
- arm_UHADD16_NE: "UHADD16.NE",
- arm_UHADD16_CS: "UHADD16.CS",
- arm_UHADD16_CC: "UHADD16.CC",
- arm_UHADD16_MI: "UHADD16.MI",
- arm_UHADD16_PL: "UHADD16.PL",
- arm_UHADD16_VS: "UHADD16.VS",
- arm_UHADD16_VC: "UHADD16.VC",
- arm_UHADD16_HI: "UHADD16.HI",
- arm_UHADD16_LS: "UHADD16.LS",
- arm_UHADD16_GE: "UHADD16.GE",
- arm_UHADD16_LT: "UHADD16.LT",
- arm_UHADD16_GT: "UHADD16.GT",
- arm_UHADD16_LE: "UHADD16.LE",
- arm_UHADD16: "UHADD16",
- arm_UHADD16_ZZ: "UHADD16.ZZ",
- arm_UHADD8_EQ: "UHADD8.EQ",
- arm_UHADD8_NE: "UHADD8.NE",
- arm_UHADD8_CS: "UHADD8.CS",
- arm_UHADD8_CC: "UHADD8.CC",
- arm_UHADD8_MI: "UHADD8.MI",
- arm_UHADD8_PL: "UHADD8.PL",
- arm_UHADD8_VS: "UHADD8.VS",
- arm_UHADD8_VC: "UHADD8.VC",
- arm_UHADD8_HI: "UHADD8.HI",
- arm_UHADD8_LS: "UHADD8.LS",
- arm_UHADD8_GE: "UHADD8.GE",
- arm_UHADD8_LT: "UHADD8.LT",
- arm_UHADD8_GT: "UHADD8.GT",
- arm_UHADD8_LE: "UHADD8.LE",
- arm_UHADD8: "UHADD8",
- arm_UHADD8_ZZ: "UHADD8.ZZ",
- arm_UHASX_EQ: "UHASX.EQ",
- arm_UHASX_NE: "UHASX.NE",
- arm_UHASX_CS: "UHASX.CS",
- arm_UHASX_CC: "UHASX.CC",
- arm_UHASX_MI: "UHASX.MI",
- arm_UHASX_PL: "UHASX.PL",
- arm_UHASX_VS: "UHASX.VS",
- arm_UHASX_VC: "UHASX.VC",
- arm_UHASX_HI: "UHASX.HI",
- arm_UHASX_LS: "UHASX.LS",
- arm_UHASX_GE: "UHASX.GE",
- arm_UHASX_LT: "UHASX.LT",
- arm_UHASX_GT: "UHASX.GT",
- arm_UHASX_LE: "UHASX.LE",
- arm_UHASX: "UHASX",
- arm_UHASX_ZZ: "UHASX.ZZ",
- arm_UHSAX_EQ: "UHSAX.EQ",
- arm_UHSAX_NE: "UHSAX.NE",
- arm_UHSAX_CS: "UHSAX.CS",
- arm_UHSAX_CC: "UHSAX.CC",
- arm_UHSAX_MI: "UHSAX.MI",
- arm_UHSAX_PL: "UHSAX.PL",
- arm_UHSAX_VS: "UHSAX.VS",
- arm_UHSAX_VC: "UHSAX.VC",
- arm_UHSAX_HI: "UHSAX.HI",
- arm_UHSAX_LS: "UHSAX.LS",
- arm_UHSAX_GE: "UHSAX.GE",
- arm_UHSAX_LT: "UHSAX.LT",
- arm_UHSAX_GT: "UHSAX.GT",
- arm_UHSAX_LE: "UHSAX.LE",
- arm_UHSAX: "UHSAX",
- arm_UHSAX_ZZ: "UHSAX.ZZ",
- arm_UHSUB16_EQ: "UHSUB16.EQ",
- arm_UHSUB16_NE: "UHSUB16.NE",
- arm_UHSUB16_CS: "UHSUB16.CS",
- arm_UHSUB16_CC: "UHSUB16.CC",
- arm_UHSUB16_MI: "UHSUB16.MI",
- arm_UHSUB16_PL: "UHSUB16.PL",
- arm_UHSUB16_VS: "UHSUB16.VS",
- arm_UHSUB16_VC: "UHSUB16.VC",
- arm_UHSUB16_HI: "UHSUB16.HI",
- arm_UHSUB16_LS: "UHSUB16.LS",
- arm_UHSUB16_GE: "UHSUB16.GE",
- arm_UHSUB16_LT: "UHSUB16.LT",
- arm_UHSUB16_GT: "UHSUB16.GT",
- arm_UHSUB16_LE: "UHSUB16.LE",
- arm_UHSUB16: "UHSUB16",
- arm_UHSUB16_ZZ: "UHSUB16.ZZ",
- arm_UHSUB8_EQ: "UHSUB8.EQ",
- arm_UHSUB8_NE: "UHSUB8.NE",
- arm_UHSUB8_CS: "UHSUB8.CS",
- arm_UHSUB8_CC: "UHSUB8.CC",
- arm_UHSUB8_MI: "UHSUB8.MI",
- arm_UHSUB8_PL: "UHSUB8.PL",
- arm_UHSUB8_VS: "UHSUB8.VS",
- arm_UHSUB8_VC: "UHSUB8.VC",
- arm_UHSUB8_HI: "UHSUB8.HI",
- arm_UHSUB8_LS: "UHSUB8.LS",
- arm_UHSUB8_GE: "UHSUB8.GE",
- arm_UHSUB8_LT: "UHSUB8.LT",
- arm_UHSUB8_GT: "UHSUB8.GT",
- arm_UHSUB8_LE: "UHSUB8.LE",
- arm_UHSUB8: "UHSUB8",
- arm_UHSUB8_ZZ: "UHSUB8.ZZ",
- arm_UMAAL_EQ: "UMAAL.EQ",
- arm_UMAAL_NE: "UMAAL.NE",
- arm_UMAAL_CS: "UMAAL.CS",
- arm_UMAAL_CC: "UMAAL.CC",
- arm_UMAAL_MI: "UMAAL.MI",
- arm_UMAAL_PL: "UMAAL.PL",
- arm_UMAAL_VS: "UMAAL.VS",
- arm_UMAAL_VC: "UMAAL.VC",
- arm_UMAAL_HI: "UMAAL.HI",
- arm_UMAAL_LS: "UMAAL.LS",
- arm_UMAAL_GE: "UMAAL.GE",
- arm_UMAAL_LT: "UMAAL.LT",
- arm_UMAAL_GT: "UMAAL.GT",
- arm_UMAAL_LE: "UMAAL.LE",
- arm_UMAAL: "UMAAL",
- arm_UMAAL_ZZ: "UMAAL.ZZ",
- arm_UMLAL_EQ: "UMLAL.EQ",
- arm_UMLAL_NE: "UMLAL.NE",
- arm_UMLAL_CS: "UMLAL.CS",
- arm_UMLAL_CC: "UMLAL.CC",
- arm_UMLAL_MI: "UMLAL.MI",
- arm_UMLAL_PL: "UMLAL.PL",
- arm_UMLAL_VS: "UMLAL.VS",
- arm_UMLAL_VC: "UMLAL.VC",
- arm_UMLAL_HI: "UMLAL.HI",
- arm_UMLAL_LS: "UMLAL.LS",
- arm_UMLAL_GE: "UMLAL.GE",
- arm_UMLAL_LT: "UMLAL.LT",
- arm_UMLAL_GT: "UMLAL.GT",
- arm_UMLAL_LE: "UMLAL.LE",
- arm_UMLAL: "UMLAL",
- arm_UMLAL_ZZ: "UMLAL.ZZ",
- arm_UMLAL_S_EQ: "UMLAL.S.EQ",
- arm_UMLAL_S_NE: "UMLAL.S.NE",
- arm_UMLAL_S_CS: "UMLAL.S.CS",
- arm_UMLAL_S_CC: "UMLAL.S.CC",
- arm_UMLAL_S_MI: "UMLAL.S.MI",
- arm_UMLAL_S_PL: "UMLAL.S.PL",
- arm_UMLAL_S_VS: "UMLAL.S.VS",
- arm_UMLAL_S_VC: "UMLAL.S.VC",
- arm_UMLAL_S_HI: "UMLAL.S.HI",
- arm_UMLAL_S_LS: "UMLAL.S.LS",
- arm_UMLAL_S_GE: "UMLAL.S.GE",
- arm_UMLAL_S_LT: "UMLAL.S.LT",
- arm_UMLAL_S_GT: "UMLAL.S.GT",
- arm_UMLAL_S_LE: "UMLAL.S.LE",
- arm_UMLAL_S: "UMLAL.S",
- arm_UMLAL_S_ZZ: "UMLAL.S.ZZ",
- arm_UMULL_EQ: "UMULL.EQ",
- arm_UMULL_NE: "UMULL.NE",
- arm_UMULL_CS: "UMULL.CS",
- arm_UMULL_CC: "UMULL.CC",
- arm_UMULL_MI: "UMULL.MI",
- arm_UMULL_PL: "UMULL.PL",
- arm_UMULL_VS: "UMULL.VS",
- arm_UMULL_VC: "UMULL.VC",
- arm_UMULL_HI: "UMULL.HI",
- arm_UMULL_LS: "UMULL.LS",
- arm_UMULL_GE: "UMULL.GE",
- arm_UMULL_LT: "UMULL.LT",
- arm_UMULL_GT: "UMULL.GT",
- arm_UMULL_LE: "UMULL.LE",
- arm_UMULL: "UMULL",
- arm_UMULL_ZZ: "UMULL.ZZ",
- arm_UMULL_S_EQ: "UMULL.S.EQ",
- arm_UMULL_S_NE: "UMULL.S.NE",
- arm_UMULL_S_CS: "UMULL.S.CS",
- arm_UMULL_S_CC: "UMULL.S.CC",
- arm_UMULL_S_MI: "UMULL.S.MI",
- arm_UMULL_S_PL: "UMULL.S.PL",
- arm_UMULL_S_VS: "UMULL.S.VS",
- arm_UMULL_S_VC: "UMULL.S.VC",
- arm_UMULL_S_HI: "UMULL.S.HI",
- arm_UMULL_S_LS: "UMULL.S.LS",
- arm_UMULL_S_GE: "UMULL.S.GE",
- arm_UMULL_S_LT: "UMULL.S.LT",
- arm_UMULL_S_GT: "UMULL.S.GT",
- arm_UMULL_S_LE: "UMULL.S.LE",
- arm_UMULL_S: "UMULL.S",
- arm_UMULL_S_ZZ: "UMULL.S.ZZ",
- arm_UNDEF: "UNDEF",
- arm_UQADD16_EQ: "UQADD16.EQ",
- arm_UQADD16_NE: "UQADD16.NE",
- arm_UQADD16_CS: "UQADD16.CS",
- arm_UQADD16_CC: "UQADD16.CC",
- arm_UQADD16_MI: "UQADD16.MI",
- arm_UQADD16_PL: "UQADD16.PL",
- arm_UQADD16_VS: "UQADD16.VS",
- arm_UQADD16_VC: "UQADD16.VC",
- arm_UQADD16_HI: "UQADD16.HI",
- arm_UQADD16_LS: "UQADD16.LS",
- arm_UQADD16_GE: "UQADD16.GE",
- arm_UQADD16_LT: "UQADD16.LT",
- arm_UQADD16_GT: "UQADD16.GT",
- arm_UQADD16_LE: "UQADD16.LE",
- arm_UQADD16: "UQADD16",
- arm_UQADD16_ZZ: "UQADD16.ZZ",
- arm_UQADD8_EQ: "UQADD8.EQ",
- arm_UQADD8_NE: "UQADD8.NE",
- arm_UQADD8_CS: "UQADD8.CS",
- arm_UQADD8_CC: "UQADD8.CC",
- arm_UQADD8_MI: "UQADD8.MI",
- arm_UQADD8_PL: "UQADD8.PL",
- arm_UQADD8_VS: "UQADD8.VS",
- arm_UQADD8_VC: "UQADD8.VC",
- arm_UQADD8_HI: "UQADD8.HI",
- arm_UQADD8_LS: "UQADD8.LS",
- arm_UQADD8_GE: "UQADD8.GE",
- arm_UQADD8_LT: "UQADD8.LT",
- arm_UQADD8_GT: "UQADD8.GT",
- arm_UQADD8_LE: "UQADD8.LE",
- arm_UQADD8: "UQADD8",
- arm_UQADD8_ZZ: "UQADD8.ZZ",
- arm_UQASX_EQ: "UQASX.EQ",
- arm_UQASX_NE: "UQASX.NE",
- arm_UQASX_CS: "UQASX.CS",
- arm_UQASX_CC: "UQASX.CC",
- arm_UQASX_MI: "UQASX.MI",
- arm_UQASX_PL: "UQASX.PL",
- arm_UQASX_VS: "UQASX.VS",
- arm_UQASX_VC: "UQASX.VC",
- arm_UQASX_HI: "UQASX.HI",
- arm_UQASX_LS: "UQASX.LS",
- arm_UQASX_GE: "UQASX.GE",
- arm_UQASX_LT: "UQASX.LT",
- arm_UQASX_GT: "UQASX.GT",
- arm_UQASX_LE: "UQASX.LE",
- arm_UQASX: "UQASX",
- arm_UQASX_ZZ: "UQASX.ZZ",
- arm_UQSAX_EQ: "UQSAX.EQ",
- arm_UQSAX_NE: "UQSAX.NE",
- arm_UQSAX_CS: "UQSAX.CS",
- arm_UQSAX_CC: "UQSAX.CC",
- arm_UQSAX_MI: "UQSAX.MI",
- arm_UQSAX_PL: "UQSAX.PL",
- arm_UQSAX_VS: "UQSAX.VS",
- arm_UQSAX_VC: "UQSAX.VC",
- arm_UQSAX_HI: "UQSAX.HI",
- arm_UQSAX_LS: "UQSAX.LS",
- arm_UQSAX_GE: "UQSAX.GE",
- arm_UQSAX_LT: "UQSAX.LT",
- arm_UQSAX_GT: "UQSAX.GT",
- arm_UQSAX_LE: "UQSAX.LE",
- arm_UQSAX: "UQSAX",
- arm_UQSAX_ZZ: "UQSAX.ZZ",
- arm_UQSUB16_EQ: "UQSUB16.EQ",
- arm_UQSUB16_NE: "UQSUB16.NE",
- arm_UQSUB16_CS: "UQSUB16.CS",
- arm_UQSUB16_CC: "UQSUB16.CC",
- arm_UQSUB16_MI: "UQSUB16.MI",
- arm_UQSUB16_PL: "UQSUB16.PL",
- arm_UQSUB16_VS: "UQSUB16.VS",
- arm_UQSUB16_VC: "UQSUB16.VC",
- arm_UQSUB16_HI: "UQSUB16.HI",
- arm_UQSUB16_LS: "UQSUB16.LS",
- arm_UQSUB16_GE: "UQSUB16.GE",
- arm_UQSUB16_LT: "UQSUB16.LT",
- arm_UQSUB16_GT: "UQSUB16.GT",
- arm_UQSUB16_LE: "UQSUB16.LE",
- arm_UQSUB16: "UQSUB16",
- arm_UQSUB16_ZZ: "UQSUB16.ZZ",
- arm_UQSUB8_EQ: "UQSUB8.EQ",
- arm_UQSUB8_NE: "UQSUB8.NE",
- arm_UQSUB8_CS: "UQSUB8.CS",
- arm_UQSUB8_CC: "UQSUB8.CC",
- arm_UQSUB8_MI: "UQSUB8.MI",
- arm_UQSUB8_PL: "UQSUB8.PL",
- arm_UQSUB8_VS: "UQSUB8.VS",
- arm_UQSUB8_VC: "UQSUB8.VC",
- arm_UQSUB8_HI: "UQSUB8.HI",
- arm_UQSUB8_LS: "UQSUB8.LS",
- arm_UQSUB8_GE: "UQSUB8.GE",
- arm_UQSUB8_LT: "UQSUB8.LT",
- arm_UQSUB8_GT: "UQSUB8.GT",
- arm_UQSUB8_LE: "UQSUB8.LE",
- arm_UQSUB8: "UQSUB8",
- arm_UQSUB8_ZZ: "UQSUB8.ZZ",
- arm_USAD8_EQ: "USAD8.EQ",
- arm_USAD8_NE: "USAD8.NE",
- arm_USAD8_CS: "USAD8.CS",
- arm_USAD8_CC: "USAD8.CC",
- arm_USAD8_MI: "USAD8.MI",
- arm_USAD8_PL: "USAD8.PL",
- arm_USAD8_VS: "USAD8.VS",
- arm_USAD8_VC: "USAD8.VC",
- arm_USAD8_HI: "USAD8.HI",
- arm_USAD8_LS: "USAD8.LS",
- arm_USAD8_GE: "USAD8.GE",
- arm_USAD8_LT: "USAD8.LT",
- arm_USAD8_GT: "USAD8.GT",
- arm_USAD8_LE: "USAD8.LE",
- arm_USAD8: "USAD8",
- arm_USAD8_ZZ: "USAD8.ZZ",
- arm_USADA8_EQ: "USADA8.EQ",
- arm_USADA8_NE: "USADA8.NE",
- arm_USADA8_CS: "USADA8.CS",
- arm_USADA8_CC: "USADA8.CC",
- arm_USADA8_MI: "USADA8.MI",
- arm_USADA8_PL: "USADA8.PL",
- arm_USADA8_VS: "USADA8.VS",
- arm_USADA8_VC: "USADA8.VC",
- arm_USADA8_HI: "USADA8.HI",
- arm_USADA8_LS: "USADA8.LS",
- arm_USADA8_GE: "USADA8.GE",
- arm_USADA8_LT: "USADA8.LT",
- arm_USADA8_GT: "USADA8.GT",
- arm_USADA8_LE: "USADA8.LE",
- arm_USADA8: "USADA8",
- arm_USADA8_ZZ: "USADA8.ZZ",
- arm_USAT_EQ: "USAT.EQ",
- arm_USAT_NE: "USAT.NE",
- arm_USAT_CS: "USAT.CS",
- arm_USAT_CC: "USAT.CC",
- arm_USAT_MI: "USAT.MI",
- arm_USAT_PL: "USAT.PL",
- arm_USAT_VS: "USAT.VS",
- arm_USAT_VC: "USAT.VC",
- arm_USAT_HI: "USAT.HI",
- arm_USAT_LS: "USAT.LS",
- arm_USAT_GE: "USAT.GE",
- arm_USAT_LT: "USAT.LT",
- arm_USAT_GT: "USAT.GT",
- arm_USAT_LE: "USAT.LE",
- arm_USAT: "USAT",
- arm_USAT_ZZ: "USAT.ZZ",
- arm_USAT16_EQ: "USAT16.EQ",
- arm_USAT16_NE: "USAT16.NE",
- arm_USAT16_CS: "USAT16.CS",
- arm_USAT16_CC: "USAT16.CC",
- arm_USAT16_MI: "USAT16.MI",
- arm_USAT16_PL: "USAT16.PL",
- arm_USAT16_VS: "USAT16.VS",
- arm_USAT16_VC: "USAT16.VC",
- arm_USAT16_HI: "USAT16.HI",
- arm_USAT16_LS: "USAT16.LS",
- arm_USAT16_GE: "USAT16.GE",
- arm_USAT16_LT: "USAT16.LT",
- arm_USAT16_GT: "USAT16.GT",
- arm_USAT16_LE: "USAT16.LE",
- arm_USAT16: "USAT16",
- arm_USAT16_ZZ: "USAT16.ZZ",
- arm_USAX_EQ: "USAX.EQ",
- arm_USAX_NE: "USAX.NE",
- arm_USAX_CS: "USAX.CS",
- arm_USAX_CC: "USAX.CC",
- arm_USAX_MI: "USAX.MI",
- arm_USAX_PL: "USAX.PL",
- arm_USAX_VS: "USAX.VS",
- arm_USAX_VC: "USAX.VC",
- arm_USAX_HI: "USAX.HI",
- arm_USAX_LS: "USAX.LS",
- arm_USAX_GE: "USAX.GE",
- arm_USAX_LT: "USAX.LT",
- arm_USAX_GT: "USAX.GT",
- arm_USAX_LE: "USAX.LE",
- arm_USAX: "USAX",
- arm_USAX_ZZ: "USAX.ZZ",
- arm_USUB16_EQ: "USUB16.EQ",
- arm_USUB16_NE: "USUB16.NE",
- arm_USUB16_CS: "USUB16.CS",
- arm_USUB16_CC: "USUB16.CC",
- arm_USUB16_MI: "USUB16.MI",
- arm_USUB16_PL: "USUB16.PL",
- arm_USUB16_VS: "USUB16.VS",
- arm_USUB16_VC: "USUB16.VC",
- arm_USUB16_HI: "USUB16.HI",
- arm_USUB16_LS: "USUB16.LS",
- arm_USUB16_GE: "USUB16.GE",
- arm_USUB16_LT: "USUB16.LT",
- arm_USUB16_GT: "USUB16.GT",
- arm_USUB16_LE: "USUB16.LE",
- arm_USUB16: "USUB16",
- arm_USUB16_ZZ: "USUB16.ZZ",
- arm_USUB8_EQ: "USUB8.EQ",
- arm_USUB8_NE: "USUB8.NE",
- arm_USUB8_CS: "USUB8.CS",
- arm_USUB8_CC: "USUB8.CC",
- arm_USUB8_MI: "USUB8.MI",
- arm_USUB8_PL: "USUB8.PL",
- arm_USUB8_VS: "USUB8.VS",
- arm_USUB8_VC: "USUB8.VC",
- arm_USUB8_HI: "USUB8.HI",
- arm_USUB8_LS: "USUB8.LS",
- arm_USUB8_GE: "USUB8.GE",
- arm_USUB8_LT: "USUB8.LT",
- arm_USUB8_GT: "USUB8.GT",
- arm_USUB8_LE: "USUB8.LE",
- arm_USUB8: "USUB8",
- arm_USUB8_ZZ: "USUB8.ZZ",
- arm_UXTAB_EQ: "UXTAB.EQ",
- arm_UXTAB_NE: "UXTAB.NE",
- arm_UXTAB_CS: "UXTAB.CS",
- arm_UXTAB_CC: "UXTAB.CC",
- arm_UXTAB_MI: "UXTAB.MI",
- arm_UXTAB_PL: "UXTAB.PL",
- arm_UXTAB_VS: "UXTAB.VS",
- arm_UXTAB_VC: "UXTAB.VC",
- arm_UXTAB_HI: "UXTAB.HI",
- arm_UXTAB_LS: "UXTAB.LS",
- arm_UXTAB_GE: "UXTAB.GE",
- arm_UXTAB_LT: "UXTAB.LT",
- arm_UXTAB_GT: "UXTAB.GT",
- arm_UXTAB_LE: "UXTAB.LE",
- arm_UXTAB: "UXTAB",
- arm_UXTAB_ZZ: "UXTAB.ZZ",
- arm_UXTAB16_EQ: "UXTAB16.EQ",
- arm_UXTAB16_NE: "UXTAB16.NE",
- arm_UXTAB16_CS: "UXTAB16.CS",
- arm_UXTAB16_CC: "UXTAB16.CC",
- arm_UXTAB16_MI: "UXTAB16.MI",
- arm_UXTAB16_PL: "UXTAB16.PL",
- arm_UXTAB16_VS: "UXTAB16.VS",
- arm_UXTAB16_VC: "UXTAB16.VC",
- arm_UXTAB16_HI: "UXTAB16.HI",
- arm_UXTAB16_LS: "UXTAB16.LS",
- arm_UXTAB16_GE: "UXTAB16.GE",
- arm_UXTAB16_LT: "UXTAB16.LT",
- arm_UXTAB16_GT: "UXTAB16.GT",
- arm_UXTAB16_LE: "UXTAB16.LE",
- arm_UXTAB16: "UXTAB16",
- arm_UXTAB16_ZZ: "UXTAB16.ZZ",
- arm_UXTAH_EQ: "UXTAH.EQ",
- arm_UXTAH_NE: "UXTAH.NE",
- arm_UXTAH_CS: "UXTAH.CS",
- arm_UXTAH_CC: "UXTAH.CC",
- arm_UXTAH_MI: "UXTAH.MI",
- arm_UXTAH_PL: "UXTAH.PL",
- arm_UXTAH_VS: "UXTAH.VS",
- arm_UXTAH_VC: "UXTAH.VC",
- arm_UXTAH_HI: "UXTAH.HI",
- arm_UXTAH_LS: "UXTAH.LS",
- arm_UXTAH_GE: "UXTAH.GE",
- arm_UXTAH_LT: "UXTAH.LT",
- arm_UXTAH_GT: "UXTAH.GT",
- arm_UXTAH_LE: "UXTAH.LE",
- arm_UXTAH: "UXTAH",
- arm_UXTAH_ZZ: "UXTAH.ZZ",
- arm_UXTB_EQ: "UXTB.EQ",
- arm_UXTB_NE: "UXTB.NE",
- arm_UXTB_CS: "UXTB.CS",
- arm_UXTB_CC: "UXTB.CC",
- arm_UXTB_MI: "UXTB.MI",
- arm_UXTB_PL: "UXTB.PL",
- arm_UXTB_VS: "UXTB.VS",
- arm_UXTB_VC: "UXTB.VC",
- arm_UXTB_HI: "UXTB.HI",
- arm_UXTB_LS: "UXTB.LS",
- arm_UXTB_GE: "UXTB.GE",
- arm_UXTB_LT: "UXTB.LT",
- arm_UXTB_GT: "UXTB.GT",
- arm_UXTB_LE: "UXTB.LE",
- arm_UXTB: "UXTB",
- arm_UXTB_ZZ: "UXTB.ZZ",
- arm_UXTB16_EQ: "UXTB16.EQ",
- arm_UXTB16_NE: "UXTB16.NE",
- arm_UXTB16_CS: "UXTB16.CS",
- arm_UXTB16_CC: "UXTB16.CC",
- arm_UXTB16_MI: "UXTB16.MI",
- arm_UXTB16_PL: "UXTB16.PL",
- arm_UXTB16_VS: "UXTB16.VS",
- arm_UXTB16_VC: "UXTB16.VC",
- arm_UXTB16_HI: "UXTB16.HI",
- arm_UXTB16_LS: "UXTB16.LS",
- arm_UXTB16_GE: "UXTB16.GE",
- arm_UXTB16_LT: "UXTB16.LT",
- arm_UXTB16_GT: "UXTB16.GT",
- arm_UXTB16_LE: "UXTB16.LE",
- arm_UXTB16: "UXTB16",
- arm_UXTB16_ZZ: "UXTB16.ZZ",
- arm_UXTH_EQ: "UXTH.EQ",
- arm_UXTH_NE: "UXTH.NE",
- arm_UXTH_CS: "UXTH.CS",
- arm_UXTH_CC: "UXTH.CC",
- arm_UXTH_MI: "UXTH.MI",
- arm_UXTH_PL: "UXTH.PL",
- arm_UXTH_VS: "UXTH.VS",
- arm_UXTH_VC: "UXTH.VC",
- arm_UXTH_HI: "UXTH.HI",
- arm_UXTH_LS: "UXTH.LS",
- arm_UXTH_GE: "UXTH.GE",
- arm_UXTH_LT: "UXTH.LT",
- arm_UXTH_GT: "UXTH.GT",
- arm_UXTH_LE: "UXTH.LE",
- arm_UXTH: "UXTH",
- arm_UXTH_ZZ: "UXTH.ZZ",
- arm_VABS_EQ_F32: "VABS.EQ.F32",
- arm_VABS_NE_F32: "VABS.NE.F32",
- arm_VABS_CS_F32: "VABS.CS.F32",
- arm_VABS_CC_F32: "VABS.CC.F32",
- arm_VABS_MI_F32: "VABS.MI.F32",
- arm_VABS_PL_F32: "VABS.PL.F32",
- arm_VABS_VS_F32: "VABS.VS.F32",
- arm_VABS_VC_F32: "VABS.VC.F32",
- arm_VABS_HI_F32: "VABS.HI.F32",
- arm_VABS_LS_F32: "VABS.LS.F32",
- arm_VABS_GE_F32: "VABS.GE.F32",
- arm_VABS_LT_F32: "VABS.LT.F32",
- arm_VABS_GT_F32: "VABS.GT.F32",
- arm_VABS_LE_F32: "VABS.LE.F32",
- arm_VABS_F32: "VABS.F32",
- arm_VABS_ZZ_F32: "VABS.ZZ.F32",
- arm_VABS_EQ_F64: "VABS.EQ.F64",
- arm_VABS_NE_F64: "VABS.NE.F64",
- arm_VABS_CS_F64: "VABS.CS.F64",
- arm_VABS_CC_F64: "VABS.CC.F64",
- arm_VABS_MI_F64: "VABS.MI.F64",
- arm_VABS_PL_F64: "VABS.PL.F64",
- arm_VABS_VS_F64: "VABS.VS.F64",
- arm_VABS_VC_F64: "VABS.VC.F64",
- arm_VABS_HI_F64: "VABS.HI.F64",
- arm_VABS_LS_F64: "VABS.LS.F64",
- arm_VABS_GE_F64: "VABS.GE.F64",
- arm_VABS_LT_F64: "VABS.LT.F64",
- arm_VABS_GT_F64: "VABS.GT.F64",
- arm_VABS_LE_F64: "VABS.LE.F64",
- arm_VABS_F64: "VABS.F64",
- arm_VABS_ZZ_F64: "VABS.ZZ.F64",
- arm_VADD_EQ_F32: "VADD.EQ.F32",
- arm_VADD_NE_F32: "VADD.NE.F32",
- arm_VADD_CS_F32: "VADD.CS.F32",
- arm_VADD_CC_F32: "VADD.CC.F32",
- arm_VADD_MI_F32: "VADD.MI.F32",
- arm_VADD_PL_F32: "VADD.PL.F32",
- arm_VADD_VS_F32: "VADD.VS.F32",
- arm_VADD_VC_F32: "VADD.VC.F32",
- arm_VADD_HI_F32: "VADD.HI.F32",
- arm_VADD_LS_F32: "VADD.LS.F32",
- arm_VADD_GE_F32: "VADD.GE.F32",
- arm_VADD_LT_F32: "VADD.LT.F32",
- arm_VADD_GT_F32: "VADD.GT.F32",
- arm_VADD_LE_F32: "VADD.LE.F32",
- arm_VADD_F32: "VADD.F32",
- arm_VADD_ZZ_F32: "VADD.ZZ.F32",
- arm_VADD_EQ_F64: "VADD.EQ.F64",
- arm_VADD_NE_F64: "VADD.NE.F64",
- arm_VADD_CS_F64: "VADD.CS.F64",
- arm_VADD_CC_F64: "VADD.CC.F64",
- arm_VADD_MI_F64: "VADD.MI.F64",
- arm_VADD_PL_F64: "VADD.PL.F64",
- arm_VADD_VS_F64: "VADD.VS.F64",
- arm_VADD_VC_F64: "VADD.VC.F64",
- arm_VADD_HI_F64: "VADD.HI.F64",
- arm_VADD_LS_F64: "VADD.LS.F64",
- arm_VADD_GE_F64: "VADD.GE.F64",
- arm_VADD_LT_F64: "VADD.LT.F64",
- arm_VADD_GT_F64: "VADD.GT.F64",
- arm_VADD_LE_F64: "VADD.LE.F64",
- arm_VADD_F64: "VADD.F64",
- arm_VADD_ZZ_F64: "VADD.ZZ.F64",
- arm_VCMP_EQ_F32: "VCMP.EQ.F32",
- arm_VCMP_NE_F32: "VCMP.NE.F32",
- arm_VCMP_CS_F32: "VCMP.CS.F32",
- arm_VCMP_CC_F32: "VCMP.CC.F32",
- arm_VCMP_MI_F32: "VCMP.MI.F32",
- arm_VCMP_PL_F32: "VCMP.PL.F32",
- arm_VCMP_VS_F32: "VCMP.VS.F32",
- arm_VCMP_VC_F32: "VCMP.VC.F32",
- arm_VCMP_HI_F32: "VCMP.HI.F32",
- arm_VCMP_LS_F32: "VCMP.LS.F32",
- arm_VCMP_GE_F32: "VCMP.GE.F32",
- arm_VCMP_LT_F32: "VCMP.LT.F32",
- arm_VCMP_GT_F32: "VCMP.GT.F32",
- arm_VCMP_LE_F32: "VCMP.LE.F32",
- arm_VCMP_F32: "VCMP.F32",
- arm_VCMP_ZZ_F32: "VCMP.ZZ.F32",
- arm_VCMP_EQ_F64: "VCMP.EQ.F64",
- arm_VCMP_NE_F64: "VCMP.NE.F64",
- arm_VCMP_CS_F64: "VCMP.CS.F64",
- arm_VCMP_CC_F64: "VCMP.CC.F64",
- arm_VCMP_MI_F64: "VCMP.MI.F64",
- arm_VCMP_PL_F64: "VCMP.PL.F64",
- arm_VCMP_VS_F64: "VCMP.VS.F64",
- arm_VCMP_VC_F64: "VCMP.VC.F64",
- arm_VCMP_HI_F64: "VCMP.HI.F64",
- arm_VCMP_LS_F64: "VCMP.LS.F64",
- arm_VCMP_GE_F64: "VCMP.GE.F64",
- arm_VCMP_LT_F64: "VCMP.LT.F64",
- arm_VCMP_GT_F64: "VCMP.GT.F64",
- arm_VCMP_LE_F64: "VCMP.LE.F64",
- arm_VCMP_F64: "VCMP.F64",
- arm_VCMP_ZZ_F64: "VCMP.ZZ.F64",
- arm_VCMP_E_EQ_F32: "VCMP.E.EQ.F32",
- arm_VCMP_E_NE_F32: "VCMP.E.NE.F32",
- arm_VCMP_E_CS_F32: "VCMP.E.CS.F32",
- arm_VCMP_E_CC_F32: "VCMP.E.CC.F32",
- arm_VCMP_E_MI_F32: "VCMP.E.MI.F32",
- arm_VCMP_E_PL_F32: "VCMP.E.PL.F32",
- arm_VCMP_E_VS_F32: "VCMP.E.VS.F32",
- arm_VCMP_E_VC_F32: "VCMP.E.VC.F32",
- arm_VCMP_E_HI_F32: "VCMP.E.HI.F32",
- arm_VCMP_E_LS_F32: "VCMP.E.LS.F32",
- arm_VCMP_E_GE_F32: "VCMP.E.GE.F32",
- arm_VCMP_E_LT_F32: "VCMP.E.LT.F32",
- arm_VCMP_E_GT_F32: "VCMP.E.GT.F32",
- arm_VCMP_E_LE_F32: "VCMP.E.LE.F32",
- arm_VCMP_E_F32: "VCMP.E.F32",
- arm_VCMP_E_ZZ_F32: "VCMP.E.ZZ.F32",
- arm_VCMP_E_EQ_F64: "VCMP.E.EQ.F64",
- arm_VCMP_E_NE_F64: "VCMP.E.NE.F64",
- arm_VCMP_E_CS_F64: "VCMP.E.CS.F64",
- arm_VCMP_E_CC_F64: "VCMP.E.CC.F64",
- arm_VCMP_E_MI_F64: "VCMP.E.MI.F64",
- arm_VCMP_E_PL_F64: "VCMP.E.PL.F64",
- arm_VCMP_E_VS_F64: "VCMP.E.VS.F64",
- arm_VCMP_E_VC_F64: "VCMP.E.VC.F64",
- arm_VCMP_E_HI_F64: "VCMP.E.HI.F64",
- arm_VCMP_E_LS_F64: "VCMP.E.LS.F64",
- arm_VCMP_E_GE_F64: "VCMP.E.GE.F64",
- arm_VCMP_E_LT_F64: "VCMP.E.LT.F64",
- arm_VCMP_E_GT_F64: "VCMP.E.GT.F64",
- arm_VCMP_E_LE_F64: "VCMP.E.LE.F64",
- arm_VCMP_E_F64: "VCMP.E.F64",
- arm_VCMP_E_ZZ_F64: "VCMP.E.ZZ.F64",
- arm_VCVT_EQ_F32_FXS16: "VCVT.EQ.F32.FXS16",
- arm_VCVT_NE_F32_FXS16: "VCVT.NE.F32.FXS16",
- arm_VCVT_CS_F32_FXS16: "VCVT.CS.F32.FXS16",
- arm_VCVT_CC_F32_FXS16: "VCVT.CC.F32.FXS16",
- arm_VCVT_MI_F32_FXS16: "VCVT.MI.F32.FXS16",
- arm_VCVT_PL_F32_FXS16: "VCVT.PL.F32.FXS16",
- arm_VCVT_VS_F32_FXS16: "VCVT.VS.F32.FXS16",
- arm_VCVT_VC_F32_FXS16: "VCVT.VC.F32.FXS16",
- arm_VCVT_HI_F32_FXS16: "VCVT.HI.F32.FXS16",
- arm_VCVT_LS_F32_FXS16: "VCVT.LS.F32.FXS16",
- arm_VCVT_GE_F32_FXS16: "VCVT.GE.F32.FXS16",
- arm_VCVT_LT_F32_FXS16: "VCVT.LT.F32.FXS16",
- arm_VCVT_GT_F32_FXS16: "VCVT.GT.F32.FXS16",
- arm_VCVT_LE_F32_FXS16: "VCVT.LE.F32.FXS16",
- arm_VCVT_F32_FXS16: "VCVT.F32.FXS16",
- arm_VCVT_ZZ_F32_FXS16: "VCVT.ZZ.F32.FXS16",
- arm_VCVT_EQ_F32_FXS32: "VCVT.EQ.F32.FXS32",
- arm_VCVT_NE_F32_FXS32: "VCVT.NE.F32.FXS32",
- arm_VCVT_CS_F32_FXS32: "VCVT.CS.F32.FXS32",
- arm_VCVT_CC_F32_FXS32: "VCVT.CC.F32.FXS32",
- arm_VCVT_MI_F32_FXS32: "VCVT.MI.F32.FXS32",
- arm_VCVT_PL_F32_FXS32: "VCVT.PL.F32.FXS32",
- arm_VCVT_VS_F32_FXS32: "VCVT.VS.F32.FXS32",
- arm_VCVT_VC_F32_FXS32: "VCVT.VC.F32.FXS32",
- arm_VCVT_HI_F32_FXS32: "VCVT.HI.F32.FXS32",
- arm_VCVT_LS_F32_FXS32: "VCVT.LS.F32.FXS32",
- arm_VCVT_GE_F32_FXS32: "VCVT.GE.F32.FXS32",
- arm_VCVT_LT_F32_FXS32: "VCVT.LT.F32.FXS32",
- arm_VCVT_GT_F32_FXS32: "VCVT.GT.F32.FXS32",
- arm_VCVT_LE_F32_FXS32: "VCVT.LE.F32.FXS32",
- arm_VCVT_F32_FXS32: "VCVT.F32.FXS32",
- arm_VCVT_ZZ_F32_FXS32: "VCVT.ZZ.F32.FXS32",
- arm_VCVT_EQ_F32_FXU16: "VCVT.EQ.F32.FXU16",
- arm_VCVT_NE_F32_FXU16: "VCVT.NE.F32.FXU16",
- arm_VCVT_CS_F32_FXU16: "VCVT.CS.F32.FXU16",
- arm_VCVT_CC_F32_FXU16: "VCVT.CC.F32.FXU16",
- arm_VCVT_MI_F32_FXU16: "VCVT.MI.F32.FXU16",
- arm_VCVT_PL_F32_FXU16: "VCVT.PL.F32.FXU16",
- arm_VCVT_VS_F32_FXU16: "VCVT.VS.F32.FXU16",
- arm_VCVT_VC_F32_FXU16: "VCVT.VC.F32.FXU16",
- arm_VCVT_HI_F32_FXU16: "VCVT.HI.F32.FXU16",
- arm_VCVT_LS_F32_FXU16: "VCVT.LS.F32.FXU16",
- arm_VCVT_GE_F32_FXU16: "VCVT.GE.F32.FXU16",
- arm_VCVT_LT_F32_FXU16: "VCVT.LT.F32.FXU16",
- arm_VCVT_GT_F32_FXU16: "VCVT.GT.F32.FXU16",
- arm_VCVT_LE_F32_FXU16: "VCVT.LE.F32.FXU16",
- arm_VCVT_F32_FXU16: "VCVT.F32.FXU16",
- arm_VCVT_ZZ_F32_FXU16: "VCVT.ZZ.F32.FXU16",
- arm_VCVT_EQ_F32_FXU32: "VCVT.EQ.F32.FXU32",
- arm_VCVT_NE_F32_FXU32: "VCVT.NE.F32.FXU32",
- arm_VCVT_CS_F32_FXU32: "VCVT.CS.F32.FXU32",
- arm_VCVT_CC_F32_FXU32: "VCVT.CC.F32.FXU32",
- arm_VCVT_MI_F32_FXU32: "VCVT.MI.F32.FXU32",
- arm_VCVT_PL_F32_FXU32: "VCVT.PL.F32.FXU32",
- arm_VCVT_VS_F32_FXU32: "VCVT.VS.F32.FXU32",
- arm_VCVT_VC_F32_FXU32: "VCVT.VC.F32.FXU32",
- arm_VCVT_HI_F32_FXU32: "VCVT.HI.F32.FXU32",
- arm_VCVT_LS_F32_FXU32: "VCVT.LS.F32.FXU32",
- arm_VCVT_GE_F32_FXU32: "VCVT.GE.F32.FXU32",
- arm_VCVT_LT_F32_FXU32: "VCVT.LT.F32.FXU32",
- arm_VCVT_GT_F32_FXU32: "VCVT.GT.F32.FXU32",
- arm_VCVT_LE_F32_FXU32: "VCVT.LE.F32.FXU32",
- arm_VCVT_F32_FXU32: "VCVT.F32.FXU32",
- arm_VCVT_ZZ_F32_FXU32: "VCVT.ZZ.F32.FXU32",
- arm_VCVT_EQ_F64_FXS16: "VCVT.EQ.F64.FXS16",
- arm_VCVT_NE_F64_FXS16: "VCVT.NE.F64.FXS16",
- arm_VCVT_CS_F64_FXS16: "VCVT.CS.F64.FXS16",
- arm_VCVT_CC_F64_FXS16: "VCVT.CC.F64.FXS16",
- arm_VCVT_MI_F64_FXS16: "VCVT.MI.F64.FXS16",
- arm_VCVT_PL_F64_FXS16: "VCVT.PL.F64.FXS16",
- arm_VCVT_VS_F64_FXS16: "VCVT.VS.F64.FXS16",
- arm_VCVT_VC_F64_FXS16: "VCVT.VC.F64.FXS16",
- arm_VCVT_HI_F64_FXS16: "VCVT.HI.F64.FXS16",
- arm_VCVT_LS_F64_FXS16: "VCVT.LS.F64.FXS16",
- arm_VCVT_GE_F64_FXS16: "VCVT.GE.F64.FXS16",
- arm_VCVT_LT_F64_FXS16: "VCVT.LT.F64.FXS16",
- arm_VCVT_GT_F64_FXS16: "VCVT.GT.F64.FXS16",
- arm_VCVT_LE_F64_FXS16: "VCVT.LE.F64.FXS16",
- arm_VCVT_F64_FXS16: "VCVT.F64.FXS16",
- arm_VCVT_ZZ_F64_FXS16: "VCVT.ZZ.F64.FXS16",
- arm_VCVT_EQ_F64_FXS32: "VCVT.EQ.F64.FXS32",
- arm_VCVT_NE_F64_FXS32: "VCVT.NE.F64.FXS32",
- arm_VCVT_CS_F64_FXS32: "VCVT.CS.F64.FXS32",
- arm_VCVT_CC_F64_FXS32: "VCVT.CC.F64.FXS32",
- arm_VCVT_MI_F64_FXS32: "VCVT.MI.F64.FXS32",
- arm_VCVT_PL_F64_FXS32: "VCVT.PL.F64.FXS32",
- arm_VCVT_VS_F64_FXS32: "VCVT.VS.F64.FXS32",
- arm_VCVT_VC_F64_FXS32: "VCVT.VC.F64.FXS32",
- arm_VCVT_HI_F64_FXS32: "VCVT.HI.F64.FXS32",
- arm_VCVT_LS_F64_FXS32: "VCVT.LS.F64.FXS32",
- arm_VCVT_GE_F64_FXS32: "VCVT.GE.F64.FXS32",
- arm_VCVT_LT_F64_FXS32: "VCVT.LT.F64.FXS32",
- arm_VCVT_GT_F64_FXS32: "VCVT.GT.F64.FXS32",
- arm_VCVT_LE_F64_FXS32: "VCVT.LE.F64.FXS32",
- arm_VCVT_F64_FXS32: "VCVT.F64.FXS32",
- arm_VCVT_ZZ_F64_FXS32: "VCVT.ZZ.F64.FXS32",
- arm_VCVT_EQ_F64_FXU16: "VCVT.EQ.F64.FXU16",
- arm_VCVT_NE_F64_FXU16: "VCVT.NE.F64.FXU16",
- arm_VCVT_CS_F64_FXU16: "VCVT.CS.F64.FXU16",
- arm_VCVT_CC_F64_FXU16: "VCVT.CC.F64.FXU16",
- arm_VCVT_MI_F64_FXU16: "VCVT.MI.F64.FXU16",
- arm_VCVT_PL_F64_FXU16: "VCVT.PL.F64.FXU16",
- arm_VCVT_VS_F64_FXU16: "VCVT.VS.F64.FXU16",
- arm_VCVT_VC_F64_FXU16: "VCVT.VC.F64.FXU16",
- arm_VCVT_HI_F64_FXU16: "VCVT.HI.F64.FXU16",
- arm_VCVT_LS_F64_FXU16: "VCVT.LS.F64.FXU16",
- arm_VCVT_GE_F64_FXU16: "VCVT.GE.F64.FXU16",
- arm_VCVT_LT_F64_FXU16: "VCVT.LT.F64.FXU16",
- arm_VCVT_GT_F64_FXU16: "VCVT.GT.F64.FXU16",
- arm_VCVT_LE_F64_FXU16: "VCVT.LE.F64.FXU16",
- arm_VCVT_F64_FXU16: "VCVT.F64.FXU16",
- arm_VCVT_ZZ_F64_FXU16: "VCVT.ZZ.F64.FXU16",
- arm_VCVT_EQ_F64_FXU32: "VCVT.EQ.F64.FXU32",
- arm_VCVT_NE_F64_FXU32: "VCVT.NE.F64.FXU32",
- arm_VCVT_CS_F64_FXU32: "VCVT.CS.F64.FXU32",
- arm_VCVT_CC_F64_FXU32: "VCVT.CC.F64.FXU32",
- arm_VCVT_MI_F64_FXU32: "VCVT.MI.F64.FXU32",
- arm_VCVT_PL_F64_FXU32: "VCVT.PL.F64.FXU32",
- arm_VCVT_VS_F64_FXU32: "VCVT.VS.F64.FXU32",
- arm_VCVT_VC_F64_FXU32: "VCVT.VC.F64.FXU32",
- arm_VCVT_HI_F64_FXU32: "VCVT.HI.F64.FXU32",
- arm_VCVT_LS_F64_FXU32: "VCVT.LS.F64.FXU32",
- arm_VCVT_GE_F64_FXU32: "VCVT.GE.F64.FXU32",
- arm_VCVT_LT_F64_FXU32: "VCVT.LT.F64.FXU32",
- arm_VCVT_GT_F64_FXU32: "VCVT.GT.F64.FXU32",
- arm_VCVT_LE_F64_FXU32: "VCVT.LE.F64.FXU32",
- arm_VCVT_F64_FXU32: "VCVT.F64.FXU32",
- arm_VCVT_ZZ_F64_FXU32: "VCVT.ZZ.F64.FXU32",
- arm_VCVT_EQ_F32_U32: "VCVT.EQ.F32.U32",
- arm_VCVT_NE_F32_U32: "VCVT.NE.F32.U32",
- arm_VCVT_CS_F32_U32: "VCVT.CS.F32.U32",
- arm_VCVT_CC_F32_U32: "VCVT.CC.F32.U32",
- arm_VCVT_MI_F32_U32: "VCVT.MI.F32.U32",
- arm_VCVT_PL_F32_U32: "VCVT.PL.F32.U32",
- arm_VCVT_VS_F32_U32: "VCVT.VS.F32.U32",
- arm_VCVT_VC_F32_U32: "VCVT.VC.F32.U32",
- arm_VCVT_HI_F32_U32: "VCVT.HI.F32.U32",
- arm_VCVT_LS_F32_U32: "VCVT.LS.F32.U32",
- arm_VCVT_GE_F32_U32: "VCVT.GE.F32.U32",
- arm_VCVT_LT_F32_U32: "VCVT.LT.F32.U32",
- arm_VCVT_GT_F32_U32: "VCVT.GT.F32.U32",
- arm_VCVT_LE_F32_U32: "VCVT.LE.F32.U32",
- arm_VCVT_F32_U32: "VCVT.F32.U32",
- arm_VCVT_ZZ_F32_U32: "VCVT.ZZ.F32.U32",
- arm_VCVT_EQ_F32_S32: "VCVT.EQ.F32.S32",
- arm_VCVT_NE_F32_S32: "VCVT.NE.F32.S32",
- arm_VCVT_CS_F32_S32: "VCVT.CS.F32.S32",
- arm_VCVT_CC_F32_S32: "VCVT.CC.F32.S32",
- arm_VCVT_MI_F32_S32: "VCVT.MI.F32.S32",
- arm_VCVT_PL_F32_S32: "VCVT.PL.F32.S32",
- arm_VCVT_VS_F32_S32: "VCVT.VS.F32.S32",
- arm_VCVT_VC_F32_S32: "VCVT.VC.F32.S32",
- arm_VCVT_HI_F32_S32: "VCVT.HI.F32.S32",
- arm_VCVT_LS_F32_S32: "VCVT.LS.F32.S32",
- arm_VCVT_GE_F32_S32: "VCVT.GE.F32.S32",
- arm_VCVT_LT_F32_S32: "VCVT.LT.F32.S32",
- arm_VCVT_GT_F32_S32: "VCVT.GT.F32.S32",
- arm_VCVT_LE_F32_S32: "VCVT.LE.F32.S32",
- arm_VCVT_F32_S32: "VCVT.F32.S32",
- arm_VCVT_ZZ_F32_S32: "VCVT.ZZ.F32.S32",
- arm_VCVT_EQ_F64_U32: "VCVT.EQ.F64.U32",
- arm_VCVT_NE_F64_U32: "VCVT.NE.F64.U32",
- arm_VCVT_CS_F64_U32: "VCVT.CS.F64.U32",
- arm_VCVT_CC_F64_U32: "VCVT.CC.F64.U32",
- arm_VCVT_MI_F64_U32: "VCVT.MI.F64.U32",
- arm_VCVT_PL_F64_U32: "VCVT.PL.F64.U32",
- arm_VCVT_VS_F64_U32: "VCVT.VS.F64.U32",
- arm_VCVT_VC_F64_U32: "VCVT.VC.F64.U32",
- arm_VCVT_HI_F64_U32: "VCVT.HI.F64.U32",
- arm_VCVT_LS_F64_U32: "VCVT.LS.F64.U32",
- arm_VCVT_GE_F64_U32: "VCVT.GE.F64.U32",
- arm_VCVT_LT_F64_U32: "VCVT.LT.F64.U32",
- arm_VCVT_GT_F64_U32: "VCVT.GT.F64.U32",
- arm_VCVT_LE_F64_U32: "VCVT.LE.F64.U32",
- arm_VCVT_F64_U32: "VCVT.F64.U32",
- arm_VCVT_ZZ_F64_U32: "VCVT.ZZ.F64.U32",
- arm_VCVT_EQ_F64_S32: "VCVT.EQ.F64.S32",
- arm_VCVT_NE_F64_S32: "VCVT.NE.F64.S32",
- arm_VCVT_CS_F64_S32: "VCVT.CS.F64.S32",
- arm_VCVT_CC_F64_S32: "VCVT.CC.F64.S32",
- arm_VCVT_MI_F64_S32: "VCVT.MI.F64.S32",
- arm_VCVT_PL_F64_S32: "VCVT.PL.F64.S32",
- arm_VCVT_VS_F64_S32: "VCVT.VS.F64.S32",
- arm_VCVT_VC_F64_S32: "VCVT.VC.F64.S32",
- arm_VCVT_HI_F64_S32: "VCVT.HI.F64.S32",
- arm_VCVT_LS_F64_S32: "VCVT.LS.F64.S32",
- arm_VCVT_GE_F64_S32: "VCVT.GE.F64.S32",
- arm_VCVT_LT_F64_S32: "VCVT.LT.F64.S32",
- arm_VCVT_GT_F64_S32: "VCVT.GT.F64.S32",
- arm_VCVT_LE_F64_S32: "VCVT.LE.F64.S32",
- arm_VCVT_F64_S32: "VCVT.F64.S32",
- arm_VCVT_ZZ_F64_S32: "VCVT.ZZ.F64.S32",
- arm_VCVT_EQ_F64_F32: "VCVT.EQ.F64.F32",
- arm_VCVT_NE_F64_F32: "VCVT.NE.F64.F32",
- arm_VCVT_CS_F64_F32: "VCVT.CS.F64.F32",
- arm_VCVT_CC_F64_F32: "VCVT.CC.F64.F32",
- arm_VCVT_MI_F64_F32: "VCVT.MI.F64.F32",
- arm_VCVT_PL_F64_F32: "VCVT.PL.F64.F32",
- arm_VCVT_VS_F64_F32: "VCVT.VS.F64.F32",
- arm_VCVT_VC_F64_F32: "VCVT.VC.F64.F32",
- arm_VCVT_HI_F64_F32: "VCVT.HI.F64.F32",
- arm_VCVT_LS_F64_F32: "VCVT.LS.F64.F32",
- arm_VCVT_GE_F64_F32: "VCVT.GE.F64.F32",
- arm_VCVT_LT_F64_F32: "VCVT.LT.F64.F32",
- arm_VCVT_GT_F64_F32: "VCVT.GT.F64.F32",
- arm_VCVT_LE_F64_F32: "VCVT.LE.F64.F32",
- arm_VCVT_F64_F32: "VCVT.F64.F32",
- arm_VCVT_ZZ_F64_F32: "VCVT.ZZ.F64.F32",
- arm_VCVT_EQ_F32_F64: "VCVT.EQ.F32.F64",
- arm_VCVT_NE_F32_F64: "VCVT.NE.F32.F64",
- arm_VCVT_CS_F32_F64: "VCVT.CS.F32.F64",
- arm_VCVT_CC_F32_F64: "VCVT.CC.F32.F64",
- arm_VCVT_MI_F32_F64: "VCVT.MI.F32.F64",
- arm_VCVT_PL_F32_F64: "VCVT.PL.F32.F64",
- arm_VCVT_VS_F32_F64: "VCVT.VS.F32.F64",
- arm_VCVT_VC_F32_F64: "VCVT.VC.F32.F64",
- arm_VCVT_HI_F32_F64: "VCVT.HI.F32.F64",
- arm_VCVT_LS_F32_F64: "VCVT.LS.F32.F64",
- arm_VCVT_GE_F32_F64: "VCVT.GE.F32.F64",
- arm_VCVT_LT_F32_F64: "VCVT.LT.F32.F64",
- arm_VCVT_GT_F32_F64: "VCVT.GT.F32.F64",
- arm_VCVT_LE_F32_F64: "VCVT.LE.F32.F64",
- arm_VCVT_F32_F64: "VCVT.F32.F64",
- arm_VCVT_ZZ_F32_F64: "VCVT.ZZ.F32.F64",
- arm_VCVT_EQ_FXS16_F32: "VCVT.EQ.FXS16.F32",
- arm_VCVT_NE_FXS16_F32: "VCVT.NE.FXS16.F32",
- arm_VCVT_CS_FXS16_F32: "VCVT.CS.FXS16.F32",
- arm_VCVT_CC_FXS16_F32: "VCVT.CC.FXS16.F32",
- arm_VCVT_MI_FXS16_F32: "VCVT.MI.FXS16.F32",
- arm_VCVT_PL_FXS16_F32: "VCVT.PL.FXS16.F32",
- arm_VCVT_VS_FXS16_F32: "VCVT.VS.FXS16.F32",
- arm_VCVT_VC_FXS16_F32: "VCVT.VC.FXS16.F32",
- arm_VCVT_HI_FXS16_F32: "VCVT.HI.FXS16.F32",
- arm_VCVT_LS_FXS16_F32: "VCVT.LS.FXS16.F32",
- arm_VCVT_GE_FXS16_F32: "VCVT.GE.FXS16.F32",
- arm_VCVT_LT_FXS16_F32: "VCVT.LT.FXS16.F32",
- arm_VCVT_GT_FXS16_F32: "VCVT.GT.FXS16.F32",
- arm_VCVT_LE_FXS16_F32: "VCVT.LE.FXS16.F32",
- arm_VCVT_FXS16_F32: "VCVT.FXS16.F32",
- arm_VCVT_ZZ_FXS16_F32: "VCVT.ZZ.FXS16.F32",
- arm_VCVT_EQ_FXS16_F64: "VCVT.EQ.FXS16.F64",
- arm_VCVT_NE_FXS16_F64: "VCVT.NE.FXS16.F64",
- arm_VCVT_CS_FXS16_F64: "VCVT.CS.FXS16.F64",
- arm_VCVT_CC_FXS16_F64: "VCVT.CC.FXS16.F64",
- arm_VCVT_MI_FXS16_F64: "VCVT.MI.FXS16.F64",
- arm_VCVT_PL_FXS16_F64: "VCVT.PL.FXS16.F64",
- arm_VCVT_VS_FXS16_F64: "VCVT.VS.FXS16.F64",
- arm_VCVT_VC_FXS16_F64: "VCVT.VC.FXS16.F64",
- arm_VCVT_HI_FXS16_F64: "VCVT.HI.FXS16.F64",
- arm_VCVT_LS_FXS16_F64: "VCVT.LS.FXS16.F64",
- arm_VCVT_GE_FXS16_F64: "VCVT.GE.FXS16.F64",
- arm_VCVT_LT_FXS16_F64: "VCVT.LT.FXS16.F64",
- arm_VCVT_GT_FXS16_F64: "VCVT.GT.FXS16.F64",
- arm_VCVT_LE_FXS16_F64: "VCVT.LE.FXS16.F64",
- arm_VCVT_FXS16_F64: "VCVT.FXS16.F64",
- arm_VCVT_ZZ_FXS16_F64: "VCVT.ZZ.FXS16.F64",
- arm_VCVT_EQ_FXS32_F32: "VCVT.EQ.FXS32.F32",
- arm_VCVT_NE_FXS32_F32: "VCVT.NE.FXS32.F32",
- arm_VCVT_CS_FXS32_F32: "VCVT.CS.FXS32.F32",
- arm_VCVT_CC_FXS32_F32: "VCVT.CC.FXS32.F32",
- arm_VCVT_MI_FXS32_F32: "VCVT.MI.FXS32.F32",
- arm_VCVT_PL_FXS32_F32: "VCVT.PL.FXS32.F32",
- arm_VCVT_VS_FXS32_F32: "VCVT.VS.FXS32.F32",
- arm_VCVT_VC_FXS32_F32: "VCVT.VC.FXS32.F32",
- arm_VCVT_HI_FXS32_F32: "VCVT.HI.FXS32.F32",
- arm_VCVT_LS_FXS32_F32: "VCVT.LS.FXS32.F32",
- arm_VCVT_GE_FXS32_F32: "VCVT.GE.FXS32.F32",
- arm_VCVT_LT_FXS32_F32: "VCVT.LT.FXS32.F32",
- arm_VCVT_GT_FXS32_F32: "VCVT.GT.FXS32.F32",
- arm_VCVT_LE_FXS32_F32: "VCVT.LE.FXS32.F32",
- arm_VCVT_FXS32_F32: "VCVT.FXS32.F32",
- arm_VCVT_ZZ_FXS32_F32: "VCVT.ZZ.FXS32.F32",
- arm_VCVT_EQ_FXS32_F64: "VCVT.EQ.FXS32.F64",
- arm_VCVT_NE_FXS32_F64: "VCVT.NE.FXS32.F64",
- arm_VCVT_CS_FXS32_F64: "VCVT.CS.FXS32.F64",
- arm_VCVT_CC_FXS32_F64: "VCVT.CC.FXS32.F64",
- arm_VCVT_MI_FXS32_F64: "VCVT.MI.FXS32.F64",
- arm_VCVT_PL_FXS32_F64: "VCVT.PL.FXS32.F64",
- arm_VCVT_VS_FXS32_F64: "VCVT.VS.FXS32.F64",
- arm_VCVT_VC_FXS32_F64: "VCVT.VC.FXS32.F64",
- arm_VCVT_HI_FXS32_F64: "VCVT.HI.FXS32.F64",
- arm_VCVT_LS_FXS32_F64: "VCVT.LS.FXS32.F64",
- arm_VCVT_GE_FXS32_F64: "VCVT.GE.FXS32.F64",
- arm_VCVT_LT_FXS32_F64: "VCVT.LT.FXS32.F64",
- arm_VCVT_GT_FXS32_F64: "VCVT.GT.FXS32.F64",
- arm_VCVT_LE_FXS32_F64: "VCVT.LE.FXS32.F64",
- arm_VCVT_FXS32_F64: "VCVT.FXS32.F64",
- arm_VCVT_ZZ_FXS32_F64: "VCVT.ZZ.FXS32.F64",
- arm_VCVT_EQ_FXU16_F32: "VCVT.EQ.FXU16.F32",
- arm_VCVT_NE_FXU16_F32: "VCVT.NE.FXU16.F32",
- arm_VCVT_CS_FXU16_F32: "VCVT.CS.FXU16.F32",
- arm_VCVT_CC_FXU16_F32: "VCVT.CC.FXU16.F32",
- arm_VCVT_MI_FXU16_F32: "VCVT.MI.FXU16.F32",
- arm_VCVT_PL_FXU16_F32: "VCVT.PL.FXU16.F32",
- arm_VCVT_VS_FXU16_F32: "VCVT.VS.FXU16.F32",
- arm_VCVT_VC_FXU16_F32: "VCVT.VC.FXU16.F32",
- arm_VCVT_HI_FXU16_F32: "VCVT.HI.FXU16.F32",
- arm_VCVT_LS_FXU16_F32: "VCVT.LS.FXU16.F32",
- arm_VCVT_GE_FXU16_F32: "VCVT.GE.FXU16.F32",
- arm_VCVT_LT_FXU16_F32: "VCVT.LT.FXU16.F32",
- arm_VCVT_GT_FXU16_F32: "VCVT.GT.FXU16.F32",
- arm_VCVT_LE_FXU16_F32: "VCVT.LE.FXU16.F32",
- arm_VCVT_FXU16_F32: "VCVT.FXU16.F32",
- arm_VCVT_ZZ_FXU16_F32: "VCVT.ZZ.FXU16.F32",
- arm_VCVT_EQ_FXU16_F64: "VCVT.EQ.FXU16.F64",
- arm_VCVT_NE_FXU16_F64: "VCVT.NE.FXU16.F64",
- arm_VCVT_CS_FXU16_F64: "VCVT.CS.FXU16.F64",
- arm_VCVT_CC_FXU16_F64: "VCVT.CC.FXU16.F64",
- arm_VCVT_MI_FXU16_F64: "VCVT.MI.FXU16.F64",
- arm_VCVT_PL_FXU16_F64: "VCVT.PL.FXU16.F64",
- arm_VCVT_VS_FXU16_F64: "VCVT.VS.FXU16.F64",
- arm_VCVT_VC_FXU16_F64: "VCVT.VC.FXU16.F64",
- arm_VCVT_HI_FXU16_F64: "VCVT.HI.FXU16.F64",
- arm_VCVT_LS_FXU16_F64: "VCVT.LS.FXU16.F64",
- arm_VCVT_GE_FXU16_F64: "VCVT.GE.FXU16.F64",
- arm_VCVT_LT_FXU16_F64: "VCVT.LT.FXU16.F64",
- arm_VCVT_GT_FXU16_F64: "VCVT.GT.FXU16.F64",
- arm_VCVT_LE_FXU16_F64: "VCVT.LE.FXU16.F64",
- arm_VCVT_FXU16_F64: "VCVT.FXU16.F64",
- arm_VCVT_ZZ_FXU16_F64: "VCVT.ZZ.FXU16.F64",
- arm_VCVT_EQ_FXU32_F32: "VCVT.EQ.FXU32.F32",
- arm_VCVT_NE_FXU32_F32: "VCVT.NE.FXU32.F32",
- arm_VCVT_CS_FXU32_F32: "VCVT.CS.FXU32.F32",
- arm_VCVT_CC_FXU32_F32: "VCVT.CC.FXU32.F32",
- arm_VCVT_MI_FXU32_F32: "VCVT.MI.FXU32.F32",
- arm_VCVT_PL_FXU32_F32: "VCVT.PL.FXU32.F32",
- arm_VCVT_VS_FXU32_F32: "VCVT.VS.FXU32.F32",
- arm_VCVT_VC_FXU32_F32: "VCVT.VC.FXU32.F32",
- arm_VCVT_HI_FXU32_F32: "VCVT.HI.FXU32.F32",
- arm_VCVT_LS_FXU32_F32: "VCVT.LS.FXU32.F32",
- arm_VCVT_GE_FXU32_F32: "VCVT.GE.FXU32.F32",
- arm_VCVT_LT_FXU32_F32: "VCVT.LT.FXU32.F32",
- arm_VCVT_GT_FXU32_F32: "VCVT.GT.FXU32.F32",
- arm_VCVT_LE_FXU32_F32: "VCVT.LE.FXU32.F32",
- arm_VCVT_FXU32_F32: "VCVT.FXU32.F32",
- arm_VCVT_ZZ_FXU32_F32: "VCVT.ZZ.FXU32.F32",
- arm_VCVT_EQ_FXU32_F64: "VCVT.EQ.FXU32.F64",
- arm_VCVT_NE_FXU32_F64: "VCVT.NE.FXU32.F64",
- arm_VCVT_CS_FXU32_F64: "VCVT.CS.FXU32.F64",
- arm_VCVT_CC_FXU32_F64: "VCVT.CC.FXU32.F64",
- arm_VCVT_MI_FXU32_F64: "VCVT.MI.FXU32.F64",
- arm_VCVT_PL_FXU32_F64: "VCVT.PL.FXU32.F64",
- arm_VCVT_VS_FXU32_F64: "VCVT.VS.FXU32.F64",
- arm_VCVT_VC_FXU32_F64: "VCVT.VC.FXU32.F64",
- arm_VCVT_HI_FXU32_F64: "VCVT.HI.FXU32.F64",
- arm_VCVT_LS_FXU32_F64: "VCVT.LS.FXU32.F64",
- arm_VCVT_GE_FXU32_F64: "VCVT.GE.FXU32.F64",
- arm_VCVT_LT_FXU32_F64: "VCVT.LT.FXU32.F64",
- arm_VCVT_GT_FXU32_F64: "VCVT.GT.FXU32.F64",
- arm_VCVT_LE_FXU32_F64: "VCVT.LE.FXU32.F64",
- arm_VCVT_FXU32_F64: "VCVT.FXU32.F64",
- arm_VCVT_ZZ_FXU32_F64: "VCVT.ZZ.FXU32.F64",
- arm_VCVTB_EQ_F32_F16: "VCVTB.EQ.F32.F16",
- arm_VCVTB_NE_F32_F16: "VCVTB.NE.F32.F16",
- arm_VCVTB_CS_F32_F16: "VCVTB.CS.F32.F16",
- arm_VCVTB_CC_F32_F16: "VCVTB.CC.F32.F16",
- arm_VCVTB_MI_F32_F16: "VCVTB.MI.F32.F16",
- arm_VCVTB_PL_F32_F16: "VCVTB.PL.F32.F16",
- arm_VCVTB_VS_F32_F16: "VCVTB.VS.F32.F16",
- arm_VCVTB_VC_F32_F16: "VCVTB.VC.F32.F16",
- arm_VCVTB_HI_F32_F16: "VCVTB.HI.F32.F16",
- arm_VCVTB_LS_F32_F16: "VCVTB.LS.F32.F16",
- arm_VCVTB_GE_F32_F16: "VCVTB.GE.F32.F16",
- arm_VCVTB_LT_F32_F16: "VCVTB.LT.F32.F16",
- arm_VCVTB_GT_F32_F16: "VCVTB.GT.F32.F16",
- arm_VCVTB_LE_F32_F16: "VCVTB.LE.F32.F16",
- arm_VCVTB_F32_F16: "VCVTB.F32.F16",
- arm_VCVTB_ZZ_F32_F16: "VCVTB.ZZ.F32.F16",
- arm_VCVTB_EQ_F16_F32: "VCVTB.EQ.F16.F32",
- arm_VCVTB_NE_F16_F32: "VCVTB.NE.F16.F32",
- arm_VCVTB_CS_F16_F32: "VCVTB.CS.F16.F32",
- arm_VCVTB_CC_F16_F32: "VCVTB.CC.F16.F32",
- arm_VCVTB_MI_F16_F32: "VCVTB.MI.F16.F32",
- arm_VCVTB_PL_F16_F32: "VCVTB.PL.F16.F32",
- arm_VCVTB_VS_F16_F32: "VCVTB.VS.F16.F32",
- arm_VCVTB_VC_F16_F32: "VCVTB.VC.F16.F32",
- arm_VCVTB_HI_F16_F32: "VCVTB.HI.F16.F32",
- arm_VCVTB_LS_F16_F32: "VCVTB.LS.F16.F32",
- arm_VCVTB_GE_F16_F32: "VCVTB.GE.F16.F32",
- arm_VCVTB_LT_F16_F32: "VCVTB.LT.F16.F32",
- arm_VCVTB_GT_F16_F32: "VCVTB.GT.F16.F32",
- arm_VCVTB_LE_F16_F32: "VCVTB.LE.F16.F32",
- arm_VCVTB_F16_F32: "VCVTB.F16.F32",
- arm_VCVTB_ZZ_F16_F32: "VCVTB.ZZ.F16.F32",
- arm_VCVTT_EQ_F32_F16: "VCVTT.EQ.F32.F16",
- arm_VCVTT_NE_F32_F16: "VCVTT.NE.F32.F16",
- arm_VCVTT_CS_F32_F16: "VCVTT.CS.F32.F16",
- arm_VCVTT_CC_F32_F16: "VCVTT.CC.F32.F16",
- arm_VCVTT_MI_F32_F16: "VCVTT.MI.F32.F16",
- arm_VCVTT_PL_F32_F16: "VCVTT.PL.F32.F16",
- arm_VCVTT_VS_F32_F16: "VCVTT.VS.F32.F16",
- arm_VCVTT_VC_F32_F16: "VCVTT.VC.F32.F16",
- arm_VCVTT_HI_F32_F16: "VCVTT.HI.F32.F16",
- arm_VCVTT_LS_F32_F16: "VCVTT.LS.F32.F16",
- arm_VCVTT_GE_F32_F16: "VCVTT.GE.F32.F16",
- arm_VCVTT_LT_F32_F16: "VCVTT.LT.F32.F16",
- arm_VCVTT_GT_F32_F16: "VCVTT.GT.F32.F16",
- arm_VCVTT_LE_F32_F16: "VCVTT.LE.F32.F16",
- arm_VCVTT_F32_F16: "VCVTT.F32.F16",
- arm_VCVTT_ZZ_F32_F16: "VCVTT.ZZ.F32.F16",
- arm_VCVTT_EQ_F16_F32: "VCVTT.EQ.F16.F32",
- arm_VCVTT_NE_F16_F32: "VCVTT.NE.F16.F32",
- arm_VCVTT_CS_F16_F32: "VCVTT.CS.F16.F32",
- arm_VCVTT_CC_F16_F32: "VCVTT.CC.F16.F32",
- arm_VCVTT_MI_F16_F32: "VCVTT.MI.F16.F32",
- arm_VCVTT_PL_F16_F32: "VCVTT.PL.F16.F32",
- arm_VCVTT_VS_F16_F32: "VCVTT.VS.F16.F32",
- arm_VCVTT_VC_F16_F32: "VCVTT.VC.F16.F32",
- arm_VCVTT_HI_F16_F32: "VCVTT.HI.F16.F32",
- arm_VCVTT_LS_F16_F32: "VCVTT.LS.F16.F32",
- arm_VCVTT_GE_F16_F32: "VCVTT.GE.F16.F32",
- arm_VCVTT_LT_F16_F32: "VCVTT.LT.F16.F32",
- arm_VCVTT_GT_F16_F32: "VCVTT.GT.F16.F32",
- arm_VCVTT_LE_F16_F32: "VCVTT.LE.F16.F32",
- arm_VCVTT_F16_F32: "VCVTT.F16.F32",
- arm_VCVTT_ZZ_F16_F32: "VCVTT.ZZ.F16.F32",
- arm_VCVTR_EQ_U32_F32: "VCVTR.EQ.U32.F32",
- arm_VCVTR_NE_U32_F32: "VCVTR.NE.U32.F32",
- arm_VCVTR_CS_U32_F32: "VCVTR.CS.U32.F32",
- arm_VCVTR_CC_U32_F32: "VCVTR.CC.U32.F32",
- arm_VCVTR_MI_U32_F32: "VCVTR.MI.U32.F32",
- arm_VCVTR_PL_U32_F32: "VCVTR.PL.U32.F32",
- arm_VCVTR_VS_U32_F32: "VCVTR.VS.U32.F32",
- arm_VCVTR_VC_U32_F32: "VCVTR.VC.U32.F32",
- arm_VCVTR_HI_U32_F32: "VCVTR.HI.U32.F32",
- arm_VCVTR_LS_U32_F32: "VCVTR.LS.U32.F32",
- arm_VCVTR_GE_U32_F32: "VCVTR.GE.U32.F32",
- arm_VCVTR_LT_U32_F32: "VCVTR.LT.U32.F32",
- arm_VCVTR_GT_U32_F32: "VCVTR.GT.U32.F32",
- arm_VCVTR_LE_U32_F32: "VCVTR.LE.U32.F32",
- arm_VCVTR_U32_F32: "VCVTR.U32.F32",
- arm_VCVTR_ZZ_U32_F32: "VCVTR.ZZ.U32.F32",
- arm_VCVTR_EQ_U32_F64: "VCVTR.EQ.U32.F64",
- arm_VCVTR_NE_U32_F64: "VCVTR.NE.U32.F64",
- arm_VCVTR_CS_U32_F64: "VCVTR.CS.U32.F64",
- arm_VCVTR_CC_U32_F64: "VCVTR.CC.U32.F64",
- arm_VCVTR_MI_U32_F64: "VCVTR.MI.U32.F64",
- arm_VCVTR_PL_U32_F64: "VCVTR.PL.U32.F64",
- arm_VCVTR_VS_U32_F64: "VCVTR.VS.U32.F64",
- arm_VCVTR_VC_U32_F64: "VCVTR.VC.U32.F64",
- arm_VCVTR_HI_U32_F64: "VCVTR.HI.U32.F64",
- arm_VCVTR_LS_U32_F64: "VCVTR.LS.U32.F64",
- arm_VCVTR_GE_U32_F64: "VCVTR.GE.U32.F64",
- arm_VCVTR_LT_U32_F64: "VCVTR.LT.U32.F64",
- arm_VCVTR_GT_U32_F64: "VCVTR.GT.U32.F64",
- arm_VCVTR_LE_U32_F64: "VCVTR.LE.U32.F64",
- arm_VCVTR_U32_F64: "VCVTR.U32.F64",
- arm_VCVTR_ZZ_U32_F64: "VCVTR.ZZ.U32.F64",
- arm_VCVTR_EQ_S32_F32: "VCVTR.EQ.S32.F32",
- arm_VCVTR_NE_S32_F32: "VCVTR.NE.S32.F32",
- arm_VCVTR_CS_S32_F32: "VCVTR.CS.S32.F32",
- arm_VCVTR_CC_S32_F32: "VCVTR.CC.S32.F32",
- arm_VCVTR_MI_S32_F32: "VCVTR.MI.S32.F32",
- arm_VCVTR_PL_S32_F32: "VCVTR.PL.S32.F32",
- arm_VCVTR_VS_S32_F32: "VCVTR.VS.S32.F32",
- arm_VCVTR_VC_S32_F32: "VCVTR.VC.S32.F32",
- arm_VCVTR_HI_S32_F32: "VCVTR.HI.S32.F32",
- arm_VCVTR_LS_S32_F32: "VCVTR.LS.S32.F32",
- arm_VCVTR_GE_S32_F32: "VCVTR.GE.S32.F32",
- arm_VCVTR_LT_S32_F32: "VCVTR.LT.S32.F32",
- arm_VCVTR_GT_S32_F32: "VCVTR.GT.S32.F32",
- arm_VCVTR_LE_S32_F32: "VCVTR.LE.S32.F32",
- arm_VCVTR_S32_F32: "VCVTR.S32.F32",
- arm_VCVTR_ZZ_S32_F32: "VCVTR.ZZ.S32.F32",
- arm_VCVTR_EQ_S32_F64: "VCVTR.EQ.S32.F64",
- arm_VCVTR_NE_S32_F64: "VCVTR.NE.S32.F64",
- arm_VCVTR_CS_S32_F64: "VCVTR.CS.S32.F64",
- arm_VCVTR_CC_S32_F64: "VCVTR.CC.S32.F64",
- arm_VCVTR_MI_S32_F64: "VCVTR.MI.S32.F64",
- arm_VCVTR_PL_S32_F64: "VCVTR.PL.S32.F64",
- arm_VCVTR_VS_S32_F64: "VCVTR.VS.S32.F64",
- arm_VCVTR_VC_S32_F64: "VCVTR.VC.S32.F64",
- arm_VCVTR_HI_S32_F64: "VCVTR.HI.S32.F64",
- arm_VCVTR_LS_S32_F64: "VCVTR.LS.S32.F64",
- arm_VCVTR_GE_S32_F64: "VCVTR.GE.S32.F64",
- arm_VCVTR_LT_S32_F64: "VCVTR.LT.S32.F64",
- arm_VCVTR_GT_S32_F64: "VCVTR.GT.S32.F64",
- arm_VCVTR_LE_S32_F64: "VCVTR.LE.S32.F64",
- arm_VCVTR_S32_F64: "VCVTR.S32.F64",
- arm_VCVTR_ZZ_S32_F64: "VCVTR.ZZ.S32.F64",
- arm_VCVT_EQ_U32_F32: "VCVT.EQ.U32.F32",
- arm_VCVT_NE_U32_F32: "VCVT.NE.U32.F32",
- arm_VCVT_CS_U32_F32: "VCVT.CS.U32.F32",
- arm_VCVT_CC_U32_F32: "VCVT.CC.U32.F32",
- arm_VCVT_MI_U32_F32: "VCVT.MI.U32.F32",
- arm_VCVT_PL_U32_F32: "VCVT.PL.U32.F32",
- arm_VCVT_VS_U32_F32: "VCVT.VS.U32.F32",
- arm_VCVT_VC_U32_F32: "VCVT.VC.U32.F32",
- arm_VCVT_HI_U32_F32: "VCVT.HI.U32.F32",
- arm_VCVT_LS_U32_F32: "VCVT.LS.U32.F32",
- arm_VCVT_GE_U32_F32: "VCVT.GE.U32.F32",
- arm_VCVT_LT_U32_F32: "VCVT.LT.U32.F32",
- arm_VCVT_GT_U32_F32: "VCVT.GT.U32.F32",
- arm_VCVT_LE_U32_F32: "VCVT.LE.U32.F32",
- arm_VCVT_U32_F32: "VCVT.U32.F32",
- arm_VCVT_ZZ_U32_F32: "VCVT.ZZ.U32.F32",
- arm_VCVT_EQ_U32_F64: "VCVT.EQ.U32.F64",
- arm_VCVT_NE_U32_F64: "VCVT.NE.U32.F64",
- arm_VCVT_CS_U32_F64: "VCVT.CS.U32.F64",
- arm_VCVT_CC_U32_F64: "VCVT.CC.U32.F64",
- arm_VCVT_MI_U32_F64: "VCVT.MI.U32.F64",
- arm_VCVT_PL_U32_F64: "VCVT.PL.U32.F64",
- arm_VCVT_VS_U32_F64: "VCVT.VS.U32.F64",
- arm_VCVT_VC_U32_F64: "VCVT.VC.U32.F64",
- arm_VCVT_HI_U32_F64: "VCVT.HI.U32.F64",
- arm_VCVT_LS_U32_F64: "VCVT.LS.U32.F64",
- arm_VCVT_GE_U32_F64: "VCVT.GE.U32.F64",
- arm_VCVT_LT_U32_F64: "VCVT.LT.U32.F64",
- arm_VCVT_GT_U32_F64: "VCVT.GT.U32.F64",
- arm_VCVT_LE_U32_F64: "VCVT.LE.U32.F64",
- arm_VCVT_U32_F64: "VCVT.U32.F64",
- arm_VCVT_ZZ_U32_F64: "VCVT.ZZ.U32.F64",
- arm_VCVT_EQ_S32_F32: "VCVT.EQ.S32.F32",
- arm_VCVT_NE_S32_F32: "VCVT.NE.S32.F32",
- arm_VCVT_CS_S32_F32: "VCVT.CS.S32.F32",
- arm_VCVT_CC_S32_F32: "VCVT.CC.S32.F32",
- arm_VCVT_MI_S32_F32: "VCVT.MI.S32.F32",
- arm_VCVT_PL_S32_F32: "VCVT.PL.S32.F32",
- arm_VCVT_VS_S32_F32: "VCVT.VS.S32.F32",
- arm_VCVT_VC_S32_F32: "VCVT.VC.S32.F32",
- arm_VCVT_HI_S32_F32: "VCVT.HI.S32.F32",
- arm_VCVT_LS_S32_F32: "VCVT.LS.S32.F32",
- arm_VCVT_GE_S32_F32: "VCVT.GE.S32.F32",
- arm_VCVT_LT_S32_F32: "VCVT.LT.S32.F32",
- arm_VCVT_GT_S32_F32: "VCVT.GT.S32.F32",
- arm_VCVT_LE_S32_F32: "VCVT.LE.S32.F32",
- arm_VCVT_S32_F32: "VCVT.S32.F32",
- arm_VCVT_ZZ_S32_F32: "VCVT.ZZ.S32.F32",
- arm_VCVT_EQ_S32_F64: "VCVT.EQ.S32.F64",
- arm_VCVT_NE_S32_F64: "VCVT.NE.S32.F64",
- arm_VCVT_CS_S32_F64: "VCVT.CS.S32.F64",
- arm_VCVT_CC_S32_F64: "VCVT.CC.S32.F64",
- arm_VCVT_MI_S32_F64: "VCVT.MI.S32.F64",
- arm_VCVT_PL_S32_F64: "VCVT.PL.S32.F64",
- arm_VCVT_VS_S32_F64: "VCVT.VS.S32.F64",
- arm_VCVT_VC_S32_F64: "VCVT.VC.S32.F64",
- arm_VCVT_HI_S32_F64: "VCVT.HI.S32.F64",
- arm_VCVT_LS_S32_F64: "VCVT.LS.S32.F64",
- arm_VCVT_GE_S32_F64: "VCVT.GE.S32.F64",
- arm_VCVT_LT_S32_F64: "VCVT.LT.S32.F64",
- arm_VCVT_GT_S32_F64: "VCVT.GT.S32.F64",
- arm_VCVT_LE_S32_F64: "VCVT.LE.S32.F64",
- arm_VCVT_S32_F64: "VCVT.S32.F64",
- arm_VCVT_ZZ_S32_F64: "VCVT.ZZ.S32.F64",
- arm_VDIV_EQ_F32: "VDIV.EQ.F32",
- arm_VDIV_NE_F32: "VDIV.NE.F32",
- arm_VDIV_CS_F32: "VDIV.CS.F32",
- arm_VDIV_CC_F32: "VDIV.CC.F32",
- arm_VDIV_MI_F32: "VDIV.MI.F32",
- arm_VDIV_PL_F32: "VDIV.PL.F32",
- arm_VDIV_VS_F32: "VDIV.VS.F32",
- arm_VDIV_VC_F32: "VDIV.VC.F32",
- arm_VDIV_HI_F32: "VDIV.HI.F32",
- arm_VDIV_LS_F32: "VDIV.LS.F32",
- arm_VDIV_GE_F32: "VDIV.GE.F32",
- arm_VDIV_LT_F32: "VDIV.LT.F32",
- arm_VDIV_GT_F32: "VDIV.GT.F32",
- arm_VDIV_LE_F32: "VDIV.LE.F32",
- arm_VDIV_F32: "VDIV.F32",
- arm_VDIV_ZZ_F32: "VDIV.ZZ.F32",
- arm_VDIV_EQ_F64: "VDIV.EQ.F64",
- arm_VDIV_NE_F64: "VDIV.NE.F64",
- arm_VDIV_CS_F64: "VDIV.CS.F64",
- arm_VDIV_CC_F64: "VDIV.CC.F64",
- arm_VDIV_MI_F64: "VDIV.MI.F64",
- arm_VDIV_PL_F64: "VDIV.PL.F64",
- arm_VDIV_VS_F64: "VDIV.VS.F64",
- arm_VDIV_VC_F64: "VDIV.VC.F64",
- arm_VDIV_HI_F64: "VDIV.HI.F64",
- arm_VDIV_LS_F64: "VDIV.LS.F64",
- arm_VDIV_GE_F64: "VDIV.GE.F64",
- arm_VDIV_LT_F64: "VDIV.LT.F64",
- arm_VDIV_GT_F64: "VDIV.GT.F64",
- arm_VDIV_LE_F64: "VDIV.LE.F64",
- arm_VDIV_F64: "VDIV.F64",
- arm_VDIV_ZZ_F64: "VDIV.ZZ.F64",
- arm_VLDR_EQ: "VLDR.EQ",
- arm_VLDR_NE: "VLDR.NE",
- arm_VLDR_CS: "VLDR.CS",
- arm_VLDR_CC: "VLDR.CC",
- arm_VLDR_MI: "VLDR.MI",
- arm_VLDR_PL: "VLDR.PL",
- arm_VLDR_VS: "VLDR.VS",
- arm_VLDR_VC: "VLDR.VC",
- arm_VLDR_HI: "VLDR.HI",
- arm_VLDR_LS: "VLDR.LS",
- arm_VLDR_GE: "VLDR.GE",
- arm_VLDR_LT: "VLDR.LT",
- arm_VLDR_GT: "VLDR.GT",
- arm_VLDR_LE: "VLDR.LE",
- arm_VLDR: "VLDR",
- arm_VLDR_ZZ: "VLDR.ZZ",
- arm_VMLA_EQ_F32: "VMLA.EQ.F32",
- arm_VMLA_NE_F32: "VMLA.NE.F32",
- arm_VMLA_CS_F32: "VMLA.CS.F32",
- arm_VMLA_CC_F32: "VMLA.CC.F32",
- arm_VMLA_MI_F32: "VMLA.MI.F32",
- arm_VMLA_PL_F32: "VMLA.PL.F32",
- arm_VMLA_VS_F32: "VMLA.VS.F32",
- arm_VMLA_VC_F32: "VMLA.VC.F32",
- arm_VMLA_HI_F32: "VMLA.HI.F32",
- arm_VMLA_LS_F32: "VMLA.LS.F32",
- arm_VMLA_GE_F32: "VMLA.GE.F32",
- arm_VMLA_LT_F32: "VMLA.LT.F32",
- arm_VMLA_GT_F32: "VMLA.GT.F32",
- arm_VMLA_LE_F32: "VMLA.LE.F32",
- arm_VMLA_F32: "VMLA.F32",
- arm_VMLA_ZZ_F32: "VMLA.ZZ.F32",
- arm_VMLA_EQ_F64: "VMLA.EQ.F64",
- arm_VMLA_NE_F64: "VMLA.NE.F64",
- arm_VMLA_CS_F64: "VMLA.CS.F64",
- arm_VMLA_CC_F64: "VMLA.CC.F64",
- arm_VMLA_MI_F64: "VMLA.MI.F64",
- arm_VMLA_PL_F64: "VMLA.PL.F64",
- arm_VMLA_VS_F64: "VMLA.VS.F64",
- arm_VMLA_VC_F64: "VMLA.VC.F64",
- arm_VMLA_HI_F64: "VMLA.HI.F64",
- arm_VMLA_LS_F64: "VMLA.LS.F64",
- arm_VMLA_GE_F64: "VMLA.GE.F64",
- arm_VMLA_LT_F64: "VMLA.LT.F64",
- arm_VMLA_GT_F64: "VMLA.GT.F64",
- arm_VMLA_LE_F64: "VMLA.LE.F64",
- arm_VMLA_F64: "VMLA.F64",
- arm_VMLA_ZZ_F64: "VMLA.ZZ.F64",
- arm_VMLS_EQ_F32: "VMLS.EQ.F32",
- arm_VMLS_NE_F32: "VMLS.NE.F32",
- arm_VMLS_CS_F32: "VMLS.CS.F32",
- arm_VMLS_CC_F32: "VMLS.CC.F32",
- arm_VMLS_MI_F32: "VMLS.MI.F32",
- arm_VMLS_PL_F32: "VMLS.PL.F32",
- arm_VMLS_VS_F32: "VMLS.VS.F32",
- arm_VMLS_VC_F32: "VMLS.VC.F32",
- arm_VMLS_HI_F32: "VMLS.HI.F32",
- arm_VMLS_LS_F32: "VMLS.LS.F32",
- arm_VMLS_GE_F32: "VMLS.GE.F32",
- arm_VMLS_LT_F32: "VMLS.LT.F32",
- arm_VMLS_GT_F32: "VMLS.GT.F32",
- arm_VMLS_LE_F32: "VMLS.LE.F32",
- arm_VMLS_F32: "VMLS.F32",
- arm_VMLS_ZZ_F32: "VMLS.ZZ.F32",
- arm_VMLS_EQ_F64: "VMLS.EQ.F64",
- arm_VMLS_NE_F64: "VMLS.NE.F64",
- arm_VMLS_CS_F64: "VMLS.CS.F64",
- arm_VMLS_CC_F64: "VMLS.CC.F64",
- arm_VMLS_MI_F64: "VMLS.MI.F64",
- arm_VMLS_PL_F64: "VMLS.PL.F64",
- arm_VMLS_VS_F64: "VMLS.VS.F64",
- arm_VMLS_VC_F64: "VMLS.VC.F64",
- arm_VMLS_HI_F64: "VMLS.HI.F64",
- arm_VMLS_LS_F64: "VMLS.LS.F64",
- arm_VMLS_GE_F64: "VMLS.GE.F64",
- arm_VMLS_LT_F64: "VMLS.LT.F64",
- arm_VMLS_GT_F64: "VMLS.GT.F64",
- arm_VMLS_LE_F64: "VMLS.LE.F64",
- arm_VMLS_F64: "VMLS.F64",
- arm_VMLS_ZZ_F64: "VMLS.ZZ.F64",
- arm_VMOV_EQ: "VMOV.EQ",
- arm_VMOV_NE: "VMOV.NE",
- arm_VMOV_CS: "VMOV.CS",
- arm_VMOV_CC: "VMOV.CC",
- arm_VMOV_MI: "VMOV.MI",
- arm_VMOV_PL: "VMOV.PL",
- arm_VMOV_VS: "VMOV.VS",
- arm_VMOV_VC: "VMOV.VC",
- arm_VMOV_HI: "VMOV.HI",
- arm_VMOV_LS: "VMOV.LS",
- arm_VMOV_GE: "VMOV.GE",
- arm_VMOV_LT: "VMOV.LT",
- arm_VMOV_GT: "VMOV.GT",
- arm_VMOV_LE: "VMOV.LE",
- arm_VMOV: "VMOV",
- arm_VMOV_ZZ: "VMOV.ZZ",
- arm_VMOV_EQ_32: "VMOV.EQ.32",
- arm_VMOV_NE_32: "VMOV.NE.32",
- arm_VMOV_CS_32: "VMOV.CS.32",
- arm_VMOV_CC_32: "VMOV.CC.32",
- arm_VMOV_MI_32: "VMOV.MI.32",
- arm_VMOV_PL_32: "VMOV.PL.32",
- arm_VMOV_VS_32: "VMOV.VS.32",
- arm_VMOV_VC_32: "VMOV.VC.32",
- arm_VMOV_HI_32: "VMOV.HI.32",
- arm_VMOV_LS_32: "VMOV.LS.32",
- arm_VMOV_GE_32: "VMOV.GE.32",
- arm_VMOV_LT_32: "VMOV.LT.32",
- arm_VMOV_GT_32: "VMOV.GT.32",
- arm_VMOV_LE_32: "VMOV.LE.32",
- arm_VMOV_32: "VMOV.32",
- arm_VMOV_ZZ_32: "VMOV.ZZ.32",
- arm_VMOV_EQ_F32: "VMOV.EQ.F32",
- arm_VMOV_NE_F32: "VMOV.NE.F32",
- arm_VMOV_CS_F32: "VMOV.CS.F32",
- arm_VMOV_CC_F32: "VMOV.CC.F32",
- arm_VMOV_MI_F32: "VMOV.MI.F32",
- arm_VMOV_PL_F32: "VMOV.PL.F32",
- arm_VMOV_VS_F32: "VMOV.VS.F32",
- arm_VMOV_VC_F32: "VMOV.VC.F32",
- arm_VMOV_HI_F32: "VMOV.HI.F32",
- arm_VMOV_LS_F32: "VMOV.LS.F32",
- arm_VMOV_GE_F32: "VMOV.GE.F32",
- arm_VMOV_LT_F32: "VMOV.LT.F32",
- arm_VMOV_GT_F32: "VMOV.GT.F32",
- arm_VMOV_LE_F32: "VMOV.LE.F32",
- arm_VMOV_F32: "VMOV.F32",
- arm_VMOV_ZZ_F32: "VMOV.ZZ.F32",
- arm_VMOV_EQ_F64: "VMOV.EQ.F64",
- arm_VMOV_NE_F64: "VMOV.NE.F64",
- arm_VMOV_CS_F64: "VMOV.CS.F64",
- arm_VMOV_CC_F64: "VMOV.CC.F64",
- arm_VMOV_MI_F64: "VMOV.MI.F64",
- arm_VMOV_PL_F64: "VMOV.PL.F64",
- arm_VMOV_VS_F64: "VMOV.VS.F64",
- arm_VMOV_VC_F64: "VMOV.VC.F64",
- arm_VMOV_HI_F64: "VMOV.HI.F64",
- arm_VMOV_LS_F64: "VMOV.LS.F64",
- arm_VMOV_GE_F64: "VMOV.GE.F64",
- arm_VMOV_LT_F64: "VMOV.LT.F64",
- arm_VMOV_GT_F64: "VMOV.GT.F64",
- arm_VMOV_LE_F64: "VMOV.LE.F64",
- arm_VMOV_F64: "VMOV.F64",
- arm_VMOV_ZZ_F64: "VMOV.ZZ.F64",
- arm_VMRS_EQ: "VMRS.EQ",
- arm_VMRS_NE: "VMRS.NE",
- arm_VMRS_CS: "VMRS.CS",
- arm_VMRS_CC: "VMRS.CC",
- arm_VMRS_MI: "VMRS.MI",
- arm_VMRS_PL: "VMRS.PL",
- arm_VMRS_VS: "VMRS.VS",
- arm_VMRS_VC: "VMRS.VC",
- arm_VMRS_HI: "VMRS.HI",
- arm_VMRS_LS: "VMRS.LS",
- arm_VMRS_GE: "VMRS.GE",
- arm_VMRS_LT: "VMRS.LT",
- arm_VMRS_GT: "VMRS.GT",
- arm_VMRS_LE: "VMRS.LE",
- arm_VMRS: "VMRS",
- arm_VMRS_ZZ: "VMRS.ZZ",
- arm_VMSR_EQ: "VMSR.EQ",
- arm_VMSR_NE: "VMSR.NE",
- arm_VMSR_CS: "VMSR.CS",
- arm_VMSR_CC: "VMSR.CC",
- arm_VMSR_MI: "VMSR.MI",
- arm_VMSR_PL: "VMSR.PL",
- arm_VMSR_VS: "VMSR.VS",
- arm_VMSR_VC: "VMSR.VC",
- arm_VMSR_HI: "VMSR.HI",
- arm_VMSR_LS: "VMSR.LS",
- arm_VMSR_GE: "VMSR.GE",
- arm_VMSR_LT: "VMSR.LT",
- arm_VMSR_GT: "VMSR.GT",
- arm_VMSR_LE: "VMSR.LE",
- arm_VMSR: "VMSR",
- arm_VMSR_ZZ: "VMSR.ZZ",
- arm_VMUL_EQ_F32: "VMUL.EQ.F32",
- arm_VMUL_NE_F32: "VMUL.NE.F32",
- arm_VMUL_CS_F32: "VMUL.CS.F32",
- arm_VMUL_CC_F32: "VMUL.CC.F32",
- arm_VMUL_MI_F32: "VMUL.MI.F32",
- arm_VMUL_PL_F32: "VMUL.PL.F32",
- arm_VMUL_VS_F32: "VMUL.VS.F32",
- arm_VMUL_VC_F32: "VMUL.VC.F32",
- arm_VMUL_HI_F32: "VMUL.HI.F32",
- arm_VMUL_LS_F32: "VMUL.LS.F32",
- arm_VMUL_GE_F32: "VMUL.GE.F32",
- arm_VMUL_LT_F32: "VMUL.LT.F32",
- arm_VMUL_GT_F32: "VMUL.GT.F32",
- arm_VMUL_LE_F32: "VMUL.LE.F32",
- arm_VMUL_F32: "VMUL.F32",
- arm_VMUL_ZZ_F32: "VMUL.ZZ.F32",
- arm_VMUL_EQ_F64: "VMUL.EQ.F64",
- arm_VMUL_NE_F64: "VMUL.NE.F64",
- arm_VMUL_CS_F64: "VMUL.CS.F64",
- arm_VMUL_CC_F64: "VMUL.CC.F64",
- arm_VMUL_MI_F64: "VMUL.MI.F64",
- arm_VMUL_PL_F64: "VMUL.PL.F64",
- arm_VMUL_VS_F64: "VMUL.VS.F64",
- arm_VMUL_VC_F64: "VMUL.VC.F64",
- arm_VMUL_HI_F64: "VMUL.HI.F64",
- arm_VMUL_LS_F64: "VMUL.LS.F64",
- arm_VMUL_GE_F64: "VMUL.GE.F64",
- arm_VMUL_LT_F64: "VMUL.LT.F64",
- arm_VMUL_GT_F64: "VMUL.GT.F64",
- arm_VMUL_LE_F64: "VMUL.LE.F64",
- arm_VMUL_F64: "VMUL.F64",
- arm_VMUL_ZZ_F64: "VMUL.ZZ.F64",
- arm_VNEG_EQ_F32: "VNEG.EQ.F32",
- arm_VNEG_NE_F32: "VNEG.NE.F32",
- arm_VNEG_CS_F32: "VNEG.CS.F32",
- arm_VNEG_CC_F32: "VNEG.CC.F32",
- arm_VNEG_MI_F32: "VNEG.MI.F32",
- arm_VNEG_PL_F32: "VNEG.PL.F32",
- arm_VNEG_VS_F32: "VNEG.VS.F32",
- arm_VNEG_VC_F32: "VNEG.VC.F32",
- arm_VNEG_HI_F32: "VNEG.HI.F32",
- arm_VNEG_LS_F32: "VNEG.LS.F32",
- arm_VNEG_GE_F32: "VNEG.GE.F32",
- arm_VNEG_LT_F32: "VNEG.LT.F32",
- arm_VNEG_GT_F32: "VNEG.GT.F32",
- arm_VNEG_LE_F32: "VNEG.LE.F32",
- arm_VNEG_F32: "VNEG.F32",
- arm_VNEG_ZZ_F32: "VNEG.ZZ.F32",
- arm_VNEG_EQ_F64: "VNEG.EQ.F64",
- arm_VNEG_NE_F64: "VNEG.NE.F64",
- arm_VNEG_CS_F64: "VNEG.CS.F64",
- arm_VNEG_CC_F64: "VNEG.CC.F64",
- arm_VNEG_MI_F64: "VNEG.MI.F64",
- arm_VNEG_PL_F64: "VNEG.PL.F64",
- arm_VNEG_VS_F64: "VNEG.VS.F64",
- arm_VNEG_VC_F64: "VNEG.VC.F64",
- arm_VNEG_HI_F64: "VNEG.HI.F64",
- arm_VNEG_LS_F64: "VNEG.LS.F64",
- arm_VNEG_GE_F64: "VNEG.GE.F64",
- arm_VNEG_LT_F64: "VNEG.LT.F64",
- arm_VNEG_GT_F64: "VNEG.GT.F64",
- arm_VNEG_LE_F64: "VNEG.LE.F64",
- arm_VNEG_F64: "VNEG.F64",
- arm_VNEG_ZZ_F64: "VNEG.ZZ.F64",
- arm_VNMLS_EQ_F32: "VNMLS.EQ.F32",
- arm_VNMLS_NE_F32: "VNMLS.NE.F32",
- arm_VNMLS_CS_F32: "VNMLS.CS.F32",
- arm_VNMLS_CC_F32: "VNMLS.CC.F32",
- arm_VNMLS_MI_F32: "VNMLS.MI.F32",
- arm_VNMLS_PL_F32: "VNMLS.PL.F32",
- arm_VNMLS_VS_F32: "VNMLS.VS.F32",
- arm_VNMLS_VC_F32: "VNMLS.VC.F32",
- arm_VNMLS_HI_F32: "VNMLS.HI.F32",
- arm_VNMLS_LS_F32: "VNMLS.LS.F32",
- arm_VNMLS_GE_F32: "VNMLS.GE.F32",
- arm_VNMLS_LT_F32: "VNMLS.LT.F32",
- arm_VNMLS_GT_F32: "VNMLS.GT.F32",
- arm_VNMLS_LE_F32: "VNMLS.LE.F32",
- arm_VNMLS_F32: "VNMLS.F32",
- arm_VNMLS_ZZ_F32: "VNMLS.ZZ.F32",
- arm_VNMLS_EQ_F64: "VNMLS.EQ.F64",
- arm_VNMLS_NE_F64: "VNMLS.NE.F64",
- arm_VNMLS_CS_F64: "VNMLS.CS.F64",
- arm_VNMLS_CC_F64: "VNMLS.CC.F64",
- arm_VNMLS_MI_F64: "VNMLS.MI.F64",
- arm_VNMLS_PL_F64: "VNMLS.PL.F64",
- arm_VNMLS_VS_F64: "VNMLS.VS.F64",
- arm_VNMLS_VC_F64: "VNMLS.VC.F64",
- arm_VNMLS_HI_F64: "VNMLS.HI.F64",
- arm_VNMLS_LS_F64: "VNMLS.LS.F64",
- arm_VNMLS_GE_F64: "VNMLS.GE.F64",
- arm_VNMLS_LT_F64: "VNMLS.LT.F64",
- arm_VNMLS_GT_F64: "VNMLS.GT.F64",
- arm_VNMLS_LE_F64: "VNMLS.LE.F64",
- arm_VNMLS_F64: "VNMLS.F64",
- arm_VNMLS_ZZ_F64: "VNMLS.ZZ.F64",
- arm_VNMLA_EQ_F32: "VNMLA.EQ.F32",
- arm_VNMLA_NE_F32: "VNMLA.NE.F32",
- arm_VNMLA_CS_F32: "VNMLA.CS.F32",
- arm_VNMLA_CC_F32: "VNMLA.CC.F32",
- arm_VNMLA_MI_F32: "VNMLA.MI.F32",
- arm_VNMLA_PL_F32: "VNMLA.PL.F32",
- arm_VNMLA_VS_F32: "VNMLA.VS.F32",
- arm_VNMLA_VC_F32: "VNMLA.VC.F32",
- arm_VNMLA_HI_F32: "VNMLA.HI.F32",
- arm_VNMLA_LS_F32: "VNMLA.LS.F32",
- arm_VNMLA_GE_F32: "VNMLA.GE.F32",
- arm_VNMLA_LT_F32: "VNMLA.LT.F32",
- arm_VNMLA_GT_F32: "VNMLA.GT.F32",
- arm_VNMLA_LE_F32: "VNMLA.LE.F32",
- arm_VNMLA_F32: "VNMLA.F32",
- arm_VNMLA_ZZ_F32: "VNMLA.ZZ.F32",
- arm_VNMLA_EQ_F64: "VNMLA.EQ.F64",
- arm_VNMLA_NE_F64: "VNMLA.NE.F64",
- arm_VNMLA_CS_F64: "VNMLA.CS.F64",
- arm_VNMLA_CC_F64: "VNMLA.CC.F64",
- arm_VNMLA_MI_F64: "VNMLA.MI.F64",
- arm_VNMLA_PL_F64: "VNMLA.PL.F64",
- arm_VNMLA_VS_F64: "VNMLA.VS.F64",
- arm_VNMLA_VC_F64: "VNMLA.VC.F64",
- arm_VNMLA_HI_F64: "VNMLA.HI.F64",
- arm_VNMLA_LS_F64: "VNMLA.LS.F64",
- arm_VNMLA_GE_F64: "VNMLA.GE.F64",
- arm_VNMLA_LT_F64: "VNMLA.LT.F64",
- arm_VNMLA_GT_F64: "VNMLA.GT.F64",
- arm_VNMLA_LE_F64: "VNMLA.LE.F64",
- arm_VNMLA_F64: "VNMLA.F64",
- arm_VNMLA_ZZ_F64: "VNMLA.ZZ.F64",
- arm_VNMUL_EQ_F32: "VNMUL.EQ.F32",
- arm_VNMUL_NE_F32: "VNMUL.NE.F32",
- arm_VNMUL_CS_F32: "VNMUL.CS.F32",
- arm_VNMUL_CC_F32: "VNMUL.CC.F32",
- arm_VNMUL_MI_F32: "VNMUL.MI.F32",
- arm_VNMUL_PL_F32: "VNMUL.PL.F32",
- arm_VNMUL_VS_F32: "VNMUL.VS.F32",
- arm_VNMUL_VC_F32: "VNMUL.VC.F32",
- arm_VNMUL_HI_F32: "VNMUL.HI.F32",
- arm_VNMUL_LS_F32: "VNMUL.LS.F32",
- arm_VNMUL_GE_F32: "VNMUL.GE.F32",
- arm_VNMUL_LT_F32: "VNMUL.LT.F32",
- arm_VNMUL_GT_F32: "VNMUL.GT.F32",
- arm_VNMUL_LE_F32: "VNMUL.LE.F32",
- arm_VNMUL_F32: "VNMUL.F32",
- arm_VNMUL_ZZ_F32: "VNMUL.ZZ.F32",
- arm_VNMUL_EQ_F64: "VNMUL.EQ.F64",
- arm_VNMUL_NE_F64: "VNMUL.NE.F64",
- arm_VNMUL_CS_F64: "VNMUL.CS.F64",
- arm_VNMUL_CC_F64: "VNMUL.CC.F64",
- arm_VNMUL_MI_F64: "VNMUL.MI.F64",
- arm_VNMUL_PL_F64: "VNMUL.PL.F64",
- arm_VNMUL_VS_F64: "VNMUL.VS.F64",
- arm_VNMUL_VC_F64: "VNMUL.VC.F64",
- arm_VNMUL_HI_F64: "VNMUL.HI.F64",
- arm_VNMUL_LS_F64: "VNMUL.LS.F64",
- arm_VNMUL_GE_F64: "VNMUL.GE.F64",
- arm_VNMUL_LT_F64: "VNMUL.LT.F64",
- arm_VNMUL_GT_F64: "VNMUL.GT.F64",
- arm_VNMUL_LE_F64: "VNMUL.LE.F64",
- arm_VNMUL_F64: "VNMUL.F64",
- arm_VNMUL_ZZ_F64: "VNMUL.ZZ.F64",
- arm_VSQRT_EQ_F32: "VSQRT.EQ.F32",
- arm_VSQRT_NE_F32: "VSQRT.NE.F32",
- arm_VSQRT_CS_F32: "VSQRT.CS.F32",
- arm_VSQRT_CC_F32: "VSQRT.CC.F32",
- arm_VSQRT_MI_F32: "VSQRT.MI.F32",
- arm_VSQRT_PL_F32: "VSQRT.PL.F32",
- arm_VSQRT_VS_F32: "VSQRT.VS.F32",
- arm_VSQRT_VC_F32: "VSQRT.VC.F32",
- arm_VSQRT_HI_F32: "VSQRT.HI.F32",
- arm_VSQRT_LS_F32: "VSQRT.LS.F32",
- arm_VSQRT_GE_F32: "VSQRT.GE.F32",
- arm_VSQRT_LT_F32: "VSQRT.LT.F32",
- arm_VSQRT_GT_F32: "VSQRT.GT.F32",
- arm_VSQRT_LE_F32: "VSQRT.LE.F32",
- arm_VSQRT_F32: "VSQRT.F32",
- arm_VSQRT_ZZ_F32: "VSQRT.ZZ.F32",
- arm_VSQRT_EQ_F64: "VSQRT.EQ.F64",
- arm_VSQRT_NE_F64: "VSQRT.NE.F64",
- arm_VSQRT_CS_F64: "VSQRT.CS.F64",
- arm_VSQRT_CC_F64: "VSQRT.CC.F64",
- arm_VSQRT_MI_F64: "VSQRT.MI.F64",
- arm_VSQRT_PL_F64: "VSQRT.PL.F64",
- arm_VSQRT_VS_F64: "VSQRT.VS.F64",
- arm_VSQRT_VC_F64: "VSQRT.VC.F64",
- arm_VSQRT_HI_F64: "VSQRT.HI.F64",
- arm_VSQRT_LS_F64: "VSQRT.LS.F64",
- arm_VSQRT_GE_F64: "VSQRT.GE.F64",
- arm_VSQRT_LT_F64: "VSQRT.LT.F64",
- arm_VSQRT_GT_F64: "VSQRT.GT.F64",
- arm_VSQRT_LE_F64: "VSQRT.LE.F64",
- arm_VSQRT_F64: "VSQRT.F64",
- arm_VSQRT_ZZ_F64: "VSQRT.ZZ.F64",
- arm_VSTR_EQ: "VSTR.EQ",
- arm_VSTR_NE: "VSTR.NE",
- arm_VSTR_CS: "VSTR.CS",
- arm_VSTR_CC: "VSTR.CC",
- arm_VSTR_MI: "VSTR.MI",
- arm_VSTR_PL: "VSTR.PL",
- arm_VSTR_VS: "VSTR.VS",
- arm_VSTR_VC: "VSTR.VC",
- arm_VSTR_HI: "VSTR.HI",
- arm_VSTR_LS: "VSTR.LS",
- arm_VSTR_GE: "VSTR.GE",
- arm_VSTR_LT: "VSTR.LT",
- arm_VSTR_GT: "VSTR.GT",
- arm_VSTR_LE: "VSTR.LE",
- arm_VSTR: "VSTR",
- arm_VSTR_ZZ: "VSTR.ZZ",
- arm_VSUB_EQ_F32: "VSUB.EQ.F32",
- arm_VSUB_NE_F32: "VSUB.NE.F32",
- arm_VSUB_CS_F32: "VSUB.CS.F32",
- arm_VSUB_CC_F32: "VSUB.CC.F32",
- arm_VSUB_MI_F32: "VSUB.MI.F32",
- arm_VSUB_PL_F32: "VSUB.PL.F32",
- arm_VSUB_VS_F32: "VSUB.VS.F32",
- arm_VSUB_VC_F32: "VSUB.VC.F32",
- arm_VSUB_HI_F32: "VSUB.HI.F32",
- arm_VSUB_LS_F32: "VSUB.LS.F32",
- arm_VSUB_GE_F32: "VSUB.GE.F32",
- arm_VSUB_LT_F32: "VSUB.LT.F32",
- arm_VSUB_GT_F32: "VSUB.GT.F32",
- arm_VSUB_LE_F32: "VSUB.LE.F32",
- arm_VSUB_F32: "VSUB.F32",
- arm_VSUB_ZZ_F32: "VSUB.ZZ.F32",
- arm_VSUB_EQ_F64: "VSUB.EQ.F64",
- arm_VSUB_NE_F64: "VSUB.NE.F64",
- arm_VSUB_CS_F64: "VSUB.CS.F64",
- arm_VSUB_CC_F64: "VSUB.CC.F64",
- arm_VSUB_MI_F64: "VSUB.MI.F64",
- arm_VSUB_PL_F64: "VSUB.PL.F64",
- arm_VSUB_VS_F64: "VSUB.VS.F64",
- arm_VSUB_VC_F64: "VSUB.VC.F64",
- arm_VSUB_HI_F64: "VSUB.HI.F64",
- arm_VSUB_LS_F64: "VSUB.LS.F64",
- arm_VSUB_GE_F64: "VSUB.GE.F64",
- arm_VSUB_LT_F64: "VSUB.LT.F64",
- arm_VSUB_GT_F64: "VSUB.GT.F64",
- arm_VSUB_LE_F64: "VSUB.LE.F64",
- arm_VSUB_F64: "VSUB.F64",
- arm_VSUB_ZZ_F64: "VSUB.ZZ.F64",
- arm_WFE_EQ: "WFE.EQ",
- arm_WFE_NE: "WFE.NE",
- arm_WFE_CS: "WFE.CS",
- arm_WFE_CC: "WFE.CC",
- arm_WFE_MI: "WFE.MI",
- arm_WFE_PL: "WFE.PL",
- arm_WFE_VS: "WFE.VS",
- arm_WFE_VC: "WFE.VC",
- arm_WFE_HI: "WFE.HI",
- arm_WFE_LS: "WFE.LS",
- arm_WFE_GE: "WFE.GE",
- arm_WFE_LT: "WFE.LT",
- arm_WFE_GT: "WFE.GT",
- arm_WFE_LE: "WFE.LE",
- arm_WFE: "WFE",
- arm_WFE_ZZ: "WFE.ZZ",
- arm_WFI_EQ: "WFI.EQ",
- arm_WFI_NE: "WFI.NE",
- arm_WFI_CS: "WFI.CS",
- arm_WFI_CC: "WFI.CC",
- arm_WFI_MI: "WFI.MI",
- arm_WFI_PL: "WFI.PL",
- arm_WFI_VS: "WFI.VS",
- arm_WFI_VC: "WFI.VC",
- arm_WFI_HI: "WFI.HI",
- arm_WFI_LS: "WFI.LS",
- arm_WFI_GE: "WFI.GE",
- arm_WFI_LT: "WFI.LT",
- arm_WFI_GT: "WFI.GT",
- arm_WFI_LE: "WFI.LE",
- arm_WFI: "WFI",
- arm_WFI_ZZ: "WFI.ZZ",
- arm_YIELD_EQ: "YIELD.EQ",
- arm_YIELD_NE: "YIELD.NE",
- arm_YIELD_CS: "YIELD.CS",
- arm_YIELD_CC: "YIELD.CC",
- arm_YIELD_MI: "YIELD.MI",
- arm_YIELD_PL: "YIELD.PL",
- arm_YIELD_VS: "YIELD.VS",
- arm_YIELD_VC: "YIELD.VC",
- arm_YIELD_HI: "YIELD.HI",
- arm_YIELD_LS: "YIELD.LS",
- arm_YIELD_GE: "YIELD.GE",
- arm_YIELD_LT: "YIELD.LT",
- arm_YIELD_GT: "YIELD.GT",
- arm_YIELD_LE: "YIELD.LE",
- arm_YIELD: "YIELD",
- arm_YIELD_ZZ: "YIELD.ZZ",
-}
-
-var arm_instFormats = [...]arm_instFormat{
- {0x0fe00000, 0x02a00000, 2, arm_ADC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_const}}, // ADC{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|1|0|1|S|Rn:4|Rd:4|imm12:12
- {0x0fe00090, 0x00a00010, 4, arm_ADC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_R}}, // ADC{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|1|0|1|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00010, 0x00a00000, 2, arm_ADC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // ADC{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|1|0|1|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0fe00000, 0x02800000, 2, arm_ADD_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_const}}, // ADD{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|1|0|0|S|Rn:4|Rd:4|imm12:12
- {0x0fe00090, 0x00800010, 4, arm_ADD_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_R}}, // ADD{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|1|0|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00010, 0x00800000, 2, arm_ADD_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // ADD{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|1|0|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0fef0000, 0x028d0000, 2, arm_ADD_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_SP, arm_arg_const}}, // ADD{S}<c> <Rd>,SP,#<const> cond:4|0|0|1|0|1|0|0|S|1|1|0|1|Rd:4|imm12:12
- {0x0fef0010, 0x008d0000, 2, arm_ADD_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_SP, arm_arg_R_shift_imm}}, // ADD{S}<c> <Rd>,SP,<Rm>{,<shift>} cond:4|0|0|0|0|1|0|0|S|1|1|0|1|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0fe00000, 0x02000000, 2, arm_AND_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_const}}, // AND{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|0|0|0|S|Rn:4|Rd:4|imm12:12
- {0x0fe00090, 0x00000010, 4, arm_AND_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_R}}, // AND{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|0|0|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00010, 0x00000000, 2, arm_AND_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // AND{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|0|0|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0fef0070, 0x01a00040, 4, arm_ASR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_imm5_32}}, // ASR{S}<c> <Rd>,<Rm>,#<imm5_32> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|imm5:5|1|0|0|Rm:4
- {0x0fef00f0, 0x01a00050, 4, arm_ASR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_R_8}}, // ASR{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|Rm:4|0|1|0|1|Rn:4
- {0x0f000000, 0x0a000000, 4, arm_B_EQ, 0x1c04, arm_instArgs{arm_arg_label24}}, // B<c> <label24> cond:4|1|0|1|0|imm24:24
- {0x0fe0007f, 0x07c0001f, 4, arm_BFC_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_imm5, arm_arg_lsb_width}}, // BFC<c> <Rd>,#<lsb>,#<width> cond:4|0|1|1|1|1|1|0|msb:5|Rd:4|lsb:5|0|0|1|1|1|1|1
- {0x0fe00070, 0x07c00010, 2, arm_BFI_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_imm5, arm_arg_lsb_width}}, // BFI<c> <Rd>,<Rn>,#<lsb>,#<width> cond:4|0|1|1|1|1|1|0|msb:5|Rd:4|lsb:5|0|0|1|Rn:4
- {0x0fe00000, 0x03c00000, 2, arm_BIC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_const}}, // BIC{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|1|1|1|0|S|Rn:4|Rd:4|imm12:12
- {0x0fe00090, 0x01c00010, 4, arm_BIC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_R}}, // BIC{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|1|1|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00010, 0x01c00000, 2, arm_BIC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // BIC{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|1|1|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0ff000f0, 0x01200070, 4, arm_BKPT_EQ, 0x1c04, arm_instArgs{arm_arg_imm_12at8_4at0}}, // BKPT<c> #<imm12+4> cond:4|0|0|0|1|0|0|1|0|imm12:12|0|1|1|1|imm4:4
- {0x0f000000, 0x0b000000, 4, arm_BL_EQ, 0x1c04, arm_instArgs{arm_arg_label24}}, // BL<c> <label24> cond:4|1|0|1|1|imm24:24
- {0xfe000000, 0xfa000000, 4, arm_BLX, 0x0, arm_instArgs{arm_arg_label24H}}, // BLX <label24H> 1|1|1|1|1|0|1|H|imm24:24
- {0x0ffffff0, 0x012fff30, 4, arm_BLX_EQ, 0x1c04, arm_instArgs{arm_arg_R_0}}, // BLX<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff000f0, 0x012fff30, 3, arm_BLX_EQ, 0x1c04, arm_instArgs{arm_arg_R_0}}, // BLX<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ffffff0, 0x012fff10, 4, arm_BX_EQ, 0x1c04, arm_instArgs{arm_arg_R_0}}, // BX<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff000f0, 0x012fff10, 3, arm_BX_EQ, 0x1c04, arm_instArgs{arm_arg_R_0}}, // BX<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ffffff0, 0x012fff20, 4, arm_BXJ_EQ, 0x1c04, arm_instArgs{arm_arg_R_0}}, // BXJ<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|1|0|Rm:4
- {0x0ff000f0, 0x012fff20, 3, arm_BXJ_EQ, 0x1c04, arm_instArgs{arm_arg_R_0}}, // BXJ<c> <Rm> cond:4|0|0|0|1|0|0|1|0|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|0|0|1|0|Rm:4
- {0xffffffff, 0xf57ff01f, 4, arm_CLREX, 0x0, arm_instArgs{}}, // CLREX 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|1|(1)|(1)|(1)|(1)
- {0xfff000f0, 0xf57ff01f, 3, arm_CLREX, 0x0, arm_instArgs{}}, // CLREX 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|1|(1)|(1)|(1)|(1)
- {0x0fff0ff0, 0x016f0f10, 4, arm_CLZ_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // CLZ<c> <Rd>,<Rm> cond:4|0|0|0|1|0|1|1|0|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff000f0, 0x016f0f10, 3, arm_CLZ_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // CLZ<c> <Rd>,<Rm> cond:4|0|0|0|1|0|1|1|0|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff0f000, 0x03700000, 4, arm_CMN_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_const}}, // CMN<c> <Rn>,#<const> cond:4|0|0|1|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
- {0x0ff00000, 0x03700000, 3, arm_CMN_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_const}}, // CMN<c> <Rn>,#<const> cond:4|0|0|1|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
- {0x0ff0f090, 0x01700010, 4, arm_CMN_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_R}}, // CMN<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
- {0x0ff00090, 0x01700010, 3, arm_CMN_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_R}}, // CMN<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
- {0x0ff0f010, 0x01700000, 4, arm_CMN_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_imm}}, // CMN<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
- {0x0ff00010, 0x01700000, 3, arm_CMN_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_imm}}, // CMN<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|1|1|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
- {0x0ff0f000, 0x03500000, 4, arm_CMP_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_const}}, // CMP<c> <Rn>,#<const> cond:4|0|0|1|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
- {0x0ff00000, 0x03500000, 3, arm_CMP_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_const}}, // CMP<c> <Rn>,#<const> cond:4|0|0|1|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
- {0x0ff0f090, 0x01500010, 4, arm_CMP_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_R}}, // CMP<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
- {0x0ff00090, 0x01500010, 3, arm_CMP_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_R}}, // CMP<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
- {0x0ff0f010, 0x01500000, 4, arm_CMP_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_imm}}, // CMP<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
- {0x0ff00010, 0x01500000, 3, arm_CMP_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_imm}}, // CMP<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|1|0|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
- {0x0ffffff0, 0x0320f0f0, 4, arm_DBG_EQ, 0x1c04, arm_instArgs{arm_arg_option}}, // DBG<c> #<option> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|1|1|1|1|option:4
- {0x0fff00f0, 0x0320f0f0, 3, arm_DBG_EQ, 0x1c04, arm_instArgs{arm_arg_option}}, // DBG<c> #<option> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|1|1|1|1|option:4
- {0xfffffff0, 0xf57ff050, 4, arm_DMB, 0x0, arm_instArgs{arm_arg_option}}, // DMB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|0|1|option:4
- {0xfff000f0, 0xf57ff050, 3, arm_DMB, 0x0, arm_instArgs{arm_arg_option}}, // DMB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|0|1|option:4
- {0xfffffff0, 0xf57ff040, 4, arm_DSB, 0x0, arm_instArgs{arm_arg_option}}, // DSB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|0|0|option:4
- {0xfff000f0, 0xf57ff040, 3, arm_DSB, 0x0, arm_instArgs{arm_arg_option}}, // DSB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|0|0|option:4
- {0x0fe00000, 0x02200000, 2, arm_EOR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_const}}, // EOR{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|0|0|1|S|Rn:4|Rd:4|imm12:12
- {0x0fe00090, 0x00200010, 4, arm_EOR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_R}}, // EOR{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|0|0|1|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00010, 0x00200000, 2, arm_EOR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // EOR{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|0|0|1|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
- {0xfffffff0, 0xf57ff060, 4, arm_ISB, 0x0, arm_instArgs{arm_arg_option}}, // ISB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|1|0|option:4
- {0xfff000f0, 0xf57ff060, 3, arm_ISB, 0x0, arm_instArgs{arm_arg_option}}, // ISB #<option> 1|1|1|1|0|1|0|1|0|1|1|1|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|1|1|0|option:4
- {0x0fd00000, 0x08900000, 2, arm_LDM_EQ, 0x1c04, arm_instArgs{arm_arg_R_16_WB, arm_arg_registers}}, // LDM<c> <Rn>{!},<registers> cond:4|1|0|0|0|1|0|W|1|Rn:4|register_list:16
- {0x0fd00000, 0x08100000, 4, arm_LDMDA_EQ, 0x1c04, arm_instArgs{arm_arg_R_16_WB, arm_arg_registers}}, // LDMDA<c> <Rn>{!},<registers> cond:4|1|0|0|0|0|0|W|1|Rn:4|register_list:16
- {0x0fd00000, 0x09100000, 4, arm_LDMDB_EQ, 0x1c04, arm_instArgs{arm_arg_R_16_WB, arm_arg_registers}}, // LDMDB<c> <Rn>{!},<registers> cond:4|1|0|0|1|0|0|W|1|Rn:4|register_list:16
- {0x0fd00000, 0x09900000, 4, arm_LDMIB_EQ, 0x1c04, arm_instArgs{arm_arg_R_16_WB, arm_arg_registers}}, // LDMIB<c> <Rn>{!},<registers> cond:4|1|0|0|1|1|0|W|1|Rn:4|register_list:16
- {0x0f7f0000, 0x051f0000, 4, arm_LDR_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_label_pm_12}}, // LDR<c> <Rt>,<label+/-12> cond:4|0|1|0|(1)|U|0|(0)|1|1|1|1|1|Rt:4|imm12:12
- {0x0e5f0000, 0x051f0000, 3, arm_LDR_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_label_pm_12}}, // LDR<c> <Rt>,<label+/-12> cond:4|0|1|0|(1)|U|0|(0)|1|1|1|1|1|Rt:4|imm12:12
- {0x0e500010, 0x06100000, 2, arm_LDR_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_shift_imm_W}}, // LDR<c> <Rt>,[<Rn>,+/-<Rm>{, <shift>}]{!} cond:4|0|1|1|P|U|0|W|1|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
- {0x0e500000, 0x04100000, 2, arm_LDR_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm12_W}}, // LDR<c> <Rt>,[<Rn>{,#+/-<imm12>}]{!} cond:4|0|1|0|P|U|0|W|1|Rn:4|Rt:4|imm12:12
- {0x0f7f0000, 0x055f0000, 4, arm_LDRB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_label_pm_12}}, // LDRB<c> <Rt>,<label+/-12> cond:4|0|1|0|(1)|U|1|(0)|1|1|1|1|1|Rt:4|imm12:12
- {0x0e5f0000, 0x055f0000, 3, arm_LDRB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_label_pm_12}}, // LDRB<c> <Rt>,<label+/-12> cond:4|0|1|0|(1)|U|1|(0)|1|1|1|1|1|Rt:4|imm12:12
- {0x0e500010, 0x06500000, 2, arm_LDRB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_shift_imm_W}}, // LDRB<c> <Rt>,[<Rn>,+/-<Rm>{, <shift>}]{!} cond:4|0|1|1|P|U|1|W|1|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
- {0x0e500000, 0x04500000, 2, arm_LDRB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm12_W}}, // LDRB<c> <Rt>,[<Rn>{,#+/-<imm12>}]{!} cond:4|0|1|0|P|U|1|W|1|Rn:4|Rt:4|imm12:12
- {0x0f700000, 0x04700000, 4, arm_LDRBT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm12_postindex}}, // LDRBT<c> <Rt>,[<Rn>],#+/-<imm12> cond:4|0|1|0|0|U|1|1|1|Rn:4|Rt:4|imm12:12
- {0x0f700010, 0x06700000, 4, arm_LDRBT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_shift_imm_postindex}}, // LDRBT<c> <Rt>,[<Rn>],+/-<Rm>{, <shift>} cond:4|0|1|1|0|U|1|1|1|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
- {0x0e500ff0, 0x000000d0, 4, arm_LDRD_EQ, 0x1c04, arm_instArgs{arm_arg_R1_12, arm_arg_R2_12, arm_arg_mem_R_pm_R_W}}, // LDRD<c> <Rt1>,<Rt2>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|0|Rn:4|Rt:4|(0)|(0)|(0)|(0)|1|1|0|1|Rm:4
- {0x0e5000f0, 0x000000d0, 3, arm_LDRD_EQ, 0x1c04, arm_instArgs{arm_arg_R1_12, arm_arg_R2_12, arm_arg_mem_R_pm_R_W}}, // LDRD<c> <Rt1>,<Rt2>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|0|Rn:4|Rt:4|(0)|(0)|(0)|(0)|1|1|0|1|Rm:4
- {0x0e5000f0, 0x004000d0, 2, arm_LDRD_EQ, 0x1c04, arm_instArgs{arm_arg_R1_12, arm_arg_R2_12, arm_arg_mem_R_pm_imm8_W}}, // LDRD<c> <Rt1>,<Rt2>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|0|Rn:4|Rt:4|imm4H:4|1|1|0|1|imm4L:4
- {0x0ff00fff, 0x01900f9f, 4, arm_LDREX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R}}, // LDREX<c> <Rt>,[<Rn>] cond:4|0|0|0|1|1|0|0|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
- {0x0ff000f0, 0x01900f9f, 3, arm_LDREX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R}}, // LDREX<c> <Rt>,[<Rn>] cond:4|0|0|0|1|1|0|0|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
- {0x0ff00fff, 0x01d00f9f, 4, arm_LDREXB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R}}, // LDREXB<c> <Rt>, [<Rn>] cond:4|0|0|0|1|1|1|0|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
- {0x0ff000f0, 0x01d00f9f, 3, arm_LDREXB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R}}, // LDREXB<c> <Rt>, [<Rn>] cond:4|0|0|0|1|1|1|0|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
- {0x0ff00fff, 0x01b00f9f, 4, arm_LDREXD_EQ, 0x1c04, arm_instArgs{arm_arg_R1_12, arm_arg_R2_12, arm_arg_mem_R}}, // LDREXD<c> <Rt1>,<Rt2>,[<Rn>] cond:4|0|0|0|1|1|0|1|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
- {0x0ff000f0, 0x01b00f9f, 3, arm_LDREXD_EQ, 0x1c04, arm_instArgs{arm_arg_R1_12, arm_arg_R2_12, arm_arg_mem_R}}, // LDREXD<c> <Rt1>,<Rt2>,[<Rn>] cond:4|0|0|0|1|1|0|1|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
- {0x0ff00fff, 0x01f00f9f, 4, arm_LDREXH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R}}, // LDREXH<c> <Rt>, [<Rn>] cond:4|0|0|0|1|1|1|1|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
- {0x0ff000f0, 0x01f00f9f, 3, arm_LDREXH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R}}, // LDREXH<c> <Rt>, [<Rn>] cond:4|0|0|0|1|1|1|1|1|Rn:4|Rt:4|(1)|(1)|(1)|(1)|1|0|0|1|(1)|(1)|(1)|(1)
- {0x0e500ff0, 0x001000b0, 2, arm_LDRH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_W}}, // LDRH<c> <Rt>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|1|Rn:4|Rt:4|0|0|0|0|1|0|1|1|Rm:4
- {0x0e5000f0, 0x005000b0, 2, arm_LDRH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm8_W}}, // LDRH<c> <Rt>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|1|Rn:4|Rt:4|imm4H:4|1|0|1|1|imm4L:4
- {0x0f7000f0, 0x007000b0, 4, arm_LDRHT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm8_postindex}}, // LDRHT<c> <Rt>, [<Rn>] {,#+/-<imm8>} cond:4|0|0|0|0|U|1|1|1|Rn:4|Rt:4|imm4H:4|1|0|1|1|imm4L:4
- {0x0f700ff0, 0x003000b0, 4, arm_LDRHT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_postindex}}, // LDRHT<c> <Rt>, [<Rn>], +/-<Rm> cond:4|0|0|0|0|U|0|1|1|Rn:4|Rt:4|0|0|0|0|1|0|1|1|Rm:4
- {0x0e500ff0, 0x001000d0, 2, arm_LDRSB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_W}}, // LDRSB<c> <Rt>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|1|Rn:4|Rt:4|0|0|0|0|1|1|0|1|Rm:4
- {0x0e5000f0, 0x005000d0, 2, arm_LDRSB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm8_W}}, // LDRSB<c> <Rt>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|1|Rn:4|Rt:4|imm4H:4|1|1|0|1|imm4L:4
- {0x0f7000f0, 0x007000d0, 4, arm_LDRSBT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm8_postindex}}, // LDRSBT<c> <Rt>, [<Rn>] {,#+/-<imm8>} cond:4|0|0|0|0|U|1|1|1|Rn:4|Rt:4|imm4H:4|1|1|0|1|imm4L:4
- {0x0f700ff0, 0x003000d0, 4, arm_LDRSBT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_postindex}}, // LDRSBT<c> <Rt>, [<Rn>], +/-<Rm> cond:4|0|0|0|0|U|0|1|1|Rn:4|Rt:4|0|0|0|0|1|1|0|1|Rm:4
- {0x0e500ff0, 0x001000f0, 2, arm_LDRSH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_W}}, // LDRSH<c> <Rt>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|1|Rn:4|Rt:4|0|0|0|0|1|1|1|1|Rm:4
- {0x0e5000f0, 0x005000f0, 2, arm_LDRSH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm8_W}}, // LDRSH<c> <Rt>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|1|Rn:4|Rt:4|imm4H:4|1|1|1|1|imm4L:4
- {0x0f7000f0, 0x007000f0, 4, arm_LDRSHT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm8_postindex}}, // LDRSHT<c> <Rt>, [<Rn>] {,#+/-<imm8>} cond:4|0|0|0|0|U|1|1|1|Rn:4|Rt:4|imm4H:4|1|1|1|1|imm4L:4
- {0x0f700ff0, 0x003000f0, 4, arm_LDRSHT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_postindex}}, // LDRSHT<c> <Rt>, [<Rn>], +/-<Rm> cond:4|0|0|0|0|U|0|1|1|Rn:4|Rt:4|0|0|0|0|1|1|1|1|Rm:4
- {0x0f700000, 0x04300000, 4, arm_LDRT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm12_postindex}}, // LDRT<c> <Rt>, [<Rn>] {,#+/-<imm12>} cond:4|0|1|0|0|U|0|1|1|Rn:4|Rt:4|imm12:12
- {0x0f700010, 0x06300000, 4, arm_LDRT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_shift_imm_postindex}}, // LDRT<c> <Rt>,[<Rn>],+/-<Rm>{, <shift>} cond:4|0|1|1|0|U|0|1|1|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
- {0x0fef0070, 0x01a00000, 2, arm_LSL_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_imm5_nz}}, // LSL{S}<c> <Rd>,<Rm>,#<imm5_nz> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|imm5:5|0|0|0|Rm:4
- {0x0fef00f0, 0x01a00010, 4, arm_LSL_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_R_8}}, // LSL{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|Rm:4|0|0|0|1|Rn:4
- {0x0fef0070, 0x01a00020, 4, arm_LSR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_imm5_32}}, // LSR{S}<c> <Rd>,<Rm>,#<imm5_32> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|imm5:5|0|1|0|Rm:4
- {0x0fef00f0, 0x01a00030, 4, arm_LSR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_R_8}}, // LSR{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|Rm:4|0|0|1|1|Rn:4
- {0x0fe000f0, 0x00200090, 4, arm_MLA_EQ, 0x14011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8, arm_arg_R_12}}, // MLA{S}<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|0|0|0|0|0|1|S|Rd:4|Ra:4|Rm:4|1|0|0|1|Rn:4
- {0x0ff000f0, 0x00600090, 4, arm_MLS_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8, arm_arg_R_12}}, // MLS<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|0|0|0|0|1|1|0|Rd:4|Ra:4|Rm:4|1|0|0|1|Rn:4
- {0x0ff00000, 0x03400000, 4, arm_MOVT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_imm_4at16_12at0}}, // MOVT<c> <Rd>,#<imm12+4> cond:4|0|0|1|1|0|1|0|0|imm4:4|Rd:4|imm12:12
- {0x0ff00000, 0x03000000, 4, arm_MOVW_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_imm_4at16_12at0}}, // MOVW<c> <Rd>,#<imm12+4> cond:4|0|0|1|1|0|0|0|0|imm4:4|Rd:4|imm12:12
- {0x0fef0000, 0x03a00000, 2, arm_MOV_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_const}}, // MOV{S}<c> <Rd>,#<const> cond:4|0|0|1|1|1|0|1|S|0|0|0|0|Rd:4|imm12:12
- {0x0fef0ff0, 0x01a00000, 2, arm_MOV_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // MOV{S}<c> <Rd>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|0|0|0|0|0|0|0|0|Rm:4
- {0x0fff0fff, 0x010f0000, 4, arm_MRS_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_APSR}}, // MRS<c> <Rd>,APSR cond:4|0|0|0|1|0|0|0|0|(1)|(1)|(1)|(1)|Rd:4|(0)|(0)|(0)|(0)|0|0|0|0|(0)|(0)|(0)|(0)
- {0x0ff000f0, 0x010f0000, 3, arm_MRS_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_APSR}}, // MRS<c> <Rd>,APSR cond:4|0|0|0|1|0|0|0|0|(1)|(1)|(1)|(1)|Rd:4|(0)|(0)|(0)|(0)|0|0|0|0|(0)|(0)|(0)|(0)
- {0x0fe0f0f0, 0x00000090, 4, arm_MUL_EQ, 0x14011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // MUL{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|0|0|0|0|S|Rd:4|(0)|(0)|(0)|(0)|Rm:4|1|0|0|1|Rn:4
- {0x0fe000f0, 0x00000090, 3, arm_MUL_EQ, 0x14011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // MUL{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|0|0|0|0|S|Rd:4|(0)|(0)|(0)|(0)|Rm:4|1|0|0|1|Rn:4
- {0x0fef0000, 0x03e00000, 2, arm_MVN_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_const}}, // MVN{S}<c> <Rd>,#<const> cond:4|0|0|1|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|imm12:12
- {0x0fe00000, 0x03e00000, 1, arm_MVN_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_const}}, // MVN{S}<c> <Rd>,#<const> cond:4|0|0|1|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|imm12:12
- {0x0fef0090, 0x01e00010, 4, arm_MVN_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_shift_R}}, // MVN{S}<c> <Rd>,<Rm>,<type> <Rs> cond:4|0|0|0|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00090, 0x01e00010, 3, arm_MVN_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_shift_R}}, // MVN{S}<c> <Rd>,<Rm>,<type> <Rs> cond:4|0|0|0|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fef0010, 0x01e00000, 2, arm_MVN_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_shift_imm}}, // MVN{S}<c> <Rd>,<Rm>{,<shift>} cond:4|0|0|0|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0fe00010, 0x01e00000, 1, arm_MVN_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_shift_imm}}, // MVN{S}<c> <Rd>,<Rm>{,<shift>} cond:4|0|0|0|1|1|1|1|S|(0)|(0)|(0)|(0)|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0fffffff, 0x0320f000, 4, arm_NOP_EQ, 0x1c04, arm_instArgs{}}, // NOP<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|0|0
- {0x0fff00ff, 0x0320f000, 3, arm_NOP_EQ, 0x1c04, arm_instArgs{}}, // NOP<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|0|0
- {0x0fe00000, 0x03800000, 2, arm_ORR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_const}}, // ORR{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|1|1|0|0|S|Rn:4|Rd:4|imm12:12
- {0x0fe00090, 0x01800010, 4, arm_ORR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_R}}, // ORR{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|1|0|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00010, 0x01800000, 2, arm_ORR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // ORR{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|1|0|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0ff00030, 0x06800010, 4, arm_PKHBT_EQ, 0x6011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // PKH<BT,TB><c> <Rd>,<Rn>,<Rm>{,LSL #<imm5>} cond:4|0|1|1|0|1|0|0|0|Rn:4|Rd:4|imm5:5|tb|0|1|Rm:4
- {0xff7ff000, 0xf55ff000, 4, arm_PLD, 0x0, arm_instArgs{arm_arg_label_pm_12}}, // PLD <label+/-12> 1|1|1|1|0|1|0|1|U|(1)|0|1|1|1|1|1|(1)|(1)|(1)|(1)|imm12:12
- {0xff3f0000, 0xf55ff000, 3, arm_PLD, 0x0, arm_instArgs{arm_arg_label_pm_12}}, // PLD <label+/-12> 1|1|1|1|0|1|0|1|U|(1)|0|1|1|1|1|1|(1)|(1)|(1)|(1)|imm12:12
- {0xff30f000, 0xf510f000, 2, arm_PLD_W, 0x1601, arm_instArgs{arm_arg_mem_R_pm_imm12_offset}}, // PLD{W} [<Rn>,#+/-<imm12>] 1|1|1|1|0|1|0|1|U|R|0|1|Rn:4|(1)|(1)|(1)|(1)|imm12:12
- {0xff300000, 0xf510f000, 1, arm_PLD_W, 0x1601, arm_instArgs{arm_arg_mem_R_pm_imm12_offset}}, // PLD{W} [<Rn>,#+/-<imm12>] 1|1|1|1|0|1|0|1|U|R|0|1|Rn:4|(1)|(1)|(1)|(1)|imm12:12
- {0xff30f010, 0xf710f000, 4, arm_PLD_W, 0x1601, arm_instArgs{arm_arg_mem_R_pm_R_shift_imm_offset}}, // PLD{W} [<Rn>,+/-<Rm>{, <shift>}] 1|1|1|1|0|1|1|1|U|R|0|1|Rn:4|(1)|(1)|(1)|(1)|imm5:5|type:2|0|Rm:4
- {0xff300010, 0xf710f000, 3, arm_PLD_W, 0x1601, arm_instArgs{arm_arg_mem_R_pm_R_shift_imm_offset}}, // PLD{W} [<Rn>,+/-<Rm>{, <shift>}] 1|1|1|1|0|1|1|1|U|R|0|1|Rn:4|(1)|(1)|(1)|(1)|imm5:5|type:2|0|Rm:4
- {0xff70f000, 0xf450f000, 4, arm_PLI, 0x0, arm_instArgs{arm_arg_mem_R_pm_imm12_offset}}, // PLI [<Rn>,#+/-<imm12>] 1|1|1|1|0|1|0|0|U|1|0|1|Rn:4|(1)|(1)|(1)|(1)|imm12:12
- {0xff700000, 0xf450f000, 3, arm_PLI, 0x0, arm_instArgs{arm_arg_mem_R_pm_imm12_offset}}, // PLI [<Rn>,#+/-<imm12>] 1|1|1|1|0|1|0|0|U|1|0|1|Rn:4|(1)|(1)|(1)|(1)|imm12:12
- {0xff70f010, 0xf650f000, 4, arm_PLI, 0x0, arm_instArgs{arm_arg_mem_R_pm_R_shift_imm_offset}}, // PLI [<Rn>,+/-<Rm>{, <shift>}] 1|1|1|1|0|1|1|0|U|1|0|1|Rn:4|(1)|(1)|(1)|(1)|imm5:5|type:2|0|Rm:4
- {0xff700010, 0xf650f000, 3, arm_PLI, 0x0, arm_instArgs{arm_arg_mem_R_pm_R_shift_imm_offset}}, // PLI [<Rn>,+/-<Rm>{, <shift>}] 1|1|1|1|0|1|1|0|U|1|0|1|Rn:4|(1)|(1)|(1)|(1)|imm5:5|type:2|0|Rm:4
- {0x0fff0000, 0x08bd0000, 4, arm_POP_EQ, 0x1c04, arm_instArgs{arm_arg_registers2}}, // POP<c> <registers2> cond:4|1|0|0|0|1|0|1|1|1|1|0|1|register_list:16
- {0x0fff0fff, 0x049d0004, 4, arm_POP_EQ, 0x1c04, arm_instArgs{arm_arg_registers1}}, // POP<c> <registers1> cond:4|0|1|0|0|1|0|0|1|1|1|0|1|Rt:4|0|0|0|0|0|0|0|0|0|1|0|0
- {0x0fff0000, 0x092d0000, 4, arm_PUSH_EQ, 0x1c04, arm_instArgs{arm_arg_registers2}}, // PUSH<c> <registers2> cond:4|1|0|0|1|0|0|1|0|1|1|0|1|register_list:16
- {0x0fff0fff, 0x052d0004, 4, arm_PUSH_EQ, 0x1c04, arm_instArgs{arm_arg_registers1}}, // PUSH<c> <registers1> cond:4|0|1|0|1|0|0|1|0|1|1|0|1|Rt:4|0|0|0|0|0|0|0|0|0|1|0|0
- {0x0ff00ff0, 0x06200f10, 4, arm_QADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff000f0, 0x06200f10, 3, arm_QADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff00ff0, 0x06200f90, 4, arm_QADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff000f0, 0x06200f90, 3, arm_QADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff00ff0, 0x01000050, 4, arm_QADD_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_R_16}}, // QADD<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|0|0|0|Rn:4|Rd:4|(0)|(0)|(0)|(0)|0|1|0|1|Rm:4
- {0x0ff000f0, 0x01000050, 3, arm_QADD_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_R_16}}, // QADD<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|0|0|0|Rn:4|Rd:4|(0)|(0)|(0)|(0)|0|1|0|1|Rm:4
- {0x0ff00ff0, 0x06200f30, 4, arm_QASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff000f0, 0x06200f30, 3, arm_QASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff00ff0, 0x01400050, 4, arm_QDADD_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_R_16}}, // QDADD<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|1|0|0|Rn:4|Rd:4|(0)|(0)|(0)|(0)|0|1|0|1|Rm:4
- {0x0ff000f0, 0x01400050, 3, arm_QDADD_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_R_16}}, // QDADD<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|1|0|0|Rn:4|Rd:4|(0)|(0)|(0)|(0)|0|1|0|1|Rm:4
- {0x0ff00ff0, 0x01600050, 4, arm_QDSUB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_R_16}}, // QDSUB<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|1|1|0|Rn:4|Rd:4|0|0|0|0|0|1|0|1|Rm:4
- {0x0ff00ff0, 0x06200f50, 4, arm_QSAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff000f0, 0x06200f50, 3, arm_QSAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff00ff0, 0x06200f70, 4, arm_QSUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff000f0, 0x06200f70, 3, arm_QSUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff00ff0, 0x06200ff0, 4, arm_QSUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff000f0, 0x06200ff0, 3, arm_QSUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // QSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff00ff0, 0x01200050, 4, arm_QSUB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_R_16}}, // QSUB<c> <Rd>,<Rm>,<Rn> cond:4|0|0|0|1|0|0|1|0|Rn:4|Rd:4|0|0|0|0|0|1|0|1|Rm:4
- {0x0fff0ff0, 0x06ff0f30, 4, arm_RBIT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // RBIT<c> <Rd>,<Rm> cond:4|0|1|1|0|1|1|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff000f0, 0x06ff0f30, 3, arm_RBIT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // RBIT<c> <Rd>,<Rm> cond:4|0|1|1|0|1|1|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0fff0ff0, 0x06bf0fb0, 4, arm_REV16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // REV16<c> <Rd>,<Rm> cond:4|0|1|1|0|1|0|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
- {0x0ff000f0, 0x06bf0fb0, 3, arm_REV16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // REV16<c> <Rd>,<Rm> cond:4|0|1|1|0|1|0|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
- {0x0fff0ff0, 0x06bf0f30, 4, arm_REV_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // REV<c> <Rd>,<Rm> cond:4|0|1|1|0|1|0|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff000f0, 0x06bf0f30, 3, arm_REV_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // REV<c> <Rd>,<Rm> cond:4|0|1|1|0|1|0|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0fff0ff0, 0x06ff0fb0, 4, arm_REVSH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // REVSH<c> <Rd>,<Rm> cond:4|0|1|1|0|1|1|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
- {0x0ff000f0, 0x06ff0fb0, 3, arm_REVSH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // REVSH<c> <Rd>,<Rm> cond:4|0|1|1|0|1|1|1|1|(1)|(1)|(1)|(1)|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
- {0x0fef0070, 0x01a00060, 2, arm_ROR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_imm5}}, // ROR{S}<c> <Rd>,<Rm>,#<imm5> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|imm5:5|1|1|0|Rm:4
- {0x0fef00f0, 0x01a00070, 4, arm_ROR_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_R_8}}, // ROR{S}<c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|Rm:4|0|1|1|1|Rn:4
- {0x0fef0ff0, 0x01a00060, 4, arm_RRX_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0}}, // RRX{S}<c> <Rd>,<Rm> cond:4|0|0|0|1|1|0|1|S|0|0|0|0|Rd:4|0|0|0|0|0|1|1|0|Rm:4
- {0x0fe00000, 0x02600000, 2, arm_RSB_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_const}}, // RSB{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|0|1|1|S|Rn:4|Rd:4|imm12:12
- {0x0fe00090, 0x00600010, 4, arm_RSB_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_R}}, // RSB{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|0|1|1|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00010, 0x00600000, 2, arm_RSB_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // RSB{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|0|1|1|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0fe00000, 0x02e00000, 2, arm_RSC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_const}}, // RSC{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|1|1|1|S|Rn:4|Rd:4|imm12:12
- {0x0fe00090, 0x00e00010, 4, arm_RSC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_R}}, // RSC{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|1|1|1|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00010, 0x00e00000, 2, arm_RSC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // RSC{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|1|1|1|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0ff00ff0, 0x06100f10, 4, arm_SADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff000f0, 0x06100f10, 3, arm_SADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff00ff0, 0x06100f90, 4, arm_SADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff000f0, 0x06100f90, 3, arm_SADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff00ff0, 0x06100f30, 4, arm_SASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff000f0, 0x06100f30, 3, arm_SASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0fe00000, 0x02c00000, 2, arm_SBC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_const}}, // SBC{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|1|1|0|S|Rn:4|Rd:4|imm12:12
- {0x0fe00090, 0x00c00010, 4, arm_SBC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_R}}, // SBC{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|1|1|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00010, 0x00c00000, 2, arm_SBC_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // SBC{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|1|1|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0fe00070, 0x07a00050, 4, arm_SBFX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_imm5, arm_arg_widthm1}}, // SBFX<c> <Rd>,<Rn>,#<lsb>,#<widthm1> cond:4|0|1|1|1|1|0|1|widthm1:5|Rd:4|lsb:5|1|0|1|Rn:4
- {0x0ff00ff0, 0x06800fb0, 4, arm_SEL_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SEL<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|1|0|0|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
- {0x0ff000f0, 0x06800fb0, 3, arm_SEL_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SEL<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|1|0|0|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|1|1|Rm:4
- {0xfffffdff, 0xf1010000, 4, arm_SETEND, 0x0, arm_instArgs{arm_arg_endian}}, // SETEND <endian_specifier> 1|1|1|1|0|0|0|1|0|0|0|0|0|0|0|1|0|0|0|0|0|0|E|(0)|(0)|(0)|(0)|(0)|(0)|(0)|(0)|(0)
- {0xfffffc00, 0xf1010000, 3, arm_SETEND, 0x0, arm_instArgs{arm_arg_endian}}, // SETEND <endian_specifier> 1|1|1|1|0|0|0|1|0|0|0|0|0|0|0|1|0|0|0|0|0|0|E|(0)|(0)|(0)|(0)|(0)|(0)|(0)|(0)|(0)
- {0x0fffffff, 0x0320f004, 4, arm_SEV_EQ, 0x1c04, arm_instArgs{}}, // SEV<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|1|0|0
- {0x0fff00ff, 0x0320f004, 3, arm_SEV_EQ, 0x1c04, arm_instArgs{}}, // SEV<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|1|0|0
- {0x0ff00ff0, 0x06300f10, 4, arm_SHADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff000f0, 0x06300f10, 3, arm_SHADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff00ff0, 0x06300f90, 4, arm_SHADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff000f0, 0x06300f90, 3, arm_SHADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff00ff0, 0x06300f30, 4, arm_SHASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff000f0, 0x06300f30, 3, arm_SHASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff00ff0, 0x06300f50, 4, arm_SHSAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff000f0, 0x06300f50, 3, arm_SHSAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff00ff0, 0x06300f70, 4, arm_SHSUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff000f0, 0x06300f70, 3, arm_SHSUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff00ff0, 0x06300ff0, 4, arm_SHSUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff000f0, 0x06300ff0, 3, arm_SHSUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SHSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff00090, 0x01000080, 4, arm_SMLABB_EQ, 0x50106011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8, arm_arg_R_12}}, // SMLA<x><y><c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|0|0|1|0|0|0|0|Rd:4|Ra:4|Rm:4|1|M|N|0|Rn:4
- {0x0ff000d0, 0x07000010, 2, arm_SMLAD_EQ, 0x5011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8, arm_arg_R_12}}, // SMLAD{X}<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|1|1|1|0|0|0|0|Rd:4|Ra:4|Rm:4|0|0|M|1|Rn:4
- {0x0ff00090, 0x01400080, 4, arm_SMLALBB_EQ, 0x50106011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // SMLAL<x><y><c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|1|0|1|0|0|RdHi:4|RdLo:4|Rm:4|1|M|N|0|Rn:4
- {0x0ff000d0, 0x07400010, 4, arm_SMLALD_EQ, 0x5011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // SMLALD{X}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|1|1|1|0|1|0|0|RdHi:4|RdLo:4|Rm:4|0|0|M|1|Rn:4
- {0x0fe000f0, 0x00e00090, 4, arm_SMLAL_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // SMLAL{S}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|0|1|1|1|S|RdHi:4|RdLo:4|Rm:4|1|0|0|1|Rn:4
- {0x0ff000b0, 0x01200080, 4, arm_SMLAWB_EQ, 0x6011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8, arm_arg_R_12}}, // SMLAW<y><c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|0|0|1|0|0|1|0|Rd:4|Ra:4|Rm:4|1|M|0|0|Rn:4
- {0x0ff000d0, 0x07000050, 2, arm_SMLSD_EQ, 0x5011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8, arm_arg_R_12}}, // SMLSD{X}<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|1|1|1|0|0|0|0|Rd:4|Ra:4|Rm:4|0|1|M|1|Rn:4
- {0x0ff000d0, 0x07400050, 4, arm_SMLSLD_EQ, 0x5011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // SMLSLD{X}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|1|1|1|0|1|0|0|RdHi:4|RdLo:4|Rm:4|0|1|M|1|Rn:4
- {0x0ff000d0, 0x07500010, 2, arm_SMMLA_EQ, 0x5011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8, arm_arg_R_12}}, // SMMLA{R}<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|1|1|1|0|1|0|1|Rd:4|Ra:4|Rm:4|0|0|R|1|Rn:4
- {0x0ff000d0, 0x075000d0, 4, arm_SMMLS_EQ, 0x5011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8, arm_arg_R_12}}, // SMMLS{R}<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|1|1|1|0|1|0|1|Rd:4|Ra:4|Rm:4|1|1|R|1|Rn:4
- {0x0ff0f0d0, 0x0750f010, 4, arm_SMMUL_EQ, 0x5011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // SMMUL{R}<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|1|0|1|0|1|Rd:4|1|1|1|1|Rm:4|0|0|R|1|Rn:4
- {0x0ff0f0d0, 0x0700f010, 4, arm_SMUAD_EQ, 0x5011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // SMUAD{X}<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|1|0|0|0|0|Rd:4|1|1|1|1|Rm:4|0|0|M|1|Rn:4
- {0x0ff0f090, 0x01600080, 4, arm_SMULBB_EQ, 0x50106011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // SMUL<x><y><c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|0|1|1|0|Rd:4|0|0|0|0|Rm:4|1|M|N|0|Rn:4
- {0x0fe000f0, 0x00c00090, 4, arm_SMULL_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // SMULL{S}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|0|1|1|0|S|RdHi:4|RdLo:4|Rm:4|1|0|0|1|Rn:4
- {0x0ff0f0b0, 0x012000a0, 4, arm_SMULWB_EQ, 0x6011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // SMULW<y><c> <Rd>,<Rn>,<Rm> cond:4|0|0|0|1|0|0|1|0|Rd:4|0|0|0|0|Rm:4|1|M|1|0|Rn:4
- {0x0ff0f0d0, 0x0700f050, 4, arm_SMUSD_EQ, 0x5011c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // SMUSD{X}<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|1|0|0|0|0|Rd:4|1|1|1|1|Rm:4|0|1|M|1|Rn:4
- {0x0ff00ff0, 0x06a00f30, 4, arm_SSAT16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_satimm4m1, arm_arg_R_0}}, // SSAT16<c> <Rd>,#<sat_imm4m1>,<Rn> cond:4|0|1|1|0|1|0|1|0|sat_imm:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rn:4
- {0x0ff000f0, 0x06a00f30, 3, arm_SSAT16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_satimm4m1, arm_arg_R_0}}, // SSAT16<c> <Rd>,#<sat_imm4m1>,<Rn> cond:4|0|1|1|0|1|0|1|0|sat_imm:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rn:4
- {0x0fe00030, 0x06a00010, 4, arm_SSAT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_satimm5m1, arm_arg_R_shift_imm}}, // SSAT<c> <Rd>,#<sat_imm5m1>,<Rn>{,<shift>} cond:4|0|1|1|0|1|0|1|sat_imm:5|Rd:4|imm5:5|sh|0|1|Rn:4
- {0x0ff00ff0, 0x06100f50, 4, arm_SSAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff000f0, 0x06100f50, 3, arm_SSAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff00ff0, 0x06100f70, 4, arm_SSUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff000f0, 0x06100f70, 3, arm_SSUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff00ff0, 0x06100ff0, 4, arm_SSUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff000f0, 0x06100ff0, 3, arm_SSUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // SSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|0|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0fd00000, 0x08800000, 4, arm_STM_EQ, 0x1c04, arm_instArgs{arm_arg_R_16_WB, arm_arg_registers}}, // STM<c> <Rn>{!},<registers> cond:4|1|0|0|0|1|0|W|0|Rn:4|register_list:16
- {0x0fd00000, 0x08000000, 4, arm_STMDA_EQ, 0x1c04, arm_instArgs{arm_arg_R_16_WB, arm_arg_registers}}, // STMDA<c> <Rn>{!},<registers> cond:4|1|0|0|0|0|0|W|0|Rn:4|register_list:16
- {0x0fd00000, 0x09000000, 2, arm_STMDB_EQ, 0x1c04, arm_instArgs{arm_arg_R_16_WB, arm_arg_registers}}, // STMDB<c> <Rn>{!},<registers> cond:4|1|0|0|1|0|0|W|0|Rn:4|register_list:16
- {0x0fd00000, 0x09800000, 4, arm_STMIB_EQ, 0x1c04, arm_instArgs{arm_arg_R_16_WB, arm_arg_registers}}, // STMIB<c> <Rn>{!},<registers> cond:4|1|0|0|1|1|0|W|0|Rn:4|register_list:16
- {0x0e500018, 0x06000000, 2, arm_STR_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_shift_imm_W}}, // STR<c> <Rt>,[<Rn>,+/-<Rm>{, <shift>}]{!} cond:4|0|1|1|P|U|0|W|0|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
- {0x0e500000, 0x04000000, 2, arm_STR_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm12_W}}, // STR<c> <Rt>,[<Rn>{,#+/-<imm12>}]{!} cond:4|0|1|0|P|U|0|W|0|Rn:4|Rt:4|imm12:12
- {0x0e500010, 0x06400000, 2, arm_STRB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_shift_imm_W}}, // STRB<c> <Rt>,[<Rn>,+/-<Rm>{, <shift>}]{!} cond:4|0|1|1|P|U|1|W|0|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
- {0x0e500000, 0x04400000, 2, arm_STRB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm12_W}}, // STRB<c> <Rt>,[<Rn>{,#+/-<imm12>}]{!} cond:4|0|1|0|P|U|1|W|0|Rn:4|Rt:4|imm12:12
- {0x0f700000, 0x04600000, 4, arm_STRBT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm12_postindex}}, // STRBT<c> <Rt>,[<Rn>],#+/-<imm12> cond:4|0|1|0|0|U|1|1|0|Rn:4|Rt:4|imm12:12
- {0x0f700010, 0x06600000, 4, arm_STRBT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_shift_imm_postindex}}, // STRBT<c> <Rt>,[<Rn>],+/-<Rm>{, <shift>} cond:4|0|1|1|0|U|1|1|0|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
- {0x0e500ff0, 0x000000f0, 4, arm_STRD_EQ, 0x1c04, arm_instArgs{arm_arg_R1_12, arm_arg_R2_12, arm_arg_mem_R_pm_R_W}}, // STRD<c> <Rt1>,<Rt2>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|0|Rn:4|Rt:4|(0)|(0)|(0)|(0)|1|1|1|1|Rm:4
- {0x0e5000f0, 0x000000f0, 3, arm_STRD_EQ, 0x1c04, arm_instArgs{arm_arg_R1_12, arm_arg_R2_12, arm_arg_mem_R_pm_R_W}}, // STRD<c> <Rt1>,<Rt2>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|0|Rn:4|Rt:4|(0)|(0)|(0)|(0)|1|1|1|1|Rm:4
- {0x0e5000f0, 0x004000f0, 4, arm_STRD_EQ, 0x1c04, arm_instArgs{arm_arg_R1_12, arm_arg_R2_12, arm_arg_mem_R_pm_imm8_W}}, // STRD<c> <Rt1>,<Rt2>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|0|Rn:4|Rt:4|imm4H:4|1|1|1|1|imm4L:4
- {0x0ff00ff0, 0x01800f90, 4, arm_STREX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_mem_R}}, // STREX<c> <Rd>,<Rt>,[<Rn>] cond:4|0|0|0|1|1|0|0|0|Rn:4|Rd:4|1|1|1|1|1|0|0|1|Rt:4
- {0x0ff00ff0, 0x01c00f90, 4, arm_STREXB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_mem_R}}, // STREXB<c> <Rd>,<Rt>,[<Rn>] cond:4|0|0|0|1|1|1|0|0|Rn:4|Rd:4|1|1|1|1|1|0|0|1|Rt:4
- {0x0ff00ff0, 0x01a00f90, 4, arm_STREXD_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R1_0, arm_arg_R2_0, arm_arg_mem_R}}, // STREXD<c> <Rd>,<Rt1>,<Rt2>,[<Rn>] cond:4|0|0|0|1|1|0|1|0|Rn:4|Rd:4|1|1|1|1|1|0|0|1|Rt:4
- {0x0ff00ff0, 0x01e00f90, 4, arm_STREXH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_mem_R}}, // STREXH<c> <Rd>,<Rt>,[<Rn>] cond:4|0|0|0|1|1|1|1|0|Rn:4|Rd:4|1|1|1|1|1|0|0|1|Rt:4
- {0x0e500ff0, 0x000000b0, 2, arm_STRH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_W}}, // STRH<c> <Rt>,[<Rn>,+/-<Rm>]{!} cond:4|0|0|0|P|U|0|W|0|Rn:4|Rt:4|0|0|0|0|1|0|1|1|Rm:4
- {0x0e5000f0, 0x004000b0, 2, arm_STRH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm8_W}}, // STRH<c> <Rt>,[<Rn>{,#+/-<imm8>}]{!} cond:4|0|0|0|P|U|1|W|0|Rn:4|Rt:4|imm4H:4|1|0|1|1|imm4L:4
- {0x0f7000f0, 0x006000b0, 4, arm_STRHT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm8_postindex}}, // STRHT<c> <Rt>, [<Rn>] {,#+/-<imm8>} cond:4|0|0|0|0|U|1|1|0|Rn:4|Rt:4|imm4H:4|1|0|1|1|imm4L:4
- {0x0f700ff0, 0x002000b0, 4, arm_STRHT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_postindex}}, // STRHT<c> <Rt>, [<Rn>], +/-<Rm> cond:4|0|0|0|0|U|0|1|0|Rn:4|Rt:4|0|0|0|0|1|0|1|1|Rm:4
- {0x0f700000, 0x04200000, 4, arm_STRT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_imm12_postindex}}, // STRT<c> <Rt>, [<Rn>] {,#+/-<imm12>} cond:4|0|1|0|0|U|0|1|0|Rn:4|Rt:4|imm12:12
- {0x0f700010, 0x06200000, 4, arm_STRT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_mem_R_pm_R_shift_imm_postindex}}, // STRT<c> <Rt>,[<Rn>],+/-<Rm>{, <shift>} cond:4|0|1|1|0|U|0|1|0|Rn:4|Rt:4|imm5:5|type:2|0|Rm:4
- {0x0fe00000, 0x02400000, 2, arm_SUB_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_const}}, // SUB{S}<c> <Rd>,<Rn>,#<const> cond:4|0|0|1|0|0|1|0|S|Rn:4|Rd:4|imm12:12
- {0x0fe00090, 0x00400010, 4, arm_SUB_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_R}}, // SUB{S}<c> <Rd>,<Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|0|0|1|0|S|Rn:4|Rd:4|Rs:4|0|type:2|1|Rm:4
- {0x0fe00010, 0x00400000, 2, arm_SUB_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_shift_imm}}, // SUB{S}<c> <Rd>,<Rn>,<Rm>{,<shift>} cond:4|0|0|0|0|0|1|0|S|Rn:4|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0fef0000, 0x024d0000, 2, arm_SUB_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_SP, arm_arg_const}}, // SUB{S}<c> <Rd>,SP,#<const> cond:4|0|0|1|0|0|1|0|S|1|1|0|1|Rd:4|imm12:12
- {0x0fef0010, 0x004d0000, 2, arm_SUB_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_SP, arm_arg_R_shift_imm}}, // SUB{S}<c> <Rd>,SP,<Rm>{,<shift>} cond:4|0|0|0|0|0|1|0|S|1|1|0|1|Rd:4|imm5:5|type:2|0|Rm:4
- {0x0f000000, 0x0f000000, 4, arm_SVC_EQ, 0x1c04, arm_instArgs{arm_arg_imm24}}, // SVC<c> #<imm24> cond:4|1|1|1|1|imm24:24
- {0x0fb00ff0, 0x01000090, 4, arm_SWP_EQ, 0x16011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_mem_R}}, // SWP{B}<c> <Rt>,<Rm>,[<Rn>] cond:4|0|0|0|1|0|B|0|0|Rn:4|Rt:4|0|0|0|0|1|0|0|1|Rm:4
- {0x0ff003f0, 0x06800070, 2, arm_SXTAB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_rotate}}, // SXTAB16<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|0|0|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0ff003f0, 0x06a00070, 2, arm_SXTAB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_rotate}}, // SXTAB<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|1|0|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0ff003f0, 0x06b00070, 2, arm_SXTAH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_rotate}}, // SXTAH<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|1|1|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0fff03f0, 0x068f0070, 4, arm_SXTB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_rotate}}, // SXTB16<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|0|0|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0fff03f0, 0x06af0070, 4, arm_SXTB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_rotate}}, // SXTB<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|1|0|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0fff03f0, 0x06bf0070, 4, arm_SXTH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_rotate}}, // SXTH<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|0|1|1|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0ff0f000, 0x03300000, 4, arm_TEQ_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_const}}, // TEQ<c> <Rn>,#<const> cond:4|0|0|1|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
- {0x0ff00000, 0x03300000, 3, arm_TEQ_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_const}}, // TEQ<c> <Rn>,#<const> cond:4|0|0|1|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
- {0x0ff0f090, 0x01300010, 4, arm_TEQ_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_R}}, // TEQ<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
- {0x0ff00090, 0x01300010, 3, arm_TEQ_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_R}}, // TEQ<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
- {0x0ff0f010, 0x01300000, 4, arm_TEQ_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_imm}}, // TEQ<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
- {0x0ff00010, 0x01300000, 3, arm_TEQ_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_imm}}, // TEQ<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|0|1|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
- {0x0ff0f000, 0x03100000, 4, arm_TST_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_const}}, // TST<c> <Rn>,#<const> cond:4|0|0|1|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
- {0x0ff00000, 0x03100000, 3, arm_TST_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_const}}, // TST<c> <Rn>,#<const> cond:4|0|0|1|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|imm12:12
- {0x0ff0f090, 0x01100010, 4, arm_TST_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_R}}, // TST<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
- {0x0ff00090, 0x01100010, 3, arm_TST_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_R}}, // TST<c> <Rn>,<Rm>,<type> <Rs> cond:4|0|0|0|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|Rs:4|0|type:2|1|Rm:4
- {0x0ff0f010, 0x01100000, 4, arm_TST_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_imm}}, // TST<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
- {0x0ff00010, 0x01100000, 3, arm_TST_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_shift_imm}}, // TST<c> <Rn>,<Rm>{,<shift>} cond:4|0|0|0|1|0|0|0|1|Rn:4|(0)|(0)|(0)|(0)|imm5:5|type:2|0|Rm:4
- {0x0ff00ff0, 0x06500f10, 4, arm_UADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff000f0, 0x06500f10, 3, arm_UADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff00ff0, 0x06500f90, 4, arm_UADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff000f0, 0x06500f90, 3, arm_UADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff00ff0, 0x06500f30, 4, arm_UASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff000f0, 0x06500f30, 3, arm_UASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0fe00070, 0x07e00050, 4, arm_UBFX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_0, arm_arg_imm5, arm_arg_widthm1}}, // UBFX<c> <Rd>,<Rn>,#<lsb>,#<widthm1> cond:4|0|1|1|1|1|1|1|widthm1:5|Rd:4|lsb:5|1|0|1|Rn:4
- {0x0ff00ff0, 0x06700f10, 4, arm_UHADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff000f0, 0x06700f10, 3, arm_UHADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff00ff0, 0x06700f90, 4, arm_UHADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff000f0, 0x06700f90, 3, arm_UHADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff00ff0, 0x06700f30, 4, arm_UHASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff000f0, 0x06700f30, 3, arm_UHASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff00ff0, 0x06700f50, 4, arm_UHSAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff000f0, 0x06700f50, 3, arm_UHSAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff00ff0, 0x06700f70, 4, arm_UHSUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff000f0, 0x06700f70, 3, arm_UHSUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff00ff0, 0x06700ff0, 4, arm_UHSUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff000f0, 0x06700ff0, 3, arm_UHSUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UHSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff000f0, 0x00400090, 4, arm_UMAAL_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // UMAAL<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|0|0|1|0|0|RdHi:4|RdLo:4|Rm:4|1|0|0|1|Rn:4
- {0x0fe000f0, 0x00a00090, 4, arm_UMLAL_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // UMLAL{S}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|0|1|0|1|S|RdHi:4|RdLo:4|Rm:4|1|0|0|1|Rn:4
- {0x0fe000f0, 0x00800090, 4, arm_UMULL_EQ, 0x14011c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // UMULL{S}<c> <RdLo>,<RdHi>,<Rn>,<Rm> cond:4|0|0|0|0|1|0|0|S|RdHi:4|RdLo:4|Rm:4|1|0|0|1|Rn:4
- {0x0ff00ff0, 0x06600f10, 4, arm_UQADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff000f0, 0x06600f10, 3, arm_UQADD16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQADD16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|0|1|Rm:4
- {0x0ff00ff0, 0x06600f90, 4, arm_UQADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff000f0, 0x06600f90, 3, arm_UQADD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQADD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|0|0|1|Rm:4
- {0x0ff00ff0, 0x06600f30, 4, arm_UQASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff000f0, 0x06600f30, 3, arm_UQASX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQASX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rm:4
- {0x0ff00ff0, 0x06600f50, 4, arm_UQSAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff000f0, 0x06600f50, 3, arm_UQSAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQSAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff00ff0, 0x06600f70, 4, arm_UQSUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff000f0, 0x06600f70, 3, arm_UQSUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQSUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff00ff0, 0x06600ff0, 4, arm_UQSUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff000f0, 0x06600ff0, 3, arm_UQSUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // UQSUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|1|0|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff0f0f0, 0x0780f010, 4, arm_USAD8_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8}}, // USAD8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|1|1|0|0|0|Rd:4|1|1|1|1|Rm:4|0|0|0|1|Rn:4
- {0x0ff000f0, 0x07800010, 2, arm_USADA8_EQ, 0x1c04, arm_instArgs{arm_arg_R_16, arm_arg_R_0, arm_arg_R_8, arm_arg_R_12}}, // USADA8<c> <Rd>,<Rn>,<Rm>,<Ra> cond:4|0|1|1|1|1|0|0|0|Rd:4|Ra:4|Rm:4|0|0|0|1|Rn:4
- {0x0ff00ff0, 0x06e00f30, 4, arm_USAT16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_satimm4, arm_arg_R_0}}, // USAT16<c> <Rd>,#<sat_imm4>,<Rn> cond:4|0|1|1|0|1|1|1|0|sat_imm:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rn:4
- {0x0ff000f0, 0x06e00f30, 3, arm_USAT16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_satimm4, arm_arg_R_0}}, // USAT16<c> <Rd>,#<sat_imm4>,<Rn> cond:4|0|1|1|0|1|1|1|0|sat_imm:4|Rd:4|(1)|(1)|(1)|(1)|0|0|1|1|Rn:4
- {0x0fe00030, 0x06e00010, 4, arm_USAT_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_satimm5, arm_arg_R_shift_imm}}, // USAT<c> <Rd>,#<sat_imm5>,<Rn>{,<shift>} cond:4|0|1|1|0|1|1|1|sat_imm:5|Rd:4|imm5:5|sh|0|1|Rn:4
- {0x0ff00ff0, 0x06500f50, 4, arm_USAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // USAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff000f0, 0x06500f50, 3, arm_USAX_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // USAX<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|0|1|Rm:4
- {0x0ff00ff0, 0x06500f70, 4, arm_USUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // USUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff000f0, 0x06500f70, 3, arm_USUB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // USUB16<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|0|1|1|1|Rm:4
- {0x0ff00ff0, 0x06500ff0, 4, arm_USUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // USUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff000f0, 0x06500ff0, 3, arm_USUB8_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_0}}, // USUB8<c> <Rd>,<Rn>,<Rm> cond:4|0|1|1|0|0|1|0|1|Rn:4|Rd:4|(1)|(1)|(1)|(1)|1|1|1|1|Rm:4
- {0x0ff003f0, 0x06c00070, 2, arm_UXTAB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_rotate}}, // UXTAB16<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|0|0|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0ff003f0, 0x06e00070, 2, arm_UXTAB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_rotate}}, // UXTAB<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|1|0|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0ff003f0, 0x06f00070, 2, arm_UXTAH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_16, arm_arg_R_rotate}}, // UXTAH<c> <Rd>,<Rn>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|1|1|Rn:4|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0fff03f0, 0x06cf0070, 4, arm_UXTB16_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_rotate}}, // UXTB16<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|0|0|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0fff03f0, 0x06ef0070, 4, arm_UXTB_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_rotate}}, // UXTB<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|1|0|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0fff03f0, 0x06ff0070, 4, arm_UXTH_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_R_rotate}}, // UXTH<c> <Rd>,<Rm>{,<rotation>} cond:4|0|1|1|0|1|1|1|1|1|1|1|1|Rd:4|rotate:2|0|0|0|1|1|1|Rm:4
- {0x0fb00e10, 0x0e000a00, 4, arm_VMLA_EQ_F32, 0x60108011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sn_Dn, arm_arg_Sm_Dm}}, // V<MLA,MLS><c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|0|0|Vn:4|Vd:4|1|0|1|sz|N|op|M|0|Vm:4
- {0x0fbf0ed0, 0x0eb00ac0, 4, arm_VABS_EQ_F32, 0x8011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sm_Dm}}, // VABS<c>.F<32,64> <Sd,Dd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|0|0|0|Vd:4|1|0|1|sz|1|1|M|0|Vm:4
- {0x0fb00e50, 0x0e300a00, 4, arm_VADD_EQ_F32, 0x8011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sn_Dn, arm_arg_Sm_Dm}}, // VADD<c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|1|1|Vn:4|Vd:4|1|0|1|sz|N|0|M|0|Vm:4
- {0x0fbf0e7f, 0x0eb50a40, 4, arm_VCMP_EQ_F32, 0x70108011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_fp_0}}, // VCMP{E}<c>.F<32,64> <Sd,Dd>, #0.0 cond:4|1|1|1|0|1|D|1|1|0|1|0|1|Vd:4|1|0|1|sz|E|1|0|0|(0)|(0)|(0)|(0)
- {0x0fbf0e70, 0x0eb50a40, 3, arm_VCMP_EQ_F32, 0x70108011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_fp_0}}, // VCMP{E}<c>.F<32,64> <Sd,Dd>, #0.0 cond:4|1|1|1|0|1|D|1|1|0|1|0|1|Vd:4|1|0|1|sz|E|1|0|0|(0)|(0)|(0)|(0)
- {0x0fbf0e50, 0x0eb40a40, 4, arm_VCMP_EQ_F32, 0x70108011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sm_Dm}}, // VCMP{E}<c>.F<32,64> <Sd,Dd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|1|0|0|Vd:4|1|0|1|sz|E|1|M|0|Vm:4
- {0x0fbe0e50, 0x0eba0a40, 4, arm_VCVT_EQ_F32_FXS16, 0x801100107011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sd_Dd, arm_arg_fbits}}, // VCVT<c>.F<32,64>.FX<S,U><16,32> <Sd,Dd>, <Sd,Dd>, #<fbits> cond:4|1|1|1|0|1|D|1|1|1|0|1|U|Vd:4|1|0|1|sz|sx|1|i|0|imm4:4
- {0x0fbe0e50, 0x0ebe0a40, 4, arm_VCVT_EQ_FXS16_F32, 0x1001070108011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sd_Dd, arm_arg_fbits}}, // VCVT<c>.FX<S,U><16,32>.F<32,64> <Sd,Dd>, <Sd,Dd>, #<fbits> cond:4|1|1|1|0|1|D|1|1|1|1|1|U|Vd:4|1|0|1|sz|sx|1|i|0|imm4:4
- {0x0fbf0ed0, 0x0eb70ac0, 4, arm_VCVT_EQ_F64_F32, 0x8011c04, arm_instArgs{arm_arg_Dd_Sd, arm_arg_Sm_Dm}}, // VCVT<c>.<F64.F32,F32.F64> <Dd,Sd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|1|1|1|Vd:4|1|0|1|sz|1|1|M|0|Vm:4
- {0x0fbe0f50, 0x0eb20a40, 4, arm_VCVTB_EQ_F32_F16, 0x70110011c04, arm_instArgs{arm_arg_Sd, arm_arg_Sm}}, // VCVT<B,T><c>.<F32.F16,F16.F32> <Sd>, <Sm> cond:4|1|1|1|0|1|D|1|1|0|0|1|op|Vd:4|1|0|1|0|T|1|M|0|Vm:4
- {0x0fbf0e50, 0x0eb80a40, 4, arm_VCVT_EQ_F32_U32, 0x80107011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sm}}, // VCVT<c>.F<32,64>.<U,S>32 <Sd,Dd>, <Sm> cond:4|1|1|1|0|1|D|1|1|1|0|0|0|Vd:4|1|0|1|sz|op|1|M|0|Vm:4
- {0x0fbe0e50, 0x0ebc0a40, 4, arm_VCVTR_EQ_U32_F32, 0x701100108011c04, arm_instArgs{arm_arg_Sd, arm_arg_Sm_Dm}}, // VCVT<R,><c>.<U,S>32.F<32,64> <Sd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|1|1|0|signed|Vd:4|1|0|1|sz|op|1|M|0|Vm:4
- {0x0fb00e50, 0x0e800a00, 4, arm_VDIV_EQ_F32, 0x8011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sn_Dn, arm_arg_Sm_Dm}}, // VDIV<c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|1|D|0|0|Vn:4|Vd:4|1|0|1|sz|N|0|M|0|Vm:4
- {0x0f300e00, 0x0d100a00, 4, arm_VLDR_EQ, 0x1c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_mem_R_pm_imm8at0_offset}}, // VLDR<c> <Sd,Dd>, [<Rn>{,#+/-<imm8>}] cond:4|1|1|0|1|U|D|0|1|Rn:4|Vd:4|1|0|1|sz|imm8:8
- {0x0ff00f7f, 0x0e000a10, 4, arm_VMOV_EQ, 0x1c04, arm_instArgs{arm_arg_Sn, arm_arg_R_12}}, // VMOV<c> <Sn>, <Rt> cond:4|1|1|1|0|0|0|0|0|Vn:4|Rt:4|1|0|1|0|N|0|0|1|0|0|0|0
- {0x0ff00f7f, 0x0e100a10, 4, arm_VMOV_EQ, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_Sn}}, // VMOV<c> <Rt>, <Sn> cond:4|1|1|1|0|0|0|0|1|Vn:4|Rt:4|1|0|1|0|N|0|0|1|0|0|0|0
- {0x0fd00f7f, 0x0e100b10, 4, arm_VMOV_EQ_32, 0x1c04, arm_instArgs{arm_arg_R_12, arm_arg_Dn_half}}, // VMOV<c>.32 <Rt>, <Dn[x]> cond:4|1|1|1|0|0|0|opc1|1|Vn:4|Rt:4|1|0|1|1|N|0|0|1|0|0|0|0
- {0x0fd00f7f, 0x0e000b10, 4, arm_VMOV_EQ_32, 0x1c04, arm_instArgs{arm_arg_Dn_half, arm_arg_R_12}}, // VMOV<c>.32 <Dd[x]>, <Rt> cond:4|1|1|1|0|0|0|opc1|0|Vd:4|Rt:4|1|0|1|1|D|0|0|1|0|0|0|0
- {0x0fb00ef0, 0x0eb00a00, 4, arm_VMOV_EQ_F32, 0x8011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_imm_vfp}}, // VMOV<c>.F<32,64> <Sd,Dd>, #<imm_vfp> cond:4|1|1|1|0|1|D|1|1|imm4H:4|Vd:4|1|0|1|sz|0|0|0|0|imm4L:4
- {0x0fbf0ed0, 0x0eb00a40, 4, arm_VMOV_EQ_F32, 0x8011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sm_Dm}}, // VMOV<c>.F<32,64> <Sd,Dd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|0|0|0|Vd:4|1|0|1|sz|0|1|M|0|Vm:4
- {0x0fff0fff, 0x0ef10a10, 4, arm_VMRS_EQ, 0x1c04, arm_instArgs{arm_arg_R_12_nzcv, arm_arg_FPSCR}}, // VMRS<c> <Rt_nzcv>, FPSCR cond:4|1|1|1|0|1|1|1|1|0|0|0|1|Rt:4|1|0|1|0|0|0|0|1|0|0|0|0
- {0x0fff0fff, 0x0ee10a10, 4, arm_VMSR_EQ, 0x1c04, arm_instArgs{arm_arg_FPSCR, arm_arg_R_12}}, // VMSR<c> FPSCR, <Rt> cond:4|1|1|1|0|1|1|1|0|0|0|0|1|Rt:4|1|0|1|0|0|0|0|1|0|0|0|0
- {0x0fb00e50, 0x0e200a00, 4, arm_VMUL_EQ_F32, 0x8011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sn_Dn, arm_arg_Sm_Dm}}, // VMUL<c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|1|0|Vn:4|Vd:4|1|0|1|sz|N|0|M|0|Vm:4
- {0x0fbf0ed0, 0x0eb10a40, 4, arm_VNEG_EQ_F32, 0x8011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sm_Dm}}, // VNEG<c>.F<32,64> <Sd,Dd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|0|0|1|Vd:4|1|0|1|sz|0|1|M|0|Vm:4
- {0x0fb00e10, 0x0e100a00, 4, arm_VNMLS_EQ_F32, 0x60108011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sn_Dn, arm_arg_Sm_Dm}}, // VN<MLS,MLA><c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|0|1|Vn:4|Vd:4|1|0|1|sz|N|op|M|0|Vm:4
- {0x0fb00e50, 0x0e200a40, 4, arm_VNMUL_EQ_F32, 0x8011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sn_Dn, arm_arg_Sm_Dm}}, // VNMUL<c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|1|0|Vn:4|Vd:4|1|0|1|sz|N|1|M|0|Vm:4
- {0x0fbf0ed0, 0x0eb10ac0, 4, arm_VSQRT_EQ_F32, 0x8011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sm_Dm}}, // VSQRT<c>.F<32,64> <Sd,Dd>, <Sm,Dm> cond:4|1|1|1|0|1|D|1|1|0|0|0|1|Vd:4|1|0|1|sz|1|1|M|0|Vm:4
- {0x0f300e00, 0x0d000a00, 4, arm_VSTR_EQ, 0x1c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_mem_R_pm_imm8at0_offset}}, // VSTR<c> <Sd,Dd>, [<Rn>{,#+/-<imm8>}] cond:4|1|1|0|1|U|D|0|0|Rn:4|Vd:4|1|0|1|sz|imm8:8
- {0x0fb00e50, 0x0e300a40, 4, arm_VSUB_EQ_F32, 0x8011c04, arm_instArgs{arm_arg_Sd_Dd, arm_arg_Sn_Dn, arm_arg_Sm_Dm}}, // VSUB<c>.F<32,64> <Sd,Dd>, <Sn,Dn>, <Sm,Dm> cond:4|1|1|1|0|0|D|1|1|Vn:4|Vd:4|1|0|1|sz|N|1|M|0|Vm:4
- {0x0fffffff, 0x0320f002, 4, arm_WFE_EQ, 0x1c04, arm_instArgs{}}, // WFE<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|1|0
- {0x0fff00ff, 0x0320f002, 3, arm_WFE_EQ, 0x1c04, arm_instArgs{}}, // WFE<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|1|0
- {0x0fffffff, 0x0320f003, 4, arm_WFI_EQ, 0x1c04, arm_instArgs{}}, // WFI<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|1|1
- {0x0fff00ff, 0x0320f003, 3, arm_WFI_EQ, 0x1c04, arm_instArgs{}}, // WFI<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|1|1
- {0x0fffffff, 0x0320f001, 4, arm_YIELD_EQ, 0x1c04, arm_instArgs{}}, // YIELD<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|0|1
- {0x0fff00ff, 0x0320f001, 3, arm_YIELD_EQ, 0x1c04, arm_instArgs{}}, // YIELD<c> cond:4|0|0|1|1|0|0|1|0|0|0|0|0|(1)|(1)|(1)|(1)|(0)|(0)|(0)|(0)|0|0|0|0|0|0|0|1
- {0xffffffff, 0xf7fabcfd, 4, arm_UNDEF, 0x0, arm_instArgs{}}, // UNDEF 1|1|1|1|0|1|1|1|1|1|1|1|1|0|1|0|1|0|1|1|1|1|0|0|1|1|1|1|1|1|0|1
-}
diff --git a/src/cmd/objdump/elf.go b/src/cmd/objdump/elf.go
deleted file mode 100644
index 906e90353..000000000
--- a/src/cmd/objdump/elf.go
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Parsing of ELF executables (Linux, FreeBSD, and so on).
-
-package main
-
-import (
- "debug/elf"
- "os"
-)
-
-func elfSymbols(f *os.File) (syms []Sym, goarch string) {
- p, err := elf.NewFile(f)
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return
- }
-
- elfSyms, err := p.Symbols()
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return
- }
-
- switch p.Machine {
- case elf.EM_X86_64:
- goarch = "amd64"
- case elf.EM_386:
- goarch = "386"
- case elf.EM_ARM:
- goarch = "arm"
- }
-
- for _, s := range elfSyms {
- sym := Sym{Addr: s.Value, Name: s.Name, Size: int64(s.Size), Code: '?'}
- switch s.Section {
- case elf.SHN_UNDEF:
- sym.Code = 'U'
- case elf.SHN_COMMON:
- sym.Code = 'B'
- default:
- i := int(s.Section)
- if i < 0 || i >= len(p.Sections) {
- break
- }
- sect := p.Sections[i]
- switch sect.Flags & (elf.SHF_WRITE | elf.SHF_ALLOC | elf.SHF_EXECINSTR) {
- case elf.SHF_ALLOC | elf.SHF_EXECINSTR:
- sym.Code = 'T'
- case elf.SHF_ALLOC:
- sym.Code = 'R'
- case elf.SHF_ALLOC | elf.SHF_WRITE:
- sym.Code = 'D'
- }
- }
- if elf.ST_BIND(s.Info) == elf.STB_LOCAL {
- sym.Code += 'a' - 'A'
- }
- syms = append(syms, sym)
- }
-
- return
-}
diff --git a/src/cmd/objdump/macho.go b/src/cmd/objdump/macho.go
deleted file mode 100644
index 6e0ad223d..000000000
--- a/src/cmd/objdump/macho.go
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Parsing of Mach-O executables (OS X).
-
-package main
-
-import (
- "debug/macho"
- "os"
- "sort"
-)
-
-func machoSymbols(f *os.File) (syms []Sym, goarch string) {
- p, err := macho.NewFile(f)
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return
- }
-
- if p.Symtab == nil {
- errorf("%s: no symbol table", f.Name())
- return
- }
-
- switch p.Cpu {
- case macho.Cpu386:
- goarch = "386"
- case macho.CpuAmd64:
- goarch = "amd64"
- case macho.CpuArm:
- goarch = "arm"
- }
-
- // Build sorted list of addresses of all symbols.
- // We infer the size of a symbol by looking at where the next symbol begins.
- var addrs []uint64
- for _, s := range p.Symtab.Syms {
- addrs = append(addrs, s.Value)
- }
- sort.Sort(uint64s(addrs))
-
- for _, s := range p.Symtab.Syms {
- sym := Sym{Name: s.Name, Addr: s.Value, Code: '?'}
- i := sort.Search(len(addrs), func(x int) bool { return addrs[x] > s.Value })
- if i < len(addrs) {
- sym.Size = int64(addrs[i] - s.Value)
- }
- if s.Sect == 0 {
- sym.Code = 'U'
- } else if int(s.Sect) <= len(p.Sections) {
- sect := p.Sections[s.Sect-1]
- switch sect.Seg {
- case "__TEXT":
- sym.Code = 'R'
- case "__DATA":
- sym.Code = 'D'
- }
- switch sect.Seg + " " + sect.Name {
- case "__TEXT __text":
- sym.Code = 'T'
- case "__DATA __bss", "__DATA __noptrbss":
- sym.Code = 'B'
- }
- }
- syms = append(syms, sym)
- }
-
- return
-}
-
-type uint64s []uint64
-
-func (x uint64s) Len() int { return len(x) }
-func (x uint64s) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
-func (x uint64s) Less(i, j int) bool { return x[i] < x[j] }
diff --git a/src/cmd/objdump/main.go b/src/cmd/objdump/main.go
index ade54366e..708a85370 100644
--- a/src/cmd/objdump/main.go
+++ b/src/cmd/objdump/main.go
@@ -29,30 +29,18 @@
// Each stanza gives the disassembly for a contiguous range of addresses
// all mapped to the same original source file and line number.
// This mode is intended for use by pprof.
-//
-// The ARM disassembler is missing (golang.org/issue/7452) but will be added
-// before the Go 1.3 release.
package main
import (
- "bufio"
- "bytes"
- "debug/elf"
- "debug/gosym"
- "debug/macho"
- "debug/pe"
- "debug/plan9obj"
- "encoding/binary"
"flag"
"fmt"
- "io"
"log"
"os"
"regexp"
- "sort"
"strconv"
"strings"
- "text/tabwriter"
+
+ "cmd/internal/objfile"
)
var symregexp = flag.String("s", "", "only dump symbols matching this regexp")
@@ -85,435 +73,35 @@ func main() {
symRE = re
}
- f, err := os.Open(flag.Arg(0))
+ f, err := objfile.Open(flag.Arg(0))
if err != nil {
log.Fatal(err)
}
- textStart, textData, symtab, pclntab, err := loadTables(f)
- if err != nil {
- log.Fatalf("reading %s: %v", flag.Arg(0), err)
- }
-
- syms, goarch, err := loadSymbols(f)
- if err != nil {
- log.Fatalf("reading %s: %v", flag.Arg(0), err)
- }
-
- // Filter out section symbols, overwriting syms in place.
- keep := syms[:0]
- for _, sym := range syms {
- switch sym.Name {
- case "text", "_text", "etext", "_etext":
- // drop
- default:
- keep = append(keep, sym)
- }
- }
- syms = keep
-
- disasm := disasms[goarch]
- if disasm == nil {
- log.Fatalf("reading %s: unknown architecture", flag.Arg(0))
- }
-
- lookup := func(addr uint64) (string, uint64) {
- i := sort.Search(len(syms), func(i int) bool { return syms[i].Addr > addr })
- if i > 0 {
- s := syms[i-1]
- if s.Addr <= addr && addr < s.Addr+uint64(s.Size) && s.Name != "etext" && s.Name != "_etext" {
- return s.Name, s.Addr
- }
- }
- return "", 0
- }
-
- pcln := gosym.NewLineTable(pclntab, textStart)
- tab, err := gosym.NewTable(symtab, pcln)
- if err != nil {
- log.Fatalf("reading %s: %v", flag.Arg(0), err)
- }
-
- if flag.NArg() == 1 {
- // disassembly of entire object - our format
- dump(tab, lookup, disasm, goarch, syms, textData, textStart)
- os.Exit(exitCode)
- }
-
- // disassembly of specific piece of object - gnu objdump format for pprof
- gnuDump(tab, lookup, disasm, textData, textStart)
- os.Exit(exitCode)
-}
-
-// base returns the final element in the path.
-// It works on both Windows and Unix paths.
-func base(path string) string {
- path = path[strings.LastIndex(path, "/")+1:]
- path = path[strings.LastIndex(path, `\`)+1:]
- return path
-}
-
-func dump(tab *gosym.Table, lookup lookupFunc, disasm disasmFunc, goarch string, syms []Sym, textData []byte, textStart uint64) {
- stdout := bufio.NewWriter(os.Stdout)
- defer stdout.Flush()
-
- printed := false
- for _, sym := range syms {
- if sym.Code != 'T' || sym.Size == 0 || sym.Name == "_text" || sym.Name == "text" || sym.Addr < textStart || symRE != nil && !symRE.MatchString(sym.Name) {
- continue
- }
- if sym.Addr >= textStart+uint64(len(textData)) || sym.Addr+uint64(sym.Size) > textStart+uint64(len(textData)) {
- break
- }
- if printed {
- fmt.Fprintf(stdout, "\n")
- } else {
- printed = true
- }
- file, _, _ := tab.PCToLine(sym.Addr)
- fmt.Fprintf(stdout, "TEXT %s(SB) %s\n", sym.Name, file)
- tw := tabwriter.NewWriter(stdout, 1, 8, 1, '\t', 0)
- start := sym.Addr
- end := sym.Addr + uint64(sym.Size)
- for pc := start; pc < end; {
- i := pc - textStart
- text, size := disasm(textData[i:end-textStart], pc, lookup)
- file, line, _ := tab.PCToLine(pc)
-
- // ARM is word-based, so show actual word hex, not byte hex.
- // Since ARM is little endian, they're different.
- if goarch == "arm" && size == 4 {
- fmt.Fprintf(tw, "\t%s:%d\t%#x\t%08x\t%s\n", base(file), line, pc, binary.LittleEndian.Uint32(textData[i:i+uint64(size)]), text)
- } else {
- fmt.Fprintf(tw, "\t%s:%d\t%#x\t%x\t%s\n", base(file), line, pc, textData[i:i+uint64(size)], text)
- }
- pc += uint64(size)
- }
- tw.Flush()
- }
-}
-
-func disasm_386(code []byte, pc uint64, lookup lookupFunc) (string, int) {
- return disasm_x86(code, pc, lookup, 32)
-}
-
-func disasm_amd64(code []byte, pc uint64, lookup lookupFunc) (string, int) {
- return disasm_x86(code, pc, lookup, 64)
-}
-
-func disasm_x86(code []byte, pc uint64, lookup lookupFunc, arch int) (string, int) {
- inst, err := x86_Decode(code, 64)
- var text string
- size := inst.Len
- if err != nil || size == 0 || inst.Op == 0 {
- size = 1
- text = "?"
- } else {
- text = x86_plan9Syntax(inst, pc, lookup)
- }
- return text, size
-}
-
-type textReader struct {
- code []byte
- pc uint64
-}
-
-func (r textReader) ReadAt(data []byte, off int64) (n int, err error) {
- if off < 0 || uint64(off) < r.pc {
- return 0, io.EOF
- }
- d := uint64(off) - r.pc
- if d >= uint64(len(r.code)) {
- return 0, io.EOF
- }
- n = copy(data, r.code[d:])
- if n < len(data) {
- err = io.ErrUnexpectedEOF
- }
- return
-}
-
-func disasm_arm(code []byte, pc uint64, lookup lookupFunc) (string, int) {
- inst, err := arm_Decode(code, arm_ModeARM)
- var text string
- size := inst.Len
- if err != nil || size == 0 || inst.Op == 0 {
- size = 4
- text = "?"
- } else {
- text = arm_plan9Syntax(inst, pc, lookup, textReader{code, pc})
- }
- return text, size
-}
-
-var disasms = map[string]disasmFunc{
- "386": disasm_386,
- "amd64": disasm_amd64,
- "arm": disasm_arm,
-}
-
-func gnuDump(tab *gosym.Table, lookup lookupFunc, disasm disasmFunc, textData []byte, textStart uint64) {
- start, err := strconv.ParseUint(strings.TrimPrefix(flag.Arg(1), "0x"), 16, 64)
+ dis, err := f.Disasm()
if err != nil {
- log.Fatalf("invalid start PC: %v", err)
- }
- end, err := strconv.ParseUint(strings.TrimPrefix(flag.Arg(2), "0x"), 16, 64)
- if err != nil {
- log.Fatalf("invalid end PC: %v", err)
- }
- if start < textStart {
- start = textStart
- }
- if end < start {
- end = start
- }
- if end > textStart+uint64(len(textData)) {
- end = textStart + uint64(len(textData))
- }
-
- stdout := bufio.NewWriter(os.Stdout)
- defer stdout.Flush()
-
- // For now, find spans of same PC/line/fn and
- // emit them as having dummy instructions.
- var (
- spanPC uint64
- spanFile string
- spanLine int
- spanFn *gosym.Func
- )
-
- flush := func(endPC uint64) {
- if spanPC == 0 {
- return
- }
- fmt.Fprintf(stdout, "%s:%d\n", spanFile, spanLine)
- for pc := spanPC; pc < endPC; {
- text, size := disasm(textData[pc-textStart:], pc, lookup)
- fmt.Fprintf(stdout, " %x: %s\n", pc, text)
- pc += uint64(size)
- }
- spanPC = 0
- }
-
- for pc := start; pc < end; pc++ {
- file, line, fn := tab.PCToLine(pc)
- if file != spanFile || line != spanLine || fn != spanFn {
- flush(pc)
- spanPC, spanFile, spanLine, spanFn = pc, file, line, fn
- }
- }
- flush(end)
-}
-
-func loadTables(f *os.File) (textStart uint64, textData, symtab, pclntab []byte, err error) {
- if obj, err := elf.NewFile(f); err == nil {
- if sect := obj.Section(".text"); sect != nil {
- textStart = sect.Addr
- textData, _ = sect.Data()
- }
- if sect := obj.Section(".gosymtab"); sect != nil {
- if symtab, err = sect.Data(); err != nil {
- return 0, nil, nil, nil, err
- }
- }
- if sect := obj.Section(".gopclntab"); sect != nil {
- if pclntab, err = sect.Data(); err != nil {
- return 0, nil, nil, nil, err
- }
- }
- return textStart, textData, symtab, pclntab, nil
+ log.Fatal("disassemble %s: %v", flag.Arg(0), err)
}
- if obj, err := macho.NewFile(f); err == nil {
- if sect := obj.Section("__text"); sect != nil {
- textStart = sect.Addr
- textData, _ = sect.Data()
- }
- if sect := obj.Section("__gosymtab"); sect != nil {
- if symtab, err = sect.Data(); err != nil {
- return 0, nil, nil, nil, err
- }
- }
- if sect := obj.Section("__gopclntab"); sect != nil {
- if pclntab, err = sect.Data(); err != nil {
- return 0, nil, nil, nil, err
- }
- }
- return textStart, textData, symtab, pclntab, nil
- }
-
- if obj, err := pe.NewFile(f); err == nil {
- var imageBase uint64
- switch oh := obj.OptionalHeader.(type) {
- case *pe.OptionalHeader32:
- imageBase = uint64(oh.ImageBase)
- case *pe.OptionalHeader64:
- imageBase = oh.ImageBase
- default:
- return 0, nil, nil, nil, fmt.Errorf("pe file format not recognized")
- }
- if sect := obj.Section(".text"); sect != nil {
- textStart = imageBase + uint64(sect.VirtualAddress)
- textData, _ = sect.Data()
- }
- if pclntab, err = loadPETable(obj, "pclntab", "epclntab"); err != nil {
- return 0, nil, nil, nil, err
- }
- if symtab, err = loadPETable(obj, "symtab", "esymtab"); err != nil {
- return 0, nil, nil, nil, err
- }
- return textStart, textData, symtab, pclntab, nil
- }
-
- if obj, err := plan9obj.NewFile(f); err == nil {
- sym, err := findPlan9Symbol(obj, "text")
+ switch flag.NArg() {
+ default:
+ usage()
+ case 1:
+ // disassembly of entire object
+ dis.Print(os.Stdout, symRE, 0, ^uint64(0))
+ os.Exit(0)
+
+ case 3:
+ // disassembly of PC range
+ start, err := strconv.ParseUint(strings.TrimPrefix(flag.Arg(1), "0x"), 16, 64)
if err != nil {
- return 0, nil, nil, nil, err
- }
- textStart = sym.Value
- if sect := obj.Section("text"); sect != nil {
- textData, _ = sect.Data()
- }
- if pclntab, err = loadPlan9Table(obj, "pclntab", "epclntab"); err != nil {
- return 0, nil, nil, nil, err
- }
- if symtab, err = loadPlan9Table(obj, "symtab", "esymtab"); err != nil {
- return 0, nil, nil, nil, err
- }
- return textStart, textData, symtab, pclntab, nil
- }
-
- return 0, nil, nil, nil, fmt.Errorf("unrecognized binary format")
-}
-
-func findPESymbol(f *pe.File, name string) (*pe.Symbol, error) {
- for _, s := range f.Symbols {
- if s.Name != name {
- continue
- }
- if s.SectionNumber <= 0 {
- return nil, fmt.Errorf("symbol %s: invalid section number %d", name, s.SectionNumber)
- }
- if len(f.Sections) < int(s.SectionNumber) {
- return nil, fmt.Errorf("symbol %s: section number %d is larger than max %d", name, s.SectionNumber, len(f.Sections))
- }
- return s, nil
- }
- return nil, fmt.Errorf("no %s symbol found", name)
-}
-
-func loadPETable(f *pe.File, sname, ename string) ([]byte, error) {
- ssym, err := findPESymbol(f, sname)
- if err != nil {
- return nil, err
- }
- esym, err := findPESymbol(f, ename)
- if err != nil {
- return nil, err
- }
- if ssym.SectionNumber != esym.SectionNumber {
- return nil, fmt.Errorf("%s and %s symbols must be in the same section", sname, ename)
- }
- sect := f.Sections[ssym.SectionNumber-1]
- data, err := sect.Data()
- if err != nil {
- return nil, err
- }
- return data[ssym.Value:esym.Value], nil
-}
-
-func findPlan9Symbol(f *plan9obj.File, name string) (*plan9obj.Sym, error) {
- syms, err := f.Symbols()
- if err != nil {
- return nil, err
- }
- for _, s := range syms {
- if s.Name != name {
- continue
+ log.Fatalf("invalid start PC: %v", err)
}
- return &s, nil
- }
- return nil, fmt.Errorf("no %s symbol found", name)
-}
-
-func loadPlan9Table(f *plan9obj.File, sname, ename string) ([]byte, error) {
- ssym, err := findPlan9Symbol(f, sname)
- if err != nil {
- return nil, err
- }
- esym, err := findPlan9Symbol(f, ename)
- if err != nil {
- return nil, err
- }
- text, err := findPlan9Symbol(f, "text")
- if err != nil {
- return nil, err
- }
- sect := f.Section("text")
- if sect == nil {
- return nil, err
- }
- data, err := sect.Data()
- if err != nil {
- return nil, err
- }
- return data[ssym.Value-text.Value : esym.Value-text.Value], nil
-}
-
-// TODO(rsc): This code is taken from cmd/nm. Arrange some way to share the code.
-
-var exitCode = 0
-
-func errorf(format string, args ...interface{}) {
- log.Printf(format, args...)
- exitCode = 1
-}
-
-func loadSymbols(f *os.File) (syms []Sym, goarch string, err error) {
- f.Seek(0, 0)
- buf := make([]byte, 16)
- io.ReadFull(f, buf)
- f.Seek(0, 0)
-
- for _, p := range parsers {
- if bytes.HasPrefix(buf, p.prefix) {
- syms, goarch = p.parse(f)
- sort.Sort(byAddr(syms))
- return
+ end, err := strconv.ParseUint(strings.TrimPrefix(flag.Arg(2), "0x"), 16, 64)
+ if err != nil {
+ log.Fatalf("invalid end PC: %v", err)
}
+ dis.Print(os.Stdout, symRE, start, end)
+ os.Exit(0)
}
- err = fmt.Errorf("unknown file format")
- return
-}
-
-type Sym struct {
- Addr uint64
- Size int64
- Code rune
- Name string
- Type string
}
-
-var parsers = []struct {
- prefix []byte
- parse func(*os.File) ([]Sym, string)
-}{
- {[]byte("\x7FELF"), elfSymbols},
- {[]byte("\xFE\xED\xFA\xCE"), machoSymbols},
- {[]byte("\xFE\xED\xFA\xCF"), machoSymbols},
- {[]byte("\xCE\xFA\xED\xFE"), machoSymbols},
- {[]byte("\xCF\xFA\xED\xFE"), machoSymbols},
- {[]byte("MZ"), peSymbols},
- {[]byte("\x00\x00\x01\xEB"), plan9Symbols}, // 386
- {[]byte("\x00\x00\x04\x07"), plan9Symbols}, // mips
- {[]byte("\x00\x00\x06\x47"), plan9Symbols}, // arm
- {[]byte("\x00\x00\x8A\x97"), plan9Symbols}, // amd64
-}
-
-type byAddr []Sym
-
-func (x byAddr) Len() int { return len(x) }
-func (x byAddr) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
-func (x byAddr) Less(i, j int) bool { return x[i].Addr < x[j].Addr }
diff --git a/src/cmd/objdump/objdump_test.go b/src/cmd/objdump/objdump_test.go
index 82311bb1f..2bb74663c 100644
--- a/src/cmd/objdump/objdump_test.go
+++ b/src/cmd/objdump/objdump_test.go
@@ -5,114 +5,19 @@
package main
import (
- "bufio"
- "bytes"
- "fmt"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"runtime"
- "strconv"
"strings"
"testing"
)
-func loadSyms(t *testing.T) map[string]string {
- if runtime.GOOS == "nacl" {
- t.Skip("skipping on nacl")
- }
-
- cmd := exec.Command("go", "tool", "nm", os.Args[0])
- out, err := cmd.CombinedOutput()
- if err != nil {
- t.Fatalf("go tool nm %v: %v\n%s", os.Args[0], err, string(out))
- }
- syms := make(map[string]string)
- scanner := bufio.NewScanner(bytes.NewReader(out))
- for scanner.Scan() {
- f := strings.Fields(scanner.Text())
- if len(f) < 3 {
- continue
- }
- syms[f[2]] = f[0]
- }
- if err := scanner.Err(); err != nil {
- t.Fatalf("error reading symbols: %v", err)
- }
- return syms
-}
-
-func runObjDump(t *testing.T, exe, startaddr, endaddr string) (path, lineno string) {
- if runtime.GOOS == "nacl" {
- t.Skip("skipping on nacl")
- }
-
- cmd := exec.Command(exe, os.Args[0], startaddr, endaddr)
- out, err := cmd.CombinedOutput()
- if err != nil {
- t.Fatalf("go tool objdump %v: %v\n%s", os.Args[0], err, string(out))
- }
- f := strings.Split(string(out), "\n")
- if len(f) < 1 {
- t.Fatal("objdump output must have at least one line")
- }
- pathAndLineNo := f[0]
- f = strings.Split(pathAndLineNo, ":")
- if runtime.GOOS == "windows" {
- switch len(f) {
- case 2:
- return f[0], f[1]
- case 3:
- return f[0] + ":" + f[1], f[2]
- default:
- t.Fatalf("no line number found in %q", pathAndLineNo)
- }
- }
- if len(f) != 2 {
- t.Fatalf("no line number found in %q", pathAndLineNo)
- }
- return f[0], f[1]
-}
-
-func testObjDump(t *testing.T, exe, startaddr, endaddr string, line int) {
- srcPath, srcLineNo := runObjDump(t, exe, startaddr, endaddr)
- fi1, err := os.Stat("objdump_test.go")
- if err != nil {
- t.Fatalf("Stat failed: %v", err)
- }
- fi2, err := os.Stat(srcPath)
- if err != nil {
- t.Fatalf("Stat failed: %v", err)
- }
- if !os.SameFile(fi1, fi2) {
- t.Fatalf("objdump_test.go and %s are not same file", srcPath)
- }
- if srcLineNo != fmt.Sprint(line) {
- t.Fatalf("line number = %v; want %d", srcLineNo, line)
- }
-}
-
-func TestObjDump(t *testing.T) {
- _, _, line, _ := runtime.Caller(0)
- syms := loadSyms(t)
-
- tmp, exe := buildObjdump(t)
- defer os.RemoveAll(tmp)
-
- startaddr := syms["cmd/objdump.TestObjDump"]
- addr, err := strconv.ParseUint(startaddr, 16, 64)
- if err != nil {
- t.Fatalf("invalid start address %v: %v", startaddr, err)
- }
- endaddr := fmt.Sprintf("%x", addr+10)
- testObjDump(t, exe, startaddr, endaddr, line-1)
- testObjDump(t, exe, "0x"+startaddr, "0x"+endaddr, line-1)
-}
-
func buildObjdump(t *testing.T) (tmp, exe string) {
- if runtime.GOOS == "nacl" {
- t.Skip("skipping on nacl")
+ switch runtime.GOOS {
+ case "android", "nacl":
+ t.Skipf("skipping on %s", runtime.GOOS)
}
tmp, err := ioutil.TempDir("", "TestObjDump")
@@ -140,7 +45,7 @@ var x86Need = []string{
var armNeed = []string{
"fmthello.go:6",
"TEXT main.main(SB)",
- "B.LS main.main(SB)",
+ //"B.LS main.main(SB)", // TODO(rsc): restore; golang.org/issue/9021
"BL fmt.Println(SB)",
"RET",
}
@@ -154,12 +59,15 @@ var armNeed = []string{
// binary for the current system (only) and test that objdump
// can handle that one.
-func TestDisasm(t *testing.T) {
+func testDisasm(t *testing.T, flags ...string) {
tmp, exe := buildObjdump(t)
defer os.RemoveAll(tmp)
hello := filepath.Join(tmp, "hello.exe")
- out, err := exec.Command("go", "build", "-o", hello, "testdata/fmthello.go").CombinedOutput()
+ args := []string{"build", "-o", hello}
+ args = append(args, flags...)
+ args = append(args, "testdata/fmthello.go")
+ out, err := exec.Command("go", args...).CombinedOutput()
if err != nil {
t.Fatalf("go build fmthello.go: %v\n%s", err, out)
}
@@ -191,3 +99,15 @@ func TestDisasm(t *testing.T) {
t.Logf("full disassembly:\n%s", text)
}
}
+
+func TestDisasm(t *testing.T) {
+ testDisasm(t)
+}
+
+func TestDisasmExtld(t *testing.T) {
+ switch runtime.GOOS {
+ case "plan9", "windows":
+ t.Skipf("skipping on %s", runtime.GOOS)
+ }
+ testDisasm(t, "-ldflags=-linkmode=external")
+}
diff --git a/src/cmd/objdump/pe.go b/src/cmd/objdump/pe.go
deleted file mode 100644
index 38190095a..000000000
--- a/src/cmd/objdump/pe.go
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Parsing of PE executables (Microsoft Windows).
-
-package main
-
-import (
- "debug/pe"
- "os"
- "sort"
-)
-
-func peSymbols(f *os.File) (syms []Sym, goarch string) {
- p, err := pe.NewFile(f)
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return
- }
-
- // Build sorted list of addresses of all symbols.
- // We infer the size of a symbol by looking at where the next symbol begins.
- var addrs []uint64
-
- var imageBase uint64
- switch oh := p.OptionalHeader.(type) {
- case *pe.OptionalHeader32:
- imageBase = uint64(oh.ImageBase)
- goarch = "386"
- case *pe.OptionalHeader64:
- imageBase = oh.ImageBase
- goarch = "amd64"
- default:
- errorf("parsing %s: file format not recognized", f.Name())
- return
- }
-
- for _, s := range p.Symbols {
- const (
- N_UNDEF = 0 // An undefined (extern) symbol
- N_ABS = -1 // An absolute symbol (e_value is a constant, not an address)
- N_DEBUG = -2 // A debugging symbol
- )
- sym := Sym{Name: s.Name, Addr: uint64(s.Value), Code: '?'}
- switch s.SectionNumber {
- case N_UNDEF:
- sym.Code = 'U'
- case N_ABS:
- sym.Code = 'C'
- case N_DEBUG:
- sym.Code = '?'
- default:
- if s.SectionNumber < 0 {
- errorf("parsing %s: invalid section number %d", f.Name(), s.SectionNumber)
- return
- }
- if len(p.Sections) < int(s.SectionNumber) {
- errorf("parsing %s: section number %d is large then max %d", f.Name(), s.SectionNumber, len(p.Sections))
- return
- }
- sect := p.Sections[s.SectionNumber-1]
- const (
- text = 0x20
- data = 0x40
- bss = 0x80
- permX = 0x20000000
- permR = 0x40000000
- permW = 0x80000000
- )
- ch := sect.Characteristics
- switch {
- case ch&text != 0:
- sym.Code = 'T'
- case ch&data != 0:
- if ch&permW == 0 {
- sym.Code = 'R'
- } else {
- sym.Code = 'D'
- }
- case ch&bss != 0:
- sym.Code = 'B'
- }
- sym.Addr += imageBase + uint64(sect.VirtualAddress)
- }
- syms = append(syms, sym)
- addrs = append(addrs, sym.Addr)
- }
-
- sort.Sort(uint64s(addrs))
- for i := range syms {
- j := sort.Search(len(addrs), func(x int) bool { return addrs[x] > syms[i].Addr })
- if j < len(addrs) {
- syms[i].Size = int64(addrs[j] - syms[i].Addr)
- }
- }
-
- return
-}
diff --git a/src/cmd/objdump/plan9obj.go b/src/cmd/objdump/plan9obj.go
deleted file mode 100644
index 34462f31c..000000000
--- a/src/cmd/objdump/plan9obj.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Parsing of Plan 9 a.out executables.
-
-package main
-
-import (
- "debug/plan9obj"
- "os"
- "sort"
-)
-
-var validSymType = map[rune]bool{
- 'T': true,
- 't': true,
- 'D': true,
- 'd': true,
- 'B': true,
- 'b': true,
-}
-
-func plan9Symbols(f *os.File) (syms []Sym, goarch string) {
- p, err := plan9obj.NewFile(f)
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return
- }
-
- plan9Syms, err := p.Symbols()
- if err != nil {
- errorf("parsing %s: %v", f.Name(), err)
- return
- }
-
- goarch = "386"
-
- // Build sorted list of addresses of all symbols.
- // We infer the size of a symbol by looking at where the next symbol begins.
- var addrs []uint64
- for _, s := range plan9Syms {
- if !validSymType[s.Type] {
- continue
- }
- addrs = append(addrs, s.Value)
- }
- sort.Sort(uint64s(addrs))
-
- for _, s := range plan9Syms {
- if !validSymType[s.Type] {
- continue
- }
- sym := Sym{Addr: s.Value, Name: s.Name, Code: rune(s.Type)}
- i := sort.Search(len(addrs), func(x int) bool { return addrs[x] > s.Value })
- if i < len(addrs) {
- sym.Size = int64(addrs[i] - s.Value)
- }
- syms = append(syms, sym)
- }
-
- return
-}
diff --git a/src/cmd/objdump/x86.go b/src/cmd/objdump/x86.go
deleted file mode 100644
index 8e741331f..000000000
--- a/src/cmd/objdump/x86.go
+++ /dev/null
@@ -1,13800 +0,0 @@
-// DO NOT EDIT. Generated by code.google.com/p/rsc/cmd/bundle
-// bundle -p main -x x86_ rsc.io/x86/x86asm
-
-/* decode.go */
-
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Table-driven decoding of x86 instructions.
-
-package main
-
-import (
- "bytes"
- "encoding/binary"
- "errors"
- "fmt"
- "runtime"
- "strings"
-)
-
-// Set trace to true to cause the decoder to print the PC sequence
-// of the executed instruction codes. This is typically only useful
-// when you are running a test of a single input case.
-const x86_trace = false
-
-// A decodeOp is a single instruction in the decoder bytecode program.
-//
-// The decodeOps correspond to consuming and conditionally branching
-// on input bytes, consuming additional fields, and then interpreting
-// consumed data as instruction arguments. The names of the xRead and xArg
-// operations are taken from the Intel manual conventions, for example
-// Volume 2, Section 3.1.1, page 487 of
-// http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf
-//
-// The actual decoding program is generated by ../x86map.
-//
-// TODO(rsc): We may be able to merge various of the memory operands
-// since we don't care about, say, the distinction between m80dec and m80bcd.
-// Similarly, mm and mm1 have identical meaning, as do xmm and xmm1.
-
-type x86_decodeOp uint16
-
-const (
- x86_xFail x86_decodeOp = iota // invalid instruction (return)
- x86_xMatch // completed match
- x86_xJump // jump to pc
-
- x86_xCondByte // switch on instruction byte value
- x86_xCondSlashR // read and switch on instruction /r value
- x86_xCondPrefix // switch on presence of instruction prefix
- x86_xCondIs64 // switch on 64-bit processor mode
- x86_xCondDataSize // switch on operand size
- x86_xCondAddrSize // switch on address size
- x86_xCondIsMem // switch on memory vs register argument
-
- x86_xSetOp // set instruction opcode
-
- x86_xReadSlashR // read /r
- x86_xReadIb // read ib
- x86_xReadIw // read iw
- x86_xReadId // read id
- x86_xReadIo // read io
- x86_xReadCb // read cb
- x86_xReadCw // read cw
- x86_xReadCd // read cd
- x86_xReadCp // read cp
- x86_xReadCm // read cm
-
- x86_xArg1 // arg 1
- x86_xArg3 // arg 3
- x86_xArgAL // arg AL
- x86_xArgAX // arg AX
- x86_xArgCL // arg CL
- x86_xArgCR0dashCR7 // arg CR0-CR7
- x86_xArgCS // arg CS
- x86_xArgDR0dashDR7 // arg DR0-DR7
- x86_xArgDS // arg DS
- x86_xArgDX // arg DX
- x86_xArgEAX // arg EAX
- x86_xArgEDX // arg EDX
- x86_xArgES // arg ES
- x86_xArgFS // arg FS
- x86_xArgGS // arg GS
- x86_xArgImm16 // arg imm16
- x86_xArgImm32 // arg imm32
- x86_xArgImm64 // arg imm64
- x86_xArgImm8 // arg imm8
- x86_xArgImm8u // arg imm8 but record as unsigned
- x86_xArgImm16u // arg imm8 but record as unsigned
- x86_xArgM // arg m
- x86_xArgM128 // arg m128
- x86_xArgM1428byte // arg m14/28byte
- x86_xArgM16 // arg m16
- x86_xArgM16and16 // arg m16&16
- x86_xArgM16and32 // arg m16&32
- x86_xArgM16and64 // arg m16&64
- x86_xArgM16colon16 // arg m16:16
- x86_xArgM16colon32 // arg m16:32
- x86_xArgM16colon64 // arg m16:64
- x86_xArgM16int // arg m16int
- x86_xArgM2byte // arg m2byte
- x86_xArgM32 // arg m32
- x86_xArgM32and32 // arg m32&32
- x86_xArgM32fp // arg m32fp
- x86_xArgM32int // arg m32int
- x86_xArgM512byte // arg m512byte
- x86_xArgM64 // arg m64
- x86_xArgM64fp // arg m64fp
- x86_xArgM64int // arg m64int
- x86_xArgM8 // arg m8
- x86_xArgM80bcd // arg m80bcd
- x86_xArgM80dec // arg m80dec
- x86_xArgM80fp // arg m80fp
- x86_xArgM94108byte // arg m94/108byte
- x86_xArgMm // arg mm
- x86_xArgMm1 // arg mm1
- x86_xArgMm2 // arg mm2
- x86_xArgMm2M64 // arg mm2/m64
- x86_xArgMmM32 // arg mm/m32
- x86_xArgMmM64 // arg mm/m64
- x86_xArgMem // arg mem
- x86_xArgMoffs16 // arg moffs16
- x86_xArgMoffs32 // arg moffs32
- x86_xArgMoffs64 // arg moffs64
- x86_xArgMoffs8 // arg moffs8
- x86_xArgPtr16colon16 // arg ptr16:16
- x86_xArgPtr16colon32 // arg ptr16:32
- x86_xArgR16 // arg r16
- x86_xArgR16op // arg r16 with +rw in opcode
- x86_xArgR32 // arg r32
- x86_xArgR32M16 // arg r32/m16
- x86_xArgR32M8 // arg r32/m8
- x86_xArgR32op // arg r32 with +rd in opcode
- x86_xArgR64 // arg r64
- x86_xArgR64M16 // arg r64/m16
- x86_xArgR64op // arg r64 with +rd in opcode
- x86_xArgR8 // arg r8
- x86_xArgR8op // arg r8 with +rb in opcode
- x86_xArgRAX // arg RAX
- x86_xArgRDX // arg RDX
- x86_xArgRM // arg r/m
- x86_xArgRM16 // arg r/m16
- x86_xArgRM32 // arg r/m32
- x86_xArgRM64 // arg r/m64
- x86_xArgRM8 // arg r/m8
- x86_xArgReg // arg reg
- x86_xArgRegM16 // arg reg/m16
- x86_xArgRegM32 // arg reg/m32
- x86_xArgRegM8 // arg reg/m8
- x86_xArgRel16 // arg rel16
- x86_xArgRel32 // arg rel32
- x86_xArgRel8 // arg rel8
- x86_xArgSS // arg SS
- x86_xArgST // arg ST, aka ST(0)
- x86_xArgSTi // arg ST(i) with +i in opcode
- x86_xArgSreg // arg Sreg
- x86_xArgTR0dashTR7 // arg TR0-TR7
- x86_xArgXmm // arg xmm
- x86_xArgXMM0 // arg <XMM0>
- x86_xArgXmm1 // arg xmm1
- x86_xArgXmm2 // arg xmm2
- x86_xArgXmm2M128 // arg xmm2/m128
- x86_xArgXmm2M16 // arg xmm2/m16
- x86_xArgXmm2M32 // arg xmm2/m32
- x86_xArgXmm2M64 // arg xmm2/m64
- x86_xArgXmmM128 // arg xmm/m128
- x86_xArgXmmM32 // arg xmm/m32
- x86_xArgXmmM64 // arg xmm/m64
- x86_xArgRmf16 // arg r/m16 but force mod=3
- x86_xArgRmf32 // arg r/m32 but force mod=3
- x86_xArgRmf64 // arg r/m64 but force mod=3
-)
-
-// instPrefix returns an Inst describing just one prefix byte.
-// It is only used if there is a prefix followed by an unintelligible
-// or invalid instruction byte sequence.
-func x86_instPrefix(b byte, mode int) (x86_Inst, error) {
- // When tracing it is useful to see what called instPrefix to report an error.
- if x86_trace {
- _, file, line, _ := runtime.Caller(1)
- fmt.Printf("%s:%d\n", file, line)
- }
- p := x86_Prefix(b)
- switch p {
- case x86_PrefixDataSize:
- if mode == 16 {
- p = x86_PrefixData32
- } else {
- p = x86_PrefixData16
- }
- case x86_PrefixAddrSize:
- if mode == 32 {
- p = x86_PrefixAddr16
- } else {
- p = x86_PrefixAddr32
- }
- }
- // Note: using composite literal with Prefix key confuses 'bundle' tool.
- inst := x86_Inst{Len: 1}
- inst.Prefix = x86_Prefixes{p}
- return inst, nil
-}
-
-// truncated reports a truncated instruction.
-// For now we use instPrefix but perhaps later we will return
-// a specific error here.
-func x86_truncated(src []byte, mode int) (x86_Inst, error) {
- // return Inst{}, len(src), ErrTruncated
- return x86_instPrefix(src[0], mode) // too long
-}
-
-// These are the errors returned by Decode.
-var (
- x86_ErrInvalidMode = errors.New("invalid x86 mode in Decode")
- x86_ErrTruncated = errors.New("truncated instruction")
- x86_ErrUnrecognized = errors.New("unrecognized instruction")
-)
-
-// decoderCover records coverage information for which parts
-// of the byte code have been executed.
-// TODO(rsc): This is for testing. Only use this if a flag is given.
-var x86_decoderCover []bool
-
-// Decode decodes the leading bytes in src as a single instruction.
-// The mode arguments specifies the assumed processor mode:
-// 16, 32, or 64 for 16-, 32-, and 64-bit execution modes.
-func x86_Decode(src []byte, mode int) (inst x86_Inst, err error) {
- return x86_decode1(src, mode, false)
-}
-
-// decode1 is the implementation of Decode but takes an extra
-// gnuCompat flag to cause it to change its behavior to mimic
-// bugs (or at least unique features) of GNU libopcodes as used
-// by objdump. We don't believe that logic is the right thing to do
-// in general, but when testing against libopcodes it simplifies the
-// comparison if we adjust a few small pieces of logic.
-// The affected logic is in the conditional branch for "mandatory" prefixes,
-// case xCondPrefix.
-func x86_decode1(src []byte, mode int, gnuCompat bool) (x86_Inst, error) {
- switch mode {
- case 16, 32, 64:
- // ok
- // TODO(rsc): 64-bit mode not tested, probably not working.
- default:
- return x86_Inst{}, x86_ErrInvalidMode
- }
-
- // Maximum instruction size is 15 bytes.
- // If we need to read more, return 'truncated instruction.
- if len(src) > 15 {
- src = src[:15]
- }
-
- var (
- // prefix decoding information
- pos = 0 // position reading src
- nprefix = 0 // number of prefixes
- lockIndex = -1 // index of LOCK prefix in src and inst.Prefix
- repIndex = -1 // index of REP/REPN prefix in src and inst.Prefix
- segIndex = -1 // index of Group 2 prefix in src and inst.Prefix
- dataSizeIndex = -1 // index of Group 3 prefix in src and inst.Prefix
- addrSizeIndex = -1 // index of Group 4 prefix in src and inst.Prefix
- rex x86_Prefix // rex byte if present (or 0)
- rexUsed x86_Prefix // bits used in rex byte
- rexIndex = -1 // index of rex byte
-
- addrMode = mode // address mode (width in bits)
- dataMode = mode // operand mode (width in bits)
-
- // decoded ModR/M fields
- haveModrm bool
- modrm int
- mod int
- regop int
- rm int
-
- // if ModR/M is memory reference, Mem form
- mem x86_Mem
- haveMem bool
-
- // decoded SIB fields
- haveSIB bool
- sib int
- scale int
- index int
- base int
-
- // decoded immediate values
- imm int64
- imm8 int8
- immc int64
-
- // output
- opshift int
- inst x86_Inst
- narg int // number of arguments written to inst
- )
-
- if mode == 64 {
- dataMode = 32
- }
-
- // Prefixes are certainly the most complex and underspecified part of
- // decoding x86 instructions. Although the manuals say things like
- // up to four prefixes, one from each group, nearly everyone seems to
- // agree that in practice as many prefixes as possible, including multiple
- // from a particular group or repetitions of a given prefix, can be used on
- // an instruction, provided the total instruction length including prefixes
- // does not exceed the agreed-upon maximum of 15 bytes.
- // Everyone also agrees that if one of these prefixes is the LOCK prefix
- // and the instruction is not one of the instructions that can be used with
- // the LOCK prefix or if the destination is not a memory operand,
- // then the instruction is invalid and produces the #UD exception.
- // However, that is the end of any semblance of agreement.
- //
- // What happens if prefixes are given that conflict with other prefixes?
- // For example, the memory segment overrides CS, DS, ES, FS, GS, SS
- // conflict with each other: only one segment can be in effect.
- // Disassemblers seem to agree that later prefixes take priority over
- // earlier ones. I have not taken the time to write assembly programs
- // to check to see if the hardware agrees.
- //
- // What happens if prefixes are given that have no meaning for the
- // specific instruction to which they are attached? It depends.
- // If they really have no meaning, they are ignored. However, a future
- // processor may assign a different meaning. As a disassembler, we
- // don't really know whether we're seeing a meaningless prefix or one
- // whose meaning we simply haven't been told yet.
- //
- // Combining the two questions, what happens when conflicting
- // extension prefixes are given? No one seems to know for sure.
- // For example, MOVQ is 66 0F D6 /r, MOVDQ2Q is F2 0F D6 /r,
- // and MOVQ2DQ is F3 0F D6 /r. What is '66 F2 F3 0F D6 /r'?
- // Which prefix wins? See the xCondPrefix prefix for more.
- //
- // Writing assembly test cases to divine which interpretation the
- // CPU uses might clarify the situation, but more likely it would
- // make the situation even less clear.
-
- // Read non-REX prefixes.
-ReadPrefixes:
- for ; pos < len(src); pos++ {
- p := x86_Prefix(src[pos])
- switch p {
- default:
- nprefix = pos
- break ReadPrefixes
-
- // Group 1 - lock and repeat prefixes
- // According to Intel, there should only be one from this set,
- // but according to AMD both can be present.
- case 0xF0:
- if lockIndex >= 0 {
- inst.Prefix[lockIndex] |= x86_PrefixIgnored
- }
- lockIndex = pos
- case 0xF2, 0xF3:
- if repIndex >= 0 {
- inst.Prefix[repIndex] |= x86_PrefixIgnored
- }
- repIndex = pos
-
- // Group 2 - segment override / branch hints
- case 0x26, 0x2E, 0x36, 0x3E:
- if mode == 64 {
- p |= x86_PrefixIgnored
- break
- }
- fallthrough
- case 0x64, 0x65:
- if segIndex >= 0 {
- inst.Prefix[segIndex] |= x86_PrefixIgnored
- }
- segIndex = pos
-
- // Group 3 - operand size override
- case 0x66:
- if mode == 16 {
- dataMode = 32
- p = x86_PrefixData32
- } else {
- dataMode = 16
- p = x86_PrefixData16
- }
- if dataSizeIndex >= 0 {
- inst.Prefix[dataSizeIndex] |= x86_PrefixIgnored
- }
- dataSizeIndex = pos
-
- // Group 4 - address size override
- case 0x67:
- if mode == 32 {
- addrMode = 16
- p = x86_PrefixAddr16
- } else {
- addrMode = 32
- p = x86_PrefixAddr32
- }
- if addrSizeIndex >= 0 {
- inst.Prefix[addrSizeIndex] |= x86_PrefixIgnored
- }
- addrSizeIndex = pos
- }
-
- if pos >= len(inst.Prefix) {
- return x86_instPrefix(src[0], mode) // too long
- }
-
- inst.Prefix[pos] = p
- }
-
- // Read REX prefix.
- if pos < len(src) && mode == 64 && x86_Prefix(src[pos]).IsREX() {
- rex = x86_Prefix(src[pos])
- rexIndex = pos
- if pos >= len(inst.Prefix) {
- return x86_instPrefix(src[0], mode) // too long
- }
- inst.Prefix[pos] = rex
- pos++
- if rex&x86_PrefixREXW != 0 {
- dataMode = 64
- if dataSizeIndex >= 0 {
- inst.Prefix[dataSizeIndex] |= x86_PrefixIgnored
- }
- }
- }
-
- // Decode instruction stream, interpreting decoding instructions.
- // opshift gives the shift to use when saving the next
- // opcode byte into inst.Opcode.
- opshift = 24
- if x86_decoderCover == nil {
- x86_decoderCover = make([]bool, len(x86_decoder))
- }
-
- // Decode loop, executing decoder program.
- var oldPC, prevPC int
-Decode:
- for pc := 1; ; { // TODO uint
- oldPC = prevPC
- prevPC = pc
- if x86_trace {
- println("run", pc)
- }
- x := x86_decoder[pc]
- x86_decoderCover[pc] = true
- pc++
-
- // Read and decode ModR/M if needed by opcode.
- switch x86_decodeOp(x) {
- case x86_xCondSlashR, x86_xReadSlashR:
- if haveModrm {
- return x86_Inst{Len: pos}, x86_errInternal
- }
- haveModrm = true
- if pos >= len(src) {
- return x86_truncated(src, mode)
- }
- modrm = int(src[pos])
- pos++
- if opshift >= 0 {
- inst.Opcode |= uint32(modrm) << uint(opshift)
- opshift -= 8
- }
- mod = modrm >> 6
- regop = (modrm >> 3) & 07
- rm = modrm & 07
- if rex&x86_PrefixREXR != 0 {
- rexUsed |= x86_PrefixREXR
- regop |= 8
- }
- if addrMode == 16 {
- // 16-bit modrm form
- if mod != 3 {
- haveMem = true
- mem = x86_addr16[rm]
- if rm == 6 && mod == 0 {
- mem.Base = 0
- }
-
- // Consume disp16 if present.
- if mod == 0 && rm == 6 || mod == 2 {
- if pos+2 > len(src) {
- return x86_truncated(src, mode)
- }
- mem.Disp = int64(binary.LittleEndian.Uint16(src[pos:]))
- pos += 2
- }
-
- // Consume disp8 if present.
- if mod == 1 {
- if pos >= len(src) {
- return x86_truncated(src, mode)
- }
- mem.Disp = int64(int8(src[pos]))
- pos++
- }
- }
- } else {
- haveMem = mod != 3
-
- // 32-bit or 64-bit form
- // Consume SIB encoding if present.
- if rm == 4 && mod != 3 {
- haveSIB = true
- if pos >= len(src) {
- return x86_truncated(src, mode)
- }
- sib = int(src[pos])
- pos++
- if opshift >= 0 {
- inst.Opcode |= uint32(sib) << uint(opshift)
- opshift -= 8
- }
- scale = sib >> 6
- index = (sib >> 3) & 07
- base = sib & 07
- if rex&x86_PrefixREXB != 0 {
- rexUsed |= x86_PrefixREXB
- base |= 8
- }
- if rex&x86_PrefixREXX != 0 {
- rexUsed |= x86_PrefixREXX
- index |= 8
- }
-
- mem.Scale = 1 << uint(scale)
- if index == 4 {
- // no mem.Index
- } else {
- mem.Index = x86_baseRegForBits(addrMode) + x86_Reg(index)
- }
- if base&7 == 5 && mod == 0 {
- // no mem.Base
- } else {
- mem.Base = x86_baseRegForBits(addrMode) + x86_Reg(base)
- }
- } else {
- if rex&x86_PrefixREXB != 0 {
- rexUsed |= x86_PrefixREXB
- rm |= 8
- }
- if mod == 0 && rm&7 == 5 || rm&7 == 4 {
- // base omitted
- } else if mod != 3 {
- mem.Base = x86_baseRegForBits(addrMode) + x86_Reg(rm)
- }
- }
-
- // Consume disp32 if present.
- if mod == 0 && (rm&7 == 5 || haveSIB && base&7 == 5) || mod == 2 {
- if pos+4 > len(src) {
- return x86_truncated(src, mode)
- }
- mem.Disp = int64(binary.LittleEndian.Uint32(src[pos:]))
- pos += 4
- }
-
- // Consume disp8 if present.
- if mod == 1 {
- if pos >= len(src) {
- return x86_truncated(src, mode)
- }
- mem.Disp = int64(int8(src[pos]))
- pos++
- }
-
- // In 64-bit, mod=0 rm=5 is PC-relative instead of just disp.
- // See Vol 2A. Table 2-7.
- if mode == 64 && mod == 0 && rm&7 == 5 {
- if addrMode == 32 {
- mem.Base = x86_EIP
- } else {
- mem.Base = x86_RIP
- }
- }
- }
-
- if segIndex >= 0 {
- mem.Segment = x86_prefixToSegment(inst.Prefix[segIndex])
- }
- }
-
- // Execute single opcode.
- switch x86_decodeOp(x) {
- default:
- println("bad op", x, "at", pc-1, "from", oldPC)
- return x86_Inst{Len: pos}, x86_errInternal
-
- case x86_xFail:
- inst.Op = 0
- break Decode
-
- case x86_xMatch:
- break Decode
-
- case x86_xJump:
- pc = int(x86_decoder[pc])
-
- // Conditional branches.
-
- case x86_xCondByte:
- if pos >= len(src) {
- return x86_truncated(src, mode)
- }
- b := src[pos]
- n := int(x86_decoder[pc])
- pc++
- for i := 0; i < n; i++ {
- xb, xpc := x86_decoder[pc], int(x86_decoder[pc+1])
- pc += 2
- if b == byte(xb) {
- pc = xpc
- pos++
- if opshift >= 0 {
- inst.Opcode |= uint32(b) << uint(opshift)
- opshift -= 8
- }
- continue Decode
- }
- }
- // xCondByte is the only conditional with a fall through,
- // so that it can be used to pick off special cases before
- // an xCondSlash. If the fallthrough instruction is xFail,
- // advance the position so that the decoded instruction
- // size includes the byte we just compared against.
- if x86_decodeOp(x86_decoder[pc]) == x86_xJump {
- pc = int(x86_decoder[pc+1])
- }
- if x86_decodeOp(x86_decoder[pc]) == x86_xFail {
- pos++
- }
-
- case x86_xCondIs64:
- if mode == 64 {
- pc = int(x86_decoder[pc+1])
- } else {
- pc = int(x86_decoder[pc])
- }
-
- case x86_xCondIsMem:
- mem := haveMem
- if !haveModrm {
- if pos >= len(src) {
- return x86_instPrefix(src[0], mode) // too long
- }
- mem = src[pos]>>6 != 3
- }
- if mem {
- pc = int(x86_decoder[pc+1])
- } else {
- pc = int(x86_decoder[pc])
- }
-
- case x86_xCondDataSize:
- switch dataMode {
- case 16:
- if dataSizeIndex >= 0 {
- inst.Prefix[dataSizeIndex] |= x86_PrefixImplicit
- }
- pc = int(x86_decoder[pc])
- case 32:
- if dataSizeIndex >= 0 {
- inst.Prefix[dataSizeIndex] |= x86_PrefixImplicit
- }
- pc = int(x86_decoder[pc+1])
- case 64:
- rexUsed |= x86_PrefixREXW
- pc = int(x86_decoder[pc+2])
- }
-
- case x86_xCondAddrSize:
- switch addrMode {
- case 16:
- if addrSizeIndex >= 0 {
- inst.Prefix[addrSizeIndex] |= x86_PrefixImplicit
- }
- pc = int(x86_decoder[pc])
- case 32:
- if addrSizeIndex >= 0 {
- inst.Prefix[addrSizeIndex] |= x86_PrefixImplicit
- }
- pc = int(x86_decoder[pc+1])
- case 64:
- pc = int(x86_decoder[pc+2])
- }
-
- case x86_xCondPrefix:
- // Conditional branch based on presence or absence of prefixes.
- // The conflict cases here are completely undocumented and
- // differ significantly between GNU libopcodes and Intel xed.
- // I have not written assembly code to divine what various CPUs
- // do, but it wouldn't surprise me if they are not consistent either.
- //
- // The basic idea is to switch on the presence of a prefix, so that
- // for example:
- //
- // xCondPrefix, 4
- // 0xF3, 123,
- // 0xF2, 234,
- // 0x66, 345,
- // 0, 456
- //
- // branch to 123 if the F3 prefix is present, 234 if the F2 prefix
- // is present, 66 if the 345 prefix is present, and 456 otherwise.
- // The prefixes are given in descending order so that the 0 will be last.
- //
- // It is unclear what should happen if multiple conditions are
- // satisfied: what if F2 and F3 are both present, or if 66 and F2
- // are present, or if all three are present? The one chosen becomes
- // part of the opcode and the others do not. Perhaps the answer
- // depends on the specific opcodes in question.
- //
- // The only clear example is that CRC32 is F2 0F 38 F1 /r, and
- // it comes in 16-bit and 32-bit forms based on the 66 prefix,
- // so 66 F2 0F 38 F1 /r should be treated as F2 taking priority,
- // with the 66 being only an operand size override, and probably
- // F2 66 0F 38 F1 /r should be treated the same.
- // Perhaps that rule is specific to the case of CRC32, since no
- // 66 0F 38 F1 instruction is defined (today) (that we know of).
- // However, both libopcodes and xed seem to generalize this
- // example and choose F2/F3 in preference to 66, and we
- // do the same.
- //
- // Next, what if both F2 and F3 are present? Which wins?
- // The Intel xed rule, and ours, is that the one that occurs last wins.
- // The GNU libopcodes rule, which we implement only in gnuCompat mode,
- // is that F3 beats F2 unless F3 has no special meaning, in which
- // case F3 can be a modified on an F2 special meaning.
- //
- // Concretely,
- // 66 0F D6 /r is MOVQ
- // F2 0F D6 /r is MOVDQ2Q
- // F3 0F D6 /r is MOVQ2DQ.
- //
- // F2 66 0F D6 /r is 66 + MOVDQ2Q always.
- // 66 F2 0F D6 /r is 66 + MOVDQ2Q always.
- // F3 66 0F D6 /r is 66 + MOVQ2DQ always.
- // 66 F3 0F D6 /r is 66 + MOVQ2DQ always.
- // F2 F3 0F D6 /r is F2 + MOVQ2DQ always.
- // F3 F2 0F D6 /r is F3 + MOVQ2DQ in Intel xed, but F2 + MOVQ2DQ in GNU libopcodes.
- // Adding 66 anywhere in the prefix section of the
- // last two cases does not change the outcome.
- //
- // Finally, what if there is a variant in which 66 is a mandatory
- // prefix rather than an operand size override, but we know of
- // no corresponding F2/F3 form, and we see both F2/F3 and 66.
- // Does F2/F3 still take priority, so that the result is an unknown
- // instruction, or does the 66 take priority, so that the extended
- // 66 instruction should be interpreted as having a REP/REPN prefix?
- // Intel xed does the former and GNU libopcodes does the latter.
- // We side with Intel xed, unless we are trying to match libopcodes
- // more closely during the comparison-based test suite.
- //
- // In 64-bit mode REX.W is another valid prefix to test for, but
- // there is less ambiguity about that. When present, REX.W is
- // always the first entry in the table.
- n := int(x86_decoder[pc])
- pc++
- sawF3 := false
- for j := 0; j < n; j++ {
- prefix := x86_Prefix(x86_decoder[pc+2*j])
- if prefix.IsREX() {
- rexUsed |= prefix
- if rex&prefix == prefix {
- pc = int(x86_decoder[pc+2*j+1])
- continue Decode
- }
- continue
- }
- ok := false
- if prefix == 0 {
- ok = true
- } else if prefix.IsREX() {
- rexUsed |= prefix
- if rex&prefix == prefix {
- ok = true
- }
- } else {
- if prefix == 0xF3 {
- sawF3 = true
- }
- switch prefix {
- case x86_PrefixLOCK:
- if lockIndex >= 0 {
- inst.Prefix[lockIndex] |= x86_PrefixImplicit
- ok = true
- }
- case x86_PrefixREP, x86_PrefixREPN:
- if repIndex >= 0 && inst.Prefix[repIndex]&0xFF == prefix {
- inst.Prefix[repIndex] |= x86_PrefixImplicit
- ok = true
- }
- if gnuCompat && !ok && prefix == 0xF3 && repIndex >= 0 && (j+1 >= n || x86_decoder[pc+2*(j+1)] != 0xF2) {
- // Check to see if earlier prefix F3 is present.
- for i := repIndex - 1; i >= 0; i-- {
- if inst.Prefix[i]&0xFF == prefix {
- inst.Prefix[i] |= x86_PrefixImplicit
- ok = true
- }
- }
- }
- if gnuCompat && !ok && prefix == 0xF2 && repIndex >= 0 && !sawF3 && inst.Prefix[repIndex]&0xFF == 0xF3 {
- // Check to see if earlier prefix F2 is present.
- for i := repIndex - 1; i >= 0; i-- {
- if inst.Prefix[i]&0xFF == prefix {
- inst.Prefix[i] |= x86_PrefixImplicit
- ok = true
- }
- }
- }
- case x86_PrefixCS, x86_PrefixDS, x86_PrefixES, x86_PrefixFS, x86_PrefixGS, x86_PrefixSS:
- if segIndex >= 0 && inst.Prefix[segIndex]&0xFF == prefix {
- inst.Prefix[segIndex] |= x86_PrefixImplicit
- ok = true
- }
- case x86_PrefixDataSize:
- // Looking for 66 mandatory prefix.
- // The F2/F3 mandatory prefixes take priority when both are present.
- // If we got this far in the xCondPrefix table and an F2/F3 is present,
- // it means the table didn't have any entry for that prefix. But if 66 has
- // special meaning, perhaps F2/F3 have special meaning that we don't know.
- // Intel xed works this way, treating the F2/F3 as inhibiting the 66.
- // GNU libopcodes allows the 66 to match. We do what Intel xed does
- // except in gnuCompat mode.
- if repIndex >= 0 && !gnuCompat {
- inst.Op = 0
- break Decode
- }
- if dataSizeIndex >= 0 {
- inst.Prefix[dataSizeIndex] |= x86_PrefixImplicit
- ok = true
- }
- case x86_PrefixAddrSize:
- if addrSizeIndex >= 0 {
- inst.Prefix[addrSizeIndex] |= x86_PrefixImplicit
- ok = true
- }
- }
- }
- if ok {
- pc = int(x86_decoder[pc+2*j+1])
- continue Decode
- }
- }
- inst.Op = 0
- break Decode
-
- case x86_xCondSlashR:
- pc = int(x86_decoder[pc+regop&7])
-
- // Input.
-
- case x86_xReadSlashR:
- // done above
-
- case x86_xReadIb:
- if pos >= len(src) {
- return x86_truncated(src, mode)
- }
- imm8 = int8(src[pos])
- pos++
-
- case x86_xReadIw:
- if pos+2 > len(src) {
- return x86_truncated(src, mode)
- }
- imm = int64(binary.LittleEndian.Uint16(src[pos:]))
- pos += 2
-
- case x86_xReadId:
- if pos+4 > len(src) {
- return x86_truncated(src, mode)
- }
- imm = int64(binary.LittleEndian.Uint32(src[pos:]))
- pos += 4
-
- case x86_xReadIo:
- if pos+8 > len(src) {
- return x86_truncated(src, mode)
- }
- imm = int64(binary.LittleEndian.Uint64(src[pos:]))
- pos += 8
-
- case x86_xReadCb:
- if pos >= len(src) {
- return x86_truncated(src, mode)
- }
- immc = int64(src[pos])
- pos++
-
- case x86_xReadCw:
- if pos+2 > len(src) {
- return x86_truncated(src, mode)
- }
- immc = int64(binary.LittleEndian.Uint16(src[pos:]))
- pos += 2
-
- case x86_xReadCm:
- if addrMode == 16 {
- if pos+2 > len(src) {
- return x86_truncated(src, mode)
- }
- immc = int64(binary.LittleEndian.Uint16(src[pos:]))
- pos += 2
- } else if addrMode == 32 {
- if pos+4 > len(src) {
- return x86_truncated(src, mode)
- }
- immc = int64(binary.LittleEndian.Uint32(src[pos:]))
- pos += 4
- } else {
- if pos+8 > len(src) {
- return x86_truncated(src, mode)
- }
- immc = int64(binary.LittleEndian.Uint64(src[pos:]))
- pos += 8
- }
- case x86_xReadCd:
- if pos+4 > len(src) {
- return x86_truncated(src, mode)
- }
- immc = int64(binary.LittleEndian.Uint32(src[pos:]))
- pos += 4
-
- case x86_xReadCp:
- if pos+6 > len(src) {
- return x86_truncated(src, mode)
- }
- w := binary.LittleEndian.Uint32(src[pos:])
- w2 := binary.LittleEndian.Uint16(src[pos+4:])
- immc = int64(w2)<<32 | int64(w)
- pos += 6
-
- // Output.
-
- case x86_xSetOp:
- inst.Op = x86_Op(x86_decoder[pc])
- pc++
-
- case x86_xArg1,
- x86_xArg3,
- x86_xArgAL,
- x86_xArgAX,
- x86_xArgCL,
- x86_xArgCS,
- x86_xArgDS,
- x86_xArgDX,
- x86_xArgEAX,
- x86_xArgEDX,
- x86_xArgES,
- x86_xArgFS,
- x86_xArgGS,
- x86_xArgRAX,
- x86_xArgRDX,
- x86_xArgSS,
- x86_xArgST,
- x86_xArgXMM0:
- inst.Args[narg] = x86_fixedArg[x]
- narg++
-
- case x86_xArgImm8:
- inst.Args[narg] = x86_Imm(imm8)
- narg++
-
- case x86_xArgImm8u:
- inst.Args[narg] = x86_Imm(uint8(imm8))
- narg++
-
- case x86_xArgImm16:
- inst.Args[narg] = x86_Imm(int16(imm))
- narg++
-
- case x86_xArgImm16u:
- inst.Args[narg] = x86_Imm(uint16(imm))
- narg++
-
- case x86_xArgImm32:
- inst.Args[narg] = x86_Imm(int32(imm))
- narg++
-
- case x86_xArgImm64:
- inst.Args[narg] = x86_Imm(imm)
- narg++
-
- case x86_xArgM,
- x86_xArgM128,
- x86_xArgM1428byte,
- x86_xArgM16,
- x86_xArgM16and16,
- x86_xArgM16and32,
- x86_xArgM16and64,
- x86_xArgM16colon16,
- x86_xArgM16colon32,
- x86_xArgM16colon64,
- x86_xArgM16int,
- x86_xArgM2byte,
- x86_xArgM32,
- x86_xArgM32and32,
- x86_xArgM32fp,
- x86_xArgM32int,
- x86_xArgM512byte,
- x86_xArgM64,
- x86_xArgM64fp,
- x86_xArgM64int,
- x86_xArgM8,
- x86_xArgM80bcd,
- x86_xArgM80dec,
- x86_xArgM80fp,
- x86_xArgM94108byte,
- x86_xArgMem:
- if !haveMem {
- inst.Op = 0
- break Decode
- }
- inst.Args[narg] = mem
- inst.MemBytes = int(x86_memBytes[x86_decodeOp(x)])
- narg++
-
- case x86_xArgPtr16colon16:
- inst.Args[narg] = x86_Imm(immc >> 16)
- inst.Args[narg+1] = x86_Imm(immc & (1<<16 - 1))
- narg += 2
-
- case x86_xArgPtr16colon32:
- inst.Args[narg] = x86_Imm(immc >> 32)
- inst.Args[narg+1] = x86_Imm(immc & (1<<32 - 1))
- narg += 2
-
- case x86_xArgMoffs8, x86_xArgMoffs16, x86_xArgMoffs32, x86_xArgMoffs64:
- // TODO(rsc): Can address be 64 bits?
- mem = x86_Mem{Disp: int64(immc)}
- if segIndex >= 0 {
- mem.Segment = x86_prefixToSegment(inst.Prefix[segIndex])
- inst.Prefix[segIndex] |= x86_PrefixImplicit
- }
- inst.Args[narg] = mem
- inst.MemBytes = int(x86_memBytes[x86_decodeOp(x)])
- narg++
-
- case x86_xArgR8, x86_xArgR16, x86_xArgR32, x86_xArgR64, x86_xArgXmm, x86_xArgXmm1, x86_xArgDR0dashDR7:
- base := x86_baseReg[x]
- index := x86_Reg(regop)
- if rex != 0 && base == x86_AL && index >= 4 {
- rexUsed |= x86_PrefixREX
- index -= 4
- base = x86_SPB
- }
- inst.Args[narg] = base + index
- narg++
-
- case x86_xArgMm, x86_xArgMm1, x86_xArgTR0dashTR7:
- inst.Args[narg] = x86_baseReg[x] + x86_Reg(regop&7)
- narg++
-
- case x86_xArgCR0dashCR7:
- // AMD documents an extension that the LOCK prefix
- // can be used in place of a REX prefix in order to access
- // CR8 from 32-bit mode. The LOCK prefix is allowed in
- // all modes, provided the corresponding CPUID bit is set.
- if lockIndex >= 0 {
- inst.Prefix[lockIndex] |= x86_PrefixImplicit
- regop += 8
- }
- inst.Args[narg] = x86_CR0 + x86_Reg(regop)
- narg++
-
- case x86_xArgSreg:
- regop &= 7
- if regop >= 6 {
- inst.Op = 0
- break Decode
- }
- inst.Args[narg] = x86_ES + x86_Reg(regop)
- narg++
-
- case x86_xArgRmf16, x86_xArgRmf32, x86_xArgRmf64:
- base := x86_baseReg[x]
- index := x86_Reg(modrm & 07)
- if rex&x86_PrefixREXB != 0 {
- rexUsed |= x86_PrefixREXB
- index += 8
- }
- inst.Args[narg] = base + index
- narg++
-
- case x86_xArgR8op, x86_xArgR16op, x86_xArgR32op, x86_xArgR64op, x86_xArgSTi:
- n := inst.Opcode >> uint(opshift+8) & 07
- base := x86_baseReg[x]
- index := x86_Reg(n)
- if rex&x86_PrefixREXB != 0 && x86_decodeOp(x) != x86_xArgSTi {
- rexUsed |= x86_PrefixREXB
- index += 8
- }
- if rex != 0 && base == x86_AL && index >= 4 {
- rexUsed |= x86_PrefixREX
- index -= 4
- base = x86_SPB
- }
- inst.Args[narg] = base + index
- narg++
-
- case x86_xArgRM8, x86_xArgRM16, x86_xArgRM32, x86_xArgRM64, x86_xArgR32M16, x86_xArgR32M8, x86_xArgR64M16,
- x86_xArgMmM32, x86_xArgMmM64, x86_xArgMm2M64,
- x86_xArgXmm2M16, x86_xArgXmm2M32, x86_xArgXmm2M64, x86_xArgXmmM64, x86_xArgXmmM128, x86_xArgXmmM32, x86_xArgXmm2M128:
- if haveMem {
- inst.Args[narg] = mem
- inst.MemBytes = int(x86_memBytes[x86_decodeOp(x)])
- } else {
- base := x86_baseReg[x]
- index := x86_Reg(rm)
- switch x86_decodeOp(x) {
- case x86_xArgMmM32, x86_xArgMmM64, x86_xArgMm2M64:
- // There are only 8 MMX registers, so these ignore the REX.X bit.
- index &= 7
- case x86_xArgRM8:
- if rex != 0 && index >= 4 {
- rexUsed |= x86_PrefixREX
- index -= 4
- base = x86_SPB
- }
- }
- inst.Args[narg] = base + index
- }
- narg++
-
- case x86_xArgMm2: // register only; TODO(rsc): Handle with tag modrm_regonly tag
- if haveMem {
- inst.Op = 0
- break Decode
- }
- inst.Args[narg] = x86_baseReg[x] + x86_Reg(rm&7)
- narg++
-
- case x86_xArgXmm2: // register only; TODO(rsc): Handle with tag modrm_regonly tag
- if haveMem {
- inst.Op = 0
- break Decode
- }
- inst.Args[narg] = x86_baseReg[x] + x86_Reg(rm)
- narg++
-
- case x86_xArgRel8:
- inst.Args[narg] = x86_Rel(int8(immc))
- narg++
-
- case x86_xArgRel16:
- inst.Args[narg] = x86_Rel(int16(immc))
- narg++
-
- case x86_xArgRel32:
- inst.Args[narg] = x86_Rel(int32(immc))
- narg++
- }
- }
-
- if inst.Op == 0 {
- // Invalid instruction.
- if nprefix > 0 {
- return x86_instPrefix(src[0], mode) // invalid instruction
- }
- return x86_Inst{Len: pos}, x86_ErrUnrecognized
- }
-
- // Matched! Hooray!
-
- // 90 decodes as XCHG EAX, EAX but is NOP.
- // 66 90 decodes as XCHG AX, AX and is NOP too.
- // 48 90 decodes as XCHG RAX, RAX and is NOP too.
- // 43 90 decodes as XCHG R8D, EAX and is *not* NOP.
- // F3 90 decodes as REP XCHG EAX, EAX but is PAUSE.
- // It's all too special to handle in the decoding tables, at least for now.
- if inst.Op == x86_XCHG && inst.Opcode>>24 == 0x90 {
- if inst.Args[0] == x86_RAX || inst.Args[0] == x86_EAX || inst.Args[0] == x86_AX {
- inst.Op = x86_NOP
- if dataSizeIndex >= 0 {
- inst.Prefix[dataSizeIndex] &^= x86_PrefixImplicit
- }
- inst.Args[0] = nil
- inst.Args[1] = nil
- }
- if repIndex >= 0 && inst.Prefix[repIndex] == 0xF3 {
- inst.Prefix[repIndex] |= x86_PrefixImplicit
- inst.Op = x86_PAUSE
- inst.Args[0] = nil
- inst.Args[1] = nil
- } else if gnuCompat {
- for i := nprefix - 1; i >= 0; i-- {
- if inst.Prefix[i]&0xFF == 0xF3 {
- inst.Prefix[i] |= x86_PrefixImplicit
- inst.Op = x86_PAUSE
- inst.Args[0] = nil
- inst.Args[1] = nil
- break
- }
- }
- }
- }
-
- // defaultSeg returns the default segment for an implicit
- // memory reference: the final override if present, or else DS.
- defaultSeg := func() x86_Reg {
- if segIndex >= 0 {
- inst.Prefix[segIndex] |= x86_PrefixImplicit
- return x86_prefixToSegment(inst.Prefix[segIndex])
- }
- return x86_DS
- }
-
- // Add implicit arguments not present in the tables.
- // Normally we shy away from making implicit arguments explicit,
- // following the Intel manuals, but adding the arguments seems
- // the best way to express the effect of the segment override prefixes.
- // TODO(rsc): Perhaps add these to the tables and
- // create bytecode instructions for them.
- usedAddrSize := false
- switch inst.Op {
- case x86_INSB, x86_INSW, x86_INSD:
- inst.Args[0] = x86_Mem{Segment: x86_ES, Base: x86_baseRegForBits(addrMode) + x86_DI - x86_AX}
- inst.Args[1] = x86_DX
- usedAddrSize = true
-
- case x86_OUTSB, x86_OUTSW, x86_OUTSD:
- inst.Args[0] = x86_DX
- inst.Args[1] = x86_Mem{Segment: defaultSeg(), Base: x86_baseRegForBits(addrMode) + x86_SI - x86_AX}
- usedAddrSize = true
-
- case x86_MOVSB, x86_MOVSW, x86_MOVSD, x86_MOVSQ:
- inst.Args[0] = x86_Mem{Segment: x86_ES, Base: x86_baseRegForBits(addrMode) + x86_DI - x86_AX}
- inst.Args[1] = x86_Mem{Segment: defaultSeg(), Base: x86_baseRegForBits(addrMode) + x86_SI - x86_AX}
- usedAddrSize = true
-
- case x86_CMPSB, x86_CMPSW, x86_CMPSD, x86_CMPSQ:
- inst.Args[0] = x86_Mem{Segment: defaultSeg(), Base: x86_baseRegForBits(addrMode) + x86_SI - x86_AX}
- inst.Args[1] = x86_Mem{Segment: x86_ES, Base: x86_baseRegForBits(addrMode) + x86_DI - x86_AX}
- usedAddrSize = true
-
- case x86_LODSB, x86_LODSW, x86_LODSD, x86_LODSQ:
- switch inst.Op {
- case x86_LODSB:
- inst.Args[0] = x86_AL
- case x86_LODSW:
- inst.Args[0] = x86_AX
- case x86_LODSD:
- inst.Args[0] = x86_EAX
- case x86_LODSQ:
- inst.Args[0] = x86_RAX
- }
- inst.Args[1] = x86_Mem{Segment: defaultSeg(), Base: x86_baseRegForBits(addrMode) + x86_SI - x86_AX}
- usedAddrSize = true
-
- case x86_STOSB, x86_STOSW, x86_STOSD, x86_STOSQ:
- inst.Args[0] = x86_Mem{Segment: x86_ES, Base: x86_baseRegForBits(addrMode) + x86_DI - x86_AX}
- switch inst.Op {
- case x86_STOSB:
- inst.Args[1] = x86_AL
- case x86_STOSW:
- inst.Args[1] = x86_AX
- case x86_STOSD:
- inst.Args[1] = x86_EAX
- case x86_STOSQ:
- inst.Args[1] = x86_RAX
- }
- usedAddrSize = true
-
- case x86_SCASB, x86_SCASW, x86_SCASD, x86_SCASQ:
- inst.Args[1] = x86_Mem{Segment: x86_ES, Base: x86_baseRegForBits(addrMode) + x86_DI - x86_AX}
- switch inst.Op {
- case x86_SCASB:
- inst.Args[0] = x86_AL
- case x86_SCASW:
- inst.Args[0] = x86_AX
- case x86_SCASD:
- inst.Args[0] = x86_EAX
- case x86_SCASQ:
- inst.Args[0] = x86_RAX
- }
- usedAddrSize = true
-
- case x86_XLATB:
- inst.Args[0] = x86_Mem{Segment: defaultSeg(), Base: x86_baseRegForBits(addrMode) + x86_BX - x86_AX}
- usedAddrSize = true
- }
-
- // If we used the address size annotation to construct the
- // argument list, mark that prefix as implicit: it doesn't need
- // to be shown when printing the instruction.
- if haveMem || usedAddrSize {
- if addrSizeIndex >= 0 {
- inst.Prefix[addrSizeIndex] |= x86_PrefixImplicit
- }
- }
-
- // Similarly, if there's some memory operand, the segment
- // will be shown there and doesn't need to be shown as an
- // explicit prefix.
- if haveMem {
- if segIndex >= 0 {
- inst.Prefix[segIndex] |= x86_PrefixImplicit
- }
- }
-
- // Branch predict prefixes are overloaded segment prefixes,
- // since segment prefixes don't make sense on conditional jumps.
- // Rewrite final instance to prediction prefix.
- // The set of instructions to which the prefixes apply (other then the
- // Jcc conditional jumps) is not 100% clear from the manuals, but
- // the disassemblers seem to agree about the LOOP and JCXZ instructions,
- // so we'll follow along.
- // TODO(rsc): Perhaps this instruction class should be derived from the CSV.
- if x86_isCondJmp[inst.Op] || x86_isLoop[inst.Op] || inst.Op == x86_JCXZ || inst.Op == x86_JECXZ || inst.Op == x86_JRCXZ {
- PredictLoop:
- for i := nprefix - 1; i >= 0; i-- {
- p := inst.Prefix[i]
- switch p & 0xFF {
- case x86_PrefixCS:
- inst.Prefix[i] = x86_PrefixPN
- break PredictLoop
- case x86_PrefixDS:
- inst.Prefix[i] = x86_PrefixPT
- break PredictLoop
- }
- }
- }
-
- // The BND prefix is part of the Intel Memory Protection Extensions (MPX).
- // A REPN applied to certain control transfers is a BND prefix to bound
- // the range of possible destinations. There's surprisingly little documentation
- // about this, so we just do what libopcodes and xed agree on.
- // In particular, it's unclear why a REPN applied to LOOP or JCXZ instructions
- // does not turn into a BND.
- // TODO(rsc): Perhaps this instruction class should be derived from the CSV.
- if x86_isCondJmp[inst.Op] || inst.Op == x86_JMP || inst.Op == x86_CALL || inst.Op == x86_RET {
- for i := nprefix - 1; i >= 0; i-- {
- p := inst.Prefix[i]
- if p&^x86_PrefixIgnored == x86_PrefixREPN {
- inst.Prefix[i] = x86_PrefixBND
- break
- }
- }
- }
-
- // The LOCK prefix only applies to certain instructions, and then only
- // to instances of the instruction with a memory destination.
- // Other uses of LOCK are invalid and cause a processor exception,
- // in contrast to the "just ignore it" spirit applied to all other prefixes.
- // Mark invalid lock prefixes.
- hasLock := false
- if lockIndex >= 0 && inst.Prefix[lockIndex]&x86_PrefixImplicit == 0 {
- switch inst.Op {
- // TODO(rsc): Perhaps this instruction class should be derived from the CSV.
- case x86_ADD, x86_ADC, x86_AND, x86_BTC, x86_BTR, x86_BTS, x86_CMPXCHG, x86_CMPXCHG8B, x86_CMPXCHG16B, x86_DEC, x86_INC, x86_NEG, x86_NOT, x86_OR, x86_SBB, x86_SUB, x86_XOR, x86_XADD, x86_XCHG:
- if x86_isMem(inst.Args[0]) {
- hasLock = true
- break
- }
- fallthrough
- default:
- inst.Prefix[lockIndex] |= x86_PrefixInvalid
- }
- }
-
- // In certain cases, all of which require a memory destination,
- // the REPN and REP prefixes are interpreted as XACQUIRE and XRELEASE
- // from the Intel Transactional Synchroniation Extensions (TSX).
- //
- // The specific rules are:
- // (1) Any instruction with a valid LOCK prefix can have XACQUIRE or XRELEASE.
- // (2) Any XCHG, which always has an implicit LOCK, can have XACQUIRE or XRELEASE.
- // (3) Any 0x88-, 0x89-, 0xC6-, or 0xC7-opcode MOV can have XRELEASE.
- if x86_isMem(inst.Args[0]) {
- if inst.Op == x86_XCHG {
- hasLock = true
- }
-
- for i := len(inst.Prefix) - 1; i >= 0; i-- {
- p := inst.Prefix[i] &^ x86_PrefixIgnored
- switch p {
- case x86_PrefixREPN:
- if hasLock {
- inst.Prefix[i] = inst.Prefix[i]&x86_PrefixIgnored | x86_PrefixXACQUIRE
- }
-
- case x86_PrefixREP:
- if hasLock {
- inst.Prefix[i] = inst.Prefix[i]&x86_PrefixIgnored | x86_PrefixXRELEASE
- }
-
- if inst.Op == x86_MOV {
- op := (inst.Opcode >> 24) &^ 1
- if op == 0x88 || op == 0xC6 {
- inst.Prefix[i] = inst.Prefix[i]&x86_PrefixIgnored | x86_PrefixXRELEASE
- }
- }
- }
- }
- }
-
- // If REP is used on a non-REP-able instruction, mark the prefix as ignored.
- if repIndex >= 0 {
- switch inst.Prefix[repIndex] {
- case x86_PrefixREP, x86_PrefixREPN:
- switch inst.Op {
- // According to the manuals, the REP/REPE prefix applies to all of these,
- // while the REPN applies only to some of them. However, both libopcodes
- // and xed show both prefixes explicitly for all instructions, so we do the same.
- // TODO(rsc): Perhaps this instruction class should be derived from the CSV.
- case x86_INSB, x86_INSW, x86_INSD,
- x86_MOVSB, x86_MOVSW, x86_MOVSD, x86_MOVSQ,
- x86_OUTSB, x86_OUTSW, x86_OUTSD,
- x86_LODSB, x86_LODSW, x86_LODSD, x86_LODSQ,
- x86_CMPSB, x86_CMPSW, x86_CMPSD, x86_CMPSQ,
- x86_SCASB, x86_SCASW, x86_SCASD, x86_SCASQ,
- x86_STOSB, x86_STOSW, x86_STOSD, x86_STOSQ:
- // ok
- default:
- inst.Prefix[repIndex] |= x86_PrefixIgnored
- }
- }
- }
-
- // If REX was present, mark implicit if all the 1 bits were consumed.
- if rexIndex >= 0 {
- if rexUsed != 0 {
- rexUsed |= x86_PrefixREX
- }
- if rex&^rexUsed == 0 {
- inst.Prefix[rexIndex] |= x86_PrefixImplicit
- }
- }
-
- inst.DataSize = dataMode
- inst.AddrSize = addrMode
- inst.Mode = mode
- inst.Len = pos
- return inst, nil
-}
-
-var x86_errInternal = errors.New("internal error")
-
-// addr16 records the eight 16-bit addressing modes.
-var x86_addr16 = [8]x86_Mem{
- {Base: x86_BX, Scale: 1, Index: x86_SI},
- {Base: x86_BX, Scale: 1, Index: x86_DI},
- {Base: x86_BP, Scale: 1, Index: x86_SI},
- {Base: x86_BP, Scale: 1, Index: x86_DI},
- {Base: x86_SI},
- {Base: x86_DI},
- {Base: x86_BP},
- {Base: x86_BX},
-}
-
-// baseReg returns the base register for a given register size in bits.
-func x86_baseRegForBits(bits int) x86_Reg {
- switch bits {
- case 8:
- return x86_AL
- case 16:
- return x86_AX
- case 32:
- return x86_EAX
- case 64:
- return x86_RAX
- }
- return 0
-}
-
-// baseReg records the base register for argument types that specify
-// a range of registers indexed by op, regop, or rm.
-var x86_baseReg = [...]x86_Reg{
- x86_xArgDR0dashDR7: x86_DR0,
- x86_xArgMm1: x86_M0,
- x86_xArgMm2: x86_M0,
- x86_xArgMm2M64: x86_M0,
- x86_xArgMm: x86_M0,
- x86_xArgMmM32: x86_M0,
- x86_xArgMmM64: x86_M0,
- x86_xArgR16: x86_AX,
- x86_xArgR16op: x86_AX,
- x86_xArgR32: x86_EAX,
- x86_xArgR32M16: x86_EAX,
- x86_xArgR32M8: x86_EAX,
- x86_xArgR32op: x86_EAX,
- x86_xArgR64: x86_RAX,
- x86_xArgR64M16: x86_RAX,
- x86_xArgR64op: x86_RAX,
- x86_xArgR8: x86_AL,
- x86_xArgR8op: x86_AL,
- x86_xArgRM16: x86_AX,
- x86_xArgRM32: x86_EAX,
- x86_xArgRM64: x86_RAX,
- x86_xArgRM8: x86_AL,
- x86_xArgRmf16: x86_AX,
- x86_xArgRmf32: x86_EAX,
- x86_xArgRmf64: x86_RAX,
- x86_xArgSTi: x86_F0,
- x86_xArgTR0dashTR7: x86_TR0,
- x86_xArgXmm1: x86_X0,
- x86_xArgXmm2: x86_X0,
- x86_xArgXmm2M128: x86_X0,
- x86_xArgXmm2M16: x86_X0,
- x86_xArgXmm2M32: x86_X0,
- x86_xArgXmm2M64: x86_X0,
- x86_xArgXmm: x86_X0,
- x86_xArgXmmM128: x86_X0,
- x86_xArgXmmM32: x86_X0,
- x86_xArgXmmM64: x86_X0,
-}
-
-// prefixToSegment returns the segment register
-// corresponding to a particular segment prefix.
-func x86_prefixToSegment(p x86_Prefix) x86_Reg {
- switch p &^ x86_PrefixImplicit {
- case x86_PrefixCS:
- return x86_CS
- case x86_PrefixDS:
- return x86_DS
- case x86_PrefixES:
- return x86_ES
- case x86_PrefixFS:
- return x86_FS
- case x86_PrefixGS:
- return x86_GS
- case x86_PrefixSS:
- return x86_SS
- }
- return 0
-}
-
-// fixedArg records the fixed arguments corresponding to the given bytecodes.
-var x86_fixedArg = [...]x86_Arg{
- x86_xArg1: x86_Imm(1),
- x86_xArg3: x86_Imm(3),
- x86_xArgAL: x86_AL,
- x86_xArgAX: x86_AX,
- x86_xArgDX: x86_DX,
- x86_xArgEAX: x86_EAX,
- x86_xArgEDX: x86_EDX,
- x86_xArgRAX: x86_RAX,
- x86_xArgRDX: x86_RDX,
- x86_xArgCL: x86_CL,
- x86_xArgCS: x86_CS,
- x86_xArgDS: x86_DS,
- x86_xArgES: x86_ES,
- x86_xArgFS: x86_FS,
- x86_xArgGS: x86_GS,
- x86_xArgSS: x86_SS,
- x86_xArgST: x86_F0,
- x86_xArgXMM0: x86_X0,
-}
-
-// memBytes records the size of the memory pointed at
-// by a memory argument of the given form.
-var x86_memBytes = [...]int8{
- x86_xArgM128: 128 / 8,
- x86_xArgM16: 16 / 8,
- x86_xArgM16and16: (16 + 16) / 8,
- x86_xArgM16colon16: (16 + 16) / 8,
- x86_xArgM16colon32: (16 + 32) / 8,
- x86_xArgM16int: 16 / 8,
- x86_xArgM2byte: 2,
- x86_xArgM32: 32 / 8,
- x86_xArgM32and32: (32 + 32) / 8,
- x86_xArgM32fp: 32 / 8,
- x86_xArgM32int: 32 / 8,
- x86_xArgM64: 64 / 8,
- x86_xArgM64fp: 64 / 8,
- x86_xArgM64int: 64 / 8,
- x86_xArgMm2M64: 64 / 8,
- x86_xArgMmM32: 32 / 8,
- x86_xArgMmM64: 64 / 8,
- x86_xArgMoffs16: 16 / 8,
- x86_xArgMoffs32: 32 / 8,
- x86_xArgMoffs64: 64 / 8,
- x86_xArgMoffs8: 8 / 8,
- x86_xArgR32M16: 16 / 8,
- x86_xArgR32M8: 8 / 8,
- x86_xArgR64M16: 16 / 8,
- x86_xArgRM16: 16 / 8,
- x86_xArgRM32: 32 / 8,
- x86_xArgRM64: 64 / 8,
- x86_xArgRM8: 8 / 8,
- x86_xArgXmm2M128: 128 / 8,
- x86_xArgXmm2M16: 16 / 8,
- x86_xArgXmm2M32: 32 / 8,
- x86_xArgXmm2M64: 64 / 8,
- x86_xArgXmm: 128 / 8,
- x86_xArgXmmM128: 128 / 8,
- x86_xArgXmmM32: 32 / 8,
- x86_xArgXmmM64: 64 / 8,
-}
-
-// isCondJmp records the conditional jumps.
-var x86_isCondJmp = [x86_maxOp + 1]bool{
- x86_JA: true,
- x86_JAE: true,
- x86_JB: true,
- x86_JBE: true,
- x86_JE: true,
- x86_JG: true,
- x86_JGE: true,
- x86_JL: true,
- x86_JLE: true,
- x86_JNE: true,
- x86_JNO: true,
- x86_JNP: true,
- x86_JNS: true,
- x86_JO: true,
- x86_JP: true,
- x86_JS: true,
-}
-
-// isLoop records the loop operators.
-var x86_isLoop = [x86_maxOp + 1]bool{
- x86_LOOP: true,
- x86_LOOPE: true,
- x86_LOOPNE: true,
- x86_JECXZ: true,
- x86_JRCXZ: true,
-}
-
-/* gnu.go */
-
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.
-// This general form is often called ``AT&T syntax'' as a reference to AT&T System V Unix.
-func x86_GNUSyntax(inst x86_Inst) string {
- // Rewrite instruction to mimic GNU peculiarities.
- // Note that inst has been passed by value and contains
- // no pointers, so any changes we make here are local
- // and will not propagate back out to the caller.
-
- // Adjust opcode [sic].
- switch inst.Op {
- case x86_FDIV, x86_FDIVR, x86_FSUB, x86_FSUBR, x86_FDIVP, x86_FDIVRP, x86_FSUBP, x86_FSUBRP:
- // DC E0, DC F0: libopcodes swaps FSUBR/FSUB and FDIVR/FDIV, at least
- // if you believe the Intel manual is correct (the encoding is irregular as given;
- // libopcodes uses the more regular expected encoding).
- // TODO(rsc): Test to ensure Intel manuals are correct and report to libopcodes maintainers?
- // NOTE: iant thinks this is deliberate, but we can't find the history.
- _, reg1 := inst.Args[0].(x86_Reg)
- _, reg2 := inst.Args[1].(x86_Reg)
- if reg1 && reg2 && (inst.Opcode>>24 == 0xDC || inst.Opcode>>24 == 0xDE) {
- switch inst.Op {
- case x86_FDIV:
- inst.Op = x86_FDIVR
- case x86_FDIVR:
- inst.Op = x86_FDIV
- case x86_FSUB:
- inst.Op = x86_FSUBR
- case x86_FSUBR:
- inst.Op = x86_FSUB
- case x86_FDIVP:
- inst.Op = x86_FDIVRP
- case x86_FDIVRP:
- inst.Op = x86_FDIVP
- case x86_FSUBP:
- inst.Op = x86_FSUBRP
- case x86_FSUBRP:
- inst.Op = x86_FSUBP
- }
- }
-
- case x86_MOVNTSD:
- // MOVNTSD is F2 0F 2B /r.
- // MOVNTSS is F3 0F 2B /r (supposedly; not in manuals).
- // Usually inner prefixes win for display,
- // so that F3 F2 0F 2B 11 is REP MOVNTSD
- // and F2 F3 0F 2B 11 is REPN MOVNTSS.
- // Libopcodes always prefers MOVNTSS regardless of prefix order.
- if x86_countPrefix(&inst, 0xF3) > 0 {
- found := false
- for i := len(inst.Prefix) - 1; i >= 0; i-- {
- switch inst.Prefix[i] & 0xFF {
- case 0xF3:
- if !found {
- found = true
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- case 0xF2:
- inst.Prefix[i] &^= x86_PrefixImplicit
- }
- }
- inst.Op = x86_MOVNTSS
- }
- }
-
- // Add implicit arguments.
- switch inst.Op {
- case x86_MONITOR:
- inst.Args[0] = x86_EDX
- inst.Args[1] = x86_ECX
- inst.Args[2] = x86_EAX
- if inst.AddrSize == 16 {
- inst.Args[2] = x86_AX
- }
-
- case x86_MWAIT:
- if inst.Mode == 64 {
- inst.Args[0] = x86_RCX
- inst.Args[1] = x86_RAX
- } else {
- inst.Args[0] = x86_ECX
- inst.Args[1] = x86_EAX
- }
- }
-
- // Adjust which prefixes will be displayed.
- // The rule is to display all the prefixes not implied by
- // the usual instruction display, that is, all the prefixes
- // except the ones with PrefixImplicit set.
- // However, of course, there are exceptions to the rule.
- switch inst.Op {
- case x86_CRC32:
- // CRC32 has a mandatory F2 prefix.
- // If there are multiple F2s and no F3s, the extra F2s do not print.
- // (And Decode has already marked them implicit.)
- // However, if there is an F3 anywhere, then the extra F2s do print.
- // If there are multiple F2 prefixes *and* an (ignored) F3,
- // then libopcodes prints the extra F2s as REPNs.
- if x86_countPrefix(&inst, 0xF2) > 1 {
- x86_unmarkImplicit(&inst, 0xF2)
- x86_markLastImplicit(&inst, 0xF2)
- }
-
- // An unused data size override should probably be shown,
- // to distinguish DATA16 CRC32B from plain CRC32B,
- // but libopcodes always treats the final override as implicit
- // and the others as explicit.
- x86_unmarkImplicit(&inst, x86_PrefixDataSize)
- x86_markLastImplicit(&inst, x86_PrefixDataSize)
-
- case x86_CVTSI2SD, x86_CVTSI2SS:
- if !x86_isMem(inst.Args[1]) {
- x86_markLastImplicit(&inst, x86_PrefixDataSize)
- }
-
- case x86_CVTSD2SI, x86_CVTSS2SI, x86_CVTTSD2SI, x86_CVTTSS2SI,
- x86_ENTER, x86_FLDENV, x86_FNSAVE, x86_FNSTENV, x86_FRSTOR, x86_LGDT, x86_LIDT, x86_LRET,
- x86_POP, x86_PUSH, x86_RET, x86_SGDT, x86_SIDT, x86_SYSRET, x86_XBEGIN:
- x86_markLastImplicit(&inst, x86_PrefixDataSize)
-
- case x86_LOOP, x86_LOOPE, x86_LOOPNE, x86_MONITOR:
- x86_markLastImplicit(&inst, x86_PrefixAddrSize)
-
- case x86_MOV:
- // The 16-bit and 32-bit forms of MOV Sreg, dst and MOV src, Sreg
- // cannot be distinguished when src or dst refers to memory, because
- // Sreg is always a 16-bit value, even when we're doing a 32-bit
- // instruction. Because the instruction tables distinguished these two,
- // any operand size prefix has been marked as used (to decide which
- // branch to take). Unmark it, so that it will show up in disassembly,
- // so that the reader can tell the size of memory operand.
- // up with the same arguments
- dst, _ := inst.Args[0].(x86_Reg)
- src, _ := inst.Args[1].(x86_Reg)
- if x86_ES <= src && src <= x86_GS && x86_isMem(inst.Args[0]) || x86_ES <= dst && dst <= x86_GS && x86_isMem(inst.Args[1]) {
- x86_unmarkImplicit(&inst, x86_PrefixDataSize)
- }
-
- case x86_MOVDQU:
- if x86_countPrefix(&inst, 0xF3) > 1 {
- x86_unmarkImplicit(&inst, 0xF3)
- x86_markLastImplicit(&inst, 0xF3)
- }
-
- case x86_MOVQ2DQ:
- x86_markLastImplicit(&inst, x86_PrefixDataSize)
-
- case x86_SLDT, x86_SMSW, x86_STR, x86_FXRSTOR, x86_XRSTOR, x86_XSAVE, x86_XSAVEOPT, x86_CMPXCHG8B:
- if x86_isMem(inst.Args[0]) {
- x86_unmarkImplicit(&inst, x86_PrefixDataSize)
- }
-
- case x86_SYSEXIT:
- x86_unmarkImplicit(&inst, x86_PrefixDataSize)
- }
-
- if x86_isCondJmp[inst.Op] || x86_isLoop[inst.Op] || inst.Op == x86_JCXZ || inst.Op == x86_JECXZ || inst.Op == x86_JRCXZ {
- if x86_countPrefix(&inst, x86_PrefixCS) > 0 && x86_countPrefix(&inst, x86_PrefixDS) > 0 {
- for i, p := range inst.Prefix {
- switch p & 0xFFF {
- case x86_PrefixPN, x86_PrefixPT:
- inst.Prefix[i] &= 0xF0FF // cut interpretation bits, producing original segment prefix
- }
- }
- }
- }
-
- // XACQUIRE/XRELEASE adjustment.
- if inst.Op == x86_MOV {
- // MOV into memory is a candidate for turning REP into XRELEASE.
- // However, if the REP is followed by a REPN, that REPN blocks the
- // conversion.
- haveREPN := false
- for i := len(inst.Prefix) - 1; i >= 0; i-- {
- switch inst.Prefix[i] &^ x86_PrefixIgnored {
- case x86_PrefixREPN:
- haveREPN = true
- case x86_PrefixXRELEASE:
- if haveREPN {
- inst.Prefix[i] = x86_PrefixREP
- }
- }
- }
- }
-
- // We only format the final F2/F3 as XRELEASE/XACQUIRE.
- haveXA := false
- haveXR := false
- for i := len(inst.Prefix) - 1; i >= 0; i-- {
- switch inst.Prefix[i] &^ x86_PrefixIgnored {
- case x86_PrefixXRELEASE:
- if !haveXR {
- haveXR = true
- } else {
- inst.Prefix[i] = x86_PrefixREP
- }
-
- case x86_PrefixXACQUIRE:
- if !haveXA {
- haveXA = true
- } else {
- inst.Prefix[i] = x86_PrefixREPN
- }
- }
- }
-
- // Determine opcode.
- op := strings.ToLower(inst.Op.String())
- if alt := x86_gnuOp[inst.Op]; alt != "" {
- op = alt
- }
-
- // Determine opcode suffix.
- // Libopcodes omits the suffix if the width of the operation
- // can be inferred from a register arguments. For example,
- // add $1, %ebx has no suffix because you can tell from the
- // 32-bit register destination that it is a 32-bit add,
- // but in addl $1, (%ebx), the destination is memory, so the
- // size is not evident without the l suffix.
- needSuffix := true
-SuffixLoop:
- for i, a := range inst.Args {
- if a == nil {
- break
- }
- switch a := a.(type) {
- case x86_Reg:
- switch inst.Op {
- case x86_MOVSX, x86_MOVZX:
- continue
-
- case x86_SHL, x86_SHR, x86_RCL, x86_RCR, x86_ROL, x86_ROR, x86_SAR:
- if i == 1 {
- // shift count does not tell us operand size
- continue
- }
-
- case x86_CRC32:
- // The source argument does tell us operand size,
- // but libopcodes still always puts a suffix on crc32.
- continue
-
- case x86_PUSH, x86_POP:
- // Even though segment registers are 16-bit, push and pop
- // can save/restore them from 32-bit slots, so they
- // do not imply operand size.
- if x86_ES <= a && a <= x86_GS {
- continue
- }
-
- case x86_CVTSI2SD, x86_CVTSI2SS:
- // The integer register argument takes priority.
- if x86_X0 <= a && a <= x86_X15 {
- continue
- }
- }
-
- if x86_AL <= a && a <= x86_R15 || x86_ES <= a && a <= x86_GS || x86_X0 <= a && a <= x86_X15 || x86_M0 <= a && a <= x86_M7 {
- needSuffix = false
- break SuffixLoop
- }
- }
- }
-
- if needSuffix {
- switch inst.Op {
- case x86_CMPXCHG8B, x86_FLDCW, x86_FNSTCW, x86_FNSTSW, x86_LDMXCSR, x86_LLDT, x86_LMSW, x86_LTR, x86_PCLMULQDQ,
- x86_SETA, x86_SETAE, x86_SETB, x86_SETBE, x86_SETE, x86_SETG, x86_SETGE, x86_SETL, x86_SETLE, x86_SETNE, x86_SETNO, x86_SETNP, x86_SETNS, x86_SETO, x86_SETP, x86_SETS,
- x86_SLDT, x86_SMSW, x86_STMXCSR, x86_STR, x86_VERR, x86_VERW:
- // For various reasons, libopcodes emits no suffix for these instructions.
-
- case x86_CRC32:
- op += x86_byteSizeSuffix(x86_argBytes(&inst, inst.Args[1]))
-
- case x86_LGDT, x86_LIDT, x86_SGDT, x86_SIDT:
- op += x86_byteSizeSuffix(inst.DataSize / 8)
-
- case x86_MOVZX, x86_MOVSX:
- // Integer size conversions get two suffixes.
- op = op[:4] + x86_byteSizeSuffix(x86_argBytes(&inst, inst.Args[1])) + x86_byteSizeSuffix(x86_argBytes(&inst, inst.Args[0]))
-
- case x86_LOOP, x86_LOOPE, x86_LOOPNE:
- // Add w suffix to indicate use of CX register instead of ECX.
- if inst.AddrSize == 16 {
- op += "w"
- }
-
- case x86_CALL, x86_ENTER, x86_JMP, x86_LCALL, x86_LEAVE, x86_LJMP, x86_LRET, x86_RET, x86_SYSRET, x86_XBEGIN:
- // Add w suffix to indicate use of 16-bit target.
- // Exclude JMP rel8.
- if inst.Opcode>>24 == 0xEB {
- break
- }
- if inst.DataSize == 16 && inst.Mode != 16 {
- x86_markLastImplicit(&inst, x86_PrefixDataSize)
- op += "w"
- } else if inst.Mode == 64 {
- op += "q"
- }
-
- case x86_FRSTOR, x86_FNSAVE, x86_FNSTENV, x86_FLDENV:
- // Add s suffix to indicate shortened FPU state (I guess).
- if inst.DataSize == 16 {
- op += "s"
- }
-
- case x86_PUSH, x86_POP:
- if x86_markLastImplicit(&inst, x86_PrefixDataSize) {
- op += x86_byteSizeSuffix(inst.DataSize / 8)
- } else if inst.Mode == 64 {
- op += "q"
- } else {
- op += x86_byteSizeSuffix(inst.MemBytes)
- }
-
- default:
- if x86_isFloat(inst.Op) {
- // I can't explain any of this, but it's what libopcodes does.
- switch inst.MemBytes {
- default:
- if (inst.Op == x86_FLD || inst.Op == x86_FSTP) && x86_isMem(inst.Args[0]) {
- op += "t"
- }
- case 4:
- if x86_isFloatInt(inst.Op) {
- op += "l"
- } else {
- op += "s"
- }
- case 8:
- if x86_isFloatInt(inst.Op) {
- op += "ll"
- } else {
- op += "l"
- }
- }
- break
- }
-
- op += x86_byteSizeSuffix(inst.MemBytes)
- }
- }
-
- // Adjust special case opcodes.
- switch inst.Op {
- case 0:
- if inst.Prefix[0] != 0 {
- return strings.ToLower(inst.Prefix[0].String())
- }
-
- case x86_INT:
- if inst.Opcode>>24 == 0xCC {
- inst.Args[0] = nil
- op = "int3"
- }
-
- case x86_CMPPS, x86_CMPPD, x86_CMPSD_XMM, x86_CMPSS:
- imm, ok := inst.Args[2].(x86_Imm)
- if ok && 0 <= imm && imm < 8 {
- inst.Args[2] = nil
- op = x86_cmppsOps[imm] + op[3:]
- }
-
- case x86_PCLMULQDQ:
- imm, ok := inst.Args[2].(x86_Imm)
- if ok && imm&^0x11 == 0 {
- inst.Args[2] = nil
- op = x86_pclmulqOps[(imm&0x10)>>3|(imm&1)]
- }
-
- case x86_XLATB:
- if x86_markLastImplicit(&inst, x86_PrefixAddrSize) {
- op = "xlat" // not xlatb
- }
- }
-
- // Build list of argument strings.
- var (
- usedPrefixes bool // segment prefixes consumed by Mem formatting
- args []string // formatted arguments
- )
- for i, a := range inst.Args {
- if a == nil {
- break
- }
- switch inst.Op {
- case x86_MOVSB, x86_MOVSW, x86_MOVSD, x86_MOVSQ, x86_OUTSB, x86_OUTSW, x86_OUTSD:
- if i == 0 {
- usedPrefixes = true // disable use of prefixes for first argument
- } else {
- usedPrefixes = false
- }
- }
- if a == x86_Imm(1) && (inst.Opcode>>24)&^1 == 0xD0 {
- continue
- }
- args = append(args, x86_gnuArg(&inst, a, &usedPrefixes))
- }
-
- // The default is to print the arguments in reverse Intel order.
- // A few instructions inhibit this behavior.
- switch inst.Op {
- case x86_BOUND, x86_LCALL, x86_ENTER, x86_LJMP:
- // no reverse
- default:
- // reverse args
- for i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {
- args[i], args[j] = args[j], args[i]
- }
- }
-
- // Build prefix string.
- // Must be after argument formatting, which can turn off segment prefixes.
- var (
- prefix = "" // output string
- numAddr = 0
- numData = 0
- implicitData = false
- )
- for _, p := range inst.Prefix {
- if p&0xFF == x86_PrefixDataSize && p&x86_PrefixImplicit != 0 {
- implicitData = true
- }
- }
- for _, p := range inst.Prefix {
- if p == 0 {
- break
- }
- if p&x86_PrefixImplicit != 0 {
- continue
- }
- switch p &^ (x86_PrefixIgnored | x86_PrefixInvalid) {
- default:
- if p.IsREX() {
- if p&0xFF == x86_PrefixREX {
- prefix += "rex "
- } else {
- prefix += "rex." + p.String()[4:] + " "
- }
- break
- }
- prefix += strings.ToLower(p.String()) + " "
-
- case x86_PrefixPN:
- op += ",pn"
- continue
-
- case x86_PrefixPT:
- op += ",pt"
- continue
-
- case x86_PrefixAddrSize, x86_PrefixAddr16, x86_PrefixAddr32:
- // For unknown reasons, if the addr16 prefix is repeated,
- // libopcodes displays all but the last as addr32, even though
- // the addressing form used in a memory reference is clearly
- // still 16-bit.
- n := 32
- if inst.Mode == 32 {
- n = 16
- }
- numAddr++
- if x86_countPrefix(&inst, x86_PrefixAddrSize) > numAddr {
- n = inst.Mode
- }
- prefix += fmt.Sprintf("addr%d ", n)
- continue
-
- case x86_PrefixData16, x86_PrefixData32:
- if implicitData && x86_countPrefix(&inst, x86_PrefixDataSize) > 1 {
- // Similar to the addr32 logic above, but it only kicks in
- // when something used the data size prefix (one is implicit).
- n := 16
- if inst.Mode == 16 {
- n = 32
- }
- numData++
- if x86_countPrefix(&inst, x86_PrefixDataSize) > numData {
- if inst.Mode == 16 {
- n = 16
- } else {
- n = 32
- }
- }
- prefix += fmt.Sprintf("data%d ", n)
- continue
- }
- prefix += strings.ToLower(p.String()) + " "
- }
- }
-
- // Finally! Put it all together.
- text := prefix + op
- if args != nil {
- text += " "
- // Indirect call/jmp gets a star to distinguish from direct jump address.
- if (inst.Op == x86_CALL || inst.Op == x86_JMP || inst.Op == x86_LJMP || inst.Op == x86_LCALL) && (x86_isMem(inst.Args[0]) || x86_isReg(inst.Args[0])) {
- text += "*"
- }
- text += strings.Join(args, ",")
- }
- return text
-}
-
-// gnuArg returns the GNU syntax for the argument x from the instruction inst.
-// If *usedPrefixes is false and x is a Mem, then the formatting
-// includes any segment prefixes and sets *usedPrefixes to true.
-func x86_gnuArg(inst *x86_Inst, x x86_Arg, usedPrefixes *bool) string {
- if x == nil {
- return "<nil>"
- }
- switch x := x.(type) {
- case x86_Reg:
- switch inst.Op {
- case x86_CVTSI2SS, x86_CVTSI2SD, x86_CVTSS2SI, x86_CVTSD2SI, x86_CVTTSD2SI, x86_CVTTSS2SI:
- if inst.DataSize == 16 && x86_EAX <= x && x <= x86_R15L {
- x -= x86_EAX - x86_AX
- }
-
- case x86_IN, x86_INSB, x86_INSW, x86_INSD, x86_OUT, x86_OUTSB, x86_OUTSW, x86_OUTSD:
- // DX is the port, but libopcodes prints it as if it were a memory reference.
- if x == x86_DX {
- return "(%dx)"
- }
- }
- return x86_gccRegName[x]
- case x86_Mem:
- seg := ""
- var haveCS, haveDS, haveES, haveFS, haveGS, haveSS bool
- switch x.Segment {
- case x86_CS:
- haveCS = true
- case x86_DS:
- haveDS = true
- case x86_ES:
- haveES = true
- case x86_FS:
- haveFS = true
- case x86_GS:
- haveGS = true
- case x86_SS:
- haveSS = true
- }
- switch inst.Op {
- case x86_INSB, x86_INSW, x86_INSD, x86_STOSB, x86_STOSW, x86_STOSD, x86_STOSQ, x86_SCASB, x86_SCASW, x86_SCASD, x86_SCASQ:
- // These do not accept segment prefixes, at least in the GNU rendering.
- default:
- if *usedPrefixes {
- break
- }
- for i := len(inst.Prefix) - 1; i >= 0; i-- {
- p := inst.Prefix[i] &^ x86_PrefixIgnored
- if p == 0 {
- continue
- }
- switch p {
- case x86_PrefixCS:
- if !haveCS {
- haveCS = true
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- case x86_PrefixDS:
- if !haveDS {
- haveDS = true
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- case x86_PrefixES:
- if !haveES {
- haveES = true
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- case x86_PrefixFS:
- if !haveFS {
- haveFS = true
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- case x86_PrefixGS:
- if !haveGS {
- haveGS = true
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- case x86_PrefixSS:
- if !haveSS {
- haveSS = true
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- }
- }
- *usedPrefixes = true
- }
- if haveCS {
- seg += "%cs:"
- }
- if haveDS {
- seg += "%ds:"
- }
- if haveSS {
- seg += "%ss:"
- }
- if haveES {
- seg += "%es:"
- }
- if haveFS {
- seg += "%fs:"
- }
- if haveGS {
- seg += "%gs:"
- }
- disp := ""
- if x.Disp != 0 {
- disp = fmt.Sprintf("%#x", x.Disp)
- }
- if x.Scale == 0 || x.Index == 0 && x.Scale == 1 && (x.Base == x86_ESP || x.Base == x86_RSP || x.Base == 0 && inst.Mode == 64) {
- if x.Base == 0 {
- return seg + disp
- }
- return fmt.Sprintf("%s%s(%s)", seg, disp, x86_gccRegName[x.Base])
- }
- base := x86_gccRegName[x.Base]
- if x.Base == 0 {
- base = ""
- }
- index := x86_gccRegName[x.Index]
- if x.Index == 0 {
- if inst.AddrSize == 64 {
- index = "%riz"
- } else {
- index = "%eiz"
- }
- }
- if x86_AX <= x.Base && x.Base <= x86_DI {
- // 16-bit addressing - no scale
- return fmt.Sprintf("%s%s(%s,%s)", seg, disp, base, index)
- }
- return fmt.Sprintf("%s%s(%s,%s,%d)", seg, disp, base, index, x.Scale)
- case x86_Rel:
- return fmt.Sprintf(".%+#x", int32(x))
- case x86_Imm:
- if inst.Mode == 32 {
- return fmt.Sprintf("$%#x", uint32(x))
- }
- return fmt.Sprintf("$%#x", int64(x))
- }
- return x.String()
-}
-
-var x86_gccRegName = [...]string{
- 0: "REG0",
- x86_AL: "%al",
- x86_CL: "%cl",
- x86_BL: "%bl",
- x86_DL: "%dl",
- x86_AH: "%ah",
- x86_CH: "%ch",
- x86_BH: "%bh",
- x86_DH: "%dh",
- x86_SPB: "%spl",
- x86_BPB: "%bpl",
- x86_SIB: "%sil",
- x86_DIB: "%dil",
- x86_R8B: "%r8b",
- x86_R9B: "%r9b",
- x86_R10B: "%r10b",
- x86_R11B: "%r11b",
- x86_R12B: "%r12b",
- x86_R13B: "%r13b",
- x86_R14B: "%r14b",
- x86_R15B: "%r15b",
- x86_AX: "%ax",
- x86_CX: "%cx",
- x86_BX: "%bx",
- x86_DX: "%dx",
- x86_SP: "%sp",
- x86_BP: "%bp",
- x86_SI: "%si",
- x86_DI: "%di",
- x86_R8W: "%r8w",
- x86_R9W: "%r9w",
- x86_R10W: "%r10w",
- x86_R11W: "%r11w",
- x86_R12W: "%r12w",
- x86_R13W: "%r13w",
- x86_R14W: "%r14w",
- x86_R15W: "%r15w",
- x86_EAX: "%eax",
- x86_ECX: "%ecx",
- x86_EDX: "%edx",
- x86_EBX: "%ebx",
- x86_ESP: "%esp",
- x86_EBP: "%ebp",
- x86_ESI: "%esi",
- x86_EDI: "%edi",
- x86_R8L: "%r8d",
- x86_R9L: "%r9d",
- x86_R10L: "%r10d",
- x86_R11L: "%r11d",
- x86_R12L: "%r12d",
- x86_R13L: "%r13d",
- x86_R14L: "%r14d",
- x86_R15L: "%r15d",
- x86_RAX: "%rax",
- x86_RCX: "%rcx",
- x86_RDX: "%rdx",
- x86_RBX: "%rbx",
- x86_RSP: "%rsp",
- x86_RBP: "%rbp",
- x86_RSI: "%rsi",
- x86_RDI: "%rdi",
- x86_R8: "%r8",
- x86_R9: "%r9",
- x86_R10: "%r10",
- x86_R11: "%r11",
- x86_R12: "%r12",
- x86_R13: "%r13",
- x86_R14: "%r14",
- x86_R15: "%r15",
- x86_IP: "%ip",
- x86_EIP: "%eip",
- x86_RIP: "%rip",
- x86_F0: "%st",
- x86_F1: "%st(1)",
- x86_F2: "%st(2)",
- x86_F3: "%st(3)",
- x86_F4: "%st(4)",
- x86_F5: "%st(5)",
- x86_F6: "%st(6)",
- x86_F7: "%st(7)",
- x86_M0: "%mm0",
- x86_M1: "%mm1",
- x86_M2: "%mm2",
- x86_M3: "%mm3",
- x86_M4: "%mm4",
- x86_M5: "%mm5",
- x86_M6: "%mm6",
- x86_M7: "%mm7",
- x86_X0: "%xmm0",
- x86_X1: "%xmm1",
- x86_X2: "%xmm2",
- x86_X3: "%xmm3",
- x86_X4: "%xmm4",
- x86_X5: "%xmm5",
- x86_X6: "%xmm6",
- x86_X7: "%xmm7",
- x86_X8: "%xmm8",
- x86_X9: "%xmm9",
- x86_X10: "%xmm10",
- x86_X11: "%xmm11",
- x86_X12: "%xmm12",
- x86_X13: "%xmm13",
- x86_X14: "%xmm14",
- x86_X15: "%xmm15",
- x86_CS: "%cs",
- x86_SS: "%ss",
- x86_DS: "%ds",
- x86_ES: "%es",
- x86_FS: "%fs",
- x86_GS: "%gs",
- x86_GDTR: "%gdtr",
- x86_IDTR: "%idtr",
- x86_LDTR: "%ldtr",
- x86_MSW: "%msw",
- x86_TASK: "%task",
- x86_CR0: "%cr0",
- x86_CR1: "%cr1",
- x86_CR2: "%cr2",
- x86_CR3: "%cr3",
- x86_CR4: "%cr4",
- x86_CR5: "%cr5",
- x86_CR6: "%cr6",
- x86_CR7: "%cr7",
- x86_CR8: "%cr8",
- x86_CR9: "%cr9",
- x86_CR10: "%cr10",
- x86_CR11: "%cr11",
- x86_CR12: "%cr12",
- x86_CR13: "%cr13",
- x86_CR14: "%cr14",
- x86_CR15: "%cr15",
- x86_DR0: "%db0",
- x86_DR1: "%db1",
- x86_DR2: "%db2",
- x86_DR3: "%db3",
- x86_DR4: "%db4",
- x86_DR5: "%db5",
- x86_DR6: "%db6",
- x86_DR7: "%db7",
- x86_TR0: "%tr0",
- x86_TR1: "%tr1",
- x86_TR2: "%tr2",
- x86_TR3: "%tr3",
- x86_TR4: "%tr4",
- x86_TR5: "%tr5",
- x86_TR6: "%tr6",
- x86_TR7: "%tr7",
-}
-
-var x86_gnuOp = map[x86_Op]string{
- x86_CBW: "cbtw",
- x86_CDQ: "cltd",
- x86_CMPSD: "cmpsl",
- x86_CMPSD_XMM: "cmpsd",
- x86_CWD: "cwtd",
- x86_CWDE: "cwtl",
- x86_CQO: "cqto",
- x86_INSD: "insl",
- x86_IRET: "iretw",
- x86_IRETD: "iret",
- x86_IRETQ: "iretq",
- x86_LODSB: "lods",
- x86_LODSD: "lods",
- x86_LODSQ: "lods",
- x86_LODSW: "lods",
- x86_MOVSD: "movsl",
- x86_MOVSD_XMM: "movsd",
- x86_OUTSD: "outsl",
- x86_POPA: "popaw",
- x86_POPAD: "popa",
- x86_POPF: "popfw",
- x86_POPFD: "popf",
- x86_PUSHA: "pushaw",
- x86_PUSHAD: "pusha",
- x86_PUSHF: "pushfw",
- x86_PUSHFD: "pushf",
- x86_SCASB: "scas",
- x86_SCASD: "scas",
- x86_SCASQ: "scas",
- x86_SCASW: "scas",
- x86_STOSB: "stos",
- x86_STOSD: "stos",
- x86_STOSQ: "stos",
- x86_STOSW: "stos",
- x86_XLATB: "xlat",
-}
-
-var x86_cmppsOps = []string{
- "cmpeq",
- "cmplt",
- "cmple",
- "cmpunord",
- "cmpneq",
- "cmpnlt",
- "cmpnle",
- "cmpord",
-}
-
-var x86_pclmulqOps = []string{
- "pclmullqlqdq",
- "pclmulhqlqdq",
- "pclmullqhqdq",
- "pclmulhqhqdq",
-}
-
-func x86_countPrefix(inst *x86_Inst, target x86_Prefix) int {
- n := 0
- for _, p := range inst.Prefix {
- if p&0xFF == target&0xFF {
- n++
- }
- }
- return n
-}
-
-func x86_markLastImplicit(inst *x86_Inst, prefix x86_Prefix) bool {
- for i := len(inst.Prefix) - 1; i >= 0; i-- {
- p := inst.Prefix[i]
- if p&0xFF == prefix {
- inst.Prefix[i] |= x86_PrefixImplicit
- return true
- }
- }
- return false
-}
-
-func x86_unmarkImplicit(inst *x86_Inst, prefix x86_Prefix) {
- for i := len(inst.Prefix) - 1; i >= 0; i-- {
- p := inst.Prefix[i]
- if p&0xFF == prefix {
- inst.Prefix[i] &^= x86_PrefixImplicit
- }
- }
-}
-
-func x86_byteSizeSuffix(b int) string {
- switch b {
- case 1:
- return "b"
- case 2:
- return "w"
- case 4:
- return "l"
- case 8:
- return "q"
- }
- return ""
-}
-
-func x86_argBytes(inst *x86_Inst, arg x86_Arg) int {
- if x86_isMem(arg) {
- return inst.MemBytes
- }
- return x86_regBytes(arg)
-}
-
-func x86_isFloat(op x86_Op) bool {
- switch op {
- case x86_FADD, x86_FCOM, x86_FCOMP, x86_FDIV, x86_FDIVR, x86_FIADD, x86_FICOM, x86_FICOMP, x86_FIDIV, x86_FIDIVR, x86_FILD, x86_FIMUL, x86_FIST, x86_FISTP, x86_FISTTP, x86_FISUB, x86_FISUBR, x86_FLD, x86_FMUL, x86_FST, x86_FSTP, x86_FSUB, x86_FSUBR:
- return true
- }
- return false
-}
-
-func x86_isFloatInt(op x86_Op) bool {
- switch op {
- case x86_FIADD, x86_FICOM, x86_FICOMP, x86_FIDIV, x86_FIDIVR, x86_FILD, x86_FIMUL, x86_FIST, x86_FISTP, x86_FISTTP, x86_FISUB, x86_FISUBR:
- return true
- }
- return false
-}
-
-/* inst.go */
-
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package x86asm implements decoding of x86 machine code.
-
-// An Inst is a single instruction.
-type x86_Inst struct {
- Prefix x86_Prefixes // Prefixes applied to the instruction.
- Op x86_Op // Opcode mnemonic
- Opcode uint32 // Encoded opcode bits, left aligned (first byte is Opcode>>24, etc)
- Args x86_Args // Instruction arguments, in Intel order
- Mode int // processor mode in bits: 16, 32, or 64
- AddrSize int // address size in bits: 16, 32, or 64
- DataSize int // operand size in bits: 16, 32, or 64
- MemBytes int // size of memory argument in bytes: 1, 2, 4, 8, 16, and so on.
- Len int // length of encoded instruction in bytes
-}
-
-// Prefixes is an array of prefixes associated with a single instruction.
-// The prefixes are listed in the same order as found in the instruction:
-// each prefix byte corresponds to one slot in the array. The first zero
-// in the array marks the end of the prefixes.
-type x86_Prefixes [14]x86_Prefix
-
-// A Prefix represents an Intel instruction prefix.
-// The low 8 bits are the actual prefix byte encoding,
-// and the top 8 bits contain distinguishing bits and metadata.
-type x86_Prefix uint16
-
-const (
- // Metadata about the role of a prefix in an instruction.
- x86_PrefixImplicit x86_Prefix = 0x8000 // prefix is implied by instruction text
- x86_PrefixIgnored x86_Prefix = 0x4000 // prefix is ignored: either irrelevant or overridden by a later prefix
- x86_PrefixInvalid x86_Prefix = 0x2000 // prefix makes entire instruction invalid (bad LOCK)
-
- // Memory segment overrides.
- x86_PrefixES x86_Prefix = 0x26 // ES segment override
- x86_PrefixCS x86_Prefix = 0x2E // CS segment override
- x86_PrefixSS x86_Prefix = 0x36 // SS segment override
- x86_PrefixDS x86_Prefix = 0x3E // DS segment override
- x86_PrefixFS x86_Prefix = 0x64 // FS segment override
- x86_PrefixGS x86_Prefix = 0x65 // GS segment override
-
- // Branch prediction.
- x86_PrefixPN x86_Prefix = 0x12E // predict not taken (conditional branch only)
- x86_PrefixPT x86_Prefix = 0x13E // predict taken (conditional branch only)
-
- // Size attributes.
- x86_PrefixDataSize x86_Prefix = 0x66 // operand size override
- x86_PrefixData16 x86_Prefix = 0x166
- x86_PrefixData32 x86_Prefix = 0x266
- x86_PrefixAddrSize x86_Prefix = 0x67 // address size override
- x86_PrefixAddr16 x86_Prefix = 0x167
- x86_PrefixAddr32 x86_Prefix = 0x267
-
- // One of a kind.
- x86_PrefixLOCK x86_Prefix = 0xF0 // lock
- x86_PrefixREPN x86_Prefix = 0xF2 // repeat not zero
- x86_PrefixXACQUIRE x86_Prefix = 0x1F2
- x86_PrefixBND x86_Prefix = 0x2F2
- x86_PrefixREP x86_Prefix = 0xF3 // repeat
- x86_PrefixXRELEASE x86_Prefix = 0x1F3
-
- // The REX prefixes must be in the range [PrefixREX, PrefixREX+0x10).
- // the other bits are set or not according to the intended use.
- x86_PrefixREX x86_Prefix = 0x40 // REX 64-bit extension prefix
- x86_PrefixREXW x86_Prefix = 0x08 // extension bit W (64-bit instruction width)
- x86_PrefixREXR x86_Prefix = 0x04 // extension bit R (r field in modrm)
- x86_PrefixREXX x86_Prefix = 0x02 // extension bit X (index field in sib)
- x86_PrefixREXB x86_Prefix = 0x01 // extension bit B (r/m field in modrm or base field in sib)
-)
-
-// IsREX reports whether p is a REX prefix byte.
-func (p x86_Prefix) IsREX() bool {
- return p&0xF0 == x86_PrefixREX
-}
-
-func (p x86_Prefix) String() string {
- p &^= x86_PrefixImplicit | x86_PrefixIgnored | x86_PrefixInvalid
- if s := x86_prefixNames[p]; s != "" {
- return s
- }
-
- if p.IsREX() {
- s := "REX."
- if p&x86_PrefixREXW != 0 {
- s += "W"
- }
- if p&x86_PrefixREXR != 0 {
- s += "R"
- }
- if p&x86_PrefixREXX != 0 {
- s += "X"
- }
- if p&x86_PrefixREXB != 0 {
- s += "B"
- }
- return s
- }
-
- return fmt.Sprintf("Prefix(%#x)", int(p))
-}
-
-// An Op is an x86 opcode.
-type x86_Op uint32
-
-func (op x86_Op) String() string {
- i := int(op)
- if i < 0 || i >= len(x86_opNames) || x86_opNames[i] == "" {
- return fmt.Sprintf("Op(%d)", i)
- }
- return x86_opNames[i]
-}
-
-// An Args holds the instruction arguments.
-// If an instruction has fewer than 4 arguments,
-// the final elements in the array are nil.
-type x86_Args [4]x86_Arg
-
-// An Arg is a single instruction argument,
-// one of these types: Reg, Mem, Imm, Rel.
-type x86_Arg interface {
- String() string
- isArg()
-}
-
-// Note that the implements of Arg that follow are all sized
-// so that on a 64-bit machine the data can be inlined in
-// the interface value instead of requiring an allocation.
-
-// A Reg is a single register.
-// The zero Reg value has no name but indicates ``no register.''
-type x86_Reg uint8
-
-const (
- _ x86_Reg = iota
-
- // 8-bit
- x86_AL
- x86_CL
- x86_DL
- x86_BL
- x86_AH
- x86_CH
- x86_DH
- x86_BH
- x86_SPB
- x86_BPB
- x86_SIB
- x86_DIB
- x86_R8B
- x86_R9B
- x86_R10B
- x86_R11B
- x86_R12B
- x86_R13B
- x86_R14B
- x86_R15B
-
- // 16-bit
- x86_AX
- x86_CX
- x86_DX
- x86_BX
- x86_SP
- x86_BP
- x86_SI
- x86_DI
- x86_R8W
- x86_R9W
- x86_R10W
- x86_R11W
- x86_R12W
- x86_R13W
- x86_R14W
- x86_R15W
-
- // 32-bit
- x86_EAX
- x86_ECX
- x86_EDX
- x86_EBX
- x86_ESP
- x86_EBP
- x86_ESI
- x86_EDI
- x86_R8L
- x86_R9L
- x86_R10L
- x86_R11L
- x86_R12L
- x86_R13L
- x86_R14L
- x86_R15L
-
- // 64-bit
- x86_RAX
- x86_RCX
- x86_RDX
- x86_RBX
- x86_RSP
- x86_RBP
- x86_RSI
- x86_RDI
- x86_R8
- x86_R9
- x86_R10
- x86_R11
- x86_R12
- x86_R13
- x86_R14
- x86_R15
-
- // Instruction pointer.
- x86_IP // 16-bit
- x86_EIP // 32-bit
- x86_RIP // 64-bit
-
- // 387 floating point registers.
- x86_F0
- x86_F1
- x86_F2
- x86_F3
- x86_F4
- x86_F5
- x86_F6
- x86_F7
-
- // MMX registers.
- x86_M0
- x86_M1
- x86_M2
- x86_M3
- x86_M4
- x86_M5
- x86_M6
- x86_M7
-
- // XMM registers.
- x86_X0
- x86_X1
- x86_X2
- x86_X3
- x86_X4
- x86_X5
- x86_X6
- x86_X7
- x86_X8
- x86_X9
- x86_X10
- x86_X11
- x86_X12
- x86_X13
- x86_X14
- x86_X15
-
- // Segment registers.
- x86_ES
- x86_CS
- x86_SS
- x86_DS
- x86_FS
- x86_GS
-
- // System registers.
- x86_GDTR
- x86_IDTR
- x86_LDTR
- x86_MSW
- x86_TASK
-
- // Control registers.
- x86_CR0
- x86_CR1
- x86_CR2
- x86_CR3
- x86_CR4
- x86_CR5
- x86_CR6
- x86_CR7
- x86_CR8
- x86_CR9
- x86_CR10
- x86_CR11
- x86_CR12
- x86_CR13
- x86_CR14
- x86_CR15
-
- // Debug registers.
- x86_DR0
- x86_DR1
- x86_DR2
- x86_DR3
- x86_DR4
- x86_DR5
- x86_DR6
- x86_DR7
- x86_DR8
- x86_DR9
- x86_DR10
- x86_DR11
- x86_DR12
- x86_DR13
- x86_DR14
- x86_DR15
-
- // Task registers.
- x86_TR0
- x86_TR1
- x86_TR2
- x86_TR3
- x86_TR4
- x86_TR5
- x86_TR6
- x86_TR7
-)
-
-const x86_regMax = x86_TR7
-
-func (x86_Reg) isArg() {}
-
-func (r x86_Reg) String() string {
- i := int(r)
- if i < 0 || i >= len(x86_regNames) || x86_regNames[i] == "" {
- return fmt.Sprintf("Reg(%d)", i)
- }
- return x86_regNames[i]
-}
-
-// A Mem is a memory reference.
-// The general form is Segment:[Base+Scale*Index+Disp].
-type x86_Mem struct {
- Segment x86_Reg
- Base x86_Reg
- Scale uint8
- Index x86_Reg
- Disp int64
-}
-
-func (x86_Mem) isArg() {}
-
-func (m x86_Mem) String() string {
- var base, plus, scale, index, disp string
-
- if m.Base != 0 {
- base = m.Base.String()
- }
- if m.Scale != 0 {
- if m.Base != 0 {
- plus = "+"
- }
- if m.Scale > 1 {
- scale = fmt.Sprintf("%d*", m.Scale)
- }
- index = m.Index.String()
- }
- if m.Disp != 0 || m.Base == 0 && m.Scale == 0 {
- disp = fmt.Sprintf("%+#x", m.Disp)
- }
- return "[" + base + plus + scale + index + disp + "]"
-}
-
-// A Rel is an offset relative to the current instruction pointer.
-type x86_Rel int32
-
-func (x86_Rel) isArg() {}
-
-func (r x86_Rel) String() string {
- return fmt.Sprintf(".%+d", r)
-}
-
-// An Imm is an integer constant.
-type x86_Imm int64
-
-func (x86_Imm) isArg() {}
-
-func (i x86_Imm) String() string {
- return fmt.Sprintf("%#x", int64(i))
-}
-
-func (i x86_Inst) String() string {
- var buf bytes.Buffer
- for _, p := range i.Prefix {
- if p == 0 {
- break
- }
- if p&x86_PrefixImplicit != 0 {
- continue
- }
- fmt.Fprintf(&buf, "%v ", p)
- }
- fmt.Fprintf(&buf, "%v", i.Op)
- sep := " "
- for _, v := range i.Args {
- if v == nil {
- break
- }
- fmt.Fprintf(&buf, "%s%v", sep, v)
- sep = ", "
- }
- return buf.String()
-}
-
-func x86_isReg(a x86_Arg) bool {
- _, ok := a.(x86_Reg)
- return ok
-}
-
-func x86_isSegReg(a x86_Arg) bool {
- r, ok := a.(x86_Reg)
- return ok && x86_ES <= r && r <= x86_GS
-}
-
-func x86_isMem(a x86_Arg) bool {
- _, ok := a.(x86_Mem)
- return ok
-}
-
-func x86_isImm(a x86_Arg) bool {
- _, ok := a.(x86_Imm)
- return ok
-}
-
-func x86_regBytes(a x86_Arg) int {
- r, ok := a.(x86_Reg)
- if !ok {
- return 0
- }
- if x86_AL <= r && r <= x86_R15B {
- return 1
- }
- if x86_AX <= r && r <= x86_R15W {
- return 2
- }
- if x86_EAX <= r && r <= x86_R15L {
- return 4
- }
- if x86_RAX <= r && r <= x86_R15 {
- return 8
- }
- return 0
-}
-
-func x86_isSegment(p x86_Prefix) bool {
- switch p {
- case x86_PrefixCS, x86_PrefixDS, x86_PrefixES, x86_PrefixFS, x86_PrefixGS, x86_PrefixSS:
- return true
- }
- return false
-}
-
-// The Op definitions and string list are in tables.go.
-
-var x86_prefixNames = map[x86_Prefix]string{
- x86_PrefixCS: "CS",
- x86_PrefixDS: "DS",
- x86_PrefixES: "ES",
- x86_PrefixFS: "FS",
- x86_PrefixGS: "GS",
- x86_PrefixSS: "SS",
- x86_PrefixLOCK: "LOCK",
- x86_PrefixREP: "REP",
- x86_PrefixREPN: "REPN",
- x86_PrefixAddrSize: "ADDRSIZE",
- x86_PrefixDataSize: "DATASIZE",
- x86_PrefixAddr16: "ADDR16",
- x86_PrefixData16: "DATA16",
- x86_PrefixAddr32: "ADDR32",
- x86_PrefixData32: "DATA32",
- x86_PrefixBND: "BND",
- x86_PrefixXACQUIRE: "XACQUIRE",
- x86_PrefixXRELEASE: "XRELEASE",
- x86_PrefixREX: "REX",
- x86_PrefixPT: "PT",
- x86_PrefixPN: "PN",
-}
-
-var x86_regNames = [...]string{
- x86_AL: "AL",
- x86_CL: "CL",
- x86_BL: "BL",
- x86_DL: "DL",
- x86_AH: "AH",
- x86_CH: "CH",
- x86_BH: "BH",
- x86_DH: "DH",
- x86_SPB: "SPB",
- x86_BPB: "BPB",
- x86_SIB: "SIB",
- x86_DIB: "DIB",
- x86_R8B: "R8B",
- x86_R9B: "R9B",
- x86_R10B: "R10B",
- x86_R11B: "R11B",
- x86_R12B: "R12B",
- x86_R13B: "R13B",
- x86_R14B: "R14B",
- x86_R15B: "R15B",
- x86_AX: "AX",
- x86_CX: "CX",
- x86_BX: "BX",
- x86_DX: "DX",
- x86_SP: "SP",
- x86_BP: "BP",
- x86_SI: "SI",
- x86_DI: "DI",
- x86_R8W: "R8W",
- x86_R9W: "R9W",
- x86_R10W: "R10W",
- x86_R11W: "R11W",
- x86_R12W: "R12W",
- x86_R13W: "R13W",
- x86_R14W: "R14W",
- x86_R15W: "R15W",
- x86_EAX: "EAX",
- x86_ECX: "ECX",
- x86_EDX: "EDX",
- x86_EBX: "EBX",
- x86_ESP: "ESP",
- x86_EBP: "EBP",
- x86_ESI: "ESI",
- x86_EDI: "EDI",
- x86_R8L: "R8L",
- x86_R9L: "R9L",
- x86_R10L: "R10L",
- x86_R11L: "R11L",
- x86_R12L: "R12L",
- x86_R13L: "R13L",
- x86_R14L: "R14L",
- x86_R15L: "R15L",
- x86_RAX: "RAX",
- x86_RCX: "RCX",
- x86_RDX: "RDX",
- x86_RBX: "RBX",
- x86_RSP: "RSP",
- x86_RBP: "RBP",
- x86_RSI: "RSI",
- x86_RDI: "RDI",
- x86_R8: "R8",
- x86_R9: "R9",
- x86_R10: "R10",
- x86_R11: "R11",
- x86_R12: "R12",
- x86_R13: "R13",
- x86_R14: "R14",
- x86_R15: "R15",
- x86_IP: "IP",
- x86_EIP: "EIP",
- x86_RIP: "RIP",
- x86_F0: "F0",
- x86_F1: "F1",
- x86_F2: "F2",
- x86_F3: "F3",
- x86_F4: "F4",
- x86_F5: "F5",
- x86_F6: "F6",
- x86_F7: "F7",
- x86_M0: "M0",
- x86_M1: "M1",
- x86_M2: "M2",
- x86_M3: "M3",
- x86_M4: "M4",
- x86_M5: "M5",
- x86_M6: "M6",
- x86_M7: "M7",
- x86_X0: "X0",
- x86_X1: "X1",
- x86_X2: "X2",
- x86_X3: "X3",
- x86_X4: "X4",
- x86_X5: "X5",
- x86_X6: "X6",
- x86_X7: "X7",
- x86_X8: "X8",
- x86_X9: "X9",
- x86_X10: "X10",
- x86_X11: "X11",
- x86_X12: "X12",
- x86_X13: "X13",
- x86_X14: "X14",
- x86_X15: "X15",
- x86_CS: "CS",
- x86_SS: "SS",
- x86_DS: "DS",
- x86_ES: "ES",
- x86_FS: "FS",
- x86_GS: "GS",
- x86_GDTR: "GDTR",
- x86_IDTR: "IDTR",
- x86_LDTR: "LDTR",
- x86_MSW: "MSW",
- x86_TASK: "TASK",
- x86_CR0: "CR0",
- x86_CR1: "CR1",
- x86_CR2: "CR2",
- x86_CR3: "CR3",
- x86_CR4: "CR4",
- x86_CR5: "CR5",
- x86_CR6: "CR6",
- x86_CR7: "CR7",
- x86_CR8: "CR8",
- x86_CR9: "CR9",
- x86_CR10: "CR10",
- x86_CR11: "CR11",
- x86_CR12: "CR12",
- x86_CR13: "CR13",
- x86_CR14: "CR14",
- x86_CR15: "CR15",
- x86_DR0: "DR0",
- x86_DR1: "DR1",
- x86_DR2: "DR2",
- x86_DR3: "DR3",
- x86_DR4: "DR4",
- x86_DR5: "DR5",
- x86_DR6: "DR6",
- x86_DR7: "DR7",
- x86_DR8: "DR8",
- x86_DR9: "DR9",
- x86_DR10: "DR10",
- x86_DR11: "DR11",
- x86_DR12: "DR12",
- x86_DR13: "DR13",
- x86_DR14: "DR14",
- x86_DR15: "DR15",
- x86_TR0: "TR0",
- x86_TR1: "TR1",
- x86_TR2: "TR2",
- x86_TR3: "TR3",
- x86_TR4: "TR4",
- x86_TR5: "TR5",
- x86_TR6: "TR6",
- x86_TR7: "TR7",
-}
-
-/* intel.go */
-
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// IntelSyntax returns the Intel assembler syntax for the instruction, as defined by Intel's XED tool.
-func x86_IntelSyntax(inst x86_Inst) string {
- var iargs []x86_Arg
- for _, a := range inst.Args {
- if a == nil {
- break
- }
- iargs = append(iargs, a)
- }
-
- switch inst.Op {
- case x86_INSB, x86_INSD, x86_INSW, x86_OUTSB, x86_OUTSD, x86_OUTSW, x86_LOOPNE, x86_JCXZ, x86_JECXZ, x86_JRCXZ, x86_LOOP, x86_LOOPE, x86_MOV, x86_XLATB:
- if inst.Op == x86_MOV && (inst.Opcode>>16)&0xFFFC != 0x0F20 {
- break
- }
- for i, p := range inst.Prefix {
- if p&0xFF == x86_PrefixAddrSize {
- inst.Prefix[i] &^= x86_PrefixImplicit
- }
- }
- }
-
- switch inst.Op {
- case x86_MOV:
- dst, _ := inst.Args[0].(x86_Reg)
- src, _ := inst.Args[1].(x86_Reg)
- if x86_ES <= dst && dst <= x86_GS && x86_EAX <= src && src <= x86_R15L {
- src -= x86_EAX - x86_AX
- iargs[1] = src
- }
- if x86_ES <= dst && dst <= x86_GS && x86_RAX <= src && src <= x86_R15 {
- src -= x86_RAX - x86_AX
- iargs[1] = src
- }
-
- if inst.Opcode>>24&^3 == 0xA0 {
- for i, p := range inst.Prefix {
- if p&0xFF == x86_PrefixAddrSize {
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- }
- }
- }
-
- switch inst.Op {
- case x86_AAM, x86_AAD:
- if imm, ok := iargs[0].(x86_Imm); ok {
- if inst.DataSize == 32 {
- iargs[0] = x86_Imm(uint32(int8(imm)))
- } else if inst.DataSize == 16 {
- iargs[0] = x86_Imm(uint16(int8(imm)))
- }
- }
-
- case x86_PUSH:
- if imm, ok := iargs[0].(x86_Imm); ok {
- iargs[0] = x86_Imm(uint32(imm))
- }
- }
-
- for _, p := range inst.Prefix {
- if p&x86_PrefixImplicit != 0 {
- for j, pj := range inst.Prefix {
- if pj&0xFF == p&0xFF {
- inst.Prefix[j] |= x86_PrefixImplicit
- }
- }
- }
- }
-
- if inst.Op != 0 {
- for i, p := range inst.Prefix {
- switch p &^ x86_PrefixIgnored {
- case x86_PrefixData16, x86_PrefixData32, x86_PrefixCS, x86_PrefixDS, x86_PrefixES, x86_PrefixSS:
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- if p.IsREX() {
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- }
- }
-
- if x86_isLoop[inst.Op] || inst.Op == x86_JCXZ || inst.Op == x86_JECXZ || inst.Op == x86_JRCXZ {
- for i, p := range inst.Prefix {
- if p == x86_PrefixPT || p == x86_PrefixPN {
- inst.Prefix[i] |= x86_PrefixImplicit
- }
- }
- }
-
- switch inst.Op {
- case x86_AAA, x86_AAS, x86_CBW, x86_CDQE, x86_CLC, x86_CLD, x86_CLI, x86_CLTS, x86_CMC, x86_CPUID, x86_CQO, x86_CWD, x86_DAA, x86_DAS,
- x86_FDECSTP, x86_FINCSTP, x86_FNCLEX, x86_FNINIT, x86_FNOP, x86_FWAIT, x86_HLT,
- x86_ICEBP, x86_INSB, x86_INSD, x86_INSW, x86_INT, x86_INTO, x86_INVD, x86_IRET, x86_IRETQ,
- x86_LAHF, x86_LEAVE, x86_LRET, x86_MONITOR, x86_MWAIT, x86_NOP, x86_OUTSB, x86_OUTSD, x86_OUTSW,
- x86_PAUSE, x86_POPA, x86_POPF, x86_POPFQ, x86_PUSHA, x86_PUSHF, x86_PUSHFQ,
- x86_RDMSR, x86_RDPMC, x86_RDTSC, x86_RDTSCP, x86_RET, x86_RSM,
- x86_SAHF, x86_STC, x86_STD, x86_STI, x86_SYSENTER, x86_SYSEXIT, x86_SYSRET,
- x86_UD2, x86_WBINVD, x86_WRMSR, x86_XEND, x86_XLATB, x86_XTEST:
-
- if inst.Op == x86_NOP && inst.Opcode>>24 != 0x90 {
- break
- }
- if inst.Op == x86_RET && inst.Opcode>>24 != 0xC3 {
- break
- }
- if inst.Op == x86_INT && inst.Opcode>>24 != 0xCC {
- break
- }
- if inst.Op == x86_LRET && inst.Opcode>>24 != 0xcb {
- break
- }
- for i, p := range inst.Prefix {
- if p&0xFF == x86_PrefixDataSize {
- inst.Prefix[i] &^= x86_PrefixImplicit | x86_PrefixIgnored
- }
- }
-
- case 0:
- // ok
- }
-
- switch inst.Op {
- case x86_INSB, x86_INSD, x86_INSW, x86_OUTSB, x86_OUTSD, x86_OUTSW, x86_MONITOR, x86_MWAIT, x86_XLATB:
- iargs = nil
-
- case x86_STOSB, x86_STOSW, x86_STOSD, x86_STOSQ:
- iargs = iargs[:1]
-
- case x86_LODSB, x86_LODSW, x86_LODSD, x86_LODSQ, x86_SCASB, x86_SCASW, x86_SCASD, x86_SCASQ:
- iargs = iargs[1:]
- }
-
- const (
- haveData16 = 1 << iota
- haveData32
- haveAddr16
- haveAddr32
- haveXacquire
- haveXrelease
- haveLock
- haveHintTaken
- haveHintNotTaken
- haveBnd
- )
- var prefixBits uint32
- prefix := ""
- for _, p := range inst.Prefix {
- if p == 0 {
- break
- }
- if p&0xFF == 0xF3 {
- prefixBits &^= haveBnd
- }
- if p&(x86_PrefixImplicit|x86_PrefixIgnored) != 0 {
- continue
- }
- switch p {
- default:
- prefix += strings.ToLower(p.String()) + " "
- case x86_PrefixCS, x86_PrefixDS, x86_PrefixES, x86_PrefixFS, x86_PrefixGS, x86_PrefixSS:
- if inst.Op == 0 {
- prefix += strings.ToLower(p.String()) + " "
- }
- case x86_PrefixREPN:
- prefix += "repne "
- case x86_PrefixLOCK:
- prefixBits |= haveLock
- case x86_PrefixData16, x86_PrefixDataSize:
- prefixBits |= haveData16
- case x86_PrefixData32:
- prefixBits |= haveData32
- case x86_PrefixAddrSize, x86_PrefixAddr16:
- prefixBits |= haveAddr16
- case x86_PrefixAddr32:
- prefixBits |= haveAddr32
- case x86_PrefixXACQUIRE:
- prefixBits |= haveXacquire
- case x86_PrefixXRELEASE:
- prefixBits |= haveXrelease
- case x86_PrefixPT:
- prefixBits |= haveHintTaken
- case x86_PrefixPN:
- prefixBits |= haveHintNotTaken
- case x86_PrefixBND:
- prefixBits |= haveBnd
- }
- }
- switch inst.Op {
- case x86_JMP:
- if inst.Opcode>>24 == 0xEB {
- prefixBits &^= haveBnd
- }
- case x86_RET, x86_LRET:
- prefixBits &^= haveData16 | haveData32
- }
-
- if prefixBits&haveXacquire != 0 {
- prefix += "xacquire "
- }
- if prefixBits&haveXrelease != 0 {
- prefix += "xrelease "
- }
- if prefixBits&haveLock != 0 {
- prefix += "lock "
- }
- if prefixBits&haveBnd != 0 {
- prefix += "bnd "
- }
- if prefixBits&haveHintTaken != 0 {
- prefix += "hint-taken "
- }
- if prefixBits&haveHintNotTaken != 0 {
- prefix += "hint-not-taken "
- }
- if prefixBits&haveAddr16 != 0 {
- prefix += "addr16 "
- }
- if prefixBits&haveAddr32 != 0 {
- prefix += "addr32 "
- }
- if prefixBits&haveData16 != 0 {
- prefix += "data16 "
- }
- if prefixBits&haveData32 != 0 {
- prefix += "data32 "
- }
-
- if inst.Op == 0 {
- if prefix == "" {
- return "<no instruction>"
- }
- return prefix[:len(prefix)-1]
- }
-
- var args []string
- for _, a := range iargs {
- if a == nil {
- break
- }
- args = append(args, x86_intelArg(&inst, a))
- }
-
- var op string
- switch inst.Op {
- case x86_NOP:
- if inst.Opcode>>24 == 0x0F {
- if inst.DataSize == 16 {
- args = append(args, "ax")
- } else {
- args = append(args, "eax")
- }
- }
-
- case x86_BLENDVPD, x86_BLENDVPS, x86_PBLENDVB:
- args = args[:2]
-
- case x86_INT:
- if inst.Opcode>>24 == 0xCC {
- args = nil
- op = "int3"
- }
-
- case x86_LCALL, x86_LJMP:
- if len(args) == 2 {
- args[0], args[1] = args[1], args[0]
- }
-
- case x86_FCHS, x86_FABS, x86_FTST, x86_FLDPI, x86_FLDL2E, x86_FLDLG2, x86_F2XM1, x86_FXAM, x86_FLD1, x86_FLDL2T, x86_FSQRT, x86_FRNDINT, x86_FCOS, x86_FSIN:
- if len(args) == 0 {
- args = append(args, "st0")
- }
-
- case x86_FPTAN, x86_FSINCOS, x86_FUCOMPP, x86_FCOMPP, x86_FYL2X, x86_FPATAN, x86_FXTRACT, x86_FPREM1, x86_FPREM, x86_FYL2XP1, x86_FSCALE:
- if len(args) == 0 {
- args = []string{"st0", "st1"}
- }
-
- case x86_FST, x86_FSTP, x86_FISTTP, x86_FIST, x86_FISTP, x86_FBSTP:
- if len(args) == 1 {
- args = append(args, "st0")
- }
-
- case x86_FLD, x86_FXCH, x86_FCOM, x86_FCOMP, x86_FIADD, x86_FIMUL, x86_FICOM, x86_FICOMP, x86_FISUBR, x86_FIDIV, x86_FUCOM, x86_FUCOMP, x86_FILD, x86_FBLD, x86_FADD, x86_FMUL, x86_FSUB, x86_FSUBR, x86_FISUB, x86_FDIV, x86_FDIVR, x86_FIDIVR:
- if len(args) == 1 {
- args = []string{"st0", args[0]}
- }
-
- case x86_MASKMOVDQU, x86_MASKMOVQ, x86_XLATB, x86_OUTSB, x86_OUTSW, x86_OUTSD:
- FixSegment:
- for i := len(inst.Prefix) - 1; i >= 0; i-- {
- p := inst.Prefix[i] & 0xFF
- switch p {
- case x86_PrefixCS, x86_PrefixES, x86_PrefixFS, x86_PrefixGS, x86_PrefixSS:
- if inst.Mode != 64 || p == x86_PrefixFS || p == x86_PrefixGS {
- args = append(args, strings.ToLower((inst.Prefix[i] & 0xFF).String()))
- break FixSegment
- }
- case x86_PrefixDS:
- if inst.Mode != 64 {
- break FixSegment
- }
- }
- }
- }
-
- if op == "" {
- op = x86_intelOp[inst.Op]
- }
- if op == "" {
- op = strings.ToLower(inst.Op.String())
- }
- if args != nil {
- op += " " + strings.Join(args, ", ")
- }
- return prefix + op
-}
-
-func x86_intelArg(inst *x86_Inst, arg x86_Arg) string {
- switch a := arg.(type) {
- case x86_Imm:
- if inst.Mode == 32 {
- return fmt.Sprintf("%#x", uint32(a))
- }
- if x86_Imm(int32(a)) == a {
- return fmt.Sprintf("%#x", int64(a))
- }
- return fmt.Sprintf("%#x", uint64(a))
- case x86_Mem:
- if a.Base == x86_EIP {
- a.Base = x86_RIP
- }
- prefix := ""
- switch inst.MemBytes {
- case 1:
- prefix = "byte "
- case 2:
- prefix = "word "
- case 4:
- prefix = "dword "
- case 8:
- prefix = "qword "
- case 16:
- prefix = "xmmword "
- }
- switch inst.Op {
- case x86_INVLPG:
- prefix = "byte "
- case x86_STOSB, x86_MOVSB, x86_CMPSB, x86_LODSB, x86_SCASB:
- prefix = "byte "
- case x86_STOSW, x86_MOVSW, x86_CMPSW, x86_LODSW, x86_SCASW:
- prefix = "word "
- case x86_STOSD, x86_MOVSD, x86_CMPSD, x86_LODSD, x86_SCASD:
- prefix = "dword "
- case x86_STOSQ, x86_MOVSQ, x86_CMPSQ, x86_LODSQ, x86_SCASQ:
- prefix = "qword "
- case x86_LAR:
- prefix = "word "
- case x86_BOUND:
- if inst.Mode == 32 {
- prefix = "qword "
- } else {
- prefix = "dword "
- }
- case x86_PREFETCHW, x86_PREFETCHNTA, x86_PREFETCHT0, x86_PREFETCHT1, x86_PREFETCHT2, x86_CLFLUSH:
- prefix = "zmmword "
- }
- switch inst.Op {
- case x86_MOVSB, x86_MOVSW, x86_MOVSD, x86_MOVSQ, x86_CMPSB, x86_CMPSW, x86_CMPSD, x86_CMPSQ, x86_STOSB, x86_STOSW, x86_STOSD, x86_STOSQ, x86_SCASB, x86_SCASW, x86_SCASD, x86_SCASQ, x86_LODSB, x86_LODSW, x86_LODSD, x86_LODSQ:
- switch a.Base {
- case x86_DI, x86_EDI, x86_RDI:
- if a.Segment == x86_ES {
- a.Segment = 0
- }
- case x86_SI, x86_ESI, x86_RSI:
- if a.Segment == x86_DS {
- a.Segment = 0
- }
- }
- case x86_LEA:
- a.Segment = 0
- default:
- switch a.Base {
- case x86_SP, x86_ESP, x86_RSP, x86_BP, x86_EBP, x86_RBP:
- if a.Segment == x86_SS {
- a.Segment = 0
- }
- default:
- if a.Segment == x86_DS {
- a.Segment = 0
- }
- }
- }
-
- if inst.Mode == 64 && a.Segment != x86_FS && a.Segment != x86_GS {
- a.Segment = 0
- }
-
- prefix += "ptr "
- if a.Segment != 0 {
- prefix += strings.ToLower(a.Segment.String()) + ":"
- }
- prefix += "["
- if a.Base != 0 {
- prefix += x86_intelArg(inst, a.Base)
- }
- if a.Scale != 0 && a.Index != 0 {
- if a.Base != 0 {
- prefix += "+"
- }
- prefix += fmt.Sprintf("%s*%d", x86_intelArg(inst, a.Index), a.Scale)
- }
- if a.Disp != 0 {
- if prefix[len(prefix)-1] == '[' && (a.Disp >= 0 || int64(int32(a.Disp)) != a.Disp) {
- prefix += fmt.Sprintf("%#x", uint64(a.Disp))
- } else {
- prefix += fmt.Sprintf("%+#x", a.Disp)
- }
- }
- prefix += "]"
- return prefix
- case x86_Rel:
- return fmt.Sprintf(".%+#x", int64(a))
- case x86_Reg:
- if int(a) < len(x86_intelReg) && x86_intelReg[a] != "" {
- return x86_intelReg[a]
- }
- }
- return strings.ToLower(arg.String())
-}
-
-var x86_intelOp = map[x86_Op]string{
- x86_JAE: "jnb",
- x86_JA: "jnbe",
- x86_JGE: "jnl",
- x86_JNE: "jnz",
- x86_JG: "jnle",
- x86_JE: "jz",
- x86_SETAE: "setnb",
- x86_SETA: "setnbe",
- x86_SETGE: "setnl",
- x86_SETNE: "setnz",
- x86_SETG: "setnle",
- x86_SETE: "setz",
- x86_CMOVAE: "cmovnb",
- x86_CMOVA: "cmovnbe",
- x86_CMOVGE: "cmovnl",
- x86_CMOVNE: "cmovnz",
- x86_CMOVG: "cmovnle",
- x86_CMOVE: "cmovz",
- x86_LCALL: "call far",
- x86_LJMP: "jmp far",
- x86_LRET: "ret far",
- x86_ICEBP: "int1",
- x86_MOVSD_XMM: "movsd",
- x86_XLATB: "xlat",
-}
-
-var x86_intelReg = [...]string{
- x86_F0: "st0",
- x86_F1: "st1",
- x86_F2: "st2",
- x86_F3: "st3",
- x86_F4: "st4",
- x86_F5: "st5",
- x86_F6: "st6",
- x86_F7: "st7",
- x86_M0: "mmx0",
- x86_M1: "mmx1",
- x86_M2: "mmx2",
- x86_M3: "mmx3",
- x86_M4: "mmx4",
- x86_M5: "mmx5",
- x86_M6: "mmx6",
- x86_M7: "mmx7",
- x86_X0: "xmm0",
- x86_X1: "xmm1",
- x86_X2: "xmm2",
- x86_X3: "xmm3",
- x86_X4: "xmm4",
- x86_X5: "xmm5",
- x86_X6: "xmm6",
- x86_X7: "xmm7",
- x86_X8: "xmm8",
- x86_X9: "xmm9",
- x86_X10: "xmm10",
- x86_X11: "xmm11",
- x86_X12: "xmm12",
- x86_X13: "xmm13",
- x86_X14: "xmm14",
- x86_X15: "xmm15",
-
- // TODO: Maybe the constants are named wrong.
- x86_SPB: "spl",
- x86_BPB: "bpl",
- x86_SIB: "sil",
- x86_DIB: "dil",
-
- x86_R8L: "r8d",
- x86_R9L: "r9d",
- x86_R10L: "r10d",
- x86_R11L: "r11d",
- x86_R12L: "r12d",
- x86_R13L: "r13d",
- x86_R14L: "r14d",
- x86_R15L: "r15d",
-}
-
-/* plan9x.go */
-
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// plan9Syntax returns the Go assembler syntax for the instruction.
-// The syntax was originally defined by Plan 9.
-// The pc is the program counter of the instruction, used for expanding
-// PC-relative addresses into absolute ones.
-// The symname function queries the symbol table for the program
-// being disassembled. Given a target address it returns the name and base
-// address of the symbol containing the target, if any; otherwise it returns "", 0.
-func x86_plan9Syntax(inst x86_Inst, pc uint64, symname func(uint64) (string, uint64)) string {
- if symname == nil {
- symname = func(uint64) (string, uint64) { return "", 0 }
- }
- var args []string
- for i := len(inst.Args) - 1; i >= 0; i-- {
- a := inst.Args[i]
- if a == nil {
- continue
- }
- args = append(args, x86_plan9Arg(&inst, pc, symname, a))
- }
-
- var last x86_Prefix
- for _, p := range inst.Prefix {
- if p == 0 || p.IsREX() {
- break
- }
- last = p
- }
-
- prefix := ""
- switch last & 0xFF {
- case 0, 0x66, 0x67:
- // ignore
- case x86_PrefixREPN:
- prefix += "REPNE "
- default:
- prefix += last.String() + " "
- }
-
- op := inst.Op.String()
- if x86_plan9Suffix[inst.Op] {
- switch inst.DataSize {
- case 8:
- op += "B"
- case 16:
- op += "W"
- case 32:
- op += "L"
- case 64:
- op += "Q"
- }
- }
-
- if args != nil {
- op += " " + strings.Join(args, ", ")
- }
-
- return prefix + op
-}
-
-func x86_plan9Arg(inst *x86_Inst, pc uint64, symname func(uint64) (string, uint64), arg x86_Arg) string {
- switch a := arg.(type) {
- case x86_Reg:
- return x86_plan9Reg[a]
- case x86_Rel:
- if pc == 0 {
- break
- }
- // If the absolute address is the start of a symbol, use the name.
- // Otherwise use the raw address, so that things like relative
- // jumps show up as JMP 0x123 instead of JMP f+10(SB).
- // It is usually easier to search for 0x123 than to do the mental
- // arithmetic to find f+10.
- addr := pc + uint64(inst.Len) + uint64(a)
- if s, base := symname(addr); s != "" && addr == base {
- return fmt.Sprintf("%s(SB)", s)
- }
- return fmt.Sprintf("%#x", addr)
-
- case x86_Imm:
- if s, base := symname(uint64(a)); s != "" {
- suffix := ""
- if uint64(a) != base {
- suffix = fmt.Sprintf("%+d", uint64(a)-base)
- }
- return fmt.Sprintf("$%s%s(SB)", s, suffix)
- }
- if inst.Mode == 32 {
- return fmt.Sprintf("$%#x", uint32(a))
- }
- if x86_Imm(int32(a)) == a {
- return fmt.Sprintf("$%#x", int64(a))
- }
- return fmt.Sprintf("$%#x", uint64(a))
- case x86_Mem:
- if a.Segment == 0 && a.Disp != 0 && a.Base == 0 && (a.Index == 0 || a.Scale == 0) {
- if s, base := symname(uint64(a.Disp)); s != "" {
- suffix := ""
- if uint64(a.Disp) != base {
- suffix = fmt.Sprintf("%+d", uint64(a.Disp)-base)
- }
- return fmt.Sprintf("%s%s(SB)", s, suffix)
- }
- }
- s := ""
- if a.Segment != 0 {
- s += fmt.Sprintf("%s:", x86_plan9Reg[a.Segment])
- }
- if a.Disp != 0 {
- s += fmt.Sprintf("%#x", a.Disp)
- } else {
- s += "0"
- }
- if a.Base != 0 {
- s += fmt.Sprintf("(%s)", x86_plan9Reg[a.Base])
- }
- if a.Index != 0 && a.Scale != 0 {
- s += fmt.Sprintf("(%s*%d)", x86_plan9Reg[a.Index], a.Scale)
- }
- return s
- }
- return arg.String()
-}
-
-var x86_plan9Suffix = [x86_maxOp + 1]bool{
- x86_ADC: true,
- x86_ADD: true,
- x86_AND: true,
- x86_BSF: true,
- x86_BSR: true,
- x86_BT: true,
- x86_BTC: true,
- x86_BTR: true,
- x86_BTS: true,
- x86_CMP: true,
- x86_CMPXCHG: true,
- x86_CVTSI2SD: true,
- x86_CVTSI2SS: true,
- x86_CVTSD2SI: true,
- x86_CVTSS2SI: true,
- x86_CVTTSD2SI: true,
- x86_CVTTSS2SI: true,
- x86_DEC: true,
- x86_DIV: true,
- x86_FLDENV: true,
- x86_FRSTOR: true,
- x86_IDIV: true,
- x86_IMUL: true,
- x86_IN: true,
- x86_INC: true,
- x86_LEA: true,
- x86_MOV: true,
- x86_MOVNTI: true,
- x86_MUL: true,
- x86_NEG: true,
- x86_NOP: true,
- x86_NOT: true,
- x86_OR: true,
- x86_OUT: true,
- x86_POP: true,
- x86_POPA: true,
- x86_PUSH: true,
- x86_PUSHA: true,
- x86_RCL: true,
- x86_RCR: true,
- x86_ROL: true,
- x86_ROR: true,
- x86_SAR: true,
- x86_SBB: true,
- x86_SHL: true,
- x86_SHLD: true,
- x86_SHR: true,
- x86_SHRD: true,
- x86_SUB: true,
- x86_TEST: true,
- x86_XADD: true,
- x86_XCHG: true,
- x86_XOR: true,
-}
-
-var x86_plan9Reg = [...]string{
- x86_AL: "AL",
- x86_CL: "CL",
- x86_BL: "BL",
- x86_DL: "DL",
- x86_AH: "AH",
- x86_CH: "CH",
- x86_BH: "BH",
- x86_DH: "DH",
- x86_SPB: "SP",
- x86_BPB: "BP",
- x86_SIB: "SI",
- x86_DIB: "DI",
- x86_R8B: "R8",
- x86_R9B: "R9",
- x86_R10B: "R10",
- x86_R11B: "R11",
- x86_R12B: "R12",
- x86_R13B: "R13",
- x86_R14B: "R14",
- x86_R15B: "R15",
- x86_AX: "AX",
- x86_CX: "CX",
- x86_BX: "BX",
- x86_DX: "DX",
- x86_SP: "SP",
- x86_BP: "BP",
- x86_SI: "SI",
- x86_DI: "DI",
- x86_R8W: "R8",
- x86_R9W: "R9",
- x86_R10W: "R10",
- x86_R11W: "R11",
- x86_R12W: "R12",
- x86_R13W: "R13",
- x86_R14W: "R14",
- x86_R15W: "R15",
- x86_EAX: "AX",
- x86_ECX: "CX",
- x86_EDX: "DX",
- x86_EBX: "BX",
- x86_ESP: "SP",
- x86_EBP: "BP",
- x86_ESI: "SI",
- x86_EDI: "DI",
- x86_R8L: "R8",
- x86_R9L: "R9",
- x86_R10L: "R10",
- x86_R11L: "R11",
- x86_R12L: "R12",
- x86_R13L: "R13",
- x86_R14L: "R14",
- x86_R15L: "R15",
- x86_RAX: "AX",
- x86_RCX: "CX",
- x86_RDX: "DX",
- x86_RBX: "BX",
- x86_RSP: "SP",
- x86_RBP: "BP",
- x86_RSI: "SI",
- x86_RDI: "DI",
- x86_R8: "R8",
- x86_R9: "R9",
- x86_R10: "R10",
- x86_R11: "R11",
- x86_R12: "R12",
- x86_R13: "R13",
- x86_R14: "R14",
- x86_R15: "R15",
- x86_IP: "IP",
- x86_EIP: "IP",
- x86_RIP: "IP",
- x86_F0: "F0",
- x86_F1: "F1",
- x86_F2: "F2",
- x86_F3: "F3",
- x86_F4: "F4",
- x86_F5: "F5",
- x86_F6: "F6",
- x86_F7: "F7",
- x86_M0: "M0",
- x86_M1: "M1",
- x86_M2: "M2",
- x86_M3: "M3",
- x86_M4: "M4",
- x86_M5: "M5",
- x86_M6: "M6",
- x86_M7: "M7",
- x86_X0: "X0",
- x86_X1: "X1",
- x86_X2: "X2",
- x86_X3: "X3",
- x86_X4: "X4",
- x86_X5: "X5",
- x86_X6: "X6",
- x86_X7: "X7",
- x86_X8: "X8",
- x86_X9: "X9",
- x86_X10: "X10",
- x86_X11: "X11",
- x86_X12: "X12",
- x86_X13: "X13",
- x86_X14: "X14",
- x86_X15: "X15",
- x86_CS: "CS",
- x86_SS: "SS",
- x86_DS: "DS",
- x86_ES: "ES",
- x86_FS: "FS",
- x86_GS: "GS",
- x86_GDTR: "GDTR",
- x86_IDTR: "IDTR",
- x86_LDTR: "LDTR",
- x86_MSW: "MSW",
- x86_TASK: "TASK",
- x86_CR0: "CR0",
- x86_CR1: "CR1",
- x86_CR2: "CR2",
- x86_CR3: "CR3",
- x86_CR4: "CR4",
- x86_CR5: "CR5",
- x86_CR6: "CR6",
- x86_CR7: "CR7",
- x86_CR8: "CR8",
- x86_CR9: "CR9",
- x86_CR10: "CR10",
- x86_CR11: "CR11",
- x86_CR12: "CR12",
- x86_CR13: "CR13",
- x86_CR14: "CR14",
- x86_CR15: "CR15",
- x86_DR0: "DR0",
- x86_DR1: "DR1",
- x86_DR2: "DR2",
- x86_DR3: "DR3",
- x86_DR4: "DR4",
- x86_DR5: "DR5",
- x86_DR6: "DR6",
- x86_DR7: "DR7",
- x86_DR8: "DR8",
- x86_DR9: "DR9",
- x86_DR10: "DR10",
- x86_DR11: "DR11",
- x86_DR12: "DR12",
- x86_DR13: "DR13",
- x86_DR14: "DR14",
- x86_DR15: "DR15",
- x86_TR0: "TR0",
- x86_TR1: "TR1",
- x86_TR2: "TR2",
- x86_TR3: "TR3",
- x86_TR4: "TR4",
- x86_TR5: "TR5",
- x86_TR6: "TR6",
- x86_TR7: "TR7",
-}
-
-/* tables.go */
-
-// DO NOT EDIT
-// generated by: x86map -fmt=decoder ../x86.csv
-
-var x86_decoder = [...]uint16{
- uint16(x86_xFail),
- /*1*/ uint16(x86_xCondByte), 243,
- 0x00, 490,
- 0x01, 496,
- 0x02, 525,
- 0x03, 531,
- 0x04, 560,
- 0x05, 566,
- 0x06, 595,
- 0x07, 602,
- 0x08, 609,
- 0x09, 615,
- 0x0A, 644,
- 0x0B, 650,
- 0x0C, 679,
- 0x0D, 685,
- 0x0E, 714,
- 0x0F, 721,
- 0x10, 8026,
- 0x11, 8032,
- 0x12, 8061,
- 0x13, 8067,
- 0x14, 8096,
- 0x15, 8102,
- 0x16, 8131,
- 0x17, 8138,
- 0x18, 8145,
- 0x19, 8151,
- 0x1A, 8180,
- 0x1B, 8186,
- 0x1C, 8215,
- 0x1D, 8221,
- 0x1E, 8250,
- 0x1F, 8257,
- 0x20, 8264,
- 0x21, 8270,
- 0x22, 8299,
- 0x23, 8305,
- 0x24, 8334,
- 0x25, 8340,
- 0x27, 8369,
- 0x28, 8375,
- 0x29, 8381,
- 0x2A, 8410,
- 0x2B, 8416,
- 0x2C, 8445,
- 0x2D, 8451,
- 0x2F, 8480,
- 0x30, 8486,
- 0x31, 8492,
- 0x32, 8521,
- 0x33, 8527,
- 0x34, 8556,
- 0x35, 8562,
- 0x37, 8591,
- 0x38, 8597,
- 0x39, 8603,
- 0x3A, 8632,
- 0x3B, 8638,
- 0x3C, 8667,
- 0x3D, 8673,
- 0x3F, 8702,
- 0x40, 8708,
- 0x41, 8708,
- 0x42, 8708,
- 0x43, 8708,
- 0x44, 8708,
- 0x45, 8708,
- 0x46, 8708,
- 0x47, 8708,
- 0x48, 8723,
- 0x49, 8723,
- 0x4a, 8723,
- 0x4b, 8723,
- 0x4c, 8723,
- 0x4d, 8723,
- 0x4e, 8723,
- 0x4f, 8723,
- 0x50, 8738,
- 0x51, 8738,
- 0x52, 8738,
- 0x53, 8738,
- 0x54, 8738,
- 0x55, 8738,
- 0x56, 8738,
- 0x57, 8738,
- 0x58, 8765,
- 0x59, 8765,
- 0x5a, 8765,
- 0x5b, 8765,
- 0x5c, 8765,
- 0x5d, 8765,
- 0x5e, 8765,
- 0x5f, 8765,
- 0x60, 8792,
- 0x61, 8805,
- 0x62, 8818,
- 0x63, 8837,
- 0x68, 8868,
- 0x69, 8887,
- 0x6A, 8922,
- 0x6B, 8927,
- 0x6C, 8962,
- 0x6D, 8965,
- 0x6E, 8978,
- 0x6F, 8981,
- 0x70, 8994,
- 0x71, 8999,
- 0x72, 9004,
- 0x73, 9009,
- 0x74, 9014,
- 0x75, 9019,
- 0x76, 9024,
- 0x77, 9029,
- 0x78, 9034,
- 0x79, 9039,
- 0x7A, 9044,
- 0x7B, 9049,
- 0x7C, 9054,
- 0x7D, 9059,
- 0x7E, 9064,
- 0x7F, 9069,
- 0x80, 9074,
- 0x81, 9131,
- 0x83, 9372,
- 0x84, 9613,
- 0x85, 9619,
- 0x86, 9648,
- 0x87, 9654,
- 0x88, 9683,
- 0x89, 9689,
- 0x8A, 9711,
- 0x8B, 9717,
- 0x8C, 9739,
- 0x8D, 9768,
- 0x8E, 9797,
- 0x8F, 9826,
- 0x90, 9862,
- 0x91, 9862,
- 0x92, 9862,
- 0x93, 9862,
- 0x94, 9862,
- 0x95, 9862,
- 0x96, 9862,
- 0x97, 9862,
- 0x98, 9888,
- 0x99, 9908,
- 0x9A, 9928,
- 0x9B, 9945,
- 0x9C, 9948,
- 0x9D, 9971,
- 0x9E, 9994,
- 0x9F, 9997,
- 0xA0, 10000,
- 0xA1, 10019,
- 0xA2, 10041,
- 0xA3, 10060,
- 0xA4, 10082,
- 0xA5, 10085,
- 0xA6, 10105,
- 0xA7, 10108,
- 0xA8, 10128,
- 0xA9, 10134,
- 0xAA, 10163,
- 0xAB, 10166,
- 0xAC, 10186,
- 0xAD, 10189,
- 0xAE, 10209,
- 0xAF, 10212,
- 0xb0, 10232,
- 0xb1, 10232,
- 0xb2, 10232,
- 0xb3, 10232,
- 0xb4, 10232,
- 0xb5, 10232,
- 0xb6, 10232,
- 0xb7, 10232,
- 0xb8, 10238,
- 0xb9, 10238,
- 0xba, 10238,
- 0xbb, 10238,
- 0xbc, 10238,
- 0xbd, 10238,
- 0xbe, 10238,
- 0xbf, 10238,
- 0xC0, 10267,
- 0xC1, 10318,
- 0xC2, 10516,
- 0xC3, 10521,
- 0xC4, 10524,
- 0xC5, 10543,
- 0xC6, 10562,
- 0xC7, 10586,
- 0xC8, 10647,
- 0xC9, 10654,
- 0xCA, 10677,
- 0xCB, 10682,
- 0xCC, 10685,
- 0xCD, 10689,
- 0xCE, 10694,
- 0xCF, 10700,
- 0xD0, 10720,
- 0xD1, 10764,
- 0xD2, 10955,
- 0xD3, 10999,
- 0xD4, 11190,
- 0xD5, 11198,
- 0xD7, 11206,
- 0xD8, 11219,
- 0xD9, 11428,
- 0xDA, 11637,
- 0xDB, 11769,
- 0xDC, 11940,
- 0xDD, 12109,
- 0xDE, 12248,
- 0xDF, 12422,
- 0xE0, 12533,
- 0xE1, 12538,
- 0xE2, 12543,
- 0xE3, 12548,
- 0xE4, 12574,
- 0xE5, 12580,
- 0xE6, 12602,
- 0xE7, 12608,
- 0xE8, 12630,
- 0xE9, 12661,
- 0xEA, 12692,
- 0xEB, 12709,
- 0xEC, 12714,
- 0xED, 12719,
- 0xEE, 12738,
- 0xEF, 12743,
- 0xF1, 12762,
- 0xF4, 12765,
- 0xF5, 12768,
- 0xF6, 12771,
- 0xF7, 12810,
- 0xF8, 12986,
- 0xF9, 12989,
- 0xFA, 12992,
- 0xFB, 12995,
- 0xFC, 12998,
- 0xFD, 13001,
- 0xFE, 13004,
- 0xFF, 13021,
- uint16(x86_xFail),
- /*490*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*492*/ uint16(x86_xReadSlashR),
- /*493*/ uint16(x86_xArgRM8),
- /*494*/ uint16(x86_xArgR8),
- /*495*/ uint16(x86_xMatch),
- /*496*/ uint16(x86_xCondIs64), 499, 515,
- /*499*/ uint16(x86_xCondDataSize), 503, 509, 0,
- /*503*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*505*/ uint16(x86_xReadSlashR),
- /*506*/ uint16(x86_xArgRM16),
- /*507*/ uint16(x86_xArgR16),
- /*508*/ uint16(x86_xMatch),
- /*509*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*511*/ uint16(x86_xReadSlashR),
- /*512*/ uint16(x86_xArgRM32),
- /*513*/ uint16(x86_xArgR32),
- /*514*/ uint16(x86_xMatch),
- /*515*/ uint16(x86_xCondDataSize), 503, 509, 519,
- /*519*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*521*/ uint16(x86_xReadSlashR),
- /*522*/ uint16(x86_xArgRM64),
- /*523*/ uint16(x86_xArgR64),
- /*524*/ uint16(x86_xMatch),
- /*525*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*527*/ uint16(x86_xReadSlashR),
- /*528*/ uint16(x86_xArgR8),
- /*529*/ uint16(x86_xArgRM8),
- /*530*/ uint16(x86_xMatch),
- /*531*/ uint16(x86_xCondIs64), 534, 550,
- /*534*/ uint16(x86_xCondDataSize), 538, 544, 0,
- /*538*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*540*/ uint16(x86_xReadSlashR),
- /*541*/ uint16(x86_xArgR16),
- /*542*/ uint16(x86_xArgRM16),
- /*543*/ uint16(x86_xMatch),
- /*544*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*546*/ uint16(x86_xReadSlashR),
- /*547*/ uint16(x86_xArgR32),
- /*548*/ uint16(x86_xArgRM32),
- /*549*/ uint16(x86_xMatch),
- /*550*/ uint16(x86_xCondDataSize), 538, 544, 554,
- /*554*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*556*/ uint16(x86_xReadSlashR),
- /*557*/ uint16(x86_xArgR64),
- /*558*/ uint16(x86_xArgRM64),
- /*559*/ uint16(x86_xMatch),
- /*560*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*562*/ uint16(x86_xReadIb),
- /*563*/ uint16(x86_xArgAL),
- /*564*/ uint16(x86_xArgImm8u),
- /*565*/ uint16(x86_xMatch),
- /*566*/ uint16(x86_xCondIs64), 569, 585,
- /*569*/ uint16(x86_xCondDataSize), 573, 579, 0,
- /*573*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*575*/ uint16(x86_xReadIw),
- /*576*/ uint16(x86_xArgAX),
- /*577*/ uint16(x86_xArgImm16),
- /*578*/ uint16(x86_xMatch),
- /*579*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*581*/ uint16(x86_xReadId),
- /*582*/ uint16(x86_xArgEAX),
- /*583*/ uint16(x86_xArgImm32),
- /*584*/ uint16(x86_xMatch),
- /*585*/ uint16(x86_xCondDataSize), 573, 579, 589,
- /*589*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*591*/ uint16(x86_xReadId),
- /*592*/ uint16(x86_xArgRAX),
- /*593*/ uint16(x86_xArgImm32),
- /*594*/ uint16(x86_xMatch),
- /*595*/ uint16(x86_xCondIs64), 598, 0,
- /*598*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*600*/ uint16(x86_xArgES),
- /*601*/ uint16(x86_xMatch),
- /*602*/ uint16(x86_xCondIs64), 605, 0,
- /*605*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*607*/ uint16(x86_xArgES),
- /*608*/ uint16(x86_xMatch),
- /*609*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*611*/ uint16(x86_xReadSlashR),
- /*612*/ uint16(x86_xArgRM8),
- /*613*/ uint16(x86_xArgR8),
- /*614*/ uint16(x86_xMatch),
- /*615*/ uint16(x86_xCondIs64), 618, 634,
- /*618*/ uint16(x86_xCondDataSize), 622, 628, 0,
- /*622*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*624*/ uint16(x86_xReadSlashR),
- /*625*/ uint16(x86_xArgRM16),
- /*626*/ uint16(x86_xArgR16),
- /*627*/ uint16(x86_xMatch),
- /*628*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*630*/ uint16(x86_xReadSlashR),
- /*631*/ uint16(x86_xArgRM32),
- /*632*/ uint16(x86_xArgR32),
- /*633*/ uint16(x86_xMatch),
- /*634*/ uint16(x86_xCondDataSize), 622, 628, 638,
- /*638*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*640*/ uint16(x86_xReadSlashR),
- /*641*/ uint16(x86_xArgRM64),
- /*642*/ uint16(x86_xArgR64),
- /*643*/ uint16(x86_xMatch),
- /*644*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*646*/ uint16(x86_xReadSlashR),
- /*647*/ uint16(x86_xArgR8),
- /*648*/ uint16(x86_xArgRM8),
- /*649*/ uint16(x86_xMatch),
- /*650*/ uint16(x86_xCondIs64), 653, 669,
- /*653*/ uint16(x86_xCondDataSize), 657, 663, 0,
- /*657*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*659*/ uint16(x86_xReadSlashR),
- /*660*/ uint16(x86_xArgR16),
- /*661*/ uint16(x86_xArgRM16),
- /*662*/ uint16(x86_xMatch),
- /*663*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*665*/ uint16(x86_xReadSlashR),
- /*666*/ uint16(x86_xArgR32),
- /*667*/ uint16(x86_xArgRM32),
- /*668*/ uint16(x86_xMatch),
- /*669*/ uint16(x86_xCondDataSize), 657, 663, 673,
- /*673*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*675*/ uint16(x86_xReadSlashR),
- /*676*/ uint16(x86_xArgR64),
- /*677*/ uint16(x86_xArgRM64),
- /*678*/ uint16(x86_xMatch),
- /*679*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*681*/ uint16(x86_xReadIb),
- /*682*/ uint16(x86_xArgAL),
- /*683*/ uint16(x86_xArgImm8u),
- /*684*/ uint16(x86_xMatch),
- /*685*/ uint16(x86_xCondIs64), 688, 704,
- /*688*/ uint16(x86_xCondDataSize), 692, 698, 0,
- /*692*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*694*/ uint16(x86_xReadIw),
- /*695*/ uint16(x86_xArgAX),
- /*696*/ uint16(x86_xArgImm16),
- /*697*/ uint16(x86_xMatch),
- /*698*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*700*/ uint16(x86_xReadId),
- /*701*/ uint16(x86_xArgEAX),
- /*702*/ uint16(x86_xArgImm32),
- /*703*/ uint16(x86_xMatch),
- /*704*/ uint16(x86_xCondDataSize), 692, 698, 708,
- /*708*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*710*/ uint16(x86_xReadId),
- /*711*/ uint16(x86_xArgRAX),
- /*712*/ uint16(x86_xArgImm32),
- /*713*/ uint16(x86_xMatch),
- /*714*/ uint16(x86_xCondIs64), 717, 0,
- /*717*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*719*/ uint16(x86_xArgCS),
- /*720*/ uint16(x86_xMatch),
- /*721*/ uint16(x86_xCondByte), 228,
- 0x00, 1180,
- 0x01, 1237,
- 0x02, 1345,
- 0x03, 1367,
- 0x05, 1389,
- 0x06, 1395,
- 0x07, 1398,
- 0x08, 1404,
- 0x09, 1407,
- 0x0B, 1410,
- 0x0D, 1413,
- 0x10, 1426,
- 0x11, 1460,
- 0x12, 1494,
- 0x13, 1537,
- 0x14, 1555,
- 0x15, 1573,
- 0x16, 1591,
- 0x17, 1626,
- 0x18, 1644,
- 0x1F, 1669,
- 0x20, 1690,
- 0x21, 1705,
- 0x22, 1720,
- 0x23, 1735,
- 0x24, 1750,
- 0x26, 1765,
- 0x28, 1780,
- 0x29, 1798,
- 0x2A, 1816,
- 0x2B, 1903,
- 0x2C, 1937,
- 0x2D, 2024,
- 0x2E, 2111,
- 0x2F, 2129,
- 0x30, 2147,
- 0x31, 2150,
- 0x32, 2153,
- 0x33, 2156,
- 0x34, 2159,
- 0x35, 2162,
- 0x38, 2172,
- 0x3A, 3073,
- 0x40, 3484,
- 0x41, 3513,
- 0x42, 3542,
- 0x43, 3571,
- 0x44, 3600,
- 0x45, 3629,
- 0x46, 3658,
- 0x47, 3687,
- 0x48, 3716,
- 0x49, 3745,
- 0x4A, 3774,
- 0x4B, 3803,
- 0x4C, 3832,
- 0x4D, 3861,
- 0x4E, 3890,
- 0x4F, 3919,
- 0x50, 3948,
- 0x51, 3966,
- 0x52, 4000,
- 0x53, 4018,
- 0x54, 4036,
- 0x55, 4054,
- 0x56, 4072,
- 0x57, 4090,
- 0x58, 4108,
- 0x59, 4142,
- 0x5A, 4176,
- 0x5B, 4210,
- 0x5C, 4236,
- 0x5D, 4270,
- 0x5E, 4304,
- 0x5F, 4338,
- 0x60, 4372,
- 0x61, 4390,
- 0x62, 4408,
- 0x63, 4426,
- 0x64, 4444,
- 0x65, 4462,
- 0x66, 4480,
- 0x67, 4498,
- 0x68, 4516,
- 0x69, 4534,
- 0x6A, 4552,
- 0x6B, 4570,
- 0x6C, 4588,
- 0x6D, 4598,
- 0x6E, 4608,
- 0x6F, 4675,
- 0x70, 4701,
- 0x71, 4743,
- 0x72, 4806,
- 0x73, 4869,
- 0x74, 4934,
- 0x75, 4952,
- 0x76, 4970,
- 0x77, 4988,
- 0x7C, 4991,
- 0x7D, 5009,
- 0x7E, 5027,
- 0x7F, 5104,
- 0x80, 5130,
- 0x81, 5161,
- 0x82, 5192,
- 0x83, 5223,
- 0x84, 5254,
- 0x85, 5285,
- 0x86, 5316,
- 0x87, 5347,
- 0x88, 5378,
- 0x89, 5409,
- 0x8A, 5440,
- 0x8B, 5471,
- 0x8C, 5502,
- 0x8D, 5533,
- 0x8E, 5564,
- 0x8F, 5595,
- 0x90, 5626,
- 0x91, 5631,
- 0x92, 5636,
- 0x93, 5641,
- 0x94, 5646,
- 0x95, 5651,
- 0x96, 5656,
- 0x97, 5661,
- 0x98, 5666,
- 0x99, 5671,
- 0x9A, 5676,
- 0x9B, 5681,
- 0x9C, 5686,
- 0x9D, 5691,
- 0x9E, 5696,
- 0x9F, 5701,
- 0xA0, 5706,
- 0xA1, 5710,
- 0xA2, 5737,
- 0xA3, 5740,
- 0xA4, 5769,
- 0xA5, 5804,
- 0xA8, 5836,
- 0xA9, 5840,
- 0xAA, 5867,
- 0xAB, 5870,
- 0xAC, 5899,
- 0xAD, 5934,
- 0xAE, 5966,
- 0xAF, 6224,
- 0xB0, 6253,
- 0xB1, 6259,
- 0xB2, 6288,
- 0xB3, 6317,
- 0xB4, 6346,
- 0xB5, 6375,
- 0xB6, 6404,
- 0xB7, 6433,
- 0xB8, 6462,
- 0xB9, 6499,
- 0xBA, 6502,
- 0xBB, 6627,
- 0xBC, 6656,
- 0xBD, 6723,
- 0xBE, 6790,
- 0xBF, 6819,
- 0xC0, 6848,
- 0xC1, 6854,
- 0xC2, 6883,
- 0xC3, 6925,
- 0xC4, 6954,
- 0xC5, 6976,
- 0xC6, 6998,
- 0xC7, 7020,
- 0xc8, 7149,
- 0xc9, 7149,
- 0xca, 7149,
- 0xcb, 7149,
- 0xcc, 7149,
- 0xcd, 7149,
- 0xce, 7149,
- 0xcf, 7149,
- 0xD0, 7172,
- 0xD1, 7190,
- 0xD2, 7208,
- 0xD3, 7226,
- 0xD4, 7244,
- 0xD5, 7262,
- 0xD6, 7280,
- 0xD7, 7306,
- 0xD8, 7324,
- 0xD9, 7342,
- 0xDA, 7360,
- 0xDB, 7378,
- 0xDC, 7396,
- 0xDD, 7414,
- 0xDE, 7432,
- 0xDF, 7450,
- 0xE0, 7468,
- 0xE1, 7486,
- 0xE2, 7504,
- 0xE3, 7522,
- 0xE4, 7540,
- 0xE5, 7558,
- 0xE6, 7576,
- 0xE7, 7602,
- 0xE8, 7620,
- 0xE9, 7638,
- 0xEA, 7656,
- 0xEB, 7674,
- 0xEC, 7692,
- 0xED, 7710,
- 0xEE, 7728,
- 0xEF, 7746,
- 0xF0, 7764,
- 0xF1, 7774,
- 0xF2, 7792,
- 0xF3, 7810,
- 0xF4, 7828,
- 0xF5, 7846,
- 0xF6, 7864,
- 0xF7, 7882,
- 0xF8, 7900,
- 0xF9, 7918,
- 0xFA, 7936,
- 0xFB, 7954,
- 0xFC, 7972,
- 0xFD, 7990,
- 0xFE, 8008,
- uint16(x86_xFail),
- /*1180*/ uint16(x86_xCondSlashR),
- 1189, // 0
- 1205, // 1
- 1221, // 2
- 1225, // 3
- 1229, // 4
- 1233, // 5
- 0, // 6
- 0, // 7
- /*1189*/ uint16(x86_xCondDataSize), 1193, 1197, 1201,
- /*1193*/ uint16(x86_xSetOp), uint16(x86_SLDT),
- /*1195*/ uint16(x86_xArgRM16),
- /*1196*/ uint16(x86_xMatch),
- /*1197*/ uint16(x86_xSetOp), uint16(x86_SLDT),
- /*1199*/ uint16(x86_xArgR32M16),
- /*1200*/ uint16(x86_xMatch),
- /*1201*/ uint16(x86_xSetOp), uint16(x86_SLDT),
- /*1203*/ uint16(x86_xArgR64M16),
- /*1204*/ uint16(x86_xMatch),
- /*1205*/ uint16(x86_xCondDataSize), 1209, 1213, 1217,
- /*1209*/ uint16(x86_xSetOp), uint16(x86_STR),
- /*1211*/ uint16(x86_xArgRM16),
- /*1212*/ uint16(x86_xMatch),
- /*1213*/ uint16(x86_xSetOp), uint16(x86_STR),
- /*1215*/ uint16(x86_xArgR32M16),
- /*1216*/ uint16(x86_xMatch),
- /*1217*/ uint16(x86_xSetOp), uint16(x86_STR),
- /*1219*/ uint16(x86_xArgR64M16),
- /*1220*/ uint16(x86_xMatch),
- /*1221*/ uint16(x86_xSetOp), uint16(x86_LLDT),
- /*1223*/ uint16(x86_xArgRM16),
- /*1224*/ uint16(x86_xMatch),
- /*1225*/ uint16(x86_xSetOp), uint16(x86_LTR),
- /*1227*/ uint16(x86_xArgRM16),
- /*1228*/ uint16(x86_xMatch),
- /*1229*/ uint16(x86_xSetOp), uint16(x86_VERR),
- /*1231*/ uint16(x86_xArgRM16),
- /*1232*/ uint16(x86_xMatch),
- /*1233*/ uint16(x86_xSetOp), uint16(x86_VERW),
- /*1235*/ uint16(x86_xArgRM16),
- /*1236*/ uint16(x86_xMatch),
- /*1237*/ uint16(x86_xCondByte), 8,
- 0xC8, 1318,
- 0xC9, 1321,
- 0xD0, 1324,
- 0xD1, 1327,
- 0xD5, 1330,
- 0xD6, 1333,
- 0xF8, 1336,
- 0xF9, 1342,
- /*1255*/ uint16(x86_xCondSlashR),
- 1264, // 0
- 1268, // 1
- 1272, // 2
- 1283, // 3
- 1294, // 4
- 0, // 5
- 1310, // 6
- 1314, // 7
- /*1264*/ uint16(x86_xSetOp), uint16(x86_SGDT),
- /*1266*/ uint16(x86_xArgM),
- /*1267*/ uint16(x86_xMatch),
- /*1268*/ uint16(x86_xSetOp), uint16(x86_SIDT),
- /*1270*/ uint16(x86_xArgM),
- /*1271*/ uint16(x86_xMatch),
- /*1272*/ uint16(x86_xCondIs64), 1275, 1279,
- /*1275*/ uint16(x86_xSetOp), uint16(x86_LGDT),
- /*1277*/ uint16(x86_xArgM16and32),
- /*1278*/ uint16(x86_xMatch),
- /*1279*/ uint16(x86_xSetOp), uint16(x86_LGDT),
- /*1281*/ uint16(x86_xArgM16and64),
- /*1282*/ uint16(x86_xMatch),
- /*1283*/ uint16(x86_xCondIs64), 1286, 1290,
- /*1286*/ uint16(x86_xSetOp), uint16(x86_LIDT),
- /*1288*/ uint16(x86_xArgM16and32),
- /*1289*/ uint16(x86_xMatch),
- /*1290*/ uint16(x86_xSetOp), uint16(x86_LIDT),
- /*1292*/ uint16(x86_xArgM16and64),
- /*1293*/ uint16(x86_xMatch),
- /*1294*/ uint16(x86_xCondDataSize), 1298, 1302, 1306,
- /*1298*/ uint16(x86_xSetOp), uint16(x86_SMSW),
- /*1300*/ uint16(x86_xArgRM16),
- /*1301*/ uint16(x86_xMatch),
- /*1302*/ uint16(x86_xSetOp), uint16(x86_SMSW),
- /*1304*/ uint16(x86_xArgR32M16),
- /*1305*/ uint16(x86_xMatch),
- /*1306*/ uint16(x86_xSetOp), uint16(x86_SMSW),
- /*1308*/ uint16(x86_xArgR64M16),
- /*1309*/ uint16(x86_xMatch),
- /*1310*/ uint16(x86_xSetOp), uint16(x86_LMSW),
- /*1312*/ uint16(x86_xArgRM16),
- /*1313*/ uint16(x86_xMatch),
- /*1314*/ uint16(x86_xSetOp), uint16(x86_INVLPG),
- /*1316*/ uint16(x86_xArgM),
- /*1317*/ uint16(x86_xMatch),
- /*1318*/ uint16(x86_xSetOp), uint16(x86_MONITOR),
- /*1320*/ uint16(x86_xMatch),
- /*1321*/ uint16(x86_xSetOp), uint16(x86_MWAIT),
- /*1323*/ uint16(x86_xMatch),
- /*1324*/ uint16(x86_xSetOp), uint16(x86_XGETBV),
- /*1326*/ uint16(x86_xMatch),
- /*1327*/ uint16(x86_xSetOp), uint16(x86_XSETBV),
- /*1329*/ uint16(x86_xMatch),
- /*1330*/ uint16(x86_xSetOp), uint16(x86_XEND),
- /*1332*/ uint16(x86_xMatch),
- /*1333*/ uint16(x86_xSetOp), uint16(x86_XTEST),
- /*1335*/ uint16(x86_xMatch),
- /*1336*/ uint16(x86_xCondIs64), 0, 1339,
- /*1339*/ uint16(x86_xSetOp), uint16(x86_SWAPGS),
- /*1341*/ uint16(x86_xMatch),
- /*1342*/ uint16(x86_xSetOp), uint16(x86_RDTSCP),
- /*1344*/ uint16(x86_xMatch),
- /*1345*/ uint16(x86_xCondDataSize), 1349, 1355, 1361,
- /*1349*/ uint16(x86_xSetOp), uint16(x86_LAR),
- /*1351*/ uint16(x86_xReadSlashR),
- /*1352*/ uint16(x86_xArgR16),
- /*1353*/ uint16(x86_xArgRM16),
- /*1354*/ uint16(x86_xMatch),
- /*1355*/ uint16(x86_xSetOp), uint16(x86_LAR),
- /*1357*/ uint16(x86_xReadSlashR),
- /*1358*/ uint16(x86_xArgR32),
- /*1359*/ uint16(x86_xArgR32M16),
- /*1360*/ uint16(x86_xMatch),
- /*1361*/ uint16(x86_xSetOp), uint16(x86_LAR),
- /*1363*/ uint16(x86_xReadSlashR),
- /*1364*/ uint16(x86_xArgR64),
- /*1365*/ uint16(x86_xArgR64M16),
- /*1366*/ uint16(x86_xMatch),
- /*1367*/ uint16(x86_xCondDataSize), 1371, 1377, 1383,
- /*1371*/ uint16(x86_xSetOp), uint16(x86_LSL),
- /*1373*/ uint16(x86_xReadSlashR),
- /*1374*/ uint16(x86_xArgR16),
- /*1375*/ uint16(x86_xArgRM16),
- /*1376*/ uint16(x86_xMatch),
- /*1377*/ uint16(x86_xSetOp), uint16(x86_LSL),
- /*1379*/ uint16(x86_xReadSlashR),
- /*1380*/ uint16(x86_xArgR32),
- /*1381*/ uint16(x86_xArgR32M16),
- /*1382*/ uint16(x86_xMatch),
- /*1383*/ uint16(x86_xSetOp), uint16(x86_LSL),
- /*1385*/ uint16(x86_xReadSlashR),
- /*1386*/ uint16(x86_xArgR64),
- /*1387*/ uint16(x86_xArgR32M16),
- /*1388*/ uint16(x86_xMatch),
- /*1389*/ uint16(x86_xCondIs64), 0, 1392,
- /*1392*/ uint16(x86_xSetOp), uint16(x86_SYSCALL),
- /*1394*/ uint16(x86_xMatch),
- /*1395*/ uint16(x86_xSetOp), uint16(x86_CLTS),
- /*1397*/ uint16(x86_xMatch),
- /*1398*/ uint16(x86_xCondIs64), 0, 1401,
- /*1401*/ uint16(x86_xSetOp), uint16(x86_SYSRET),
- /*1403*/ uint16(x86_xMatch),
- /*1404*/ uint16(x86_xSetOp), uint16(x86_INVD),
- /*1406*/ uint16(x86_xMatch),
- /*1407*/ uint16(x86_xSetOp), uint16(x86_WBINVD),
- /*1409*/ uint16(x86_xMatch),
- /*1410*/ uint16(x86_xSetOp), uint16(x86_UD2),
- /*1412*/ uint16(x86_xMatch),
- /*1413*/ uint16(x86_xCondSlashR),
- 0, // 0
- 1422, // 1
- 0, // 2
- 0, // 3
- 0, // 4
- 0, // 5
- 0, // 6
- 0, // 7
- /*1422*/ uint16(x86_xSetOp), uint16(x86_PREFETCHW),
- /*1424*/ uint16(x86_xArgM8),
- /*1425*/ uint16(x86_xMatch),
- /*1426*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 1454,
- 0xF2, 1448,
- 0x66, 1442,
- 0x0, 1436,
- /*1436*/ uint16(x86_xSetOp), uint16(x86_MOVUPS),
- /*1438*/ uint16(x86_xReadSlashR),
- /*1439*/ uint16(x86_xArgXmm1),
- /*1440*/ uint16(x86_xArgXmm2M128),
- /*1441*/ uint16(x86_xMatch),
- /*1442*/ uint16(x86_xSetOp), uint16(x86_MOVUPD),
- /*1444*/ uint16(x86_xReadSlashR),
- /*1445*/ uint16(x86_xArgXmm1),
- /*1446*/ uint16(x86_xArgXmm2M128),
- /*1447*/ uint16(x86_xMatch),
- /*1448*/ uint16(x86_xSetOp), uint16(x86_MOVSD_XMM),
- /*1450*/ uint16(x86_xReadSlashR),
- /*1451*/ uint16(x86_xArgXmm1),
- /*1452*/ uint16(x86_xArgXmm2M64),
- /*1453*/ uint16(x86_xMatch),
- /*1454*/ uint16(x86_xSetOp), uint16(x86_MOVSS),
- /*1456*/ uint16(x86_xReadSlashR),
- /*1457*/ uint16(x86_xArgXmm1),
- /*1458*/ uint16(x86_xArgXmm2M32),
- /*1459*/ uint16(x86_xMatch),
- /*1460*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 1488,
- 0xF2, 1482,
- 0x66, 1476,
- 0x0, 1470,
- /*1470*/ uint16(x86_xSetOp), uint16(x86_MOVUPS),
- /*1472*/ uint16(x86_xReadSlashR),
- /*1473*/ uint16(x86_xArgXmm2M128),
- /*1474*/ uint16(x86_xArgXmm1),
- /*1475*/ uint16(x86_xMatch),
- /*1476*/ uint16(x86_xSetOp), uint16(x86_MOVUPD),
- /*1478*/ uint16(x86_xReadSlashR),
- /*1479*/ uint16(x86_xArgXmm2M128),
- /*1480*/ uint16(x86_xArgXmm),
- /*1481*/ uint16(x86_xMatch),
- /*1482*/ uint16(x86_xSetOp), uint16(x86_MOVSD_XMM),
- /*1484*/ uint16(x86_xReadSlashR),
- /*1485*/ uint16(x86_xArgXmm2M64),
- /*1486*/ uint16(x86_xArgXmm1),
- /*1487*/ uint16(x86_xMatch),
- /*1488*/ uint16(x86_xSetOp), uint16(x86_MOVSS),
- /*1490*/ uint16(x86_xReadSlashR),
- /*1491*/ uint16(x86_xArgXmm2M32),
- /*1492*/ uint16(x86_xArgXmm),
- /*1493*/ uint16(x86_xMatch),
- /*1494*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 1531,
- 0xF2, 1525,
- 0x66, 1519,
- 0x0, 1504,
- /*1504*/ uint16(x86_xCondIsMem), 1507, 1513,
- /*1507*/ uint16(x86_xSetOp), uint16(x86_MOVHLPS),
- /*1509*/ uint16(x86_xReadSlashR),
- /*1510*/ uint16(x86_xArgXmm1),
- /*1511*/ uint16(x86_xArgXmm2),
- /*1512*/ uint16(x86_xMatch),
- /*1513*/ uint16(x86_xSetOp), uint16(x86_MOVLPS),
- /*1515*/ uint16(x86_xReadSlashR),
- /*1516*/ uint16(x86_xArgXmm),
- /*1517*/ uint16(x86_xArgM64),
- /*1518*/ uint16(x86_xMatch),
- /*1519*/ uint16(x86_xSetOp), uint16(x86_MOVLPD),
- /*1521*/ uint16(x86_xReadSlashR),
- /*1522*/ uint16(x86_xArgXmm),
- /*1523*/ uint16(x86_xArgXmm2M64),
- /*1524*/ uint16(x86_xMatch),
- /*1525*/ uint16(x86_xSetOp), uint16(x86_MOVDDUP),
- /*1527*/ uint16(x86_xReadSlashR),
- /*1528*/ uint16(x86_xArgXmm1),
- /*1529*/ uint16(x86_xArgXmm2M64),
- /*1530*/ uint16(x86_xMatch),
- /*1531*/ uint16(x86_xSetOp), uint16(x86_MOVSLDUP),
- /*1533*/ uint16(x86_xReadSlashR),
- /*1534*/ uint16(x86_xArgXmm1),
- /*1535*/ uint16(x86_xArgXmm2M128),
- /*1536*/ uint16(x86_xMatch),
- /*1537*/ uint16(x86_xCondPrefix), 2,
- 0x66, 1549,
- 0x0, 1543,
- /*1543*/ uint16(x86_xSetOp), uint16(x86_MOVLPS),
- /*1545*/ uint16(x86_xReadSlashR),
- /*1546*/ uint16(x86_xArgM64),
- /*1547*/ uint16(x86_xArgXmm),
- /*1548*/ uint16(x86_xMatch),
- /*1549*/ uint16(x86_xSetOp), uint16(x86_MOVLPD),
- /*1551*/ uint16(x86_xReadSlashR),
- /*1552*/ uint16(x86_xArgXmm2M64),
- /*1553*/ uint16(x86_xArgXmm),
- /*1554*/ uint16(x86_xMatch),
- /*1555*/ uint16(x86_xCondPrefix), 2,
- 0x66, 1567,
- 0x0, 1561,
- /*1561*/ uint16(x86_xSetOp), uint16(x86_UNPCKLPS),
- /*1563*/ uint16(x86_xReadSlashR),
- /*1564*/ uint16(x86_xArgXmm1),
- /*1565*/ uint16(x86_xArgXmm2M128),
- /*1566*/ uint16(x86_xMatch),
- /*1567*/ uint16(x86_xSetOp), uint16(x86_UNPCKLPD),
- /*1569*/ uint16(x86_xReadSlashR),
- /*1570*/ uint16(x86_xArgXmm1),
- /*1571*/ uint16(x86_xArgXmm2M128),
- /*1572*/ uint16(x86_xMatch),
- /*1573*/ uint16(x86_xCondPrefix), 2,
- 0x66, 1585,
- 0x0, 1579,
- /*1579*/ uint16(x86_xSetOp), uint16(x86_UNPCKHPS),
- /*1581*/ uint16(x86_xReadSlashR),
- /*1582*/ uint16(x86_xArgXmm1),
- /*1583*/ uint16(x86_xArgXmm2M128),
- /*1584*/ uint16(x86_xMatch),
- /*1585*/ uint16(x86_xSetOp), uint16(x86_UNPCKHPD),
- /*1587*/ uint16(x86_xReadSlashR),
- /*1588*/ uint16(x86_xArgXmm1),
- /*1589*/ uint16(x86_xArgXmm2M128),
- /*1590*/ uint16(x86_xMatch),
- /*1591*/ uint16(x86_xCondPrefix), 3,
- 0xF3, 1620,
- 0x66, 1614,
- 0x0, 1599,
- /*1599*/ uint16(x86_xCondIsMem), 1602, 1608,
- /*1602*/ uint16(x86_xSetOp), uint16(x86_MOVLHPS),
- /*1604*/ uint16(x86_xReadSlashR),
- /*1605*/ uint16(x86_xArgXmm1),
- /*1606*/ uint16(x86_xArgXmm2),
- /*1607*/ uint16(x86_xMatch),
- /*1608*/ uint16(x86_xSetOp), uint16(x86_MOVHPS),
- /*1610*/ uint16(x86_xReadSlashR),
- /*1611*/ uint16(x86_xArgXmm),
- /*1612*/ uint16(x86_xArgM64),
- /*1613*/ uint16(x86_xMatch),
- /*1614*/ uint16(x86_xSetOp), uint16(x86_MOVHPD),
- /*1616*/ uint16(x86_xReadSlashR),
- /*1617*/ uint16(x86_xArgXmm),
- /*1618*/ uint16(x86_xArgXmm2M64),
- /*1619*/ uint16(x86_xMatch),
- /*1620*/ uint16(x86_xSetOp), uint16(x86_MOVSHDUP),
- /*1622*/ uint16(x86_xReadSlashR),
- /*1623*/ uint16(x86_xArgXmm1),
- /*1624*/ uint16(x86_xArgXmm2M128),
- /*1625*/ uint16(x86_xMatch),
- /*1626*/ uint16(x86_xCondPrefix), 2,
- 0x66, 1638,
- 0x0, 1632,
- /*1632*/ uint16(x86_xSetOp), uint16(x86_MOVHPS),
- /*1634*/ uint16(x86_xReadSlashR),
- /*1635*/ uint16(x86_xArgM64),
- /*1636*/ uint16(x86_xArgXmm),
- /*1637*/ uint16(x86_xMatch),
- /*1638*/ uint16(x86_xSetOp), uint16(x86_MOVHPD),
- /*1640*/ uint16(x86_xReadSlashR),
- /*1641*/ uint16(x86_xArgXmm2M64),
- /*1642*/ uint16(x86_xArgXmm),
- /*1643*/ uint16(x86_xMatch),
- /*1644*/ uint16(x86_xCondSlashR),
- 1653, // 0
- 1657, // 1
- 1661, // 2
- 1665, // 3
- 0, // 4
- 0, // 5
- 0, // 6
- 0, // 7
- /*1653*/ uint16(x86_xSetOp), uint16(x86_PREFETCHNTA),
- /*1655*/ uint16(x86_xArgM8),
- /*1656*/ uint16(x86_xMatch),
- /*1657*/ uint16(x86_xSetOp), uint16(x86_PREFETCHT0),
- /*1659*/ uint16(x86_xArgM8),
- /*1660*/ uint16(x86_xMatch),
- /*1661*/ uint16(x86_xSetOp), uint16(x86_PREFETCHT1),
- /*1663*/ uint16(x86_xArgM8),
- /*1664*/ uint16(x86_xMatch),
- /*1665*/ uint16(x86_xSetOp), uint16(x86_PREFETCHT2),
- /*1667*/ uint16(x86_xArgM8),
- /*1668*/ uint16(x86_xMatch),
- /*1669*/ uint16(x86_xCondSlashR),
- 1678, // 0
- 0, // 1
- 0, // 2
- 0, // 3
- 0, // 4
- 0, // 5
- 0, // 6
- 0, // 7
- /*1678*/ uint16(x86_xCondDataSize), 1682, 1686, 0,
- /*1682*/ uint16(x86_xSetOp), uint16(x86_NOP),
- /*1684*/ uint16(x86_xArgRM16),
- /*1685*/ uint16(x86_xMatch),
- /*1686*/ uint16(x86_xSetOp), uint16(x86_NOP),
- /*1688*/ uint16(x86_xArgRM32),
- /*1689*/ uint16(x86_xMatch),
- /*1690*/ uint16(x86_xCondIs64), 1693, 1699,
- /*1693*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1695*/ uint16(x86_xReadSlashR),
- /*1696*/ uint16(x86_xArgRmf32),
- /*1697*/ uint16(x86_xArgCR0dashCR7),
- /*1698*/ uint16(x86_xMatch),
- /*1699*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1701*/ uint16(x86_xReadSlashR),
- /*1702*/ uint16(x86_xArgRmf64),
- /*1703*/ uint16(x86_xArgCR0dashCR7),
- /*1704*/ uint16(x86_xMatch),
- /*1705*/ uint16(x86_xCondIs64), 1708, 1714,
- /*1708*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1710*/ uint16(x86_xReadSlashR),
- /*1711*/ uint16(x86_xArgRmf32),
- /*1712*/ uint16(x86_xArgDR0dashDR7),
- /*1713*/ uint16(x86_xMatch),
- /*1714*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1716*/ uint16(x86_xReadSlashR),
- /*1717*/ uint16(x86_xArgRmf64),
- /*1718*/ uint16(x86_xArgDR0dashDR7),
- /*1719*/ uint16(x86_xMatch),
- /*1720*/ uint16(x86_xCondIs64), 1723, 1729,
- /*1723*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1725*/ uint16(x86_xReadSlashR),
- /*1726*/ uint16(x86_xArgCR0dashCR7),
- /*1727*/ uint16(x86_xArgRmf32),
- /*1728*/ uint16(x86_xMatch),
- /*1729*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1731*/ uint16(x86_xReadSlashR),
- /*1732*/ uint16(x86_xArgCR0dashCR7),
- /*1733*/ uint16(x86_xArgRmf64),
- /*1734*/ uint16(x86_xMatch),
- /*1735*/ uint16(x86_xCondIs64), 1738, 1744,
- /*1738*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1740*/ uint16(x86_xReadSlashR),
- /*1741*/ uint16(x86_xArgDR0dashDR7),
- /*1742*/ uint16(x86_xArgRmf32),
- /*1743*/ uint16(x86_xMatch),
- /*1744*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1746*/ uint16(x86_xReadSlashR),
- /*1747*/ uint16(x86_xArgDR0dashDR7),
- /*1748*/ uint16(x86_xArgRmf64),
- /*1749*/ uint16(x86_xMatch),
- /*1750*/ uint16(x86_xCondIs64), 1753, 1759,
- /*1753*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1755*/ uint16(x86_xReadSlashR),
- /*1756*/ uint16(x86_xArgRmf32),
- /*1757*/ uint16(x86_xArgTR0dashTR7),
- /*1758*/ uint16(x86_xMatch),
- /*1759*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1761*/ uint16(x86_xReadSlashR),
- /*1762*/ uint16(x86_xArgRmf64),
- /*1763*/ uint16(x86_xArgTR0dashTR7),
- /*1764*/ uint16(x86_xMatch),
- /*1765*/ uint16(x86_xCondIs64), 1768, 1774,
- /*1768*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1770*/ uint16(x86_xReadSlashR),
- /*1771*/ uint16(x86_xArgTR0dashTR7),
- /*1772*/ uint16(x86_xArgRmf32),
- /*1773*/ uint16(x86_xMatch),
- /*1774*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*1776*/ uint16(x86_xReadSlashR),
- /*1777*/ uint16(x86_xArgTR0dashTR7),
- /*1778*/ uint16(x86_xArgRmf64),
- /*1779*/ uint16(x86_xMatch),
- /*1780*/ uint16(x86_xCondPrefix), 2,
- 0x66, 1792,
- 0x0, 1786,
- /*1786*/ uint16(x86_xSetOp), uint16(x86_MOVAPS),
- /*1788*/ uint16(x86_xReadSlashR),
- /*1789*/ uint16(x86_xArgXmm1),
- /*1790*/ uint16(x86_xArgXmm2M128),
- /*1791*/ uint16(x86_xMatch),
- /*1792*/ uint16(x86_xSetOp), uint16(x86_MOVAPD),
- /*1794*/ uint16(x86_xReadSlashR),
- /*1795*/ uint16(x86_xArgXmm1),
- /*1796*/ uint16(x86_xArgXmm2M128),
- /*1797*/ uint16(x86_xMatch),
- /*1798*/ uint16(x86_xCondPrefix), 2,
- 0x66, 1810,
- 0x0, 1804,
- /*1804*/ uint16(x86_xSetOp), uint16(x86_MOVAPS),
- /*1806*/ uint16(x86_xReadSlashR),
- /*1807*/ uint16(x86_xArgXmm2M128),
- /*1808*/ uint16(x86_xArgXmm1),
- /*1809*/ uint16(x86_xMatch),
- /*1810*/ uint16(x86_xSetOp), uint16(x86_MOVAPD),
- /*1812*/ uint16(x86_xReadSlashR),
- /*1813*/ uint16(x86_xArgXmm2M128),
- /*1814*/ uint16(x86_xArgXmm1),
- /*1815*/ uint16(x86_xMatch),
- /*1816*/ uint16(x86_xCondIs64), 1819, 1873,
- /*1819*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 1857,
- 0xF2, 1841,
- 0x66, 1835,
- 0x0, 1829,
- /*1829*/ uint16(x86_xSetOp), uint16(x86_CVTPI2PS),
- /*1831*/ uint16(x86_xReadSlashR),
- /*1832*/ uint16(x86_xArgXmm),
- /*1833*/ uint16(x86_xArgMmM64),
- /*1834*/ uint16(x86_xMatch),
- /*1835*/ uint16(x86_xSetOp), uint16(x86_CVTPI2PD),
- /*1837*/ uint16(x86_xReadSlashR),
- /*1838*/ uint16(x86_xArgXmm),
- /*1839*/ uint16(x86_xArgMmM64),
- /*1840*/ uint16(x86_xMatch),
- /*1841*/ uint16(x86_xCondDataSize), 1845, 1851, 0,
- /*1845*/ uint16(x86_xSetOp), uint16(x86_CVTSI2SD),
- /*1847*/ uint16(x86_xReadSlashR),
- /*1848*/ uint16(x86_xArgXmm),
- /*1849*/ uint16(x86_xArgRM32),
- /*1850*/ uint16(x86_xMatch),
- /*1851*/ uint16(x86_xSetOp), uint16(x86_CVTSI2SD),
- /*1853*/ uint16(x86_xReadSlashR),
- /*1854*/ uint16(x86_xArgXmm),
- /*1855*/ uint16(x86_xArgRM32),
- /*1856*/ uint16(x86_xMatch),
- /*1857*/ uint16(x86_xCondDataSize), 1861, 1867, 0,
- /*1861*/ uint16(x86_xSetOp), uint16(x86_CVTSI2SS),
- /*1863*/ uint16(x86_xReadSlashR),
- /*1864*/ uint16(x86_xArgXmm),
- /*1865*/ uint16(x86_xArgRM32),
- /*1866*/ uint16(x86_xMatch),
- /*1867*/ uint16(x86_xSetOp), uint16(x86_CVTSI2SS),
- /*1869*/ uint16(x86_xReadSlashR),
- /*1870*/ uint16(x86_xArgXmm),
- /*1871*/ uint16(x86_xArgRM32),
- /*1872*/ uint16(x86_xMatch),
- /*1873*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 1893,
- 0xF2, 1883,
- 0x66, 1835,
- 0x0, 1829,
- /*1883*/ uint16(x86_xCondDataSize), 1845, 1851, 1887,
- /*1887*/ uint16(x86_xSetOp), uint16(x86_CVTSI2SD),
- /*1889*/ uint16(x86_xReadSlashR),
- /*1890*/ uint16(x86_xArgXmm),
- /*1891*/ uint16(x86_xArgRM64),
- /*1892*/ uint16(x86_xMatch),
- /*1893*/ uint16(x86_xCondDataSize), 1861, 1867, 1897,
- /*1897*/ uint16(x86_xSetOp), uint16(x86_CVTSI2SS),
- /*1899*/ uint16(x86_xReadSlashR),
- /*1900*/ uint16(x86_xArgXmm),
- /*1901*/ uint16(x86_xArgRM64),
- /*1902*/ uint16(x86_xMatch),
- /*1903*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 1931,
- 0xF2, 1925,
- 0x66, 1919,
- 0x0, 1913,
- /*1913*/ uint16(x86_xSetOp), uint16(x86_MOVNTPS),
- /*1915*/ uint16(x86_xReadSlashR),
- /*1916*/ uint16(x86_xArgM128),
- /*1917*/ uint16(x86_xArgXmm),
- /*1918*/ uint16(x86_xMatch),
- /*1919*/ uint16(x86_xSetOp), uint16(x86_MOVNTPD),
- /*1921*/ uint16(x86_xReadSlashR),
- /*1922*/ uint16(x86_xArgM128),
- /*1923*/ uint16(x86_xArgXmm),
- /*1924*/ uint16(x86_xMatch),
- /*1925*/ uint16(x86_xSetOp), uint16(x86_MOVNTSD),
- /*1927*/ uint16(x86_xReadSlashR),
- /*1928*/ uint16(x86_xArgM64),
- /*1929*/ uint16(x86_xArgXmm),
- /*1930*/ uint16(x86_xMatch),
- /*1931*/ uint16(x86_xSetOp), uint16(x86_MOVNTSS),
- /*1933*/ uint16(x86_xReadSlashR),
- /*1934*/ uint16(x86_xArgM32),
- /*1935*/ uint16(x86_xArgXmm),
- /*1936*/ uint16(x86_xMatch),
- /*1937*/ uint16(x86_xCondIs64), 1940, 1994,
- /*1940*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 1978,
- 0xF2, 1962,
- 0x66, 1956,
- 0x0, 1950,
- /*1950*/ uint16(x86_xSetOp), uint16(x86_CVTTPS2PI),
- /*1952*/ uint16(x86_xReadSlashR),
- /*1953*/ uint16(x86_xArgMm),
- /*1954*/ uint16(x86_xArgXmmM64),
- /*1955*/ uint16(x86_xMatch),
- /*1956*/ uint16(x86_xSetOp), uint16(x86_CVTTPD2PI),
- /*1958*/ uint16(x86_xReadSlashR),
- /*1959*/ uint16(x86_xArgMm),
- /*1960*/ uint16(x86_xArgXmmM128),
- /*1961*/ uint16(x86_xMatch),
- /*1962*/ uint16(x86_xCondDataSize), 1966, 1972, 0,
- /*1966*/ uint16(x86_xSetOp), uint16(x86_CVTTSD2SI),
- /*1968*/ uint16(x86_xReadSlashR),
- /*1969*/ uint16(x86_xArgR32),
- /*1970*/ uint16(x86_xArgXmmM64),
- /*1971*/ uint16(x86_xMatch),
- /*1972*/ uint16(x86_xSetOp), uint16(x86_CVTTSD2SI),
- /*1974*/ uint16(x86_xReadSlashR),
- /*1975*/ uint16(x86_xArgR32),
- /*1976*/ uint16(x86_xArgXmmM64),
- /*1977*/ uint16(x86_xMatch),
- /*1978*/ uint16(x86_xCondDataSize), 1982, 1988, 0,
- /*1982*/ uint16(x86_xSetOp), uint16(x86_CVTTSS2SI),
- /*1984*/ uint16(x86_xReadSlashR),
- /*1985*/ uint16(x86_xArgR32),
- /*1986*/ uint16(x86_xArgXmmM32),
- /*1987*/ uint16(x86_xMatch),
- /*1988*/ uint16(x86_xSetOp), uint16(x86_CVTTSS2SI),
- /*1990*/ uint16(x86_xReadSlashR),
- /*1991*/ uint16(x86_xArgR32),
- /*1992*/ uint16(x86_xArgXmmM32),
- /*1993*/ uint16(x86_xMatch),
- /*1994*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 2014,
- 0xF2, 2004,
- 0x66, 1956,
- 0x0, 1950,
- /*2004*/ uint16(x86_xCondDataSize), 1966, 1972, 2008,
- /*2008*/ uint16(x86_xSetOp), uint16(x86_CVTTSD2SI),
- /*2010*/ uint16(x86_xReadSlashR),
- /*2011*/ uint16(x86_xArgR64),
- /*2012*/ uint16(x86_xArgXmmM64),
- /*2013*/ uint16(x86_xMatch),
- /*2014*/ uint16(x86_xCondDataSize), 1982, 1988, 2018,
- /*2018*/ uint16(x86_xSetOp), uint16(x86_CVTTSS2SI),
- /*2020*/ uint16(x86_xReadSlashR),
- /*2021*/ uint16(x86_xArgR64),
- /*2022*/ uint16(x86_xArgXmmM32),
- /*2023*/ uint16(x86_xMatch),
- /*2024*/ uint16(x86_xCondIs64), 2027, 2081,
- /*2027*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 2065,
- 0xF2, 2049,
- 0x66, 2043,
- 0x0, 2037,
- /*2037*/ uint16(x86_xSetOp), uint16(x86_CVTPS2PI),
- /*2039*/ uint16(x86_xReadSlashR),
- /*2040*/ uint16(x86_xArgMm),
- /*2041*/ uint16(x86_xArgXmmM64),
- /*2042*/ uint16(x86_xMatch),
- /*2043*/ uint16(x86_xSetOp), uint16(x86_CVTPD2PI),
- /*2045*/ uint16(x86_xReadSlashR),
- /*2046*/ uint16(x86_xArgMm),
- /*2047*/ uint16(x86_xArgXmmM128),
- /*2048*/ uint16(x86_xMatch),
- /*2049*/ uint16(x86_xCondDataSize), 2053, 2059, 0,
- /*2053*/ uint16(x86_xSetOp), uint16(x86_CVTSD2SI),
- /*2055*/ uint16(x86_xReadSlashR),
- /*2056*/ uint16(x86_xArgR32),
- /*2057*/ uint16(x86_xArgXmmM64),
- /*2058*/ uint16(x86_xMatch),
- /*2059*/ uint16(x86_xSetOp), uint16(x86_CVTSD2SI),
- /*2061*/ uint16(x86_xReadSlashR),
- /*2062*/ uint16(x86_xArgR32),
- /*2063*/ uint16(x86_xArgXmmM64),
- /*2064*/ uint16(x86_xMatch),
- /*2065*/ uint16(x86_xCondDataSize), 2069, 2075, 0,
- /*2069*/ uint16(x86_xSetOp), uint16(x86_CVTSS2SI),
- /*2071*/ uint16(x86_xReadSlashR),
- /*2072*/ uint16(x86_xArgR32),
- /*2073*/ uint16(x86_xArgXmmM32),
- /*2074*/ uint16(x86_xMatch),
- /*2075*/ uint16(x86_xSetOp), uint16(x86_CVTSS2SI),
- /*2077*/ uint16(x86_xReadSlashR),
- /*2078*/ uint16(x86_xArgR32),
- /*2079*/ uint16(x86_xArgXmmM32),
- /*2080*/ uint16(x86_xMatch),
- /*2081*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 2101,
- 0xF2, 2091,
- 0x66, 2043,
- 0x0, 2037,
- /*2091*/ uint16(x86_xCondDataSize), 2053, 2059, 2095,
- /*2095*/ uint16(x86_xSetOp), uint16(x86_CVTSD2SI),
- /*2097*/ uint16(x86_xReadSlashR),
- /*2098*/ uint16(x86_xArgR64),
- /*2099*/ uint16(x86_xArgXmmM64),
- /*2100*/ uint16(x86_xMatch),
- /*2101*/ uint16(x86_xCondDataSize), 2069, 2075, 2105,
- /*2105*/ uint16(x86_xSetOp), uint16(x86_CVTSS2SI),
- /*2107*/ uint16(x86_xReadSlashR),
- /*2108*/ uint16(x86_xArgR64),
- /*2109*/ uint16(x86_xArgXmmM32),
- /*2110*/ uint16(x86_xMatch),
- /*2111*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2123,
- 0x0, 2117,
- /*2117*/ uint16(x86_xSetOp), uint16(x86_UCOMISS),
- /*2119*/ uint16(x86_xReadSlashR),
- /*2120*/ uint16(x86_xArgXmm1),
- /*2121*/ uint16(x86_xArgXmm2M32),
- /*2122*/ uint16(x86_xMatch),
- /*2123*/ uint16(x86_xSetOp), uint16(x86_UCOMISD),
- /*2125*/ uint16(x86_xReadSlashR),
- /*2126*/ uint16(x86_xArgXmm1),
- /*2127*/ uint16(x86_xArgXmm2M64),
- /*2128*/ uint16(x86_xMatch),
- /*2129*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2141,
- 0x0, 2135,
- /*2135*/ uint16(x86_xSetOp), uint16(x86_COMISS),
- /*2137*/ uint16(x86_xReadSlashR),
- /*2138*/ uint16(x86_xArgXmm1),
- /*2139*/ uint16(x86_xArgXmm2M32),
- /*2140*/ uint16(x86_xMatch),
- /*2141*/ uint16(x86_xSetOp), uint16(x86_COMISD),
- /*2143*/ uint16(x86_xReadSlashR),
- /*2144*/ uint16(x86_xArgXmm1),
- /*2145*/ uint16(x86_xArgXmm2M64),
- /*2146*/ uint16(x86_xMatch),
- /*2147*/ uint16(x86_xSetOp), uint16(x86_WRMSR),
- /*2149*/ uint16(x86_xMatch),
- /*2150*/ uint16(x86_xSetOp), uint16(x86_RDTSC),
- /*2152*/ uint16(x86_xMatch),
- /*2153*/ uint16(x86_xSetOp), uint16(x86_RDMSR),
- /*2155*/ uint16(x86_xMatch),
- /*2156*/ uint16(x86_xSetOp), uint16(x86_RDPMC),
- /*2158*/ uint16(x86_xMatch),
- /*2159*/ uint16(x86_xSetOp), uint16(x86_SYSENTER),
- /*2161*/ uint16(x86_xMatch),
- /*2162*/ uint16(x86_xCondDataSize), 2166, 2166, 2169,
- /*2166*/ uint16(x86_xSetOp), uint16(x86_SYSEXIT),
- /*2168*/ uint16(x86_xMatch),
- /*2169*/ uint16(x86_xSetOp), uint16(x86_SYSEXIT),
- /*2171*/ uint16(x86_xMatch),
- /*2172*/ uint16(x86_xCondByte), 54,
- 0x00, 2283,
- 0x01, 2301,
- 0x02, 2319,
- 0x03, 2337,
- 0x04, 2355,
- 0x05, 2373,
- 0x06, 2391,
- 0x07, 2409,
- 0x08, 2427,
- 0x09, 2445,
- 0x0A, 2463,
- 0x0B, 2481,
- 0x10, 2499,
- 0x14, 2510,
- 0x15, 2521,
- 0x17, 2532,
- 0x1C, 2542,
- 0x1D, 2560,
- 0x1E, 2578,
- 0x20, 2596,
- 0x21, 2606,
- 0x22, 2616,
- 0x23, 2626,
- 0x24, 2636,
- 0x25, 2646,
- 0x28, 2656,
- 0x29, 2666,
- 0x2A, 2676,
- 0x2B, 2686,
- 0x30, 2696,
- 0x31, 2706,
- 0x32, 2716,
- 0x33, 2726,
- 0x34, 2736,
- 0x35, 2746,
- 0x37, 2756,
- 0x38, 2766,
- 0x39, 2776,
- 0x3A, 2786,
- 0x3B, 2796,
- 0x3C, 2806,
- 0x3D, 2816,
- 0x3E, 2826,
- 0x3F, 2836,
- 0x40, 2846,
- 0x41, 2856,
- 0x82, 2866,
- 0xDB, 2889,
- 0xDC, 2899,
- 0xDD, 2909,
- 0xDE, 2919,
- 0xDF, 2929,
- 0xF0, 2939,
- 0xF1, 3006,
- uint16(x86_xFail),
- /*2283*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2295,
- 0x0, 2289,
- /*2289*/ uint16(x86_xSetOp), uint16(x86_PSHUFB),
- /*2291*/ uint16(x86_xReadSlashR),
- /*2292*/ uint16(x86_xArgMm1),
- /*2293*/ uint16(x86_xArgMm2M64),
- /*2294*/ uint16(x86_xMatch),
- /*2295*/ uint16(x86_xSetOp), uint16(x86_PSHUFB),
- /*2297*/ uint16(x86_xReadSlashR),
- /*2298*/ uint16(x86_xArgXmm1),
- /*2299*/ uint16(x86_xArgXmm2M128),
- /*2300*/ uint16(x86_xMatch),
- /*2301*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2313,
- 0x0, 2307,
- /*2307*/ uint16(x86_xSetOp), uint16(x86_PHADDW),
- /*2309*/ uint16(x86_xReadSlashR),
- /*2310*/ uint16(x86_xArgMm1),
- /*2311*/ uint16(x86_xArgMm2M64),
- /*2312*/ uint16(x86_xMatch),
- /*2313*/ uint16(x86_xSetOp), uint16(x86_PHADDW),
- /*2315*/ uint16(x86_xReadSlashR),
- /*2316*/ uint16(x86_xArgXmm1),
- /*2317*/ uint16(x86_xArgXmm2M128),
- /*2318*/ uint16(x86_xMatch),
- /*2319*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2331,
- 0x0, 2325,
- /*2325*/ uint16(x86_xSetOp), uint16(x86_PHADDD),
- /*2327*/ uint16(x86_xReadSlashR),
- /*2328*/ uint16(x86_xArgMm1),
- /*2329*/ uint16(x86_xArgMm2M64),
- /*2330*/ uint16(x86_xMatch),
- /*2331*/ uint16(x86_xSetOp), uint16(x86_PHADDD),
- /*2333*/ uint16(x86_xReadSlashR),
- /*2334*/ uint16(x86_xArgXmm1),
- /*2335*/ uint16(x86_xArgXmm2M128),
- /*2336*/ uint16(x86_xMatch),
- /*2337*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2349,
- 0x0, 2343,
- /*2343*/ uint16(x86_xSetOp), uint16(x86_PHADDSW),
- /*2345*/ uint16(x86_xReadSlashR),
- /*2346*/ uint16(x86_xArgMm1),
- /*2347*/ uint16(x86_xArgMm2M64),
- /*2348*/ uint16(x86_xMatch),
- /*2349*/ uint16(x86_xSetOp), uint16(x86_PHADDSW),
- /*2351*/ uint16(x86_xReadSlashR),
- /*2352*/ uint16(x86_xArgXmm1),
- /*2353*/ uint16(x86_xArgXmm2M128),
- /*2354*/ uint16(x86_xMatch),
- /*2355*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2367,
- 0x0, 2361,
- /*2361*/ uint16(x86_xSetOp), uint16(x86_PMADDUBSW),
- /*2363*/ uint16(x86_xReadSlashR),
- /*2364*/ uint16(x86_xArgMm1),
- /*2365*/ uint16(x86_xArgMm2M64),
- /*2366*/ uint16(x86_xMatch),
- /*2367*/ uint16(x86_xSetOp), uint16(x86_PMADDUBSW),
- /*2369*/ uint16(x86_xReadSlashR),
- /*2370*/ uint16(x86_xArgXmm1),
- /*2371*/ uint16(x86_xArgXmm2M128),
- /*2372*/ uint16(x86_xMatch),
- /*2373*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2385,
- 0x0, 2379,
- /*2379*/ uint16(x86_xSetOp), uint16(x86_PHSUBW),
- /*2381*/ uint16(x86_xReadSlashR),
- /*2382*/ uint16(x86_xArgMm1),
- /*2383*/ uint16(x86_xArgMm2M64),
- /*2384*/ uint16(x86_xMatch),
- /*2385*/ uint16(x86_xSetOp), uint16(x86_PHSUBW),
- /*2387*/ uint16(x86_xReadSlashR),
- /*2388*/ uint16(x86_xArgXmm1),
- /*2389*/ uint16(x86_xArgXmm2M128),
- /*2390*/ uint16(x86_xMatch),
- /*2391*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2403,
- 0x0, 2397,
- /*2397*/ uint16(x86_xSetOp), uint16(x86_PHSUBD),
- /*2399*/ uint16(x86_xReadSlashR),
- /*2400*/ uint16(x86_xArgMm1),
- /*2401*/ uint16(x86_xArgMm2M64),
- /*2402*/ uint16(x86_xMatch),
- /*2403*/ uint16(x86_xSetOp), uint16(x86_PHSUBD),
- /*2405*/ uint16(x86_xReadSlashR),
- /*2406*/ uint16(x86_xArgXmm1),
- /*2407*/ uint16(x86_xArgXmm2M128),
- /*2408*/ uint16(x86_xMatch),
- /*2409*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2421,
- 0x0, 2415,
- /*2415*/ uint16(x86_xSetOp), uint16(x86_PHSUBSW),
- /*2417*/ uint16(x86_xReadSlashR),
- /*2418*/ uint16(x86_xArgMm1),
- /*2419*/ uint16(x86_xArgMm2M64),
- /*2420*/ uint16(x86_xMatch),
- /*2421*/ uint16(x86_xSetOp), uint16(x86_PHSUBSW),
- /*2423*/ uint16(x86_xReadSlashR),
- /*2424*/ uint16(x86_xArgXmm1),
- /*2425*/ uint16(x86_xArgXmm2M128),
- /*2426*/ uint16(x86_xMatch),
- /*2427*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2439,
- 0x0, 2433,
- /*2433*/ uint16(x86_xSetOp), uint16(x86_PSIGNB),
- /*2435*/ uint16(x86_xReadSlashR),
- /*2436*/ uint16(x86_xArgMm1),
- /*2437*/ uint16(x86_xArgMm2M64),
- /*2438*/ uint16(x86_xMatch),
- /*2439*/ uint16(x86_xSetOp), uint16(x86_PSIGNB),
- /*2441*/ uint16(x86_xReadSlashR),
- /*2442*/ uint16(x86_xArgXmm1),
- /*2443*/ uint16(x86_xArgXmm2M128),
- /*2444*/ uint16(x86_xMatch),
- /*2445*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2457,
- 0x0, 2451,
- /*2451*/ uint16(x86_xSetOp), uint16(x86_PSIGNW),
- /*2453*/ uint16(x86_xReadSlashR),
- /*2454*/ uint16(x86_xArgMm1),
- /*2455*/ uint16(x86_xArgMm2M64),
- /*2456*/ uint16(x86_xMatch),
- /*2457*/ uint16(x86_xSetOp), uint16(x86_PSIGNW),
- /*2459*/ uint16(x86_xReadSlashR),
- /*2460*/ uint16(x86_xArgXmm1),
- /*2461*/ uint16(x86_xArgXmm2M128),
- /*2462*/ uint16(x86_xMatch),
- /*2463*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2475,
- 0x0, 2469,
- /*2469*/ uint16(x86_xSetOp), uint16(x86_PSIGND),
- /*2471*/ uint16(x86_xReadSlashR),
- /*2472*/ uint16(x86_xArgMm1),
- /*2473*/ uint16(x86_xArgMm2M64),
- /*2474*/ uint16(x86_xMatch),
- /*2475*/ uint16(x86_xSetOp), uint16(x86_PSIGND),
- /*2477*/ uint16(x86_xReadSlashR),
- /*2478*/ uint16(x86_xArgXmm1),
- /*2479*/ uint16(x86_xArgXmm2M128),
- /*2480*/ uint16(x86_xMatch),
- /*2481*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2493,
- 0x0, 2487,
- /*2487*/ uint16(x86_xSetOp), uint16(x86_PMULHRSW),
- /*2489*/ uint16(x86_xReadSlashR),
- /*2490*/ uint16(x86_xArgMm1),
- /*2491*/ uint16(x86_xArgMm2M64),
- /*2492*/ uint16(x86_xMatch),
- /*2493*/ uint16(x86_xSetOp), uint16(x86_PMULHRSW),
- /*2495*/ uint16(x86_xReadSlashR),
- /*2496*/ uint16(x86_xArgXmm1),
- /*2497*/ uint16(x86_xArgXmm2M128),
- /*2498*/ uint16(x86_xMatch),
- /*2499*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2503,
- /*2503*/ uint16(x86_xSetOp), uint16(x86_PBLENDVB),
- /*2505*/ uint16(x86_xReadSlashR),
- /*2506*/ uint16(x86_xArgXmm1),
- /*2507*/ uint16(x86_xArgXmm2M128),
- /*2508*/ uint16(x86_xArgXMM0),
- /*2509*/ uint16(x86_xMatch),
- /*2510*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2514,
- /*2514*/ uint16(x86_xSetOp), uint16(x86_BLENDVPS),
- /*2516*/ uint16(x86_xReadSlashR),
- /*2517*/ uint16(x86_xArgXmm1),
- /*2518*/ uint16(x86_xArgXmm2M128),
- /*2519*/ uint16(x86_xArgXMM0),
- /*2520*/ uint16(x86_xMatch),
- /*2521*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2525,
- /*2525*/ uint16(x86_xSetOp), uint16(x86_BLENDVPD),
- /*2527*/ uint16(x86_xReadSlashR),
- /*2528*/ uint16(x86_xArgXmm1),
- /*2529*/ uint16(x86_xArgXmm2M128),
- /*2530*/ uint16(x86_xArgXMM0),
- /*2531*/ uint16(x86_xMatch),
- /*2532*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2536,
- /*2536*/ uint16(x86_xSetOp), uint16(x86_PTEST),
- /*2538*/ uint16(x86_xReadSlashR),
- /*2539*/ uint16(x86_xArgXmm1),
- /*2540*/ uint16(x86_xArgXmm2M128),
- /*2541*/ uint16(x86_xMatch),
- /*2542*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2554,
- 0x0, 2548,
- /*2548*/ uint16(x86_xSetOp), uint16(x86_PABSB),
- /*2550*/ uint16(x86_xReadSlashR),
- /*2551*/ uint16(x86_xArgMm1),
- /*2552*/ uint16(x86_xArgMm2M64),
- /*2553*/ uint16(x86_xMatch),
- /*2554*/ uint16(x86_xSetOp), uint16(x86_PABSB),
- /*2556*/ uint16(x86_xReadSlashR),
- /*2557*/ uint16(x86_xArgXmm1),
- /*2558*/ uint16(x86_xArgXmm2M128),
- /*2559*/ uint16(x86_xMatch),
- /*2560*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2572,
- 0x0, 2566,
- /*2566*/ uint16(x86_xSetOp), uint16(x86_PABSW),
- /*2568*/ uint16(x86_xReadSlashR),
- /*2569*/ uint16(x86_xArgMm1),
- /*2570*/ uint16(x86_xArgMm2M64),
- /*2571*/ uint16(x86_xMatch),
- /*2572*/ uint16(x86_xSetOp), uint16(x86_PABSW),
- /*2574*/ uint16(x86_xReadSlashR),
- /*2575*/ uint16(x86_xArgXmm1),
- /*2576*/ uint16(x86_xArgXmm2M128),
- /*2577*/ uint16(x86_xMatch),
- /*2578*/ uint16(x86_xCondPrefix), 2,
- 0x66, 2590,
- 0x0, 2584,
- /*2584*/ uint16(x86_xSetOp), uint16(x86_PABSD),
- /*2586*/ uint16(x86_xReadSlashR),
- /*2587*/ uint16(x86_xArgMm1),
- /*2588*/ uint16(x86_xArgMm2M64),
- /*2589*/ uint16(x86_xMatch),
- /*2590*/ uint16(x86_xSetOp), uint16(x86_PABSD),
- /*2592*/ uint16(x86_xReadSlashR),
- /*2593*/ uint16(x86_xArgXmm1),
- /*2594*/ uint16(x86_xArgXmm2M128),
- /*2595*/ uint16(x86_xMatch),
- /*2596*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2600,
- /*2600*/ uint16(x86_xSetOp), uint16(x86_PMOVSXBW),
- /*2602*/ uint16(x86_xReadSlashR),
- /*2603*/ uint16(x86_xArgXmm1),
- /*2604*/ uint16(x86_xArgXmm2M64),
- /*2605*/ uint16(x86_xMatch),
- /*2606*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2610,
- /*2610*/ uint16(x86_xSetOp), uint16(x86_PMOVSXBD),
- /*2612*/ uint16(x86_xReadSlashR),
- /*2613*/ uint16(x86_xArgXmm1),
- /*2614*/ uint16(x86_xArgXmm2M32),
- /*2615*/ uint16(x86_xMatch),
- /*2616*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2620,
- /*2620*/ uint16(x86_xSetOp), uint16(x86_PMOVSXBQ),
- /*2622*/ uint16(x86_xReadSlashR),
- /*2623*/ uint16(x86_xArgXmm1),
- /*2624*/ uint16(x86_xArgXmm2M16),
- /*2625*/ uint16(x86_xMatch),
- /*2626*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2630,
- /*2630*/ uint16(x86_xSetOp), uint16(x86_PMOVSXWD),
- /*2632*/ uint16(x86_xReadSlashR),
- /*2633*/ uint16(x86_xArgXmm1),
- /*2634*/ uint16(x86_xArgXmm2M64),
- /*2635*/ uint16(x86_xMatch),
- /*2636*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2640,
- /*2640*/ uint16(x86_xSetOp), uint16(x86_PMOVSXWQ),
- /*2642*/ uint16(x86_xReadSlashR),
- /*2643*/ uint16(x86_xArgXmm1),
- /*2644*/ uint16(x86_xArgXmm2M32),
- /*2645*/ uint16(x86_xMatch),
- /*2646*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2650,
- /*2650*/ uint16(x86_xSetOp), uint16(x86_PMOVSXDQ),
- /*2652*/ uint16(x86_xReadSlashR),
- /*2653*/ uint16(x86_xArgXmm1),
- /*2654*/ uint16(x86_xArgXmm2M64),
- /*2655*/ uint16(x86_xMatch),
- /*2656*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2660,
- /*2660*/ uint16(x86_xSetOp), uint16(x86_PMULDQ),
- /*2662*/ uint16(x86_xReadSlashR),
- /*2663*/ uint16(x86_xArgXmm1),
- /*2664*/ uint16(x86_xArgXmm2M128),
- /*2665*/ uint16(x86_xMatch),
- /*2666*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2670,
- /*2670*/ uint16(x86_xSetOp), uint16(x86_PCMPEQQ),
- /*2672*/ uint16(x86_xReadSlashR),
- /*2673*/ uint16(x86_xArgXmm1),
- /*2674*/ uint16(x86_xArgXmm2M128),
- /*2675*/ uint16(x86_xMatch),
- /*2676*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2680,
- /*2680*/ uint16(x86_xSetOp), uint16(x86_MOVNTDQA),
- /*2682*/ uint16(x86_xReadSlashR),
- /*2683*/ uint16(x86_xArgXmm1),
- /*2684*/ uint16(x86_xArgM128),
- /*2685*/ uint16(x86_xMatch),
- /*2686*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2690,
- /*2690*/ uint16(x86_xSetOp), uint16(x86_PACKUSDW),
- /*2692*/ uint16(x86_xReadSlashR),
- /*2693*/ uint16(x86_xArgXmm1),
- /*2694*/ uint16(x86_xArgXmm2M128),
- /*2695*/ uint16(x86_xMatch),
- /*2696*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2700,
- /*2700*/ uint16(x86_xSetOp), uint16(x86_PMOVZXBW),
- /*2702*/ uint16(x86_xReadSlashR),
- /*2703*/ uint16(x86_xArgXmm1),
- /*2704*/ uint16(x86_xArgXmm2M64),
- /*2705*/ uint16(x86_xMatch),
- /*2706*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2710,
- /*2710*/ uint16(x86_xSetOp), uint16(x86_PMOVZXBD),
- /*2712*/ uint16(x86_xReadSlashR),
- /*2713*/ uint16(x86_xArgXmm1),
- /*2714*/ uint16(x86_xArgXmm2M32),
- /*2715*/ uint16(x86_xMatch),
- /*2716*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2720,
- /*2720*/ uint16(x86_xSetOp), uint16(x86_PMOVZXBQ),
- /*2722*/ uint16(x86_xReadSlashR),
- /*2723*/ uint16(x86_xArgXmm1),
- /*2724*/ uint16(x86_xArgXmm2M16),
- /*2725*/ uint16(x86_xMatch),
- /*2726*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2730,
- /*2730*/ uint16(x86_xSetOp), uint16(x86_PMOVZXWD),
- /*2732*/ uint16(x86_xReadSlashR),
- /*2733*/ uint16(x86_xArgXmm1),
- /*2734*/ uint16(x86_xArgXmm2M64),
- /*2735*/ uint16(x86_xMatch),
- /*2736*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2740,
- /*2740*/ uint16(x86_xSetOp), uint16(x86_PMOVZXWQ),
- /*2742*/ uint16(x86_xReadSlashR),
- /*2743*/ uint16(x86_xArgXmm1),
- /*2744*/ uint16(x86_xArgXmm2M32),
- /*2745*/ uint16(x86_xMatch),
- /*2746*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2750,
- /*2750*/ uint16(x86_xSetOp), uint16(x86_PMOVZXDQ),
- /*2752*/ uint16(x86_xReadSlashR),
- /*2753*/ uint16(x86_xArgXmm1),
- /*2754*/ uint16(x86_xArgXmm2M64),
- /*2755*/ uint16(x86_xMatch),
- /*2756*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2760,
- /*2760*/ uint16(x86_xSetOp), uint16(x86_PCMPGTQ),
- /*2762*/ uint16(x86_xReadSlashR),
- /*2763*/ uint16(x86_xArgXmm1),
- /*2764*/ uint16(x86_xArgXmm2M128),
- /*2765*/ uint16(x86_xMatch),
- /*2766*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2770,
- /*2770*/ uint16(x86_xSetOp), uint16(x86_PMINSB),
- /*2772*/ uint16(x86_xReadSlashR),
- /*2773*/ uint16(x86_xArgXmm1),
- /*2774*/ uint16(x86_xArgXmm2M128),
- /*2775*/ uint16(x86_xMatch),
- /*2776*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2780,
- /*2780*/ uint16(x86_xSetOp), uint16(x86_PMINSD),
- /*2782*/ uint16(x86_xReadSlashR),
- /*2783*/ uint16(x86_xArgXmm1),
- /*2784*/ uint16(x86_xArgXmm2M128),
- /*2785*/ uint16(x86_xMatch),
- /*2786*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2790,
- /*2790*/ uint16(x86_xSetOp), uint16(x86_PMINUW),
- /*2792*/ uint16(x86_xReadSlashR),
- /*2793*/ uint16(x86_xArgXmm1),
- /*2794*/ uint16(x86_xArgXmm2M128),
- /*2795*/ uint16(x86_xMatch),
- /*2796*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2800,
- /*2800*/ uint16(x86_xSetOp), uint16(x86_PMINUD),
- /*2802*/ uint16(x86_xReadSlashR),
- /*2803*/ uint16(x86_xArgXmm1),
- /*2804*/ uint16(x86_xArgXmm2M128),
- /*2805*/ uint16(x86_xMatch),
- /*2806*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2810,
- /*2810*/ uint16(x86_xSetOp), uint16(x86_PMAXSB),
- /*2812*/ uint16(x86_xReadSlashR),
- /*2813*/ uint16(x86_xArgXmm1),
- /*2814*/ uint16(x86_xArgXmm2M128),
- /*2815*/ uint16(x86_xMatch),
- /*2816*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2820,
- /*2820*/ uint16(x86_xSetOp), uint16(x86_PMAXSD),
- /*2822*/ uint16(x86_xReadSlashR),
- /*2823*/ uint16(x86_xArgXmm1),
- /*2824*/ uint16(x86_xArgXmm2M128),
- /*2825*/ uint16(x86_xMatch),
- /*2826*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2830,
- /*2830*/ uint16(x86_xSetOp), uint16(x86_PMAXUW),
- /*2832*/ uint16(x86_xReadSlashR),
- /*2833*/ uint16(x86_xArgXmm1),
- /*2834*/ uint16(x86_xArgXmm2M128),
- /*2835*/ uint16(x86_xMatch),
- /*2836*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2840,
- /*2840*/ uint16(x86_xSetOp), uint16(x86_PMAXUD),
- /*2842*/ uint16(x86_xReadSlashR),
- /*2843*/ uint16(x86_xArgXmm1),
- /*2844*/ uint16(x86_xArgXmm2M128),
- /*2845*/ uint16(x86_xMatch),
- /*2846*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2850,
- /*2850*/ uint16(x86_xSetOp), uint16(x86_PMULLD),
- /*2852*/ uint16(x86_xReadSlashR),
- /*2853*/ uint16(x86_xArgXmm1),
- /*2854*/ uint16(x86_xArgXmm2M128),
- /*2855*/ uint16(x86_xMatch),
- /*2856*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2860,
- /*2860*/ uint16(x86_xSetOp), uint16(x86_PHMINPOSUW),
- /*2862*/ uint16(x86_xReadSlashR),
- /*2863*/ uint16(x86_xArgXmm1),
- /*2864*/ uint16(x86_xArgXmm2M128),
- /*2865*/ uint16(x86_xMatch),
- /*2866*/ uint16(x86_xCondIs64), 2869, 2879,
- /*2869*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2873,
- /*2873*/ uint16(x86_xSetOp), uint16(x86_INVPCID),
- /*2875*/ uint16(x86_xReadSlashR),
- /*2876*/ uint16(x86_xArgR32),
- /*2877*/ uint16(x86_xArgM128),
- /*2878*/ uint16(x86_xMatch),
- /*2879*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2883,
- /*2883*/ uint16(x86_xSetOp), uint16(x86_INVPCID),
- /*2885*/ uint16(x86_xReadSlashR),
- /*2886*/ uint16(x86_xArgR64),
- /*2887*/ uint16(x86_xArgM128),
- /*2888*/ uint16(x86_xMatch),
- /*2889*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2893,
- /*2893*/ uint16(x86_xSetOp), uint16(x86_AESIMC),
- /*2895*/ uint16(x86_xReadSlashR),
- /*2896*/ uint16(x86_xArgXmm1),
- /*2897*/ uint16(x86_xArgXmm2M128),
- /*2898*/ uint16(x86_xMatch),
- /*2899*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2903,
- /*2903*/ uint16(x86_xSetOp), uint16(x86_AESENC),
- /*2905*/ uint16(x86_xReadSlashR),
- /*2906*/ uint16(x86_xArgXmm1),
- /*2907*/ uint16(x86_xArgXmm2M128),
- /*2908*/ uint16(x86_xMatch),
- /*2909*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2913,
- /*2913*/ uint16(x86_xSetOp), uint16(x86_AESENCLAST),
- /*2915*/ uint16(x86_xReadSlashR),
- /*2916*/ uint16(x86_xArgXmm1),
- /*2917*/ uint16(x86_xArgXmm2M128),
- /*2918*/ uint16(x86_xMatch),
- /*2919*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2923,
- /*2923*/ uint16(x86_xSetOp), uint16(x86_AESDEC),
- /*2925*/ uint16(x86_xReadSlashR),
- /*2926*/ uint16(x86_xArgXmm1),
- /*2927*/ uint16(x86_xArgXmm2M128),
- /*2928*/ uint16(x86_xMatch),
- /*2929*/ uint16(x86_xCondPrefix), 1,
- 0x66, 2933,
- /*2933*/ uint16(x86_xSetOp), uint16(x86_AESDECLAST),
- /*2935*/ uint16(x86_xReadSlashR),
- /*2936*/ uint16(x86_xArgXmm1),
- /*2937*/ uint16(x86_xArgXmm2M128),
- /*2938*/ uint16(x86_xMatch),
- /*2939*/ uint16(x86_xCondIs64), 2942, 2980,
- /*2942*/ uint16(x86_xCondPrefix), 2,
- 0xF2, 2964,
- 0x0, 2948,
- /*2948*/ uint16(x86_xCondDataSize), 2952, 2958, 0,
- /*2952*/ uint16(x86_xSetOp), uint16(x86_MOVBE),
- /*2954*/ uint16(x86_xReadSlashR),
- /*2955*/ uint16(x86_xArgR16),
- /*2956*/ uint16(x86_xArgM16),
- /*2957*/ uint16(x86_xMatch),
- /*2958*/ uint16(x86_xSetOp), uint16(x86_MOVBE),
- /*2960*/ uint16(x86_xReadSlashR),
- /*2961*/ uint16(x86_xArgR32),
- /*2962*/ uint16(x86_xArgM32),
- /*2963*/ uint16(x86_xMatch),
- /*2964*/ uint16(x86_xCondDataSize), 2968, 2974, 0,
- /*2968*/ uint16(x86_xSetOp), uint16(x86_CRC32),
- /*2970*/ uint16(x86_xReadSlashR),
- /*2971*/ uint16(x86_xArgR32),
- /*2972*/ uint16(x86_xArgRM8),
- /*2973*/ uint16(x86_xMatch),
- /*2974*/ uint16(x86_xSetOp), uint16(x86_CRC32),
- /*2976*/ uint16(x86_xReadSlashR),
- /*2977*/ uint16(x86_xArgR32),
- /*2978*/ uint16(x86_xArgRM8),
- /*2979*/ uint16(x86_xMatch),
- /*2980*/ uint16(x86_xCondPrefix), 2,
- 0xF2, 2996,
- 0x0, 2986,
- /*2986*/ uint16(x86_xCondDataSize), 2952, 2958, 2990,
- /*2990*/ uint16(x86_xSetOp), uint16(x86_MOVBE),
- /*2992*/ uint16(x86_xReadSlashR),
- /*2993*/ uint16(x86_xArgR64),
- /*2994*/ uint16(x86_xArgM64),
- /*2995*/ uint16(x86_xMatch),
- /*2996*/ uint16(x86_xCondDataSize), 2968, 2974, 3000,
- /*3000*/ uint16(x86_xSetOp), uint16(x86_CRC32),
- /*3002*/ uint16(x86_xReadSlashR),
- /*3003*/ uint16(x86_xArgR64),
- /*3004*/ uint16(x86_xArgRM8),
- /*3005*/ uint16(x86_xMatch),
- /*3006*/ uint16(x86_xCondIs64), 3009, 3047,
- /*3009*/ uint16(x86_xCondPrefix), 2,
- 0xF2, 3031,
- 0x0, 3015,
- /*3015*/ uint16(x86_xCondDataSize), 3019, 3025, 0,
- /*3019*/ uint16(x86_xSetOp), uint16(x86_MOVBE),
- /*3021*/ uint16(x86_xReadSlashR),
- /*3022*/ uint16(x86_xArgM16),
- /*3023*/ uint16(x86_xArgR16),
- /*3024*/ uint16(x86_xMatch),
- /*3025*/ uint16(x86_xSetOp), uint16(x86_MOVBE),
- /*3027*/ uint16(x86_xReadSlashR),
- /*3028*/ uint16(x86_xArgM32),
- /*3029*/ uint16(x86_xArgR32),
- /*3030*/ uint16(x86_xMatch),
- /*3031*/ uint16(x86_xCondDataSize), 3035, 3041, 0,
- /*3035*/ uint16(x86_xSetOp), uint16(x86_CRC32),
- /*3037*/ uint16(x86_xReadSlashR),
- /*3038*/ uint16(x86_xArgR32),
- /*3039*/ uint16(x86_xArgRM16),
- /*3040*/ uint16(x86_xMatch),
- /*3041*/ uint16(x86_xSetOp), uint16(x86_CRC32),
- /*3043*/ uint16(x86_xReadSlashR),
- /*3044*/ uint16(x86_xArgR32),
- /*3045*/ uint16(x86_xArgRM32),
- /*3046*/ uint16(x86_xMatch),
- /*3047*/ uint16(x86_xCondPrefix), 2,
- 0xF2, 3063,
- 0x0, 3053,
- /*3053*/ uint16(x86_xCondDataSize), 3019, 3025, 3057,
- /*3057*/ uint16(x86_xSetOp), uint16(x86_MOVBE),
- /*3059*/ uint16(x86_xReadSlashR),
- /*3060*/ uint16(x86_xArgM64),
- /*3061*/ uint16(x86_xArgR64),
- /*3062*/ uint16(x86_xMatch),
- /*3063*/ uint16(x86_xCondDataSize), 3035, 3041, 3067,
- /*3067*/ uint16(x86_xSetOp), uint16(x86_CRC32),
- /*3069*/ uint16(x86_xReadSlashR),
- /*3070*/ uint16(x86_xArgR64),
- /*3071*/ uint16(x86_xArgRM64),
- /*3072*/ uint16(x86_xMatch),
- /*3073*/ uint16(x86_xCondByte), 24,
- 0x08, 3124,
- 0x09, 3136,
- 0x0A, 3148,
- 0x0B, 3160,
- 0x0C, 3172,
- 0x0D, 3184,
- 0x0E, 3196,
- 0x0F, 3208,
- 0x14, 3230,
- 0x15, 3242,
- 0x16, 3254,
- 0x17, 3297,
- 0x20, 3309,
- 0x21, 3321,
- 0x22, 3333,
- 0x40, 3376,
- 0x41, 3388,
- 0x42, 3400,
- 0x44, 3412,
- 0x60, 3424,
- 0x61, 3436,
- 0x62, 3448,
- 0x63, 3460,
- 0xDF, 3472,
- uint16(x86_xFail),
- /*3124*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3128,
- /*3128*/ uint16(x86_xSetOp), uint16(x86_ROUNDPS),
- /*3130*/ uint16(x86_xReadSlashR),
- /*3131*/ uint16(x86_xReadIb),
- /*3132*/ uint16(x86_xArgXmm1),
- /*3133*/ uint16(x86_xArgXmm2M128),
- /*3134*/ uint16(x86_xArgImm8u),
- /*3135*/ uint16(x86_xMatch),
- /*3136*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3140,
- /*3140*/ uint16(x86_xSetOp), uint16(x86_ROUNDPD),
- /*3142*/ uint16(x86_xReadSlashR),
- /*3143*/ uint16(x86_xReadIb),
- /*3144*/ uint16(x86_xArgXmm1),
- /*3145*/ uint16(x86_xArgXmm2M128),
- /*3146*/ uint16(x86_xArgImm8u),
- /*3147*/ uint16(x86_xMatch),
- /*3148*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3152,
- /*3152*/ uint16(x86_xSetOp), uint16(x86_ROUNDSS),
- /*3154*/ uint16(x86_xReadSlashR),
- /*3155*/ uint16(x86_xReadIb),
- /*3156*/ uint16(x86_xArgXmm1),
- /*3157*/ uint16(x86_xArgXmm2M32),
- /*3158*/ uint16(x86_xArgImm8u),
- /*3159*/ uint16(x86_xMatch),
- /*3160*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3164,
- /*3164*/ uint16(x86_xSetOp), uint16(x86_ROUNDSD),
- /*3166*/ uint16(x86_xReadSlashR),
- /*3167*/ uint16(x86_xReadIb),
- /*3168*/ uint16(x86_xArgXmm1),
- /*3169*/ uint16(x86_xArgXmm2M64),
- /*3170*/ uint16(x86_xArgImm8u),
- /*3171*/ uint16(x86_xMatch),
- /*3172*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3176,
- /*3176*/ uint16(x86_xSetOp), uint16(x86_BLENDPS),
- /*3178*/ uint16(x86_xReadSlashR),
- /*3179*/ uint16(x86_xReadIb),
- /*3180*/ uint16(x86_xArgXmm1),
- /*3181*/ uint16(x86_xArgXmm2M128),
- /*3182*/ uint16(x86_xArgImm8u),
- /*3183*/ uint16(x86_xMatch),
- /*3184*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3188,
- /*3188*/ uint16(x86_xSetOp), uint16(x86_BLENDPD),
- /*3190*/ uint16(x86_xReadSlashR),
- /*3191*/ uint16(x86_xReadIb),
- /*3192*/ uint16(x86_xArgXmm1),
- /*3193*/ uint16(x86_xArgXmm2M128),
- /*3194*/ uint16(x86_xArgImm8u),
- /*3195*/ uint16(x86_xMatch),
- /*3196*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3200,
- /*3200*/ uint16(x86_xSetOp), uint16(x86_PBLENDW),
- /*3202*/ uint16(x86_xReadSlashR),
- /*3203*/ uint16(x86_xReadIb),
- /*3204*/ uint16(x86_xArgXmm1),
- /*3205*/ uint16(x86_xArgXmm2M128),
- /*3206*/ uint16(x86_xArgImm8u),
- /*3207*/ uint16(x86_xMatch),
- /*3208*/ uint16(x86_xCondPrefix), 2,
- 0x66, 3222,
- 0x0, 3214,
- /*3214*/ uint16(x86_xSetOp), uint16(x86_PALIGNR),
- /*3216*/ uint16(x86_xReadSlashR),
- /*3217*/ uint16(x86_xReadIb),
- /*3218*/ uint16(x86_xArgMm1),
- /*3219*/ uint16(x86_xArgMm2M64),
- /*3220*/ uint16(x86_xArgImm8u),
- /*3221*/ uint16(x86_xMatch),
- /*3222*/ uint16(x86_xSetOp), uint16(x86_PALIGNR),
- /*3224*/ uint16(x86_xReadSlashR),
- /*3225*/ uint16(x86_xReadIb),
- /*3226*/ uint16(x86_xArgXmm1),
- /*3227*/ uint16(x86_xArgXmm2M128),
- /*3228*/ uint16(x86_xArgImm8u),
- /*3229*/ uint16(x86_xMatch),
- /*3230*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3234,
- /*3234*/ uint16(x86_xSetOp), uint16(x86_PEXTRB),
- /*3236*/ uint16(x86_xReadSlashR),
- /*3237*/ uint16(x86_xReadIb),
- /*3238*/ uint16(x86_xArgR32M8),
- /*3239*/ uint16(x86_xArgXmm1),
- /*3240*/ uint16(x86_xArgImm8u),
- /*3241*/ uint16(x86_xMatch),
- /*3242*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3246,
- /*3246*/ uint16(x86_xSetOp), uint16(x86_PEXTRW),
- /*3248*/ uint16(x86_xReadSlashR),
- /*3249*/ uint16(x86_xReadIb),
- /*3250*/ uint16(x86_xArgR32M16),
- /*3251*/ uint16(x86_xArgXmm1),
- /*3252*/ uint16(x86_xArgImm8u),
- /*3253*/ uint16(x86_xMatch),
- /*3254*/ uint16(x86_xCondIs64), 3257, 3281,
- /*3257*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3261,
- /*3261*/ uint16(x86_xCondDataSize), 3265, 3273, 0,
- /*3265*/ uint16(x86_xSetOp), uint16(x86_PEXTRD),
- /*3267*/ uint16(x86_xReadSlashR),
- /*3268*/ uint16(x86_xReadIb),
- /*3269*/ uint16(x86_xArgRM32),
- /*3270*/ uint16(x86_xArgXmm1),
- /*3271*/ uint16(x86_xArgImm8u),
- /*3272*/ uint16(x86_xMatch),
- /*3273*/ uint16(x86_xSetOp), uint16(x86_PEXTRD),
- /*3275*/ uint16(x86_xReadSlashR),
- /*3276*/ uint16(x86_xReadIb),
- /*3277*/ uint16(x86_xArgRM32),
- /*3278*/ uint16(x86_xArgXmm1),
- /*3279*/ uint16(x86_xArgImm8u),
- /*3280*/ uint16(x86_xMatch),
- /*3281*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3285,
- /*3285*/ uint16(x86_xCondDataSize), 3265, 3273, 3289,
- /*3289*/ uint16(x86_xSetOp), uint16(x86_PEXTRQ),
- /*3291*/ uint16(x86_xReadSlashR),
- /*3292*/ uint16(x86_xReadIb),
- /*3293*/ uint16(x86_xArgRM64),
- /*3294*/ uint16(x86_xArgXmm1),
- /*3295*/ uint16(x86_xArgImm8u),
- /*3296*/ uint16(x86_xMatch),
- /*3297*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3301,
- /*3301*/ uint16(x86_xSetOp), uint16(x86_EXTRACTPS),
- /*3303*/ uint16(x86_xReadSlashR),
- /*3304*/ uint16(x86_xReadIb),
- /*3305*/ uint16(x86_xArgRM32),
- /*3306*/ uint16(x86_xArgXmm1),
- /*3307*/ uint16(x86_xArgImm8u),
- /*3308*/ uint16(x86_xMatch),
- /*3309*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3313,
- /*3313*/ uint16(x86_xSetOp), uint16(x86_PINSRB),
- /*3315*/ uint16(x86_xReadSlashR),
- /*3316*/ uint16(x86_xReadIb),
- /*3317*/ uint16(x86_xArgXmm1),
- /*3318*/ uint16(x86_xArgR32M8),
- /*3319*/ uint16(x86_xArgImm8u),
- /*3320*/ uint16(x86_xMatch),
- /*3321*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3325,
- /*3325*/ uint16(x86_xSetOp), uint16(x86_INSERTPS),
- /*3327*/ uint16(x86_xReadSlashR),
- /*3328*/ uint16(x86_xReadIb),
- /*3329*/ uint16(x86_xArgXmm1),
- /*3330*/ uint16(x86_xArgXmm2M32),
- /*3331*/ uint16(x86_xArgImm8u),
- /*3332*/ uint16(x86_xMatch),
- /*3333*/ uint16(x86_xCondIs64), 3336, 3360,
- /*3336*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3340,
- /*3340*/ uint16(x86_xCondDataSize), 3344, 3352, 0,
- /*3344*/ uint16(x86_xSetOp), uint16(x86_PINSRD),
- /*3346*/ uint16(x86_xReadSlashR),
- /*3347*/ uint16(x86_xReadIb),
- /*3348*/ uint16(x86_xArgXmm1),
- /*3349*/ uint16(x86_xArgRM32),
- /*3350*/ uint16(x86_xArgImm8u),
- /*3351*/ uint16(x86_xMatch),
- /*3352*/ uint16(x86_xSetOp), uint16(x86_PINSRD),
- /*3354*/ uint16(x86_xReadSlashR),
- /*3355*/ uint16(x86_xReadIb),
- /*3356*/ uint16(x86_xArgXmm1),
- /*3357*/ uint16(x86_xArgRM32),
- /*3358*/ uint16(x86_xArgImm8u),
- /*3359*/ uint16(x86_xMatch),
- /*3360*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3364,
- /*3364*/ uint16(x86_xCondDataSize), 3344, 3352, 3368,
- /*3368*/ uint16(x86_xSetOp), uint16(x86_PINSRQ),
- /*3370*/ uint16(x86_xReadSlashR),
- /*3371*/ uint16(x86_xReadIb),
- /*3372*/ uint16(x86_xArgXmm1),
- /*3373*/ uint16(x86_xArgRM64),
- /*3374*/ uint16(x86_xArgImm8u),
- /*3375*/ uint16(x86_xMatch),
- /*3376*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3380,
- /*3380*/ uint16(x86_xSetOp), uint16(x86_DPPS),
- /*3382*/ uint16(x86_xReadSlashR),
- /*3383*/ uint16(x86_xReadIb),
- /*3384*/ uint16(x86_xArgXmm1),
- /*3385*/ uint16(x86_xArgXmm2M128),
- /*3386*/ uint16(x86_xArgImm8u),
- /*3387*/ uint16(x86_xMatch),
- /*3388*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3392,
- /*3392*/ uint16(x86_xSetOp), uint16(x86_DPPD),
- /*3394*/ uint16(x86_xReadSlashR),
- /*3395*/ uint16(x86_xReadIb),
- /*3396*/ uint16(x86_xArgXmm1),
- /*3397*/ uint16(x86_xArgXmm2M128),
- /*3398*/ uint16(x86_xArgImm8u),
- /*3399*/ uint16(x86_xMatch),
- /*3400*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3404,
- /*3404*/ uint16(x86_xSetOp), uint16(x86_MPSADBW),
- /*3406*/ uint16(x86_xReadSlashR),
- /*3407*/ uint16(x86_xReadIb),
- /*3408*/ uint16(x86_xArgXmm1),
- /*3409*/ uint16(x86_xArgXmm2M128),
- /*3410*/ uint16(x86_xArgImm8u),
- /*3411*/ uint16(x86_xMatch),
- /*3412*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3416,
- /*3416*/ uint16(x86_xSetOp), uint16(x86_PCLMULQDQ),
- /*3418*/ uint16(x86_xReadSlashR),
- /*3419*/ uint16(x86_xReadIb),
- /*3420*/ uint16(x86_xArgXmm1),
- /*3421*/ uint16(x86_xArgXmm2M128),
- /*3422*/ uint16(x86_xArgImm8u),
- /*3423*/ uint16(x86_xMatch),
- /*3424*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3428,
- /*3428*/ uint16(x86_xSetOp), uint16(x86_PCMPESTRM),
- /*3430*/ uint16(x86_xReadSlashR),
- /*3431*/ uint16(x86_xReadIb),
- /*3432*/ uint16(x86_xArgXmm1),
- /*3433*/ uint16(x86_xArgXmm2M128),
- /*3434*/ uint16(x86_xArgImm8u),
- /*3435*/ uint16(x86_xMatch),
- /*3436*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3440,
- /*3440*/ uint16(x86_xSetOp), uint16(x86_PCMPESTRI),
- /*3442*/ uint16(x86_xReadSlashR),
- /*3443*/ uint16(x86_xReadIb),
- /*3444*/ uint16(x86_xArgXmm1),
- /*3445*/ uint16(x86_xArgXmm2M128),
- /*3446*/ uint16(x86_xArgImm8u),
- /*3447*/ uint16(x86_xMatch),
- /*3448*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3452,
- /*3452*/ uint16(x86_xSetOp), uint16(x86_PCMPISTRM),
- /*3454*/ uint16(x86_xReadSlashR),
- /*3455*/ uint16(x86_xReadIb),
- /*3456*/ uint16(x86_xArgXmm1),
- /*3457*/ uint16(x86_xArgXmm2M128),
- /*3458*/ uint16(x86_xArgImm8u),
- /*3459*/ uint16(x86_xMatch),
- /*3460*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3464,
- /*3464*/ uint16(x86_xSetOp), uint16(x86_PCMPISTRI),
- /*3466*/ uint16(x86_xReadSlashR),
- /*3467*/ uint16(x86_xReadIb),
- /*3468*/ uint16(x86_xArgXmm1),
- /*3469*/ uint16(x86_xArgXmm2M128),
- /*3470*/ uint16(x86_xArgImm8u),
- /*3471*/ uint16(x86_xMatch),
- /*3472*/ uint16(x86_xCondPrefix), 1,
- 0x66, 3476,
- /*3476*/ uint16(x86_xSetOp), uint16(x86_AESKEYGENASSIST),
- /*3478*/ uint16(x86_xReadSlashR),
- /*3479*/ uint16(x86_xReadIb),
- /*3480*/ uint16(x86_xArgXmm1),
- /*3481*/ uint16(x86_xArgXmm2M128),
- /*3482*/ uint16(x86_xArgImm8u),
- /*3483*/ uint16(x86_xMatch),
- /*3484*/ uint16(x86_xCondIs64), 3487, 3503,
- /*3487*/ uint16(x86_xCondDataSize), 3491, 3497, 0,
- /*3491*/ uint16(x86_xSetOp), uint16(x86_CMOVO),
- /*3493*/ uint16(x86_xReadSlashR),
- /*3494*/ uint16(x86_xArgR16),
- /*3495*/ uint16(x86_xArgRM16),
- /*3496*/ uint16(x86_xMatch),
- /*3497*/ uint16(x86_xSetOp), uint16(x86_CMOVO),
- /*3499*/ uint16(x86_xReadSlashR),
- /*3500*/ uint16(x86_xArgR32),
- /*3501*/ uint16(x86_xArgRM32),
- /*3502*/ uint16(x86_xMatch),
- /*3503*/ uint16(x86_xCondDataSize), 3491, 3497, 3507,
- /*3507*/ uint16(x86_xSetOp), uint16(x86_CMOVO),
- /*3509*/ uint16(x86_xReadSlashR),
- /*3510*/ uint16(x86_xArgR64),
- /*3511*/ uint16(x86_xArgRM64),
- /*3512*/ uint16(x86_xMatch),
- /*3513*/ uint16(x86_xCondIs64), 3516, 3532,
- /*3516*/ uint16(x86_xCondDataSize), 3520, 3526, 0,
- /*3520*/ uint16(x86_xSetOp), uint16(x86_CMOVNO),
- /*3522*/ uint16(x86_xReadSlashR),
- /*3523*/ uint16(x86_xArgR16),
- /*3524*/ uint16(x86_xArgRM16),
- /*3525*/ uint16(x86_xMatch),
- /*3526*/ uint16(x86_xSetOp), uint16(x86_CMOVNO),
- /*3528*/ uint16(x86_xReadSlashR),
- /*3529*/ uint16(x86_xArgR32),
- /*3530*/ uint16(x86_xArgRM32),
- /*3531*/ uint16(x86_xMatch),
- /*3532*/ uint16(x86_xCondDataSize), 3520, 3526, 3536,
- /*3536*/ uint16(x86_xSetOp), uint16(x86_CMOVNO),
- /*3538*/ uint16(x86_xReadSlashR),
- /*3539*/ uint16(x86_xArgR64),
- /*3540*/ uint16(x86_xArgRM64),
- /*3541*/ uint16(x86_xMatch),
- /*3542*/ uint16(x86_xCondIs64), 3545, 3561,
- /*3545*/ uint16(x86_xCondDataSize), 3549, 3555, 0,
- /*3549*/ uint16(x86_xSetOp), uint16(x86_CMOVB),
- /*3551*/ uint16(x86_xReadSlashR),
- /*3552*/ uint16(x86_xArgR16),
- /*3553*/ uint16(x86_xArgRM16),
- /*3554*/ uint16(x86_xMatch),
- /*3555*/ uint16(x86_xSetOp), uint16(x86_CMOVB),
- /*3557*/ uint16(x86_xReadSlashR),
- /*3558*/ uint16(x86_xArgR32),
- /*3559*/ uint16(x86_xArgRM32),
- /*3560*/ uint16(x86_xMatch),
- /*3561*/ uint16(x86_xCondDataSize), 3549, 3555, 3565,
- /*3565*/ uint16(x86_xSetOp), uint16(x86_CMOVB),
- /*3567*/ uint16(x86_xReadSlashR),
- /*3568*/ uint16(x86_xArgR64),
- /*3569*/ uint16(x86_xArgRM64),
- /*3570*/ uint16(x86_xMatch),
- /*3571*/ uint16(x86_xCondIs64), 3574, 3590,
- /*3574*/ uint16(x86_xCondDataSize), 3578, 3584, 0,
- /*3578*/ uint16(x86_xSetOp), uint16(x86_CMOVAE),
- /*3580*/ uint16(x86_xReadSlashR),
- /*3581*/ uint16(x86_xArgR16),
- /*3582*/ uint16(x86_xArgRM16),
- /*3583*/ uint16(x86_xMatch),
- /*3584*/ uint16(x86_xSetOp), uint16(x86_CMOVAE),
- /*3586*/ uint16(x86_xReadSlashR),
- /*3587*/ uint16(x86_xArgR32),
- /*3588*/ uint16(x86_xArgRM32),
- /*3589*/ uint16(x86_xMatch),
- /*3590*/ uint16(x86_xCondDataSize), 3578, 3584, 3594,
- /*3594*/ uint16(x86_xSetOp), uint16(x86_CMOVAE),
- /*3596*/ uint16(x86_xReadSlashR),
- /*3597*/ uint16(x86_xArgR64),
- /*3598*/ uint16(x86_xArgRM64),
- /*3599*/ uint16(x86_xMatch),
- /*3600*/ uint16(x86_xCondIs64), 3603, 3619,
- /*3603*/ uint16(x86_xCondDataSize), 3607, 3613, 0,
- /*3607*/ uint16(x86_xSetOp), uint16(x86_CMOVE),
- /*3609*/ uint16(x86_xReadSlashR),
- /*3610*/ uint16(x86_xArgR16),
- /*3611*/ uint16(x86_xArgRM16),
- /*3612*/ uint16(x86_xMatch),
- /*3613*/ uint16(x86_xSetOp), uint16(x86_CMOVE),
- /*3615*/ uint16(x86_xReadSlashR),
- /*3616*/ uint16(x86_xArgR32),
- /*3617*/ uint16(x86_xArgRM32),
- /*3618*/ uint16(x86_xMatch),
- /*3619*/ uint16(x86_xCondDataSize), 3607, 3613, 3623,
- /*3623*/ uint16(x86_xSetOp), uint16(x86_CMOVE),
- /*3625*/ uint16(x86_xReadSlashR),
- /*3626*/ uint16(x86_xArgR64),
- /*3627*/ uint16(x86_xArgRM64),
- /*3628*/ uint16(x86_xMatch),
- /*3629*/ uint16(x86_xCondIs64), 3632, 3648,
- /*3632*/ uint16(x86_xCondDataSize), 3636, 3642, 0,
- /*3636*/ uint16(x86_xSetOp), uint16(x86_CMOVNE),
- /*3638*/ uint16(x86_xReadSlashR),
- /*3639*/ uint16(x86_xArgR16),
- /*3640*/ uint16(x86_xArgRM16),
- /*3641*/ uint16(x86_xMatch),
- /*3642*/ uint16(x86_xSetOp), uint16(x86_CMOVNE),
- /*3644*/ uint16(x86_xReadSlashR),
- /*3645*/ uint16(x86_xArgR32),
- /*3646*/ uint16(x86_xArgRM32),
- /*3647*/ uint16(x86_xMatch),
- /*3648*/ uint16(x86_xCondDataSize), 3636, 3642, 3652,
- /*3652*/ uint16(x86_xSetOp), uint16(x86_CMOVNE),
- /*3654*/ uint16(x86_xReadSlashR),
- /*3655*/ uint16(x86_xArgR64),
- /*3656*/ uint16(x86_xArgRM64),
- /*3657*/ uint16(x86_xMatch),
- /*3658*/ uint16(x86_xCondIs64), 3661, 3677,
- /*3661*/ uint16(x86_xCondDataSize), 3665, 3671, 0,
- /*3665*/ uint16(x86_xSetOp), uint16(x86_CMOVBE),
- /*3667*/ uint16(x86_xReadSlashR),
- /*3668*/ uint16(x86_xArgR16),
- /*3669*/ uint16(x86_xArgRM16),
- /*3670*/ uint16(x86_xMatch),
- /*3671*/ uint16(x86_xSetOp), uint16(x86_CMOVBE),
- /*3673*/ uint16(x86_xReadSlashR),
- /*3674*/ uint16(x86_xArgR32),
- /*3675*/ uint16(x86_xArgRM32),
- /*3676*/ uint16(x86_xMatch),
- /*3677*/ uint16(x86_xCondDataSize), 3665, 3671, 3681,
- /*3681*/ uint16(x86_xSetOp), uint16(x86_CMOVBE),
- /*3683*/ uint16(x86_xReadSlashR),
- /*3684*/ uint16(x86_xArgR64),
- /*3685*/ uint16(x86_xArgRM64),
- /*3686*/ uint16(x86_xMatch),
- /*3687*/ uint16(x86_xCondIs64), 3690, 3706,
- /*3690*/ uint16(x86_xCondDataSize), 3694, 3700, 0,
- /*3694*/ uint16(x86_xSetOp), uint16(x86_CMOVA),
- /*3696*/ uint16(x86_xReadSlashR),
- /*3697*/ uint16(x86_xArgR16),
- /*3698*/ uint16(x86_xArgRM16),
- /*3699*/ uint16(x86_xMatch),
- /*3700*/ uint16(x86_xSetOp), uint16(x86_CMOVA),
- /*3702*/ uint16(x86_xReadSlashR),
- /*3703*/ uint16(x86_xArgR32),
- /*3704*/ uint16(x86_xArgRM32),
- /*3705*/ uint16(x86_xMatch),
- /*3706*/ uint16(x86_xCondDataSize), 3694, 3700, 3710,
- /*3710*/ uint16(x86_xSetOp), uint16(x86_CMOVA),
- /*3712*/ uint16(x86_xReadSlashR),
- /*3713*/ uint16(x86_xArgR64),
- /*3714*/ uint16(x86_xArgRM64),
- /*3715*/ uint16(x86_xMatch),
- /*3716*/ uint16(x86_xCondIs64), 3719, 3735,
- /*3719*/ uint16(x86_xCondDataSize), 3723, 3729, 0,
- /*3723*/ uint16(x86_xSetOp), uint16(x86_CMOVS),
- /*3725*/ uint16(x86_xReadSlashR),
- /*3726*/ uint16(x86_xArgR16),
- /*3727*/ uint16(x86_xArgRM16),
- /*3728*/ uint16(x86_xMatch),
- /*3729*/ uint16(x86_xSetOp), uint16(x86_CMOVS),
- /*3731*/ uint16(x86_xReadSlashR),
- /*3732*/ uint16(x86_xArgR32),
- /*3733*/ uint16(x86_xArgRM32),
- /*3734*/ uint16(x86_xMatch),
- /*3735*/ uint16(x86_xCondDataSize), 3723, 3729, 3739,
- /*3739*/ uint16(x86_xSetOp), uint16(x86_CMOVS),
- /*3741*/ uint16(x86_xReadSlashR),
- /*3742*/ uint16(x86_xArgR64),
- /*3743*/ uint16(x86_xArgRM64),
- /*3744*/ uint16(x86_xMatch),
- /*3745*/ uint16(x86_xCondIs64), 3748, 3764,
- /*3748*/ uint16(x86_xCondDataSize), 3752, 3758, 0,
- /*3752*/ uint16(x86_xSetOp), uint16(x86_CMOVNS),
- /*3754*/ uint16(x86_xReadSlashR),
- /*3755*/ uint16(x86_xArgR16),
- /*3756*/ uint16(x86_xArgRM16),
- /*3757*/ uint16(x86_xMatch),
- /*3758*/ uint16(x86_xSetOp), uint16(x86_CMOVNS),
- /*3760*/ uint16(x86_xReadSlashR),
- /*3761*/ uint16(x86_xArgR32),
- /*3762*/ uint16(x86_xArgRM32),
- /*3763*/ uint16(x86_xMatch),
- /*3764*/ uint16(x86_xCondDataSize), 3752, 3758, 3768,
- /*3768*/ uint16(x86_xSetOp), uint16(x86_CMOVNS),
- /*3770*/ uint16(x86_xReadSlashR),
- /*3771*/ uint16(x86_xArgR64),
- /*3772*/ uint16(x86_xArgRM64),
- /*3773*/ uint16(x86_xMatch),
- /*3774*/ uint16(x86_xCondIs64), 3777, 3793,
- /*3777*/ uint16(x86_xCondDataSize), 3781, 3787, 0,
- /*3781*/ uint16(x86_xSetOp), uint16(x86_CMOVP),
- /*3783*/ uint16(x86_xReadSlashR),
- /*3784*/ uint16(x86_xArgR16),
- /*3785*/ uint16(x86_xArgRM16),
- /*3786*/ uint16(x86_xMatch),
- /*3787*/ uint16(x86_xSetOp), uint16(x86_CMOVP),
- /*3789*/ uint16(x86_xReadSlashR),
- /*3790*/ uint16(x86_xArgR32),
- /*3791*/ uint16(x86_xArgRM32),
- /*3792*/ uint16(x86_xMatch),
- /*3793*/ uint16(x86_xCondDataSize), 3781, 3787, 3797,
- /*3797*/ uint16(x86_xSetOp), uint16(x86_CMOVP),
- /*3799*/ uint16(x86_xReadSlashR),
- /*3800*/ uint16(x86_xArgR64),
- /*3801*/ uint16(x86_xArgRM64),
- /*3802*/ uint16(x86_xMatch),
- /*3803*/ uint16(x86_xCondIs64), 3806, 3822,
- /*3806*/ uint16(x86_xCondDataSize), 3810, 3816, 0,
- /*3810*/ uint16(x86_xSetOp), uint16(x86_CMOVNP),
- /*3812*/ uint16(x86_xReadSlashR),
- /*3813*/ uint16(x86_xArgR16),
- /*3814*/ uint16(x86_xArgRM16),
- /*3815*/ uint16(x86_xMatch),
- /*3816*/ uint16(x86_xSetOp), uint16(x86_CMOVNP),
- /*3818*/ uint16(x86_xReadSlashR),
- /*3819*/ uint16(x86_xArgR32),
- /*3820*/ uint16(x86_xArgRM32),
- /*3821*/ uint16(x86_xMatch),
- /*3822*/ uint16(x86_xCondDataSize), 3810, 3816, 3826,
- /*3826*/ uint16(x86_xSetOp), uint16(x86_CMOVNP),
- /*3828*/ uint16(x86_xReadSlashR),
- /*3829*/ uint16(x86_xArgR64),
- /*3830*/ uint16(x86_xArgRM64),
- /*3831*/ uint16(x86_xMatch),
- /*3832*/ uint16(x86_xCondIs64), 3835, 3851,
- /*3835*/ uint16(x86_xCondDataSize), 3839, 3845, 0,
- /*3839*/ uint16(x86_xSetOp), uint16(x86_CMOVL),
- /*3841*/ uint16(x86_xReadSlashR),
- /*3842*/ uint16(x86_xArgR16),
- /*3843*/ uint16(x86_xArgRM16),
- /*3844*/ uint16(x86_xMatch),
- /*3845*/ uint16(x86_xSetOp), uint16(x86_CMOVL),
- /*3847*/ uint16(x86_xReadSlashR),
- /*3848*/ uint16(x86_xArgR32),
- /*3849*/ uint16(x86_xArgRM32),
- /*3850*/ uint16(x86_xMatch),
- /*3851*/ uint16(x86_xCondDataSize), 3839, 3845, 3855,
- /*3855*/ uint16(x86_xSetOp), uint16(x86_CMOVL),
- /*3857*/ uint16(x86_xReadSlashR),
- /*3858*/ uint16(x86_xArgR64),
- /*3859*/ uint16(x86_xArgRM64),
- /*3860*/ uint16(x86_xMatch),
- /*3861*/ uint16(x86_xCondIs64), 3864, 3880,
- /*3864*/ uint16(x86_xCondDataSize), 3868, 3874, 0,
- /*3868*/ uint16(x86_xSetOp), uint16(x86_CMOVGE),
- /*3870*/ uint16(x86_xReadSlashR),
- /*3871*/ uint16(x86_xArgR16),
- /*3872*/ uint16(x86_xArgRM16),
- /*3873*/ uint16(x86_xMatch),
- /*3874*/ uint16(x86_xSetOp), uint16(x86_CMOVGE),
- /*3876*/ uint16(x86_xReadSlashR),
- /*3877*/ uint16(x86_xArgR32),
- /*3878*/ uint16(x86_xArgRM32),
- /*3879*/ uint16(x86_xMatch),
- /*3880*/ uint16(x86_xCondDataSize), 3868, 3874, 3884,
- /*3884*/ uint16(x86_xSetOp), uint16(x86_CMOVGE),
- /*3886*/ uint16(x86_xReadSlashR),
- /*3887*/ uint16(x86_xArgR64),
- /*3888*/ uint16(x86_xArgRM64),
- /*3889*/ uint16(x86_xMatch),
- /*3890*/ uint16(x86_xCondIs64), 3893, 3909,
- /*3893*/ uint16(x86_xCondDataSize), 3897, 3903, 0,
- /*3897*/ uint16(x86_xSetOp), uint16(x86_CMOVLE),
- /*3899*/ uint16(x86_xReadSlashR),
- /*3900*/ uint16(x86_xArgR16),
- /*3901*/ uint16(x86_xArgRM16),
- /*3902*/ uint16(x86_xMatch),
- /*3903*/ uint16(x86_xSetOp), uint16(x86_CMOVLE),
- /*3905*/ uint16(x86_xReadSlashR),
- /*3906*/ uint16(x86_xArgR32),
- /*3907*/ uint16(x86_xArgRM32),
- /*3908*/ uint16(x86_xMatch),
- /*3909*/ uint16(x86_xCondDataSize), 3897, 3903, 3913,
- /*3913*/ uint16(x86_xSetOp), uint16(x86_CMOVLE),
- /*3915*/ uint16(x86_xReadSlashR),
- /*3916*/ uint16(x86_xArgR64),
- /*3917*/ uint16(x86_xArgRM64),
- /*3918*/ uint16(x86_xMatch),
- /*3919*/ uint16(x86_xCondIs64), 3922, 3938,
- /*3922*/ uint16(x86_xCondDataSize), 3926, 3932, 0,
- /*3926*/ uint16(x86_xSetOp), uint16(x86_CMOVG),
- /*3928*/ uint16(x86_xReadSlashR),
- /*3929*/ uint16(x86_xArgR16),
- /*3930*/ uint16(x86_xArgRM16),
- /*3931*/ uint16(x86_xMatch),
- /*3932*/ uint16(x86_xSetOp), uint16(x86_CMOVG),
- /*3934*/ uint16(x86_xReadSlashR),
- /*3935*/ uint16(x86_xArgR32),
- /*3936*/ uint16(x86_xArgRM32),
- /*3937*/ uint16(x86_xMatch),
- /*3938*/ uint16(x86_xCondDataSize), 3926, 3932, 3942,
- /*3942*/ uint16(x86_xSetOp), uint16(x86_CMOVG),
- /*3944*/ uint16(x86_xReadSlashR),
- /*3945*/ uint16(x86_xArgR64),
- /*3946*/ uint16(x86_xArgRM64),
- /*3947*/ uint16(x86_xMatch),
- /*3948*/ uint16(x86_xCondPrefix), 2,
- 0x66, 3960,
- 0x0, 3954,
- /*3954*/ uint16(x86_xSetOp), uint16(x86_MOVMSKPS),
- /*3956*/ uint16(x86_xReadSlashR),
- /*3957*/ uint16(x86_xArgR32),
- /*3958*/ uint16(x86_xArgXmm2),
- /*3959*/ uint16(x86_xMatch),
- /*3960*/ uint16(x86_xSetOp), uint16(x86_MOVMSKPD),
- /*3962*/ uint16(x86_xReadSlashR),
- /*3963*/ uint16(x86_xArgR32),
- /*3964*/ uint16(x86_xArgXmm2),
- /*3965*/ uint16(x86_xMatch),
- /*3966*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 3994,
- 0xF2, 3988,
- 0x66, 3982,
- 0x0, 3976,
- /*3976*/ uint16(x86_xSetOp), uint16(x86_SQRTPS),
- /*3978*/ uint16(x86_xReadSlashR),
- /*3979*/ uint16(x86_xArgXmm1),
- /*3980*/ uint16(x86_xArgXmm2M128),
- /*3981*/ uint16(x86_xMatch),
- /*3982*/ uint16(x86_xSetOp), uint16(x86_SQRTPD),
- /*3984*/ uint16(x86_xReadSlashR),
- /*3985*/ uint16(x86_xArgXmm1),
- /*3986*/ uint16(x86_xArgXmm2M128),
- /*3987*/ uint16(x86_xMatch),
- /*3988*/ uint16(x86_xSetOp), uint16(x86_SQRTSD),
- /*3990*/ uint16(x86_xReadSlashR),
- /*3991*/ uint16(x86_xArgXmm1),
- /*3992*/ uint16(x86_xArgXmm2M64),
- /*3993*/ uint16(x86_xMatch),
- /*3994*/ uint16(x86_xSetOp), uint16(x86_SQRTSS),
- /*3996*/ uint16(x86_xReadSlashR),
- /*3997*/ uint16(x86_xArgXmm1),
- /*3998*/ uint16(x86_xArgXmm2M32),
- /*3999*/ uint16(x86_xMatch),
- /*4000*/ uint16(x86_xCondPrefix), 2,
- 0xF3, 4012,
- 0x0, 4006,
- /*4006*/ uint16(x86_xSetOp), uint16(x86_RSQRTPS),
- /*4008*/ uint16(x86_xReadSlashR),
- /*4009*/ uint16(x86_xArgXmm1),
- /*4010*/ uint16(x86_xArgXmm2M128),
- /*4011*/ uint16(x86_xMatch),
- /*4012*/ uint16(x86_xSetOp), uint16(x86_RSQRTSS),
- /*4014*/ uint16(x86_xReadSlashR),
- /*4015*/ uint16(x86_xArgXmm1),
- /*4016*/ uint16(x86_xArgXmm2M32),
- /*4017*/ uint16(x86_xMatch),
- /*4018*/ uint16(x86_xCondPrefix), 2,
- 0xF3, 4030,
- 0x0, 4024,
- /*4024*/ uint16(x86_xSetOp), uint16(x86_RCPPS),
- /*4026*/ uint16(x86_xReadSlashR),
- /*4027*/ uint16(x86_xArgXmm1),
- /*4028*/ uint16(x86_xArgXmm2M128),
- /*4029*/ uint16(x86_xMatch),
- /*4030*/ uint16(x86_xSetOp), uint16(x86_RCPSS),
- /*4032*/ uint16(x86_xReadSlashR),
- /*4033*/ uint16(x86_xArgXmm1),
- /*4034*/ uint16(x86_xArgXmm2M32),
- /*4035*/ uint16(x86_xMatch),
- /*4036*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4048,
- 0x0, 4042,
- /*4042*/ uint16(x86_xSetOp), uint16(x86_ANDPS),
- /*4044*/ uint16(x86_xReadSlashR),
- /*4045*/ uint16(x86_xArgXmm1),
- /*4046*/ uint16(x86_xArgXmm2M128),
- /*4047*/ uint16(x86_xMatch),
- /*4048*/ uint16(x86_xSetOp), uint16(x86_ANDPD),
- /*4050*/ uint16(x86_xReadSlashR),
- /*4051*/ uint16(x86_xArgXmm1),
- /*4052*/ uint16(x86_xArgXmm2M128),
- /*4053*/ uint16(x86_xMatch),
- /*4054*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4066,
- 0x0, 4060,
- /*4060*/ uint16(x86_xSetOp), uint16(x86_ANDNPS),
- /*4062*/ uint16(x86_xReadSlashR),
- /*4063*/ uint16(x86_xArgXmm1),
- /*4064*/ uint16(x86_xArgXmm2M128),
- /*4065*/ uint16(x86_xMatch),
- /*4066*/ uint16(x86_xSetOp), uint16(x86_ANDNPD),
- /*4068*/ uint16(x86_xReadSlashR),
- /*4069*/ uint16(x86_xArgXmm1),
- /*4070*/ uint16(x86_xArgXmm2M128),
- /*4071*/ uint16(x86_xMatch),
- /*4072*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4084,
- 0x0, 4078,
- /*4078*/ uint16(x86_xSetOp), uint16(x86_ORPS),
- /*4080*/ uint16(x86_xReadSlashR),
- /*4081*/ uint16(x86_xArgXmm1),
- /*4082*/ uint16(x86_xArgXmm2M128),
- /*4083*/ uint16(x86_xMatch),
- /*4084*/ uint16(x86_xSetOp), uint16(x86_ORPD),
- /*4086*/ uint16(x86_xReadSlashR),
- /*4087*/ uint16(x86_xArgXmm1),
- /*4088*/ uint16(x86_xArgXmm2M128),
- /*4089*/ uint16(x86_xMatch),
- /*4090*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4102,
- 0x0, 4096,
- /*4096*/ uint16(x86_xSetOp), uint16(x86_XORPS),
- /*4098*/ uint16(x86_xReadSlashR),
- /*4099*/ uint16(x86_xArgXmm1),
- /*4100*/ uint16(x86_xArgXmm2M128),
- /*4101*/ uint16(x86_xMatch),
- /*4102*/ uint16(x86_xSetOp), uint16(x86_XORPD),
- /*4104*/ uint16(x86_xReadSlashR),
- /*4105*/ uint16(x86_xArgXmm1),
- /*4106*/ uint16(x86_xArgXmm2M128),
- /*4107*/ uint16(x86_xMatch),
- /*4108*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 4136,
- 0xF2, 4130,
- 0x66, 4124,
- 0x0, 4118,
- /*4118*/ uint16(x86_xSetOp), uint16(x86_ADDPS),
- /*4120*/ uint16(x86_xReadSlashR),
- /*4121*/ uint16(x86_xArgXmm1),
- /*4122*/ uint16(x86_xArgXmm2M128),
- /*4123*/ uint16(x86_xMatch),
- /*4124*/ uint16(x86_xSetOp), uint16(x86_ADDPD),
- /*4126*/ uint16(x86_xReadSlashR),
- /*4127*/ uint16(x86_xArgXmm1),
- /*4128*/ uint16(x86_xArgXmm2M128),
- /*4129*/ uint16(x86_xMatch),
- /*4130*/ uint16(x86_xSetOp), uint16(x86_ADDSD),
- /*4132*/ uint16(x86_xReadSlashR),
- /*4133*/ uint16(x86_xArgXmm1),
- /*4134*/ uint16(x86_xArgXmm2M64),
- /*4135*/ uint16(x86_xMatch),
- /*4136*/ uint16(x86_xSetOp), uint16(x86_ADDSS),
- /*4138*/ uint16(x86_xReadSlashR),
- /*4139*/ uint16(x86_xArgXmm1),
- /*4140*/ uint16(x86_xArgXmm2M32),
- /*4141*/ uint16(x86_xMatch),
- /*4142*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 4170,
- 0xF2, 4164,
- 0x66, 4158,
- 0x0, 4152,
- /*4152*/ uint16(x86_xSetOp), uint16(x86_MULPS),
- /*4154*/ uint16(x86_xReadSlashR),
- /*4155*/ uint16(x86_xArgXmm1),
- /*4156*/ uint16(x86_xArgXmm2M128),
- /*4157*/ uint16(x86_xMatch),
- /*4158*/ uint16(x86_xSetOp), uint16(x86_MULPD),
- /*4160*/ uint16(x86_xReadSlashR),
- /*4161*/ uint16(x86_xArgXmm1),
- /*4162*/ uint16(x86_xArgXmm2M128),
- /*4163*/ uint16(x86_xMatch),
- /*4164*/ uint16(x86_xSetOp), uint16(x86_MULSD),
- /*4166*/ uint16(x86_xReadSlashR),
- /*4167*/ uint16(x86_xArgXmm1),
- /*4168*/ uint16(x86_xArgXmm2M64),
- /*4169*/ uint16(x86_xMatch),
- /*4170*/ uint16(x86_xSetOp), uint16(x86_MULSS),
- /*4172*/ uint16(x86_xReadSlashR),
- /*4173*/ uint16(x86_xArgXmm1),
- /*4174*/ uint16(x86_xArgXmm2M32),
- /*4175*/ uint16(x86_xMatch),
- /*4176*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 4204,
- 0xF2, 4198,
- 0x66, 4192,
- 0x0, 4186,
- /*4186*/ uint16(x86_xSetOp), uint16(x86_CVTPS2PD),
- /*4188*/ uint16(x86_xReadSlashR),
- /*4189*/ uint16(x86_xArgXmm1),
- /*4190*/ uint16(x86_xArgXmm2M64),
- /*4191*/ uint16(x86_xMatch),
- /*4192*/ uint16(x86_xSetOp), uint16(x86_CVTPD2PS),
- /*4194*/ uint16(x86_xReadSlashR),
- /*4195*/ uint16(x86_xArgXmm1),
- /*4196*/ uint16(x86_xArgXmm2M128),
- /*4197*/ uint16(x86_xMatch),
- /*4198*/ uint16(x86_xSetOp), uint16(x86_CVTSD2SS),
- /*4200*/ uint16(x86_xReadSlashR),
- /*4201*/ uint16(x86_xArgXmm1),
- /*4202*/ uint16(x86_xArgXmm2M64),
- /*4203*/ uint16(x86_xMatch),
- /*4204*/ uint16(x86_xSetOp), uint16(x86_CVTSS2SD),
- /*4206*/ uint16(x86_xReadSlashR),
- /*4207*/ uint16(x86_xArgXmm1),
- /*4208*/ uint16(x86_xArgXmm2M32),
- /*4209*/ uint16(x86_xMatch),
- /*4210*/ uint16(x86_xCondPrefix), 3,
- 0xF3, 4230,
- 0x66, 4224,
- 0x0, 4218,
- /*4218*/ uint16(x86_xSetOp), uint16(x86_CVTDQ2PS),
- /*4220*/ uint16(x86_xReadSlashR),
- /*4221*/ uint16(x86_xArgXmm1),
- /*4222*/ uint16(x86_xArgXmm2M128),
- /*4223*/ uint16(x86_xMatch),
- /*4224*/ uint16(x86_xSetOp), uint16(x86_CVTPS2DQ),
- /*4226*/ uint16(x86_xReadSlashR),
- /*4227*/ uint16(x86_xArgXmm1),
- /*4228*/ uint16(x86_xArgXmm2M128),
- /*4229*/ uint16(x86_xMatch),
- /*4230*/ uint16(x86_xSetOp), uint16(x86_CVTTPS2DQ),
- /*4232*/ uint16(x86_xReadSlashR),
- /*4233*/ uint16(x86_xArgXmm1),
- /*4234*/ uint16(x86_xArgXmm2M128),
- /*4235*/ uint16(x86_xMatch),
- /*4236*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 4264,
- 0xF2, 4258,
- 0x66, 4252,
- 0x0, 4246,
- /*4246*/ uint16(x86_xSetOp), uint16(x86_SUBPS),
- /*4248*/ uint16(x86_xReadSlashR),
- /*4249*/ uint16(x86_xArgXmm1),
- /*4250*/ uint16(x86_xArgXmm2M128),
- /*4251*/ uint16(x86_xMatch),
- /*4252*/ uint16(x86_xSetOp), uint16(x86_SUBPD),
- /*4254*/ uint16(x86_xReadSlashR),
- /*4255*/ uint16(x86_xArgXmm1),
- /*4256*/ uint16(x86_xArgXmm2M128),
- /*4257*/ uint16(x86_xMatch),
- /*4258*/ uint16(x86_xSetOp), uint16(x86_SUBSD),
- /*4260*/ uint16(x86_xReadSlashR),
- /*4261*/ uint16(x86_xArgXmm1),
- /*4262*/ uint16(x86_xArgXmm2M64),
- /*4263*/ uint16(x86_xMatch),
- /*4264*/ uint16(x86_xSetOp), uint16(x86_SUBSS),
- /*4266*/ uint16(x86_xReadSlashR),
- /*4267*/ uint16(x86_xArgXmm1),
- /*4268*/ uint16(x86_xArgXmm2M32),
- /*4269*/ uint16(x86_xMatch),
- /*4270*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 4298,
- 0xF2, 4292,
- 0x66, 4286,
- 0x0, 4280,
- /*4280*/ uint16(x86_xSetOp), uint16(x86_MINPS),
- /*4282*/ uint16(x86_xReadSlashR),
- /*4283*/ uint16(x86_xArgXmm1),
- /*4284*/ uint16(x86_xArgXmm2M128),
- /*4285*/ uint16(x86_xMatch),
- /*4286*/ uint16(x86_xSetOp), uint16(x86_MINPD),
- /*4288*/ uint16(x86_xReadSlashR),
- /*4289*/ uint16(x86_xArgXmm1),
- /*4290*/ uint16(x86_xArgXmm2M128),
- /*4291*/ uint16(x86_xMatch),
- /*4292*/ uint16(x86_xSetOp), uint16(x86_MINSD),
- /*4294*/ uint16(x86_xReadSlashR),
- /*4295*/ uint16(x86_xArgXmm1),
- /*4296*/ uint16(x86_xArgXmm2M64),
- /*4297*/ uint16(x86_xMatch),
- /*4298*/ uint16(x86_xSetOp), uint16(x86_MINSS),
- /*4300*/ uint16(x86_xReadSlashR),
- /*4301*/ uint16(x86_xArgXmm1),
- /*4302*/ uint16(x86_xArgXmm2M32),
- /*4303*/ uint16(x86_xMatch),
- /*4304*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 4332,
- 0xF2, 4326,
- 0x66, 4320,
- 0x0, 4314,
- /*4314*/ uint16(x86_xSetOp), uint16(x86_DIVPS),
- /*4316*/ uint16(x86_xReadSlashR),
- /*4317*/ uint16(x86_xArgXmm1),
- /*4318*/ uint16(x86_xArgXmm2M128),
- /*4319*/ uint16(x86_xMatch),
- /*4320*/ uint16(x86_xSetOp), uint16(x86_DIVPD),
- /*4322*/ uint16(x86_xReadSlashR),
- /*4323*/ uint16(x86_xArgXmm1),
- /*4324*/ uint16(x86_xArgXmm2M128),
- /*4325*/ uint16(x86_xMatch),
- /*4326*/ uint16(x86_xSetOp), uint16(x86_DIVSD),
- /*4328*/ uint16(x86_xReadSlashR),
- /*4329*/ uint16(x86_xArgXmm1),
- /*4330*/ uint16(x86_xArgXmm2M64),
- /*4331*/ uint16(x86_xMatch),
- /*4332*/ uint16(x86_xSetOp), uint16(x86_DIVSS),
- /*4334*/ uint16(x86_xReadSlashR),
- /*4335*/ uint16(x86_xArgXmm1),
- /*4336*/ uint16(x86_xArgXmm2M32),
- /*4337*/ uint16(x86_xMatch),
- /*4338*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 4366,
- 0xF2, 4360,
- 0x66, 4354,
- 0x0, 4348,
- /*4348*/ uint16(x86_xSetOp), uint16(x86_MAXPS),
- /*4350*/ uint16(x86_xReadSlashR),
- /*4351*/ uint16(x86_xArgXmm1),
- /*4352*/ uint16(x86_xArgXmm2M128),
- /*4353*/ uint16(x86_xMatch),
- /*4354*/ uint16(x86_xSetOp), uint16(x86_MAXPD),
- /*4356*/ uint16(x86_xReadSlashR),
- /*4357*/ uint16(x86_xArgXmm1),
- /*4358*/ uint16(x86_xArgXmm2M128),
- /*4359*/ uint16(x86_xMatch),
- /*4360*/ uint16(x86_xSetOp), uint16(x86_MAXSD),
- /*4362*/ uint16(x86_xReadSlashR),
- /*4363*/ uint16(x86_xArgXmm1),
- /*4364*/ uint16(x86_xArgXmm2M64),
- /*4365*/ uint16(x86_xMatch),
- /*4366*/ uint16(x86_xSetOp), uint16(x86_MAXSS),
- /*4368*/ uint16(x86_xReadSlashR),
- /*4369*/ uint16(x86_xArgXmm1),
- /*4370*/ uint16(x86_xArgXmm2M32),
- /*4371*/ uint16(x86_xMatch),
- /*4372*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4384,
- 0x0, 4378,
- /*4378*/ uint16(x86_xSetOp), uint16(x86_PUNPCKLBW),
- /*4380*/ uint16(x86_xReadSlashR),
- /*4381*/ uint16(x86_xArgMm),
- /*4382*/ uint16(x86_xArgMmM32),
- /*4383*/ uint16(x86_xMatch),
- /*4384*/ uint16(x86_xSetOp), uint16(x86_PUNPCKLBW),
- /*4386*/ uint16(x86_xReadSlashR),
- /*4387*/ uint16(x86_xArgXmm1),
- /*4388*/ uint16(x86_xArgXmm2M128),
- /*4389*/ uint16(x86_xMatch),
- /*4390*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4402,
- 0x0, 4396,
- /*4396*/ uint16(x86_xSetOp), uint16(x86_PUNPCKLWD),
- /*4398*/ uint16(x86_xReadSlashR),
- /*4399*/ uint16(x86_xArgMm),
- /*4400*/ uint16(x86_xArgMmM32),
- /*4401*/ uint16(x86_xMatch),
- /*4402*/ uint16(x86_xSetOp), uint16(x86_PUNPCKLWD),
- /*4404*/ uint16(x86_xReadSlashR),
- /*4405*/ uint16(x86_xArgXmm1),
- /*4406*/ uint16(x86_xArgXmm2M128),
- /*4407*/ uint16(x86_xMatch),
- /*4408*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4420,
- 0x0, 4414,
- /*4414*/ uint16(x86_xSetOp), uint16(x86_PUNPCKLDQ),
- /*4416*/ uint16(x86_xReadSlashR),
- /*4417*/ uint16(x86_xArgMm),
- /*4418*/ uint16(x86_xArgMmM32),
- /*4419*/ uint16(x86_xMatch),
- /*4420*/ uint16(x86_xSetOp), uint16(x86_PUNPCKLDQ),
- /*4422*/ uint16(x86_xReadSlashR),
- /*4423*/ uint16(x86_xArgXmm1),
- /*4424*/ uint16(x86_xArgXmm2M128),
- /*4425*/ uint16(x86_xMatch),
- /*4426*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4438,
- 0x0, 4432,
- /*4432*/ uint16(x86_xSetOp), uint16(x86_PACKSSWB),
- /*4434*/ uint16(x86_xReadSlashR),
- /*4435*/ uint16(x86_xArgMm1),
- /*4436*/ uint16(x86_xArgMm2M64),
- /*4437*/ uint16(x86_xMatch),
- /*4438*/ uint16(x86_xSetOp), uint16(x86_PACKSSWB),
- /*4440*/ uint16(x86_xReadSlashR),
- /*4441*/ uint16(x86_xArgXmm1),
- /*4442*/ uint16(x86_xArgXmm2M128),
- /*4443*/ uint16(x86_xMatch),
- /*4444*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4456,
- 0x0, 4450,
- /*4450*/ uint16(x86_xSetOp), uint16(x86_PCMPGTB),
- /*4452*/ uint16(x86_xReadSlashR),
- /*4453*/ uint16(x86_xArgMm),
- /*4454*/ uint16(x86_xArgMmM64),
- /*4455*/ uint16(x86_xMatch),
- /*4456*/ uint16(x86_xSetOp), uint16(x86_PCMPGTB),
- /*4458*/ uint16(x86_xReadSlashR),
- /*4459*/ uint16(x86_xArgXmm1),
- /*4460*/ uint16(x86_xArgXmm2M128),
- /*4461*/ uint16(x86_xMatch),
- /*4462*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4474,
- 0x0, 4468,
- /*4468*/ uint16(x86_xSetOp), uint16(x86_PCMPGTW),
- /*4470*/ uint16(x86_xReadSlashR),
- /*4471*/ uint16(x86_xArgMm),
- /*4472*/ uint16(x86_xArgMmM64),
- /*4473*/ uint16(x86_xMatch),
- /*4474*/ uint16(x86_xSetOp), uint16(x86_PCMPGTW),
- /*4476*/ uint16(x86_xReadSlashR),
- /*4477*/ uint16(x86_xArgXmm1),
- /*4478*/ uint16(x86_xArgXmm2M128),
- /*4479*/ uint16(x86_xMatch),
- /*4480*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4492,
- 0x0, 4486,
- /*4486*/ uint16(x86_xSetOp), uint16(x86_PCMPGTD),
- /*4488*/ uint16(x86_xReadSlashR),
- /*4489*/ uint16(x86_xArgMm),
- /*4490*/ uint16(x86_xArgMmM64),
- /*4491*/ uint16(x86_xMatch),
- /*4492*/ uint16(x86_xSetOp), uint16(x86_PCMPGTD),
- /*4494*/ uint16(x86_xReadSlashR),
- /*4495*/ uint16(x86_xArgXmm1),
- /*4496*/ uint16(x86_xArgXmm2M128),
- /*4497*/ uint16(x86_xMatch),
- /*4498*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4510,
- 0x0, 4504,
- /*4504*/ uint16(x86_xSetOp), uint16(x86_PACKUSWB),
- /*4506*/ uint16(x86_xReadSlashR),
- /*4507*/ uint16(x86_xArgMm),
- /*4508*/ uint16(x86_xArgMmM64),
- /*4509*/ uint16(x86_xMatch),
- /*4510*/ uint16(x86_xSetOp), uint16(x86_PACKUSWB),
- /*4512*/ uint16(x86_xReadSlashR),
- /*4513*/ uint16(x86_xArgXmm1),
- /*4514*/ uint16(x86_xArgXmm2M128),
- /*4515*/ uint16(x86_xMatch),
- /*4516*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4528,
- 0x0, 4522,
- /*4522*/ uint16(x86_xSetOp), uint16(x86_PUNPCKHBW),
- /*4524*/ uint16(x86_xReadSlashR),
- /*4525*/ uint16(x86_xArgMm),
- /*4526*/ uint16(x86_xArgMmM64),
- /*4527*/ uint16(x86_xMatch),
- /*4528*/ uint16(x86_xSetOp), uint16(x86_PUNPCKHBW),
- /*4530*/ uint16(x86_xReadSlashR),
- /*4531*/ uint16(x86_xArgXmm1),
- /*4532*/ uint16(x86_xArgXmm2M128),
- /*4533*/ uint16(x86_xMatch),
- /*4534*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4546,
- 0x0, 4540,
- /*4540*/ uint16(x86_xSetOp), uint16(x86_PUNPCKHWD),
- /*4542*/ uint16(x86_xReadSlashR),
- /*4543*/ uint16(x86_xArgMm),
- /*4544*/ uint16(x86_xArgMmM64),
- /*4545*/ uint16(x86_xMatch),
- /*4546*/ uint16(x86_xSetOp), uint16(x86_PUNPCKHWD),
- /*4548*/ uint16(x86_xReadSlashR),
- /*4549*/ uint16(x86_xArgXmm1),
- /*4550*/ uint16(x86_xArgXmm2M128),
- /*4551*/ uint16(x86_xMatch),
- /*4552*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4564,
- 0x0, 4558,
- /*4558*/ uint16(x86_xSetOp), uint16(x86_PUNPCKHDQ),
- /*4560*/ uint16(x86_xReadSlashR),
- /*4561*/ uint16(x86_xArgMm),
- /*4562*/ uint16(x86_xArgMmM64),
- /*4563*/ uint16(x86_xMatch),
- /*4564*/ uint16(x86_xSetOp), uint16(x86_PUNPCKHDQ),
- /*4566*/ uint16(x86_xReadSlashR),
- /*4567*/ uint16(x86_xArgXmm1),
- /*4568*/ uint16(x86_xArgXmm2M128),
- /*4569*/ uint16(x86_xMatch),
- /*4570*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4582,
- 0x0, 4576,
- /*4576*/ uint16(x86_xSetOp), uint16(x86_PACKSSDW),
- /*4578*/ uint16(x86_xReadSlashR),
- /*4579*/ uint16(x86_xArgMm1),
- /*4580*/ uint16(x86_xArgMm2M64),
- /*4581*/ uint16(x86_xMatch),
- /*4582*/ uint16(x86_xSetOp), uint16(x86_PACKSSDW),
- /*4584*/ uint16(x86_xReadSlashR),
- /*4585*/ uint16(x86_xArgXmm1),
- /*4586*/ uint16(x86_xArgXmm2M128),
- /*4587*/ uint16(x86_xMatch),
- /*4588*/ uint16(x86_xCondPrefix), 1,
- 0x66, 4592,
- /*4592*/ uint16(x86_xSetOp), uint16(x86_PUNPCKLQDQ),
- /*4594*/ uint16(x86_xReadSlashR),
- /*4595*/ uint16(x86_xArgXmm1),
- /*4596*/ uint16(x86_xArgXmm2M128),
- /*4597*/ uint16(x86_xMatch),
- /*4598*/ uint16(x86_xCondPrefix), 1,
- 0x66, 4602,
- /*4602*/ uint16(x86_xSetOp), uint16(x86_PUNPCKHQDQ),
- /*4604*/ uint16(x86_xReadSlashR),
- /*4605*/ uint16(x86_xArgXmm1),
- /*4606*/ uint16(x86_xArgXmm2M128),
- /*4607*/ uint16(x86_xMatch),
- /*4608*/ uint16(x86_xCondIs64), 4611, 4649,
- /*4611*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4633,
- 0x0, 4617,
- /*4617*/ uint16(x86_xCondDataSize), 4621, 4627, 0,
- /*4621*/ uint16(x86_xSetOp), uint16(x86_MOVD),
- /*4623*/ uint16(x86_xReadSlashR),
- /*4624*/ uint16(x86_xArgMm),
- /*4625*/ uint16(x86_xArgRM32),
- /*4626*/ uint16(x86_xMatch),
- /*4627*/ uint16(x86_xSetOp), uint16(x86_MOVD),
- /*4629*/ uint16(x86_xReadSlashR),
- /*4630*/ uint16(x86_xArgMm),
- /*4631*/ uint16(x86_xArgRM32),
- /*4632*/ uint16(x86_xMatch),
- /*4633*/ uint16(x86_xCondDataSize), 4637, 4643, 0,
- /*4637*/ uint16(x86_xSetOp), uint16(x86_MOVD),
- /*4639*/ uint16(x86_xReadSlashR),
- /*4640*/ uint16(x86_xArgXmm),
- /*4641*/ uint16(x86_xArgRM32),
- /*4642*/ uint16(x86_xMatch),
- /*4643*/ uint16(x86_xSetOp), uint16(x86_MOVD),
- /*4645*/ uint16(x86_xReadSlashR),
- /*4646*/ uint16(x86_xArgXmm),
- /*4647*/ uint16(x86_xArgRM32),
- /*4648*/ uint16(x86_xMatch),
- /*4649*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4665,
- 0x0, 4655,
- /*4655*/ uint16(x86_xCondDataSize), 4621, 4627, 4659,
- /*4659*/ uint16(x86_xSetOp), uint16(x86_MOVQ),
- /*4661*/ uint16(x86_xReadSlashR),
- /*4662*/ uint16(x86_xArgMm),
- /*4663*/ uint16(x86_xArgRM64),
- /*4664*/ uint16(x86_xMatch),
- /*4665*/ uint16(x86_xCondDataSize), 4637, 4643, 4669,
- /*4669*/ uint16(x86_xSetOp), uint16(x86_MOVQ),
- /*4671*/ uint16(x86_xReadSlashR),
- /*4672*/ uint16(x86_xArgXmm),
- /*4673*/ uint16(x86_xArgRM64),
- /*4674*/ uint16(x86_xMatch),
- /*4675*/ uint16(x86_xCondPrefix), 3,
- 0xF3, 4695,
- 0x66, 4689,
- 0x0, 4683,
- /*4683*/ uint16(x86_xSetOp), uint16(x86_MOVQ),
- /*4685*/ uint16(x86_xReadSlashR),
- /*4686*/ uint16(x86_xArgMm),
- /*4687*/ uint16(x86_xArgMmM64),
- /*4688*/ uint16(x86_xMatch),
- /*4689*/ uint16(x86_xSetOp), uint16(x86_MOVDQA),
- /*4691*/ uint16(x86_xReadSlashR),
- /*4692*/ uint16(x86_xArgXmm1),
- /*4693*/ uint16(x86_xArgXmm2M128),
- /*4694*/ uint16(x86_xMatch),
- /*4695*/ uint16(x86_xSetOp), uint16(x86_MOVDQU),
- /*4697*/ uint16(x86_xReadSlashR),
- /*4698*/ uint16(x86_xArgXmm1),
- /*4699*/ uint16(x86_xArgXmm2M128),
- /*4700*/ uint16(x86_xMatch),
- /*4701*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 4735,
- 0xF2, 4727,
- 0x66, 4719,
- 0x0, 4711,
- /*4711*/ uint16(x86_xSetOp), uint16(x86_PSHUFW),
- /*4713*/ uint16(x86_xReadSlashR),
- /*4714*/ uint16(x86_xReadIb),
- /*4715*/ uint16(x86_xArgMm1),
- /*4716*/ uint16(x86_xArgMm2M64),
- /*4717*/ uint16(x86_xArgImm8u),
- /*4718*/ uint16(x86_xMatch),
- /*4719*/ uint16(x86_xSetOp), uint16(x86_PSHUFD),
- /*4721*/ uint16(x86_xReadSlashR),
- /*4722*/ uint16(x86_xReadIb),
- /*4723*/ uint16(x86_xArgXmm1),
- /*4724*/ uint16(x86_xArgXmm2M128),
- /*4725*/ uint16(x86_xArgImm8u),
- /*4726*/ uint16(x86_xMatch),
- /*4727*/ uint16(x86_xSetOp), uint16(x86_PSHUFLW),
- /*4729*/ uint16(x86_xReadSlashR),
- /*4730*/ uint16(x86_xReadIb),
- /*4731*/ uint16(x86_xArgXmm1),
- /*4732*/ uint16(x86_xArgXmm2M128),
- /*4733*/ uint16(x86_xArgImm8u),
- /*4734*/ uint16(x86_xMatch),
- /*4735*/ uint16(x86_xSetOp), uint16(x86_PSHUFHW),
- /*4737*/ uint16(x86_xReadSlashR),
- /*4738*/ uint16(x86_xReadIb),
- /*4739*/ uint16(x86_xArgXmm1),
- /*4740*/ uint16(x86_xArgXmm2M128),
- /*4741*/ uint16(x86_xArgImm8u),
- /*4742*/ uint16(x86_xMatch),
- /*4743*/ uint16(x86_xCondSlashR),
- 0, // 0
- 0, // 1
- 4752, // 2
- 0, // 3
- 4770, // 4
- 0, // 5
- 4788, // 6
- 0, // 7
- /*4752*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4764,
- 0x0, 4758,
- /*4758*/ uint16(x86_xSetOp), uint16(x86_PSRLW),
- /*4760*/ uint16(x86_xReadIb),
- /*4761*/ uint16(x86_xArgMm2),
- /*4762*/ uint16(x86_xArgImm8u),
- /*4763*/ uint16(x86_xMatch),
- /*4764*/ uint16(x86_xSetOp), uint16(x86_PSRLW),
- /*4766*/ uint16(x86_xReadIb),
- /*4767*/ uint16(x86_xArgXmm2),
- /*4768*/ uint16(x86_xArgImm8u),
- /*4769*/ uint16(x86_xMatch),
- /*4770*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4782,
- 0x0, 4776,
- /*4776*/ uint16(x86_xSetOp), uint16(x86_PSRAW),
- /*4778*/ uint16(x86_xReadIb),
- /*4779*/ uint16(x86_xArgMm2),
- /*4780*/ uint16(x86_xArgImm8u),
- /*4781*/ uint16(x86_xMatch),
- /*4782*/ uint16(x86_xSetOp), uint16(x86_PSRAW),
- /*4784*/ uint16(x86_xReadIb),
- /*4785*/ uint16(x86_xArgXmm2),
- /*4786*/ uint16(x86_xArgImm8u),
- /*4787*/ uint16(x86_xMatch),
- /*4788*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4800,
- 0x0, 4794,
- /*4794*/ uint16(x86_xSetOp), uint16(x86_PSLLW),
- /*4796*/ uint16(x86_xReadIb),
- /*4797*/ uint16(x86_xArgMm2),
- /*4798*/ uint16(x86_xArgImm8u),
- /*4799*/ uint16(x86_xMatch),
- /*4800*/ uint16(x86_xSetOp), uint16(x86_PSLLW),
- /*4802*/ uint16(x86_xReadIb),
- /*4803*/ uint16(x86_xArgXmm2),
- /*4804*/ uint16(x86_xArgImm8u),
- /*4805*/ uint16(x86_xMatch),
- /*4806*/ uint16(x86_xCondSlashR),
- 0, // 0
- 0, // 1
- 4815, // 2
- 0, // 3
- 4833, // 4
- 0, // 5
- 4851, // 6
- 0, // 7
- /*4815*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4827,
- 0x0, 4821,
- /*4821*/ uint16(x86_xSetOp), uint16(x86_PSRLD),
- /*4823*/ uint16(x86_xReadIb),
- /*4824*/ uint16(x86_xArgMm2),
- /*4825*/ uint16(x86_xArgImm8u),
- /*4826*/ uint16(x86_xMatch),
- /*4827*/ uint16(x86_xSetOp), uint16(x86_PSRLD),
- /*4829*/ uint16(x86_xReadIb),
- /*4830*/ uint16(x86_xArgXmm2),
- /*4831*/ uint16(x86_xArgImm8u),
- /*4832*/ uint16(x86_xMatch),
- /*4833*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4845,
- 0x0, 4839,
- /*4839*/ uint16(x86_xSetOp), uint16(x86_PSRAD),
- /*4841*/ uint16(x86_xReadIb),
- /*4842*/ uint16(x86_xArgMm2),
- /*4843*/ uint16(x86_xArgImm8u),
- /*4844*/ uint16(x86_xMatch),
- /*4845*/ uint16(x86_xSetOp), uint16(x86_PSRAD),
- /*4847*/ uint16(x86_xReadIb),
- /*4848*/ uint16(x86_xArgXmm2),
- /*4849*/ uint16(x86_xArgImm8u),
- /*4850*/ uint16(x86_xMatch),
- /*4851*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4863,
- 0x0, 4857,
- /*4857*/ uint16(x86_xSetOp), uint16(x86_PSLLD),
- /*4859*/ uint16(x86_xReadIb),
- /*4860*/ uint16(x86_xArgMm2),
- /*4861*/ uint16(x86_xArgImm8u),
- /*4862*/ uint16(x86_xMatch),
- /*4863*/ uint16(x86_xSetOp), uint16(x86_PSLLD),
- /*4865*/ uint16(x86_xReadIb),
- /*4866*/ uint16(x86_xArgXmm2),
- /*4867*/ uint16(x86_xArgImm8u),
- /*4868*/ uint16(x86_xMatch),
- /*4869*/ uint16(x86_xCondSlashR),
- 0, // 0
- 0, // 1
- 4878, // 2
- 4896, // 3
- 0, // 4
- 0, // 5
- 4906, // 6
- 4924, // 7
- /*4878*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4890,
- 0x0, 4884,
- /*4884*/ uint16(x86_xSetOp), uint16(x86_PSRLQ),
- /*4886*/ uint16(x86_xReadIb),
- /*4887*/ uint16(x86_xArgMm2),
- /*4888*/ uint16(x86_xArgImm8u),
- /*4889*/ uint16(x86_xMatch),
- /*4890*/ uint16(x86_xSetOp), uint16(x86_PSRLQ),
- /*4892*/ uint16(x86_xReadIb),
- /*4893*/ uint16(x86_xArgXmm2),
- /*4894*/ uint16(x86_xArgImm8u),
- /*4895*/ uint16(x86_xMatch),
- /*4896*/ uint16(x86_xCondPrefix), 1,
- 0x66, 4900,
- /*4900*/ uint16(x86_xSetOp), uint16(x86_PSRLDQ),
- /*4902*/ uint16(x86_xReadIb),
- /*4903*/ uint16(x86_xArgXmm2),
- /*4904*/ uint16(x86_xArgImm8u),
- /*4905*/ uint16(x86_xMatch),
- /*4906*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4918,
- 0x0, 4912,
- /*4912*/ uint16(x86_xSetOp), uint16(x86_PSLLQ),
- /*4914*/ uint16(x86_xReadIb),
- /*4915*/ uint16(x86_xArgMm2),
- /*4916*/ uint16(x86_xArgImm8u),
- /*4917*/ uint16(x86_xMatch),
- /*4918*/ uint16(x86_xSetOp), uint16(x86_PSLLQ),
- /*4920*/ uint16(x86_xReadIb),
- /*4921*/ uint16(x86_xArgXmm2),
- /*4922*/ uint16(x86_xArgImm8u),
- /*4923*/ uint16(x86_xMatch),
- /*4924*/ uint16(x86_xCondPrefix), 1,
- 0x66, 4928,
- /*4928*/ uint16(x86_xSetOp), uint16(x86_PSLLDQ),
- /*4930*/ uint16(x86_xReadIb),
- /*4931*/ uint16(x86_xArgXmm2),
- /*4932*/ uint16(x86_xArgImm8u),
- /*4933*/ uint16(x86_xMatch),
- /*4934*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4946,
- 0x0, 4940,
- /*4940*/ uint16(x86_xSetOp), uint16(x86_PCMPEQB),
- /*4942*/ uint16(x86_xReadSlashR),
- /*4943*/ uint16(x86_xArgMm),
- /*4944*/ uint16(x86_xArgMmM64),
- /*4945*/ uint16(x86_xMatch),
- /*4946*/ uint16(x86_xSetOp), uint16(x86_PCMPEQB),
- /*4948*/ uint16(x86_xReadSlashR),
- /*4949*/ uint16(x86_xArgXmm1),
- /*4950*/ uint16(x86_xArgXmm2M128),
- /*4951*/ uint16(x86_xMatch),
- /*4952*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4964,
- 0x0, 4958,
- /*4958*/ uint16(x86_xSetOp), uint16(x86_PCMPEQW),
- /*4960*/ uint16(x86_xReadSlashR),
- /*4961*/ uint16(x86_xArgMm),
- /*4962*/ uint16(x86_xArgMmM64),
- /*4963*/ uint16(x86_xMatch),
- /*4964*/ uint16(x86_xSetOp), uint16(x86_PCMPEQW),
- /*4966*/ uint16(x86_xReadSlashR),
- /*4967*/ uint16(x86_xArgXmm1),
- /*4968*/ uint16(x86_xArgXmm2M128),
- /*4969*/ uint16(x86_xMatch),
- /*4970*/ uint16(x86_xCondPrefix), 2,
- 0x66, 4982,
- 0x0, 4976,
- /*4976*/ uint16(x86_xSetOp), uint16(x86_PCMPEQD),
- /*4978*/ uint16(x86_xReadSlashR),
- /*4979*/ uint16(x86_xArgMm),
- /*4980*/ uint16(x86_xArgMmM64),
- /*4981*/ uint16(x86_xMatch),
- /*4982*/ uint16(x86_xSetOp), uint16(x86_PCMPEQD),
- /*4984*/ uint16(x86_xReadSlashR),
- /*4985*/ uint16(x86_xArgXmm1),
- /*4986*/ uint16(x86_xArgXmm2M128),
- /*4987*/ uint16(x86_xMatch),
- /*4988*/ uint16(x86_xSetOp), uint16(x86_EMMS),
- /*4990*/ uint16(x86_xMatch),
- /*4991*/ uint16(x86_xCondPrefix), 2,
- 0xF2, 5003,
- 0x66, 4997,
- /*4997*/ uint16(x86_xSetOp), uint16(x86_HADDPD),
- /*4999*/ uint16(x86_xReadSlashR),
- /*5000*/ uint16(x86_xArgXmm1),
- /*5001*/ uint16(x86_xArgXmm2M128),
- /*5002*/ uint16(x86_xMatch),
- /*5003*/ uint16(x86_xSetOp), uint16(x86_HADDPS),
- /*5005*/ uint16(x86_xReadSlashR),
- /*5006*/ uint16(x86_xArgXmm1),
- /*5007*/ uint16(x86_xArgXmm2M128),
- /*5008*/ uint16(x86_xMatch),
- /*5009*/ uint16(x86_xCondPrefix), 2,
- 0xF2, 5021,
- 0x66, 5015,
- /*5015*/ uint16(x86_xSetOp), uint16(x86_HSUBPD),
- /*5017*/ uint16(x86_xReadSlashR),
- /*5018*/ uint16(x86_xArgXmm1),
- /*5019*/ uint16(x86_xArgXmm2M128),
- /*5020*/ uint16(x86_xMatch),
- /*5021*/ uint16(x86_xSetOp), uint16(x86_HSUBPS),
- /*5023*/ uint16(x86_xReadSlashR),
- /*5024*/ uint16(x86_xArgXmm1),
- /*5025*/ uint16(x86_xArgXmm2M128),
- /*5026*/ uint16(x86_xMatch),
- /*5027*/ uint16(x86_xCondIs64), 5030, 5076,
- /*5030*/ uint16(x86_xCondPrefix), 3,
- 0xF3, 5070,
- 0x66, 5054,
- 0x0, 5038,
- /*5038*/ uint16(x86_xCondDataSize), 5042, 5048, 0,
- /*5042*/ uint16(x86_xSetOp), uint16(x86_MOVD),
- /*5044*/ uint16(x86_xReadSlashR),
- /*5045*/ uint16(x86_xArgRM32),
- /*5046*/ uint16(x86_xArgMm),
- /*5047*/ uint16(x86_xMatch),
- /*5048*/ uint16(x86_xSetOp), uint16(x86_MOVD),
- /*5050*/ uint16(x86_xReadSlashR),
- /*5051*/ uint16(x86_xArgRM32),
- /*5052*/ uint16(x86_xArgMm),
- /*5053*/ uint16(x86_xMatch),
- /*5054*/ uint16(x86_xCondDataSize), 5058, 5064, 0,
- /*5058*/ uint16(x86_xSetOp), uint16(x86_MOVD),
- /*5060*/ uint16(x86_xReadSlashR),
- /*5061*/ uint16(x86_xArgRM32),
- /*5062*/ uint16(x86_xArgXmm),
- /*5063*/ uint16(x86_xMatch),
- /*5064*/ uint16(x86_xSetOp), uint16(x86_MOVD),
- /*5066*/ uint16(x86_xReadSlashR),
- /*5067*/ uint16(x86_xArgRM32),
- /*5068*/ uint16(x86_xArgXmm),
- /*5069*/ uint16(x86_xMatch),
- /*5070*/ uint16(x86_xSetOp), uint16(x86_MOVQ),
- /*5072*/ uint16(x86_xReadSlashR),
- /*5073*/ uint16(x86_xArgXmm1),
- /*5074*/ uint16(x86_xArgXmm2M64),
- /*5075*/ uint16(x86_xMatch),
- /*5076*/ uint16(x86_xCondPrefix), 3,
- 0xF3, 5070,
- 0x66, 5094,
- 0x0, 5084,
- /*5084*/ uint16(x86_xCondDataSize), 5042, 5048, 5088,
- /*5088*/ uint16(x86_xSetOp), uint16(x86_MOVQ),
- /*5090*/ uint16(x86_xReadSlashR),
- /*5091*/ uint16(x86_xArgRM64),
- /*5092*/ uint16(x86_xArgMm),
- /*5093*/ uint16(x86_xMatch),
- /*5094*/ uint16(x86_xCondDataSize), 5058, 5064, 5098,
- /*5098*/ uint16(x86_xSetOp), uint16(x86_MOVQ),
- /*5100*/ uint16(x86_xReadSlashR),
- /*5101*/ uint16(x86_xArgRM64),
- /*5102*/ uint16(x86_xArgXmm),
- /*5103*/ uint16(x86_xMatch),
- /*5104*/ uint16(x86_xCondPrefix), 3,
- 0xF3, 5124,
- 0x66, 5118,
- 0x0, 5112,
- /*5112*/ uint16(x86_xSetOp), uint16(x86_MOVQ),
- /*5114*/ uint16(x86_xReadSlashR),
- /*5115*/ uint16(x86_xArgMmM64),
- /*5116*/ uint16(x86_xArgMm),
- /*5117*/ uint16(x86_xMatch),
- /*5118*/ uint16(x86_xSetOp), uint16(x86_MOVDQA),
- /*5120*/ uint16(x86_xReadSlashR),
- /*5121*/ uint16(x86_xArgXmm2M128),
- /*5122*/ uint16(x86_xArgXmm1),
- /*5123*/ uint16(x86_xMatch),
- /*5124*/ uint16(x86_xSetOp), uint16(x86_MOVDQU),
- /*5126*/ uint16(x86_xReadSlashR),
- /*5127*/ uint16(x86_xArgXmm2M128),
- /*5128*/ uint16(x86_xArgXmm1),
- /*5129*/ uint16(x86_xMatch),
- /*5130*/ uint16(x86_xCondIs64), 5133, 5147,
- /*5133*/ uint16(x86_xCondDataSize), 5137, 5142, 0,
- /*5137*/ uint16(x86_xSetOp), uint16(x86_JO),
- /*5139*/ uint16(x86_xReadCw),
- /*5140*/ uint16(x86_xArgRel16),
- /*5141*/ uint16(x86_xMatch),
- /*5142*/ uint16(x86_xSetOp), uint16(x86_JO),
- /*5144*/ uint16(x86_xReadCd),
- /*5145*/ uint16(x86_xArgRel32),
- /*5146*/ uint16(x86_xMatch),
- /*5147*/ uint16(x86_xCondDataSize), 5151, 5142, 5156,
- /*5151*/ uint16(x86_xSetOp), uint16(x86_JO),
- /*5153*/ uint16(x86_xReadCd),
- /*5154*/ uint16(x86_xArgRel32),
- /*5155*/ uint16(x86_xMatch),
- /*5156*/ uint16(x86_xSetOp), uint16(x86_JO),
- /*5158*/ uint16(x86_xReadCd),
- /*5159*/ uint16(x86_xArgRel32),
- /*5160*/ uint16(x86_xMatch),
- /*5161*/ uint16(x86_xCondIs64), 5164, 5178,
- /*5164*/ uint16(x86_xCondDataSize), 5168, 5173, 0,
- /*5168*/ uint16(x86_xSetOp), uint16(x86_JNO),
- /*5170*/ uint16(x86_xReadCw),
- /*5171*/ uint16(x86_xArgRel16),
- /*5172*/ uint16(x86_xMatch),
- /*5173*/ uint16(x86_xSetOp), uint16(x86_JNO),
- /*5175*/ uint16(x86_xReadCd),
- /*5176*/ uint16(x86_xArgRel32),
- /*5177*/ uint16(x86_xMatch),
- /*5178*/ uint16(x86_xCondDataSize), 5182, 5173, 5187,
- /*5182*/ uint16(x86_xSetOp), uint16(x86_JNO),
- /*5184*/ uint16(x86_xReadCd),
- /*5185*/ uint16(x86_xArgRel32),
- /*5186*/ uint16(x86_xMatch),
- /*5187*/ uint16(x86_xSetOp), uint16(x86_JNO),
- /*5189*/ uint16(x86_xReadCd),
- /*5190*/ uint16(x86_xArgRel32),
- /*5191*/ uint16(x86_xMatch),
- /*5192*/ uint16(x86_xCondIs64), 5195, 5209,
- /*5195*/ uint16(x86_xCondDataSize), 5199, 5204, 0,
- /*5199*/ uint16(x86_xSetOp), uint16(x86_JB),
- /*5201*/ uint16(x86_xReadCw),
- /*5202*/ uint16(x86_xArgRel16),
- /*5203*/ uint16(x86_xMatch),
- /*5204*/ uint16(x86_xSetOp), uint16(x86_JB),
- /*5206*/ uint16(x86_xReadCd),
- /*5207*/ uint16(x86_xArgRel32),
- /*5208*/ uint16(x86_xMatch),
- /*5209*/ uint16(x86_xCondDataSize), 5213, 5204, 5218,
- /*5213*/ uint16(x86_xSetOp), uint16(x86_JB),
- /*5215*/ uint16(x86_xReadCd),
- /*5216*/ uint16(x86_xArgRel32),
- /*5217*/ uint16(x86_xMatch),
- /*5218*/ uint16(x86_xSetOp), uint16(x86_JB),
- /*5220*/ uint16(x86_xReadCd),
- /*5221*/ uint16(x86_xArgRel32),
- /*5222*/ uint16(x86_xMatch),
- /*5223*/ uint16(x86_xCondIs64), 5226, 5240,
- /*5226*/ uint16(x86_xCondDataSize), 5230, 5235, 0,
- /*5230*/ uint16(x86_xSetOp), uint16(x86_JAE),
- /*5232*/ uint16(x86_xReadCw),
- /*5233*/ uint16(x86_xArgRel16),
- /*5234*/ uint16(x86_xMatch),
- /*5235*/ uint16(x86_xSetOp), uint16(x86_JAE),
- /*5237*/ uint16(x86_xReadCd),
- /*5238*/ uint16(x86_xArgRel32),
- /*5239*/ uint16(x86_xMatch),
- /*5240*/ uint16(x86_xCondDataSize), 5244, 5235, 5249,
- /*5244*/ uint16(x86_xSetOp), uint16(x86_JAE),
- /*5246*/ uint16(x86_xReadCd),
- /*5247*/ uint16(x86_xArgRel32),
- /*5248*/ uint16(x86_xMatch),
- /*5249*/ uint16(x86_xSetOp), uint16(x86_JAE),
- /*5251*/ uint16(x86_xReadCd),
- /*5252*/ uint16(x86_xArgRel32),
- /*5253*/ uint16(x86_xMatch),
- /*5254*/ uint16(x86_xCondIs64), 5257, 5271,
- /*5257*/ uint16(x86_xCondDataSize), 5261, 5266, 0,
- /*5261*/ uint16(x86_xSetOp), uint16(x86_JE),
- /*5263*/ uint16(x86_xReadCw),
- /*5264*/ uint16(x86_xArgRel16),
- /*5265*/ uint16(x86_xMatch),
- /*5266*/ uint16(x86_xSetOp), uint16(x86_JE),
- /*5268*/ uint16(x86_xReadCd),
- /*5269*/ uint16(x86_xArgRel32),
- /*5270*/ uint16(x86_xMatch),
- /*5271*/ uint16(x86_xCondDataSize), 5275, 5266, 5280,
- /*5275*/ uint16(x86_xSetOp), uint16(x86_JE),
- /*5277*/ uint16(x86_xReadCd),
- /*5278*/ uint16(x86_xArgRel32),
- /*5279*/ uint16(x86_xMatch),
- /*5280*/ uint16(x86_xSetOp), uint16(x86_JE),
- /*5282*/ uint16(x86_xReadCd),
- /*5283*/ uint16(x86_xArgRel32),
- /*5284*/ uint16(x86_xMatch),
- /*5285*/ uint16(x86_xCondIs64), 5288, 5302,
- /*5288*/ uint16(x86_xCondDataSize), 5292, 5297, 0,
- /*5292*/ uint16(x86_xSetOp), uint16(x86_JNE),
- /*5294*/ uint16(x86_xReadCw),
- /*5295*/ uint16(x86_xArgRel16),
- /*5296*/ uint16(x86_xMatch),
- /*5297*/ uint16(x86_xSetOp), uint16(x86_JNE),
- /*5299*/ uint16(x86_xReadCd),
- /*5300*/ uint16(x86_xArgRel32),
- /*5301*/ uint16(x86_xMatch),
- /*5302*/ uint16(x86_xCondDataSize), 5306, 5297, 5311,
- /*5306*/ uint16(x86_xSetOp), uint16(x86_JNE),
- /*5308*/ uint16(x86_xReadCd),
- /*5309*/ uint16(x86_xArgRel32),
- /*5310*/ uint16(x86_xMatch),
- /*5311*/ uint16(x86_xSetOp), uint16(x86_JNE),
- /*5313*/ uint16(x86_xReadCd),
- /*5314*/ uint16(x86_xArgRel32),
- /*5315*/ uint16(x86_xMatch),
- /*5316*/ uint16(x86_xCondIs64), 5319, 5333,
- /*5319*/ uint16(x86_xCondDataSize), 5323, 5328, 0,
- /*5323*/ uint16(x86_xSetOp), uint16(x86_JBE),
- /*5325*/ uint16(x86_xReadCw),
- /*5326*/ uint16(x86_xArgRel16),
- /*5327*/ uint16(x86_xMatch),
- /*5328*/ uint16(x86_xSetOp), uint16(x86_JBE),
- /*5330*/ uint16(x86_xReadCd),
- /*5331*/ uint16(x86_xArgRel32),
- /*5332*/ uint16(x86_xMatch),
- /*5333*/ uint16(x86_xCondDataSize), 5337, 5328, 5342,
- /*5337*/ uint16(x86_xSetOp), uint16(x86_JBE),
- /*5339*/ uint16(x86_xReadCd),
- /*5340*/ uint16(x86_xArgRel32),
- /*5341*/ uint16(x86_xMatch),
- /*5342*/ uint16(x86_xSetOp), uint16(x86_JBE),
- /*5344*/ uint16(x86_xReadCd),
- /*5345*/ uint16(x86_xArgRel32),
- /*5346*/ uint16(x86_xMatch),
- /*5347*/ uint16(x86_xCondIs64), 5350, 5364,
- /*5350*/ uint16(x86_xCondDataSize), 5354, 5359, 0,
- /*5354*/ uint16(x86_xSetOp), uint16(x86_JA),
- /*5356*/ uint16(x86_xReadCw),
- /*5357*/ uint16(x86_xArgRel16),
- /*5358*/ uint16(x86_xMatch),
- /*5359*/ uint16(x86_xSetOp), uint16(x86_JA),
- /*5361*/ uint16(x86_xReadCd),
- /*5362*/ uint16(x86_xArgRel32),
- /*5363*/ uint16(x86_xMatch),
- /*5364*/ uint16(x86_xCondDataSize), 5368, 5359, 5373,
- /*5368*/ uint16(x86_xSetOp), uint16(x86_JA),
- /*5370*/ uint16(x86_xReadCd),
- /*5371*/ uint16(x86_xArgRel32),
- /*5372*/ uint16(x86_xMatch),
- /*5373*/ uint16(x86_xSetOp), uint16(x86_JA),
- /*5375*/ uint16(x86_xReadCd),
- /*5376*/ uint16(x86_xArgRel32),
- /*5377*/ uint16(x86_xMatch),
- /*5378*/ uint16(x86_xCondIs64), 5381, 5395,
- /*5381*/ uint16(x86_xCondDataSize), 5385, 5390, 0,
- /*5385*/ uint16(x86_xSetOp), uint16(x86_JS),
- /*5387*/ uint16(x86_xReadCw),
- /*5388*/ uint16(x86_xArgRel16),
- /*5389*/ uint16(x86_xMatch),
- /*5390*/ uint16(x86_xSetOp), uint16(x86_JS),
- /*5392*/ uint16(x86_xReadCd),
- /*5393*/ uint16(x86_xArgRel32),
- /*5394*/ uint16(x86_xMatch),
- /*5395*/ uint16(x86_xCondDataSize), 5399, 5390, 5404,
- /*5399*/ uint16(x86_xSetOp), uint16(x86_JS),
- /*5401*/ uint16(x86_xReadCd),
- /*5402*/ uint16(x86_xArgRel32),
- /*5403*/ uint16(x86_xMatch),
- /*5404*/ uint16(x86_xSetOp), uint16(x86_JS),
- /*5406*/ uint16(x86_xReadCd),
- /*5407*/ uint16(x86_xArgRel32),
- /*5408*/ uint16(x86_xMatch),
- /*5409*/ uint16(x86_xCondIs64), 5412, 5426,
- /*5412*/ uint16(x86_xCondDataSize), 5416, 5421, 0,
- /*5416*/ uint16(x86_xSetOp), uint16(x86_JNS),
- /*5418*/ uint16(x86_xReadCw),
- /*5419*/ uint16(x86_xArgRel16),
- /*5420*/ uint16(x86_xMatch),
- /*5421*/ uint16(x86_xSetOp), uint16(x86_JNS),
- /*5423*/ uint16(x86_xReadCd),
- /*5424*/ uint16(x86_xArgRel32),
- /*5425*/ uint16(x86_xMatch),
- /*5426*/ uint16(x86_xCondDataSize), 5430, 5421, 5435,
- /*5430*/ uint16(x86_xSetOp), uint16(x86_JNS),
- /*5432*/ uint16(x86_xReadCd),
- /*5433*/ uint16(x86_xArgRel32),
- /*5434*/ uint16(x86_xMatch),
- /*5435*/ uint16(x86_xSetOp), uint16(x86_JNS),
- /*5437*/ uint16(x86_xReadCd),
- /*5438*/ uint16(x86_xArgRel32),
- /*5439*/ uint16(x86_xMatch),
- /*5440*/ uint16(x86_xCondIs64), 5443, 5457,
- /*5443*/ uint16(x86_xCondDataSize), 5447, 5452, 0,
- /*5447*/ uint16(x86_xSetOp), uint16(x86_JP),
- /*5449*/ uint16(x86_xReadCw),
- /*5450*/ uint16(x86_xArgRel16),
- /*5451*/ uint16(x86_xMatch),
- /*5452*/ uint16(x86_xSetOp), uint16(x86_JP),
- /*5454*/ uint16(x86_xReadCd),
- /*5455*/ uint16(x86_xArgRel32),
- /*5456*/ uint16(x86_xMatch),
- /*5457*/ uint16(x86_xCondDataSize), 5461, 5452, 5466,
- /*5461*/ uint16(x86_xSetOp), uint16(x86_JP),
- /*5463*/ uint16(x86_xReadCd),
- /*5464*/ uint16(x86_xArgRel32),
- /*5465*/ uint16(x86_xMatch),
- /*5466*/ uint16(x86_xSetOp), uint16(x86_JP),
- /*5468*/ uint16(x86_xReadCd),
- /*5469*/ uint16(x86_xArgRel32),
- /*5470*/ uint16(x86_xMatch),
- /*5471*/ uint16(x86_xCondIs64), 5474, 5488,
- /*5474*/ uint16(x86_xCondDataSize), 5478, 5483, 0,
- /*5478*/ uint16(x86_xSetOp), uint16(x86_JNP),
- /*5480*/ uint16(x86_xReadCw),
- /*5481*/ uint16(x86_xArgRel16),
- /*5482*/ uint16(x86_xMatch),
- /*5483*/ uint16(x86_xSetOp), uint16(x86_JNP),
- /*5485*/ uint16(x86_xReadCd),
- /*5486*/ uint16(x86_xArgRel32),
- /*5487*/ uint16(x86_xMatch),
- /*5488*/ uint16(x86_xCondDataSize), 5492, 5483, 5497,
- /*5492*/ uint16(x86_xSetOp), uint16(x86_JNP),
- /*5494*/ uint16(x86_xReadCd),
- /*5495*/ uint16(x86_xArgRel32),
- /*5496*/ uint16(x86_xMatch),
- /*5497*/ uint16(x86_xSetOp), uint16(x86_JNP),
- /*5499*/ uint16(x86_xReadCd),
- /*5500*/ uint16(x86_xArgRel32),
- /*5501*/ uint16(x86_xMatch),
- /*5502*/ uint16(x86_xCondIs64), 5505, 5519,
- /*5505*/ uint16(x86_xCondDataSize), 5509, 5514, 0,
- /*5509*/ uint16(x86_xSetOp), uint16(x86_JL),
- /*5511*/ uint16(x86_xReadCw),
- /*5512*/ uint16(x86_xArgRel16),
- /*5513*/ uint16(x86_xMatch),
- /*5514*/ uint16(x86_xSetOp), uint16(x86_JL),
- /*5516*/ uint16(x86_xReadCd),
- /*5517*/ uint16(x86_xArgRel32),
- /*5518*/ uint16(x86_xMatch),
- /*5519*/ uint16(x86_xCondDataSize), 5523, 5514, 5528,
- /*5523*/ uint16(x86_xSetOp), uint16(x86_JL),
- /*5525*/ uint16(x86_xReadCd),
- /*5526*/ uint16(x86_xArgRel32),
- /*5527*/ uint16(x86_xMatch),
- /*5528*/ uint16(x86_xSetOp), uint16(x86_JL),
- /*5530*/ uint16(x86_xReadCd),
- /*5531*/ uint16(x86_xArgRel32),
- /*5532*/ uint16(x86_xMatch),
- /*5533*/ uint16(x86_xCondIs64), 5536, 5550,
- /*5536*/ uint16(x86_xCondDataSize), 5540, 5545, 0,
- /*5540*/ uint16(x86_xSetOp), uint16(x86_JGE),
- /*5542*/ uint16(x86_xReadCw),
- /*5543*/ uint16(x86_xArgRel16),
- /*5544*/ uint16(x86_xMatch),
- /*5545*/ uint16(x86_xSetOp), uint16(x86_JGE),
- /*5547*/ uint16(x86_xReadCd),
- /*5548*/ uint16(x86_xArgRel32),
- /*5549*/ uint16(x86_xMatch),
- /*5550*/ uint16(x86_xCondDataSize), 5554, 5545, 5559,
- /*5554*/ uint16(x86_xSetOp), uint16(x86_JGE),
- /*5556*/ uint16(x86_xReadCd),
- /*5557*/ uint16(x86_xArgRel32),
- /*5558*/ uint16(x86_xMatch),
- /*5559*/ uint16(x86_xSetOp), uint16(x86_JGE),
- /*5561*/ uint16(x86_xReadCd),
- /*5562*/ uint16(x86_xArgRel32),
- /*5563*/ uint16(x86_xMatch),
- /*5564*/ uint16(x86_xCondIs64), 5567, 5581,
- /*5567*/ uint16(x86_xCondDataSize), 5571, 5576, 0,
- /*5571*/ uint16(x86_xSetOp), uint16(x86_JLE),
- /*5573*/ uint16(x86_xReadCw),
- /*5574*/ uint16(x86_xArgRel16),
- /*5575*/ uint16(x86_xMatch),
- /*5576*/ uint16(x86_xSetOp), uint16(x86_JLE),
- /*5578*/ uint16(x86_xReadCd),
- /*5579*/ uint16(x86_xArgRel32),
- /*5580*/ uint16(x86_xMatch),
- /*5581*/ uint16(x86_xCondDataSize), 5585, 5576, 5590,
- /*5585*/ uint16(x86_xSetOp), uint16(x86_JLE),
- /*5587*/ uint16(x86_xReadCd),
- /*5588*/ uint16(x86_xArgRel32),
- /*5589*/ uint16(x86_xMatch),
- /*5590*/ uint16(x86_xSetOp), uint16(x86_JLE),
- /*5592*/ uint16(x86_xReadCd),
- /*5593*/ uint16(x86_xArgRel32),
- /*5594*/ uint16(x86_xMatch),
- /*5595*/ uint16(x86_xCondIs64), 5598, 5612,
- /*5598*/ uint16(x86_xCondDataSize), 5602, 5607, 0,
- /*5602*/ uint16(x86_xSetOp), uint16(x86_JG),
- /*5604*/ uint16(x86_xReadCw),
- /*5605*/ uint16(x86_xArgRel16),
- /*5606*/ uint16(x86_xMatch),
- /*5607*/ uint16(x86_xSetOp), uint16(x86_JG),
- /*5609*/ uint16(x86_xReadCd),
- /*5610*/ uint16(x86_xArgRel32),
- /*5611*/ uint16(x86_xMatch),
- /*5612*/ uint16(x86_xCondDataSize), 5616, 5607, 5621,
- /*5616*/ uint16(x86_xSetOp), uint16(x86_JG),
- /*5618*/ uint16(x86_xReadCd),
- /*5619*/ uint16(x86_xArgRel32),
- /*5620*/ uint16(x86_xMatch),
- /*5621*/ uint16(x86_xSetOp), uint16(x86_JG),
- /*5623*/ uint16(x86_xReadCd),
- /*5624*/ uint16(x86_xArgRel32),
- /*5625*/ uint16(x86_xMatch),
- /*5626*/ uint16(x86_xSetOp), uint16(x86_SETO),
- /*5628*/ uint16(x86_xReadSlashR),
- /*5629*/ uint16(x86_xArgRM8),
- /*5630*/ uint16(x86_xMatch),
- /*5631*/ uint16(x86_xSetOp), uint16(x86_SETNO),
- /*5633*/ uint16(x86_xReadSlashR),
- /*5634*/ uint16(x86_xArgRM8),
- /*5635*/ uint16(x86_xMatch),
- /*5636*/ uint16(x86_xSetOp), uint16(x86_SETB),
- /*5638*/ uint16(x86_xReadSlashR),
- /*5639*/ uint16(x86_xArgRM8),
- /*5640*/ uint16(x86_xMatch),
- /*5641*/ uint16(x86_xSetOp), uint16(x86_SETAE),
- /*5643*/ uint16(x86_xReadSlashR),
- /*5644*/ uint16(x86_xArgRM8),
- /*5645*/ uint16(x86_xMatch),
- /*5646*/ uint16(x86_xSetOp), uint16(x86_SETE),
- /*5648*/ uint16(x86_xReadSlashR),
- /*5649*/ uint16(x86_xArgRM8),
- /*5650*/ uint16(x86_xMatch),
- /*5651*/ uint16(x86_xSetOp), uint16(x86_SETNE),
- /*5653*/ uint16(x86_xReadSlashR),
- /*5654*/ uint16(x86_xArgRM8),
- /*5655*/ uint16(x86_xMatch),
- /*5656*/ uint16(x86_xSetOp), uint16(x86_SETBE),
- /*5658*/ uint16(x86_xReadSlashR),
- /*5659*/ uint16(x86_xArgRM8),
- /*5660*/ uint16(x86_xMatch),
- /*5661*/ uint16(x86_xSetOp), uint16(x86_SETA),
- /*5663*/ uint16(x86_xReadSlashR),
- /*5664*/ uint16(x86_xArgRM8),
- /*5665*/ uint16(x86_xMatch),
- /*5666*/ uint16(x86_xSetOp), uint16(x86_SETS),
- /*5668*/ uint16(x86_xReadSlashR),
- /*5669*/ uint16(x86_xArgRM8),
- /*5670*/ uint16(x86_xMatch),
- /*5671*/ uint16(x86_xSetOp), uint16(x86_SETNS),
- /*5673*/ uint16(x86_xReadSlashR),
- /*5674*/ uint16(x86_xArgRM8),
- /*5675*/ uint16(x86_xMatch),
- /*5676*/ uint16(x86_xSetOp), uint16(x86_SETP),
- /*5678*/ uint16(x86_xReadSlashR),
- /*5679*/ uint16(x86_xArgRM8),
- /*5680*/ uint16(x86_xMatch),
- /*5681*/ uint16(x86_xSetOp), uint16(x86_SETNP),
- /*5683*/ uint16(x86_xReadSlashR),
- /*5684*/ uint16(x86_xArgRM8),
- /*5685*/ uint16(x86_xMatch),
- /*5686*/ uint16(x86_xSetOp), uint16(x86_SETL),
- /*5688*/ uint16(x86_xReadSlashR),
- /*5689*/ uint16(x86_xArgRM8),
- /*5690*/ uint16(x86_xMatch),
- /*5691*/ uint16(x86_xSetOp), uint16(x86_SETGE),
- /*5693*/ uint16(x86_xReadSlashR),
- /*5694*/ uint16(x86_xArgRM8),
- /*5695*/ uint16(x86_xMatch),
- /*5696*/ uint16(x86_xSetOp), uint16(x86_SETLE),
- /*5698*/ uint16(x86_xReadSlashR),
- /*5699*/ uint16(x86_xArgRM8),
- /*5700*/ uint16(x86_xMatch),
- /*5701*/ uint16(x86_xSetOp), uint16(x86_SETG),
- /*5703*/ uint16(x86_xReadSlashR),
- /*5704*/ uint16(x86_xArgRM8),
- /*5705*/ uint16(x86_xMatch),
- /*5706*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*5708*/ uint16(x86_xArgFS),
- /*5709*/ uint16(x86_xMatch),
- /*5710*/ uint16(x86_xCondIs64), 5713, 5725,
- /*5713*/ uint16(x86_xCondDataSize), 5717, 5721, 0,
- /*5717*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*5719*/ uint16(x86_xArgFS),
- /*5720*/ uint16(x86_xMatch),
- /*5721*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*5723*/ uint16(x86_xArgFS),
- /*5724*/ uint16(x86_xMatch),
- /*5725*/ uint16(x86_xCondDataSize), 5717, 5729, 5733,
- /*5729*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*5731*/ uint16(x86_xArgFS),
- /*5732*/ uint16(x86_xMatch),
- /*5733*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*5735*/ uint16(x86_xArgFS),
- /*5736*/ uint16(x86_xMatch),
- /*5737*/ uint16(x86_xSetOp), uint16(x86_CPUID),
- /*5739*/ uint16(x86_xMatch),
- /*5740*/ uint16(x86_xCondIs64), 5743, 5759,
- /*5743*/ uint16(x86_xCondDataSize), 5747, 5753, 0,
- /*5747*/ uint16(x86_xSetOp), uint16(x86_BT),
- /*5749*/ uint16(x86_xReadSlashR),
- /*5750*/ uint16(x86_xArgRM16),
- /*5751*/ uint16(x86_xArgR16),
- /*5752*/ uint16(x86_xMatch),
- /*5753*/ uint16(x86_xSetOp), uint16(x86_BT),
- /*5755*/ uint16(x86_xReadSlashR),
- /*5756*/ uint16(x86_xArgRM32),
- /*5757*/ uint16(x86_xArgR32),
- /*5758*/ uint16(x86_xMatch),
- /*5759*/ uint16(x86_xCondDataSize), 5747, 5753, 5763,
- /*5763*/ uint16(x86_xSetOp), uint16(x86_BT),
- /*5765*/ uint16(x86_xReadSlashR),
- /*5766*/ uint16(x86_xArgRM64),
- /*5767*/ uint16(x86_xArgR64),
- /*5768*/ uint16(x86_xMatch),
- /*5769*/ uint16(x86_xCondIs64), 5772, 5792,
- /*5772*/ uint16(x86_xCondDataSize), 5776, 5784, 0,
- /*5776*/ uint16(x86_xSetOp), uint16(x86_SHLD),
- /*5778*/ uint16(x86_xReadSlashR),
- /*5779*/ uint16(x86_xReadIb),
- /*5780*/ uint16(x86_xArgRM16),
- /*5781*/ uint16(x86_xArgR16),
- /*5782*/ uint16(x86_xArgImm8u),
- /*5783*/ uint16(x86_xMatch),
- /*5784*/ uint16(x86_xSetOp), uint16(x86_SHLD),
- /*5786*/ uint16(x86_xReadSlashR),
- /*5787*/ uint16(x86_xReadIb),
- /*5788*/ uint16(x86_xArgRM32),
- /*5789*/ uint16(x86_xArgR32),
- /*5790*/ uint16(x86_xArgImm8u),
- /*5791*/ uint16(x86_xMatch),
- /*5792*/ uint16(x86_xCondDataSize), 5776, 5784, 5796,
- /*5796*/ uint16(x86_xSetOp), uint16(x86_SHLD),
- /*5798*/ uint16(x86_xReadSlashR),
- /*5799*/ uint16(x86_xReadIb),
- /*5800*/ uint16(x86_xArgRM64),
- /*5801*/ uint16(x86_xArgR64),
- /*5802*/ uint16(x86_xArgImm8u),
- /*5803*/ uint16(x86_xMatch),
- /*5804*/ uint16(x86_xCondIs64), 5807, 5825,
- /*5807*/ uint16(x86_xCondDataSize), 5811, 5818, 0,
- /*5811*/ uint16(x86_xSetOp), uint16(x86_SHLD),
- /*5813*/ uint16(x86_xReadSlashR),
- /*5814*/ uint16(x86_xArgRM16),
- /*5815*/ uint16(x86_xArgR16),
- /*5816*/ uint16(x86_xArgCL),
- /*5817*/ uint16(x86_xMatch),
- /*5818*/ uint16(x86_xSetOp), uint16(x86_SHLD),
- /*5820*/ uint16(x86_xReadSlashR),
- /*5821*/ uint16(x86_xArgRM32),
- /*5822*/ uint16(x86_xArgR32),
- /*5823*/ uint16(x86_xArgCL),
- /*5824*/ uint16(x86_xMatch),
- /*5825*/ uint16(x86_xCondDataSize), 5811, 5818, 5829,
- /*5829*/ uint16(x86_xSetOp), uint16(x86_SHLD),
- /*5831*/ uint16(x86_xReadSlashR),
- /*5832*/ uint16(x86_xArgRM64),
- /*5833*/ uint16(x86_xArgR64),
- /*5834*/ uint16(x86_xArgCL),
- /*5835*/ uint16(x86_xMatch),
- /*5836*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*5838*/ uint16(x86_xArgGS),
- /*5839*/ uint16(x86_xMatch),
- /*5840*/ uint16(x86_xCondIs64), 5843, 5855,
- /*5843*/ uint16(x86_xCondDataSize), 5847, 5851, 0,
- /*5847*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*5849*/ uint16(x86_xArgGS),
- /*5850*/ uint16(x86_xMatch),
- /*5851*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*5853*/ uint16(x86_xArgGS),
- /*5854*/ uint16(x86_xMatch),
- /*5855*/ uint16(x86_xCondDataSize), 5847, 5859, 5863,
- /*5859*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*5861*/ uint16(x86_xArgGS),
- /*5862*/ uint16(x86_xMatch),
- /*5863*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*5865*/ uint16(x86_xArgGS),
- /*5866*/ uint16(x86_xMatch),
- /*5867*/ uint16(x86_xSetOp), uint16(x86_RSM),
- /*5869*/ uint16(x86_xMatch),
- /*5870*/ uint16(x86_xCondIs64), 5873, 5889,
- /*5873*/ uint16(x86_xCondDataSize), 5877, 5883, 0,
- /*5877*/ uint16(x86_xSetOp), uint16(x86_BTS),
- /*5879*/ uint16(x86_xReadSlashR),
- /*5880*/ uint16(x86_xArgRM16),
- /*5881*/ uint16(x86_xArgR16),
- /*5882*/ uint16(x86_xMatch),
- /*5883*/ uint16(x86_xSetOp), uint16(x86_BTS),
- /*5885*/ uint16(x86_xReadSlashR),
- /*5886*/ uint16(x86_xArgRM32),
- /*5887*/ uint16(x86_xArgR32),
- /*5888*/ uint16(x86_xMatch),
- /*5889*/ uint16(x86_xCondDataSize), 5877, 5883, 5893,
- /*5893*/ uint16(x86_xSetOp), uint16(x86_BTS),
- /*5895*/ uint16(x86_xReadSlashR),
- /*5896*/ uint16(x86_xArgRM64),
- /*5897*/ uint16(x86_xArgR64),
- /*5898*/ uint16(x86_xMatch),
- /*5899*/ uint16(x86_xCondIs64), 5902, 5922,
- /*5902*/ uint16(x86_xCondDataSize), 5906, 5914, 0,
- /*5906*/ uint16(x86_xSetOp), uint16(x86_SHRD),
- /*5908*/ uint16(x86_xReadSlashR),
- /*5909*/ uint16(x86_xReadIb),
- /*5910*/ uint16(x86_xArgRM16),
- /*5911*/ uint16(x86_xArgR16),
- /*5912*/ uint16(x86_xArgImm8u),
- /*5913*/ uint16(x86_xMatch),
- /*5914*/ uint16(x86_xSetOp), uint16(x86_SHRD),
- /*5916*/ uint16(x86_xReadSlashR),
- /*5917*/ uint16(x86_xReadIb),
- /*5918*/ uint16(x86_xArgRM32),
- /*5919*/ uint16(x86_xArgR32),
- /*5920*/ uint16(x86_xArgImm8u),
- /*5921*/ uint16(x86_xMatch),
- /*5922*/ uint16(x86_xCondDataSize), 5906, 5914, 5926,
- /*5926*/ uint16(x86_xSetOp), uint16(x86_SHRD),
- /*5928*/ uint16(x86_xReadSlashR),
- /*5929*/ uint16(x86_xReadIb),
- /*5930*/ uint16(x86_xArgRM64),
- /*5931*/ uint16(x86_xArgR64),
- /*5932*/ uint16(x86_xArgImm8u),
- /*5933*/ uint16(x86_xMatch),
- /*5934*/ uint16(x86_xCondIs64), 5937, 5955,
- /*5937*/ uint16(x86_xCondDataSize), 5941, 5948, 0,
- /*5941*/ uint16(x86_xSetOp), uint16(x86_SHRD),
- /*5943*/ uint16(x86_xReadSlashR),
- /*5944*/ uint16(x86_xArgRM16),
- /*5945*/ uint16(x86_xArgR16),
- /*5946*/ uint16(x86_xArgCL),
- /*5947*/ uint16(x86_xMatch),
- /*5948*/ uint16(x86_xSetOp), uint16(x86_SHRD),
- /*5950*/ uint16(x86_xReadSlashR),
- /*5951*/ uint16(x86_xArgRM32),
- /*5952*/ uint16(x86_xArgR32),
- /*5953*/ uint16(x86_xArgCL),
- /*5954*/ uint16(x86_xMatch),
- /*5955*/ uint16(x86_xCondDataSize), 5941, 5948, 5959,
- /*5959*/ uint16(x86_xSetOp), uint16(x86_SHRD),
- /*5961*/ uint16(x86_xReadSlashR),
- /*5962*/ uint16(x86_xArgRM64),
- /*5963*/ uint16(x86_xArgR64),
- /*5964*/ uint16(x86_xArgCL),
- /*5965*/ uint16(x86_xMatch),
- /*5966*/ uint16(x86_xCondByte), 3,
- 0xE8, 6215,
- 0xF0, 6218,
- 0xF8, 6221,
- /*5974*/ uint16(x86_xCondSlashR),
- 5983, // 0
- 6037, // 1
- 6091, // 2
- 6120, // 3
- 6149, // 4
- 6172, // 5
- 6195, // 6
- 6211, // 7
- /*5983*/ uint16(x86_xCondIs64), 5986, 5998,
- /*5986*/ uint16(x86_xCondDataSize), 5990, 5994, 0,
- /*5990*/ uint16(x86_xSetOp), uint16(x86_FXSAVE),
- /*5992*/ uint16(x86_xArgM512byte),
- /*5993*/ uint16(x86_xMatch),
- /*5994*/ uint16(x86_xSetOp), uint16(x86_FXSAVE),
- /*5996*/ uint16(x86_xArgM512byte),
- /*5997*/ uint16(x86_xMatch),
- /*5998*/ uint16(x86_xCondPrefix), 2,
- 0xF3, 6012,
- 0x0, 6004,
- /*6004*/ uint16(x86_xCondDataSize), 5990, 5994, 6008,
- /*6008*/ uint16(x86_xSetOp), uint16(x86_FXSAVE64),
- /*6010*/ uint16(x86_xArgM512byte),
- /*6011*/ uint16(x86_xMatch),
- /*6012*/ uint16(x86_xCondDataSize), 6016, 6023, 6030,
- /*6016*/ uint16(x86_xCondIsMem), 6019, 0,
- /*6019*/ uint16(x86_xSetOp), uint16(x86_RDFSBASE),
- /*6021*/ uint16(x86_xArgRM32),
- /*6022*/ uint16(x86_xMatch),
- /*6023*/ uint16(x86_xCondIsMem), 6026, 0,
- /*6026*/ uint16(x86_xSetOp), uint16(x86_RDFSBASE),
- /*6028*/ uint16(x86_xArgRM32),
- /*6029*/ uint16(x86_xMatch),
- /*6030*/ uint16(x86_xCondIsMem), 6033, 0,
- /*6033*/ uint16(x86_xSetOp), uint16(x86_RDFSBASE),
- /*6035*/ uint16(x86_xArgRM64),
- /*6036*/ uint16(x86_xMatch),
- /*6037*/ uint16(x86_xCondIs64), 6040, 6052,
- /*6040*/ uint16(x86_xCondDataSize), 6044, 6048, 0,
- /*6044*/ uint16(x86_xSetOp), uint16(x86_FXRSTOR),
- /*6046*/ uint16(x86_xArgM512byte),
- /*6047*/ uint16(x86_xMatch),
- /*6048*/ uint16(x86_xSetOp), uint16(x86_FXRSTOR),
- /*6050*/ uint16(x86_xArgM512byte),
- /*6051*/ uint16(x86_xMatch),
- /*6052*/ uint16(x86_xCondPrefix), 2,
- 0xF3, 6066,
- 0x0, 6058,
- /*6058*/ uint16(x86_xCondDataSize), 6044, 6048, 6062,
- /*6062*/ uint16(x86_xSetOp), uint16(x86_FXRSTOR64),
- /*6064*/ uint16(x86_xArgM512byte),
- /*6065*/ uint16(x86_xMatch),
- /*6066*/ uint16(x86_xCondDataSize), 6070, 6077, 6084,
- /*6070*/ uint16(x86_xCondIsMem), 6073, 0,
- /*6073*/ uint16(x86_xSetOp), uint16(x86_RDGSBASE),
- /*6075*/ uint16(x86_xArgRM32),
- /*6076*/ uint16(x86_xMatch),
- /*6077*/ uint16(x86_xCondIsMem), 6080, 0,
- /*6080*/ uint16(x86_xSetOp), uint16(x86_RDGSBASE),
- /*6082*/ uint16(x86_xArgRM32),
- /*6083*/ uint16(x86_xMatch),
- /*6084*/ uint16(x86_xCondIsMem), 6087, 0,
- /*6087*/ uint16(x86_xSetOp), uint16(x86_RDGSBASE),
- /*6089*/ uint16(x86_xArgRM64),
- /*6090*/ uint16(x86_xMatch),
- /*6091*/ uint16(x86_xCondIs64), 6094, 6098,
- /*6094*/ uint16(x86_xSetOp), uint16(x86_LDMXCSR),
- /*6096*/ uint16(x86_xArgM32),
- /*6097*/ uint16(x86_xMatch),
- /*6098*/ uint16(x86_xCondPrefix), 2,
- 0xF3, 6104,
- 0x0, 6094,
- /*6104*/ uint16(x86_xCondDataSize), 6108, 6112, 6116,
- /*6108*/ uint16(x86_xSetOp), uint16(x86_WRFSBASE),
- /*6110*/ uint16(x86_xArgRM32),
- /*6111*/ uint16(x86_xMatch),
- /*6112*/ uint16(x86_xSetOp), uint16(x86_WRFSBASE),
- /*6114*/ uint16(x86_xArgRM32),
- /*6115*/ uint16(x86_xMatch),
- /*6116*/ uint16(x86_xSetOp), uint16(x86_WRFSBASE),
- /*6118*/ uint16(x86_xArgRM64),
- /*6119*/ uint16(x86_xMatch),
- /*6120*/ uint16(x86_xCondIs64), 6123, 6127,
- /*6123*/ uint16(x86_xSetOp), uint16(x86_STMXCSR),
- /*6125*/ uint16(x86_xArgM32),
- /*6126*/ uint16(x86_xMatch),
- /*6127*/ uint16(x86_xCondPrefix), 2,
- 0xF3, 6133,
- 0x0, 6123,
- /*6133*/ uint16(x86_xCondDataSize), 6137, 6141, 6145,
- /*6137*/ uint16(x86_xSetOp), uint16(x86_WRGSBASE),
- /*6139*/ uint16(x86_xArgRM32),
- /*6140*/ uint16(x86_xMatch),
- /*6141*/ uint16(x86_xSetOp), uint16(x86_WRGSBASE),
- /*6143*/ uint16(x86_xArgRM32),
- /*6144*/ uint16(x86_xMatch),
- /*6145*/ uint16(x86_xSetOp), uint16(x86_WRGSBASE),
- /*6147*/ uint16(x86_xArgRM64),
- /*6148*/ uint16(x86_xMatch),
- /*6149*/ uint16(x86_xCondIs64), 6152, 6164,
- /*6152*/ uint16(x86_xCondDataSize), 6156, 6160, 0,
- /*6156*/ uint16(x86_xSetOp), uint16(x86_XSAVE),
- /*6158*/ uint16(x86_xArgMem),
- /*6159*/ uint16(x86_xMatch),
- /*6160*/ uint16(x86_xSetOp), uint16(x86_XSAVE),
- /*6162*/ uint16(x86_xArgMem),
- /*6163*/ uint16(x86_xMatch),
- /*6164*/ uint16(x86_xCondDataSize), 6156, 6160, 6168,
- /*6168*/ uint16(x86_xSetOp), uint16(x86_XSAVE64),
- /*6170*/ uint16(x86_xArgMem),
- /*6171*/ uint16(x86_xMatch),
- /*6172*/ uint16(x86_xCondIs64), 6175, 6187,
- /*6175*/ uint16(x86_xCondDataSize), 6179, 6183, 0,
- /*6179*/ uint16(x86_xSetOp), uint16(x86_XRSTOR),
- /*6181*/ uint16(x86_xArgMem),
- /*6182*/ uint16(x86_xMatch),
- /*6183*/ uint16(x86_xSetOp), uint16(x86_XRSTOR),
- /*6185*/ uint16(x86_xArgMem),
- /*6186*/ uint16(x86_xMatch),
- /*6187*/ uint16(x86_xCondDataSize), 6179, 6183, 6191,
- /*6191*/ uint16(x86_xSetOp), uint16(x86_XRSTOR64),
- /*6193*/ uint16(x86_xArgMem),
- /*6194*/ uint16(x86_xMatch),
- /*6195*/ uint16(x86_xCondDataSize), 6199, 6203, 6207,
- /*6199*/ uint16(x86_xSetOp), uint16(x86_XSAVEOPT),
- /*6201*/ uint16(x86_xArgMem),
- /*6202*/ uint16(x86_xMatch),
- /*6203*/ uint16(x86_xSetOp), uint16(x86_XSAVEOPT),
- /*6205*/ uint16(x86_xArgMem),
- /*6206*/ uint16(x86_xMatch),
- /*6207*/ uint16(x86_xSetOp), uint16(x86_XSAVEOPT64),
- /*6209*/ uint16(x86_xArgMem),
- /*6210*/ uint16(x86_xMatch),
- /*6211*/ uint16(x86_xSetOp), uint16(x86_CLFLUSH),
- /*6213*/ uint16(x86_xArgM8),
- /*6214*/ uint16(x86_xMatch),
- /*6215*/ uint16(x86_xSetOp), uint16(x86_LFENCE),
- /*6217*/ uint16(x86_xMatch),
- /*6218*/ uint16(x86_xSetOp), uint16(x86_MFENCE),
- /*6220*/ uint16(x86_xMatch),
- /*6221*/ uint16(x86_xSetOp), uint16(x86_SFENCE),
- /*6223*/ uint16(x86_xMatch),
- /*6224*/ uint16(x86_xCondIs64), 6227, 6243,
- /*6227*/ uint16(x86_xCondDataSize), 6231, 6237, 0,
- /*6231*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*6233*/ uint16(x86_xReadSlashR),
- /*6234*/ uint16(x86_xArgR16),
- /*6235*/ uint16(x86_xArgRM16),
- /*6236*/ uint16(x86_xMatch),
- /*6237*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*6239*/ uint16(x86_xReadSlashR),
- /*6240*/ uint16(x86_xArgR32),
- /*6241*/ uint16(x86_xArgRM32),
- /*6242*/ uint16(x86_xMatch),
- /*6243*/ uint16(x86_xCondDataSize), 6231, 6237, 6247,
- /*6247*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*6249*/ uint16(x86_xReadSlashR),
- /*6250*/ uint16(x86_xArgR64),
- /*6251*/ uint16(x86_xArgRM64),
- /*6252*/ uint16(x86_xMatch),
- /*6253*/ uint16(x86_xSetOp), uint16(x86_CMPXCHG),
- /*6255*/ uint16(x86_xReadSlashR),
- /*6256*/ uint16(x86_xArgRM8),
- /*6257*/ uint16(x86_xArgR8),
- /*6258*/ uint16(x86_xMatch),
- /*6259*/ uint16(x86_xCondIs64), 6262, 6278,
- /*6262*/ uint16(x86_xCondDataSize), 6266, 6272, 0,
- /*6266*/ uint16(x86_xSetOp), uint16(x86_CMPXCHG),
- /*6268*/ uint16(x86_xReadSlashR),
- /*6269*/ uint16(x86_xArgRM16),
- /*6270*/ uint16(x86_xArgR16),
- /*6271*/ uint16(x86_xMatch),
- /*6272*/ uint16(x86_xSetOp), uint16(x86_CMPXCHG),
- /*6274*/ uint16(x86_xReadSlashR),
- /*6275*/ uint16(x86_xArgRM32),
- /*6276*/ uint16(x86_xArgR32),
- /*6277*/ uint16(x86_xMatch),
- /*6278*/ uint16(x86_xCondDataSize), 6266, 6272, 6282,
- /*6282*/ uint16(x86_xSetOp), uint16(x86_CMPXCHG),
- /*6284*/ uint16(x86_xReadSlashR),
- /*6285*/ uint16(x86_xArgRM64),
- /*6286*/ uint16(x86_xArgR64),
- /*6287*/ uint16(x86_xMatch),
- /*6288*/ uint16(x86_xCondIs64), 6291, 6307,
- /*6291*/ uint16(x86_xCondDataSize), 6295, 6301, 0,
- /*6295*/ uint16(x86_xSetOp), uint16(x86_LSS),
- /*6297*/ uint16(x86_xReadSlashR),
- /*6298*/ uint16(x86_xArgR16),
- /*6299*/ uint16(x86_xArgM16colon16),
- /*6300*/ uint16(x86_xMatch),
- /*6301*/ uint16(x86_xSetOp), uint16(x86_LSS),
- /*6303*/ uint16(x86_xReadSlashR),
- /*6304*/ uint16(x86_xArgR32),
- /*6305*/ uint16(x86_xArgM16colon32),
- /*6306*/ uint16(x86_xMatch),
- /*6307*/ uint16(x86_xCondDataSize), 6295, 6301, 6311,
- /*6311*/ uint16(x86_xSetOp), uint16(x86_LSS),
- /*6313*/ uint16(x86_xReadSlashR),
- /*6314*/ uint16(x86_xArgR64),
- /*6315*/ uint16(x86_xArgM16colon64),
- /*6316*/ uint16(x86_xMatch),
- /*6317*/ uint16(x86_xCondIs64), 6320, 6336,
- /*6320*/ uint16(x86_xCondDataSize), 6324, 6330, 0,
- /*6324*/ uint16(x86_xSetOp), uint16(x86_BTR),
- /*6326*/ uint16(x86_xReadSlashR),
- /*6327*/ uint16(x86_xArgRM16),
- /*6328*/ uint16(x86_xArgR16),
- /*6329*/ uint16(x86_xMatch),
- /*6330*/ uint16(x86_xSetOp), uint16(x86_BTR),
- /*6332*/ uint16(x86_xReadSlashR),
- /*6333*/ uint16(x86_xArgRM32),
- /*6334*/ uint16(x86_xArgR32),
- /*6335*/ uint16(x86_xMatch),
- /*6336*/ uint16(x86_xCondDataSize), 6324, 6330, 6340,
- /*6340*/ uint16(x86_xSetOp), uint16(x86_BTR),
- /*6342*/ uint16(x86_xReadSlashR),
- /*6343*/ uint16(x86_xArgRM64),
- /*6344*/ uint16(x86_xArgR64),
- /*6345*/ uint16(x86_xMatch),
- /*6346*/ uint16(x86_xCondIs64), 6349, 6365,
- /*6349*/ uint16(x86_xCondDataSize), 6353, 6359, 0,
- /*6353*/ uint16(x86_xSetOp), uint16(x86_LFS),
- /*6355*/ uint16(x86_xReadSlashR),
- /*6356*/ uint16(x86_xArgR16),
- /*6357*/ uint16(x86_xArgM16colon16),
- /*6358*/ uint16(x86_xMatch),
- /*6359*/ uint16(x86_xSetOp), uint16(x86_LFS),
- /*6361*/ uint16(x86_xReadSlashR),
- /*6362*/ uint16(x86_xArgR32),
- /*6363*/ uint16(x86_xArgM16colon32),
- /*6364*/ uint16(x86_xMatch),
- /*6365*/ uint16(x86_xCondDataSize), 6353, 6359, 6369,
- /*6369*/ uint16(x86_xSetOp), uint16(x86_LFS),
- /*6371*/ uint16(x86_xReadSlashR),
- /*6372*/ uint16(x86_xArgR64),
- /*6373*/ uint16(x86_xArgM16colon64),
- /*6374*/ uint16(x86_xMatch),
- /*6375*/ uint16(x86_xCondIs64), 6378, 6394,
- /*6378*/ uint16(x86_xCondDataSize), 6382, 6388, 0,
- /*6382*/ uint16(x86_xSetOp), uint16(x86_LGS),
- /*6384*/ uint16(x86_xReadSlashR),
- /*6385*/ uint16(x86_xArgR16),
- /*6386*/ uint16(x86_xArgM16colon16),
- /*6387*/ uint16(x86_xMatch),
- /*6388*/ uint16(x86_xSetOp), uint16(x86_LGS),
- /*6390*/ uint16(x86_xReadSlashR),
- /*6391*/ uint16(x86_xArgR32),
- /*6392*/ uint16(x86_xArgM16colon32),
- /*6393*/ uint16(x86_xMatch),
- /*6394*/ uint16(x86_xCondDataSize), 6382, 6388, 6398,
- /*6398*/ uint16(x86_xSetOp), uint16(x86_LGS),
- /*6400*/ uint16(x86_xReadSlashR),
- /*6401*/ uint16(x86_xArgR64),
- /*6402*/ uint16(x86_xArgM16colon64),
- /*6403*/ uint16(x86_xMatch),
- /*6404*/ uint16(x86_xCondIs64), 6407, 6423,
- /*6407*/ uint16(x86_xCondDataSize), 6411, 6417, 0,
- /*6411*/ uint16(x86_xSetOp), uint16(x86_MOVZX),
- /*6413*/ uint16(x86_xReadSlashR),
- /*6414*/ uint16(x86_xArgR16),
- /*6415*/ uint16(x86_xArgRM8),
- /*6416*/ uint16(x86_xMatch),
- /*6417*/ uint16(x86_xSetOp), uint16(x86_MOVZX),
- /*6419*/ uint16(x86_xReadSlashR),
- /*6420*/ uint16(x86_xArgR32),
- /*6421*/ uint16(x86_xArgRM8),
- /*6422*/ uint16(x86_xMatch),
- /*6423*/ uint16(x86_xCondDataSize), 6411, 6417, 6427,
- /*6427*/ uint16(x86_xSetOp), uint16(x86_MOVZX),
- /*6429*/ uint16(x86_xReadSlashR),
- /*6430*/ uint16(x86_xArgR64),
- /*6431*/ uint16(x86_xArgRM8),
- /*6432*/ uint16(x86_xMatch),
- /*6433*/ uint16(x86_xCondIs64), 6436, 6452,
- /*6436*/ uint16(x86_xCondDataSize), 6440, 6446, 0,
- /*6440*/ uint16(x86_xSetOp), uint16(x86_MOVZX),
- /*6442*/ uint16(x86_xReadSlashR),
- /*6443*/ uint16(x86_xArgR16),
- /*6444*/ uint16(x86_xArgRM16),
- /*6445*/ uint16(x86_xMatch),
- /*6446*/ uint16(x86_xSetOp), uint16(x86_MOVZX),
- /*6448*/ uint16(x86_xReadSlashR),
- /*6449*/ uint16(x86_xArgR32),
- /*6450*/ uint16(x86_xArgRM16),
- /*6451*/ uint16(x86_xMatch),
- /*6452*/ uint16(x86_xCondDataSize), 6440, 6446, 6456,
- /*6456*/ uint16(x86_xSetOp), uint16(x86_MOVZX),
- /*6458*/ uint16(x86_xReadSlashR),
- /*6459*/ uint16(x86_xArgR64),
- /*6460*/ uint16(x86_xArgRM16),
- /*6461*/ uint16(x86_xMatch),
- /*6462*/ uint16(x86_xCondIs64), 6465, 6485,
- /*6465*/ uint16(x86_xCondPrefix), 1,
- 0xF3, 6469,
- /*6469*/ uint16(x86_xCondDataSize), 6473, 6479, 0,
- /*6473*/ uint16(x86_xSetOp), uint16(x86_POPCNT),
- /*6475*/ uint16(x86_xReadSlashR),
- /*6476*/ uint16(x86_xArgR16),
- /*6477*/ uint16(x86_xArgRM16),
- /*6478*/ uint16(x86_xMatch),
- /*6479*/ uint16(x86_xSetOp), uint16(x86_POPCNT),
- /*6481*/ uint16(x86_xReadSlashR),
- /*6482*/ uint16(x86_xArgR32),
- /*6483*/ uint16(x86_xArgRM32),
- /*6484*/ uint16(x86_xMatch),
- /*6485*/ uint16(x86_xCondPrefix), 1,
- 0xF3, 6489,
- /*6489*/ uint16(x86_xCondDataSize), 6473, 6479, 6493,
- /*6493*/ uint16(x86_xSetOp), uint16(x86_POPCNT),
- /*6495*/ uint16(x86_xReadSlashR),
- /*6496*/ uint16(x86_xArgR64),
- /*6497*/ uint16(x86_xArgRM64),
- /*6498*/ uint16(x86_xMatch),
- /*6499*/ uint16(x86_xSetOp), uint16(x86_UD1),
- /*6501*/ uint16(x86_xMatch),
- /*6502*/ uint16(x86_xCondSlashR),
- 0, // 0
- 0, // 1
- 0, // 2
- 0, // 3
- 6511, // 4
- 6540, // 5
- 6569, // 6
- 6598, // 7
- /*6511*/ uint16(x86_xCondIs64), 6514, 6530,
- /*6514*/ uint16(x86_xCondDataSize), 6518, 6524, 0,
- /*6518*/ uint16(x86_xSetOp), uint16(x86_BT),
- /*6520*/ uint16(x86_xReadIb),
- /*6521*/ uint16(x86_xArgRM16),
- /*6522*/ uint16(x86_xArgImm8u),
- /*6523*/ uint16(x86_xMatch),
- /*6524*/ uint16(x86_xSetOp), uint16(x86_BT),
- /*6526*/ uint16(x86_xReadIb),
- /*6527*/ uint16(x86_xArgRM32),
- /*6528*/ uint16(x86_xArgImm8u),
- /*6529*/ uint16(x86_xMatch),
- /*6530*/ uint16(x86_xCondDataSize), 6518, 6524, 6534,
- /*6534*/ uint16(x86_xSetOp), uint16(x86_BT),
- /*6536*/ uint16(x86_xReadIb),
- /*6537*/ uint16(x86_xArgRM64),
- /*6538*/ uint16(x86_xArgImm8u),
- /*6539*/ uint16(x86_xMatch),
- /*6540*/ uint16(x86_xCondIs64), 6543, 6559,
- /*6543*/ uint16(x86_xCondDataSize), 6547, 6553, 0,
- /*6547*/ uint16(x86_xSetOp), uint16(x86_BTS),
- /*6549*/ uint16(x86_xReadIb),
- /*6550*/ uint16(x86_xArgRM16),
- /*6551*/ uint16(x86_xArgImm8u),
- /*6552*/ uint16(x86_xMatch),
- /*6553*/ uint16(x86_xSetOp), uint16(x86_BTS),
- /*6555*/ uint16(x86_xReadIb),
- /*6556*/ uint16(x86_xArgRM32),
- /*6557*/ uint16(x86_xArgImm8u),
- /*6558*/ uint16(x86_xMatch),
- /*6559*/ uint16(x86_xCondDataSize), 6547, 6553, 6563,
- /*6563*/ uint16(x86_xSetOp), uint16(x86_BTS),
- /*6565*/ uint16(x86_xReadIb),
- /*6566*/ uint16(x86_xArgRM64),
- /*6567*/ uint16(x86_xArgImm8u),
- /*6568*/ uint16(x86_xMatch),
- /*6569*/ uint16(x86_xCondIs64), 6572, 6588,
- /*6572*/ uint16(x86_xCondDataSize), 6576, 6582, 0,
- /*6576*/ uint16(x86_xSetOp), uint16(x86_BTR),
- /*6578*/ uint16(x86_xReadIb),
- /*6579*/ uint16(x86_xArgRM16),
- /*6580*/ uint16(x86_xArgImm8u),
- /*6581*/ uint16(x86_xMatch),
- /*6582*/ uint16(x86_xSetOp), uint16(x86_BTR),
- /*6584*/ uint16(x86_xReadIb),
- /*6585*/ uint16(x86_xArgRM32),
- /*6586*/ uint16(x86_xArgImm8u),
- /*6587*/ uint16(x86_xMatch),
- /*6588*/ uint16(x86_xCondDataSize), 6576, 6582, 6592,
- /*6592*/ uint16(x86_xSetOp), uint16(x86_BTR),
- /*6594*/ uint16(x86_xReadIb),
- /*6595*/ uint16(x86_xArgRM64),
- /*6596*/ uint16(x86_xArgImm8u),
- /*6597*/ uint16(x86_xMatch),
- /*6598*/ uint16(x86_xCondIs64), 6601, 6617,
- /*6601*/ uint16(x86_xCondDataSize), 6605, 6611, 0,
- /*6605*/ uint16(x86_xSetOp), uint16(x86_BTC),
- /*6607*/ uint16(x86_xReadIb),
- /*6608*/ uint16(x86_xArgRM16),
- /*6609*/ uint16(x86_xArgImm8u),
- /*6610*/ uint16(x86_xMatch),
- /*6611*/ uint16(x86_xSetOp), uint16(x86_BTC),
- /*6613*/ uint16(x86_xReadIb),
- /*6614*/ uint16(x86_xArgRM32),
- /*6615*/ uint16(x86_xArgImm8u),
- /*6616*/ uint16(x86_xMatch),
- /*6617*/ uint16(x86_xCondDataSize), 6605, 6611, 6621,
- /*6621*/ uint16(x86_xSetOp), uint16(x86_BTC),
- /*6623*/ uint16(x86_xReadIb),
- /*6624*/ uint16(x86_xArgRM64),
- /*6625*/ uint16(x86_xArgImm8u),
- /*6626*/ uint16(x86_xMatch),
- /*6627*/ uint16(x86_xCondIs64), 6630, 6646,
- /*6630*/ uint16(x86_xCondDataSize), 6634, 6640, 0,
- /*6634*/ uint16(x86_xSetOp), uint16(x86_BTC),
- /*6636*/ uint16(x86_xReadSlashR),
- /*6637*/ uint16(x86_xArgRM16),
- /*6638*/ uint16(x86_xArgR16),
- /*6639*/ uint16(x86_xMatch),
- /*6640*/ uint16(x86_xSetOp), uint16(x86_BTC),
- /*6642*/ uint16(x86_xReadSlashR),
- /*6643*/ uint16(x86_xArgRM32),
- /*6644*/ uint16(x86_xArgR32),
- /*6645*/ uint16(x86_xMatch),
- /*6646*/ uint16(x86_xCondDataSize), 6634, 6640, 6650,
- /*6650*/ uint16(x86_xSetOp), uint16(x86_BTC),
- /*6652*/ uint16(x86_xReadSlashR),
- /*6653*/ uint16(x86_xArgRM64),
- /*6654*/ uint16(x86_xArgR64),
- /*6655*/ uint16(x86_xMatch),
- /*6656*/ uint16(x86_xCondIs64), 6659, 6697,
- /*6659*/ uint16(x86_xCondPrefix), 2,
- 0xF3, 6681,
- 0x0, 6665,
- /*6665*/ uint16(x86_xCondDataSize), 6669, 6675, 0,
- /*6669*/ uint16(x86_xSetOp), uint16(x86_BSF),
- /*6671*/ uint16(x86_xReadSlashR),
- /*6672*/ uint16(x86_xArgR16),
- /*6673*/ uint16(x86_xArgRM16),
- /*6674*/ uint16(x86_xMatch),
- /*6675*/ uint16(x86_xSetOp), uint16(x86_BSF),
- /*6677*/ uint16(x86_xReadSlashR),
- /*6678*/ uint16(x86_xArgR32),
- /*6679*/ uint16(x86_xArgRM32),
- /*6680*/ uint16(x86_xMatch),
- /*6681*/ uint16(x86_xCondDataSize), 6685, 6691, 0,
- /*6685*/ uint16(x86_xSetOp), uint16(x86_TZCNT),
- /*6687*/ uint16(x86_xReadSlashR),
- /*6688*/ uint16(x86_xArgR16),
- /*6689*/ uint16(x86_xArgRM16),
- /*6690*/ uint16(x86_xMatch),
- /*6691*/ uint16(x86_xSetOp), uint16(x86_TZCNT),
- /*6693*/ uint16(x86_xReadSlashR),
- /*6694*/ uint16(x86_xArgR32),
- /*6695*/ uint16(x86_xArgRM32),
- /*6696*/ uint16(x86_xMatch),
- /*6697*/ uint16(x86_xCondPrefix), 2,
- 0xF3, 6713,
- 0x0, 6703,
- /*6703*/ uint16(x86_xCondDataSize), 6669, 6675, 6707,
- /*6707*/ uint16(x86_xSetOp), uint16(x86_BSF),
- /*6709*/ uint16(x86_xReadSlashR),
- /*6710*/ uint16(x86_xArgR64),
- /*6711*/ uint16(x86_xArgRM64),
- /*6712*/ uint16(x86_xMatch),
- /*6713*/ uint16(x86_xCondDataSize), 6685, 6691, 6717,
- /*6717*/ uint16(x86_xSetOp), uint16(x86_TZCNT),
- /*6719*/ uint16(x86_xReadSlashR),
- /*6720*/ uint16(x86_xArgR64),
- /*6721*/ uint16(x86_xArgRM64),
- /*6722*/ uint16(x86_xMatch),
- /*6723*/ uint16(x86_xCondIs64), 6726, 6764,
- /*6726*/ uint16(x86_xCondPrefix), 2,
- 0xF3, 6748,
- 0x0, 6732,
- /*6732*/ uint16(x86_xCondDataSize), 6736, 6742, 0,
- /*6736*/ uint16(x86_xSetOp), uint16(x86_BSR),
- /*6738*/ uint16(x86_xReadSlashR),
- /*6739*/ uint16(x86_xArgR16),
- /*6740*/ uint16(x86_xArgRM16),
- /*6741*/ uint16(x86_xMatch),
- /*6742*/ uint16(x86_xSetOp), uint16(x86_BSR),
- /*6744*/ uint16(x86_xReadSlashR),
- /*6745*/ uint16(x86_xArgR32),
- /*6746*/ uint16(x86_xArgRM32),
- /*6747*/ uint16(x86_xMatch),
- /*6748*/ uint16(x86_xCondDataSize), 6752, 6758, 0,
- /*6752*/ uint16(x86_xSetOp), uint16(x86_LZCNT),
- /*6754*/ uint16(x86_xReadSlashR),
- /*6755*/ uint16(x86_xArgR16),
- /*6756*/ uint16(x86_xArgRM16),
- /*6757*/ uint16(x86_xMatch),
- /*6758*/ uint16(x86_xSetOp), uint16(x86_LZCNT),
- /*6760*/ uint16(x86_xReadSlashR),
- /*6761*/ uint16(x86_xArgR32),
- /*6762*/ uint16(x86_xArgRM32),
- /*6763*/ uint16(x86_xMatch),
- /*6764*/ uint16(x86_xCondPrefix), 2,
- 0xF3, 6780,
- 0x0, 6770,
- /*6770*/ uint16(x86_xCondDataSize), 6736, 6742, 6774,
- /*6774*/ uint16(x86_xSetOp), uint16(x86_BSR),
- /*6776*/ uint16(x86_xReadSlashR),
- /*6777*/ uint16(x86_xArgR64),
- /*6778*/ uint16(x86_xArgRM64),
- /*6779*/ uint16(x86_xMatch),
- /*6780*/ uint16(x86_xCondDataSize), 6752, 6758, 6784,
- /*6784*/ uint16(x86_xSetOp), uint16(x86_LZCNT),
- /*6786*/ uint16(x86_xReadSlashR),
- /*6787*/ uint16(x86_xArgR64),
- /*6788*/ uint16(x86_xArgRM64),
- /*6789*/ uint16(x86_xMatch),
- /*6790*/ uint16(x86_xCondIs64), 6793, 6809,
- /*6793*/ uint16(x86_xCondDataSize), 6797, 6803, 0,
- /*6797*/ uint16(x86_xSetOp), uint16(x86_MOVSX),
- /*6799*/ uint16(x86_xReadSlashR),
- /*6800*/ uint16(x86_xArgR16),
- /*6801*/ uint16(x86_xArgRM8),
- /*6802*/ uint16(x86_xMatch),
- /*6803*/ uint16(x86_xSetOp), uint16(x86_MOVSX),
- /*6805*/ uint16(x86_xReadSlashR),
- /*6806*/ uint16(x86_xArgR32),
- /*6807*/ uint16(x86_xArgRM8),
- /*6808*/ uint16(x86_xMatch),
- /*6809*/ uint16(x86_xCondDataSize), 6797, 6803, 6813,
- /*6813*/ uint16(x86_xSetOp), uint16(x86_MOVSX),
- /*6815*/ uint16(x86_xReadSlashR),
- /*6816*/ uint16(x86_xArgR64),
- /*6817*/ uint16(x86_xArgRM8),
- /*6818*/ uint16(x86_xMatch),
- /*6819*/ uint16(x86_xCondIs64), 6822, 6838,
- /*6822*/ uint16(x86_xCondDataSize), 6826, 6832, 0,
- /*6826*/ uint16(x86_xSetOp), uint16(x86_MOVSX),
- /*6828*/ uint16(x86_xReadSlashR),
- /*6829*/ uint16(x86_xArgR16),
- /*6830*/ uint16(x86_xArgRM16),
- /*6831*/ uint16(x86_xMatch),
- /*6832*/ uint16(x86_xSetOp), uint16(x86_MOVSX),
- /*6834*/ uint16(x86_xReadSlashR),
- /*6835*/ uint16(x86_xArgR32),
- /*6836*/ uint16(x86_xArgRM16),
- /*6837*/ uint16(x86_xMatch),
- /*6838*/ uint16(x86_xCondDataSize), 6826, 6832, 6842,
- /*6842*/ uint16(x86_xSetOp), uint16(x86_MOVSX),
- /*6844*/ uint16(x86_xReadSlashR),
- /*6845*/ uint16(x86_xArgR64),
- /*6846*/ uint16(x86_xArgRM16),
- /*6847*/ uint16(x86_xMatch),
- /*6848*/ uint16(x86_xSetOp), uint16(x86_XADD),
- /*6850*/ uint16(x86_xReadSlashR),
- /*6851*/ uint16(x86_xArgRM8),
- /*6852*/ uint16(x86_xArgR8),
- /*6853*/ uint16(x86_xMatch),
- /*6854*/ uint16(x86_xCondIs64), 6857, 6873,
- /*6857*/ uint16(x86_xCondDataSize), 6861, 6867, 0,
- /*6861*/ uint16(x86_xSetOp), uint16(x86_XADD),
- /*6863*/ uint16(x86_xReadSlashR),
- /*6864*/ uint16(x86_xArgRM16),
- /*6865*/ uint16(x86_xArgR16),
- /*6866*/ uint16(x86_xMatch),
- /*6867*/ uint16(x86_xSetOp), uint16(x86_XADD),
- /*6869*/ uint16(x86_xReadSlashR),
- /*6870*/ uint16(x86_xArgRM32),
- /*6871*/ uint16(x86_xArgR32),
- /*6872*/ uint16(x86_xMatch),
- /*6873*/ uint16(x86_xCondDataSize), 6861, 6867, 6877,
- /*6877*/ uint16(x86_xSetOp), uint16(x86_XADD),
- /*6879*/ uint16(x86_xReadSlashR),
- /*6880*/ uint16(x86_xArgRM64),
- /*6881*/ uint16(x86_xArgR64),
- /*6882*/ uint16(x86_xMatch),
- /*6883*/ uint16(x86_xCondPrefix), 4,
- 0xF3, 6917,
- 0xF2, 6909,
- 0x66, 6901,
- 0x0, 6893,
- /*6893*/ uint16(x86_xSetOp), uint16(x86_CMPPS),
- /*6895*/ uint16(x86_xReadSlashR),
- /*6896*/ uint16(x86_xReadIb),
- /*6897*/ uint16(x86_xArgXmm1),
- /*6898*/ uint16(x86_xArgXmm2M128),
- /*6899*/ uint16(x86_xArgImm8u),
- /*6900*/ uint16(x86_xMatch),
- /*6901*/ uint16(x86_xSetOp), uint16(x86_CMPPD),
- /*6903*/ uint16(x86_xReadSlashR),
- /*6904*/ uint16(x86_xReadIb),
- /*6905*/ uint16(x86_xArgXmm1),
- /*6906*/ uint16(x86_xArgXmm2M128),
- /*6907*/ uint16(x86_xArgImm8u),
- /*6908*/ uint16(x86_xMatch),
- /*6909*/ uint16(x86_xSetOp), uint16(x86_CMPSD_XMM),
- /*6911*/ uint16(x86_xReadSlashR),
- /*6912*/ uint16(x86_xReadIb),
- /*6913*/ uint16(x86_xArgXmm1),
- /*6914*/ uint16(x86_xArgXmm2M64),
- /*6915*/ uint16(x86_xArgImm8u),
- /*6916*/ uint16(x86_xMatch),
- /*6917*/ uint16(x86_xSetOp), uint16(x86_CMPSS),
- /*6919*/ uint16(x86_xReadSlashR),
- /*6920*/ uint16(x86_xReadIb),
- /*6921*/ uint16(x86_xArgXmm1),
- /*6922*/ uint16(x86_xArgXmm2M32),
- /*6923*/ uint16(x86_xArgImm8u),
- /*6924*/ uint16(x86_xMatch),
- /*6925*/ uint16(x86_xCondIs64), 6928, 6944,
- /*6928*/ uint16(x86_xCondDataSize), 6932, 6938, 0,
- /*6932*/ uint16(x86_xSetOp), uint16(x86_MOVNTI),
- /*6934*/ uint16(x86_xReadSlashR),
- /*6935*/ uint16(x86_xArgM32),
- /*6936*/ uint16(x86_xArgR32),
- /*6937*/ uint16(x86_xMatch),
- /*6938*/ uint16(x86_xSetOp), uint16(x86_MOVNTI),
- /*6940*/ uint16(x86_xReadSlashR),
- /*6941*/ uint16(x86_xArgM32),
- /*6942*/ uint16(x86_xArgR32),
- /*6943*/ uint16(x86_xMatch),
- /*6944*/ uint16(x86_xCondDataSize), 6932, 6938, 6948,
- /*6948*/ uint16(x86_xSetOp), uint16(x86_MOVNTI),
- /*6950*/ uint16(x86_xReadSlashR),
- /*6951*/ uint16(x86_xArgM64),
- /*6952*/ uint16(x86_xArgR64),
- /*6953*/ uint16(x86_xMatch),
- /*6954*/ uint16(x86_xCondPrefix), 2,
- 0x66, 6968,
- 0x0, 6960,
- /*6960*/ uint16(x86_xSetOp), uint16(x86_PINSRW),
- /*6962*/ uint16(x86_xReadSlashR),
- /*6963*/ uint16(x86_xReadIb),
- /*6964*/ uint16(x86_xArgMm),
- /*6965*/ uint16(x86_xArgR32M16),
- /*6966*/ uint16(x86_xArgImm8u),
- /*6967*/ uint16(x86_xMatch),
- /*6968*/ uint16(x86_xSetOp), uint16(x86_PINSRW),
- /*6970*/ uint16(x86_xReadSlashR),
- /*6971*/ uint16(x86_xReadIb),
- /*6972*/ uint16(x86_xArgXmm),
- /*6973*/ uint16(x86_xArgR32M16),
- /*6974*/ uint16(x86_xArgImm8u),
- /*6975*/ uint16(x86_xMatch),
- /*6976*/ uint16(x86_xCondPrefix), 2,
- 0x66, 6990,
- 0x0, 6982,
- /*6982*/ uint16(x86_xSetOp), uint16(x86_PEXTRW),
- /*6984*/ uint16(x86_xReadSlashR),
- /*6985*/ uint16(x86_xReadIb),
- /*6986*/ uint16(x86_xArgR32),
- /*6987*/ uint16(x86_xArgMm2),
- /*6988*/ uint16(x86_xArgImm8u),
- /*6989*/ uint16(x86_xMatch),
- /*6990*/ uint16(x86_xSetOp), uint16(x86_PEXTRW),
- /*6992*/ uint16(x86_xReadSlashR),
- /*6993*/ uint16(x86_xReadIb),
- /*6994*/ uint16(x86_xArgR32),
- /*6995*/ uint16(x86_xArgXmm2),
- /*6996*/ uint16(x86_xArgImm8u),
- /*6997*/ uint16(x86_xMatch),
- /*6998*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7012,
- 0x0, 7004,
- /*7004*/ uint16(x86_xSetOp), uint16(x86_SHUFPS),
- /*7006*/ uint16(x86_xReadSlashR),
- /*7007*/ uint16(x86_xReadIb),
- /*7008*/ uint16(x86_xArgXmm1),
- /*7009*/ uint16(x86_xArgXmm2M128),
- /*7010*/ uint16(x86_xArgImm8u),
- /*7011*/ uint16(x86_xMatch),
- /*7012*/ uint16(x86_xSetOp), uint16(x86_SHUFPD),
- /*7014*/ uint16(x86_xReadSlashR),
- /*7015*/ uint16(x86_xReadIb),
- /*7016*/ uint16(x86_xArgXmm1),
- /*7017*/ uint16(x86_xArgXmm2M128),
- /*7018*/ uint16(x86_xArgImm8u),
- /*7019*/ uint16(x86_xMatch),
- /*7020*/ uint16(x86_xCondSlashR),
- 0, // 0
- 7029, // 1
- 0, // 2
- 7052, // 3
- 7075, // 4
- 7098, // 5
- 7121, // 6
- 0, // 7
- /*7029*/ uint16(x86_xCondIs64), 7032, 7044,
- /*7032*/ uint16(x86_xCondDataSize), 7036, 7040, 0,
- /*7036*/ uint16(x86_xSetOp), uint16(x86_CMPXCHG8B),
- /*7038*/ uint16(x86_xArgM64),
- /*7039*/ uint16(x86_xMatch),
- /*7040*/ uint16(x86_xSetOp), uint16(x86_CMPXCHG8B),
- /*7042*/ uint16(x86_xArgM64),
- /*7043*/ uint16(x86_xMatch),
- /*7044*/ uint16(x86_xCondDataSize), 7036, 7040, 7048,
- /*7048*/ uint16(x86_xSetOp), uint16(x86_CMPXCHG16B),
- /*7050*/ uint16(x86_xArgM128),
- /*7051*/ uint16(x86_xMatch),
- /*7052*/ uint16(x86_xCondIs64), 7055, 7067,
- /*7055*/ uint16(x86_xCondDataSize), 7059, 7063, 0,
- /*7059*/ uint16(x86_xSetOp), uint16(x86_XRSTORS),
- /*7061*/ uint16(x86_xArgMem),
- /*7062*/ uint16(x86_xMatch),
- /*7063*/ uint16(x86_xSetOp), uint16(x86_XRSTORS),
- /*7065*/ uint16(x86_xArgMem),
- /*7066*/ uint16(x86_xMatch),
- /*7067*/ uint16(x86_xCondDataSize), 7059, 7063, 7071,
- /*7071*/ uint16(x86_xSetOp), uint16(x86_XRSTORS64),
- /*7073*/ uint16(x86_xArgMem),
- /*7074*/ uint16(x86_xMatch),
- /*7075*/ uint16(x86_xCondIs64), 7078, 7090,
- /*7078*/ uint16(x86_xCondDataSize), 7082, 7086, 0,
- /*7082*/ uint16(x86_xSetOp), uint16(x86_XSAVEC),
- /*7084*/ uint16(x86_xArgMem),
- /*7085*/ uint16(x86_xMatch),
- /*7086*/ uint16(x86_xSetOp), uint16(x86_XSAVEC),
- /*7088*/ uint16(x86_xArgMem),
- /*7089*/ uint16(x86_xMatch),
- /*7090*/ uint16(x86_xCondDataSize), 7082, 7086, 7094,
- /*7094*/ uint16(x86_xSetOp), uint16(x86_XSAVEC64),
- /*7096*/ uint16(x86_xArgMem),
- /*7097*/ uint16(x86_xMatch),
- /*7098*/ uint16(x86_xCondIs64), 7101, 7113,
- /*7101*/ uint16(x86_xCondDataSize), 7105, 7109, 0,
- /*7105*/ uint16(x86_xSetOp), uint16(x86_XSAVES),
- /*7107*/ uint16(x86_xArgMem),
- /*7108*/ uint16(x86_xMatch),
- /*7109*/ uint16(x86_xSetOp), uint16(x86_XSAVES),
- /*7111*/ uint16(x86_xArgMem),
- /*7112*/ uint16(x86_xMatch),
- /*7113*/ uint16(x86_xCondDataSize), 7105, 7109, 7117,
- /*7117*/ uint16(x86_xSetOp), uint16(x86_XSAVES64),
- /*7119*/ uint16(x86_xArgMem),
- /*7120*/ uint16(x86_xMatch),
- /*7121*/ uint16(x86_xCondIs64), 7124, 7142,
- /*7124*/ uint16(x86_xCondDataSize), 7128, 7135, 0,
- /*7128*/ uint16(x86_xCondIsMem), 7131, 0,
- /*7131*/ uint16(x86_xSetOp), uint16(x86_RDRAND),
- /*7133*/ uint16(x86_xArgRmf16),
- /*7134*/ uint16(x86_xMatch),
- /*7135*/ uint16(x86_xCondIsMem), 7138, 0,
- /*7138*/ uint16(x86_xSetOp), uint16(x86_RDRAND),
- /*7140*/ uint16(x86_xArgRmf32),
- /*7141*/ uint16(x86_xMatch),
- /*7142*/ uint16(x86_xCondDataSize), 7128, 7135, 7146,
- /*7146*/ uint16(x86_xSetOp), uint16(x86_RDRAND),
- /*7148*/ uint16(x86_xMatch),
- /*7149*/ uint16(x86_xCondIs64), 7152, 7164,
- /*7152*/ uint16(x86_xCondDataSize), 7156, 7160, 0,
- /*7156*/ uint16(x86_xSetOp), uint16(x86_BSWAP),
- /*7158*/ uint16(x86_xArgR16op),
- /*7159*/ uint16(x86_xMatch),
- /*7160*/ uint16(x86_xSetOp), uint16(x86_BSWAP),
- /*7162*/ uint16(x86_xArgR32op),
- /*7163*/ uint16(x86_xMatch),
- /*7164*/ uint16(x86_xCondDataSize), 7156, 7160, 7168,
- /*7168*/ uint16(x86_xSetOp), uint16(x86_BSWAP),
- /*7170*/ uint16(x86_xArgR64op),
- /*7171*/ uint16(x86_xMatch),
- /*7172*/ uint16(x86_xCondPrefix), 2,
- 0xF2, 7184,
- 0x66, 7178,
- /*7178*/ uint16(x86_xSetOp), uint16(x86_ADDSUBPD),
- /*7180*/ uint16(x86_xReadSlashR),
- /*7181*/ uint16(x86_xArgXmm1),
- /*7182*/ uint16(x86_xArgXmm2M128),
- /*7183*/ uint16(x86_xMatch),
- /*7184*/ uint16(x86_xSetOp), uint16(x86_ADDSUBPS),
- /*7186*/ uint16(x86_xReadSlashR),
- /*7187*/ uint16(x86_xArgXmm1),
- /*7188*/ uint16(x86_xArgXmm2M128),
- /*7189*/ uint16(x86_xMatch),
- /*7190*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7202,
- 0x0, 7196,
- /*7196*/ uint16(x86_xSetOp), uint16(x86_PSRLW),
- /*7198*/ uint16(x86_xReadSlashR),
- /*7199*/ uint16(x86_xArgMm),
- /*7200*/ uint16(x86_xArgMmM64),
- /*7201*/ uint16(x86_xMatch),
- /*7202*/ uint16(x86_xSetOp), uint16(x86_PSRLW),
- /*7204*/ uint16(x86_xReadSlashR),
- /*7205*/ uint16(x86_xArgXmm1),
- /*7206*/ uint16(x86_xArgXmm2M128),
- /*7207*/ uint16(x86_xMatch),
- /*7208*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7220,
- 0x0, 7214,
- /*7214*/ uint16(x86_xSetOp), uint16(x86_PSRLD),
- /*7216*/ uint16(x86_xReadSlashR),
- /*7217*/ uint16(x86_xArgMm),
- /*7218*/ uint16(x86_xArgMmM64),
- /*7219*/ uint16(x86_xMatch),
- /*7220*/ uint16(x86_xSetOp), uint16(x86_PSRLD),
- /*7222*/ uint16(x86_xReadSlashR),
- /*7223*/ uint16(x86_xArgXmm1),
- /*7224*/ uint16(x86_xArgXmm2M128),
- /*7225*/ uint16(x86_xMatch),
- /*7226*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7238,
- 0x0, 7232,
- /*7232*/ uint16(x86_xSetOp), uint16(x86_PSRLQ),
- /*7234*/ uint16(x86_xReadSlashR),
- /*7235*/ uint16(x86_xArgMm),
- /*7236*/ uint16(x86_xArgMmM64),
- /*7237*/ uint16(x86_xMatch),
- /*7238*/ uint16(x86_xSetOp), uint16(x86_PSRLQ),
- /*7240*/ uint16(x86_xReadSlashR),
- /*7241*/ uint16(x86_xArgXmm1),
- /*7242*/ uint16(x86_xArgXmm2M128),
- /*7243*/ uint16(x86_xMatch),
- /*7244*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7256,
- 0x0, 7250,
- /*7250*/ uint16(x86_xSetOp), uint16(x86_PADDQ),
- /*7252*/ uint16(x86_xReadSlashR),
- /*7253*/ uint16(x86_xArgMm1),
- /*7254*/ uint16(x86_xArgMm2M64),
- /*7255*/ uint16(x86_xMatch),
- /*7256*/ uint16(x86_xSetOp), uint16(x86_PADDQ),
- /*7258*/ uint16(x86_xReadSlashR),
- /*7259*/ uint16(x86_xArgXmm1),
- /*7260*/ uint16(x86_xArgXmm2M128),
- /*7261*/ uint16(x86_xMatch),
- /*7262*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7274,
- 0x0, 7268,
- /*7268*/ uint16(x86_xSetOp), uint16(x86_PMULLW),
- /*7270*/ uint16(x86_xReadSlashR),
- /*7271*/ uint16(x86_xArgMm),
- /*7272*/ uint16(x86_xArgMmM64),
- /*7273*/ uint16(x86_xMatch),
- /*7274*/ uint16(x86_xSetOp), uint16(x86_PMULLW),
- /*7276*/ uint16(x86_xReadSlashR),
- /*7277*/ uint16(x86_xArgXmm1),
- /*7278*/ uint16(x86_xArgXmm2M128),
- /*7279*/ uint16(x86_xMatch),
- /*7280*/ uint16(x86_xCondPrefix), 3,
- 0xF3, 7300,
- 0xF2, 7294,
- 0x66, 7288,
- /*7288*/ uint16(x86_xSetOp), uint16(x86_MOVQ),
- /*7290*/ uint16(x86_xReadSlashR),
- /*7291*/ uint16(x86_xArgXmm2M64),
- /*7292*/ uint16(x86_xArgXmm1),
- /*7293*/ uint16(x86_xMatch),
- /*7294*/ uint16(x86_xSetOp), uint16(x86_MOVDQ2Q),
- /*7296*/ uint16(x86_xReadSlashR),
- /*7297*/ uint16(x86_xArgMm),
- /*7298*/ uint16(x86_xArgXmm2),
- /*7299*/ uint16(x86_xMatch),
- /*7300*/ uint16(x86_xSetOp), uint16(x86_MOVQ2DQ),
- /*7302*/ uint16(x86_xReadSlashR),
- /*7303*/ uint16(x86_xArgXmm1),
- /*7304*/ uint16(x86_xArgMm2),
- /*7305*/ uint16(x86_xMatch),
- /*7306*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7318,
- 0x0, 7312,
- /*7312*/ uint16(x86_xSetOp), uint16(x86_PMOVMSKB),
- /*7314*/ uint16(x86_xReadSlashR),
- /*7315*/ uint16(x86_xArgR32),
- /*7316*/ uint16(x86_xArgMm2),
- /*7317*/ uint16(x86_xMatch),
- /*7318*/ uint16(x86_xSetOp), uint16(x86_PMOVMSKB),
- /*7320*/ uint16(x86_xReadSlashR),
- /*7321*/ uint16(x86_xArgR32),
- /*7322*/ uint16(x86_xArgXmm2),
- /*7323*/ uint16(x86_xMatch),
- /*7324*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7336,
- 0x0, 7330,
- /*7330*/ uint16(x86_xSetOp), uint16(x86_PSUBUSB),
- /*7332*/ uint16(x86_xReadSlashR),
- /*7333*/ uint16(x86_xArgMm),
- /*7334*/ uint16(x86_xArgMmM64),
- /*7335*/ uint16(x86_xMatch),
- /*7336*/ uint16(x86_xSetOp), uint16(x86_PSUBUSB),
- /*7338*/ uint16(x86_xReadSlashR),
- /*7339*/ uint16(x86_xArgXmm1),
- /*7340*/ uint16(x86_xArgXmm2M128),
- /*7341*/ uint16(x86_xMatch),
- /*7342*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7354,
- 0x0, 7348,
- /*7348*/ uint16(x86_xSetOp), uint16(x86_PSUBUSW),
- /*7350*/ uint16(x86_xReadSlashR),
- /*7351*/ uint16(x86_xArgMm),
- /*7352*/ uint16(x86_xArgMmM64),
- /*7353*/ uint16(x86_xMatch),
- /*7354*/ uint16(x86_xSetOp), uint16(x86_PSUBUSW),
- /*7356*/ uint16(x86_xReadSlashR),
- /*7357*/ uint16(x86_xArgXmm1),
- /*7358*/ uint16(x86_xArgXmm2M128),
- /*7359*/ uint16(x86_xMatch),
- /*7360*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7372,
- 0x0, 7366,
- /*7366*/ uint16(x86_xSetOp), uint16(x86_PMINUB),
- /*7368*/ uint16(x86_xReadSlashR),
- /*7369*/ uint16(x86_xArgMm1),
- /*7370*/ uint16(x86_xArgMm2M64),
- /*7371*/ uint16(x86_xMatch),
- /*7372*/ uint16(x86_xSetOp), uint16(x86_PMINUB),
- /*7374*/ uint16(x86_xReadSlashR),
- /*7375*/ uint16(x86_xArgXmm1),
- /*7376*/ uint16(x86_xArgXmm2M128),
- /*7377*/ uint16(x86_xMatch),
- /*7378*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7390,
- 0x0, 7384,
- /*7384*/ uint16(x86_xSetOp), uint16(x86_PAND),
- /*7386*/ uint16(x86_xReadSlashR),
- /*7387*/ uint16(x86_xArgMm),
- /*7388*/ uint16(x86_xArgMmM64),
- /*7389*/ uint16(x86_xMatch),
- /*7390*/ uint16(x86_xSetOp), uint16(x86_PAND),
- /*7392*/ uint16(x86_xReadSlashR),
- /*7393*/ uint16(x86_xArgXmm1),
- /*7394*/ uint16(x86_xArgXmm2M128),
- /*7395*/ uint16(x86_xMatch),
- /*7396*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7408,
- 0x0, 7402,
- /*7402*/ uint16(x86_xSetOp), uint16(x86_PADDUSB),
- /*7404*/ uint16(x86_xReadSlashR),
- /*7405*/ uint16(x86_xArgMm),
- /*7406*/ uint16(x86_xArgMmM64),
- /*7407*/ uint16(x86_xMatch),
- /*7408*/ uint16(x86_xSetOp), uint16(x86_PADDUSB),
- /*7410*/ uint16(x86_xReadSlashR),
- /*7411*/ uint16(x86_xArgXmm1),
- /*7412*/ uint16(x86_xArgXmm2M128),
- /*7413*/ uint16(x86_xMatch),
- /*7414*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7426,
- 0x0, 7420,
- /*7420*/ uint16(x86_xSetOp), uint16(x86_PADDUSW),
- /*7422*/ uint16(x86_xReadSlashR),
- /*7423*/ uint16(x86_xArgMm),
- /*7424*/ uint16(x86_xArgMmM64),
- /*7425*/ uint16(x86_xMatch),
- /*7426*/ uint16(x86_xSetOp), uint16(x86_PADDUSW),
- /*7428*/ uint16(x86_xReadSlashR),
- /*7429*/ uint16(x86_xArgXmm1),
- /*7430*/ uint16(x86_xArgXmm2M128),
- /*7431*/ uint16(x86_xMatch),
- /*7432*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7444,
- 0x0, 7438,
- /*7438*/ uint16(x86_xSetOp), uint16(x86_PMAXUB),
- /*7440*/ uint16(x86_xReadSlashR),
- /*7441*/ uint16(x86_xArgMm1),
- /*7442*/ uint16(x86_xArgMm2M64),
- /*7443*/ uint16(x86_xMatch),
- /*7444*/ uint16(x86_xSetOp), uint16(x86_PMAXUB),
- /*7446*/ uint16(x86_xReadSlashR),
- /*7447*/ uint16(x86_xArgXmm1),
- /*7448*/ uint16(x86_xArgXmm2M128),
- /*7449*/ uint16(x86_xMatch),
- /*7450*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7462,
- 0x0, 7456,
- /*7456*/ uint16(x86_xSetOp), uint16(x86_PANDN),
- /*7458*/ uint16(x86_xReadSlashR),
- /*7459*/ uint16(x86_xArgMm),
- /*7460*/ uint16(x86_xArgMmM64),
- /*7461*/ uint16(x86_xMatch),
- /*7462*/ uint16(x86_xSetOp), uint16(x86_PANDN),
- /*7464*/ uint16(x86_xReadSlashR),
- /*7465*/ uint16(x86_xArgXmm1),
- /*7466*/ uint16(x86_xArgXmm2M128),
- /*7467*/ uint16(x86_xMatch),
- /*7468*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7480,
- 0x0, 7474,
- /*7474*/ uint16(x86_xSetOp), uint16(x86_PAVGB),
- /*7476*/ uint16(x86_xReadSlashR),
- /*7477*/ uint16(x86_xArgMm1),
- /*7478*/ uint16(x86_xArgMm2M64),
- /*7479*/ uint16(x86_xMatch),
- /*7480*/ uint16(x86_xSetOp), uint16(x86_PAVGB),
- /*7482*/ uint16(x86_xReadSlashR),
- /*7483*/ uint16(x86_xArgXmm1),
- /*7484*/ uint16(x86_xArgXmm2M128),
- /*7485*/ uint16(x86_xMatch),
- /*7486*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7498,
- 0x0, 7492,
- /*7492*/ uint16(x86_xSetOp), uint16(x86_PSRAW),
- /*7494*/ uint16(x86_xReadSlashR),
- /*7495*/ uint16(x86_xArgMm),
- /*7496*/ uint16(x86_xArgMmM64),
- /*7497*/ uint16(x86_xMatch),
- /*7498*/ uint16(x86_xSetOp), uint16(x86_PSRAW),
- /*7500*/ uint16(x86_xReadSlashR),
- /*7501*/ uint16(x86_xArgXmm1),
- /*7502*/ uint16(x86_xArgXmm2M128),
- /*7503*/ uint16(x86_xMatch),
- /*7504*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7516,
- 0x0, 7510,
- /*7510*/ uint16(x86_xSetOp), uint16(x86_PSRAD),
- /*7512*/ uint16(x86_xReadSlashR),
- /*7513*/ uint16(x86_xArgMm),
- /*7514*/ uint16(x86_xArgMmM64),
- /*7515*/ uint16(x86_xMatch),
- /*7516*/ uint16(x86_xSetOp), uint16(x86_PSRAD),
- /*7518*/ uint16(x86_xReadSlashR),
- /*7519*/ uint16(x86_xArgXmm1),
- /*7520*/ uint16(x86_xArgXmm2M128),
- /*7521*/ uint16(x86_xMatch),
- /*7522*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7534,
- 0x0, 7528,
- /*7528*/ uint16(x86_xSetOp), uint16(x86_PAVGW),
- /*7530*/ uint16(x86_xReadSlashR),
- /*7531*/ uint16(x86_xArgMm1),
- /*7532*/ uint16(x86_xArgMm2M64),
- /*7533*/ uint16(x86_xMatch),
- /*7534*/ uint16(x86_xSetOp), uint16(x86_PAVGW),
- /*7536*/ uint16(x86_xReadSlashR),
- /*7537*/ uint16(x86_xArgXmm1),
- /*7538*/ uint16(x86_xArgXmm2M128),
- /*7539*/ uint16(x86_xMatch),
- /*7540*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7552,
- 0x0, 7546,
- /*7546*/ uint16(x86_xSetOp), uint16(x86_PMULHUW),
- /*7548*/ uint16(x86_xReadSlashR),
- /*7549*/ uint16(x86_xArgMm1),
- /*7550*/ uint16(x86_xArgMm2M64),
- /*7551*/ uint16(x86_xMatch),
- /*7552*/ uint16(x86_xSetOp), uint16(x86_PMULHUW),
- /*7554*/ uint16(x86_xReadSlashR),
- /*7555*/ uint16(x86_xArgXmm1),
- /*7556*/ uint16(x86_xArgXmm2M128),
- /*7557*/ uint16(x86_xMatch),
- /*7558*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7570,
- 0x0, 7564,
- /*7564*/ uint16(x86_xSetOp), uint16(x86_PMULHW),
- /*7566*/ uint16(x86_xReadSlashR),
- /*7567*/ uint16(x86_xArgMm),
- /*7568*/ uint16(x86_xArgMmM64),
- /*7569*/ uint16(x86_xMatch),
- /*7570*/ uint16(x86_xSetOp), uint16(x86_PMULHW),
- /*7572*/ uint16(x86_xReadSlashR),
- /*7573*/ uint16(x86_xArgXmm1),
- /*7574*/ uint16(x86_xArgXmm2M128),
- /*7575*/ uint16(x86_xMatch),
- /*7576*/ uint16(x86_xCondPrefix), 3,
- 0xF3, 7596,
- 0xF2, 7590,
- 0x66, 7584,
- /*7584*/ uint16(x86_xSetOp), uint16(x86_CVTTPD2DQ),
- /*7586*/ uint16(x86_xReadSlashR),
- /*7587*/ uint16(x86_xArgXmm1),
- /*7588*/ uint16(x86_xArgXmm2M128),
- /*7589*/ uint16(x86_xMatch),
- /*7590*/ uint16(x86_xSetOp), uint16(x86_CVTPD2DQ),
- /*7592*/ uint16(x86_xReadSlashR),
- /*7593*/ uint16(x86_xArgXmm1),
- /*7594*/ uint16(x86_xArgXmm2M128),
- /*7595*/ uint16(x86_xMatch),
- /*7596*/ uint16(x86_xSetOp), uint16(x86_CVTDQ2PD),
- /*7598*/ uint16(x86_xReadSlashR),
- /*7599*/ uint16(x86_xArgXmm1),
- /*7600*/ uint16(x86_xArgXmm2M64),
- /*7601*/ uint16(x86_xMatch),
- /*7602*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7614,
- 0x0, 7608,
- /*7608*/ uint16(x86_xSetOp), uint16(x86_MOVNTQ),
- /*7610*/ uint16(x86_xReadSlashR),
- /*7611*/ uint16(x86_xArgM64),
- /*7612*/ uint16(x86_xArgMm),
- /*7613*/ uint16(x86_xMatch),
- /*7614*/ uint16(x86_xSetOp), uint16(x86_MOVNTDQ),
- /*7616*/ uint16(x86_xReadSlashR),
- /*7617*/ uint16(x86_xArgM128),
- /*7618*/ uint16(x86_xArgXmm),
- /*7619*/ uint16(x86_xMatch),
- /*7620*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7632,
- 0x0, 7626,
- /*7626*/ uint16(x86_xSetOp), uint16(x86_PSUBSB),
- /*7628*/ uint16(x86_xReadSlashR),
- /*7629*/ uint16(x86_xArgMm),
- /*7630*/ uint16(x86_xArgMmM64),
- /*7631*/ uint16(x86_xMatch),
- /*7632*/ uint16(x86_xSetOp), uint16(x86_PSUBSB),
- /*7634*/ uint16(x86_xReadSlashR),
- /*7635*/ uint16(x86_xArgXmm1),
- /*7636*/ uint16(x86_xArgXmm2M128),
- /*7637*/ uint16(x86_xMatch),
- /*7638*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7650,
- 0x0, 7644,
- /*7644*/ uint16(x86_xSetOp), uint16(x86_PSUBSW),
- /*7646*/ uint16(x86_xReadSlashR),
- /*7647*/ uint16(x86_xArgMm),
- /*7648*/ uint16(x86_xArgMmM64),
- /*7649*/ uint16(x86_xMatch),
- /*7650*/ uint16(x86_xSetOp), uint16(x86_PSUBSW),
- /*7652*/ uint16(x86_xReadSlashR),
- /*7653*/ uint16(x86_xArgXmm1),
- /*7654*/ uint16(x86_xArgXmm2M128),
- /*7655*/ uint16(x86_xMatch),
- /*7656*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7668,
- 0x0, 7662,
- /*7662*/ uint16(x86_xSetOp), uint16(x86_PMINSW),
- /*7664*/ uint16(x86_xReadSlashR),
- /*7665*/ uint16(x86_xArgMm1),
- /*7666*/ uint16(x86_xArgMm2M64),
- /*7667*/ uint16(x86_xMatch),
- /*7668*/ uint16(x86_xSetOp), uint16(x86_PMINSW),
- /*7670*/ uint16(x86_xReadSlashR),
- /*7671*/ uint16(x86_xArgXmm1),
- /*7672*/ uint16(x86_xArgXmm2M128),
- /*7673*/ uint16(x86_xMatch),
- /*7674*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7686,
- 0x0, 7680,
- /*7680*/ uint16(x86_xSetOp), uint16(x86_POR),
- /*7682*/ uint16(x86_xReadSlashR),
- /*7683*/ uint16(x86_xArgMm),
- /*7684*/ uint16(x86_xArgMmM64),
- /*7685*/ uint16(x86_xMatch),
- /*7686*/ uint16(x86_xSetOp), uint16(x86_POR),
- /*7688*/ uint16(x86_xReadSlashR),
- /*7689*/ uint16(x86_xArgXmm1),
- /*7690*/ uint16(x86_xArgXmm2M128),
- /*7691*/ uint16(x86_xMatch),
- /*7692*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7704,
- 0x0, 7698,
- /*7698*/ uint16(x86_xSetOp), uint16(x86_PADDSB),
- /*7700*/ uint16(x86_xReadSlashR),
- /*7701*/ uint16(x86_xArgMm),
- /*7702*/ uint16(x86_xArgMmM64),
- /*7703*/ uint16(x86_xMatch),
- /*7704*/ uint16(x86_xSetOp), uint16(x86_PADDSB),
- /*7706*/ uint16(x86_xReadSlashR),
- /*7707*/ uint16(x86_xArgXmm1),
- /*7708*/ uint16(x86_xArgXmm2M128),
- /*7709*/ uint16(x86_xMatch),
- /*7710*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7722,
- 0x0, 7716,
- /*7716*/ uint16(x86_xSetOp), uint16(x86_PADDSW),
- /*7718*/ uint16(x86_xReadSlashR),
- /*7719*/ uint16(x86_xArgMm),
- /*7720*/ uint16(x86_xArgMmM64),
- /*7721*/ uint16(x86_xMatch),
- /*7722*/ uint16(x86_xSetOp), uint16(x86_PADDSW),
- /*7724*/ uint16(x86_xReadSlashR),
- /*7725*/ uint16(x86_xArgXmm1),
- /*7726*/ uint16(x86_xArgXmm2M128),
- /*7727*/ uint16(x86_xMatch),
- /*7728*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7740,
- 0x0, 7734,
- /*7734*/ uint16(x86_xSetOp), uint16(x86_PMAXSW),
- /*7736*/ uint16(x86_xReadSlashR),
- /*7737*/ uint16(x86_xArgMm1),
- /*7738*/ uint16(x86_xArgMm2M64),
- /*7739*/ uint16(x86_xMatch),
- /*7740*/ uint16(x86_xSetOp), uint16(x86_PMAXSW),
- /*7742*/ uint16(x86_xReadSlashR),
- /*7743*/ uint16(x86_xArgXmm1),
- /*7744*/ uint16(x86_xArgXmm2M128),
- /*7745*/ uint16(x86_xMatch),
- /*7746*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7758,
- 0x0, 7752,
- /*7752*/ uint16(x86_xSetOp), uint16(x86_PXOR),
- /*7754*/ uint16(x86_xReadSlashR),
- /*7755*/ uint16(x86_xArgMm),
- /*7756*/ uint16(x86_xArgMmM64),
- /*7757*/ uint16(x86_xMatch),
- /*7758*/ uint16(x86_xSetOp), uint16(x86_PXOR),
- /*7760*/ uint16(x86_xReadSlashR),
- /*7761*/ uint16(x86_xArgXmm1),
- /*7762*/ uint16(x86_xArgXmm2M128),
- /*7763*/ uint16(x86_xMatch),
- /*7764*/ uint16(x86_xCondPrefix), 1,
- 0xF2, 7768,
- /*7768*/ uint16(x86_xSetOp), uint16(x86_LDDQU),
- /*7770*/ uint16(x86_xReadSlashR),
- /*7771*/ uint16(x86_xArgXmm1),
- /*7772*/ uint16(x86_xArgM128),
- /*7773*/ uint16(x86_xMatch),
- /*7774*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7786,
- 0x0, 7780,
- /*7780*/ uint16(x86_xSetOp), uint16(x86_PSLLW),
- /*7782*/ uint16(x86_xReadSlashR),
- /*7783*/ uint16(x86_xArgMm),
- /*7784*/ uint16(x86_xArgMmM64),
- /*7785*/ uint16(x86_xMatch),
- /*7786*/ uint16(x86_xSetOp), uint16(x86_PSLLW),
- /*7788*/ uint16(x86_xReadSlashR),
- /*7789*/ uint16(x86_xArgXmm1),
- /*7790*/ uint16(x86_xArgXmm2M128),
- /*7791*/ uint16(x86_xMatch),
- /*7792*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7804,
- 0x0, 7798,
- /*7798*/ uint16(x86_xSetOp), uint16(x86_PSLLD),
- /*7800*/ uint16(x86_xReadSlashR),
- /*7801*/ uint16(x86_xArgMm),
- /*7802*/ uint16(x86_xArgMmM64),
- /*7803*/ uint16(x86_xMatch),
- /*7804*/ uint16(x86_xSetOp), uint16(x86_PSLLD),
- /*7806*/ uint16(x86_xReadSlashR),
- /*7807*/ uint16(x86_xArgXmm1),
- /*7808*/ uint16(x86_xArgXmm2M128),
- /*7809*/ uint16(x86_xMatch),
- /*7810*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7822,
- 0x0, 7816,
- /*7816*/ uint16(x86_xSetOp), uint16(x86_PSLLQ),
- /*7818*/ uint16(x86_xReadSlashR),
- /*7819*/ uint16(x86_xArgMm),
- /*7820*/ uint16(x86_xArgMmM64),
- /*7821*/ uint16(x86_xMatch),
- /*7822*/ uint16(x86_xSetOp), uint16(x86_PSLLQ),
- /*7824*/ uint16(x86_xReadSlashR),
- /*7825*/ uint16(x86_xArgXmm1),
- /*7826*/ uint16(x86_xArgXmm2M128),
- /*7827*/ uint16(x86_xMatch),
- /*7828*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7840,
- 0x0, 7834,
- /*7834*/ uint16(x86_xSetOp), uint16(x86_PMULUDQ),
- /*7836*/ uint16(x86_xReadSlashR),
- /*7837*/ uint16(x86_xArgMm1),
- /*7838*/ uint16(x86_xArgMm2M64),
- /*7839*/ uint16(x86_xMatch),
- /*7840*/ uint16(x86_xSetOp), uint16(x86_PMULUDQ),
- /*7842*/ uint16(x86_xReadSlashR),
- /*7843*/ uint16(x86_xArgXmm1),
- /*7844*/ uint16(x86_xArgXmm2M128),
- /*7845*/ uint16(x86_xMatch),
- /*7846*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7858,
- 0x0, 7852,
- /*7852*/ uint16(x86_xSetOp), uint16(x86_PMADDWD),
- /*7854*/ uint16(x86_xReadSlashR),
- /*7855*/ uint16(x86_xArgMm),
- /*7856*/ uint16(x86_xArgMmM64),
- /*7857*/ uint16(x86_xMatch),
- /*7858*/ uint16(x86_xSetOp), uint16(x86_PMADDWD),
- /*7860*/ uint16(x86_xReadSlashR),
- /*7861*/ uint16(x86_xArgXmm1),
- /*7862*/ uint16(x86_xArgXmm2M128),
- /*7863*/ uint16(x86_xMatch),
- /*7864*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7876,
- 0x0, 7870,
- /*7870*/ uint16(x86_xSetOp), uint16(x86_PSADBW),
- /*7872*/ uint16(x86_xReadSlashR),
- /*7873*/ uint16(x86_xArgMm1),
- /*7874*/ uint16(x86_xArgMm2M64),
- /*7875*/ uint16(x86_xMatch),
- /*7876*/ uint16(x86_xSetOp), uint16(x86_PSADBW),
- /*7878*/ uint16(x86_xReadSlashR),
- /*7879*/ uint16(x86_xArgXmm1),
- /*7880*/ uint16(x86_xArgXmm2M128),
- /*7881*/ uint16(x86_xMatch),
- /*7882*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7894,
- 0x0, 7888,
- /*7888*/ uint16(x86_xSetOp), uint16(x86_MASKMOVQ),
- /*7890*/ uint16(x86_xReadSlashR),
- /*7891*/ uint16(x86_xArgMm1),
- /*7892*/ uint16(x86_xArgMm2),
- /*7893*/ uint16(x86_xMatch),
- /*7894*/ uint16(x86_xSetOp), uint16(x86_MASKMOVDQU),
- /*7896*/ uint16(x86_xReadSlashR),
- /*7897*/ uint16(x86_xArgXmm1),
- /*7898*/ uint16(x86_xArgXmm2),
- /*7899*/ uint16(x86_xMatch),
- /*7900*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7912,
- 0x0, 7906,
- /*7906*/ uint16(x86_xSetOp), uint16(x86_PSUBB),
- /*7908*/ uint16(x86_xReadSlashR),
- /*7909*/ uint16(x86_xArgMm),
- /*7910*/ uint16(x86_xArgMmM64),
- /*7911*/ uint16(x86_xMatch),
- /*7912*/ uint16(x86_xSetOp), uint16(x86_PSUBB),
- /*7914*/ uint16(x86_xReadSlashR),
- /*7915*/ uint16(x86_xArgXmm1),
- /*7916*/ uint16(x86_xArgXmm2M128),
- /*7917*/ uint16(x86_xMatch),
- /*7918*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7930,
- 0x0, 7924,
- /*7924*/ uint16(x86_xSetOp), uint16(x86_PSUBW),
- /*7926*/ uint16(x86_xReadSlashR),
- /*7927*/ uint16(x86_xArgMm),
- /*7928*/ uint16(x86_xArgMmM64),
- /*7929*/ uint16(x86_xMatch),
- /*7930*/ uint16(x86_xSetOp), uint16(x86_PSUBW),
- /*7932*/ uint16(x86_xReadSlashR),
- /*7933*/ uint16(x86_xArgXmm1),
- /*7934*/ uint16(x86_xArgXmm2M128),
- /*7935*/ uint16(x86_xMatch),
- /*7936*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7948,
- 0x0, 7942,
- /*7942*/ uint16(x86_xSetOp), uint16(x86_PSUBD),
- /*7944*/ uint16(x86_xReadSlashR),
- /*7945*/ uint16(x86_xArgMm),
- /*7946*/ uint16(x86_xArgMmM64),
- /*7947*/ uint16(x86_xMatch),
- /*7948*/ uint16(x86_xSetOp), uint16(x86_PSUBD),
- /*7950*/ uint16(x86_xReadSlashR),
- /*7951*/ uint16(x86_xArgXmm1),
- /*7952*/ uint16(x86_xArgXmm2M128),
- /*7953*/ uint16(x86_xMatch),
- /*7954*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7966,
- 0x0, 7960,
- /*7960*/ uint16(x86_xSetOp), uint16(x86_PSUBQ),
- /*7962*/ uint16(x86_xReadSlashR),
- /*7963*/ uint16(x86_xArgMm1),
- /*7964*/ uint16(x86_xArgMm2M64),
- /*7965*/ uint16(x86_xMatch),
- /*7966*/ uint16(x86_xSetOp), uint16(x86_PSUBQ),
- /*7968*/ uint16(x86_xReadSlashR),
- /*7969*/ uint16(x86_xArgXmm1),
- /*7970*/ uint16(x86_xArgXmm2M128),
- /*7971*/ uint16(x86_xMatch),
- /*7972*/ uint16(x86_xCondPrefix), 2,
- 0x66, 7984,
- 0x0, 7978,
- /*7978*/ uint16(x86_xSetOp), uint16(x86_PADDB),
- /*7980*/ uint16(x86_xReadSlashR),
- /*7981*/ uint16(x86_xArgMm),
- /*7982*/ uint16(x86_xArgMmM64),
- /*7983*/ uint16(x86_xMatch),
- /*7984*/ uint16(x86_xSetOp), uint16(x86_PADDB),
- /*7986*/ uint16(x86_xReadSlashR),
- /*7987*/ uint16(x86_xArgXmm1),
- /*7988*/ uint16(x86_xArgXmm2M128),
- /*7989*/ uint16(x86_xMatch),
- /*7990*/ uint16(x86_xCondPrefix), 2,
- 0x66, 8002,
- 0x0, 7996,
- /*7996*/ uint16(x86_xSetOp), uint16(x86_PADDW),
- /*7998*/ uint16(x86_xReadSlashR),
- /*7999*/ uint16(x86_xArgMm),
- /*8000*/ uint16(x86_xArgMmM64),
- /*8001*/ uint16(x86_xMatch),
- /*8002*/ uint16(x86_xSetOp), uint16(x86_PADDW),
- /*8004*/ uint16(x86_xReadSlashR),
- /*8005*/ uint16(x86_xArgXmm1),
- /*8006*/ uint16(x86_xArgXmm2M128),
- /*8007*/ uint16(x86_xMatch),
- /*8008*/ uint16(x86_xCondPrefix), 2,
- 0x66, 8020,
- 0x0, 8014,
- /*8014*/ uint16(x86_xSetOp), uint16(x86_PADDD),
- /*8016*/ uint16(x86_xReadSlashR),
- /*8017*/ uint16(x86_xArgMm),
- /*8018*/ uint16(x86_xArgMmM64),
- /*8019*/ uint16(x86_xMatch),
- /*8020*/ uint16(x86_xSetOp), uint16(x86_PADDD),
- /*8022*/ uint16(x86_xReadSlashR),
- /*8023*/ uint16(x86_xArgXmm1),
- /*8024*/ uint16(x86_xArgXmm2M128),
- /*8025*/ uint16(x86_xMatch),
- /*8026*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8028*/ uint16(x86_xReadSlashR),
- /*8029*/ uint16(x86_xArgRM8),
- /*8030*/ uint16(x86_xArgR8),
- /*8031*/ uint16(x86_xMatch),
- /*8032*/ uint16(x86_xCondIs64), 8035, 8051,
- /*8035*/ uint16(x86_xCondDataSize), 8039, 8045, 0,
- /*8039*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8041*/ uint16(x86_xReadSlashR),
- /*8042*/ uint16(x86_xArgRM16),
- /*8043*/ uint16(x86_xArgR16),
- /*8044*/ uint16(x86_xMatch),
- /*8045*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8047*/ uint16(x86_xReadSlashR),
- /*8048*/ uint16(x86_xArgRM32),
- /*8049*/ uint16(x86_xArgR32),
- /*8050*/ uint16(x86_xMatch),
- /*8051*/ uint16(x86_xCondDataSize), 8039, 8045, 8055,
- /*8055*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8057*/ uint16(x86_xReadSlashR),
- /*8058*/ uint16(x86_xArgRM64),
- /*8059*/ uint16(x86_xArgR64),
- /*8060*/ uint16(x86_xMatch),
- /*8061*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8063*/ uint16(x86_xReadSlashR),
- /*8064*/ uint16(x86_xArgR8),
- /*8065*/ uint16(x86_xArgRM8),
- /*8066*/ uint16(x86_xMatch),
- /*8067*/ uint16(x86_xCondIs64), 8070, 8086,
- /*8070*/ uint16(x86_xCondDataSize), 8074, 8080, 0,
- /*8074*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8076*/ uint16(x86_xReadSlashR),
- /*8077*/ uint16(x86_xArgR16),
- /*8078*/ uint16(x86_xArgRM16),
- /*8079*/ uint16(x86_xMatch),
- /*8080*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8082*/ uint16(x86_xReadSlashR),
- /*8083*/ uint16(x86_xArgR32),
- /*8084*/ uint16(x86_xArgRM32),
- /*8085*/ uint16(x86_xMatch),
- /*8086*/ uint16(x86_xCondDataSize), 8074, 8080, 8090,
- /*8090*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8092*/ uint16(x86_xReadSlashR),
- /*8093*/ uint16(x86_xArgR64),
- /*8094*/ uint16(x86_xArgRM64),
- /*8095*/ uint16(x86_xMatch),
- /*8096*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8098*/ uint16(x86_xReadIb),
- /*8099*/ uint16(x86_xArgAL),
- /*8100*/ uint16(x86_xArgImm8u),
- /*8101*/ uint16(x86_xMatch),
- /*8102*/ uint16(x86_xCondIs64), 8105, 8121,
- /*8105*/ uint16(x86_xCondDataSize), 8109, 8115, 0,
- /*8109*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8111*/ uint16(x86_xReadIw),
- /*8112*/ uint16(x86_xArgAX),
- /*8113*/ uint16(x86_xArgImm16),
- /*8114*/ uint16(x86_xMatch),
- /*8115*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8117*/ uint16(x86_xReadId),
- /*8118*/ uint16(x86_xArgEAX),
- /*8119*/ uint16(x86_xArgImm32),
- /*8120*/ uint16(x86_xMatch),
- /*8121*/ uint16(x86_xCondDataSize), 8109, 8115, 8125,
- /*8125*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*8127*/ uint16(x86_xReadId),
- /*8128*/ uint16(x86_xArgRAX),
- /*8129*/ uint16(x86_xArgImm32),
- /*8130*/ uint16(x86_xMatch),
- /*8131*/ uint16(x86_xCondIs64), 8134, 0,
- /*8134*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*8136*/ uint16(x86_xArgSS),
- /*8137*/ uint16(x86_xMatch),
- /*8138*/ uint16(x86_xCondIs64), 8141, 0,
- /*8141*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*8143*/ uint16(x86_xArgSS),
- /*8144*/ uint16(x86_xMatch),
- /*8145*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8147*/ uint16(x86_xReadSlashR),
- /*8148*/ uint16(x86_xArgRM8),
- /*8149*/ uint16(x86_xArgR8),
- /*8150*/ uint16(x86_xMatch),
- /*8151*/ uint16(x86_xCondIs64), 8154, 8170,
- /*8154*/ uint16(x86_xCondDataSize), 8158, 8164, 0,
- /*8158*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8160*/ uint16(x86_xReadSlashR),
- /*8161*/ uint16(x86_xArgRM16),
- /*8162*/ uint16(x86_xArgR16),
- /*8163*/ uint16(x86_xMatch),
- /*8164*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8166*/ uint16(x86_xReadSlashR),
- /*8167*/ uint16(x86_xArgRM32),
- /*8168*/ uint16(x86_xArgR32),
- /*8169*/ uint16(x86_xMatch),
- /*8170*/ uint16(x86_xCondDataSize), 8158, 8164, 8174,
- /*8174*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8176*/ uint16(x86_xReadSlashR),
- /*8177*/ uint16(x86_xArgRM64),
- /*8178*/ uint16(x86_xArgR64),
- /*8179*/ uint16(x86_xMatch),
- /*8180*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8182*/ uint16(x86_xReadSlashR),
- /*8183*/ uint16(x86_xArgR8),
- /*8184*/ uint16(x86_xArgRM8),
- /*8185*/ uint16(x86_xMatch),
- /*8186*/ uint16(x86_xCondIs64), 8189, 8205,
- /*8189*/ uint16(x86_xCondDataSize), 8193, 8199, 0,
- /*8193*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8195*/ uint16(x86_xReadSlashR),
- /*8196*/ uint16(x86_xArgR16),
- /*8197*/ uint16(x86_xArgRM16),
- /*8198*/ uint16(x86_xMatch),
- /*8199*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8201*/ uint16(x86_xReadSlashR),
- /*8202*/ uint16(x86_xArgR32),
- /*8203*/ uint16(x86_xArgRM32),
- /*8204*/ uint16(x86_xMatch),
- /*8205*/ uint16(x86_xCondDataSize), 8193, 8199, 8209,
- /*8209*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8211*/ uint16(x86_xReadSlashR),
- /*8212*/ uint16(x86_xArgR64),
- /*8213*/ uint16(x86_xArgRM64),
- /*8214*/ uint16(x86_xMatch),
- /*8215*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8217*/ uint16(x86_xReadIb),
- /*8218*/ uint16(x86_xArgAL),
- /*8219*/ uint16(x86_xArgImm8u),
- /*8220*/ uint16(x86_xMatch),
- /*8221*/ uint16(x86_xCondIs64), 8224, 8240,
- /*8224*/ uint16(x86_xCondDataSize), 8228, 8234, 0,
- /*8228*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8230*/ uint16(x86_xReadIw),
- /*8231*/ uint16(x86_xArgAX),
- /*8232*/ uint16(x86_xArgImm16),
- /*8233*/ uint16(x86_xMatch),
- /*8234*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8236*/ uint16(x86_xReadId),
- /*8237*/ uint16(x86_xArgEAX),
- /*8238*/ uint16(x86_xArgImm32),
- /*8239*/ uint16(x86_xMatch),
- /*8240*/ uint16(x86_xCondDataSize), 8228, 8234, 8244,
- /*8244*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*8246*/ uint16(x86_xReadId),
- /*8247*/ uint16(x86_xArgRAX),
- /*8248*/ uint16(x86_xArgImm32),
- /*8249*/ uint16(x86_xMatch),
- /*8250*/ uint16(x86_xCondIs64), 8253, 0,
- /*8253*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*8255*/ uint16(x86_xArgDS),
- /*8256*/ uint16(x86_xMatch),
- /*8257*/ uint16(x86_xCondIs64), 8260, 0,
- /*8260*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*8262*/ uint16(x86_xArgDS),
- /*8263*/ uint16(x86_xMatch),
- /*8264*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8266*/ uint16(x86_xReadSlashR),
- /*8267*/ uint16(x86_xArgRM8),
- /*8268*/ uint16(x86_xArgR8),
- /*8269*/ uint16(x86_xMatch),
- /*8270*/ uint16(x86_xCondIs64), 8273, 8289,
- /*8273*/ uint16(x86_xCondDataSize), 8277, 8283, 0,
- /*8277*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8279*/ uint16(x86_xReadSlashR),
- /*8280*/ uint16(x86_xArgRM16),
- /*8281*/ uint16(x86_xArgR16),
- /*8282*/ uint16(x86_xMatch),
- /*8283*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8285*/ uint16(x86_xReadSlashR),
- /*8286*/ uint16(x86_xArgRM32),
- /*8287*/ uint16(x86_xArgR32),
- /*8288*/ uint16(x86_xMatch),
- /*8289*/ uint16(x86_xCondDataSize), 8277, 8283, 8293,
- /*8293*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8295*/ uint16(x86_xReadSlashR),
- /*8296*/ uint16(x86_xArgRM64),
- /*8297*/ uint16(x86_xArgR64),
- /*8298*/ uint16(x86_xMatch),
- /*8299*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8301*/ uint16(x86_xReadSlashR),
- /*8302*/ uint16(x86_xArgR8),
- /*8303*/ uint16(x86_xArgRM8),
- /*8304*/ uint16(x86_xMatch),
- /*8305*/ uint16(x86_xCondIs64), 8308, 8324,
- /*8308*/ uint16(x86_xCondDataSize), 8312, 8318, 0,
- /*8312*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8314*/ uint16(x86_xReadSlashR),
- /*8315*/ uint16(x86_xArgR16),
- /*8316*/ uint16(x86_xArgRM16),
- /*8317*/ uint16(x86_xMatch),
- /*8318*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8320*/ uint16(x86_xReadSlashR),
- /*8321*/ uint16(x86_xArgR32),
- /*8322*/ uint16(x86_xArgRM32),
- /*8323*/ uint16(x86_xMatch),
- /*8324*/ uint16(x86_xCondDataSize), 8312, 8318, 8328,
- /*8328*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8330*/ uint16(x86_xReadSlashR),
- /*8331*/ uint16(x86_xArgR64),
- /*8332*/ uint16(x86_xArgRM64),
- /*8333*/ uint16(x86_xMatch),
- /*8334*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8336*/ uint16(x86_xReadIb),
- /*8337*/ uint16(x86_xArgAL),
- /*8338*/ uint16(x86_xArgImm8u),
- /*8339*/ uint16(x86_xMatch),
- /*8340*/ uint16(x86_xCondIs64), 8343, 8359,
- /*8343*/ uint16(x86_xCondDataSize), 8347, 8353, 0,
- /*8347*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8349*/ uint16(x86_xReadIw),
- /*8350*/ uint16(x86_xArgAX),
- /*8351*/ uint16(x86_xArgImm16),
- /*8352*/ uint16(x86_xMatch),
- /*8353*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8355*/ uint16(x86_xReadId),
- /*8356*/ uint16(x86_xArgEAX),
- /*8357*/ uint16(x86_xArgImm32),
- /*8358*/ uint16(x86_xMatch),
- /*8359*/ uint16(x86_xCondDataSize), 8347, 8353, 8363,
- /*8363*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*8365*/ uint16(x86_xReadId),
- /*8366*/ uint16(x86_xArgRAX),
- /*8367*/ uint16(x86_xArgImm32),
- /*8368*/ uint16(x86_xMatch),
- /*8369*/ uint16(x86_xCondIs64), 8372, 0,
- /*8372*/ uint16(x86_xSetOp), uint16(x86_DAA),
- /*8374*/ uint16(x86_xMatch),
- /*8375*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8377*/ uint16(x86_xReadSlashR),
- /*8378*/ uint16(x86_xArgRM8),
- /*8379*/ uint16(x86_xArgR8),
- /*8380*/ uint16(x86_xMatch),
- /*8381*/ uint16(x86_xCondIs64), 8384, 8400,
- /*8384*/ uint16(x86_xCondDataSize), 8388, 8394, 0,
- /*8388*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8390*/ uint16(x86_xReadSlashR),
- /*8391*/ uint16(x86_xArgRM16),
- /*8392*/ uint16(x86_xArgR16),
- /*8393*/ uint16(x86_xMatch),
- /*8394*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8396*/ uint16(x86_xReadSlashR),
- /*8397*/ uint16(x86_xArgRM32),
- /*8398*/ uint16(x86_xArgR32),
- /*8399*/ uint16(x86_xMatch),
- /*8400*/ uint16(x86_xCondDataSize), 8388, 8394, 8404,
- /*8404*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8406*/ uint16(x86_xReadSlashR),
- /*8407*/ uint16(x86_xArgRM64),
- /*8408*/ uint16(x86_xArgR64),
- /*8409*/ uint16(x86_xMatch),
- /*8410*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8412*/ uint16(x86_xReadSlashR),
- /*8413*/ uint16(x86_xArgR8),
- /*8414*/ uint16(x86_xArgRM8),
- /*8415*/ uint16(x86_xMatch),
- /*8416*/ uint16(x86_xCondIs64), 8419, 8435,
- /*8419*/ uint16(x86_xCondDataSize), 8423, 8429, 0,
- /*8423*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8425*/ uint16(x86_xReadSlashR),
- /*8426*/ uint16(x86_xArgR16),
- /*8427*/ uint16(x86_xArgRM16),
- /*8428*/ uint16(x86_xMatch),
- /*8429*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8431*/ uint16(x86_xReadSlashR),
- /*8432*/ uint16(x86_xArgR32),
- /*8433*/ uint16(x86_xArgRM32),
- /*8434*/ uint16(x86_xMatch),
- /*8435*/ uint16(x86_xCondDataSize), 8423, 8429, 8439,
- /*8439*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8441*/ uint16(x86_xReadSlashR),
- /*8442*/ uint16(x86_xArgR64),
- /*8443*/ uint16(x86_xArgRM64),
- /*8444*/ uint16(x86_xMatch),
- /*8445*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8447*/ uint16(x86_xReadIb),
- /*8448*/ uint16(x86_xArgAL),
- /*8449*/ uint16(x86_xArgImm8u),
- /*8450*/ uint16(x86_xMatch),
- /*8451*/ uint16(x86_xCondIs64), 8454, 8470,
- /*8454*/ uint16(x86_xCondDataSize), 8458, 8464, 0,
- /*8458*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8460*/ uint16(x86_xReadIw),
- /*8461*/ uint16(x86_xArgAX),
- /*8462*/ uint16(x86_xArgImm16),
- /*8463*/ uint16(x86_xMatch),
- /*8464*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8466*/ uint16(x86_xReadId),
- /*8467*/ uint16(x86_xArgEAX),
- /*8468*/ uint16(x86_xArgImm32),
- /*8469*/ uint16(x86_xMatch),
- /*8470*/ uint16(x86_xCondDataSize), 8458, 8464, 8474,
- /*8474*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*8476*/ uint16(x86_xReadId),
- /*8477*/ uint16(x86_xArgRAX),
- /*8478*/ uint16(x86_xArgImm32),
- /*8479*/ uint16(x86_xMatch),
- /*8480*/ uint16(x86_xCondIs64), 8483, 0,
- /*8483*/ uint16(x86_xSetOp), uint16(x86_DAS),
- /*8485*/ uint16(x86_xMatch),
- /*8486*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8488*/ uint16(x86_xReadSlashR),
- /*8489*/ uint16(x86_xArgRM8),
- /*8490*/ uint16(x86_xArgR8),
- /*8491*/ uint16(x86_xMatch),
- /*8492*/ uint16(x86_xCondIs64), 8495, 8511,
- /*8495*/ uint16(x86_xCondDataSize), 8499, 8505, 0,
- /*8499*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8501*/ uint16(x86_xReadSlashR),
- /*8502*/ uint16(x86_xArgRM16),
- /*8503*/ uint16(x86_xArgR16),
- /*8504*/ uint16(x86_xMatch),
- /*8505*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8507*/ uint16(x86_xReadSlashR),
- /*8508*/ uint16(x86_xArgRM32),
- /*8509*/ uint16(x86_xArgR32),
- /*8510*/ uint16(x86_xMatch),
- /*8511*/ uint16(x86_xCondDataSize), 8499, 8505, 8515,
- /*8515*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8517*/ uint16(x86_xReadSlashR),
- /*8518*/ uint16(x86_xArgRM64),
- /*8519*/ uint16(x86_xArgR64),
- /*8520*/ uint16(x86_xMatch),
- /*8521*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8523*/ uint16(x86_xReadSlashR),
- /*8524*/ uint16(x86_xArgR8),
- /*8525*/ uint16(x86_xArgRM8),
- /*8526*/ uint16(x86_xMatch),
- /*8527*/ uint16(x86_xCondIs64), 8530, 8546,
- /*8530*/ uint16(x86_xCondDataSize), 8534, 8540, 0,
- /*8534*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8536*/ uint16(x86_xReadSlashR),
- /*8537*/ uint16(x86_xArgR16),
- /*8538*/ uint16(x86_xArgRM16),
- /*8539*/ uint16(x86_xMatch),
- /*8540*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8542*/ uint16(x86_xReadSlashR),
- /*8543*/ uint16(x86_xArgR32),
- /*8544*/ uint16(x86_xArgRM32),
- /*8545*/ uint16(x86_xMatch),
- /*8546*/ uint16(x86_xCondDataSize), 8534, 8540, 8550,
- /*8550*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8552*/ uint16(x86_xReadSlashR),
- /*8553*/ uint16(x86_xArgR64),
- /*8554*/ uint16(x86_xArgRM64),
- /*8555*/ uint16(x86_xMatch),
- /*8556*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8558*/ uint16(x86_xReadIb),
- /*8559*/ uint16(x86_xArgAL),
- /*8560*/ uint16(x86_xArgImm8u),
- /*8561*/ uint16(x86_xMatch),
- /*8562*/ uint16(x86_xCondIs64), 8565, 8581,
- /*8565*/ uint16(x86_xCondDataSize), 8569, 8575, 0,
- /*8569*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8571*/ uint16(x86_xReadIw),
- /*8572*/ uint16(x86_xArgAX),
- /*8573*/ uint16(x86_xArgImm16),
- /*8574*/ uint16(x86_xMatch),
- /*8575*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8577*/ uint16(x86_xReadId),
- /*8578*/ uint16(x86_xArgEAX),
- /*8579*/ uint16(x86_xArgImm32),
- /*8580*/ uint16(x86_xMatch),
- /*8581*/ uint16(x86_xCondDataSize), 8569, 8575, 8585,
- /*8585*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*8587*/ uint16(x86_xReadId),
- /*8588*/ uint16(x86_xArgRAX),
- /*8589*/ uint16(x86_xArgImm32),
- /*8590*/ uint16(x86_xMatch),
- /*8591*/ uint16(x86_xCondIs64), 8594, 0,
- /*8594*/ uint16(x86_xSetOp), uint16(x86_AAA),
- /*8596*/ uint16(x86_xMatch),
- /*8597*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8599*/ uint16(x86_xReadSlashR),
- /*8600*/ uint16(x86_xArgRM8),
- /*8601*/ uint16(x86_xArgR8),
- /*8602*/ uint16(x86_xMatch),
- /*8603*/ uint16(x86_xCondIs64), 8606, 8622,
- /*8606*/ uint16(x86_xCondDataSize), 8610, 8616, 0,
- /*8610*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8612*/ uint16(x86_xReadSlashR),
- /*8613*/ uint16(x86_xArgRM16),
- /*8614*/ uint16(x86_xArgR16),
- /*8615*/ uint16(x86_xMatch),
- /*8616*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8618*/ uint16(x86_xReadSlashR),
- /*8619*/ uint16(x86_xArgRM32),
- /*8620*/ uint16(x86_xArgR32),
- /*8621*/ uint16(x86_xMatch),
- /*8622*/ uint16(x86_xCondDataSize), 8610, 8616, 8626,
- /*8626*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8628*/ uint16(x86_xReadSlashR),
- /*8629*/ uint16(x86_xArgRM64),
- /*8630*/ uint16(x86_xArgR64),
- /*8631*/ uint16(x86_xMatch),
- /*8632*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8634*/ uint16(x86_xReadSlashR),
- /*8635*/ uint16(x86_xArgR8),
- /*8636*/ uint16(x86_xArgRM8),
- /*8637*/ uint16(x86_xMatch),
- /*8638*/ uint16(x86_xCondIs64), 8641, 8657,
- /*8641*/ uint16(x86_xCondDataSize), 8645, 8651, 0,
- /*8645*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8647*/ uint16(x86_xReadSlashR),
- /*8648*/ uint16(x86_xArgR16),
- /*8649*/ uint16(x86_xArgRM16),
- /*8650*/ uint16(x86_xMatch),
- /*8651*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8653*/ uint16(x86_xReadSlashR),
- /*8654*/ uint16(x86_xArgR32),
- /*8655*/ uint16(x86_xArgRM32),
- /*8656*/ uint16(x86_xMatch),
- /*8657*/ uint16(x86_xCondDataSize), 8645, 8651, 8661,
- /*8661*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8663*/ uint16(x86_xReadSlashR),
- /*8664*/ uint16(x86_xArgR64),
- /*8665*/ uint16(x86_xArgRM64),
- /*8666*/ uint16(x86_xMatch),
- /*8667*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8669*/ uint16(x86_xReadIb),
- /*8670*/ uint16(x86_xArgAL),
- /*8671*/ uint16(x86_xArgImm8u),
- /*8672*/ uint16(x86_xMatch),
- /*8673*/ uint16(x86_xCondIs64), 8676, 8692,
- /*8676*/ uint16(x86_xCondDataSize), 8680, 8686, 0,
- /*8680*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8682*/ uint16(x86_xReadIw),
- /*8683*/ uint16(x86_xArgAX),
- /*8684*/ uint16(x86_xArgImm16),
- /*8685*/ uint16(x86_xMatch),
- /*8686*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8688*/ uint16(x86_xReadId),
- /*8689*/ uint16(x86_xArgEAX),
- /*8690*/ uint16(x86_xArgImm32),
- /*8691*/ uint16(x86_xMatch),
- /*8692*/ uint16(x86_xCondDataSize), 8680, 8686, 8696,
- /*8696*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*8698*/ uint16(x86_xReadId),
- /*8699*/ uint16(x86_xArgRAX),
- /*8700*/ uint16(x86_xArgImm32),
- /*8701*/ uint16(x86_xMatch),
- /*8702*/ uint16(x86_xCondIs64), 8705, 0,
- /*8705*/ uint16(x86_xSetOp), uint16(x86_AAS),
- /*8707*/ uint16(x86_xMatch),
- /*8708*/ uint16(x86_xCondIs64), 8711, 0,
- /*8711*/ uint16(x86_xCondDataSize), 8715, 8719, 0,
- /*8715*/ uint16(x86_xSetOp), uint16(x86_INC),
- /*8717*/ uint16(x86_xArgR16op),
- /*8718*/ uint16(x86_xMatch),
- /*8719*/ uint16(x86_xSetOp), uint16(x86_INC),
- /*8721*/ uint16(x86_xArgR32op),
- /*8722*/ uint16(x86_xMatch),
- /*8723*/ uint16(x86_xCondIs64), 8726, 0,
- /*8726*/ uint16(x86_xCondDataSize), 8730, 8734, 0,
- /*8730*/ uint16(x86_xSetOp), uint16(x86_DEC),
- /*8732*/ uint16(x86_xArgR16op),
- /*8733*/ uint16(x86_xMatch),
- /*8734*/ uint16(x86_xSetOp), uint16(x86_DEC),
- /*8736*/ uint16(x86_xArgR32op),
- /*8737*/ uint16(x86_xMatch),
- /*8738*/ uint16(x86_xCondIs64), 8741, 8753,
- /*8741*/ uint16(x86_xCondDataSize), 8745, 8749, 0,
- /*8745*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*8747*/ uint16(x86_xArgR16op),
- /*8748*/ uint16(x86_xMatch),
- /*8749*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*8751*/ uint16(x86_xArgR32op),
- /*8752*/ uint16(x86_xMatch),
- /*8753*/ uint16(x86_xCondDataSize), 8745, 8757, 8761,
- /*8757*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*8759*/ uint16(x86_xArgR64op),
- /*8760*/ uint16(x86_xMatch),
- /*8761*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*8763*/ uint16(x86_xArgR64op),
- /*8764*/ uint16(x86_xMatch),
- /*8765*/ uint16(x86_xCondIs64), 8768, 8780,
- /*8768*/ uint16(x86_xCondDataSize), 8772, 8776, 0,
- /*8772*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*8774*/ uint16(x86_xArgR16op),
- /*8775*/ uint16(x86_xMatch),
- /*8776*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*8778*/ uint16(x86_xArgR32op),
- /*8779*/ uint16(x86_xMatch),
- /*8780*/ uint16(x86_xCondDataSize), 8772, 8784, 8788,
- /*8784*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*8786*/ uint16(x86_xArgR64op),
- /*8787*/ uint16(x86_xMatch),
- /*8788*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*8790*/ uint16(x86_xArgR64op),
- /*8791*/ uint16(x86_xMatch),
- /*8792*/ uint16(x86_xCondIs64), 8795, 0,
- /*8795*/ uint16(x86_xCondDataSize), 8799, 8802, 0,
- /*8799*/ uint16(x86_xSetOp), uint16(x86_PUSHA),
- /*8801*/ uint16(x86_xMatch),
- /*8802*/ uint16(x86_xSetOp), uint16(x86_PUSHAD),
- /*8804*/ uint16(x86_xMatch),
- /*8805*/ uint16(x86_xCondIs64), 8808, 0,
- /*8808*/ uint16(x86_xCondDataSize), 8812, 8815, 0,
- /*8812*/ uint16(x86_xSetOp), uint16(x86_POPA),
- /*8814*/ uint16(x86_xMatch),
- /*8815*/ uint16(x86_xSetOp), uint16(x86_POPAD),
- /*8817*/ uint16(x86_xMatch),
- /*8818*/ uint16(x86_xCondIs64), 8821, 0,
- /*8821*/ uint16(x86_xCondDataSize), 8825, 8831, 0,
- /*8825*/ uint16(x86_xSetOp), uint16(x86_BOUND),
- /*8827*/ uint16(x86_xReadSlashR),
- /*8828*/ uint16(x86_xArgR16),
- /*8829*/ uint16(x86_xArgM16and16),
- /*8830*/ uint16(x86_xMatch),
- /*8831*/ uint16(x86_xSetOp), uint16(x86_BOUND),
- /*8833*/ uint16(x86_xReadSlashR),
- /*8834*/ uint16(x86_xArgR32),
- /*8835*/ uint16(x86_xArgM32and32),
- /*8836*/ uint16(x86_xMatch),
- /*8837*/ uint16(x86_xCondIs64), 8840, 8846,
- /*8840*/ uint16(x86_xSetOp), uint16(x86_ARPL),
- /*8842*/ uint16(x86_xReadSlashR),
- /*8843*/ uint16(x86_xArgRM16),
- /*8844*/ uint16(x86_xArgR16),
- /*8845*/ uint16(x86_xMatch),
- /*8846*/ uint16(x86_xCondDataSize), 8850, 8856, 8862,
- /*8850*/ uint16(x86_xSetOp), uint16(x86_MOVSXD),
- /*8852*/ uint16(x86_xReadSlashR),
- /*8853*/ uint16(x86_xArgR16),
- /*8854*/ uint16(x86_xArgRM32),
- /*8855*/ uint16(x86_xMatch),
- /*8856*/ uint16(x86_xSetOp), uint16(x86_MOVSXD),
- /*8858*/ uint16(x86_xReadSlashR),
- /*8859*/ uint16(x86_xArgR32),
- /*8860*/ uint16(x86_xArgRM32),
- /*8861*/ uint16(x86_xMatch),
- /*8862*/ uint16(x86_xSetOp), uint16(x86_MOVSXD),
- /*8864*/ uint16(x86_xReadSlashR),
- /*8865*/ uint16(x86_xArgR64),
- /*8866*/ uint16(x86_xArgRM32),
- /*8867*/ uint16(x86_xMatch),
- /*8868*/ uint16(x86_xCondDataSize), 8872, 8877, 8882,
- /*8872*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*8874*/ uint16(x86_xReadIw),
- /*8875*/ uint16(x86_xArgImm16),
- /*8876*/ uint16(x86_xMatch),
- /*8877*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*8879*/ uint16(x86_xReadId),
- /*8880*/ uint16(x86_xArgImm32),
- /*8881*/ uint16(x86_xMatch),
- /*8882*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*8884*/ uint16(x86_xReadId),
- /*8885*/ uint16(x86_xArgImm32),
- /*8886*/ uint16(x86_xMatch),
- /*8887*/ uint16(x86_xCondIs64), 8890, 8910,
- /*8890*/ uint16(x86_xCondDataSize), 8894, 8902, 0,
- /*8894*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*8896*/ uint16(x86_xReadSlashR),
- /*8897*/ uint16(x86_xReadIw),
- /*8898*/ uint16(x86_xArgR16),
- /*8899*/ uint16(x86_xArgRM16),
- /*8900*/ uint16(x86_xArgImm16),
- /*8901*/ uint16(x86_xMatch),
- /*8902*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*8904*/ uint16(x86_xReadSlashR),
- /*8905*/ uint16(x86_xReadId),
- /*8906*/ uint16(x86_xArgR32),
- /*8907*/ uint16(x86_xArgRM32),
- /*8908*/ uint16(x86_xArgImm32),
- /*8909*/ uint16(x86_xMatch),
- /*8910*/ uint16(x86_xCondDataSize), 8894, 8902, 8914,
- /*8914*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*8916*/ uint16(x86_xReadSlashR),
- /*8917*/ uint16(x86_xReadId),
- /*8918*/ uint16(x86_xArgR64),
- /*8919*/ uint16(x86_xArgRM64),
- /*8920*/ uint16(x86_xArgImm32),
- /*8921*/ uint16(x86_xMatch),
- /*8922*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*8924*/ uint16(x86_xReadIb),
- /*8925*/ uint16(x86_xArgImm8),
- /*8926*/ uint16(x86_xMatch),
- /*8927*/ uint16(x86_xCondIs64), 8930, 8950,
- /*8930*/ uint16(x86_xCondDataSize), 8934, 8942, 0,
- /*8934*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*8936*/ uint16(x86_xReadSlashR),
- /*8937*/ uint16(x86_xReadIb),
- /*8938*/ uint16(x86_xArgR16),
- /*8939*/ uint16(x86_xArgRM16),
- /*8940*/ uint16(x86_xArgImm8),
- /*8941*/ uint16(x86_xMatch),
- /*8942*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*8944*/ uint16(x86_xReadSlashR),
- /*8945*/ uint16(x86_xReadIb),
- /*8946*/ uint16(x86_xArgR32),
- /*8947*/ uint16(x86_xArgRM32),
- /*8948*/ uint16(x86_xArgImm8),
- /*8949*/ uint16(x86_xMatch),
- /*8950*/ uint16(x86_xCondDataSize), 8934, 8942, 8954,
- /*8954*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*8956*/ uint16(x86_xReadSlashR),
- /*8957*/ uint16(x86_xReadIb),
- /*8958*/ uint16(x86_xArgR64),
- /*8959*/ uint16(x86_xArgRM64),
- /*8960*/ uint16(x86_xArgImm8),
- /*8961*/ uint16(x86_xMatch),
- /*8962*/ uint16(x86_xSetOp), uint16(x86_INSB),
- /*8964*/ uint16(x86_xMatch),
- /*8965*/ uint16(x86_xCondDataSize), 8969, 8972, 8975,
- /*8969*/ uint16(x86_xSetOp), uint16(x86_INSW),
- /*8971*/ uint16(x86_xMatch),
- /*8972*/ uint16(x86_xSetOp), uint16(x86_INSD),
- /*8974*/ uint16(x86_xMatch),
- /*8975*/ uint16(x86_xSetOp), uint16(x86_INSD),
- /*8977*/ uint16(x86_xMatch),
- /*8978*/ uint16(x86_xSetOp), uint16(x86_OUTSB),
- /*8980*/ uint16(x86_xMatch),
- /*8981*/ uint16(x86_xCondDataSize), 8985, 8988, 8991,
- /*8985*/ uint16(x86_xSetOp), uint16(x86_OUTSW),
- /*8987*/ uint16(x86_xMatch),
- /*8988*/ uint16(x86_xSetOp), uint16(x86_OUTSD),
- /*8990*/ uint16(x86_xMatch),
- /*8991*/ uint16(x86_xSetOp), uint16(x86_OUTSD),
- /*8993*/ uint16(x86_xMatch),
- /*8994*/ uint16(x86_xSetOp), uint16(x86_JO),
- /*8996*/ uint16(x86_xReadCb),
- /*8997*/ uint16(x86_xArgRel8),
- /*8998*/ uint16(x86_xMatch),
- /*8999*/ uint16(x86_xSetOp), uint16(x86_JNO),
- /*9001*/ uint16(x86_xReadCb),
- /*9002*/ uint16(x86_xArgRel8),
- /*9003*/ uint16(x86_xMatch),
- /*9004*/ uint16(x86_xSetOp), uint16(x86_JB),
- /*9006*/ uint16(x86_xReadCb),
- /*9007*/ uint16(x86_xArgRel8),
- /*9008*/ uint16(x86_xMatch),
- /*9009*/ uint16(x86_xSetOp), uint16(x86_JAE),
- /*9011*/ uint16(x86_xReadCb),
- /*9012*/ uint16(x86_xArgRel8),
- /*9013*/ uint16(x86_xMatch),
- /*9014*/ uint16(x86_xSetOp), uint16(x86_JE),
- /*9016*/ uint16(x86_xReadCb),
- /*9017*/ uint16(x86_xArgRel8),
- /*9018*/ uint16(x86_xMatch),
- /*9019*/ uint16(x86_xSetOp), uint16(x86_JNE),
- /*9021*/ uint16(x86_xReadCb),
- /*9022*/ uint16(x86_xArgRel8),
- /*9023*/ uint16(x86_xMatch),
- /*9024*/ uint16(x86_xSetOp), uint16(x86_JBE),
- /*9026*/ uint16(x86_xReadCb),
- /*9027*/ uint16(x86_xArgRel8),
- /*9028*/ uint16(x86_xMatch),
- /*9029*/ uint16(x86_xSetOp), uint16(x86_JA),
- /*9031*/ uint16(x86_xReadCb),
- /*9032*/ uint16(x86_xArgRel8),
- /*9033*/ uint16(x86_xMatch),
- /*9034*/ uint16(x86_xSetOp), uint16(x86_JS),
- /*9036*/ uint16(x86_xReadCb),
- /*9037*/ uint16(x86_xArgRel8),
- /*9038*/ uint16(x86_xMatch),
- /*9039*/ uint16(x86_xSetOp), uint16(x86_JNS),
- /*9041*/ uint16(x86_xReadCb),
- /*9042*/ uint16(x86_xArgRel8),
- /*9043*/ uint16(x86_xMatch),
- /*9044*/ uint16(x86_xSetOp), uint16(x86_JP),
- /*9046*/ uint16(x86_xReadCb),
- /*9047*/ uint16(x86_xArgRel8),
- /*9048*/ uint16(x86_xMatch),
- /*9049*/ uint16(x86_xSetOp), uint16(x86_JNP),
- /*9051*/ uint16(x86_xReadCb),
- /*9052*/ uint16(x86_xArgRel8),
- /*9053*/ uint16(x86_xMatch),
- /*9054*/ uint16(x86_xSetOp), uint16(x86_JL),
- /*9056*/ uint16(x86_xReadCb),
- /*9057*/ uint16(x86_xArgRel8),
- /*9058*/ uint16(x86_xMatch),
- /*9059*/ uint16(x86_xSetOp), uint16(x86_JGE),
- /*9061*/ uint16(x86_xReadCb),
- /*9062*/ uint16(x86_xArgRel8),
- /*9063*/ uint16(x86_xMatch),
- /*9064*/ uint16(x86_xSetOp), uint16(x86_JLE),
- /*9066*/ uint16(x86_xReadCb),
- /*9067*/ uint16(x86_xArgRel8),
- /*9068*/ uint16(x86_xMatch),
- /*9069*/ uint16(x86_xSetOp), uint16(x86_JG),
- /*9071*/ uint16(x86_xReadCb),
- /*9072*/ uint16(x86_xArgRel8),
- /*9073*/ uint16(x86_xMatch),
- /*9074*/ uint16(x86_xCondSlashR),
- 9083, // 0
- 9089, // 1
- 9095, // 2
- 9101, // 3
- 9107, // 4
- 9113, // 5
- 9119, // 6
- 9125, // 7
- /*9083*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*9085*/ uint16(x86_xReadIb),
- /*9086*/ uint16(x86_xArgRM8),
- /*9087*/ uint16(x86_xArgImm8u),
- /*9088*/ uint16(x86_xMatch),
- /*9089*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*9091*/ uint16(x86_xReadIb),
- /*9092*/ uint16(x86_xArgRM8),
- /*9093*/ uint16(x86_xArgImm8u),
- /*9094*/ uint16(x86_xMatch),
- /*9095*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*9097*/ uint16(x86_xReadIb),
- /*9098*/ uint16(x86_xArgRM8),
- /*9099*/ uint16(x86_xArgImm8u),
- /*9100*/ uint16(x86_xMatch),
- /*9101*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*9103*/ uint16(x86_xReadIb),
- /*9104*/ uint16(x86_xArgRM8),
- /*9105*/ uint16(x86_xArgImm8u),
- /*9106*/ uint16(x86_xMatch),
- /*9107*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*9109*/ uint16(x86_xReadIb),
- /*9110*/ uint16(x86_xArgRM8),
- /*9111*/ uint16(x86_xArgImm8u),
- /*9112*/ uint16(x86_xMatch),
- /*9113*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*9115*/ uint16(x86_xReadIb),
- /*9116*/ uint16(x86_xArgRM8),
- /*9117*/ uint16(x86_xArgImm8u),
- /*9118*/ uint16(x86_xMatch),
- /*9119*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*9121*/ uint16(x86_xReadIb),
- /*9122*/ uint16(x86_xArgRM8),
- /*9123*/ uint16(x86_xArgImm8u),
- /*9124*/ uint16(x86_xMatch),
- /*9125*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*9127*/ uint16(x86_xReadIb),
- /*9128*/ uint16(x86_xArgRM8),
- /*9129*/ uint16(x86_xArgImm8u),
- /*9130*/ uint16(x86_xMatch),
- /*9131*/ uint16(x86_xCondSlashR),
- 9140, // 0
- 9169, // 1
- 9198, // 2
- 9227, // 3
- 9256, // 4
- 9285, // 5
- 9314, // 6
- 9343, // 7
- /*9140*/ uint16(x86_xCondIs64), 9143, 9159,
- /*9143*/ uint16(x86_xCondDataSize), 9147, 9153, 0,
- /*9147*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*9149*/ uint16(x86_xReadIw),
- /*9150*/ uint16(x86_xArgRM16),
- /*9151*/ uint16(x86_xArgImm16),
- /*9152*/ uint16(x86_xMatch),
- /*9153*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*9155*/ uint16(x86_xReadId),
- /*9156*/ uint16(x86_xArgRM32),
- /*9157*/ uint16(x86_xArgImm32),
- /*9158*/ uint16(x86_xMatch),
- /*9159*/ uint16(x86_xCondDataSize), 9147, 9153, 9163,
- /*9163*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*9165*/ uint16(x86_xReadId),
- /*9166*/ uint16(x86_xArgRM64),
- /*9167*/ uint16(x86_xArgImm32),
- /*9168*/ uint16(x86_xMatch),
- /*9169*/ uint16(x86_xCondIs64), 9172, 9188,
- /*9172*/ uint16(x86_xCondDataSize), 9176, 9182, 0,
- /*9176*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*9178*/ uint16(x86_xReadIw),
- /*9179*/ uint16(x86_xArgRM16),
- /*9180*/ uint16(x86_xArgImm16),
- /*9181*/ uint16(x86_xMatch),
- /*9182*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*9184*/ uint16(x86_xReadId),
- /*9185*/ uint16(x86_xArgRM32),
- /*9186*/ uint16(x86_xArgImm32),
- /*9187*/ uint16(x86_xMatch),
- /*9188*/ uint16(x86_xCondDataSize), 9176, 9182, 9192,
- /*9192*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*9194*/ uint16(x86_xReadId),
- /*9195*/ uint16(x86_xArgRM64),
- /*9196*/ uint16(x86_xArgImm32),
- /*9197*/ uint16(x86_xMatch),
- /*9198*/ uint16(x86_xCondIs64), 9201, 9217,
- /*9201*/ uint16(x86_xCondDataSize), 9205, 9211, 0,
- /*9205*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*9207*/ uint16(x86_xReadIw),
- /*9208*/ uint16(x86_xArgRM16),
- /*9209*/ uint16(x86_xArgImm16),
- /*9210*/ uint16(x86_xMatch),
- /*9211*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*9213*/ uint16(x86_xReadId),
- /*9214*/ uint16(x86_xArgRM32),
- /*9215*/ uint16(x86_xArgImm32),
- /*9216*/ uint16(x86_xMatch),
- /*9217*/ uint16(x86_xCondDataSize), 9205, 9211, 9221,
- /*9221*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*9223*/ uint16(x86_xReadId),
- /*9224*/ uint16(x86_xArgRM64),
- /*9225*/ uint16(x86_xArgImm32),
- /*9226*/ uint16(x86_xMatch),
- /*9227*/ uint16(x86_xCondIs64), 9230, 9246,
- /*9230*/ uint16(x86_xCondDataSize), 9234, 9240, 0,
- /*9234*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*9236*/ uint16(x86_xReadIw),
- /*9237*/ uint16(x86_xArgRM16),
- /*9238*/ uint16(x86_xArgImm16),
- /*9239*/ uint16(x86_xMatch),
- /*9240*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*9242*/ uint16(x86_xReadId),
- /*9243*/ uint16(x86_xArgRM32),
- /*9244*/ uint16(x86_xArgImm32),
- /*9245*/ uint16(x86_xMatch),
- /*9246*/ uint16(x86_xCondDataSize), 9234, 9240, 9250,
- /*9250*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*9252*/ uint16(x86_xReadId),
- /*9253*/ uint16(x86_xArgRM64),
- /*9254*/ uint16(x86_xArgImm32),
- /*9255*/ uint16(x86_xMatch),
- /*9256*/ uint16(x86_xCondIs64), 9259, 9275,
- /*9259*/ uint16(x86_xCondDataSize), 9263, 9269, 0,
- /*9263*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*9265*/ uint16(x86_xReadIw),
- /*9266*/ uint16(x86_xArgRM16),
- /*9267*/ uint16(x86_xArgImm16),
- /*9268*/ uint16(x86_xMatch),
- /*9269*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*9271*/ uint16(x86_xReadId),
- /*9272*/ uint16(x86_xArgRM32),
- /*9273*/ uint16(x86_xArgImm32),
- /*9274*/ uint16(x86_xMatch),
- /*9275*/ uint16(x86_xCondDataSize), 9263, 9269, 9279,
- /*9279*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*9281*/ uint16(x86_xReadId),
- /*9282*/ uint16(x86_xArgRM64),
- /*9283*/ uint16(x86_xArgImm32),
- /*9284*/ uint16(x86_xMatch),
- /*9285*/ uint16(x86_xCondIs64), 9288, 9304,
- /*9288*/ uint16(x86_xCondDataSize), 9292, 9298, 0,
- /*9292*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*9294*/ uint16(x86_xReadIw),
- /*9295*/ uint16(x86_xArgRM16),
- /*9296*/ uint16(x86_xArgImm16),
- /*9297*/ uint16(x86_xMatch),
- /*9298*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*9300*/ uint16(x86_xReadId),
- /*9301*/ uint16(x86_xArgRM32),
- /*9302*/ uint16(x86_xArgImm32),
- /*9303*/ uint16(x86_xMatch),
- /*9304*/ uint16(x86_xCondDataSize), 9292, 9298, 9308,
- /*9308*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*9310*/ uint16(x86_xReadId),
- /*9311*/ uint16(x86_xArgRM64),
- /*9312*/ uint16(x86_xArgImm32),
- /*9313*/ uint16(x86_xMatch),
- /*9314*/ uint16(x86_xCondIs64), 9317, 9333,
- /*9317*/ uint16(x86_xCondDataSize), 9321, 9327, 0,
- /*9321*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*9323*/ uint16(x86_xReadIw),
- /*9324*/ uint16(x86_xArgRM16),
- /*9325*/ uint16(x86_xArgImm16),
- /*9326*/ uint16(x86_xMatch),
- /*9327*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*9329*/ uint16(x86_xReadId),
- /*9330*/ uint16(x86_xArgRM32),
- /*9331*/ uint16(x86_xArgImm32),
- /*9332*/ uint16(x86_xMatch),
- /*9333*/ uint16(x86_xCondDataSize), 9321, 9327, 9337,
- /*9337*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*9339*/ uint16(x86_xReadId),
- /*9340*/ uint16(x86_xArgRM64),
- /*9341*/ uint16(x86_xArgImm32),
- /*9342*/ uint16(x86_xMatch),
- /*9343*/ uint16(x86_xCondIs64), 9346, 9362,
- /*9346*/ uint16(x86_xCondDataSize), 9350, 9356, 0,
- /*9350*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*9352*/ uint16(x86_xReadIw),
- /*9353*/ uint16(x86_xArgRM16),
- /*9354*/ uint16(x86_xArgImm16),
- /*9355*/ uint16(x86_xMatch),
- /*9356*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*9358*/ uint16(x86_xReadId),
- /*9359*/ uint16(x86_xArgRM32),
- /*9360*/ uint16(x86_xArgImm32),
- /*9361*/ uint16(x86_xMatch),
- /*9362*/ uint16(x86_xCondDataSize), 9350, 9356, 9366,
- /*9366*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*9368*/ uint16(x86_xReadId),
- /*9369*/ uint16(x86_xArgRM64),
- /*9370*/ uint16(x86_xArgImm32),
- /*9371*/ uint16(x86_xMatch),
- /*9372*/ uint16(x86_xCondSlashR),
- 9381, // 0
- 9410, // 1
- 9439, // 2
- 9468, // 3
- 9497, // 4
- 9526, // 5
- 9555, // 6
- 9584, // 7
- /*9381*/ uint16(x86_xCondIs64), 9384, 9400,
- /*9384*/ uint16(x86_xCondDataSize), 9388, 9394, 0,
- /*9388*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*9390*/ uint16(x86_xReadIb),
- /*9391*/ uint16(x86_xArgRM16),
- /*9392*/ uint16(x86_xArgImm8),
- /*9393*/ uint16(x86_xMatch),
- /*9394*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*9396*/ uint16(x86_xReadIb),
- /*9397*/ uint16(x86_xArgRM32),
- /*9398*/ uint16(x86_xArgImm8),
- /*9399*/ uint16(x86_xMatch),
- /*9400*/ uint16(x86_xCondDataSize), 9388, 9394, 9404,
- /*9404*/ uint16(x86_xSetOp), uint16(x86_ADD),
- /*9406*/ uint16(x86_xReadIb),
- /*9407*/ uint16(x86_xArgRM64),
- /*9408*/ uint16(x86_xArgImm8),
- /*9409*/ uint16(x86_xMatch),
- /*9410*/ uint16(x86_xCondIs64), 9413, 9429,
- /*9413*/ uint16(x86_xCondDataSize), 9417, 9423, 0,
- /*9417*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*9419*/ uint16(x86_xReadIb),
- /*9420*/ uint16(x86_xArgRM16),
- /*9421*/ uint16(x86_xArgImm8),
- /*9422*/ uint16(x86_xMatch),
- /*9423*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*9425*/ uint16(x86_xReadIb),
- /*9426*/ uint16(x86_xArgRM32),
- /*9427*/ uint16(x86_xArgImm8),
- /*9428*/ uint16(x86_xMatch),
- /*9429*/ uint16(x86_xCondDataSize), 9417, 9423, 9433,
- /*9433*/ uint16(x86_xSetOp), uint16(x86_OR),
- /*9435*/ uint16(x86_xReadIb),
- /*9436*/ uint16(x86_xArgRM64),
- /*9437*/ uint16(x86_xArgImm8),
- /*9438*/ uint16(x86_xMatch),
- /*9439*/ uint16(x86_xCondIs64), 9442, 9458,
- /*9442*/ uint16(x86_xCondDataSize), 9446, 9452, 0,
- /*9446*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*9448*/ uint16(x86_xReadIb),
- /*9449*/ uint16(x86_xArgRM16),
- /*9450*/ uint16(x86_xArgImm8),
- /*9451*/ uint16(x86_xMatch),
- /*9452*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*9454*/ uint16(x86_xReadIb),
- /*9455*/ uint16(x86_xArgRM32),
- /*9456*/ uint16(x86_xArgImm8),
- /*9457*/ uint16(x86_xMatch),
- /*9458*/ uint16(x86_xCondDataSize), 9446, 9452, 9462,
- /*9462*/ uint16(x86_xSetOp), uint16(x86_ADC),
- /*9464*/ uint16(x86_xReadIb),
- /*9465*/ uint16(x86_xArgRM64),
- /*9466*/ uint16(x86_xArgImm8),
- /*9467*/ uint16(x86_xMatch),
- /*9468*/ uint16(x86_xCondIs64), 9471, 9487,
- /*9471*/ uint16(x86_xCondDataSize), 9475, 9481, 0,
- /*9475*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*9477*/ uint16(x86_xReadIb),
- /*9478*/ uint16(x86_xArgRM16),
- /*9479*/ uint16(x86_xArgImm8),
- /*9480*/ uint16(x86_xMatch),
- /*9481*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*9483*/ uint16(x86_xReadIb),
- /*9484*/ uint16(x86_xArgRM32),
- /*9485*/ uint16(x86_xArgImm8),
- /*9486*/ uint16(x86_xMatch),
- /*9487*/ uint16(x86_xCondDataSize), 9475, 9481, 9491,
- /*9491*/ uint16(x86_xSetOp), uint16(x86_SBB),
- /*9493*/ uint16(x86_xReadIb),
- /*9494*/ uint16(x86_xArgRM64),
- /*9495*/ uint16(x86_xArgImm8),
- /*9496*/ uint16(x86_xMatch),
- /*9497*/ uint16(x86_xCondIs64), 9500, 9516,
- /*9500*/ uint16(x86_xCondDataSize), 9504, 9510, 0,
- /*9504*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*9506*/ uint16(x86_xReadIb),
- /*9507*/ uint16(x86_xArgRM16),
- /*9508*/ uint16(x86_xArgImm8),
- /*9509*/ uint16(x86_xMatch),
- /*9510*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*9512*/ uint16(x86_xReadIb),
- /*9513*/ uint16(x86_xArgRM32),
- /*9514*/ uint16(x86_xArgImm8),
- /*9515*/ uint16(x86_xMatch),
- /*9516*/ uint16(x86_xCondDataSize), 9504, 9510, 9520,
- /*9520*/ uint16(x86_xSetOp), uint16(x86_AND),
- /*9522*/ uint16(x86_xReadIb),
- /*9523*/ uint16(x86_xArgRM64),
- /*9524*/ uint16(x86_xArgImm8),
- /*9525*/ uint16(x86_xMatch),
- /*9526*/ uint16(x86_xCondIs64), 9529, 9545,
- /*9529*/ uint16(x86_xCondDataSize), 9533, 9539, 0,
- /*9533*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*9535*/ uint16(x86_xReadIb),
- /*9536*/ uint16(x86_xArgRM16),
- /*9537*/ uint16(x86_xArgImm8),
- /*9538*/ uint16(x86_xMatch),
- /*9539*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*9541*/ uint16(x86_xReadIb),
- /*9542*/ uint16(x86_xArgRM32),
- /*9543*/ uint16(x86_xArgImm8),
- /*9544*/ uint16(x86_xMatch),
- /*9545*/ uint16(x86_xCondDataSize), 9533, 9539, 9549,
- /*9549*/ uint16(x86_xSetOp), uint16(x86_SUB),
- /*9551*/ uint16(x86_xReadIb),
- /*9552*/ uint16(x86_xArgRM64),
- /*9553*/ uint16(x86_xArgImm8),
- /*9554*/ uint16(x86_xMatch),
- /*9555*/ uint16(x86_xCondIs64), 9558, 9574,
- /*9558*/ uint16(x86_xCondDataSize), 9562, 9568, 0,
- /*9562*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*9564*/ uint16(x86_xReadIb),
- /*9565*/ uint16(x86_xArgRM16),
- /*9566*/ uint16(x86_xArgImm8),
- /*9567*/ uint16(x86_xMatch),
- /*9568*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*9570*/ uint16(x86_xReadIb),
- /*9571*/ uint16(x86_xArgRM32),
- /*9572*/ uint16(x86_xArgImm8),
- /*9573*/ uint16(x86_xMatch),
- /*9574*/ uint16(x86_xCondDataSize), 9562, 9568, 9578,
- /*9578*/ uint16(x86_xSetOp), uint16(x86_XOR),
- /*9580*/ uint16(x86_xReadIb),
- /*9581*/ uint16(x86_xArgRM64),
- /*9582*/ uint16(x86_xArgImm8),
- /*9583*/ uint16(x86_xMatch),
- /*9584*/ uint16(x86_xCondIs64), 9587, 9603,
- /*9587*/ uint16(x86_xCondDataSize), 9591, 9597, 0,
- /*9591*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*9593*/ uint16(x86_xReadIb),
- /*9594*/ uint16(x86_xArgRM16),
- /*9595*/ uint16(x86_xArgImm8),
- /*9596*/ uint16(x86_xMatch),
- /*9597*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*9599*/ uint16(x86_xReadIb),
- /*9600*/ uint16(x86_xArgRM32),
- /*9601*/ uint16(x86_xArgImm8),
- /*9602*/ uint16(x86_xMatch),
- /*9603*/ uint16(x86_xCondDataSize), 9591, 9597, 9607,
- /*9607*/ uint16(x86_xSetOp), uint16(x86_CMP),
- /*9609*/ uint16(x86_xReadIb),
- /*9610*/ uint16(x86_xArgRM64),
- /*9611*/ uint16(x86_xArgImm8),
- /*9612*/ uint16(x86_xMatch),
- /*9613*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*9615*/ uint16(x86_xReadSlashR),
- /*9616*/ uint16(x86_xArgRM8),
- /*9617*/ uint16(x86_xArgR8),
- /*9618*/ uint16(x86_xMatch),
- /*9619*/ uint16(x86_xCondIs64), 9622, 9638,
- /*9622*/ uint16(x86_xCondDataSize), 9626, 9632, 0,
- /*9626*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*9628*/ uint16(x86_xReadSlashR),
- /*9629*/ uint16(x86_xArgRM16),
- /*9630*/ uint16(x86_xArgR16),
- /*9631*/ uint16(x86_xMatch),
- /*9632*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*9634*/ uint16(x86_xReadSlashR),
- /*9635*/ uint16(x86_xArgRM32),
- /*9636*/ uint16(x86_xArgR32),
- /*9637*/ uint16(x86_xMatch),
- /*9638*/ uint16(x86_xCondDataSize), 9626, 9632, 9642,
- /*9642*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*9644*/ uint16(x86_xReadSlashR),
- /*9645*/ uint16(x86_xArgRM64),
- /*9646*/ uint16(x86_xArgR64),
- /*9647*/ uint16(x86_xMatch),
- /*9648*/ uint16(x86_xSetOp), uint16(x86_XCHG),
- /*9650*/ uint16(x86_xReadSlashR),
- /*9651*/ uint16(x86_xArgRM8),
- /*9652*/ uint16(x86_xArgR8),
- /*9653*/ uint16(x86_xMatch),
- /*9654*/ uint16(x86_xCondIs64), 9657, 9673,
- /*9657*/ uint16(x86_xCondDataSize), 9661, 9667, 0,
- /*9661*/ uint16(x86_xSetOp), uint16(x86_XCHG),
- /*9663*/ uint16(x86_xReadSlashR),
- /*9664*/ uint16(x86_xArgRM16),
- /*9665*/ uint16(x86_xArgR16),
- /*9666*/ uint16(x86_xMatch),
- /*9667*/ uint16(x86_xSetOp), uint16(x86_XCHG),
- /*9669*/ uint16(x86_xReadSlashR),
- /*9670*/ uint16(x86_xArgRM32),
- /*9671*/ uint16(x86_xArgR32),
- /*9672*/ uint16(x86_xMatch),
- /*9673*/ uint16(x86_xCondDataSize), 9661, 9667, 9677,
- /*9677*/ uint16(x86_xSetOp), uint16(x86_XCHG),
- /*9679*/ uint16(x86_xReadSlashR),
- /*9680*/ uint16(x86_xArgRM64),
- /*9681*/ uint16(x86_xArgR64),
- /*9682*/ uint16(x86_xMatch),
- /*9683*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9685*/ uint16(x86_xReadSlashR),
- /*9686*/ uint16(x86_xArgRM8),
- /*9687*/ uint16(x86_xArgR8),
- /*9688*/ uint16(x86_xMatch),
- /*9689*/ uint16(x86_xCondDataSize), 9693, 9699, 9705,
- /*9693*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9695*/ uint16(x86_xReadSlashR),
- /*9696*/ uint16(x86_xArgRM16),
- /*9697*/ uint16(x86_xArgR16),
- /*9698*/ uint16(x86_xMatch),
- /*9699*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9701*/ uint16(x86_xReadSlashR),
- /*9702*/ uint16(x86_xArgRM32),
- /*9703*/ uint16(x86_xArgR32),
- /*9704*/ uint16(x86_xMatch),
- /*9705*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9707*/ uint16(x86_xReadSlashR),
- /*9708*/ uint16(x86_xArgRM64),
- /*9709*/ uint16(x86_xArgR64),
- /*9710*/ uint16(x86_xMatch),
- /*9711*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9713*/ uint16(x86_xReadSlashR),
- /*9714*/ uint16(x86_xArgR8),
- /*9715*/ uint16(x86_xArgRM8),
- /*9716*/ uint16(x86_xMatch),
- /*9717*/ uint16(x86_xCondDataSize), 9721, 9727, 9733,
- /*9721*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9723*/ uint16(x86_xReadSlashR),
- /*9724*/ uint16(x86_xArgR16),
- /*9725*/ uint16(x86_xArgRM16),
- /*9726*/ uint16(x86_xMatch),
- /*9727*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9729*/ uint16(x86_xReadSlashR),
- /*9730*/ uint16(x86_xArgR32),
- /*9731*/ uint16(x86_xArgRM32),
- /*9732*/ uint16(x86_xMatch),
- /*9733*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9735*/ uint16(x86_xReadSlashR),
- /*9736*/ uint16(x86_xArgR64),
- /*9737*/ uint16(x86_xArgRM64),
- /*9738*/ uint16(x86_xMatch),
- /*9739*/ uint16(x86_xCondIs64), 9742, 9758,
- /*9742*/ uint16(x86_xCondDataSize), 9746, 9752, 0,
- /*9746*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9748*/ uint16(x86_xReadSlashR),
- /*9749*/ uint16(x86_xArgRM16),
- /*9750*/ uint16(x86_xArgSreg),
- /*9751*/ uint16(x86_xMatch),
- /*9752*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9754*/ uint16(x86_xReadSlashR),
- /*9755*/ uint16(x86_xArgR32M16),
- /*9756*/ uint16(x86_xArgSreg),
- /*9757*/ uint16(x86_xMatch),
- /*9758*/ uint16(x86_xCondDataSize), 9746, 9752, 9762,
- /*9762*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9764*/ uint16(x86_xReadSlashR),
- /*9765*/ uint16(x86_xArgR64M16),
- /*9766*/ uint16(x86_xArgSreg),
- /*9767*/ uint16(x86_xMatch),
- /*9768*/ uint16(x86_xCondIs64), 9771, 9787,
- /*9771*/ uint16(x86_xCondDataSize), 9775, 9781, 0,
- /*9775*/ uint16(x86_xSetOp), uint16(x86_LEA),
- /*9777*/ uint16(x86_xReadSlashR),
- /*9778*/ uint16(x86_xArgR16),
- /*9779*/ uint16(x86_xArgM),
- /*9780*/ uint16(x86_xMatch),
- /*9781*/ uint16(x86_xSetOp), uint16(x86_LEA),
- /*9783*/ uint16(x86_xReadSlashR),
- /*9784*/ uint16(x86_xArgR32),
- /*9785*/ uint16(x86_xArgM),
- /*9786*/ uint16(x86_xMatch),
- /*9787*/ uint16(x86_xCondDataSize), 9775, 9781, 9791,
- /*9791*/ uint16(x86_xSetOp), uint16(x86_LEA),
- /*9793*/ uint16(x86_xReadSlashR),
- /*9794*/ uint16(x86_xArgR64),
- /*9795*/ uint16(x86_xArgM),
- /*9796*/ uint16(x86_xMatch),
- /*9797*/ uint16(x86_xCondIs64), 9800, 9816,
- /*9800*/ uint16(x86_xCondDataSize), 9804, 9810, 0,
- /*9804*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9806*/ uint16(x86_xReadSlashR),
- /*9807*/ uint16(x86_xArgSreg),
- /*9808*/ uint16(x86_xArgRM16),
- /*9809*/ uint16(x86_xMatch),
- /*9810*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9812*/ uint16(x86_xReadSlashR),
- /*9813*/ uint16(x86_xArgSreg),
- /*9814*/ uint16(x86_xArgR32M16),
- /*9815*/ uint16(x86_xMatch),
- /*9816*/ uint16(x86_xCondDataSize), 9804, 9810, 9820,
- /*9820*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*9822*/ uint16(x86_xReadSlashR),
- /*9823*/ uint16(x86_xArgSreg),
- /*9824*/ uint16(x86_xArgR64M16),
- /*9825*/ uint16(x86_xMatch),
- /*9826*/ uint16(x86_xCondSlashR),
- 9835, // 0
- 0, // 1
- 0, // 2
- 0, // 3
- 0, // 4
- 0, // 5
- 0, // 6
- 0, // 7
- /*9835*/ uint16(x86_xCondIs64), 9838, 9850,
- /*9838*/ uint16(x86_xCondDataSize), 9842, 9846, 0,
- /*9842*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*9844*/ uint16(x86_xArgRM16),
- /*9845*/ uint16(x86_xMatch),
- /*9846*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*9848*/ uint16(x86_xArgRM32),
- /*9849*/ uint16(x86_xMatch),
- /*9850*/ uint16(x86_xCondDataSize), 9842, 9854, 9858,
- /*9854*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*9856*/ uint16(x86_xArgRM64),
- /*9857*/ uint16(x86_xMatch),
- /*9858*/ uint16(x86_xSetOp), uint16(x86_POP),
- /*9860*/ uint16(x86_xArgRM64),
- /*9861*/ uint16(x86_xMatch),
- /*9862*/ uint16(x86_xCondIs64), 9865, 9879,
- /*9865*/ uint16(x86_xCondDataSize), 9869, 9874, 0,
- /*9869*/ uint16(x86_xSetOp), uint16(x86_XCHG),
- /*9871*/ uint16(x86_xArgR16op),
- /*9872*/ uint16(x86_xArgAX),
- /*9873*/ uint16(x86_xMatch),
- /*9874*/ uint16(x86_xSetOp), uint16(x86_XCHG),
- /*9876*/ uint16(x86_xArgR32op),
- /*9877*/ uint16(x86_xArgEAX),
- /*9878*/ uint16(x86_xMatch),
- /*9879*/ uint16(x86_xCondDataSize), 9869, 9874, 9883,
- /*9883*/ uint16(x86_xSetOp), uint16(x86_XCHG),
- /*9885*/ uint16(x86_xArgR64op),
- /*9886*/ uint16(x86_xArgRAX),
- /*9887*/ uint16(x86_xMatch),
- /*9888*/ uint16(x86_xCondIs64), 9891, 9901,
- /*9891*/ uint16(x86_xCondDataSize), 9895, 9898, 0,
- /*9895*/ uint16(x86_xSetOp), uint16(x86_CBW),
- /*9897*/ uint16(x86_xMatch),
- /*9898*/ uint16(x86_xSetOp), uint16(x86_CWDE),
- /*9900*/ uint16(x86_xMatch),
- /*9901*/ uint16(x86_xCondDataSize), 9895, 9898, 9905,
- /*9905*/ uint16(x86_xSetOp), uint16(x86_CDQE),
- /*9907*/ uint16(x86_xMatch),
- /*9908*/ uint16(x86_xCondIs64), 9911, 9921,
- /*9911*/ uint16(x86_xCondDataSize), 9915, 9918, 0,
- /*9915*/ uint16(x86_xSetOp), uint16(x86_CWD),
- /*9917*/ uint16(x86_xMatch),
- /*9918*/ uint16(x86_xSetOp), uint16(x86_CDQ),
- /*9920*/ uint16(x86_xMatch),
- /*9921*/ uint16(x86_xCondDataSize), 9915, 9918, 9925,
- /*9925*/ uint16(x86_xSetOp), uint16(x86_CQO),
- /*9927*/ uint16(x86_xMatch),
- /*9928*/ uint16(x86_xCondIs64), 9931, 0,
- /*9931*/ uint16(x86_xCondDataSize), 9935, 9940, 0,
- /*9935*/ uint16(x86_xSetOp), uint16(x86_LCALL),
- /*9937*/ uint16(x86_xReadCd),
- /*9938*/ uint16(x86_xArgPtr16colon16),
- /*9939*/ uint16(x86_xMatch),
- /*9940*/ uint16(x86_xSetOp), uint16(x86_LCALL),
- /*9942*/ uint16(x86_xReadCp),
- /*9943*/ uint16(x86_xArgPtr16colon32),
- /*9944*/ uint16(x86_xMatch),
- /*9945*/ uint16(x86_xSetOp), uint16(x86_FWAIT),
- /*9947*/ uint16(x86_xMatch),
- /*9948*/ uint16(x86_xCondIs64), 9951, 9961,
- /*9951*/ uint16(x86_xCondDataSize), 9955, 9958, 0,
- /*9955*/ uint16(x86_xSetOp), uint16(x86_PUSHF),
- /*9957*/ uint16(x86_xMatch),
- /*9958*/ uint16(x86_xSetOp), uint16(x86_PUSHFD),
- /*9960*/ uint16(x86_xMatch),
- /*9961*/ uint16(x86_xCondDataSize), 9955, 9965, 9968,
- /*9965*/ uint16(x86_xSetOp), uint16(x86_PUSHFQ),
- /*9967*/ uint16(x86_xMatch),
- /*9968*/ uint16(x86_xSetOp), uint16(x86_PUSHFQ),
- /*9970*/ uint16(x86_xMatch),
- /*9971*/ uint16(x86_xCondIs64), 9974, 9984,
- /*9974*/ uint16(x86_xCondDataSize), 9978, 9981, 0,
- /*9978*/ uint16(x86_xSetOp), uint16(x86_POPF),
- /*9980*/ uint16(x86_xMatch),
- /*9981*/ uint16(x86_xSetOp), uint16(x86_POPFD),
- /*9983*/ uint16(x86_xMatch),
- /*9984*/ uint16(x86_xCondDataSize), 9978, 9988, 9991,
- /*9988*/ uint16(x86_xSetOp), uint16(x86_POPFQ),
- /*9990*/ uint16(x86_xMatch),
- /*9991*/ uint16(x86_xSetOp), uint16(x86_POPFQ),
- /*9993*/ uint16(x86_xMatch),
- /*9994*/ uint16(x86_xSetOp), uint16(x86_SAHF),
- /*9996*/ uint16(x86_xMatch),
- /*9997*/ uint16(x86_xSetOp), uint16(x86_LAHF),
- /*9999*/ uint16(x86_xMatch),
- /*10000*/ uint16(x86_xCondIs64), 10003, 10009,
- /*10003*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10005*/ uint16(x86_xReadCm),
- /*10006*/ uint16(x86_xArgAL),
- /*10007*/ uint16(x86_xArgMoffs8),
- /*10008*/ uint16(x86_xMatch),
- /*10009*/ uint16(x86_xCondDataSize), 10003, 10003, 10013,
- /*10013*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10015*/ uint16(x86_xReadCm),
- /*10016*/ uint16(x86_xArgAL),
- /*10017*/ uint16(x86_xArgMoffs8),
- /*10018*/ uint16(x86_xMatch),
- /*10019*/ uint16(x86_xCondDataSize), 10023, 10029, 10035,
- /*10023*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10025*/ uint16(x86_xReadCm),
- /*10026*/ uint16(x86_xArgAX),
- /*10027*/ uint16(x86_xArgMoffs16),
- /*10028*/ uint16(x86_xMatch),
- /*10029*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10031*/ uint16(x86_xReadCm),
- /*10032*/ uint16(x86_xArgEAX),
- /*10033*/ uint16(x86_xArgMoffs32),
- /*10034*/ uint16(x86_xMatch),
- /*10035*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10037*/ uint16(x86_xReadCm),
- /*10038*/ uint16(x86_xArgRAX),
- /*10039*/ uint16(x86_xArgMoffs64),
- /*10040*/ uint16(x86_xMatch),
- /*10041*/ uint16(x86_xCondIs64), 10044, 10050,
- /*10044*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10046*/ uint16(x86_xReadCm),
- /*10047*/ uint16(x86_xArgMoffs8),
- /*10048*/ uint16(x86_xArgAL),
- /*10049*/ uint16(x86_xMatch),
- /*10050*/ uint16(x86_xCondDataSize), 10044, 10044, 10054,
- /*10054*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10056*/ uint16(x86_xReadCm),
- /*10057*/ uint16(x86_xArgMoffs8),
- /*10058*/ uint16(x86_xArgAL),
- /*10059*/ uint16(x86_xMatch),
- /*10060*/ uint16(x86_xCondDataSize), 10064, 10070, 10076,
- /*10064*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10066*/ uint16(x86_xReadCm),
- /*10067*/ uint16(x86_xArgMoffs16),
- /*10068*/ uint16(x86_xArgAX),
- /*10069*/ uint16(x86_xMatch),
- /*10070*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10072*/ uint16(x86_xReadCm),
- /*10073*/ uint16(x86_xArgMoffs32),
- /*10074*/ uint16(x86_xArgEAX),
- /*10075*/ uint16(x86_xMatch),
- /*10076*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10078*/ uint16(x86_xReadCm),
- /*10079*/ uint16(x86_xArgMoffs64),
- /*10080*/ uint16(x86_xArgRAX),
- /*10081*/ uint16(x86_xMatch),
- /*10082*/ uint16(x86_xSetOp), uint16(x86_MOVSB),
- /*10084*/ uint16(x86_xMatch),
- /*10085*/ uint16(x86_xCondIs64), 10088, 10098,
- /*10088*/ uint16(x86_xCondDataSize), 10092, 10095, 0,
- /*10092*/ uint16(x86_xSetOp), uint16(x86_MOVSW),
- /*10094*/ uint16(x86_xMatch),
- /*10095*/ uint16(x86_xSetOp), uint16(x86_MOVSD),
- /*10097*/ uint16(x86_xMatch),
- /*10098*/ uint16(x86_xCondDataSize), 10092, 10095, 10102,
- /*10102*/ uint16(x86_xSetOp), uint16(x86_MOVSQ),
- /*10104*/ uint16(x86_xMatch),
- /*10105*/ uint16(x86_xSetOp), uint16(x86_CMPSB),
- /*10107*/ uint16(x86_xMatch),
- /*10108*/ uint16(x86_xCondIs64), 10111, 10121,
- /*10111*/ uint16(x86_xCondDataSize), 10115, 10118, 0,
- /*10115*/ uint16(x86_xSetOp), uint16(x86_CMPSW),
- /*10117*/ uint16(x86_xMatch),
- /*10118*/ uint16(x86_xSetOp), uint16(x86_CMPSD),
- /*10120*/ uint16(x86_xMatch),
- /*10121*/ uint16(x86_xCondDataSize), 10115, 10118, 10125,
- /*10125*/ uint16(x86_xSetOp), uint16(x86_CMPSQ),
- /*10127*/ uint16(x86_xMatch),
- /*10128*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*10130*/ uint16(x86_xReadIb),
- /*10131*/ uint16(x86_xArgAL),
- /*10132*/ uint16(x86_xArgImm8u),
- /*10133*/ uint16(x86_xMatch),
- /*10134*/ uint16(x86_xCondIs64), 10137, 10153,
- /*10137*/ uint16(x86_xCondDataSize), 10141, 10147, 0,
- /*10141*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*10143*/ uint16(x86_xReadIw),
- /*10144*/ uint16(x86_xArgAX),
- /*10145*/ uint16(x86_xArgImm16),
- /*10146*/ uint16(x86_xMatch),
- /*10147*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*10149*/ uint16(x86_xReadId),
- /*10150*/ uint16(x86_xArgEAX),
- /*10151*/ uint16(x86_xArgImm32),
- /*10152*/ uint16(x86_xMatch),
- /*10153*/ uint16(x86_xCondDataSize), 10141, 10147, 10157,
- /*10157*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*10159*/ uint16(x86_xReadId),
- /*10160*/ uint16(x86_xArgRAX),
- /*10161*/ uint16(x86_xArgImm32),
- /*10162*/ uint16(x86_xMatch),
- /*10163*/ uint16(x86_xSetOp), uint16(x86_STOSB),
- /*10165*/ uint16(x86_xMatch),
- /*10166*/ uint16(x86_xCondIs64), 10169, 10179,
- /*10169*/ uint16(x86_xCondDataSize), 10173, 10176, 0,
- /*10173*/ uint16(x86_xSetOp), uint16(x86_STOSW),
- /*10175*/ uint16(x86_xMatch),
- /*10176*/ uint16(x86_xSetOp), uint16(x86_STOSD),
- /*10178*/ uint16(x86_xMatch),
- /*10179*/ uint16(x86_xCondDataSize), 10173, 10176, 10183,
- /*10183*/ uint16(x86_xSetOp), uint16(x86_STOSQ),
- /*10185*/ uint16(x86_xMatch),
- /*10186*/ uint16(x86_xSetOp), uint16(x86_LODSB),
- /*10188*/ uint16(x86_xMatch),
- /*10189*/ uint16(x86_xCondIs64), 10192, 10202,
- /*10192*/ uint16(x86_xCondDataSize), 10196, 10199, 0,
- /*10196*/ uint16(x86_xSetOp), uint16(x86_LODSW),
- /*10198*/ uint16(x86_xMatch),
- /*10199*/ uint16(x86_xSetOp), uint16(x86_LODSD),
- /*10201*/ uint16(x86_xMatch),
- /*10202*/ uint16(x86_xCondDataSize), 10196, 10199, 10206,
- /*10206*/ uint16(x86_xSetOp), uint16(x86_LODSQ),
- /*10208*/ uint16(x86_xMatch),
- /*10209*/ uint16(x86_xSetOp), uint16(x86_SCASB),
- /*10211*/ uint16(x86_xMatch),
- /*10212*/ uint16(x86_xCondIs64), 10215, 10225,
- /*10215*/ uint16(x86_xCondDataSize), 10219, 10222, 0,
- /*10219*/ uint16(x86_xSetOp), uint16(x86_SCASW),
- /*10221*/ uint16(x86_xMatch),
- /*10222*/ uint16(x86_xSetOp), uint16(x86_SCASD),
- /*10224*/ uint16(x86_xMatch),
- /*10225*/ uint16(x86_xCondDataSize), 10219, 10222, 10229,
- /*10229*/ uint16(x86_xSetOp), uint16(x86_SCASQ),
- /*10231*/ uint16(x86_xMatch),
- /*10232*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10234*/ uint16(x86_xReadIb),
- /*10235*/ uint16(x86_xArgR8op),
- /*10236*/ uint16(x86_xArgImm8u),
- /*10237*/ uint16(x86_xMatch),
- /*10238*/ uint16(x86_xCondIs64), 10241, 10257,
- /*10241*/ uint16(x86_xCondDataSize), 10245, 10251, 0,
- /*10245*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10247*/ uint16(x86_xReadIw),
- /*10248*/ uint16(x86_xArgR16op),
- /*10249*/ uint16(x86_xArgImm16),
- /*10250*/ uint16(x86_xMatch),
- /*10251*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10253*/ uint16(x86_xReadId),
- /*10254*/ uint16(x86_xArgR32op),
- /*10255*/ uint16(x86_xArgImm32),
- /*10256*/ uint16(x86_xMatch),
- /*10257*/ uint16(x86_xCondDataSize), 10245, 10251, 10261,
- /*10261*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10263*/ uint16(x86_xReadIo),
- /*10264*/ uint16(x86_xArgR64op),
- /*10265*/ uint16(x86_xArgImm64),
- /*10266*/ uint16(x86_xMatch),
- /*10267*/ uint16(x86_xCondSlashR),
- 10276, // 0
- 10282, // 1
- 10288, // 2
- 10294, // 3
- 10300, // 4
- 10306, // 5
- 0, // 6
- 10312, // 7
- /*10276*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*10278*/ uint16(x86_xReadIb),
- /*10279*/ uint16(x86_xArgRM8),
- /*10280*/ uint16(x86_xArgImm8u),
- /*10281*/ uint16(x86_xMatch),
- /*10282*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*10284*/ uint16(x86_xReadIb),
- /*10285*/ uint16(x86_xArgRM8),
- /*10286*/ uint16(x86_xArgImm8u),
- /*10287*/ uint16(x86_xMatch),
- /*10288*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*10290*/ uint16(x86_xReadIb),
- /*10291*/ uint16(x86_xArgRM8),
- /*10292*/ uint16(x86_xArgImm8u),
- /*10293*/ uint16(x86_xMatch),
- /*10294*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*10296*/ uint16(x86_xReadIb),
- /*10297*/ uint16(x86_xArgRM8),
- /*10298*/ uint16(x86_xArgImm8u),
- /*10299*/ uint16(x86_xMatch),
- /*10300*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*10302*/ uint16(x86_xReadIb),
- /*10303*/ uint16(x86_xArgRM8),
- /*10304*/ uint16(x86_xArgImm8u),
- /*10305*/ uint16(x86_xMatch),
- /*10306*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*10308*/ uint16(x86_xReadIb),
- /*10309*/ uint16(x86_xArgRM8),
- /*10310*/ uint16(x86_xArgImm8u),
- /*10311*/ uint16(x86_xMatch),
- /*10312*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*10314*/ uint16(x86_xReadIb),
- /*10315*/ uint16(x86_xArgRM8),
- /*10316*/ uint16(x86_xArgImm8u),
- /*10317*/ uint16(x86_xMatch),
- /*10318*/ uint16(x86_xCondSlashR),
- 10327, // 0
- 10349, // 1
- 10371, // 2
- 10400, // 3
- 10429, // 4
- 10458, // 5
- 0, // 6
- 10487, // 7
- /*10327*/ uint16(x86_xCondDataSize), 10331, 10337, 10343,
- /*10331*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*10333*/ uint16(x86_xReadIb),
- /*10334*/ uint16(x86_xArgRM16),
- /*10335*/ uint16(x86_xArgImm8u),
- /*10336*/ uint16(x86_xMatch),
- /*10337*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*10339*/ uint16(x86_xReadIb),
- /*10340*/ uint16(x86_xArgRM32),
- /*10341*/ uint16(x86_xArgImm8u),
- /*10342*/ uint16(x86_xMatch),
- /*10343*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*10345*/ uint16(x86_xReadIb),
- /*10346*/ uint16(x86_xArgRM64),
- /*10347*/ uint16(x86_xArgImm8u),
- /*10348*/ uint16(x86_xMatch),
- /*10349*/ uint16(x86_xCondDataSize), 10353, 10359, 10365,
- /*10353*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*10355*/ uint16(x86_xReadIb),
- /*10356*/ uint16(x86_xArgRM16),
- /*10357*/ uint16(x86_xArgImm8u),
- /*10358*/ uint16(x86_xMatch),
- /*10359*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*10361*/ uint16(x86_xReadIb),
- /*10362*/ uint16(x86_xArgRM32),
- /*10363*/ uint16(x86_xArgImm8u),
- /*10364*/ uint16(x86_xMatch),
- /*10365*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*10367*/ uint16(x86_xReadIb),
- /*10368*/ uint16(x86_xArgRM64),
- /*10369*/ uint16(x86_xArgImm8u),
- /*10370*/ uint16(x86_xMatch),
- /*10371*/ uint16(x86_xCondIs64), 10374, 10390,
- /*10374*/ uint16(x86_xCondDataSize), 10378, 10384, 0,
- /*10378*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*10380*/ uint16(x86_xReadIb),
- /*10381*/ uint16(x86_xArgRM16),
- /*10382*/ uint16(x86_xArgImm8u),
- /*10383*/ uint16(x86_xMatch),
- /*10384*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*10386*/ uint16(x86_xReadIb),
- /*10387*/ uint16(x86_xArgRM32),
- /*10388*/ uint16(x86_xArgImm8u),
- /*10389*/ uint16(x86_xMatch),
- /*10390*/ uint16(x86_xCondDataSize), 10378, 10384, 10394,
- /*10394*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*10396*/ uint16(x86_xReadIb),
- /*10397*/ uint16(x86_xArgRM64),
- /*10398*/ uint16(x86_xArgImm8u),
- /*10399*/ uint16(x86_xMatch),
- /*10400*/ uint16(x86_xCondIs64), 10403, 10419,
- /*10403*/ uint16(x86_xCondDataSize), 10407, 10413, 0,
- /*10407*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*10409*/ uint16(x86_xReadIb),
- /*10410*/ uint16(x86_xArgRM16),
- /*10411*/ uint16(x86_xArgImm8u),
- /*10412*/ uint16(x86_xMatch),
- /*10413*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*10415*/ uint16(x86_xReadIb),
- /*10416*/ uint16(x86_xArgRM32),
- /*10417*/ uint16(x86_xArgImm8u),
- /*10418*/ uint16(x86_xMatch),
- /*10419*/ uint16(x86_xCondDataSize), 10407, 10413, 10423,
- /*10423*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*10425*/ uint16(x86_xReadIb),
- /*10426*/ uint16(x86_xArgRM64),
- /*10427*/ uint16(x86_xArgImm8u),
- /*10428*/ uint16(x86_xMatch),
- /*10429*/ uint16(x86_xCondIs64), 10432, 10448,
- /*10432*/ uint16(x86_xCondDataSize), 10436, 10442, 0,
- /*10436*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*10438*/ uint16(x86_xReadIb),
- /*10439*/ uint16(x86_xArgRM16),
- /*10440*/ uint16(x86_xArgImm8u),
- /*10441*/ uint16(x86_xMatch),
- /*10442*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*10444*/ uint16(x86_xReadIb),
- /*10445*/ uint16(x86_xArgRM32),
- /*10446*/ uint16(x86_xArgImm8u),
- /*10447*/ uint16(x86_xMatch),
- /*10448*/ uint16(x86_xCondDataSize), 10436, 10442, 10452,
- /*10452*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*10454*/ uint16(x86_xReadIb),
- /*10455*/ uint16(x86_xArgRM64),
- /*10456*/ uint16(x86_xArgImm8u),
- /*10457*/ uint16(x86_xMatch),
- /*10458*/ uint16(x86_xCondIs64), 10461, 10477,
- /*10461*/ uint16(x86_xCondDataSize), 10465, 10471, 0,
- /*10465*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*10467*/ uint16(x86_xReadIb),
- /*10468*/ uint16(x86_xArgRM16),
- /*10469*/ uint16(x86_xArgImm8u),
- /*10470*/ uint16(x86_xMatch),
- /*10471*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*10473*/ uint16(x86_xReadIb),
- /*10474*/ uint16(x86_xArgRM32),
- /*10475*/ uint16(x86_xArgImm8u),
- /*10476*/ uint16(x86_xMatch),
- /*10477*/ uint16(x86_xCondDataSize), 10465, 10471, 10481,
- /*10481*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*10483*/ uint16(x86_xReadIb),
- /*10484*/ uint16(x86_xArgRM64),
- /*10485*/ uint16(x86_xArgImm8u),
- /*10486*/ uint16(x86_xMatch),
- /*10487*/ uint16(x86_xCondIs64), 10490, 10506,
- /*10490*/ uint16(x86_xCondDataSize), 10494, 10500, 0,
- /*10494*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*10496*/ uint16(x86_xReadIb),
- /*10497*/ uint16(x86_xArgRM16),
- /*10498*/ uint16(x86_xArgImm8u),
- /*10499*/ uint16(x86_xMatch),
- /*10500*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*10502*/ uint16(x86_xReadIb),
- /*10503*/ uint16(x86_xArgRM32),
- /*10504*/ uint16(x86_xArgImm8u),
- /*10505*/ uint16(x86_xMatch),
- /*10506*/ uint16(x86_xCondDataSize), 10494, 10500, 10510,
- /*10510*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*10512*/ uint16(x86_xReadIb),
- /*10513*/ uint16(x86_xArgRM64),
- /*10514*/ uint16(x86_xArgImm8u),
- /*10515*/ uint16(x86_xMatch),
- /*10516*/ uint16(x86_xSetOp), uint16(x86_RET),
- /*10518*/ uint16(x86_xReadIw),
- /*10519*/ uint16(x86_xArgImm16u),
- /*10520*/ uint16(x86_xMatch),
- /*10521*/ uint16(x86_xSetOp), uint16(x86_RET),
- /*10523*/ uint16(x86_xMatch),
- /*10524*/ uint16(x86_xCondIs64), 10527, 0,
- /*10527*/ uint16(x86_xCondDataSize), 10531, 10537, 0,
- /*10531*/ uint16(x86_xSetOp), uint16(x86_LES),
- /*10533*/ uint16(x86_xReadSlashR),
- /*10534*/ uint16(x86_xArgR16),
- /*10535*/ uint16(x86_xArgM16colon16),
- /*10536*/ uint16(x86_xMatch),
- /*10537*/ uint16(x86_xSetOp), uint16(x86_LES),
- /*10539*/ uint16(x86_xReadSlashR),
- /*10540*/ uint16(x86_xArgR32),
- /*10541*/ uint16(x86_xArgM16colon32),
- /*10542*/ uint16(x86_xMatch),
- /*10543*/ uint16(x86_xCondIs64), 10546, 0,
- /*10546*/ uint16(x86_xCondDataSize), 10550, 10556, 0,
- /*10550*/ uint16(x86_xSetOp), uint16(x86_LDS),
- /*10552*/ uint16(x86_xReadSlashR),
- /*10553*/ uint16(x86_xArgR16),
- /*10554*/ uint16(x86_xArgM16colon16),
- /*10555*/ uint16(x86_xMatch),
- /*10556*/ uint16(x86_xSetOp), uint16(x86_LDS),
- /*10558*/ uint16(x86_xReadSlashR),
- /*10559*/ uint16(x86_xArgR32),
- /*10560*/ uint16(x86_xArgM16colon32),
- /*10561*/ uint16(x86_xMatch),
- /*10562*/ uint16(x86_xCondByte), 1,
- 0xF8, 10581,
- /*10566*/ uint16(x86_xCondSlashR),
- 10575, // 0
- 0, // 1
- 0, // 2
- 0, // 3
- 0, // 4
- 0, // 5
- 0, // 6
- 0, // 7
- /*10575*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10577*/ uint16(x86_xReadIb),
- /*10578*/ uint16(x86_xArgRM8),
- /*10579*/ uint16(x86_xArgImm8u),
- /*10580*/ uint16(x86_xMatch),
- /*10581*/ uint16(x86_xSetOp), uint16(x86_XABORT),
- /*10583*/ uint16(x86_xReadIb),
- /*10584*/ uint16(x86_xArgImm8u),
- /*10585*/ uint16(x86_xMatch),
- /*10586*/ uint16(x86_xCondByte), 1,
- 0xF8, 10628,
- /*10590*/ uint16(x86_xCondSlashR),
- 10599, // 0
- 0, // 1
- 0, // 2
- 0, // 3
- 0, // 4
- 0, // 5
- 0, // 6
- 0, // 7
- /*10599*/ uint16(x86_xCondIs64), 10602, 10618,
- /*10602*/ uint16(x86_xCondDataSize), 10606, 10612, 0,
- /*10606*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10608*/ uint16(x86_xReadIw),
- /*10609*/ uint16(x86_xArgRM16),
- /*10610*/ uint16(x86_xArgImm16),
- /*10611*/ uint16(x86_xMatch),
- /*10612*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10614*/ uint16(x86_xReadId),
- /*10615*/ uint16(x86_xArgRM32),
- /*10616*/ uint16(x86_xArgImm32),
- /*10617*/ uint16(x86_xMatch),
- /*10618*/ uint16(x86_xCondDataSize), 10606, 10612, 10622,
- /*10622*/ uint16(x86_xSetOp), uint16(x86_MOV),
- /*10624*/ uint16(x86_xReadId),
- /*10625*/ uint16(x86_xArgRM64),
- /*10626*/ uint16(x86_xArgImm32),
- /*10627*/ uint16(x86_xMatch),
- /*10628*/ uint16(x86_xCondDataSize), 10632, 10637, 10642,
- /*10632*/ uint16(x86_xSetOp), uint16(x86_XBEGIN),
- /*10634*/ uint16(x86_xReadCw),
- /*10635*/ uint16(x86_xArgRel16),
- /*10636*/ uint16(x86_xMatch),
- /*10637*/ uint16(x86_xSetOp), uint16(x86_XBEGIN),
- /*10639*/ uint16(x86_xReadCd),
- /*10640*/ uint16(x86_xArgRel32),
- /*10641*/ uint16(x86_xMatch),
- /*10642*/ uint16(x86_xSetOp), uint16(x86_XBEGIN),
- /*10644*/ uint16(x86_xReadCd),
- /*10645*/ uint16(x86_xArgRel32),
- /*10646*/ uint16(x86_xMatch),
- /*10647*/ uint16(x86_xSetOp), uint16(x86_ENTER),
- /*10649*/ uint16(x86_xReadIw),
- /*10650*/ uint16(x86_xReadIb),
- /*10651*/ uint16(x86_xArgImm16u),
- /*10652*/ uint16(x86_xArgImm8u),
- /*10653*/ uint16(x86_xMatch),
- /*10654*/ uint16(x86_xCondIs64), 10657, 10667,
- /*10657*/ uint16(x86_xCondDataSize), 10661, 10664, 0,
- /*10661*/ uint16(x86_xSetOp), uint16(x86_LEAVE),
- /*10663*/ uint16(x86_xMatch),
- /*10664*/ uint16(x86_xSetOp), uint16(x86_LEAVE),
- /*10666*/ uint16(x86_xMatch),
- /*10667*/ uint16(x86_xCondDataSize), 10661, 10671, 10674,
- /*10671*/ uint16(x86_xSetOp), uint16(x86_LEAVE),
- /*10673*/ uint16(x86_xMatch),
- /*10674*/ uint16(x86_xSetOp), uint16(x86_LEAVE),
- /*10676*/ uint16(x86_xMatch),
- /*10677*/ uint16(x86_xSetOp), uint16(x86_LRET),
- /*10679*/ uint16(x86_xReadIw),
- /*10680*/ uint16(x86_xArgImm16u),
- /*10681*/ uint16(x86_xMatch),
- /*10682*/ uint16(x86_xSetOp), uint16(x86_LRET),
- /*10684*/ uint16(x86_xMatch),
- /*10685*/ uint16(x86_xSetOp), uint16(x86_INT),
- /*10687*/ uint16(x86_xArg3),
- /*10688*/ uint16(x86_xMatch),
- /*10689*/ uint16(x86_xSetOp), uint16(x86_INT),
- /*10691*/ uint16(x86_xReadIb),
- /*10692*/ uint16(x86_xArgImm8u),
- /*10693*/ uint16(x86_xMatch),
- /*10694*/ uint16(x86_xCondIs64), 10697, 0,
- /*10697*/ uint16(x86_xSetOp), uint16(x86_INTO),
- /*10699*/ uint16(x86_xMatch),
- /*10700*/ uint16(x86_xCondIs64), 10703, 10713,
- /*10703*/ uint16(x86_xCondDataSize), 10707, 10710, 0,
- /*10707*/ uint16(x86_xSetOp), uint16(x86_IRET),
- /*10709*/ uint16(x86_xMatch),
- /*10710*/ uint16(x86_xSetOp), uint16(x86_IRETD),
- /*10712*/ uint16(x86_xMatch),
- /*10713*/ uint16(x86_xCondDataSize), 10707, 10710, 10717,
- /*10717*/ uint16(x86_xSetOp), uint16(x86_IRETQ),
- /*10719*/ uint16(x86_xMatch),
- /*10720*/ uint16(x86_xCondSlashR),
- 10729, // 0
- 10734, // 1
- 10739, // 2
- 10744, // 3
- 10749, // 4
- 10754, // 5
- 0, // 6
- 10759, // 7
- /*10729*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*10731*/ uint16(x86_xArgRM8),
- /*10732*/ uint16(x86_xArg1),
- /*10733*/ uint16(x86_xMatch),
- /*10734*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*10736*/ uint16(x86_xArgRM8),
- /*10737*/ uint16(x86_xArg1),
- /*10738*/ uint16(x86_xMatch),
- /*10739*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*10741*/ uint16(x86_xArgRM8),
- /*10742*/ uint16(x86_xArg1),
- /*10743*/ uint16(x86_xMatch),
- /*10744*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*10746*/ uint16(x86_xArgRM8),
- /*10747*/ uint16(x86_xArg1),
- /*10748*/ uint16(x86_xMatch),
- /*10749*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*10751*/ uint16(x86_xArgRM8),
- /*10752*/ uint16(x86_xArg1),
- /*10753*/ uint16(x86_xMatch),
- /*10754*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*10756*/ uint16(x86_xArgRM8),
- /*10757*/ uint16(x86_xArg1),
- /*10758*/ uint16(x86_xMatch),
- /*10759*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*10761*/ uint16(x86_xArgRM8),
- /*10762*/ uint16(x86_xArg1),
- /*10763*/ uint16(x86_xMatch),
- /*10764*/ uint16(x86_xCondSlashR),
- 10773, // 0
- 10799, // 1
- 10825, // 2
- 10851, // 3
- 10877, // 4
- 10903, // 5
- 0, // 6
- 10929, // 7
- /*10773*/ uint16(x86_xCondIs64), 10776, 10790,
- /*10776*/ uint16(x86_xCondDataSize), 10780, 10785, 0,
- /*10780*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*10782*/ uint16(x86_xArgRM16),
- /*10783*/ uint16(x86_xArg1),
- /*10784*/ uint16(x86_xMatch),
- /*10785*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*10787*/ uint16(x86_xArgRM32),
- /*10788*/ uint16(x86_xArg1),
- /*10789*/ uint16(x86_xMatch),
- /*10790*/ uint16(x86_xCondDataSize), 10780, 10785, 10794,
- /*10794*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*10796*/ uint16(x86_xArgRM64),
- /*10797*/ uint16(x86_xArg1),
- /*10798*/ uint16(x86_xMatch),
- /*10799*/ uint16(x86_xCondIs64), 10802, 10816,
- /*10802*/ uint16(x86_xCondDataSize), 10806, 10811, 0,
- /*10806*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*10808*/ uint16(x86_xArgRM16),
- /*10809*/ uint16(x86_xArg1),
- /*10810*/ uint16(x86_xMatch),
- /*10811*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*10813*/ uint16(x86_xArgRM32),
- /*10814*/ uint16(x86_xArg1),
- /*10815*/ uint16(x86_xMatch),
- /*10816*/ uint16(x86_xCondDataSize), 10806, 10811, 10820,
- /*10820*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*10822*/ uint16(x86_xArgRM64),
- /*10823*/ uint16(x86_xArg1),
- /*10824*/ uint16(x86_xMatch),
- /*10825*/ uint16(x86_xCondIs64), 10828, 10842,
- /*10828*/ uint16(x86_xCondDataSize), 10832, 10837, 0,
- /*10832*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*10834*/ uint16(x86_xArgRM16),
- /*10835*/ uint16(x86_xArg1),
- /*10836*/ uint16(x86_xMatch),
- /*10837*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*10839*/ uint16(x86_xArgRM32),
- /*10840*/ uint16(x86_xArg1),
- /*10841*/ uint16(x86_xMatch),
- /*10842*/ uint16(x86_xCondDataSize), 10832, 10837, 10846,
- /*10846*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*10848*/ uint16(x86_xArgRM64),
- /*10849*/ uint16(x86_xArg1),
- /*10850*/ uint16(x86_xMatch),
- /*10851*/ uint16(x86_xCondIs64), 10854, 10868,
- /*10854*/ uint16(x86_xCondDataSize), 10858, 10863, 0,
- /*10858*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*10860*/ uint16(x86_xArgRM16),
- /*10861*/ uint16(x86_xArg1),
- /*10862*/ uint16(x86_xMatch),
- /*10863*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*10865*/ uint16(x86_xArgRM32),
- /*10866*/ uint16(x86_xArg1),
- /*10867*/ uint16(x86_xMatch),
- /*10868*/ uint16(x86_xCondDataSize), 10858, 10863, 10872,
- /*10872*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*10874*/ uint16(x86_xArgRM64),
- /*10875*/ uint16(x86_xArg1),
- /*10876*/ uint16(x86_xMatch),
- /*10877*/ uint16(x86_xCondIs64), 10880, 10894,
- /*10880*/ uint16(x86_xCondDataSize), 10884, 10889, 0,
- /*10884*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*10886*/ uint16(x86_xArgRM16),
- /*10887*/ uint16(x86_xArg1),
- /*10888*/ uint16(x86_xMatch),
- /*10889*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*10891*/ uint16(x86_xArgRM32),
- /*10892*/ uint16(x86_xArg1),
- /*10893*/ uint16(x86_xMatch),
- /*10894*/ uint16(x86_xCondDataSize), 10884, 10889, 10898,
- /*10898*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*10900*/ uint16(x86_xArgRM64),
- /*10901*/ uint16(x86_xArg1),
- /*10902*/ uint16(x86_xMatch),
- /*10903*/ uint16(x86_xCondIs64), 10906, 10920,
- /*10906*/ uint16(x86_xCondDataSize), 10910, 10915, 0,
- /*10910*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*10912*/ uint16(x86_xArgRM16),
- /*10913*/ uint16(x86_xArg1),
- /*10914*/ uint16(x86_xMatch),
- /*10915*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*10917*/ uint16(x86_xArgRM32),
- /*10918*/ uint16(x86_xArg1),
- /*10919*/ uint16(x86_xMatch),
- /*10920*/ uint16(x86_xCondDataSize), 10910, 10915, 10924,
- /*10924*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*10926*/ uint16(x86_xArgRM64),
- /*10927*/ uint16(x86_xArg1),
- /*10928*/ uint16(x86_xMatch),
- /*10929*/ uint16(x86_xCondIs64), 10932, 10946,
- /*10932*/ uint16(x86_xCondDataSize), 10936, 10941, 0,
- /*10936*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*10938*/ uint16(x86_xArgRM16),
- /*10939*/ uint16(x86_xArg1),
- /*10940*/ uint16(x86_xMatch),
- /*10941*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*10943*/ uint16(x86_xArgRM32),
- /*10944*/ uint16(x86_xArg1),
- /*10945*/ uint16(x86_xMatch),
- /*10946*/ uint16(x86_xCondDataSize), 10936, 10941, 10950,
- /*10950*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*10952*/ uint16(x86_xArgRM64),
- /*10953*/ uint16(x86_xArg1),
- /*10954*/ uint16(x86_xMatch),
- /*10955*/ uint16(x86_xCondSlashR),
- 10964, // 0
- 10969, // 1
- 10974, // 2
- 10979, // 3
- 10984, // 4
- 10989, // 5
- 0, // 6
- 10994, // 7
- /*10964*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*10966*/ uint16(x86_xArgRM8),
- /*10967*/ uint16(x86_xArgCL),
- /*10968*/ uint16(x86_xMatch),
- /*10969*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*10971*/ uint16(x86_xArgRM8),
- /*10972*/ uint16(x86_xArgCL),
- /*10973*/ uint16(x86_xMatch),
- /*10974*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*10976*/ uint16(x86_xArgRM8),
- /*10977*/ uint16(x86_xArgCL),
- /*10978*/ uint16(x86_xMatch),
- /*10979*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*10981*/ uint16(x86_xArgRM8),
- /*10982*/ uint16(x86_xArgCL),
- /*10983*/ uint16(x86_xMatch),
- /*10984*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*10986*/ uint16(x86_xArgRM8),
- /*10987*/ uint16(x86_xArgCL),
- /*10988*/ uint16(x86_xMatch),
- /*10989*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*10991*/ uint16(x86_xArgRM8),
- /*10992*/ uint16(x86_xArgCL),
- /*10993*/ uint16(x86_xMatch),
- /*10994*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*10996*/ uint16(x86_xArgRM8),
- /*10997*/ uint16(x86_xArgCL),
- /*10998*/ uint16(x86_xMatch),
- /*10999*/ uint16(x86_xCondSlashR),
- 11008, // 0
- 11034, // 1
- 11060, // 2
- 11086, // 3
- 11112, // 4
- 11138, // 5
- 0, // 6
- 11164, // 7
- /*11008*/ uint16(x86_xCondIs64), 11011, 11025,
- /*11011*/ uint16(x86_xCondDataSize), 11015, 11020, 0,
- /*11015*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*11017*/ uint16(x86_xArgRM16),
- /*11018*/ uint16(x86_xArgCL),
- /*11019*/ uint16(x86_xMatch),
- /*11020*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*11022*/ uint16(x86_xArgRM32),
- /*11023*/ uint16(x86_xArgCL),
- /*11024*/ uint16(x86_xMatch),
- /*11025*/ uint16(x86_xCondDataSize), 11015, 11020, 11029,
- /*11029*/ uint16(x86_xSetOp), uint16(x86_ROL),
- /*11031*/ uint16(x86_xArgRM64),
- /*11032*/ uint16(x86_xArgCL),
- /*11033*/ uint16(x86_xMatch),
- /*11034*/ uint16(x86_xCondIs64), 11037, 11051,
- /*11037*/ uint16(x86_xCondDataSize), 11041, 11046, 0,
- /*11041*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*11043*/ uint16(x86_xArgRM16),
- /*11044*/ uint16(x86_xArgCL),
- /*11045*/ uint16(x86_xMatch),
- /*11046*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*11048*/ uint16(x86_xArgRM32),
- /*11049*/ uint16(x86_xArgCL),
- /*11050*/ uint16(x86_xMatch),
- /*11051*/ uint16(x86_xCondDataSize), 11041, 11046, 11055,
- /*11055*/ uint16(x86_xSetOp), uint16(x86_ROR),
- /*11057*/ uint16(x86_xArgRM64),
- /*11058*/ uint16(x86_xArgCL),
- /*11059*/ uint16(x86_xMatch),
- /*11060*/ uint16(x86_xCondIs64), 11063, 11077,
- /*11063*/ uint16(x86_xCondDataSize), 11067, 11072, 0,
- /*11067*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*11069*/ uint16(x86_xArgRM16),
- /*11070*/ uint16(x86_xArgCL),
- /*11071*/ uint16(x86_xMatch),
- /*11072*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*11074*/ uint16(x86_xArgRM32),
- /*11075*/ uint16(x86_xArgCL),
- /*11076*/ uint16(x86_xMatch),
- /*11077*/ uint16(x86_xCondDataSize), 11067, 11072, 11081,
- /*11081*/ uint16(x86_xSetOp), uint16(x86_RCL),
- /*11083*/ uint16(x86_xArgRM64),
- /*11084*/ uint16(x86_xArgCL),
- /*11085*/ uint16(x86_xMatch),
- /*11086*/ uint16(x86_xCondIs64), 11089, 11103,
- /*11089*/ uint16(x86_xCondDataSize), 11093, 11098, 0,
- /*11093*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*11095*/ uint16(x86_xArgRM16),
- /*11096*/ uint16(x86_xArgCL),
- /*11097*/ uint16(x86_xMatch),
- /*11098*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*11100*/ uint16(x86_xArgRM32),
- /*11101*/ uint16(x86_xArgCL),
- /*11102*/ uint16(x86_xMatch),
- /*11103*/ uint16(x86_xCondDataSize), 11093, 11098, 11107,
- /*11107*/ uint16(x86_xSetOp), uint16(x86_RCR),
- /*11109*/ uint16(x86_xArgRM64),
- /*11110*/ uint16(x86_xArgCL),
- /*11111*/ uint16(x86_xMatch),
- /*11112*/ uint16(x86_xCondIs64), 11115, 11129,
- /*11115*/ uint16(x86_xCondDataSize), 11119, 11124, 0,
- /*11119*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*11121*/ uint16(x86_xArgRM16),
- /*11122*/ uint16(x86_xArgCL),
- /*11123*/ uint16(x86_xMatch),
- /*11124*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*11126*/ uint16(x86_xArgRM32),
- /*11127*/ uint16(x86_xArgCL),
- /*11128*/ uint16(x86_xMatch),
- /*11129*/ uint16(x86_xCondDataSize), 11119, 11124, 11133,
- /*11133*/ uint16(x86_xSetOp), uint16(x86_SHL),
- /*11135*/ uint16(x86_xArgRM64),
- /*11136*/ uint16(x86_xArgCL),
- /*11137*/ uint16(x86_xMatch),
- /*11138*/ uint16(x86_xCondIs64), 11141, 11155,
- /*11141*/ uint16(x86_xCondDataSize), 11145, 11150, 0,
- /*11145*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*11147*/ uint16(x86_xArgRM16),
- /*11148*/ uint16(x86_xArgCL),
- /*11149*/ uint16(x86_xMatch),
- /*11150*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*11152*/ uint16(x86_xArgRM32),
- /*11153*/ uint16(x86_xArgCL),
- /*11154*/ uint16(x86_xMatch),
- /*11155*/ uint16(x86_xCondDataSize), 11145, 11150, 11159,
- /*11159*/ uint16(x86_xSetOp), uint16(x86_SHR),
- /*11161*/ uint16(x86_xArgRM64),
- /*11162*/ uint16(x86_xArgCL),
- /*11163*/ uint16(x86_xMatch),
- /*11164*/ uint16(x86_xCondIs64), 11167, 11181,
- /*11167*/ uint16(x86_xCondDataSize), 11171, 11176, 0,
- /*11171*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*11173*/ uint16(x86_xArgRM16),
- /*11174*/ uint16(x86_xArgCL),
- /*11175*/ uint16(x86_xMatch),
- /*11176*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*11178*/ uint16(x86_xArgRM32),
- /*11179*/ uint16(x86_xArgCL),
- /*11180*/ uint16(x86_xMatch),
- /*11181*/ uint16(x86_xCondDataSize), 11171, 11176, 11185,
- /*11185*/ uint16(x86_xSetOp), uint16(x86_SAR),
- /*11187*/ uint16(x86_xArgRM64),
- /*11188*/ uint16(x86_xArgCL),
- /*11189*/ uint16(x86_xMatch),
- /*11190*/ uint16(x86_xCondIs64), 11193, 0,
- /*11193*/ uint16(x86_xSetOp), uint16(x86_AAM),
- /*11195*/ uint16(x86_xReadIb),
- /*11196*/ uint16(x86_xArgImm8u),
- /*11197*/ uint16(x86_xMatch),
- /*11198*/ uint16(x86_xCondIs64), 11201, 0,
- /*11201*/ uint16(x86_xSetOp), uint16(x86_AAD),
- /*11203*/ uint16(x86_xReadIb),
- /*11204*/ uint16(x86_xArgImm8u),
- /*11205*/ uint16(x86_xMatch),
- /*11206*/ uint16(x86_xCondIs64), 11209, 11212,
- /*11209*/ uint16(x86_xSetOp), uint16(x86_XLATB),
- /*11211*/ uint16(x86_xMatch),
- /*11212*/ uint16(x86_xCondDataSize), 11209, 11209, 11216,
- /*11216*/ uint16(x86_xSetOp), uint16(x86_XLATB),
- /*11218*/ uint16(x86_xMatch),
- /*11219*/ uint16(x86_xCondByte), 64,
- 0xc0, 11390,
- 0xc1, 11390,
- 0xc2, 11390,
- 0xc3, 11390,
- 0xc4, 11390,
- 0xc5, 11390,
- 0xc6, 11390,
- 0xc7, 11390,
- 0xc8, 11395,
- 0xc9, 11395,
- 0xca, 11395,
- 0xcb, 11395,
- 0xcc, 11395,
- 0xcd, 11395,
- 0xce, 11395,
- 0xcf, 11395,
- 0xd0, 11400,
- 0xd1, 11400,
- 0xd2, 11400,
- 0xd3, 11400,
- 0xd4, 11400,
- 0xd5, 11400,
- 0xd6, 11400,
- 0xd7, 11400,
- 0xd8, 11404,
- 0xd9, 11404,
- 0xda, 11404,
- 0xdb, 11404,
- 0xdc, 11404,
- 0xdd, 11404,
- 0xde, 11404,
- 0xdf, 11404,
- 0xe0, 11408,
- 0xe1, 11408,
- 0xe2, 11408,
- 0xe3, 11408,
- 0xe4, 11408,
- 0xe5, 11408,
- 0xe6, 11408,
- 0xe7, 11408,
- 0xe8, 11413,
- 0xe9, 11413,
- 0xea, 11413,
- 0xeb, 11413,
- 0xec, 11413,
- 0xed, 11413,
- 0xee, 11413,
- 0xef, 11413,
- 0xf0, 11418,
- 0xf1, 11418,
- 0xf2, 11418,
- 0xf3, 11418,
- 0xf4, 11418,
- 0xf5, 11418,
- 0xf6, 11418,
- 0xf7, 11418,
- 0xf8, 11423,
- 0xf9, 11423,
- 0xfa, 11423,
- 0xfb, 11423,
- 0xfc, 11423,
- 0xfd, 11423,
- 0xfe, 11423,
- 0xff, 11423,
- /*11349*/ uint16(x86_xCondSlashR),
- 11358, // 0
- 11362, // 1
- 11366, // 2
- 11370, // 3
- 11374, // 4
- 11378, // 5
- 11382, // 6
- 11386, // 7
- /*11358*/ uint16(x86_xSetOp), uint16(x86_FADD),
- /*11360*/ uint16(x86_xArgM32fp),
- /*11361*/ uint16(x86_xMatch),
- /*11362*/ uint16(x86_xSetOp), uint16(x86_FMUL),
- /*11364*/ uint16(x86_xArgM32fp),
- /*11365*/ uint16(x86_xMatch),
- /*11366*/ uint16(x86_xSetOp), uint16(x86_FCOM),
- /*11368*/ uint16(x86_xArgM32fp),
- /*11369*/ uint16(x86_xMatch),
- /*11370*/ uint16(x86_xSetOp), uint16(x86_FCOMP),
- /*11372*/ uint16(x86_xArgM32fp),
- /*11373*/ uint16(x86_xMatch),
- /*11374*/ uint16(x86_xSetOp), uint16(x86_FSUB),
- /*11376*/ uint16(x86_xArgM32fp),
- /*11377*/ uint16(x86_xMatch),
- /*11378*/ uint16(x86_xSetOp), uint16(x86_FSUBR),
- /*11380*/ uint16(x86_xArgM32fp),
- /*11381*/ uint16(x86_xMatch),
- /*11382*/ uint16(x86_xSetOp), uint16(x86_FDIV),
- /*11384*/ uint16(x86_xArgM32fp),
- /*11385*/ uint16(x86_xMatch),
- /*11386*/ uint16(x86_xSetOp), uint16(x86_FDIVR),
- /*11388*/ uint16(x86_xArgM32fp),
- /*11389*/ uint16(x86_xMatch),
- /*11390*/ uint16(x86_xSetOp), uint16(x86_FADD),
- /*11392*/ uint16(x86_xArgST),
- /*11393*/ uint16(x86_xArgSTi),
- /*11394*/ uint16(x86_xMatch),
- /*11395*/ uint16(x86_xSetOp), uint16(x86_FMUL),
- /*11397*/ uint16(x86_xArgST),
- /*11398*/ uint16(x86_xArgSTi),
- /*11399*/ uint16(x86_xMatch),
- /*11400*/ uint16(x86_xSetOp), uint16(x86_FCOM),
- /*11402*/ uint16(x86_xArgSTi),
- /*11403*/ uint16(x86_xMatch),
- /*11404*/ uint16(x86_xSetOp), uint16(x86_FCOMP),
- /*11406*/ uint16(x86_xArgSTi),
- /*11407*/ uint16(x86_xMatch),
- /*11408*/ uint16(x86_xSetOp), uint16(x86_FSUB),
- /*11410*/ uint16(x86_xArgST),
- /*11411*/ uint16(x86_xArgSTi),
- /*11412*/ uint16(x86_xMatch),
- /*11413*/ uint16(x86_xSetOp), uint16(x86_FSUBR),
- /*11415*/ uint16(x86_xArgST),
- /*11416*/ uint16(x86_xArgSTi),
- /*11417*/ uint16(x86_xMatch),
- /*11418*/ uint16(x86_xSetOp), uint16(x86_FDIV),
- /*11420*/ uint16(x86_xArgST),
- /*11421*/ uint16(x86_xArgSTi),
- /*11422*/ uint16(x86_xMatch),
- /*11423*/ uint16(x86_xSetOp), uint16(x86_FDIVR),
- /*11425*/ uint16(x86_xArgST),
- /*11426*/ uint16(x86_xArgSTi),
- /*11427*/ uint16(x86_xMatch),
- /*11428*/ uint16(x86_xCondByte), 42,
- 0xc0, 11551,
- 0xc1, 11551,
- 0xc2, 11551,
- 0xc3, 11551,
- 0xc4, 11551,
- 0xc5, 11551,
- 0xc6, 11551,
- 0xc7, 11551,
- 0xc8, 11555,
- 0xc9, 11555,
- 0xca, 11555,
- 0xcb, 11555,
- 0xcc, 11555,
- 0xcd, 11555,
- 0xce, 11555,
- 0xcf, 11555,
- 0xD0, 11559,
- 0xE0, 11562,
- 0xE1, 11565,
- 0xE4, 11568,
- 0xE5, 11571,
- 0xE8, 11574,
- 0xE9, 11577,
- 0xEA, 11580,
- 0xEB, 11583,
- 0xEC, 11586,
- 0xF0, 11589,
- 0xF1, 11592,
- 0xF2, 11595,
- 0xF3, 11598,
- 0xF4, 11601,
- 0xF5, 11604,
- 0xF6, 11607,
- 0xF7, 11610,
- 0xF8, 11613,
- 0xF9, 11616,
- 0xFA, 11619,
- 0xFB, 11622,
- 0xFC, 11625,
- 0xFD, 11628,
- 0xFE, 11631,
- 0xFF, 11634,
- /*11514*/ uint16(x86_xCondSlashR),
- 11523, // 0
- 0, // 1
- 11527, // 2
- 11531, // 3
- 11535, // 4
- 11539, // 5
- 11543, // 6
- 11547, // 7
- /*11523*/ uint16(x86_xSetOp), uint16(x86_FLD),
- /*11525*/ uint16(x86_xArgM32fp),
- /*11526*/ uint16(x86_xMatch),
- /*11527*/ uint16(x86_xSetOp), uint16(x86_FST),
- /*11529*/ uint16(x86_xArgM32fp),
- /*11530*/ uint16(x86_xMatch),
- /*11531*/ uint16(x86_xSetOp), uint16(x86_FSTP),
- /*11533*/ uint16(x86_xArgM32fp),
- /*11534*/ uint16(x86_xMatch),
- /*11535*/ uint16(x86_xSetOp), uint16(x86_FLDENV),
- /*11537*/ uint16(x86_xArgM1428byte),
- /*11538*/ uint16(x86_xMatch),
- /*11539*/ uint16(x86_xSetOp), uint16(x86_FLDCW),
- /*11541*/ uint16(x86_xArgM2byte),
- /*11542*/ uint16(x86_xMatch),
- /*11543*/ uint16(x86_xSetOp), uint16(x86_FNSTENV),
- /*11545*/ uint16(x86_xArgM1428byte),
- /*11546*/ uint16(x86_xMatch),
- /*11547*/ uint16(x86_xSetOp), uint16(x86_FNSTCW),
- /*11549*/ uint16(x86_xArgM2byte),
- /*11550*/ uint16(x86_xMatch),
- /*11551*/ uint16(x86_xSetOp), uint16(x86_FLD),
- /*11553*/ uint16(x86_xArgSTi),
- /*11554*/ uint16(x86_xMatch),
- /*11555*/ uint16(x86_xSetOp), uint16(x86_FXCH),
- /*11557*/ uint16(x86_xArgSTi),
- /*11558*/ uint16(x86_xMatch),
- /*11559*/ uint16(x86_xSetOp), uint16(x86_FNOP),
- /*11561*/ uint16(x86_xMatch),
- /*11562*/ uint16(x86_xSetOp), uint16(x86_FCHS),
- /*11564*/ uint16(x86_xMatch),
- /*11565*/ uint16(x86_xSetOp), uint16(x86_FABS),
- /*11567*/ uint16(x86_xMatch),
- /*11568*/ uint16(x86_xSetOp), uint16(x86_FTST),
- /*11570*/ uint16(x86_xMatch),
- /*11571*/ uint16(x86_xSetOp), uint16(x86_FXAM),
- /*11573*/ uint16(x86_xMatch),
- /*11574*/ uint16(x86_xSetOp), uint16(x86_FLD1),
- /*11576*/ uint16(x86_xMatch),
- /*11577*/ uint16(x86_xSetOp), uint16(x86_FLDL2T),
- /*11579*/ uint16(x86_xMatch),
- /*11580*/ uint16(x86_xSetOp), uint16(x86_FLDL2E),
- /*11582*/ uint16(x86_xMatch),
- /*11583*/ uint16(x86_xSetOp), uint16(x86_FLDPI),
- /*11585*/ uint16(x86_xMatch),
- /*11586*/ uint16(x86_xSetOp), uint16(x86_FLDLG2),
- /*11588*/ uint16(x86_xMatch),
- /*11589*/ uint16(x86_xSetOp), uint16(x86_F2XM1),
- /*11591*/ uint16(x86_xMatch),
- /*11592*/ uint16(x86_xSetOp), uint16(x86_FYL2X),
- /*11594*/ uint16(x86_xMatch),
- /*11595*/ uint16(x86_xSetOp), uint16(x86_FPTAN),
- /*11597*/ uint16(x86_xMatch),
- /*11598*/ uint16(x86_xSetOp), uint16(x86_FPATAN),
- /*11600*/ uint16(x86_xMatch),
- /*11601*/ uint16(x86_xSetOp), uint16(x86_FXTRACT),
- /*11603*/ uint16(x86_xMatch),
- /*11604*/ uint16(x86_xSetOp), uint16(x86_FPREM1),
- /*11606*/ uint16(x86_xMatch),
- /*11607*/ uint16(x86_xSetOp), uint16(x86_FDECSTP),
- /*11609*/ uint16(x86_xMatch),
- /*11610*/ uint16(x86_xSetOp), uint16(x86_FINCSTP),
- /*11612*/ uint16(x86_xMatch),
- /*11613*/ uint16(x86_xSetOp), uint16(x86_FPREM),
- /*11615*/ uint16(x86_xMatch),
- /*11616*/ uint16(x86_xSetOp), uint16(x86_FYL2XP1),
- /*11618*/ uint16(x86_xMatch),
- /*11619*/ uint16(x86_xSetOp), uint16(x86_FSQRT),
- /*11621*/ uint16(x86_xMatch),
- /*11622*/ uint16(x86_xSetOp), uint16(x86_FSINCOS),
- /*11624*/ uint16(x86_xMatch),
- /*11625*/ uint16(x86_xSetOp), uint16(x86_FRNDINT),
- /*11627*/ uint16(x86_xMatch),
- /*11628*/ uint16(x86_xSetOp), uint16(x86_FSCALE),
- /*11630*/ uint16(x86_xMatch),
- /*11631*/ uint16(x86_xSetOp), uint16(x86_FSIN),
- /*11633*/ uint16(x86_xMatch),
- /*11634*/ uint16(x86_xSetOp), uint16(x86_FCOS),
- /*11636*/ uint16(x86_xMatch),
- /*11637*/ uint16(x86_xCondByte), 33,
- 0xc0, 11746,
- 0xc1, 11746,
- 0xc2, 11746,
- 0xc3, 11746,
- 0xc4, 11746,
- 0xc5, 11746,
- 0xc6, 11746,
- 0xc7, 11746,
- 0xc8, 11751,
- 0xc9, 11751,
- 0xca, 11751,
- 0xcb, 11751,
- 0xcc, 11751,
- 0xcd, 11751,
- 0xce, 11751,
- 0xcf, 11751,
- 0xd0, 11756,
- 0xd1, 11756,
- 0xd2, 11756,
- 0xd3, 11756,
- 0xd4, 11756,
- 0xd5, 11756,
- 0xd6, 11756,
- 0xd7, 11756,
- 0xd8, 11761,
- 0xd9, 11761,
- 0xda, 11761,
- 0xdb, 11761,
- 0xdc, 11761,
- 0xdd, 11761,
- 0xde, 11761,
- 0xdf, 11761,
- 0xE9, 11766,
- /*11705*/ uint16(x86_xCondSlashR),
- 11714, // 0
- 11718, // 1
- 11722, // 2
- 11726, // 3
- 11730, // 4
- 11734, // 5
- 11738, // 6
- 11742, // 7
- /*11714*/ uint16(x86_xSetOp), uint16(x86_FIADD),
- /*11716*/ uint16(x86_xArgM32int),
- /*11717*/ uint16(x86_xMatch),
- /*11718*/ uint16(x86_xSetOp), uint16(x86_FIMUL),
- /*11720*/ uint16(x86_xArgM32int),
- /*11721*/ uint16(x86_xMatch),
- /*11722*/ uint16(x86_xSetOp), uint16(x86_FICOM),
- /*11724*/ uint16(x86_xArgM32int),
- /*11725*/ uint16(x86_xMatch),
- /*11726*/ uint16(x86_xSetOp), uint16(x86_FICOMP),
- /*11728*/ uint16(x86_xArgM32int),
- /*11729*/ uint16(x86_xMatch),
- /*11730*/ uint16(x86_xSetOp), uint16(x86_FISUB),
- /*11732*/ uint16(x86_xArgM32int),
- /*11733*/ uint16(x86_xMatch),
- /*11734*/ uint16(x86_xSetOp), uint16(x86_FISUBR),
- /*11736*/ uint16(x86_xArgM32int),
- /*11737*/ uint16(x86_xMatch),
- /*11738*/ uint16(x86_xSetOp), uint16(x86_FIDIV),
- /*11740*/ uint16(x86_xArgM32int),
- /*11741*/ uint16(x86_xMatch),
- /*11742*/ uint16(x86_xSetOp), uint16(x86_FIDIVR),
- /*11744*/ uint16(x86_xArgM32int),
- /*11745*/ uint16(x86_xMatch),
- /*11746*/ uint16(x86_xSetOp), uint16(x86_FCMOVB),
- /*11748*/ uint16(x86_xArgST),
- /*11749*/ uint16(x86_xArgSTi),
- /*11750*/ uint16(x86_xMatch),
- /*11751*/ uint16(x86_xSetOp), uint16(x86_FCMOVE),
- /*11753*/ uint16(x86_xArgST),
- /*11754*/ uint16(x86_xArgSTi),
- /*11755*/ uint16(x86_xMatch),
- /*11756*/ uint16(x86_xSetOp), uint16(x86_FCMOVBE),
- /*11758*/ uint16(x86_xArgST),
- /*11759*/ uint16(x86_xArgSTi),
- /*11760*/ uint16(x86_xMatch),
- /*11761*/ uint16(x86_xSetOp), uint16(x86_FCMOVU),
- /*11763*/ uint16(x86_xArgST),
- /*11764*/ uint16(x86_xArgSTi),
- /*11765*/ uint16(x86_xMatch),
- /*11766*/ uint16(x86_xSetOp), uint16(x86_FUCOMPP),
- /*11768*/ uint16(x86_xMatch),
- /*11769*/ uint16(x86_xCondByte), 50,
- 0xc0, 11904,
- 0xc1, 11904,
- 0xc2, 11904,
- 0xc3, 11904,
- 0xc4, 11904,
- 0xc5, 11904,
- 0xc6, 11904,
- 0xc7, 11904,
- 0xc8, 11909,
- 0xc9, 11909,
- 0xca, 11909,
- 0xcb, 11909,
- 0xcc, 11909,
- 0xcd, 11909,
- 0xce, 11909,
- 0xcf, 11909,
- 0xd0, 11914,
- 0xd1, 11914,
- 0xd2, 11914,
- 0xd3, 11914,
- 0xd4, 11914,
- 0xd5, 11914,
- 0xd6, 11914,
- 0xd7, 11914,
- 0xd8, 11919,
- 0xd9, 11919,
- 0xda, 11919,
- 0xdb, 11919,
- 0xdc, 11919,
- 0xdd, 11919,
- 0xde, 11919,
- 0xdf, 11919,
- 0xE2, 11924,
- 0xE3, 11927,
- 0xe8, 11930,
- 0xe9, 11930,
- 0xea, 11930,
- 0xeb, 11930,
- 0xec, 11930,
- 0xed, 11930,
- 0xee, 11930,
- 0xef, 11930,
- 0xf0, 11935,
- 0xf1, 11935,
- 0xf2, 11935,
- 0xf3, 11935,
- 0xf4, 11935,
- 0xf5, 11935,
- 0xf6, 11935,
- 0xf7, 11935,
- /*11871*/ uint16(x86_xCondSlashR),
- 11880, // 0
- 11884, // 1
- 11888, // 2
- 11892, // 3
- 0, // 4
- 11896, // 5
- 0, // 6
- 11900, // 7
- /*11880*/ uint16(x86_xSetOp), uint16(x86_FILD),
- /*11882*/ uint16(x86_xArgM32int),
- /*11883*/ uint16(x86_xMatch),
- /*11884*/ uint16(x86_xSetOp), uint16(x86_FISTTP),
- /*11886*/ uint16(x86_xArgM32int),
- /*11887*/ uint16(x86_xMatch),
- /*11888*/ uint16(x86_xSetOp), uint16(x86_FIST),
- /*11890*/ uint16(x86_xArgM32int),
- /*11891*/ uint16(x86_xMatch),
- /*11892*/ uint16(x86_xSetOp), uint16(x86_FISTP),
- /*11894*/ uint16(x86_xArgM32int),
- /*11895*/ uint16(x86_xMatch),
- /*11896*/ uint16(x86_xSetOp), uint16(x86_FLD),
- /*11898*/ uint16(x86_xArgM80fp),
- /*11899*/ uint16(x86_xMatch),
- /*11900*/ uint16(x86_xSetOp), uint16(x86_FSTP),
- /*11902*/ uint16(x86_xArgM80fp),
- /*11903*/ uint16(x86_xMatch),
- /*11904*/ uint16(x86_xSetOp), uint16(x86_FCMOVNB),
- /*11906*/ uint16(x86_xArgST),
- /*11907*/ uint16(x86_xArgSTi),
- /*11908*/ uint16(x86_xMatch),
- /*11909*/ uint16(x86_xSetOp), uint16(x86_FCMOVNE),
- /*11911*/ uint16(x86_xArgST),
- /*11912*/ uint16(x86_xArgSTi),
- /*11913*/ uint16(x86_xMatch),
- /*11914*/ uint16(x86_xSetOp), uint16(x86_FCMOVNBE),
- /*11916*/ uint16(x86_xArgST),
- /*11917*/ uint16(x86_xArgSTi),
- /*11918*/ uint16(x86_xMatch),
- /*11919*/ uint16(x86_xSetOp), uint16(x86_FCMOVNU),
- /*11921*/ uint16(x86_xArgST),
- /*11922*/ uint16(x86_xArgSTi),
- /*11923*/ uint16(x86_xMatch),
- /*11924*/ uint16(x86_xSetOp), uint16(x86_FNCLEX),
- /*11926*/ uint16(x86_xMatch),
- /*11927*/ uint16(x86_xSetOp), uint16(x86_FNINIT),
- /*11929*/ uint16(x86_xMatch),
- /*11930*/ uint16(x86_xSetOp), uint16(x86_FUCOMI),
- /*11932*/ uint16(x86_xArgST),
- /*11933*/ uint16(x86_xArgSTi),
- /*11934*/ uint16(x86_xMatch),
- /*11935*/ uint16(x86_xSetOp), uint16(x86_FCOMI),
- /*11937*/ uint16(x86_xArgST),
- /*11938*/ uint16(x86_xArgSTi),
- /*11939*/ uint16(x86_xMatch),
- /*11940*/ uint16(x86_xCondByte), 48,
- 0xc0, 12079,
- 0xc1, 12079,
- 0xc2, 12079,
- 0xc3, 12079,
- 0xc4, 12079,
- 0xc5, 12079,
- 0xc6, 12079,
- 0xc7, 12079,
- 0xc8, 12084,
- 0xc9, 12084,
- 0xca, 12084,
- 0xcb, 12084,
- 0xcc, 12084,
- 0xcd, 12084,
- 0xce, 12084,
- 0xcf, 12084,
- 0xe0, 12089,
- 0xe1, 12089,
- 0xe2, 12089,
- 0xe3, 12089,
- 0xe4, 12089,
- 0xe5, 12089,
- 0xe6, 12089,
- 0xe7, 12089,
- 0xe8, 12094,
- 0xe9, 12094,
- 0xea, 12094,
- 0xeb, 12094,
- 0xec, 12094,
- 0xed, 12094,
- 0xee, 12094,
- 0xef, 12094,
- 0xf0, 12099,
- 0xf1, 12099,
- 0xf2, 12099,
- 0xf3, 12099,
- 0xf4, 12099,
- 0xf5, 12099,
- 0xf6, 12099,
- 0xf7, 12099,
- 0xf8, 12104,
- 0xf9, 12104,
- 0xfa, 12104,
- 0xfb, 12104,
- 0xfc, 12104,
- 0xfd, 12104,
- 0xfe, 12104,
- 0xff, 12104,
- /*12038*/ uint16(x86_xCondSlashR),
- 12047, // 0
- 12051, // 1
- 12055, // 2
- 12059, // 3
- 12063, // 4
- 12067, // 5
- 12071, // 6
- 12075, // 7
- /*12047*/ uint16(x86_xSetOp), uint16(x86_FADD),
- /*12049*/ uint16(x86_xArgM64fp),
- /*12050*/ uint16(x86_xMatch),
- /*12051*/ uint16(x86_xSetOp), uint16(x86_FMUL),
- /*12053*/ uint16(x86_xArgM64fp),
- /*12054*/ uint16(x86_xMatch),
- /*12055*/ uint16(x86_xSetOp), uint16(x86_FCOM),
- /*12057*/ uint16(x86_xArgM64fp),
- /*12058*/ uint16(x86_xMatch),
- /*12059*/ uint16(x86_xSetOp), uint16(x86_FCOMP),
- /*12061*/ uint16(x86_xArgM64fp),
- /*12062*/ uint16(x86_xMatch),
- /*12063*/ uint16(x86_xSetOp), uint16(x86_FSUB),
- /*12065*/ uint16(x86_xArgM64fp),
- /*12066*/ uint16(x86_xMatch),
- /*12067*/ uint16(x86_xSetOp), uint16(x86_FSUBR),
- /*12069*/ uint16(x86_xArgM64fp),
- /*12070*/ uint16(x86_xMatch),
- /*12071*/ uint16(x86_xSetOp), uint16(x86_FDIV),
- /*12073*/ uint16(x86_xArgM64fp),
- /*12074*/ uint16(x86_xMatch),
- /*12075*/ uint16(x86_xSetOp), uint16(x86_FDIVR),
- /*12077*/ uint16(x86_xArgM64fp),
- /*12078*/ uint16(x86_xMatch),
- /*12079*/ uint16(x86_xSetOp), uint16(x86_FADD),
- /*12081*/ uint16(x86_xArgSTi),
- /*12082*/ uint16(x86_xArgST),
- /*12083*/ uint16(x86_xMatch),
- /*12084*/ uint16(x86_xSetOp), uint16(x86_FMUL),
- /*12086*/ uint16(x86_xArgSTi),
- /*12087*/ uint16(x86_xArgST),
- /*12088*/ uint16(x86_xMatch),
- /*12089*/ uint16(x86_xSetOp), uint16(x86_FSUBR),
- /*12091*/ uint16(x86_xArgSTi),
- /*12092*/ uint16(x86_xArgST),
- /*12093*/ uint16(x86_xMatch),
- /*12094*/ uint16(x86_xSetOp), uint16(x86_FSUB),
- /*12096*/ uint16(x86_xArgSTi),
- /*12097*/ uint16(x86_xArgST),
- /*12098*/ uint16(x86_xMatch),
- /*12099*/ uint16(x86_xSetOp), uint16(x86_FDIVR),
- /*12101*/ uint16(x86_xArgSTi),
- /*12102*/ uint16(x86_xArgST),
- /*12103*/ uint16(x86_xMatch),
- /*12104*/ uint16(x86_xSetOp), uint16(x86_FDIV),
- /*12106*/ uint16(x86_xArgSTi),
- /*12107*/ uint16(x86_xArgST),
- /*12108*/ uint16(x86_xMatch),
- /*12109*/ uint16(x86_xCondByte), 40,
- 0xc0, 12228,
- 0xc1, 12228,
- 0xc2, 12228,
- 0xc3, 12228,
- 0xc4, 12228,
- 0xc5, 12228,
- 0xc6, 12228,
- 0xc7, 12228,
- 0xd0, 12232,
- 0xd1, 12232,
- 0xd2, 12232,
- 0xd3, 12232,
- 0xd4, 12232,
- 0xd5, 12232,
- 0xd6, 12232,
- 0xd7, 12232,
- 0xd8, 12236,
- 0xd9, 12236,
- 0xda, 12236,
- 0xdb, 12236,
- 0xdc, 12236,
- 0xdd, 12236,
- 0xde, 12236,
- 0xdf, 12236,
- 0xe0, 12240,
- 0xe1, 12240,
- 0xe2, 12240,
- 0xe3, 12240,
- 0xe4, 12240,
- 0xe5, 12240,
- 0xe6, 12240,
- 0xe7, 12240,
- 0xe8, 12244,
- 0xe9, 12244,
- 0xea, 12244,
- 0xeb, 12244,
- 0xec, 12244,
- 0xed, 12244,
- 0xee, 12244,
- 0xef, 12244,
- /*12191*/ uint16(x86_xCondSlashR),
- 12200, // 0
- 12204, // 1
- 12208, // 2
- 12212, // 3
- 12216, // 4
- 0, // 5
- 12220, // 6
- 12224, // 7
- /*12200*/ uint16(x86_xSetOp), uint16(x86_FLD),
- /*12202*/ uint16(x86_xArgM64fp),
- /*12203*/ uint16(x86_xMatch),
- /*12204*/ uint16(x86_xSetOp), uint16(x86_FISTTP),
- /*12206*/ uint16(x86_xArgM64int),
- /*12207*/ uint16(x86_xMatch),
- /*12208*/ uint16(x86_xSetOp), uint16(x86_FST),
- /*12210*/ uint16(x86_xArgM64fp),
- /*12211*/ uint16(x86_xMatch),
- /*12212*/ uint16(x86_xSetOp), uint16(x86_FSTP),
- /*12214*/ uint16(x86_xArgM64fp),
- /*12215*/ uint16(x86_xMatch),
- /*12216*/ uint16(x86_xSetOp), uint16(x86_FRSTOR),
- /*12218*/ uint16(x86_xArgM94108byte),
- /*12219*/ uint16(x86_xMatch),
- /*12220*/ uint16(x86_xSetOp), uint16(x86_FNSAVE),
- /*12222*/ uint16(x86_xArgM94108byte),
- /*12223*/ uint16(x86_xMatch),
- /*12224*/ uint16(x86_xSetOp), uint16(x86_FNSTSW),
- /*12226*/ uint16(x86_xArgM2byte),
- /*12227*/ uint16(x86_xMatch),
- /*12228*/ uint16(x86_xSetOp), uint16(x86_FFREE),
- /*12230*/ uint16(x86_xArgSTi),
- /*12231*/ uint16(x86_xMatch),
- /*12232*/ uint16(x86_xSetOp), uint16(x86_FST),
- /*12234*/ uint16(x86_xArgSTi),
- /*12235*/ uint16(x86_xMatch),
- /*12236*/ uint16(x86_xSetOp), uint16(x86_FSTP),
- /*12238*/ uint16(x86_xArgSTi),
- /*12239*/ uint16(x86_xMatch),
- /*12240*/ uint16(x86_xSetOp), uint16(x86_FUCOM),
- /*12242*/ uint16(x86_xArgSTi),
- /*12243*/ uint16(x86_xMatch),
- /*12244*/ uint16(x86_xSetOp), uint16(x86_FUCOMP),
- /*12246*/ uint16(x86_xArgSTi),
- /*12247*/ uint16(x86_xMatch),
- /*12248*/ uint16(x86_xCondByte), 49,
- 0xc0, 12389,
- 0xc1, 12389,
- 0xc2, 12389,
- 0xc3, 12389,
- 0xc4, 12389,
- 0xc5, 12389,
- 0xc6, 12389,
- 0xc7, 12389,
- 0xc8, 12394,
- 0xc9, 12394,
- 0xca, 12394,
- 0xcb, 12394,
- 0xcc, 12394,
- 0xcd, 12394,
- 0xce, 12394,
- 0xcf, 12394,
- 0xD9, 12399,
- 0xe0, 12402,
- 0xe1, 12402,
- 0xe2, 12402,
- 0xe3, 12402,
- 0xe4, 12402,
- 0xe5, 12402,
- 0xe6, 12402,
- 0xe7, 12402,
- 0xe8, 12407,
- 0xe9, 12407,
- 0xea, 12407,
- 0xeb, 12407,
- 0xec, 12407,
- 0xed, 12407,
- 0xee, 12407,
- 0xef, 12407,
- 0xf0, 12412,
- 0xf1, 12412,
- 0xf2, 12412,
- 0xf3, 12412,
- 0xf4, 12412,
- 0xf5, 12412,
- 0xf6, 12412,
- 0xf7, 12412,
- 0xf8, 12417,
- 0xf9, 12417,
- 0xfa, 12417,
- 0xfb, 12417,
- 0xfc, 12417,
- 0xfd, 12417,
- 0xfe, 12417,
- 0xff, 12417,
- /*12348*/ uint16(x86_xCondSlashR),
- 12357, // 0
- 12361, // 1
- 12365, // 2
- 12369, // 3
- 12373, // 4
- 12377, // 5
- 12381, // 6
- 12385, // 7
- /*12357*/ uint16(x86_xSetOp), uint16(x86_FIADD),
- /*12359*/ uint16(x86_xArgM16int),
- /*12360*/ uint16(x86_xMatch),
- /*12361*/ uint16(x86_xSetOp), uint16(x86_FIMUL),
- /*12363*/ uint16(x86_xArgM16int),
- /*12364*/ uint16(x86_xMatch),
- /*12365*/ uint16(x86_xSetOp), uint16(x86_FICOM),
- /*12367*/ uint16(x86_xArgM16int),
- /*12368*/ uint16(x86_xMatch),
- /*12369*/ uint16(x86_xSetOp), uint16(x86_FICOMP),
- /*12371*/ uint16(x86_xArgM16int),
- /*12372*/ uint16(x86_xMatch),
- /*12373*/ uint16(x86_xSetOp), uint16(x86_FISUB),
- /*12375*/ uint16(x86_xArgM16int),
- /*12376*/ uint16(x86_xMatch),
- /*12377*/ uint16(x86_xSetOp), uint16(x86_FISUBR),
- /*12379*/ uint16(x86_xArgM16int),
- /*12380*/ uint16(x86_xMatch),
- /*12381*/ uint16(x86_xSetOp), uint16(x86_FIDIV),
- /*12383*/ uint16(x86_xArgM16int),
- /*12384*/ uint16(x86_xMatch),
- /*12385*/ uint16(x86_xSetOp), uint16(x86_FIDIVR),
- /*12387*/ uint16(x86_xArgM16int),
- /*12388*/ uint16(x86_xMatch),
- /*12389*/ uint16(x86_xSetOp), uint16(x86_FADDP),
- /*12391*/ uint16(x86_xArgSTi),
- /*12392*/ uint16(x86_xArgST),
- /*12393*/ uint16(x86_xMatch),
- /*12394*/ uint16(x86_xSetOp), uint16(x86_FMULP),
- /*12396*/ uint16(x86_xArgSTi),
- /*12397*/ uint16(x86_xArgST),
- /*12398*/ uint16(x86_xMatch),
- /*12399*/ uint16(x86_xSetOp), uint16(x86_FCOMPP),
- /*12401*/ uint16(x86_xMatch),
- /*12402*/ uint16(x86_xSetOp), uint16(x86_FSUBRP),
- /*12404*/ uint16(x86_xArgSTi),
- /*12405*/ uint16(x86_xArgST),
- /*12406*/ uint16(x86_xMatch),
- /*12407*/ uint16(x86_xSetOp), uint16(x86_FSUBP),
- /*12409*/ uint16(x86_xArgSTi),
- /*12410*/ uint16(x86_xArgST),
- /*12411*/ uint16(x86_xMatch),
- /*12412*/ uint16(x86_xSetOp), uint16(x86_FDIVRP),
- /*12414*/ uint16(x86_xArgSTi),
- /*12415*/ uint16(x86_xArgST),
- /*12416*/ uint16(x86_xMatch),
- /*12417*/ uint16(x86_xSetOp), uint16(x86_FDIVP),
- /*12419*/ uint16(x86_xArgSTi),
- /*12420*/ uint16(x86_xArgST),
- /*12421*/ uint16(x86_xMatch),
- /*12422*/ uint16(x86_xCondByte), 25,
- 0xc0, 12515,
- 0xc1, 12515,
- 0xc2, 12515,
- 0xc3, 12515,
- 0xc4, 12515,
- 0xc5, 12515,
- 0xc6, 12515,
- 0xc7, 12515,
- 0xE0, 12519,
- 0xe8, 12523,
- 0xe9, 12523,
- 0xea, 12523,
- 0xeb, 12523,
- 0xec, 12523,
- 0xed, 12523,
- 0xee, 12523,
- 0xef, 12523,
- 0xf0, 12528,
- 0xf1, 12528,
- 0xf2, 12528,
- 0xf3, 12528,
- 0xf4, 12528,
- 0xf5, 12528,
- 0xf6, 12528,
- 0xf7, 12528,
- /*12474*/ uint16(x86_xCondSlashR),
- 12483, // 0
- 12487, // 1
- 12491, // 2
- 12495, // 3
- 12499, // 4
- 12503, // 5
- 12507, // 6
- 12511, // 7
- /*12483*/ uint16(x86_xSetOp), uint16(x86_FILD),
- /*12485*/ uint16(x86_xArgM16int),
- /*12486*/ uint16(x86_xMatch),
- /*12487*/ uint16(x86_xSetOp), uint16(x86_FISTTP),
- /*12489*/ uint16(x86_xArgM16int),
- /*12490*/ uint16(x86_xMatch),
- /*12491*/ uint16(x86_xSetOp), uint16(x86_FIST),
- /*12493*/ uint16(x86_xArgM16int),
- /*12494*/ uint16(x86_xMatch),
- /*12495*/ uint16(x86_xSetOp), uint16(x86_FISTP),
- /*12497*/ uint16(x86_xArgM16int),
- /*12498*/ uint16(x86_xMatch),
- /*12499*/ uint16(x86_xSetOp), uint16(x86_FBLD),
- /*12501*/ uint16(x86_xArgM80dec),
- /*12502*/ uint16(x86_xMatch),
- /*12503*/ uint16(x86_xSetOp), uint16(x86_FILD),
- /*12505*/ uint16(x86_xArgM64int),
- /*12506*/ uint16(x86_xMatch),
- /*12507*/ uint16(x86_xSetOp), uint16(x86_FBSTP),
- /*12509*/ uint16(x86_xArgM80bcd),
- /*12510*/ uint16(x86_xMatch),
- /*12511*/ uint16(x86_xSetOp), uint16(x86_FISTP),
- /*12513*/ uint16(x86_xArgM64int),
- /*12514*/ uint16(x86_xMatch),
- /*12515*/ uint16(x86_xSetOp), uint16(x86_FFREEP),
- /*12517*/ uint16(x86_xArgSTi),
- /*12518*/ uint16(x86_xMatch),
- /*12519*/ uint16(x86_xSetOp), uint16(x86_FNSTSW),
- /*12521*/ uint16(x86_xArgAX),
- /*12522*/ uint16(x86_xMatch),
- /*12523*/ uint16(x86_xSetOp), uint16(x86_FUCOMIP),
- /*12525*/ uint16(x86_xArgST),
- /*12526*/ uint16(x86_xArgSTi),
- /*12527*/ uint16(x86_xMatch),
- /*12528*/ uint16(x86_xSetOp), uint16(x86_FCOMIP),
- /*12530*/ uint16(x86_xArgST),
- /*12531*/ uint16(x86_xArgSTi),
- /*12532*/ uint16(x86_xMatch),
- /*12533*/ uint16(x86_xSetOp), uint16(x86_LOOPNE),
- /*12535*/ uint16(x86_xReadCb),
- /*12536*/ uint16(x86_xArgRel8),
- /*12537*/ uint16(x86_xMatch),
- /*12538*/ uint16(x86_xSetOp), uint16(x86_LOOPE),
- /*12540*/ uint16(x86_xReadCb),
- /*12541*/ uint16(x86_xArgRel8),
- /*12542*/ uint16(x86_xMatch),
- /*12543*/ uint16(x86_xSetOp), uint16(x86_LOOP),
- /*12545*/ uint16(x86_xReadCb),
- /*12546*/ uint16(x86_xArgRel8),
- /*12547*/ uint16(x86_xMatch),
- /*12548*/ uint16(x86_xCondIs64), 12551, 12565,
- /*12551*/ uint16(x86_xCondAddrSize), 12555, 12560, 0,
- /*12555*/ uint16(x86_xSetOp), uint16(x86_JCXZ),
- /*12557*/ uint16(x86_xReadCb),
- /*12558*/ uint16(x86_xArgRel8),
- /*12559*/ uint16(x86_xMatch),
- /*12560*/ uint16(x86_xSetOp), uint16(x86_JECXZ),
- /*12562*/ uint16(x86_xReadCb),
- /*12563*/ uint16(x86_xArgRel8),
- /*12564*/ uint16(x86_xMatch),
- /*12565*/ uint16(x86_xCondAddrSize), 0, 12560, 12569,
- /*12569*/ uint16(x86_xSetOp), uint16(x86_JRCXZ),
- /*12571*/ uint16(x86_xReadCb),
- /*12572*/ uint16(x86_xArgRel8),
- /*12573*/ uint16(x86_xMatch),
- /*12574*/ uint16(x86_xSetOp), uint16(x86_IN),
- /*12576*/ uint16(x86_xReadIb),
- /*12577*/ uint16(x86_xArgAL),
- /*12578*/ uint16(x86_xArgImm8u),
- /*12579*/ uint16(x86_xMatch),
- /*12580*/ uint16(x86_xCondDataSize), 12584, 12590, 12596,
- /*12584*/ uint16(x86_xSetOp), uint16(x86_IN),
- /*12586*/ uint16(x86_xReadIb),
- /*12587*/ uint16(x86_xArgAX),
- /*12588*/ uint16(x86_xArgImm8u),
- /*12589*/ uint16(x86_xMatch),
- /*12590*/ uint16(x86_xSetOp), uint16(x86_IN),
- /*12592*/ uint16(x86_xReadIb),
- /*12593*/ uint16(x86_xArgEAX),
- /*12594*/ uint16(x86_xArgImm8u),
- /*12595*/ uint16(x86_xMatch),
- /*12596*/ uint16(x86_xSetOp), uint16(x86_IN),
- /*12598*/ uint16(x86_xReadIb),
- /*12599*/ uint16(x86_xArgEAX),
- /*12600*/ uint16(x86_xArgImm8u),
- /*12601*/ uint16(x86_xMatch),
- /*12602*/ uint16(x86_xSetOp), uint16(x86_OUT),
- /*12604*/ uint16(x86_xReadIb),
- /*12605*/ uint16(x86_xArgImm8u),
- /*12606*/ uint16(x86_xArgAL),
- /*12607*/ uint16(x86_xMatch),
- /*12608*/ uint16(x86_xCondDataSize), 12612, 12618, 12624,
- /*12612*/ uint16(x86_xSetOp), uint16(x86_OUT),
- /*12614*/ uint16(x86_xReadIb),
- /*12615*/ uint16(x86_xArgImm8u),
- /*12616*/ uint16(x86_xArgAX),
- /*12617*/ uint16(x86_xMatch),
- /*12618*/ uint16(x86_xSetOp), uint16(x86_OUT),
- /*12620*/ uint16(x86_xReadIb),
- /*12621*/ uint16(x86_xArgImm8u),
- /*12622*/ uint16(x86_xArgEAX),
- /*12623*/ uint16(x86_xMatch),
- /*12624*/ uint16(x86_xSetOp), uint16(x86_OUT),
- /*12626*/ uint16(x86_xReadIb),
- /*12627*/ uint16(x86_xArgImm8u),
- /*12628*/ uint16(x86_xArgEAX),
- /*12629*/ uint16(x86_xMatch),
- /*12630*/ uint16(x86_xCondIs64), 12633, 12647,
- /*12633*/ uint16(x86_xCondDataSize), 12637, 12642, 0,
- /*12637*/ uint16(x86_xSetOp), uint16(x86_CALL),
- /*12639*/ uint16(x86_xReadCw),
- /*12640*/ uint16(x86_xArgRel16),
- /*12641*/ uint16(x86_xMatch),
- /*12642*/ uint16(x86_xSetOp), uint16(x86_CALL),
- /*12644*/ uint16(x86_xReadCd),
- /*12645*/ uint16(x86_xArgRel32),
- /*12646*/ uint16(x86_xMatch),
- /*12647*/ uint16(x86_xCondDataSize), 12651, 12642, 12656,
- /*12651*/ uint16(x86_xSetOp), uint16(x86_CALL),
- /*12653*/ uint16(x86_xReadCd),
- /*12654*/ uint16(x86_xArgRel32),
- /*12655*/ uint16(x86_xMatch),
- /*12656*/ uint16(x86_xSetOp), uint16(x86_CALL),
- /*12658*/ uint16(x86_xReadCd),
- /*12659*/ uint16(x86_xArgRel32),
- /*12660*/ uint16(x86_xMatch),
- /*12661*/ uint16(x86_xCondIs64), 12664, 12678,
- /*12664*/ uint16(x86_xCondDataSize), 12668, 12673, 0,
- /*12668*/ uint16(x86_xSetOp), uint16(x86_JMP),
- /*12670*/ uint16(x86_xReadCw),
- /*12671*/ uint16(x86_xArgRel16),
- /*12672*/ uint16(x86_xMatch),
- /*12673*/ uint16(x86_xSetOp), uint16(x86_JMP),
- /*12675*/ uint16(x86_xReadCd),
- /*12676*/ uint16(x86_xArgRel32),
- /*12677*/ uint16(x86_xMatch),
- /*12678*/ uint16(x86_xCondDataSize), 12682, 12673, 12687,
- /*12682*/ uint16(x86_xSetOp), uint16(x86_JMP),
- /*12684*/ uint16(x86_xReadCd),
- /*12685*/ uint16(x86_xArgRel32),
- /*12686*/ uint16(x86_xMatch),
- /*12687*/ uint16(x86_xSetOp), uint16(x86_JMP),
- /*12689*/ uint16(x86_xReadCd),
- /*12690*/ uint16(x86_xArgRel32),
- /*12691*/ uint16(x86_xMatch),
- /*12692*/ uint16(x86_xCondIs64), 12695, 0,
- /*12695*/ uint16(x86_xCondDataSize), 12699, 12704, 0,
- /*12699*/ uint16(x86_xSetOp), uint16(x86_LJMP),
- /*12701*/ uint16(x86_xReadCd),
- /*12702*/ uint16(x86_xArgPtr16colon16),
- /*12703*/ uint16(x86_xMatch),
- /*12704*/ uint16(x86_xSetOp), uint16(x86_LJMP),
- /*12706*/ uint16(x86_xReadCp),
- /*12707*/ uint16(x86_xArgPtr16colon32),
- /*12708*/ uint16(x86_xMatch),
- /*12709*/ uint16(x86_xSetOp), uint16(x86_JMP),
- /*12711*/ uint16(x86_xReadCb),
- /*12712*/ uint16(x86_xArgRel8),
- /*12713*/ uint16(x86_xMatch),
- /*12714*/ uint16(x86_xSetOp), uint16(x86_IN),
- /*12716*/ uint16(x86_xArgAL),
- /*12717*/ uint16(x86_xArgDX),
- /*12718*/ uint16(x86_xMatch),
- /*12719*/ uint16(x86_xCondDataSize), 12723, 12728, 12733,
- /*12723*/ uint16(x86_xSetOp), uint16(x86_IN),
- /*12725*/ uint16(x86_xArgAX),
- /*12726*/ uint16(x86_xArgDX),
- /*12727*/ uint16(x86_xMatch),
- /*12728*/ uint16(x86_xSetOp), uint16(x86_IN),
- /*12730*/ uint16(x86_xArgEAX),
- /*12731*/ uint16(x86_xArgDX),
- /*12732*/ uint16(x86_xMatch),
- /*12733*/ uint16(x86_xSetOp), uint16(x86_IN),
- /*12735*/ uint16(x86_xArgEAX),
- /*12736*/ uint16(x86_xArgDX),
- /*12737*/ uint16(x86_xMatch),
- /*12738*/ uint16(x86_xSetOp), uint16(x86_OUT),
- /*12740*/ uint16(x86_xArgDX),
- /*12741*/ uint16(x86_xArgAL),
- /*12742*/ uint16(x86_xMatch),
- /*12743*/ uint16(x86_xCondDataSize), 12747, 12752, 12757,
- /*12747*/ uint16(x86_xSetOp), uint16(x86_OUT),
- /*12749*/ uint16(x86_xArgDX),
- /*12750*/ uint16(x86_xArgAX),
- /*12751*/ uint16(x86_xMatch),
- /*12752*/ uint16(x86_xSetOp), uint16(x86_OUT),
- /*12754*/ uint16(x86_xArgDX),
- /*12755*/ uint16(x86_xArgEAX),
- /*12756*/ uint16(x86_xMatch),
- /*12757*/ uint16(x86_xSetOp), uint16(x86_OUT),
- /*12759*/ uint16(x86_xArgDX),
- /*12760*/ uint16(x86_xArgEAX),
- /*12761*/ uint16(x86_xMatch),
- /*12762*/ uint16(x86_xSetOp), uint16(x86_ICEBP),
- /*12764*/ uint16(x86_xMatch),
- /*12765*/ uint16(x86_xSetOp), uint16(x86_HLT),
- /*12767*/ uint16(x86_xMatch),
- /*12768*/ uint16(x86_xSetOp), uint16(x86_CMC),
- /*12770*/ uint16(x86_xMatch),
- /*12771*/ uint16(x86_xCondSlashR),
- 12780, // 0
- 0, // 1
- 12786, // 2
- 12790, // 3
- 12794, // 4
- 12798, // 5
- 12802, // 6
- 12806, // 7
- /*12780*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*12782*/ uint16(x86_xReadIb),
- /*12783*/ uint16(x86_xArgRM8),
- /*12784*/ uint16(x86_xArgImm8u),
- /*12785*/ uint16(x86_xMatch),
- /*12786*/ uint16(x86_xSetOp), uint16(x86_NOT),
- /*12788*/ uint16(x86_xArgRM8),
- /*12789*/ uint16(x86_xMatch),
- /*12790*/ uint16(x86_xSetOp), uint16(x86_NEG),
- /*12792*/ uint16(x86_xArgRM8),
- /*12793*/ uint16(x86_xMatch),
- /*12794*/ uint16(x86_xSetOp), uint16(x86_MUL),
- /*12796*/ uint16(x86_xArgRM8),
- /*12797*/ uint16(x86_xMatch),
- /*12798*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*12800*/ uint16(x86_xArgRM8),
- /*12801*/ uint16(x86_xMatch),
- /*12802*/ uint16(x86_xSetOp), uint16(x86_DIV),
- /*12804*/ uint16(x86_xArgRM8),
- /*12805*/ uint16(x86_xMatch),
- /*12806*/ uint16(x86_xSetOp), uint16(x86_IDIV),
- /*12808*/ uint16(x86_xArgRM8),
- /*12809*/ uint16(x86_xMatch),
- /*12810*/ uint16(x86_xCondSlashR),
- 12819, // 0
- 0, // 1
- 12848, // 2
- 12871, // 3
- 12894, // 4
- 12917, // 5
- 12940, // 6
- 12963, // 7
- /*12819*/ uint16(x86_xCondIs64), 12822, 12838,
- /*12822*/ uint16(x86_xCondDataSize), 12826, 12832, 0,
- /*12826*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*12828*/ uint16(x86_xReadIw),
- /*12829*/ uint16(x86_xArgRM16),
- /*12830*/ uint16(x86_xArgImm16),
- /*12831*/ uint16(x86_xMatch),
- /*12832*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*12834*/ uint16(x86_xReadId),
- /*12835*/ uint16(x86_xArgRM32),
- /*12836*/ uint16(x86_xArgImm32),
- /*12837*/ uint16(x86_xMatch),
- /*12838*/ uint16(x86_xCondDataSize), 12826, 12832, 12842,
- /*12842*/ uint16(x86_xSetOp), uint16(x86_TEST),
- /*12844*/ uint16(x86_xReadId),
- /*12845*/ uint16(x86_xArgRM64),
- /*12846*/ uint16(x86_xArgImm32),
- /*12847*/ uint16(x86_xMatch),
- /*12848*/ uint16(x86_xCondIs64), 12851, 12863,
- /*12851*/ uint16(x86_xCondDataSize), 12855, 12859, 0,
- /*12855*/ uint16(x86_xSetOp), uint16(x86_NOT),
- /*12857*/ uint16(x86_xArgRM16),
- /*12858*/ uint16(x86_xMatch),
- /*12859*/ uint16(x86_xSetOp), uint16(x86_NOT),
- /*12861*/ uint16(x86_xArgRM32),
- /*12862*/ uint16(x86_xMatch),
- /*12863*/ uint16(x86_xCondDataSize), 12855, 12859, 12867,
- /*12867*/ uint16(x86_xSetOp), uint16(x86_NOT),
- /*12869*/ uint16(x86_xArgRM64),
- /*12870*/ uint16(x86_xMatch),
- /*12871*/ uint16(x86_xCondIs64), 12874, 12886,
- /*12874*/ uint16(x86_xCondDataSize), 12878, 12882, 0,
- /*12878*/ uint16(x86_xSetOp), uint16(x86_NEG),
- /*12880*/ uint16(x86_xArgRM16),
- /*12881*/ uint16(x86_xMatch),
- /*12882*/ uint16(x86_xSetOp), uint16(x86_NEG),
- /*12884*/ uint16(x86_xArgRM32),
- /*12885*/ uint16(x86_xMatch),
- /*12886*/ uint16(x86_xCondDataSize), 12878, 12882, 12890,
- /*12890*/ uint16(x86_xSetOp), uint16(x86_NEG),
- /*12892*/ uint16(x86_xArgRM64),
- /*12893*/ uint16(x86_xMatch),
- /*12894*/ uint16(x86_xCondIs64), 12897, 12909,
- /*12897*/ uint16(x86_xCondDataSize), 12901, 12905, 0,
- /*12901*/ uint16(x86_xSetOp), uint16(x86_MUL),
- /*12903*/ uint16(x86_xArgRM16),
- /*12904*/ uint16(x86_xMatch),
- /*12905*/ uint16(x86_xSetOp), uint16(x86_MUL),
- /*12907*/ uint16(x86_xArgRM32),
- /*12908*/ uint16(x86_xMatch),
- /*12909*/ uint16(x86_xCondDataSize), 12901, 12905, 12913,
- /*12913*/ uint16(x86_xSetOp), uint16(x86_MUL),
- /*12915*/ uint16(x86_xArgRM64),
- /*12916*/ uint16(x86_xMatch),
- /*12917*/ uint16(x86_xCondIs64), 12920, 12932,
- /*12920*/ uint16(x86_xCondDataSize), 12924, 12928, 0,
- /*12924*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*12926*/ uint16(x86_xArgRM16),
- /*12927*/ uint16(x86_xMatch),
- /*12928*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*12930*/ uint16(x86_xArgRM32),
- /*12931*/ uint16(x86_xMatch),
- /*12932*/ uint16(x86_xCondDataSize), 12924, 12928, 12936,
- /*12936*/ uint16(x86_xSetOp), uint16(x86_IMUL),
- /*12938*/ uint16(x86_xArgRM64),
- /*12939*/ uint16(x86_xMatch),
- /*12940*/ uint16(x86_xCondIs64), 12943, 12955,
- /*12943*/ uint16(x86_xCondDataSize), 12947, 12951, 0,
- /*12947*/ uint16(x86_xSetOp), uint16(x86_DIV),
- /*12949*/ uint16(x86_xArgRM16),
- /*12950*/ uint16(x86_xMatch),
- /*12951*/ uint16(x86_xSetOp), uint16(x86_DIV),
- /*12953*/ uint16(x86_xArgRM32),
- /*12954*/ uint16(x86_xMatch),
- /*12955*/ uint16(x86_xCondDataSize), 12947, 12951, 12959,
- /*12959*/ uint16(x86_xSetOp), uint16(x86_DIV),
- /*12961*/ uint16(x86_xArgRM64),
- /*12962*/ uint16(x86_xMatch),
- /*12963*/ uint16(x86_xCondIs64), 12966, 12978,
- /*12966*/ uint16(x86_xCondDataSize), 12970, 12974, 0,
- /*12970*/ uint16(x86_xSetOp), uint16(x86_IDIV),
- /*12972*/ uint16(x86_xArgRM16),
- /*12973*/ uint16(x86_xMatch),
- /*12974*/ uint16(x86_xSetOp), uint16(x86_IDIV),
- /*12976*/ uint16(x86_xArgRM32),
- /*12977*/ uint16(x86_xMatch),
- /*12978*/ uint16(x86_xCondDataSize), 12970, 12974, 12982,
- /*12982*/ uint16(x86_xSetOp), uint16(x86_IDIV),
- /*12984*/ uint16(x86_xArgRM64),
- /*12985*/ uint16(x86_xMatch),
- /*12986*/ uint16(x86_xSetOp), uint16(x86_CLC),
- /*12988*/ uint16(x86_xMatch),
- /*12989*/ uint16(x86_xSetOp), uint16(x86_STC),
- /*12991*/ uint16(x86_xMatch),
- /*12992*/ uint16(x86_xSetOp), uint16(x86_CLI),
- /*12994*/ uint16(x86_xMatch),
- /*12995*/ uint16(x86_xSetOp), uint16(x86_STI),
- /*12997*/ uint16(x86_xMatch),
- /*12998*/ uint16(x86_xSetOp), uint16(x86_CLD),
- /*13000*/ uint16(x86_xMatch),
- /*13001*/ uint16(x86_xSetOp), uint16(x86_STD),
- /*13003*/ uint16(x86_xMatch),
- /*13004*/ uint16(x86_xCondSlashR),
- 13013, // 0
- 13017, // 1
- 0, // 2
- 0, // 3
- 0, // 4
- 0, // 5
- 0, // 6
- 0, // 7
- /*13013*/ uint16(x86_xSetOp), uint16(x86_INC),
- /*13015*/ uint16(x86_xArgRM8),
- /*13016*/ uint16(x86_xMatch),
- /*13017*/ uint16(x86_xSetOp), uint16(x86_DEC),
- /*13019*/ uint16(x86_xArgRM8),
- /*13020*/ uint16(x86_xMatch),
- /*13021*/ uint16(x86_xCondSlashR),
- 13030, // 0
- 13053, // 1
- 13076, // 2
- 13095, // 3
- 13118, // 4
- 13137, // 5
- 13160, // 6
- 0, // 7
- /*13030*/ uint16(x86_xCondIs64), 13033, 13045,
- /*13033*/ uint16(x86_xCondDataSize), 13037, 13041, 0,
- /*13037*/ uint16(x86_xSetOp), uint16(x86_INC),
- /*13039*/ uint16(x86_xArgRM16),
- /*13040*/ uint16(x86_xMatch),
- /*13041*/ uint16(x86_xSetOp), uint16(x86_INC),
- /*13043*/ uint16(x86_xArgRM32),
- /*13044*/ uint16(x86_xMatch),
- /*13045*/ uint16(x86_xCondDataSize), 13037, 13041, 13049,
- /*13049*/ uint16(x86_xSetOp), uint16(x86_INC),
- /*13051*/ uint16(x86_xArgRM64),
- /*13052*/ uint16(x86_xMatch),
- /*13053*/ uint16(x86_xCondIs64), 13056, 13068,
- /*13056*/ uint16(x86_xCondDataSize), 13060, 13064, 0,
- /*13060*/ uint16(x86_xSetOp), uint16(x86_DEC),
- /*13062*/ uint16(x86_xArgRM16),
- /*13063*/ uint16(x86_xMatch),
- /*13064*/ uint16(x86_xSetOp), uint16(x86_DEC),
- /*13066*/ uint16(x86_xArgRM32),
- /*13067*/ uint16(x86_xMatch),
- /*13068*/ uint16(x86_xCondDataSize), 13060, 13064, 13072,
- /*13072*/ uint16(x86_xSetOp), uint16(x86_DEC),
- /*13074*/ uint16(x86_xArgRM64),
- /*13075*/ uint16(x86_xMatch),
- /*13076*/ uint16(x86_xCondIs64), 13079, 13091,
- /*13079*/ uint16(x86_xCondDataSize), 13083, 13087, 0,
- /*13083*/ uint16(x86_xSetOp), uint16(x86_CALL),
- /*13085*/ uint16(x86_xArgRM16),
- /*13086*/ uint16(x86_xMatch),
- /*13087*/ uint16(x86_xSetOp), uint16(x86_CALL),
- /*13089*/ uint16(x86_xArgRM32),
- /*13090*/ uint16(x86_xMatch),
- /*13091*/ uint16(x86_xSetOp), uint16(x86_CALL),
- /*13093*/ uint16(x86_xArgRM64),
- /*13094*/ uint16(x86_xMatch),
- /*13095*/ uint16(x86_xCondIs64), 13098, 13110,
- /*13098*/ uint16(x86_xCondDataSize), 13102, 13106, 0,
- /*13102*/ uint16(x86_xSetOp), uint16(x86_LCALL),
- /*13104*/ uint16(x86_xArgM16colon16),
- /*13105*/ uint16(x86_xMatch),
- /*13106*/ uint16(x86_xSetOp), uint16(x86_LCALL),
- /*13108*/ uint16(x86_xArgM16colon32),
- /*13109*/ uint16(x86_xMatch),
- /*13110*/ uint16(x86_xCondDataSize), 13102, 13106, 13114,
- /*13114*/ uint16(x86_xSetOp), uint16(x86_LCALL),
- /*13116*/ uint16(x86_xArgM16colon64),
- /*13117*/ uint16(x86_xMatch),
- /*13118*/ uint16(x86_xCondIs64), 13121, 13133,
- /*13121*/ uint16(x86_xCondDataSize), 13125, 13129, 0,
- /*13125*/ uint16(x86_xSetOp), uint16(x86_JMP),
- /*13127*/ uint16(x86_xArgRM16),
- /*13128*/ uint16(x86_xMatch),
- /*13129*/ uint16(x86_xSetOp), uint16(x86_JMP),
- /*13131*/ uint16(x86_xArgRM32),
- /*13132*/ uint16(x86_xMatch),
- /*13133*/ uint16(x86_xSetOp), uint16(x86_JMP),
- /*13135*/ uint16(x86_xArgRM64),
- /*13136*/ uint16(x86_xMatch),
- /*13137*/ uint16(x86_xCondIs64), 13140, 13152,
- /*13140*/ uint16(x86_xCondDataSize), 13144, 13148, 0,
- /*13144*/ uint16(x86_xSetOp), uint16(x86_LJMP),
- /*13146*/ uint16(x86_xArgM16colon16),
- /*13147*/ uint16(x86_xMatch),
- /*13148*/ uint16(x86_xSetOp), uint16(x86_LJMP),
- /*13150*/ uint16(x86_xArgM16colon32),
- /*13151*/ uint16(x86_xMatch),
- /*13152*/ uint16(x86_xCondDataSize), 13144, 13148, 13156,
- /*13156*/ uint16(x86_xSetOp), uint16(x86_LJMP),
- /*13158*/ uint16(x86_xArgM16colon64),
- /*13159*/ uint16(x86_xMatch),
- /*13160*/ uint16(x86_xCondIs64), 13163, 13175,
- /*13163*/ uint16(x86_xCondDataSize), 13167, 13171, 0,
- /*13167*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*13169*/ uint16(x86_xArgRM16),
- /*13170*/ uint16(x86_xMatch),
- /*13171*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*13173*/ uint16(x86_xArgRM32),
- /*13174*/ uint16(x86_xMatch),
- /*13175*/ uint16(x86_xCondDataSize), 13167, 13179, 13183,
- /*13179*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*13181*/ uint16(x86_xArgRM64),
- /*13182*/ uint16(x86_xMatch),
- /*13183*/ uint16(x86_xSetOp), uint16(x86_PUSH),
- /*13185*/ uint16(x86_xArgRM64),
- /*13186*/ uint16(x86_xMatch),
-}
-
-const (
- _ x86_Op = iota
-
- x86_AAA
- x86_AAD
- x86_AAM
- x86_AAS
- x86_ADC
- x86_ADD
- x86_ADDPD
- x86_ADDPS
- x86_ADDSD
- x86_ADDSS
- x86_ADDSUBPD
- x86_ADDSUBPS
- x86_AESDEC
- x86_AESDECLAST
- x86_AESENC
- x86_AESENCLAST
- x86_AESIMC
- x86_AESKEYGENASSIST
- x86_AND
- x86_ANDNPD
- x86_ANDNPS
- x86_ANDPD
- x86_ANDPS
- x86_ARPL
- x86_BLENDPD
- x86_BLENDPS
- x86_BLENDVPD
- x86_BLENDVPS
- x86_BOUND
- x86_BSF
- x86_BSR
- x86_BSWAP
- x86_BT
- x86_BTC
- x86_BTR
- x86_BTS
- x86_CALL
- x86_CBW
- x86_CDQ
- x86_CDQE
- x86_CLC
- x86_CLD
- x86_CLFLUSH
- x86_CLI
- x86_CLTS
- x86_CMC
- x86_CMOVA
- x86_CMOVAE
- x86_CMOVB
- x86_CMOVBE
- x86_CMOVE
- x86_CMOVG
- x86_CMOVGE
- x86_CMOVL
- x86_CMOVLE
- x86_CMOVNE
- x86_CMOVNO
- x86_CMOVNP
- x86_CMOVNS
- x86_CMOVO
- x86_CMOVP
- x86_CMOVS
- x86_CMP
- x86_CMPPD
- x86_CMPPS
- x86_CMPSB
- x86_CMPSD
- x86_CMPSD_XMM
- x86_CMPSQ
- x86_CMPSS
- x86_CMPSW
- x86_CMPXCHG
- x86_CMPXCHG16B
- x86_CMPXCHG8B
- x86_COMISD
- x86_COMISS
- x86_CPUID
- x86_CQO
- x86_CRC32
- x86_CVTDQ2PD
- x86_CVTDQ2PS
- x86_CVTPD2DQ
- x86_CVTPD2PI
- x86_CVTPD2PS
- x86_CVTPI2PD
- x86_CVTPI2PS
- x86_CVTPS2DQ
- x86_CVTPS2PD
- x86_CVTPS2PI
- x86_CVTSD2SI
- x86_CVTSD2SS
- x86_CVTSI2SD
- x86_CVTSI2SS
- x86_CVTSS2SD
- x86_CVTSS2SI
- x86_CVTTPD2DQ
- x86_CVTTPD2PI
- x86_CVTTPS2DQ
- x86_CVTTPS2PI
- x86_CVTTSD2SI
- x86_CVTTSS2SI
- x86_CWD
- x86_CWDE
- x86_DAA
- x86_DAS
- x86_DEC
- x86_DIV
- x86_DIVPD
- x86_DIVPS
- x86_DIVSD
- x86_DIVSS
- x86_DPPD
- x86_DPPS
- x86_EMMS
- x86_ENTER
- x86_EXTRACTPS
- x86_F2XM1
- x86_FABS
- x86_FADD
- x86_FADDP
- x86_FBLD
- x86_FBSTP
- x86_FCHS
- x86_FCMOVB
- x86_FCMOVBE
- x86_FCMOVE
- x86_FCMOVNB
- x86_FCMOVNBE
- x86_FCMOVNE
- x86_FCMOVNU
- x86_FCMOVU
- x86_FCOM
- x86_FCOMI
- x86_FCOMIP
- x86_FCOMP
- x86_FCOMPP
- x86_FCOS
- x86_FDECSTP
- x86_FDIV
- x86_FDIVP
- x86_FDIVR
- x86_FDIVRP
- x86_FFREE
- x86_FFREEP
- x86_FIADD
- x86_FICOM
- x86_FICOMP
- x86_FIDIV
- x86_FIDIVR
- x86_FILD
- x86_FIMUL
- x86_FINCSTP
- x86_FIST
- x86_FISTP
- x86_FISTTP
- x86_FISUB
- x86_FISUBR
- x86_FLD
- x86_FLD1
- x86_FLDCW
- x86_FLDENV
- x86_FLDL2E
- x86_FLDL2T
- x86_FLDLG2
- x86_FLDPI
- x86_FMUL
- x86_FMULP
- x86_FNCLEX
- x86_FNINIT
- x86_FNOP
- x86_FNSAVE
- x86_FNSTCW
- x86_FNSTENV
- x86_FNSTSW
- x86_FPATAN
- x86_FPREM
- x86_FPREM1
- x86_FPTAN
- x86_FRNDINT
- x86_FRSTOR
- x86_FSCALE
- x86_FSIN
- x86_FSINCOS
- x86_FSQRT
- x86_FST
- x86_FSTP
- x86_FSUB
- x86_FSUBP
- x86_FSUBR
- x86_FSUBRP
- x86_FTST
- x86_FUCOM
- x86_FUCOMI
- x86_FUCOMIP
- x86_FUCOMP
- x86_FUCOMPP
- x86_FWAIT
- x86_FXAM
- x86_FXCH
- x86_FXRSTOR
- x86_FXRSTOR64
- x86_FXSAVE
- x86_FXSAVE64
- x86_FXTRACT
- x86_FYL2X
- x86_FYL2XP1
- x86_HADDPD
- x86_HADDPS
- x86_HLT
- x86_HSUBPD
- x86_HSUBPS
- x86_ICEBP
- x86_IDIV
- x86_IMUL
- x86_IN
- x86_INC
- x86_INSB
- x86_INSD
- x86_INSERTPS
- x86_INSW
- x86_INT
- x86_INTO
- x86_INVD
- x86_INVLPG
- x86_INVPCID
- x86_IRET
- x86_IRETD
- x86_IRETQ
- x86_JA
- x86_JAE
- x86_JB
- x86_JBE
- x86_JCXZ
- x86_JE
- x86_JECXZ
- x86_JG
- x86_JGE
- x86_JL
- x86_JLE
- x86_JMP
- x86_JNE
- x86_JNO
- x86_JNP
- x86_JNS
- x86_JO
- x86_JP
- x86_JRCXZ
- x86_JS
- x86_LAHF
- x86_LAR
- x86_LCALL
- x86_LDDQU
- x86_LDMXCSR
- x86_LDS
- x86_LEA
- x86_LEAVE
- x86_LES
- x86_LFENCE
- x86_LFS
- x86_LGDT
- x86_LGS
- x86_LIDT
- x86_LJMP
- x86_LLDT
- x86_LMSW
- x86_LODSB
- x86_LODSD
- x86_LODSQ
- x86_LODSW
- x86_LOOP
- x86_LOOPE
- x86_LOOPNE
- x86_LRET
- x86_LSL
- x86_LSS
- x86_LTR
- x86_LZCNT
- x86_MASKMOVDQU
- x86_MASKMOVQ
- x86_MAXPD
- x86_MAXPS
- x86_MAXSD
- x86_MAXSS
- x86_MFENCE
- x86_MINPD
- x86_MINPS
- x86_MINSD
- x86_MINSS
- x86_MONITOR
- x86_MOV
- x86_MOVAPD
- x86_MOVAPS
- x86_MOVBE
- x86_MOVD
- x86_MOVDDUP
- x86_MOVDQ2Q
- x86_MOVDQA
- x86_MOVDQU
- x86_MOVHLPS
- x86_MOVHPD
- x86_MOVHPS
- x86_MOVLHPS
- x86_MOVLPD
- x86_MOVLPS
- x86_MOVMSKPD
- x86_MOVMSKPS
- x86_MOVNTDQ
- x86_MOVNTDQA
- x86_MOVNTI
- x86_MOVNTPD
- x86_MOVNTPS
- x86_MOVNTQ
- x86_MOVNTSD
- x86_MOVNTSS
- x86_MOVQ
- x86_MOVQ2DQ
- x86_MOVSB
- x86_MOVSD
- x86_MOVSD_XMM
- x86_MOVSHDUP
- x86_MOVSLDUP
- x86_MOVSQ
- x86_MOVSS
- x86_MOVSW
- x86_MOVSX
- x86_MOVSXD
- x86_MOVUPD
- x86_MOVUPS
- x86_MOVZX
- x86_MPSADBW
- x86_MUL
- x86_MULPD
- x86_MULPS
- x86_MULSD
- x86_MULSS
- x86_MWAIT
- x86_NEG
- x86_NOP
- x86_NOT
- x86_OR
- x86_ORPD
- x86_ORPS
- x86_OUT
- x86_OUTSB
- x86_OUTSD
- x86_OUTSW
- x86_PABSB
- x86_PABSD
- x86_PABSW
- x86_PACKSSDW
- x86_PACKSSWB
- x86_PACKUSDW
- x86_PACKUSWB
- x86_PADDB
- x86_PADDD
- x86_PADDQ
- x86_PADDSB
- x86_PADDSW
- x86_PADDUSB
- x86_PADDUSW
- x86_PADDW
- x86_PALIGNR
- x86_PAND
- x86_PANDN
- x86_PAUSE
- x86_PAVGB
- x86_PAVGW
- x86_PBLENDVB
- x86_PBLENDW
- x86_PCLMULQDQ
- x86_PCMPEQB
- x86_PCMPEQD
- x86_PCMPEQQ
- x86_PCMPEQW
- x86_PCMPESTRI
- x86_PCMPESTRM
- x86_PCMPGTB
- x86_PCMPGTD
- x86_PCMPGTQ
- x86_PCMPGTW
- x86_PCMPISTRI
- x86_PCMPISTRM
- x86_PEXTRB
- x86_PEXTRD
- x86_PEXTRQ
- x86_PEXTRW
- x86_PHADDD
- x86_PHADDSW
- x86_PHADDW
- x86_PHMINPOSUW
- x86_PHSUBD
- x86_PHSUBSW
- x86_PHSUBW
- x86_PINSRB
- x86_PINSRD
- x86_PINSRQ
- x86_PINSRW
- x86_PMADDUBSW
- x86_PMADDWD
- x86_PMAXSB
- x86_PMAXSD
- x86_PMAXSW
- x86_PMAXUB
- x86_PMAXUD
- x86_PMAXUW
- x86_PMINSB
- x86_PMINSD
- x86_PMINSW
- x86_PMINUB
- x86_PMINUD
- x86_PMINUW
- x86_PMOVMSKB
- x86_PMOVSXBD
- x86_PMOVSXBQ
- x86_PMOVSXBW
- x86_PMOVSXDQ
- x86_PMOVSXWD
- x86_PMOVSXWQ
- x86_PMOVZXBD
- x86_PMOVZXBQ
- x86_PMOVZXBW
- x86_PMOVZXDQ
- x86_PMOVZXWD
- x86_PMOVZXWQ
- x86_PMULDQ
- x86_PMULHRSW
- x86_PMULHUW
- x86_PMULHW
- x86_PMULLD
- x86_PMULLW
- x86_PMULUDQ
- x86_POP
- x86_POPA
- x86_POPAD
- x86_POPCNT
- x86_POPF
- x86_POPFD
- x86_POPFQ
- x86_POR
- x86_PREFETCHNTA
- x86_PREFETCHT0
- x86_PREFETCHT1
- x86_PREFETCHT2
- x86_PREFETCHW
- x86_PSADBW
- x86_PSHUFB
- x86_PSHUFD
- x86_PSHUFHW
- x86_PSHUFLW
- x86_PSHUFW
- x86_PSIGNB
- x86_PSIGND
- x86_PSIGNW
- x86_PSLLD
- x86_PSLLDQ
- x86_PSLLQ
- x86_PSLLW
- x86_PSRAD
- x86_PSRAW
- x86_PSRLD
- x86_PSRLDQ
- x86_PSRLQ
- x86_PSRLW
- x86_PSUBB
- x86_PSUBD
- x86_PSUBQ
- x86_PSUBSB
- x86_PSUBSW
- x86_PSUBUSB
- x86_PSUBUSW
- x86_PSUBW
- x86_PTEST
- x86_PUNPCKHBW
- x86_PUNPCKHDQ
- x86_PUNPCKHQDQ
- x86_PUNPCKHWD
- x86_PUNPCKLBW
- x86_PUNPCKLDQ
- x86_PUNPCKLQDQ
- x86_PUNPCKLWD
- x86_PUSH
- x86_PUSHA
- x86_PUSHAD
- x86_PUSHF
- x86_PUSHFD
- x86_PUSHFQ
- x86_PXOR
- x86_RCL
- x86_RCPPS
- x86_RCPSS
- x86_RCR
- x86_RDFSBASE
- x86_RDGSBASE
- x86_RDMSR
- x86_RDPMC
- x86_RDRAND
- x86_RDTSC
- x86_RDTSCP
- x86_RET
- x86_ROL
- x86_ROR
- x86_ROUNDPD
- x86_ROUNDPS
- x86_ROUNDSD
- x86_ROUNDSS
- x86_RSM
- x86_RSQRTPS
- x86_RSQRTSS
- x86_SAHF
- x86_SAR
- x86_SBB
- x86_SCASB
- x86_SCASD
- x86_SCASQ
- x86_SCASW
- x86_SETA
- x86_SETAE
- x86_SETB
- x86_SETBE
- x86_SETE
- x86_SETG
- x86_SETGE
- x86_SETL
- x86_SETLE
- x86_SETNE
- x86_SETNO
- x86_SETNP
- x86_SETNS
- x86_SETO
- x86_SETP
- x86_SETS
- x86_SFENCE
- x86_SGDT
- x86_SHL
- x86_SHLD
- x86_SHR
- x86_SHRD
- x86_SHUFPD
- x86_SHUFPS
- x86_SIDT
- x86_SLDT
- x86_SMSW
- x86_SQRTPD
- x86_SQRTPS
- x86_SQRTSD
- x86_SQRTSS
- x86_STC
- x86_STD
- x86_STI
- x86_STMXCSR
- x86_STOSB
- x86_STOSD
- x86_STOSQ
- x86_STOSW
- x86_STR
- x86_SUB
- x86_SUBPD
- x86_SUBPS
- x86_SUBSD
- x86_SUBSS
- x86_SWAPGS
- x86_SYSCALL
- x86_SYSENTER
- x86_SYSEXIT
- x86_SYSRET
- x86_TEST
- x86_TZCNT
- x86_UCOMISD
- x86_UCOMISS
- x86_UD1
- x86_UD2
- x86_UNPCKHPD
- x86_UNPCKHPS
- x86_UNPCKLPD
- x86_UNPCKLPS
- x86_VERR
- x86_VERW
- x86_WBINVD
- x86_WRFSBASE
- x86_WRGSBASE
- x86_WRMSR
- x86_XABORT
- x86_XADD
- x86_XBEGIN
- x86_XCHG
- x86_XEND
- x86_XGETBV
- x86_XLATB
- x86_XOR
- x86_XORPD
- x86_XORPS
- x86_XRSTOR
- x86_XRSTOR64
- x86_XRSTORS
- x86_XRSTORS64
- x86_XSAVE
- x86_XSAVE64
- x86_XSAVEC
- x86_XSAVEC64
- x86_XSAVEOPT
- x86_XSAVEOPT64
- x86_XSAVES
- x86_XSAVES64
- x86_XSETBV
- x86_XTEST
-)
-
-const x86_maxOp = x86_XTEST
-
-var x86_opNames = [...]string{
- x86_AAA: "AAA",
- x86_AAD: "AAD",
- x86_AAM: "AAM",
- x86_AAS: "AAS",
- x86_ADC: "ADC",
- x86_ADD: "ADD",
- x86_ADDPD: "ADDPD",
- x86_ADDPS: "ADDPS",
- x86_ADDSD: "ADDSD",
- x86_ADDSS: "ADDSS",
- x86_ADDSUBPD: "ADDSUBPD",
- x86_ADDSUBPS: "ADDSUBPS",
- x86_AESDEC: "AESDEC",
- x86_AESDECLAST: "AESDECLAST",
- x86_AESENC: "AESENC",
- x86_AESENCLAST: "AESENCLAST",
- x86_AESIMC: "AESIMC",
- x86_AESKEYGENASSIST: "AESKEYGENASSIST",
- x86_AND: "AND",
- x86_ANDNPD: "ANDNPD",
- x86_ANDNPS: "ANDNPS",
- x86_ANDPD: "ANDPD",
- x86_ANDPS: "ANDPS",
- x86_ARPL: "ARPL",
- x86_BLENDPD: "BLENDPD",
- x86_BLENDPS: "BLENDPS",
- x86_BLENDVPD: "BLENDVPD",
- x86_BLENDVPS: "BLENDVPS",
- x86_BOUND: "BOUND",
- x86_BSF: "BSF",
- x86_BSR: "BSR",
- x86_BSWAP: "BSWAP",
- x86_BT: "BT",
- x86_BTC: "BTC",
- x86_BTR: "BTR",
- x86_BTS: "BTS",
- x86_CALL: "CALL",
- x86_CBW: "CBW",
- x86_CDQ: "CDQ",
- x86_CDQE: "CDQE",
- x86_CLC: "CLC",
- x86_CLD: "CLD",
- x86_CLFLUSH: "CLFLUSH",
- x86_CLI: "CLI",
- x86_CLTS: "CLTS",
- x86_CMC: "CMC",
- x86_CMOVA: "CMOVA",
- x86_CMOVAE: "CMOVAE",
- x86_CMOVB: "CMOVB",
- x86_CMOVBE: "CMOVBE",
- x86_CMOVE: "CMOVE",
- x86_CMOVG: "CMOVG",
- x86_CMOVGE: "CMOVGE",
- x86_CMOVL: "CMOVL",
- x86_CMOVLE: "CMOVLE",
- x86_CMOVNE: "CMOVNE",
- x86_CMOVNO: "CMOVNO",
- x86_CMOVNP: "CMOVNP",
- x86_CMOVNS: "CMOVNS",
- x86_CMOVO: "CMOVO",
- x86_CMOVP: "CMOVP",
- x86_CMOVS: "CMOVS",
- x86_CMP: "CMP",
- x86_CMPPD: "CMPPD",
- x86_CMPPS: "CMPPS",
- x86_CMPSB: "CMPSB",
- x86_CMPSD: "CMPSD",
- x86_CMPSD_XMM: "CMPSD_XMM",
- x86_CMPSQ: "CMPSQ",
- x86_CMPSS: "CMPSS",
- x86_CMPSW: "CMPSW",
- x86_CMPXCHG: "CMPXCHG",
- x86_CMPXCHG16B: "CMPXCHG16B",
- x86_CMPXCHG8B: "CMPXCHG8B",
- x86_COMISD: "COMISD",
- x86_COMISS: "COMISS",
- x86_CPUID: "CPUID",
- x86_CQO: "CQO",
- x86_CRC32: "CRC32",
- x86_CVTDQ2PD: "CVTDQ2PD",
- x86_CVTDQ2PS: "CVTDQ2PS",
- x86_CVTPD2DQ: "CVTPD2DQ",
- x86_CVTPD2PI: "CVTPD2PI",
- x86_CVTPD2PS: "CVTPD2PS",
- x86_CVTPI2PD: "CVTPI2PD",
- x86_CVTPI2PS: "CVTPI2PS",
- x86_CVTPS2DQ: "CVTPS2DQ",
- x86_CVTPS2PD: "CVTPS2PD",
- x86_CVTPS2PI: "CVTPS2PI",
- x86_CVTSD2SI: "CVTSD2SI",
- x86_CVTSD2SS: "CVTSD2SS",
- x86_CVTSI2SD: "CVTSI2SD",
- x86_CVTSI2SS: "CVTSI2SS",
- x86_CVTSS2SD: "CVTSS2SD",
- x86_CVTSS2SI: "CVTSS2SI",
- x86_CVTTPD2DQ: "CVTTPD2DQ",
- x86_CVTTPD2PI: "CVTTPD2PI",
- x86_CVTTPS2DQ: "CVTTPS2DQ",
- x86_CVTTPS2PI: "CVTTPS2PI",
- x86_CVTTSD2SI: "CVTTSD2SI",
- x86_CVTTSS2SI: "CVTTSS2SI",
- x86_CWD: "CWD",
- x86_CWDE: "CWDE",
- x86_DAA: "DAA",
- x86_DAS: "DAS",
- x86_DEC: "DEC",
- x86_DIV: "DIV",
- x86_DIVPD: "DIVPD",
- x86_DIVPS: "DIVPS",
- x86_DIVSD: "DIVSD",
- x86_DIVSS: "DIVSS",
- x86_DPPD: "DPPD",
- x86_DPPS: "DPPS",
- x86_EMMS: "EMMS",
- x86_ENTER: "ENTER",
- x86_EXTRACTPS: "EXTRACTPS",
- x86_F2XM1: "F2XM1",
- x86_FABS: "FABS",
- x86_FADD: "FADD",
- x86_FADDP: "FADDP",
- x86_FBLD: "FBLD",
- x86_FBSTP: "FBSTP",
- x86_FCHS: "FCHS",
- x86_FCMOVB: "FCMOVB",
- x86_FCMOVBE: "FCMOVBE",
- x86_FCMOVE: "FCMOVE",
- x86_FCMOVNB: "FCMOVNB",
- x86_FCMOVNBE: "FCMOVNBE",
- x86_FCMOVNE: "FCMOVNE",
- x86_FCMOVNU: "FCMOVNU",
- x86_FCMOVU: "FCMOVU",
- x86_FCOM: "FCOM",
- x86_FCOMI: "FCOMI",
- x86_FCOMIP: "FCOMIP",
- x86_FCOMP: "FCOMP",
- x86_FCOMPP: "FCOMPP",
- x86_FCOS: "FCOS",
- x86_FDECSTP: "FDECSTP",
- x86_FDIV: "FDIV",
- x86_FDIVP: "FDIVP",
- x86_FDIVR: "FDIVR",
- x86_FDIVRP: "FDIVRP",
- x86_FFREE: "FFREE",
- x86_FFREEP: "FFREEP",
- x86_FIADD: "FIADD",
- x86_FICOM: "FICOM",
- x86_FICOMP: "FICOMP",
- x86_FIDIV: "FIDIV",
- x86_FIDIVR: "FIDIVR",
- x86_FILD: "FILD",
- x86_FIMUL: "FIMUL",
- x86_FINCSTP: "FINCSTP",
- x86_FIST: "FIST",
- x86_FISTP: "FISTP",
- x86_FISTTP: "FISTTP",
- x86_FISUB: "FISUB",
- x86_FISUBR: "FISUBR",
- x86_FLD: "FLD",
- x86_FLD1: "FLD1",
- x86_FLDCW: "FLDCW",
- x86_FLDENV: "FLDENV",
- x86_FLDL2E: "FLDL2E",
- x86_FLDL2T: "FLDL2T",
- x86_FLDLG2: "FLDLG2",
- x86_FLDPI: "FLDPI",
- x86_FMUL: "FMUL",
- x86_FMULP: "FMULP",
- x86_FNCLEX: "FNCLEX",
- x86_FNINIT: "FNINIT",
- x86_FNOP: "FNOP",
- x86_FNSAVE: "FNSAVE",
- x86_FNSTCW: "FNSTCW",
- x86_FNSTENV: "FNSTENV",
- x86_FNSTSW: "FNSTSW",
- x86_FPATAN: "FPATAN",
- x86_FPREM: "FPREM",
- x86_FPREM1: "FPREM1",
- x86_FPTAN: "FPTAN",
- x86_FRNDINT: "FRNDINT",
- x86_FRSTOR: "FRSTOR",
- x86_FSCALE: "FSCALE",
- x86_FSIN: "FSIN",
- x86_FSINCOS: "FSINCOS",
- x86_FSQRT: "FSQRT",
- x86_FST: "FST",
- x86_FSTP: "FSTP",
- x86_FSUB: "FSUB",
- x86_FSUBP: "FSUBP",
- x86_FSUBR: "FSUBR",
- x86_FSUBRP: "FSUBRP",
- x86_FTST: "FTST",
- x86_FUCOM: "FUCOM",
- x86_FUCOMI: "FUCOMI",
- x86_FUCOMIP: "FUCOMIP",
- x86_FUCOMP: "FUCOMP",
- x86_FUCOMPP: "FUCOMPP",
- x86_FWAIT: "FWAIT",
- x86_FXAM: "FXAM",
- x86_FXCH: "FXCH",
- x86_FXRSTOR: "FXRSTOR",
- x86_FXRSTOR64: "FXRSTOR64",
- x86_FXSAVE: "FXSAVE",
- x86_FXSAVE64: "FXSAVE64",
- x86_FXTRACT: "FXTRACT",
- x86_FYL2X: "FYL2X",
- x86_FYL2XP1: "FYL2XP1",
- x86_HADDPD: "HADDPD",
- x86_HADDPS: "HADDPS",
- x86_HLT: "HLT",
- x86_HSUBPD: "HSUBPD",
- x86_HSUBPS: "HSUBPS",
- x86_ICEBP: "ICEBP",
- x86_IDIV: "IDIV",
- x86_IMUL: "IMUL",
- x86_IN: "IN",
- x86_INC: "INC",
- x86_INSB: "INSB",
- x86_INSD: "INSD",
- x86_INSERTPS: "INSERTPS",
- x86_INSW: "INSW",
- x86_INT: "INT",
- x86_INTO: "INTO",
- x86_INVD: "INVD",
- x86_INVLPG: "INVLPG",
- x86_INVPCID: "INVPCID",
- x86_IRET: "IRET",
- x86_IRETD: "IRETD",
- x86_IRETQ: "IRETQ",
- x86_JA: "JA",
- x86_JAE: "JAE",
- x86_JB: "JB",
- x86_JBE: "JBE",
- x86_JCXZ: "JCXZ",
- x86_JE: "JE",
- x86_JECXZ: "JECXZ",
- x86_JG: "JG",
- x86_JGE: "JGE",
- x86_JL: "JL",
- x86_JLE: "JLE",
- x86_JMP: "JMP",
- x86_JNE: "JNE",
- x86_JNO: "JNO",
- x86_JNP: "JNP",
- x86_JNS: "JNS",
- x86_JO: "JO",
- x86_JP: "JP",
- x86_JRCXZ: "JRCXZ",
- x86_JS: "JS",
- x86_LAHF: "LAHF",
- x86_LAR: "LAR",
- x86_LCALL: "LCALL",
- x86_LDDQU: "LDDQU",
- x86_LDMXCSR: "LDMXCSR",
- x86_LDS: "LDS",
- x86_LEA: "LEA",
- x86_LEAVE: "LEAVE",
- x86_LES: "LES",
- x86_LFENCE: "LFENCE",
- x86_LFS: "LFS",
- x86_LGDT: "LGDT",
- x86_LGS: "LGS",
- x86_LIDT: "LIDT",
- x86_LJMP: "LJMP",
- x86_LLDT: "LLDT",
- x86_LMSW: "LMSW",
- x86_LODSB: "LODSB",
- x86_LODSD: "LODSD",
- x86_LODSQ: "LODSQ",
- x86_LODSW: "LODSW",
- x86_LOOP: "LOOP",
- x86_LOOPE: "LOOPE",
- x86_LOOPNE: "LOOPNE",
- x86_LRET: "LRET",
- x86_LSL: "LSL",
- x86_LSS: "LSS",
- x86_LTR: "LTR",
- x86_LZCNT: "LZCNT",
- x86_MASKMOVDQU: "MASKMOVDQU",
- x86_MASKMOVQ: "MASKMOVQ",
- x86_MAXPD: "MAXPD",
- x86_MAXPS: "MAXPS",
- x86_MAXSD: "MAXSD",
- x86_MAXSS: "MAXSS",
- x86_MFENCE: "MFENCE",
- x86_MINPD: "MINPD",
- x86_MINPS: "MINPS",
- x86_MINSD: "MINSD",
- x86_MINSS: "MINSS",
- x86_MONITOR: "MONITOR",
- x86_MOV: "MOV",
- x86_MOVAPD: "MOVAPD",
- x86_MOVAPS: "MOVAPS",
- x86_MOVBE: "MOVBE",
- x86_MOVD: "MOVD",
- x86_MOVDDUP: "MOVDDUP",
- x86_MOVDQ2Q: "MOVDQ2Q",
- x86_MOVDQA: "MOVDQA",
- x86_MOVDQU: "MOVDQU",
- x86_MOVHLPS: "MOVHLPS",
- x86_MOVHPD: "MOVHPD",
- x86_MOVHPS: "MOVHPS",
- x86_MOVLHPS: "MOVLHPS",
- x86_MOVLPD: "MOVLPD",
- x86_MOVLPS: "MOVLPS",
- x86_MOVMSKPD: "MOVMSKPD",
- x86_MOVMSKPS: "MOVMSKPS",
- x86_MOVNTDQ: "MOVNTDQ",
- x86_MOVNTDQA: "MOVNTDQA",
- x86_MOVNTI: "MOVNTI",
- x86_MOVNTPD: "MOVNTPD",
- x86_MOVNTPS: "MOVNTPS",
- x86_MOVNTQ: "MOVNTQ",
- x86_MOVNTSD: "MOVNTSD",
- x86_MOVNTSS: "MOVNTSS",
- x86_MOVQ: "MOVQ",
- x86_MOVQ2DQ: "MOVQ2DQ",
- x86_MOVSB: "MOVSB",
- x86_MOVSD: "MOVSD",
- x86_MOVSD_XMM: "MOVSD_XMM",
- x86_MOVSHDUP: "MOVSHDUP",
- x86_MOVSLDUP: "MOVSLDUP",
- x86_MOVSQ: "MOVSQ",
- x86_MOVSS: "MOVSS",
- x86_MOVSW: "MOVSW",
- x86_MOVSX: "MOVSX",
- x86_MOVSXD: "MOVSXD",
- x86_MOVUPD: "MOVUPD",
- x86_MOVUPS: "MOVUPS",
- x86_MOVZX: "MOVZX",
- x86_MPSADBW: "MPSADBW",
- x86_MUL: "MUL",
- x86_MULPD: "MULPD",
- x86_MULPS: "MULPS",
- x86_MULSD: "MULSD",
- x86_MULSS: "MULSS",
- x86_MWAIT: "MWAIT",
- x86_NEG: "NEG",
- x86_NOP: "NOP",
- x86_NOT: "NOT",
- x86_OR: "OR",
- x86_ORPD: "ORPD",
- x86_ORPS: "ORPS",
- x86_OUT: "OUT",
- x86_OUTSB: "OUTSB",
- x86_OUTSD: "OUTSD",
- x86_OUTSW: "OUTSW",
- x86_PABSB: "PABSB",
- x86_PABSD: "PABSD",
- x86_PABSW: "PABSW",
- x86_PACKSSDW: "PACKSSDW",
- x86_PACKSSWB: "PACKSSWB",
- x86_PACKUSDW: "PACKUSDW",
- x86_PACKUSWB: "PACKUSWB",
- x86_PADDB: "PADDB",
- x86_PADDD: "PADDD",
- x86_PADDQ: "PADDQ",
- x86_PADDSB: "PADDSB",
- x86_PADDSW: "PADDSW",
- x86_PADDUSB: "PADDUSB",
- x86_PADDUSW: "PADDUSW",
- x86_PADDW: "PADDW",
- x86_PALIGNR: "PALIGNR",
- x86_PAND: "PAND",
- x86_PANDN: "PANDN",
- x86_PAUSE: "PAUSE",
- x86_PAVGB: "PAVGB",
- x86_PAVGW: "PAVGW",
- x86_PBLENDVB: "PBLENDVB",
- x86_PBLENDW: "PBLENDW",
- x86_PCLMULQDQ: "PCLMULQDQ",
- x86_PCMPEQB: "PCMPEQB",
- x86_PCMPEQD: "PCMPEQD",
- x86_PCMPEQQ: "PCMPEQQ",
- x86_PCMPEQW: "PCMPEQW",
- x86_PCMPESTRI: "PCMPESTRI",
- x86_PCMPESTRM: "PCMPESTRM",
- x86_PCMPGTB: "PCMPGTB",
- x86_PCMPGTD: "PCMPGTD",
- x86_PCMPGTQ: "PCMPGTQ",
- x86_PCMPGTW: "PCMPGTW",
- x86_PCMPISTRI: "PCMPISTRI",
- x86_PCMPISTRM: "PCMPISTRM",
- x86_PEXTRB: "PEXTRB",
- x86_PEXTRD: "PEXTRD",
- x86_PEXTRQ: "PEXTRQ",
- x86_PEXTRW: "PEXTRW",
- x86_PHADDD: "PHADDD",
- x86_PHADDSW: "PHADDSW",
- x86_PHADDW: "PHADDW",
- x86_PHMINPOSUW: "PHMINPOSUW",
- x86_PHSUBD: "PHSUBD",
- x86_PHSUBSW: "PHSUBSW",
- x86_PHSUBW: "PHSUBW",
- x86_PINSRB: "PINSRB",
- x86_PINSRD: "PINSRD",
- x86_PINSRQ: "PINSRQ",
- x86_PINSRW: "PINSRW",
- x86_PMADDUBSW: "PMADDUBSW",
- x86_PMADDWD: "PMADDWD",
- x86_PMAXSB: "PMAXSB",
- x86_PMAXSD: "PMAXSD",
- x86_PMAXSW: "PMAXSW",
- x86_PMAXUB: "PMAXUB",
- x86_PMAXUD: "PMAXUD",
- x86_PMAXUW: "PMAXUW",
- x86_PMINSB: "PMINSB",
- x86_PMINSD: "PMINSD",
- x86_PMINSW: "PMINSW",
- x86_PMINUB: "PMINUB",
- x86_PMINUD: "PMINUD",
- x86_PMINUW: "PMINUW",
- x86_PMOVMSKB: "PMOVMSKB",
- x86_PMOVSXBD: "PMOVSXBD",
- x86_PMOVSXBQ: "PMOVSXBQ",
- x86_PMOVSXBW: "PMOVSXBW",
- x86_PMOVSXDQ: "PMOVSXDQ",
- x86_PMOVSXWD: "PMOVSXWD",
- x86_PMOVSXWQ: "PMOVSXWQ",
- x86_PMOVZXBD: "PMOVZXBD",
- x86_PMOVZXBQ: "PMOVZXBQ",
- x86_PMOVZXBW: "PMOVZXBW",
- x86_PMOVZXDQ: "PMOVZXDQ",
- x86_PMOVZXWD: "PMOVZXWD",
- x86_PMOVZXWQ: "PMOVZXWQ",
- x86_PMULDQ: "PMULDQ",
- x86_PMULHRSW: "PMULHRSW",
- x86_PMULHUW: "PMULHUW",
- x86_PMULHW: "PMULHW",
- x86_PMULLD: "PMULLD",
- x86_PMULLW: "PMULLW",
- x86_PMULUDQ: "PMULUDQ",
- x86_POP: "POP",
- x86_POPA: "POPA",
- x86_POPAD: "POPAD",
- x86_POPCNT: "POPCNT",
- x86_POPF: "POPF",
- x86_POPFD: "POPFD",
- x86_POPFQ: "POPFQ",
- x86_POR: "POR",
- x86_PREFETCHNTA: "PREFETCHNTA",
- x86_PREFETCHT0: "PREFETCHT0",
- x86_PREFETCHT1: "PREFETCHT1",
- x86_PREFETCHT2: "PREFETCHT2",
- x86_PREFETCHW: "PREFETCHW",
- x86_PSADBW: "PSADBW",
- x86_PSHUFB: "PSHUFB",
- x86_PSHUFD: "PSHUFD",
- x86_PSHUFHW: "PSHUFHW",
- x86_PSHUFLW: "PSHUFLW",
- x86_PSHUFW: "PSHUFW",
- x86_PSIGNB: "PSIGNB",
- x86_PSIGND: "PSIGND",
- x86_PSIGNW: "PSIGNW",
- x86_PSLLD: "PSLLD",
- x86_PSLLDQ: "PSLLDQ",
- x86_PSLLQ: "PSLLQ",
- x86_PSLLW: "PSLLW",
- x86_PSRAD: "PSRAD",
- x86_PSRAW: "PSRAW",
- x86_PSRLD: "PSRLD",
- x86_PSRLDQ: "PSRLDQ",
- x86_PSRLQ: "PSRLQ",
- x86_PSRLW: "PSRLW",
- x86_PSUBB: "PSUBB",
- x86_PSUBD: "PSUBD",
- x86_PSUBQ: "PSUBQ",
- x86_PSUBSB: "PSUBSB",
- x86_PSUBSW: "PSUBSW",
- x86_PSUBUSB: "PSUBUSB",
- x86_PSUBUSW: "PSUBUSW",
- x86_PSUBW: "PSUBW",
- x86_PTEST: "PTEST",
- x86_PUNPCKHBW: "PUNPCKHBW",
- x86_PUNPCKHDQ: "PUNPCKHDQ",
- x86_PUNPCKHQDQ: "PUNPCKHQDQ",
- x86_PUNPCKHWD: "PUNPCKHWD",
- x86_PUNPCKLBW: "PUNPCKLBW",
- x86_PUNPCKLDQ: "PUNPCKLDQ",
- x86_PUNPCKLQDQ: "PUNPCKLQDQ",
- x86_PUNPCKLWD: "PUNPCKLWD",
- x86_PUSH: "PUSH",
- x86_PUSHA: "PUSHA",
- x86_PUSHAD: "PUSHAD",
- x86_PUSHF: "PUSHF",
- x86_PUSHFD: "PUSHFD",
- x86_PUSHFQ: "PUSHFQ",
- x86_PXOR: "PXOR",
- x86_RCL: "RCL",
- x86_RCPPS: "RCPPS",
- x86_RCPSS: "RCPSS",
- x86_RCR: "RCR",
- x86_RDFSBASE: "RDFSBASE",
- x86_RDGSBASE: "RDGSBASE",
- x86_RDMSR: "RDMSR",
- x86_RDPMC: "RDPMC",
- x86_RDRAND: "RDRAND",
- x86_RDTSC: "RDTSC",
- x86_RDTSCP: "RDTSCP",
- x86_RET: "RET",
- x86_ROL: "ROL",
- x86_ROR: "ROR",
- x86_ROUNDPD: "ROUNDPD",
- x86_ROUNDPS: "ROUNDPS",
- x86_ROUNDSD: "ROUNDSD",
- x86_ROUNDSS: "ROUNDSS",
- x86_RSM: "RSM",
- x86_RSQRTPS: "RSQRTPS",
- x86_RSQRTSS: "RSQRTSS",
- x86_SAHF: "SAHF",
- x86_SAR: "SAR",
- x86_SBB: "SBB",
- x86_SCASB: "SCASB",
- x86_SCASD: "SCASD",
- x86_SCASQ: "SCASQ",
- x86_SCASW: "SCASW",
- x86_SETA: "SETA",
- x86_SETAE: "SETAE",
- x86_SETB: "SETB",
- x86_SETBE: "SETBE",
- x86_SETE: "SETE",
- x86_SETG: "SETG",
- x86_SETGE: "SETGE",
- x86_SETL: "SETL",
- x86_SETLE: "SETLE",
- x86_SETNE: "SETNE",
- x86_SETNO: "SETNO",
- x86_SETNP: "SETNP",
- x86_SETNS: "SETNS",
- x86_SETO: "SETO",
- x86_SETP: "SETP",
- x86_SETS: "SETS",
- x86_SFENCE: "SFENCE",
- x86_SGDT: "SGDT",
- x86_SHL: "SHL",
- x86_SHLD: "SHLD",
- x86_SHR: "SHR",
- x86_SHRD: "SHRD",
- x86_SHUFPD: "SHUFPD",
- x86_SHUFPS: "SHUFPS",
- x86_SIDT: "SIDT",
- x86_SLDT: "SLDT",
- x86_SMSW: "SMSW",
- x86_SQRTPD: "SQRTPD",
- x86_SQRTPS: "SQRTPS",
- x86_SQRTSD: "SQRTSD",
- x86_SQRTSS: "SQRTSS",
- x86_STC: "STC",
- x86_STD: "STD",
- x86_STI: "STI",
- x86_STMXCSR: "STMXCSR",
- x86_STOSB: "STOSB",
- x86_STOSD: "STOSD",
- x86_STOSQ: "STOSQ",
- x86_STOSW: "STOSW",
- x86_STR: "STR",
- x86_SUB: "SUB",
- x86_SUBPD: "SUBPD",
- x86_SUBPS: "SUBPS",
- x86_SUBSD: "SUBSD",
- x86_SUBSS: "SUBSS",
- x86_SWAPGS: "SWAPGS",
- x86_SYSCALL: "SYSCALL",
- x86_SYSENTER: "SYSENTER",
- x86_SYSEXIT: "SYSEXIT",
- x86_SYSRET: "SYSRET",
- x86_TEST: "TEST",
- x86_TZCNT: "TZCNT",
- x86_UCOMISD: "UCOMISD",
- x86_UCOMISS: "UCOMISS",
- x86_UD1: "UD1",
- x86_UD2: "UD2",
- x86_UNPCKHPD: "UNPCKHPD",
- x86_UNPCKHPS: "UNPCKHPS",
- x86_UNPCKLPD: "UNPCKLPD",
- x86_UNPCKLPS: "UNPCKLPS",
- x86_VERR: "VERR",
- x86_VERW: "VERW",
- x86_WBINVD: "WBINVD",
- x86_WRFSBASE: "WRFSBASE",
- x86_WRGSBASE: "WRGSBASE",
- x86_WRMSR: "WRMSR",
- x86_XABORT: "XABORT",
- x86_XADD: "XADD",
- x86_XBEGIN: "XBEGIN",
- x86_XCHG: "XCHG",
- x86_XEND: "XEND",
- x86_XGETBV: "XGETBV",
- x86_XLATB: "XLATB",
- x86_XOR: "XOR",
- x86_XORPD: "XORPD",
- x86_XORPS: "XORPS",
- x86_XRSTOR: "XRSTOR",
- x86_XRSTOR64: "XRSTOR64",
- x86_XRSTORS: "XRSTORS",
- x86_XRSTORS64: "XRSTORS64",
- x86_XSAVE: "XSAVE",
- x86_XSAVE64: "XSAVE64",
- x86_XSAVEC: "XSAVEC",
- x86_XSAVEC64: "XSAVEC64",
- x86_XSAVEOPT: "XSAVEOPT",
- x86_XSAVEOPT64: "XSAVEOPT64",
- x86_XSAVES: "XSAVES",
- x86_XSAVES64: "XSAVES64",
- x86_XSETBV: "XSETBV",
- x86_XTEST: "XTEST",
-}
diff --git a/src/cmd/pack/doc.go b/src/cmd/pack/doc.go
index 1529e07e9..a702594e2 100644
--- a/src/cmd/pack/doc.go
+++ b/src/cmd/pack/doc.go
@@ -20,6 +20,10 @@ The operation op is given by one of these letters:
t list files from the archive
x extract files from the archive
+The archive argument to the c command must be non-existent or a
+valid archive file, which will be cleared before adding new entries. It
+is an error if the file exists but is not an archive.
+
For the p, t, and x commands, listing no names on the command line
causes the operation to apply to all files in the archive.
diff --git a/src/cmd/pack/pack.go b/src/cmd/pack/pack.go
index 594433712..ffb2d617a 100644
--- a/src/cmd/pack/pack.go
+++ b/src/cmd/pack/pack.go
@@ -142,16 +142,19 @@ type Archive struct {
matchAll bool // match all files in archive
}
-// archive opens (or if necessary creates) the named archive.
+// archive opens (and if necessary creates) the named archive.
func archive(name string, mode int, files []string) *Archive {
- fd, err := os.OpenFile(name, mode, 0)
- if err != nil && mode&^os.O_TRUNC == os.O_RDWR && os.IsNotExist(err) {
- fd, err = create(name)
+ // If the file exists, it must be an archive. If it doesn't exist, or if
+ // we're doing the c command, indicated by O_TRUNC, truncate the archive.
+ if !existingArchive(name) || mode&os.O_TRUNC != 0 {
+ create(name)
+ mode &^= os.O_TRUNC
}
+ fd, err := os.OpenFile(name, mode, 0)
if err != nil {
log.Fatal(err)
}
- mustBeArchive(fd)
+ checkHeader(fd)
return &Archive{
fd: fd,
files: files,
@@ -160,23 +163,40 @@ func archive(name string, mode int, files []string) *Archive {
}
// create creates and initializes an archive that does not exist.
-func create(name string) (*os.File, error) {
- fd, err := os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
+func create(name string) {
+ fd, err := os.Create(name)
if err != nil {
- return nil, err
+ log.Fatal(err)
+ }
+ _, err = fmt.Fprint(fd, arHeader)
+ if err != nil {
+ log.Fatal(err)
+ }
+ fd.Close()
+}
+
+// existingArchive reports whether the file exists and is a valid archive.
+// If it exists but is not an archive, existingArchive will exit.
+func existingArchive(name string) bool {
+ fd, err := os.Open(name)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return false
+ }
+ log.Fatal("cannot open file: %s", err)
}
- fmt.Fprint(fd, arHeader)
- fd.Seek(0, 0)
- return fd, nil
+ checkHeader(fd)
+ fd.Close()
+ return true
}
-// mustBeArchive verifies the header of the file. It assumes the file offset
-// is 0 coming in, and leaves it positioned immediately after the header.
-func mustBeArchive(fd *os.File) {
+// checkHeader verifies the header of the file. It assumes the file
+// is positioned at 0 and leaves it positioned at the end of the header.
+func checkHeader(fd *os.File) {
buf := make([]byte, len(arHeader))
_, err := io.ReadFull(fd, buf)
if err != nil || string(buf) != arHeader {
- log.Fatal("file is not an archive: bad header")
+ log.Fatal("%s is not an archive: bad header", fd.Name())
}
}
diff --git a/src/cmd/pack/pack_test.go b/src/cmd/pack/pack_test.go
index 486242603..cf6121fcc 100644
--- a/src/cmd/pack/pack_test.go
+++ b/src/cmd/pack/pack_test.go
@@ -56,11 +56,8 @@ func tmpDir(t *testing.T) string {
return name
}
-// Test that we can create an archive, write to it, and get the same contents back.
-// Tests the rv and then the pv command on a new archive.
-func TestCreate(t *testing.T) {
- dir := tmpDir(t)
- defer os.RemoveAll(dir)
+// testCreate creates an archive in the specified directory.
+func testCreate(t *testing.T, dir string) {
name := filepath.Join(dir, "pack.a")
ar := archive(name, os.O_RDWR, nil)
// Add an entry by hand.
@@ -85,6 +82,22 @@ func TestCreate(t *testing.T) {
}
}
+// Test that we can create an archive, write to it, and get the same contents back.
+// Tests the rv and then the pv command on a new archive.
+func TestCreate(t *testing.T) {
+ dir := tmpDir(t)
+ defer os.RemoveAll(dir)
+ testCreate(t, dir)
+}
+
+// Test that we can create an archive twice with the same name (Issue 8369).
+func TestCreateTwice(t *testing.T) {
+ dir := tmpDir(t)
+ defer os.RemoveAll(dir)
+ testCreate(t, dir)
+ testCreate(t, dir)
+}
+
// Test that we can create an archive, put some files in it, and get back a correct listing.
// Tests the tv command.
func TestTableOfContents(t *testing.T) {
@@ -186,8 +199,9 @@ func TestExtract(t *testing.T) {
// Test that pack-created archives can be understood by the tools.
func TestHello(t *testing.T) {
- if runtime.GOOS == "nacl" {
- t.Skip("skipping on nacl")
+ switch runtime.GOOS {
+ case "android", "nacl":
+ t.Skipf("skipping on %s", runtime.GOOS)
}
dir := tmpDir(t)
@@ -222,8 +236,9 @@ func TestHello(t *testing.T) {
// Test that pack works with very long lines in PKGDEF.
func TestLargeDefs(t *testing.T) {
- if runtime.GOOS == "nacl" {
- t.Skip("skipping on nacl")
+ switch runtime.GOOS {
+ case "android", "nacl":
+ t.Skipf("skipping on %s", runtime.GOOS)
}
dir := tmpDir(t)
diff --git a/src/cmd/pprof/README b/src/cmd/pprof/README
new file mode 100644
index 000000000..a728ef235
--- /dev/null
+++ b/src/cmd/pprof/README
@@ -0,0 +1,8 @@
+The pprof in this directory is adapted from the pprof used inside Google
+for C++, Java, and Go programs. Because it was developed for that broader
+context, it is overgeneralized when used here for the specific use case
+of profiling standard Go programs. However, we've left the abstractions
+intact in order to share updates between this copy and Google's internal one.
+
+Please do not take the level of abstraction in this program as an example
+to follow in your own.
diff --git a/src/cmd/pprof/doc.go b/src/cmd/pprof/doc.go
new file mode 100644
index 000000000..c6ff11d10
--- /dev/null
+++ b/src/cmd/pprof/doc.go
@@ -0,0 +1,12 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Pprof interprets and displays profiles of Go programs.
+//
+// Usage:
+//
+// go tool pprof binary profile
+//
+// For more information, see http://blog.golang.org/profiling-go-programs.
+package main
diff --git a/src/cmd/pprof/internal/commands/commands.go b/src/cmd/pprof/internal/commands/commands.go
new file mode 100644
index 000000000..51397a3c6
--- /dev/null
+++ b/src/cmd/pprof/internal/commands/commands.go
@@ -0,0 +1,215 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package commands defines and manages the basic pprof commands
+package commands
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "os"
+ "os/exec"
+ "runtime"
+ "strings"
+
+ "cmd/pprof/internal/plugin"
+ "cmd/pprof/internal/report"
+ "cmd/pprof/internal/svg"
+ "cmd/pprof/internal/tempfile"
+)
+
+// Commands describes the commands accepted by pprof.
+type Commands map[string]*Command
+
+// Command describes the actions for a pprof command. Includes a
+// function for command-line completion, the report format to use
+// during report generation, any postprocessing functions, and whether
+// the command expects a regexp parameter (typically a function name).
+type Command struct {
+ Complete Completer // autocomplete for interactive mode
+ Format int // report format to generate
+ PostProcess PostProcessor // postprocessing to run on report
+ HasParam bool // Collect a parameter from the CLI
+ Usage string // Help text
+}
+
+// Completer is a function for command-line autocompletion
+type Completer func(prefix string) string
+
+// PostProcessor is a function that applies post-processing to the report output
+type PostProcessor func(input *bytes.Buffer, output io.Writer, ui plugin.UI) error
+
+// PProf returns the basic pprof report-generation commands
+func PProf(c Completer, interactive **bool, svgpan **string) Commands {
+ return Commands{
+ // Commands that require no post-processing.
+ "tags": {nil, report.Tags, nil, false, "Outputs all tags in the profile"},
+ "raw": {c, report.Raw, nil, false, "Outputs a text representation of the raw profile"},
+ "dot": {c, report.Dot, nil, false, "Outputs a graph in DOT format"},
+ "top": {c, report.Text, nil, false, "Outputs top entries in text form"},
+ "tree": {c, report.Tree, nil, false, "Outputs a text rendering of call graph"},
+ "text": {c, report.Text, nil, false, "Outputs top entries in text form"},
+ "disasm": {c, report.Dis, nil, true, "Output annotated assembly for functions matching regexp or address"},
+ "list": {c, report.List, nil, true, "Output annotated source for functions matching regexp"},
+ "peek": {c, report.Tree, nil, true, "Output callers/callees of functions matching regexp"},
+
+ // Save binary formats to a file
+ "callgrind": {c, report.Callgrind, awayFromTTY("callgraph.out"), false, "Outputs a graph in callgrind format"},
+ "proto": {c, report.Proto, awayFromTTY("pb.gz"), false, "Outputs the profile in compressed protobuf format"},
+
+ // Generate report in DOT format and postprocess with dot
+ "gif": {c, report.Dot, invokeDot("gif"), false, "Outputs a graph image in GIF format"},
+ "pdf": {c, report.Dot, invokeDot("pdf"), false, "Outputs a graph in PDF format"},
+ "png": {c, report.Dot, invokeDot("png"), false, "Outputs a graph image in PNG format"},
+ "ps": {c, report.Dot, invokeDot("ps"), false, "Outputs a graph in PS format"},
+
+ // Save SVG output into a file after including svgpan library
+ "svg": {c, report.Dot, saveSVGToFile(svgpan), false, "Outputs a graph in SVG format"},
+
+ // Visualize postprocessed dot output
+ "eog": {c, report.Dot, invokeVisualizer(interactive, invokeDot("svg"), "svg", []string{"eog"}), false, "Visualize graph through eog"},
+ "evince": {c, report.Dot, invokeVisualizer(interactive, invokeDot("pdf"), "pdf", []string{"evince"}), false, "Visualize graph through evince"},
+ "gv": {c, report.Dot, invokeVisualizer(interactive, invokeDot("ps"), "ps", []string{"gv --noantialias"}), false, "Visualize graph through gv"},
+ "web": {c, report.Dot, invokeVisualizer(interactive, saveSVGToFile(svgpan), "svg", browsers()), false, "Visualize graph through web browser"},
+
+ // Visualize HTML directly generated by report.
+ "weblist": {c, report.WebList, invokeVisualizer(interactive, awayFromTTY("html"), "html", browsers()), true, "Output annotated source in HTML for functions matching regexp or address"},
+ }
+}
+
+// browsers returns a list of commands to attempt for web visualization
+// on the current platform
+func browsers() []string {
+ cmds := []string{"chrome", "google-chrome", "firefox"}
+ switch runtime.GOOS {
+ case "darwin":
+ cmds = append(cmds, "/usr/bin/open")
+ case "windows":
+ cmds = append(cmds, "cmd /c start")
+ default:
+ cmds = append(cmds, "xdg-open")
+ }
+ return cmds
+}
+
+// NewCompleter creates an autocompletion function for a set of commands.
+func NewCompleter(cs Commands) Completer {
+ return func(line string) string {
+ switch tokens := strings.Fields(line); len(tokens) {
+ case 0:
+ // Nothing to complete
+ case 1:
+ // Single token -- complete command name
+ found := ""
+ for c := range cs {
+ if strings.HasPrefix(c, tokens[0]) {
+ if found != "" {
+ return line
+ }
+ found = c
+ }
+ }
+ if found != "" {
+ return found
+ }
+ default:
+ // Multiple tokens -- complete using command completer
+ if c, ok := cs[tokens[0]]; ok {
+ if c.Complete != nil {
+ lastTokenIdx := len(tokens) - 1
+ lastToken := tokens[lastTokenIdx]
+ if strings.HasPrefix(lastToken, "-") {
+ lastToken = "-" + c.Complete(lastToken[1:])
+ } else {
+ lastToken = c.Complete(lastToken)
+ }
+ return strings.Join(append(tokens[:lastTokenIdx], lastToken), " ")
+ }
+ }
+ }
+ return line
+ }
+}
+
+// awayFromTTY saves the output in a file if it would otherwise go to
+// the terminal screen. This is used to avoid dumping binary data on
+// the screen.
+func awayFromTTY(format string) PostProcessor {
+ return func(input *bytes.Buffer, output io.Writer, ui plugin.UI) error {
+ if output == os.Stdout && ui.IsTerminal() {
+ tempFile, err := tempfile.New("", "profile", "."+format)
+ if err != nil {
+ return err
+ }
+ ui.PrintErr("Generating report in ", tempFile.Name())
+ _, err = fmt.Fprint(tempFile, input)
+ return err
+ }
+ _, err := fmt.Fprint(output, input)
+ return err
+ }
+}
+
+func invokeDot(format string) PostProcessor {
+ divert := awayFromTTY(format)
+ return func(input *bytes.Buffer, output io.Writer, ui plugin.UI) error {
+ if _, err := exec.LookPath("dot"); err != nil {
+ ui.PrintErr("Cannot find dot, have you installed Graphviz?")
+ return err
+ }
+ cmd := exec.Command("dot", "-T"+format)
+ var buf bytes.Buffer
+ cmd.Stdin, cmd.Stdout, cmd.Stderr = input, &buf, os.Stderr
+ if err := cmd.Run(); err != nil {
+ return err
+ }
+ return divert(&buf, output, ui)
+ }
+}
+
+func saveSVGToFile(svgpan **string) PostProcessor {
+ generateSVG := invokeDot("svg")
+ divert := awayFromTTY("svg")
+ return func(input *bytes.Buffer, output io.Writer, ui plugin.UI) error {
+ baseSVG := &bytes.Buffer{}
+ generateSVG(input, baseSVG, ui)
+ massaged := &bytes.Buffer{}
+ fmt.Fprint(massaged, svg.Massage(*baseSVG, **svgpan))
+ return divert(massaged, output, ui)
+ }
+}
+
+func invokeVisualizer(interactive **bool, format PostProcessor, suffix string, visualizers []string) PostProcessor {
+ return func(input *bytes.Buffer, output io.Writer, ui plugin.UI) error {
+ tempFile, err := tempfile.New(os.Getenv("PPROF_TMPDIR"), "pprof", "."+suffix)
+ if err != nil {
+ return err
+ }
+ tempfile.DeferDelete(tempFile.Name())
+ if err = format(input, tempFile, ui); err != nil {
+ return err
+ }
+ tempFile.Close() // on windows, if the file is Open, start cannot access it.
+ // Try visualizers until one is successful
+ for _, v := range visualizers {
+ // Separate command and arguments for exec.Command.
+ args := strings.Split(v, " ")
+ if len(args) == 0 {
+ continue
+ }
+ viewer := exec.Command(args[0], append(args[1:], tempFile.Name())...)
+ viewer.Stderr = os.Stderr
+ if err = viewer.Start(); err == nil {
+ if !**interactive {
+ // In command-line mode, wait for the viewer to be closed
+ // before proceeding
+ return viewer.Wait()
+ }
+ return nil
+ }
+ }
+ return err
+ }
+}
diff --git a/src/cmd/pprof/internal/driver/driver.go b/src/cmd/pprof/internal/driver/driver.go
new file mode 100644
index 000000000..68b5d1b61
--- /dev/null
+++ b/src/cmd/pprof/internal/driver/driver.go
@@ -0,0 +1,1036 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package driver implements the core pprof functionality. It can be
+// parameterized with a flag implementation, fetch and symbolize
+// mechanisms.
+package driver
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "net/url"
+ "os"
+ "path/filepath"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+ "sync"
+ "time"
+
+ "cmd/pprof/internal/commands"
+ "cmd/pprof/internal/plugin"
+ "cmd/pprof/internal/profile"
+ "cmd/pprof/internal/report"
+ "cmd/pprof/internal/tempfile"
+)
+
+// PProf acquires a profile, and symbolizes it using a profile
+// manager. Then it generates a report formatted according to the
+// options selected through the flags package.
+func PProf(flagset plugin.FlagSet, fetch plugin.Fetcher, sym plugin.Symbolizer, obj plugin.ObjTool, ui plugin.UI, overrides commands.Commands) error {
+ // Remove any temporary files created during pprof processing.
+ defer tempfile.Cleanup()
+
+ f, err := getFlags(flagset, overrides, ui)
+ if err != nil {
+ return err
+ }
+
+ obj.SetConfig(*f.flagTools)
+
+ sources := f.profileSource
+ if len(sources) > 1 {
+ source := sources[0]
+ // If the first argument is a supported object file, treat as executable.
+ if file, err := obj.Open(source, 0); err == nil {
+ file.Close()
+ f.profileExecName = source
+ sources = sources[1:]
+ } else if *f.flagBuildID == "" && isBuildID(source) {
+ f.flagBuildID = &source
+ sources = sources[1:]
+ }
+ }
+
+ // errMu protects concurrent accesses to errset and err. errset is set if an
+ // error is encountered by one of the goroutines grabbing a profile.
+ errMu, errset := sync.Mutex{}, false
+
+ // Fetch profiles.
+ wg := sync.WaitGroup{}
+ profs := make([]*profile.Profile, len(sources))
+ for i, source := range sources {
+ wg.Add(1)
+ go func(i int, src string) {
+ defer wg.Done()
+ p, grabErr := grabProfile(src, f.profileExecName, *f.flagBuildID, fetch, sym, obj, ui, f)
+ if grabErr != nil {
+ errMu.Lock()
+ defer errMu.Unlock()
+ errset, err = true, grabErr
+ return
+ }
+ profs[i] = p
+ }(i, source)
+ }
+ wg.Wait()
+ if errset {
+ return err
+ }
+
+ // Merge profiles.
+ prof := profs[0]
+ for _, p := range profs[1:] {
+ if err = prof.Merge(p, 1); err != nil {
+ return err
+ }
+ }
+
+ if *f.flagBase != "" {
+ // Fetch base profile and subtract from current profile.
+ base, err := grabProfile(*f.flagBase, f.profileExecName, *f.flagBuildID, fetch, sym, obj, ui, f)
+ if err != nil {
+ return err
+ }
+
+ if err = prof.Merge(base, -1); err != nil {
+ return err
+ }
+ }
+
+ if err := processFlags(prof, ui, f); err != nil {
+ return err
+ }
+
+ prof.RemoveUninteresting()
+
+ if *f.flagInteractive {
+ return interactive(prof, obj, ui, f)
+ }
+
+ return generate(false, prof, obj, ui, f)
+}
+
+// isBuildID determines if the profile may contain a build ID, by
+// checking that it is a string of hex digits.
+func isBuildID(id string) bool {
+ return strings.Trim(id, "0123456789abcdefABCDEF") == ""
+}
+
+// adjustURL updates the profile source URL based on heuristics. It
+// will append ?seconds=sec for CPU profiles if not already
+// specified. Returns the hostname if the profile is remote.
+func adjustURL(source string, sec int, ui plugin.UI) (adjusted, host string, duration time.Duration) {
+ // If there is a local file with this name, just use it.
+ if _, err := os.Stat(source); err == nil {
+ return source, "", 0
+ }
+
+ url, err := url.Parse(source)
+
+ // Automatically add http:// to URLs of the form hostname:port/path.
+ // url.Parse treats "hostname" as the Scheme.
+ if err != nil || (url.Host == "" && url.Scheme != "" && url.Scheme != "file") {
+ url, err = url.Parse("http://" + source)
+ if err != nil {
+ return source, url.Host, time.Duration(30) * time.Second
+ }
+ }
+ if scheme := strings.ToLower(url.Scheme); scheme == "" || scheme == "file" {
+ url.Scheme = ""
+ return url.String(), "", 0
+ }
+
+ values := url.Query()
+ if urlSeconds := values.Get("seconds"); urlSeconds != "" {
+ if us, err := strconv.ParseInt(urlSeconds, 10, 32); err == nil {
+ if sec >= 0 {
+ ui.PrintErr("Overriding -seconds for URL ", source)
+ }
+ sec = int(us)
+ }
+ }
+
+ switch strings.ToLower(url.Path) {
+ case "", "/":
+ // Apply default /profilez.
+ url.Path = "/profilez"
+ case "/protoz":
+ // Rewrite to /profilez?type=proto
+ url.Path = "/profilez"
+ values.Set("type", "proto")
+ }
+
+ if hasDuration(url.Path) {
+ if sec > 0 {
+ duration = time.Duration(sec) * time.Second
+ values.Set("seconds", fmt.Sprintf("%d", sec))
+ } else {
+ // Assume default duration: 30 seconds
+ duration = 30 * time.Second
+ }
+ }
+ url.RawQuery = values.Encode()
+ return url.String(), url.Host, duration
+}
+
+func hasDuration(path string) bool {
+ for _, trigger := range []string{"profilez", "wallz", "/profile"} {
+ if strings.Contains(path, trigger) {
+ return true
+ }
+ }
+ return false
+}
+
+// preprocess does filtering and aggregation of a profile based on the
+// requested options.
+func preprocess(prof *profile.Profile, ui plugin.UI, f *flags) error {
+ if *f.flagFocus != "" || *f.flagIgnore != "" || *f.flagHide != "" {
+ focus, ignore, hide, err := compileFocusIgnore(*f.flagFocus, *f.flagIgnore, *f.flagHide)
+ if err != nil {
+ return err
+ }
+ fm, im, hm := prof.FilterSamplesByName(focus, ignore, hide)
+
+ warnNoMatches(fm, *f.flagFocus, "Focus", ui)
+ warnNoMatches(im, *f.flagIgnore, "Ignore", ui)
+ warnNoMatches(hm, *f.flagHide, "Hide", ui)
+ }
+
+ if *f.flagTagFocus != "" || *f.flagTagIgnore != "" {
+ focus, err := compileTagFilter(*f.flagTagFocus, ui)
+ if err != nil {
+ return err
+ }
+ ignore, err := compileTagFilter(*f.flagTagIgnore, ui)
+ if err != nil {
+ return err
+ }
+ fm, im := prof.FilterSamplesByTag(focus, ignore)
+
+ warnNoMatches(fm, *f.flagTagFocus, "TagFocus", ui)
+ warnNoMatches(im, *f.flagTagIgnore, "TagIgnore", ui)
+ }
+
+ return aggregate(prof, f)
+}
+
+func compileFocusIgnore(focus, ignore, hide string) (f, i, h *regexp.Regexp, err error) {
+ if focus != "" {
+ if f, err = regexp.Compile(focus); err != nil {
+ return nil, nil, nil, fmt.Errorf("parsing focus regexp: %v", err)
+ }
+ }
+
+ if ignore != "" {
+ if i, err = regexp.Compile(ignore); err != nil {
+ return nil, nil, nil, fmt.Errorf("parsing ignore regexp: %v", err)
+ }
+ }
+
+ if hide != "" {
+ if h, err = regexp.Compile(hide); err != nil {
+ return nil, nil, nil, fmt.Errorf("parsing hide regexp: %v", err)
+ }
+ }
+ return
+}
+
+func compileTagFilter(filter string, ui plugin.UI) (f func(string, string, int64) bool, err error) {
+ if filter == "" {
+ return nil, nil
+ }
+ if numFilter := parseTagFilterRange(filter); numFilter != nil {
+ ui.PrintErr("Interpreted '", filter, "' as range, not regexp")
+ return func(key, val string, num int64) bool {
+ if val != "" {
+ return false
+ }
+ return numFilter(num, key)
+ }, nil
+ }
+ fx, err := regexp.Compile(filter)
+ if err != nil {
+ return nil, err
+ }
+
+ return func(key, val string, num int64) bool {
+ if val == "" {
+ return false
+ }
+ return fx.MatchString(key + ":" + val)
+ }, nil
+}
+
+var tagFilterRangeRx = regexp.MustCompile("([[:digit:]]+)([[:alpha:]]+)")
+
+// parseTagFilterRange returns a function to checks if a value is
+// contained on the range described by a string. It can recognize
+// strings of the form:
+// "32kb" -- matches values == 32kb
+// ":64kb" -- matches values <= 64kb
+// "4mb:" -- matches values >= 4mb
+// "12kb:64mb" -- matches values between 12kb and 64mb (both included).
+func parseTagFilterRange(filter string) func(int64, string) bool {
+ ranges := tagFilterRangeRx.FindAllStringSubmatch(filter, 2)
+ if len(ranges) == 0 {
+ return nil // No ranges were identified
+ }
+ v, err := strconv.ParseInt(ranges[0][1], 10, 64)
+ if err != nil {
+ panic(fmt.Errorf("Failed to parse int %s: %v", ranges[0][1], err))
+ }
+ value, unit := report.ScaleValue(v, ranges[0][2], ranges[0][2])
+ if len(ranges) == 1 {
+ switch match := ranges[0][0]; filter {
+ case match:
+ return func(v int64, u string) bool {
+ sv, su := report.ScaleValue(v, u, unit)
+ return su == unit && sv == value
+ }
+ case match + ":":
+ return func(v int64, u string) bool {
+ sv, su := report.ScaleValue(v, u, unit)
+ return su == unit && sv >= value
+ }
+ case ":" + match:
+ return func(v int64, u string) bool {
+ sv, su := report.ScaleValue(v, u, unit)
+ return su == unit && sv <= value
+ }
+ }
+ return nil
+ }
+ if filter != ranges[0][0]+":"+ranges[1][0] {
+ return nil
+ }
+ if v, err = strconv.ParseInt(ranges[1][1], 10, 64); err != nil {
+ panic(fmt.Errorf("Failed to parse int %s: %v", ranges[1][1], err))
+ }
+ value2, unit2 := report.ScaleValue(v, ranges[1][2], unit)
+ if unit != unit2 {
+ return nil
+ }
+ return func(v int64, u string) bool {
+ sv, su := report.ScaleValue(v, u, unit)
+ return su == unit && sv >= value && sv <= value2
+ }
+}
+
+func warnNoMatches(match bool, rx, option string, ui plugin.UI) {
+ if !match && rx != "" && rx != "." {
+ ui.PrintErr(option + " expression matched no samples: " + rx)
+ }
+}
+
+// grabProfile fetches and symbolizes a profile.
+func grabProfile(source, exec, buildid string, fetch plugin.Fetcher, sym plugin.Symbolizer, obj plugin.ObjTool, ui plugin.UI, f *flags) (*profile.Profile, error) {
+ source, host, duration := adjustURL(source, *f.flagSeconds, ui)
+ remote := host != ""
+
+ if remote {
+ ui.Print("Fetching profile from ", source)
+ if duration != 0 {
+ ui.Print("Please wait... (" + duration.String() + ")")
+ }
+ }
+
+ now := time.Now()
+ // Fetch profile from source.
+ // Give 50% slack on the timeout.
+ p, err := fetch(source, duration+duration/2, ui)
+ if err != nil {
+ return nil, err
+ }
+
+ // Update the time/duration if the profile source doesn't include it.
+ // TODO(rsilvera): Remove this when we remove support for legacy profiles.
+ if remote {
+ if p.TimeNanos == 0 {
+ p.TimeNanos = now.UnixNano()
+ }
+ if duration != 0 && p.DurationNanos == 0 {
+ p.DurationNanos = int64(duration)
+ }
+ }
+
+ // Replace executable/buildID with the options provided in the
+ // command line. Assume the executable is the first Mapping entry.
+ if exec != "" || buildid != "" {
+ if len(p.Mapping) == 0 {
+ // Create a fake mapping to hold the user option, and associate
+ // all samples to it.
+ m := &profile.Mapping{
+ ID: 1,
+ }
+ for _, l := range p.Location {
+ l.Mapping = m
+ }
+ p.Mapping = []*profile.Mapping{m}
+ }
+ if exec != "" {
+ p.Mapping[0].File = exec
+ }
+ if buildid != "" {
+ p.Mapping[0].BuildID = buildid
+ }
+ }
+
+ if err := sym(*f.flagSymbolize, source, p, obj, ui); err != nil {
+ return nil, err
+ }
+
+ // Save a copy of any remote profiles, unless the user is explicitly
+ // saving it.
+ if remote && !f.isFormat("proto") {
+ prefix := "pprof."
+ if len(p.Mapping) > 0 && p.Mapping[0].File != "" {
+ prefix = prefix + filepath.Base(p.Mapping[0].File) + "."
+ }
+ if !strings.ContainsRune(host, os.PathSeparator) {
+ prefix = prefix + host + "."
+ }
+ for _, s := range p.SampleType {
+ prefix = prefix + s.Type + "."
+ }
+
+ dir := os.Getenv("PPROF_TMPDIR")
+ tempFile, err := tempfile.New(dir, prefix, ".pb.gz")
+ if err == nil {
+ if err = p.Write(tempFile); err == nil {
+ ui.PrintErr("Saved profile in ", tempFile.Name())
+ }
+ }
+ if err != nil {
+ ui.PrintErr("Could not save profile: ", err)
+ }
+ }
+
+ if err := p.Demangle(obj.Demangle); err != nil {
+ ui.PrintErr("Failed to demangle profile: ", err)
+ }
+
+ if err := p.CheckValid(); err != nil {
+ return nil, fmt.Errorf("Grab %s: %v", source, err)
+ }
+
+ return p, nil
+}
+
+type flags struct {
+ flagInteractive *bool // Accept commands interactively
+ flagCommands map[string]*bool // pprof commands without parameters
+ flagParamCommands map[string]*string // pprof commands with parameters
+
+ flagSVGPan *string // URL to fetch the SVG Pan library
+ flagOutput *string // Output file name
+
+ flagCum *bool // Sort by cumulative data
+ flagCallTree *bool // generate a context-sensitive call tree
+
+ flagAddresses *bool // Report at address level
+ flagLines *bool // Report at source line level
+ flagFiles *bool // Report at file level
+ flagFunctions *bool // Report at function level [default]
+
+ flagSymbolize *string // Symbolization options (=none to disable)
+ flagBuildID *string // Override build if for first mapping
+
+ flagNodeCount *int // Max number of nodes to show
+ flagNodeFraction *float64 // Hide nodes below <f>*total
+ flagEdgeFraction *float64 // Hide edges below <f>*total
+ flagTrim *bool // Set to false to ignore NodeCount/*Fraction
+ flagFocus *string // Restricts to paths going through a node matching regexp
+ flagIgnore *string // Skips paths going through any nodes matching regexp
+ flagHide *string // Skips sample locations matching regexp
+ flagTagFocus *string // Restrict to samples tagged with key:value matching regexp
+ flagTagIgnore *string // Discard samples tagged with key:value matching regexp
+ flagDropNegative *bool // Skip negative values
+
+ flagBase *string // Source for base profile to user for comparison
+
+ flagSeconds *int // Length of time for dynamic profiles
+
+ flagTotalDelay *bool // Display total delay at each region
+ flagContentions *bool // Display number of delays at each region
+ flagMeanDelay *bool // Display mean delay at each region
+
+ flagInUseSpace *bool // Display in-use memory size
+ flagInUseObjects *bool // Display in-use object counts
+ flagAllocSpace *bool // Display allocated memory size
+ flagAllocObjects *bool // Display allocated object counts
+ flagDisplayUnit *string // Measurement unit to use on reports
+ flagDivideBy *float64 // Ratio to divide sample values
+
+ flagSampleIndex *int // Sample value to use in reports.
+ flagMean *bool // Use mean of sample_index over count
+
+ flagTools *string
+ profileSource []string
+ profileExecName string
+
+ extraUsage string
+ commands commands.Commands
+}
+
+func (f *flags) isFormat(format string) bool {
+ if fl := f.flagCommands[format]; fl != nil {
+ return *fl
+ }
+ if fl := f.flagParamCommands[format]; fl != nil {
+ return *fl != ""
+ }
+ return false
+}
+
+// String provides a printable representation for the current set of flags.
+func (f *flags) String(p *profile.Profile) string {
+ var ret string
+
+ if ix := *f.flagSampleIndex; ix != -1 {
+ ret += fmt.Sprintf(" %-25s : %d (%s)\n", "sample_index", ix, p.SampleType[ix].Type)
+ }
+ if ix := *f.flagMean; ix {
+ ret += boolFlagString("mean")
+ }
+ if *f.flagDisplayUnit != "minimum" {
+ ret += stringFlagString("unit", *f.flagDisplayUnit)
+ }
+
+ switch {
+ case *f.flagInteractive:
+ ret += boolFlagString("interactive")
+ }
+ for name, fl := range f.flagCommands {
+ if *fl {
+ ret += boolFlagString(name)
+ }
+ }
+
+ if *f.flagCum {
+ ret += boolFlagString("cum")
+ }
+ if *f.flagCallTree {
+ ret += boolFlagString("call_tree")
+ }
+
+ switch {
+ case *f.flagAddresses:
+ ret += boolFlagString("addresses")
+ case *f.flagLines:
+ ret += boolFlagString("lines")
+ case *f.flagFiles:
+ ret += boolFlagString("files")
+ case *f.flagFunctions:
+ ret += boolFlagString("functions")
+ }
+
+ if *f.flagNodeCount != -1 {
+ ret += intFlagString("nodecount", *f.flagNodeCount)
+ }
+
+ ret += floatFlagString("nodefraction", *f.flagNodeFraction)
+ ret += floatFlagString("edgefraction", *f.flagEdgeFraction)
+
+ if *f.flagFocus != "" {
+ ret += stringFlagString("focus", *f.flagFocus)
+ }
+ if *f.flagIgnore != "" {
+ ret += stringFlagString("ignore", *f.flagIgnore)
+ }
+ if *f.flagHide != "" {
+ ret += stringFlagString("hide", *f.flagHide)
+ }
+
+ if *f.flagTagFocus != "" {
+ ret += stringFlagString("tagfocus", *f.flagTagFocus)
+ }
+ if *f.flagTagIgnore != "" {
+ ret += stringFlagString("tagignore", *f.flagTagIgnore)
+ }
+
+ return ret
+}
+
+func boolFlagString(label string) string {
+ return fmt.Sprintf(" %-25s : true\n", label)
+}
+
+func stringFlagString(label, value string) string {
+ return fmt.Sprintf(" %-25s : %s\n", label, value)
+}
+
+func intFlagString(label string, value int) string {
+ return fmt.Sprintf(" %-25s : %d\n", label, value)
+}
+
+func floatFlagString(label string, value float64) string {
+ return fmt.Sprintf(" %-25s : %f\n", label, value)
+}
+
+// Utility routines to set flag values.
+func newBool(b bool) *bool {
+ return &b
+}
+
+func newString(s string) *string {
+ return &s
+}
+
+func newFloat64(fl float64) *float64 {
+ return &fl
+}
+
+func newInt(i int) *int {
+ return &i
+}
+
+func (f *flags) usage(ui plugin.UI) {
+ var commandMsg []string
+ for name, cmd := range f.commands {
+ if cmd.HasParam {
+ name = name + "=p"
+ }
+ commandMsg = append(commandMsg,
+ fmt.Sprintf(" -%-16s %s", name, cmd.Usage))
+ }
+
+ sort.Strings(commandMsg)
+
+ text := usageMsgHdr + strings.Join(commandMsg, "\n") + "\n" + usageMsg + "\n"
+ if f.extraUsage != "" {
+ text += f.extraUsage + "\n"
+ }
+ text += usageMsgVars
+ ui.Print(text)
+}
+
+func getFlags(flag plugin.FlagSet, overrides commands.Commands, ui plugin.UI) (*flags, error) {
+ f := &flags{
+ flagInteractive: flag.Bool("interactive", false, "Accepts commands interactively"),
+ flagCommands: make(map[string]*bool),
+ flagParamCommands: make(map[string]*string),
+
+ // Filename for file-based output formats, stdout by default.
+ flagOutput: flag.String("output", "", "Output filename for file-based outputs "),
+ // Comparisons.
+ flagBase: flag.String("base", "", "Source for base profile for comparison"),
+ flagDropNegative: flag.Bool("drop_negative", false, "Ignore negative differences"),
+
+ flagSVGPan: flag.String("svgpan", "https://www.cyberz.org/projects/SVGPan/SVGPan.js", "URL for SVGPan Library"),
+ // Data sorting criteria.
+ flagCum: flag.Bool("cum", false, "Sort by cumulative data"),
+ // Graph handling options.
+ flagCallTree: flag.Bool("call_tree", false, "Create a context-sensitive call tree"),
+ // Granularity of output resolution.
+ flagAddresses: flag.Bool("addresses", false, "Report at address level"),
+ flagLines: flag.Bool("lines", false, "Report at source line level"),
+ flagFiles: flag.Bool("files", false, "Report at source file level"),
+ flagFunctions: flag.Bool("functions", false, "Report at function level [default]"),
+ // Internal options.
+ flagSymbolize: flag.String("symbolize", "", "Options for profile symbolization"),
+ flagBuildID: flag.String("buildid", "", "Override build id for first mapping"),
+ // Filtering options
+ flagNodeCount: flag.Int("nodecount", -1, "Max number of nodes to show"),
+ flagNodeFraction: flag.Float64("nodefraction", 0.005, "Hide nodes below <f>*total"),
+ flagEdgeFraction: flag.Float64("edgefraction", 0.001, "Hide edges below <f>*total"),
+ flagTrim: flag.Bool("trim", true, "Honor nodefraction/edgefraction/nodecount defaults"),
+ flagFocus: flag.String("focus", "", "Restricts to paths going through a node matching regexp"),
+ flagIgnore: flag.String("ignore", "", "Skips paths going through any nodes matching regexp"),
+ flagHide: flag.String("hide", "", "Skips nodes matching regexp"),
+ flagTagFocus: flag.String("tagfocus", "", "Restrict to samples with tags in range or matched by regexp"),
+ flagTagIgnore: flag.String("tagignore", "", "Discard samples with tags in range or matched by regexp"),
+ // CPU profile options
+ flagSeconds: flag.Int("seconds", -1, "Length of time for dynamic profiles"),
+ // Heap profile options
+ flagInUseSpace: flag.Bool("inuse_space", false, "Display in-use memory size"),
+ flagInUseObjects: flag.Bool("inuse_objects", false, "Display in-use object counts"),
+ flagAllocSpace: flag.Bool("alloc_space", false, "Display allocated memory size"),
+ flagAllocObjects: flag.Bool("alloc_objects", false, "Display allocated object counts"),
+ flagDisplayUnit: flag.String("unit", "minimum", "Measurement units to display"),
+ flagDivideBy: flag.Float64("divide_by", 1.0, "Ratio to divide all samples before visualization"),
+ flagSampleIndex: flag.Int("sample_index", -1, "Index of sample value to report"),
+ flagMean: flag.Bool("mean", false, "Average sample value over first value (count)"),
+ // Contention profile options
+ flagTotalDelay: flag.Bool("total_delay", false, "Display total delay at each region"),
+ flagContentions: flag.Bool("contentions", false, "Display number of delays at each region"),
+ flagMeanDelay: flag.Bool("mean_delay", false, "Display mean delay at each region"),
+ flagTools: flag.String("tools", os.Getenv("PPROF_TOOLS"), "Path for object tool pathnames"),
+ extraUsage: flag.ExtraUsage(),
+ }
+
+ // Flags used during command processing
+ interactive := &f.flagInteractive
+ svgpan := &f.flagSVGPan
+ f.commands = commands.PProf(functionCompleter, interactive, svgpan)
+
+ // Override commands
+ for name, cmd := range overrides {
+ f.commands[name] = cmd
+ }
+
+ for name, cmd := range f.commands {
+ if cmd.HasParam {
+ f.flagParamCommands[name] = flag.String(name, "", "Generate a report in "+name+" format, matching regexp")
+ } else {
+ f.flagCommands[name] = flag.Bool(name, false, "Generate a report in "+name+" format")
+ }
+ }
+
+ args := flag.Parse(func() { f.usage(ui) })
+ if len(args) == 0 {
+ return nil, fmt.Errorf("no profile source specified")
+ }
+
+ f.profileSource = args
+
+ // Instruct legacy heapz parsers to grab historical allocation data,
+ // instead of the default in-use data. Not available with tcmalloc.
+ if *f.flagAllocSpace || *f.flagAllocObjects {
+ profile.LegacyHeapAllocated = true
+ }
+
+ if profileDir := os.Getenv("PPROF_TMPDIR"); profileDir == "" {
+ profileDir = os.Getenv("HOME") + "/pprof"
+ os.Setenv("PPROF_TMPDIR", profileDir)
+ if err := os.MkdirAll(profileDir, 0755); err != nil {
+ return nil, fmt.Errorf("failed to access temp dir %s: %v", profileDir, err)
+ }
+ }
+
+ return f, nil
+}
+
+func processFlags(p *profile.Profile, ui plugin.UI, f *flags) error {
+ flagDis := f.isFormat("disasm")
+ flagPeek := f.isFormat("peek")
+ flagWebList := f.isFormat("weblist")
+ flagList := f.isFormat("list")
+
+ if flagDis || flagWebList {
+ // Collect all samples at address granularity for assembly
+ // listing.
+ f.flagNodeCount = newInt(0)
+ f.flagAddresses = newBool(true)
+ f.flagLines = newBool(false)
+ f.flagFiles = newBool(false)
+ f.flagFunctions = newBool(false)
+ }
+
+ if flagPeek {
+ // Collect all samples at function granularity for peek command
+ f.flagNodeCount = newInt(0)
+ f.flagAddresses = newBool(false)
+ f.flagLines = newBool(false)
+ f.flagFiles = newBool(false)
+ f.flagFunctions = newBool(true)
+ }
+
+ if flagList {
+ // Collect all samples at fileline granularity for source
+ // listing.
+ f.flagNodeCount = newInt(0)
+ f.flagAddresses = newBool(false)
+ f.flagLines = newBool(true)
+ f.flagFiles = newBool(false)
+ f.flagFunctions = newBool(false)
+ }
+
+ if !*f.flagTrim {
+ f.flagNodeCount = newInt(0)
+ f.flagNodeFraction = newFloat64(0)
+ f.flagEdgeFraction = newFloat64(0)
+ }
+
+ if oc := countFlagMap(f.flagCommands, f.flagParamCommands); oc == 0 {
+ f.flagInteractive = newBool(true)
+ } else if oc > 1 {
+ f.usage(ui)
+ return fmt.Errorf("must set at most one output format")
+ }
+
+ // Apply nodecount defaults for non-interactive mode. The
+ // interactive shell will apply defaults for the interactive mode.
+ if *f.flagNodeCount < 0 && !*f.flagInteractive {
+ switch {
+ default:
+ f.flagNodeCount = newInt(80)
+ case f.isFormat("text"):
+ f.flagNodeCount = newInt(0)
+ }
+ }
+
+ // Apply legacy options and diagnose conflicts.
+ if rc := countFlags([]*bool{f.flagAddresses, f.flagLines, f.flagFiles, f.flagFunctions}); rc == 0 {
+ f.flagFunctions = newBool(true)
+ } else if rc > 1 {
+ f.usage(ui)
+ return fmt.Errorf("must set at most one granularity option")
+ }
+
+ var err error
+ si, sm := *f.flagSampleIndex, *f.flagMean || *f.flagMeanDelay
+ si, err = sampleIndex(p, &f.flagTotalDelay, si, 1, "delay", "-total_delay", err)
+ si, err = sampleIndex(p, &f.flagMeanDelay, si, 1, "delay", "-mean_delay", err)
+ si, err = sampleIndex(p, &f.flagContentions, si, 0, "contentions", "-contentions", err)
+
+ si, err = sampleIndex(p, &f.flagInUseSpace, si, 1, "inuse_space", "-inuse_space", err)
+ si, err = sampleIndex(p, &f.flagInUseObjects, si, 0, "inuse_objects", "-inuse_objects", err)
+ si, err = sampleIndex(p, &f.flagAllocSpace, si, 1, "alloc_space", "-alloc_space", err)
+ si, err = sampleIndex(p, &f.flagAllocObjects, si, 0, "alloc_objects", "-alloc_objects", err)
+
+ if si == -1 {
+ // Use last value if none is requested.
+ si = len(p.SampleType) - 1
+ } else if si < 0 || si >= len(p.SampleType) {
+ err = fmt.Errorf("sample_index value %d out of range [0..%d]", si, len(p.SampleType)-1)
+ }
+
+ if err != nil {
+ f.usage(ui)
+ return err
+ }
+ f.flagSampleIndex, f.flagMean = newInt(si), newBool(sm)
+ return nil
+}
+
+func sampleIndex(p *profile.Profile, flag **bool,
+ sampleIndex int,
+ newSampleIndex int,
+ sampleType, option string,
+ err error) (int, error) {
+ if err != nil || !**flag {
+ return sampleIndex, err
+ }
+ *flag = newBool(false)
+ if sampleIndex != -1 {
+ return 0, fmt.Errorf("set at most one sample value selection option")
+ }
+ if newSampleIndex >= len(p.SampleType) ||
+ p.SampleType[newSampleIndex].Type != sampleType {
+ return 0, fmt.Errorf("option %s not valid for this profile", option)
+ }
+ return newSampleIndex, nil
+}
+
+func countFlags(bs []*bool) int {
+ var c int
+ for _, b := range bs {
+ if *b {
+ c++
+ }
+ }
+ return c
+}
+
+func countFlagMap(bms map[string]*bool, bmrxs map[string]*string) int {
+ var c int
+ for _, b := range bms {
+ if *b {
+ c++
+ }
+ }
+ for _, s := range bmrxs {
+ if *s != "" {
+ c++
+ }
+ }
+ return c
+}
+
+var usageMsgHdr = "usage: pprof [options] [binary] <profile source> ...\n" +
+ "Output format (only set one):\n"
+
+var usageMsg = "Output file parameters (for file-based output formats):\n" +
+ " -output=f Generate output on file f (stdout by default)\n" +
+ "Output granularity (only set one):\n" +
+ " -functions Report at function level [default]\n" +
+ " -files Report at source file level\n" +
+ " -lines Report at source line level\n" +
+ " -addresses Report at address level\n" +
+ "Comparison options:\n" +
+ " -base <profile> Show delta from this profile\n" +
+ " -drop_negative Ignore negative differences\n" +
+ "Sorting options:\n" +
+ " -cum Sort by cumulative data\n\n" +
+ "Dynamic profile options:\n" +
+ " -seconds=N Length of time for dynamic profiles\n" +
+ "Profile trimming options:\n" +
+ " -nodecount=N Max number of nodes to show\n" +
+ " -nodefraction=f Hide nodes below <f>*total\n" +
+ " -edgefraction=f Hide edges below <f>*total\n" +
+ "Sample value selection option (by index):\n" +
+ " -sample_index Index of sample value to display\n" +
+ " -mean Average sample value over first value\n" +
+ "Sample value selection option (for heap profiles):\n" +
+ " -inuse_space Display in-use memory size\n" +
+ " -inuse_objects Display in-use object counts\n" +
+ " -alloc_space Display allocated memory size\n" +
+ " -alloc_objects Display allocated object counts\n" +
+ "Sample value selection option (for contention profiles):\n" +
+ " -total_delay Display total delay at each region\n" +
+ " -contentions Display number of delays at each region\n" +
+ " -mean_delay Display mean delay at each region\n" +
+ "Filtering options:\n" +
+ " -focus=r Restricts to paths going through a node matching regexp\n" +
+ " -ignore=r Skips paths going through any nodes matching regexp\n" +
+ " -tagfocus=r Restrict to samples tagged with key:value matching regexp\n" +
+ " Restrict to samples with numeric tags in range (eg \"32kb:1mb\")\n" +
+ " -tagignore=r Discard samples tagged with key:value matching regexp\n" +
+ " Avoid samples with numeric tags in range (eg \"1mb:\")\n" +
+ "Miscellaneous:\n" +
+ " -call_tree Generate a context-sensitive call tree\n" +
+ " -unit=u Convert all samples to unit u for display\n" +
+ " -show_bytes Display all space in bytes\n" +
+ " -divide_by=f Scale all samples by dividing them by f\n" +
+ " -buildid=id Override build id for main binary in profile\n" +
+ " -tools=path Search path for object-level tools\n" +
+ " -help This message"
+
+var usageMsgVars = "Environment Variables:\n" +
+ " PPROF_TMPDIR Location for temporary files (default $HOME/pprof)\n" +
+ " PPROF_TOOLS Search path for object-level tools\n" +
+ " PPROF_BINARY_PATH Search path for local binary files\n" +
+ " default: $HOME/pprof/binaries\n" +
+ " finds binaries by $name and $buildid/$name"
+
+func aggregate(prof *profile.Profile, f *flags) error {
+ switch {
+ case f.isFormat("proto"), f.isFormat("raw"):
+ // No aggregation for raw profiles.
+ case f.isFormat("callgrind"):
+ // Aggregate to file/line for callgrind.
+ fallthrough
+ case *f.flagLines:
+ return prof.Aggregate(true, true, true, true, false)
+ case *f.flagFiles:
+ return prof.Aggregate(true, false, true, false, false)
+ case *f.flagFunctions:
+ return prof.Aggregate(true, true, false, false, false)
+ case f.isFormat("weblist"), f.isFormat("disasm"):
+ return prof.Aggregate(false, true, true, true, true)
+ }
+ return nil
+}
+
+// parseOptions parses the options into report.Options
+// Returns a function to postprocess the report after generation.
+func parseOptions(f *flags) (o *report.Options, p commands.PostProcessor, err error) {
+
+ if *f.flagDivideBy == 0 {
+ return nil, nil, fmt.Errorf("zero divisor specified")
+ }
+
+ o = &report.Options{
+ CumSort: *f.flagCum,
+ CallTree: *f.flagCallTree,
+ PrintAddresses: *f.flagAddresses,
+ DropNegative: *f.flagDropNegative,
+ Ratio: 1 / *f.flagDivideBy,
+
+ NodeCount: *f.flagNodeCount,
+ NodeFraction: *f.flagNodeFraction,
+ EdgeFraction: *f.flagEdgeFraction,
+ OutputUnit: *f.flagDisplayUnit,
+ }
+
+ for cmd, b := range f.flagCommands {
+ if *b {
+ pcmd := f.commands[cmd]
+ o.OutputFormat = pcmd.Format
+ return o, pcmd.PostProcess, nil
+ }
+ }
+
+ for cmd, rx := range f.flagParamCommands {
+ if *rx != "" {
+ pcmd := f.commands[cmd]
+ if o.Symbol, err = regexp.Compile(*rx); err != nil {
+ return nil, nil, fmt.Errorf("parsing -%s regexp: %v", cmd, err)
+ }
+ o.OutputFormat = pcmd.Format
+ return o, pcmd.PostProcess, nil
+ }
+ }
+
+ return nil, nil, fmt.Errorf("no output format selected")
+}
+
+type sampleValueFunc func(*profile.Sample) int64
+
+// sampleFormat returns a function to extract values out of a profile.Sample,
+// and the type/units of those values.
+func sampleFormat(p *profile.Profile, f *flags) (sampleValueFunc, string, string) {
+ valueIndex := *f.flagSampleIndex
+
+ if *f.flagMean {
+ return meanExtractor(valueIndex), "mean_" + p.SampleType[valueIndex].Type, p.SampleType[valueIndex].Unit
+ }
+
+ return valueExtractor(valueIndex), p.SampleType[valueIndex].Type, p.SampleType[valueIndex].Unit
+}
+
+func valueExtractor(ix int) sampleValueFunc {
+ return func(s *profile.Sample) int64 {
+ return s.Value[ix]
+ }
+}
+
+func meanExtractor(ix int) sampleValueFunc {
+ return func(s *profile.Sample) int64 {
+ if s.Value[0] == 0 {
+ return 0
+ }
+ return s.Value[ix] / s.Value[0]
+ }
+}
+
+func generate(interactive bool, prof *profile.Profile, obj plugin.ObjTool, ui plugin.UI, f *flags) error {
+ o, postProcess, err := parseOptions(f)
+ if err != nil {
+ return err
+ }
+
+ var w io.Writer
+ if *f.flagOutput == "" {
+ w = os.Stdout
+ } else {
+ ui.PrintErr("Generating report in ", *f.flagOutput)
+ outputFile, err := os.Create(*f.flagOutput)
+ if err != nil {
+ return err
+ }
+ defer outputFile.Close()
+ w = outputFile
+ }
+
+ value, stype, unit := sampleFormat(prof, f)
+ o.SampleType = stype
+ rpt := report.New(prof, *o, value, unit)
+
+ // Do not apply filters if we're just generating a proto, so we
+ // still have all the data.
+ if o.OutputFormat != report.Proto {
+ // Delay applying focus/ignore until after creating the report so
+ // the report reflects the total number of samples.
+ if err := preprocess(prof, ui, f); err != nil {
+ return err
+ }
+ }
+
+ if postProcess == nil {
+ return report.Generate(w, rpt, obj)
+ }
+
+ var dot bytes.Buffer
+ if err = report.Generate(&dot, rpt, obj); err != nil {
+ return err
+ }
+
+ return postProcess(&dot, w, ui)
+}
diff --git a/src/cmd/pprof/internal/driver/interactive.go b/src/cmd/pprof/internal/driver/interactive.go
new file mode 100644
index 000000000..13009bf7e
--- /dev/null
+++ b/src/cmd/pprof/internal/driver/interactive.go
@@ -0,0 +1,492 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package driver
+
+import (
+ "fmt"
+ "io"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+
+ "cmd/pprof/internal/commands"
+ "cmd/pprof/internal/plugin"
+ "cmd/pprof/internal/profile"
+)
+
+var profileFunctionNames = []string{}
+
+// functionCompleter replaces provided substring with a function
+// name retrieved from a profile if a single match exists. Otherwise,
+// it returns unchanged substring. It defaults to no-op if the profile
+// is not specified.
+func functionCompleter(substring string) string {
+ found := ""
+ for _, fName := range profileFunctionNames {
+ if strings.Contains(fName, substring) {
+ if found != "" {
+ return substring
+ }
+ found = fName
+ }
+ }
+ if found != "" {
+ return found
+ }
+ return substring
+}
+
+// updateAutoComplete enhances autocompletion with information that can be
+// retrieved from the profile
+func updateAutoComplete(p *profile.Profile) {
+ profileFunctionNames = nil // remove function names retrieved previously
+ for _, fn := range p.Function {
+ profileFunctionNames = append(profileFunctionNames, fn.Name)
+ }
+}
+
+// splitCommand splits the command line input into tokens separated by
+// spaces. Takes care to separate commands of the form 'top10' into
+// two tokens: 'top' and '10'
+func splitCommand(input string) []string {
+ fields := strings.Fields(input)
+ if num := strings.IndexAny(fields[0], "0123456789"); num != -1 {
+ inputNumber := fields[0][num:]
+ fields[0] = fields[0][:num]
+ fields = append([]string{fields[0], inputNumber}, fields[1:]...)
+ }
+ return fields
+}
+
+// interactive displays a prompt and reads commands for profile
+// manipulation/visualization.
+func interactive(p *profile.Profile, obj plugin.ObjTool, ui plugin.UI, f *flags) error {
+ updateAutoComplete(p)
+
+ // Enter command processing loop.
+ ui.Print("Entering interactive mode (type \"help\" for commands)")
+ ui.SetAutoComplete(commands.NewCompleter(f.commands))
+
+ for {
+ input, err := readCommand(p, ui, f)
+ if err != nil {
+ if err != io.EOF {
+ return err
+ }
+ if input == "" {
+ return nil
+ }
+ }
+ // Process simple commands.
+ switch input {
+ case "":
+ continue
+ case ":":
+ f.flagFocus = newString("")
+ f.flagIgnore = newString("")
+ f.flagTagFocus = newString("")
+ f.flagTagIgnore = newString("")
+ f.flagHide = newString("")
+ continue
+ }
+
+ fields := splitCommand(input)
+ // Process report generation commands.
+ if _, ok := f.commands[fields[0]]; ok {
+ if err := generateReport(p, fields, obj, ui, f); err != nil {
+ if err == io.EOF {
+ return nil
+ }
+ ui.PrintErr(err)
+ }
+ continue
+ }
+
+ switch cmd := fields[0]; cmd {
+ case "help":
+ commandHelp(fields, ui, f)
+ continue
+ case "exit", "quit":
+ return nil
+ }
+
+ // Process option settings.
+ if of, err := optFlags(p, input, f); err == nil {
+ f = of
+ } else {
+ ui.PrintErr("Error: ", err.Error())
+ }
+ }
+}
+
+func generateReport(p *profile.Profile, cmd []string, obj plugin.ObjTool, ui plugin.UI, f *flags) error {
+ prof := p.Copy()
+
+ cf, err := cmdFlags(prof, cmd, ui, f)
+ if err != nil {
+ return err
+ }
+
+ return generate(true, prof, obj, ui, cf)
+}
+
+// validateRegex checks if a string is a valid regular expression.
+func validateRegex(v string) error {
+ _, err := regexp.Compile(v)
+ return err
+}
+
+// readCommand prompts for and reads the next command.
+func readCommand(p *profile.Profile, ui plugin.UI, f *flags) (string, error) {
+ //ui.Print("Options:\n", f.String(p))
+ s, err := ui.ReadLine()
+ return strings.TrimSpace(s), err
+}
+
+func commandHelp(_ []string, ui plugin.UI, f *flags) error {
+ help := `
+ Commands:
+ cmd [n] [--cum] [focus_regex]* [-ignore_regex]*
+ Produce a text report with the top n entries.
+ Include samples matching focus_regex, and exclude ignore_regex.
+ Add --cum to sort using cumulative data.
+ Available commands:
+`
+ var commands []string
+ for name, cmd := range f.commands {
+ commands = append(commands, fmt.Sprintf(" %-12s %s", name, cmd.Usage))
+ }
+ sort.Strings(commands)
+
+ help = help + strings.Join(commands, "\n") + `
+ peek func_regex
+ Display callers and callees of functions matching func_regex.
+
+ dot [n] [focus_regex]* [-ignore_regex]* [>file]
+ Produce an annotated callgraph with the top n entries.
+ Include samples matching focus_regex, and exclude ignore_regex.
+ For other outputs, replace dot with:
+ - Graphic formats: dot, svg, pdf, ps, gif, png (use > to name output file)
+ - Graph viewer: gv, web, evince, eog
+
+ callgrind [n] [focus_regex]* [-ignore_regex]* [>file]
+ Produce a file in callgrind-compatible format.
+ Include samples matching focus_regex, and exclude ignore_regex.
+
+ weblist func_regex [-ignore_regex]*
+ Show annotated source with interspersed assembly in a web browser.
+
+ list func_regex [-ignore_regex]*
+ Print source for routines matching func_regex, and exclude ignore_regex.
+
+ disasm func_regex [-ignore_regex]*
+ Disassemble routines matching func_regex, and exclude ignore_regex.
+
+ tags tag_regex [-ignore_regex]*
+ List tags with key:value matching tag_regex and exclude ignore_regex.
+
+ quit/exit/^D
+ Exit pprof.
+
+ option=value
+ The following options can be set individually:
+ cum/flat: Sort entries based on cumulative or flat data
+ call_tree: Build context-sensitive call trees
+ nodecount: Max number of entries to display
+ nodefraction: Min frequency ratio of nodes to display
+ edgefraction: Min frequency ratio of edges to display
+ focus/ignore: Regexp to include/exclude samples by name/file
+ tagfocus/tagignore: Regexp or value range to filter samples by tag
+ eg "1mb", "1mb:2mb", ":64kb"
+
+ functions: Level of aggregation for sample data
+ files:
+ lines:
+ addresses:
+
+ unit: Measurement unit to use on reports
+
+ Sample value selection by index:
+ sample_index: Index of sample value to display
+ mean: Average sample value over first value
+
+ Sample value selection by name:
+ alloc_space for heap profiles
+ alloc_objects
+ inuse_space
+ inuse_objects
+
+ total_delay for contention profiles
+ mean_delay
+ contentions
+
+ : Clear focus/ignore/hide/tagfocus/tagignore`
+
+ ui.Print(help)
+ return nil
+}
+
+// cmdFlags parses the options of an interactive command and returns
+// an updated flags object.
+func cmdFlags(prof *profile.Profile, input []string, ui plugin.UI, f *flags) (*flags, error) {
+ cf := *f
+
+ var focus, ignore string
+ output := *cf.flagOutput
+ nodeCount := *cf.flagNodeCount
+ cmd := input[0]
+
+ // Update output flags based on parameters.
+ tokens := input[1:]
+ for p := 0; p < len(tokens); p++ {
+ t := tokens[p]
+ if t == "" {
+ continue
+ }
+ if c, err := strconv.ParseInt(t, 10, 32); err == nil {
+ nodeCount = int(c)
+ continue
+ }
+ switch t[0] {
+ case '>':
+ if len(t) > 1 {
+ output = t[1:]
+ continue
+ }
+ // find next token
+ for p++; p < len(tokens); p++ {
+ if tokens[p] != "" {
+ output = tokens[p]
+ break
+ }
+ }
+ case '-':
+ if t == "--cum" || t == "-cum" {
+ cf.flagCum = newBool(true)
+ continue
+ }
+ ignore = catRegex(ignore, t[1:])
+ default:
+ focus = catRegex(focus, t)
+ }
+ }
+
+ pcmd, ok := f.commands[cmd]
+ if !ok {
+ return nil, fmt.Errorf("Unexpected parse failure: %v", input)
+ }
+ // Reset flags
+ cf.flagCommands = make(map[string]*bool)
+ cf.flagParamCommands = make(map[string]*string)
+
+ if !pcmd.HasParam {
+ cf.flagCommands[cmd] = newBool(true)
+
+ switch cmd {
+ case "tags":
+ cf.flagTagFocus = newString(focus)
+ cf.flagTagIgnore = newString(ignore)
+ default:
+ cf.flagFocus = newString(catRegex(*cf.flagFocus, focus))
+ cf.flagIgnore = newString(catRegex(*cf.flagIgnore, ignore))
+ }
+ } else {
+ if focus == "" {
+ focus = "."
+ }
+ cf.flagParamCommands[cmd] = newString(focus)
+ cf.flagIgnore = newString(catRegex(*cf.flagIgnore, ignore))
+ }
+
+ if nodeCount < 0 {
+ switch cmd {
+ case "text", "top":
+ // Default text/top to 10 nodes on interactive mode
+ nodeCount = 10
+ default:
+ nodeCount = 80
+ }
+ }
+
+ cf.flagNodeCount = newInt(nodeCount)
+ cf.flagOutput = newString(output)
+
+ // Do regular flags processing
+ if err := processFlags(prof, ui, &cf); err != nil {
+ cf.usage(ui)
+ return nil, err
+ }
+
+ return &cf, nil
+}
+
+func catRegex(a, b string) string {
+ if a == "" {
+ return b
+ }
+ if b == "" {
+ return a
+ }
+ return a + "|" + b
+}
+
+// optFlags parses an interactive option setting and returns
+// an updated flags object.
+func optFlags(p *profile.Profile, input string, f *flags) (*flags, error) {
+ inputs := strings.SplitN(input, "=", 2)
+ option := strings.ToLower(strings.TrimSpace(inputs[0]))
+ var value string
+ if len(inputs) == 2 {
+ value = strings.TrimSpace(inputs[1])
+ }
+
+ of := *f
+
+ var err error
+ var bv bool
+ var uv uint64
+ var fv float64
+
+ switch option {
+ case "cum":
+ if bv, err = parseBool(value); err != nil {
+ return nil, err
+ }
+ of.flagCum = newBool(bv)
+ case "flat":
+ if bv, err = parseBool(value); err != nil {
+ return nil, err
+ }
+ of.flagCum = newBool(!bv)
+ case "call_tree":
+ if bv, err = parseBool(value); err != nil {
+ return nil, err
+ }
+ of.flagCallTree = newBool(bv)
+ case "unit":
+ of.flagDisplayUnit = newString(value)
+ case "sample_index":
+ if uv, err = strconv.ParseUint(value, 10, 32); err != nil {
+ return nil, err
+ }
+ if ix := int(uv); ix < 0 || ix >= len(p.SampleType) {
+ return nil, fmt.Errorf("sample_index out of range [0..%d]", len(p.SampleType)-1)
+ }
+ of.flagSampleIndex = newInt(int(uv))
+ case "mean":
+ if bv, err = parseBool(value); err != nil {
+ return nil, err
+ }
+ of.flagMean = newBool(bv)
+ case "nodecount":
+ if uv, err = strconv.ParseUint(value, 10, 32); err != nil {
+ return nil, err
+ }
+ of.flagNodeCount = newInt(int(uv))
+ case "nodefraction":
+ if fv, err = strconv.ParseFloat(value, 64); err != nil {
+ return nil, err
+ }
+ of.flagNodeFraction = newFloat64(fv)
+ case "edgefraction":
+ if fv, err = strconv.ParseFloat(value, 64); err != nil {
+ return nil, err
+ }
+ of.flagEdgeFraction = newFloat64(fv)
+ case "focus":
+ if err = validateRegex(value); err != nil {
+ return nil, err
+ }
+ of.flagFocus = newString(value)
+ case "ignore":
+ if err = validateRegex(value); err != nil {
+ return nil, err
+ }
+ of.flagIgnore = newString(value)
+ case "tagfocus":
+ if err = validateRegex(value); err != nil {
+ return nil, err
+ }
+ of.flagTagFocus = newString(value)
+ case "tagignore":
+ if err = validateRegex(value); err != nil {
+ return nil, err
+ }
+ of.flagTagIgnore = newString(value)
+ case "hide":
+ if err = validateRegex(value); err != nil {
+ return nil, err
+ }
+ of.flagHide = newString(value)
+ case "addresses", "files", "lines", "functions":
+ if bv, err = parseBool(value); err != nil {
+ return nil, err
+ }
+ if !bv {
+ return nil, fmt.Errorf("select one of addresses/files/lines/functions")
+ }
+ setGranularityToggle(option, &of)
+ default:
+ if ix := findSampleIndex(p, "", option); ix >= 0 {
+ of.flagSampleIndex = newInt(ix)
+ } else if ix := findSampleIndex(p, "total_", option); ix >= 0 {
+ of.flagSampleIndex = newInt(ix)
+ of.flagMean = newBool(false)
+ } else if ix := findSampleIndex(p, "mean_", option); ix >= 1 {
+ of.flagSampleIndex = newInt(ix)
+ of.flagMean = newBool(true)
+ } else {
+ return nil, fmt.Errorf("unrecognized command: %s", input)
+ }
+ }
+ return &of, nil
+}
+
+// parseBool parses a string as a boolean value.
+func parseBool(v string) (bool, error) {
+ switch strings.ToLower(v) {
+ case "true", "t", "yes", "y", "1", "":
+ return true, nil
+ case "false", "f", "no", "n", "0":
+ return false, nil
+ }
+ return false, fmt.Errorf(`illegal input "%s" for bool value`, v)
+}
+
+func findSampleIndex(p *profile.Profile, prefix, sampleType string) int {
+ if !strings.HasPrefix(sampleType, prefix) {
+ return -1
+ }
+ sampleType = strings.TrimPrefix(sampleType, prefix)
+ for i, r := range p.SampleType {
+ if r.Type == sampleType {
+ return i
+ }
+ }
+ return -1
+}
+
+// setGranularityToggle manages the set of granularity options. These
+// operate as a toggle; turning one on turns the others off.
+func setGranularityToggle(o string, fl *flags) {
+ t, f := newBool(true), newBool(false)
+ fl.flagFunctions = f
+ fl.flagFiles = f
+ fl.flagLines = f
+ fl.flagAddresses = f
+ switch o {
+ case "functions":
+ fl.flagFunctions = t
+ case "files":
+ fl.flagFiles = t
+ case "lines":
+ fl.flagLines = t
+ case "addresses":
+ fl.flagAddresses = t
+ default:
+ panic(fmt.Errorf("unexpected option %s", o))
+ }
+}
diff --git a/src/cmd/pprof/internal/fetch/fetch.go b/src/cmd/pprof/internal/fetch/fetch.go
new file mode 100644
index 000000000..ec4a6383c
--- /dev/null
+++ b/src/cmd/pprof/internal/fetch/fetch.go
@@ -0,0 +1,82 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package fetch provides an extensible mechanism to fetch a profile
+// from a data source.
+package fetch
+
+import (
+ "fmt"
+ "io"
+ "io/ioutil"
+ "net/http"
+ "net/url"
+ "os"
+ "strings"
+ "time"
+
+ "cmd/pprof/internal/plugin"
+ "cmd/pprof/internal/profile"
+)
+
+// FetchProfile reads from a data source (network, file) and generates a
+// profile.
+func FetchProfile(source string, timeout time.Duration) (*profile.Profile, error) {
+ return Fetcher(source, timeout, plugin.StandardUI())
+}
+
+// Fetcher is the plugin.Fetcher version of FetchProfile.
+func Fetcher(source string, timeout time.Duration, ui plugin.UI) (*profile.Profile, error) {
+ var f io.ReadCloser
+ var err error
+
+ url, err := url.Parse(source)
+ if err == nil && url.Host != "" {
+ f, err = FetchURL(source, timeout)
+ } else {
+ f, err = os.Open(source)
+ }
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+ return profile.Parse(f)
+}
+
+// FetchURL fetches a profile from a URL using HTTP.
+func FetchURL(source string, timeout time.Duration) (io.ReadCloser, error) {
+ resp, err := httpGet(source, timeout)
+ if err != nil {
+ return nil, fmt.Errorf("http fetch %s: %v", source, err)
+ }
+ if resp.StatusCode != http.StatusOK {
+ return nil, fmt.Errorf("server response: %s", resp.Status)
+ }
+
+ return resp.Body, nil
+}
+
+// PostURL issues a POST to a URL over HTTP.
+func PostURL(source, post string) ([]byte, error) {
+ resp, err := http.Post(source, "application/octet-stream", strings.NewReader(post))
+ if err != nil {
+ return nil, fmt.Errorf("http post %s: %v", source, err)
+ }
+ if resp.StatusCode != http.StatusOK {
+ return nil, fmt.Errorf("server response: %s", resp.Status)
+ }
+ defer resp.Body.Close()
+ return ioutil.ReadAll(resp.Body)
+}
+
+// httpGet is a wrapper around http.Get; it is defined as a variable
+// so it can be redefined during for testing.
+var httpGet = func(url string, timeout time.Duration) (*http.Response, error) {
+ client := &http.Client{
+ Transport: &http.Transport{
+ ResponseHeaderTimeout: timeout + 5*time.Second,
+ },
+ }
+ return client.Get(url)
+}
diff --git a/src/cmd/pprof/internal/plugin/plugin.go b/src/cmd/pprof/internal/plugin/plugin.go
new file mode 100644
index 000000000..a22ec5f3c
--- /dev/null
+++ b/src/cmd/pprof/internal/plugin/plugin.go
@@ -0,0 +1,213 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package plugin defines the plugin implementations that the main pprof driver requires.
+package plugin
+
+import (
+ "bufio"
+ "fmt"
+ "os"
+ "regexp"
+ "strings"
+ "time"
+
+ "cmd/pprof/internal/profile"
+)
+
+// A FlagSet creates and parses command-line flags.
+// It is similar to the standard flag.FlagSet.
+type FlagSet interface {
+ // Bool, Int, Float64, and String define new flags,
+ // like the functions of the same name in package flag.
+ Bool(name string, def bool, usage string) *bool
+ Int(name string, def int, usage string) *int
+ Float64(name string, def float64, usage string) *float64
+ String(name string, def string, usage string) *string
+
+ // ExtraUsage returns any additional text that should be
+ // printed after the standard usage message.
+ // The typical use of ExtraUsage is to show any custom flags
+ // defined by the specific pprof plugins being used.
+ ExtraUsage() string
+
+ // Parse initializes the flags with their values for this run
+ // and returns the non-flag command line arguments.
+ // If an unknown flag is encountered or there are no arguments,
+ // Parse should call usage and return nil.
+ Parse(usage func()) []string
+}
+
+// An ObjTool inspects shared libraries and executable files.
+type ObjTool interface {
+ // Open opens the named object file.
+ // If the object is a shared library, start is the address where
+ // it is mapped into memory in the address space being inspected.
+ Open(file string, start uint64) (ObjFile, error)
+
+ // Demangle translates a batch of symbol names from mangled
+ // form to human-readable form.
+ Demangle(names []string) (map[string]string, error)
+
+ // Disasm disassembles the named object file, starting at
+ // the start address and stopping at (before) the end address.
+ Disasm(file string, start, end uint64) ([]Inst, error)
+
+ // SetConfig configures the tool.
+ // The implementation defines the meaning of the string
+ // and can ignore it entirely.
+ SetConfig(config string)
+}
+
+// NoObjTool returns a trivial implementation of the ObjTool interface.
+// Open returns an error indicating that the requested file does not exist.
+// Demangle returns an empty map and a nil error.
+// Disasm returns an error.
+// SetConfig is a no-op.
+func NoObjTool() ObjTool {
+ return noObjTool{}
+}
+
+type noObjTool struct{}
+
+func (noObjTool) Open(file string, start uint64) (ObjFile, error) {
+ return nil, &os.PathError{Op: "open", Path: file, Err: os.ErrNotExist}
+}
+
+func (noObjTool) Demangle(name []string) (map[string]string, error) {
+ return make(map[string]string), nil
+}
+
+func (noObjTool) Disasm(file string, start, end uint64) ([]Inst, error) {
+ return nil, fmt.Errorf("disassembly not supported")
+}
+
+func (noObjTool) SetConfig(config string) {
+}
+
+// An ObjFile is a single object file: a shared library or executable.
+type ObjFile interface {
+ // Name returns the underlyinf file name, if available
+ Name() string
+
+ // Base returns the base address to use when looking up symbols in the file.
+ Base() uint64
+
+ // BuildID returns the GNU build ID of the file, or an empty string.
+ BuildID() string
+
+ // SourceLine reports the source line information for a given
+ // address in the file. Due to inlining, the source line information
+ // is in general a list of positions representing a call stack,
+ // with the leaf function first.
+ SourceLine(addr uint64) ([]Frame, error)
+
+ // Symbols returns a list of symbols in the object file.
+ // If r is not nil, Symbols restricts the list to symbols
+ // with names matching the regular expression.
+ // If addr is not zero, Symbols restricts the list to symbols
+ // containing that address.
+ Symbols(r *regexp.Regexp, addr uint64) ([]*Sym, error)
+
+ // Close closes the file, releasing associated resources.
+ Close() error
+}
+
+// A Frame describes a single line in a source file.
+type Frame struct {
+ Func string // name of function
+ File string // source file name
+ Line int // line in file
+}
+
+// A Sym describes a single symbol in an object file.
+type Sym struct {
+ Name []string // names of symbol (many if symbol was dedup'ed)
+ File string // object file containing symbol
+ Start uint64 // start virtual address
+ End uint64 // virtual address of last byte in sym (Start+size-1)
+}
+
+// An Inst is a single instruction in an assembly listing.
+type Inst struct {
+ Addr uint64 // virtual address of instruction
+ Text string // instruction text
+ File string // source file
+ Line int // source line
+}
+
+// A UI manages user interactions.
+type UI interface {
+ // Read returns a line of text (a command) read from the user.
+ ReadLine() (string, error)
+
+ // Print shows a message to the user.
+ // It formats the text as fmt.Print would and adds a final \n if not already present.
+ // For line-based UI, Print writes to standard error.
+ // (Standard output is reserved for report data.)
+ Print(...interface{})
+
+ // PrintErr shows an error message to the user.
+ // It formats the text as fmt.Print would and adds a final \n if not already present.
+ // For line-based UI, PrintErr writes to standard error.
+ PrintErr(...interface{})
+
+ // IsTerminal returns whether the UI is known to be tied to an
+ // interactive terminal (as opposed to being redirected to a file).
+ IsTerminal() bool
+
+ // SetAutoComplete instructs the UI to call complete(cmd) to obtain
+ // the auto-completion of cmd, if the UI supports auto-completion at all.
+ SetAutoComplete(complete func(string) string)
+}
+
+// StandardUI returns a UI that reads from standard input,
+// prints messages to standard output,
+// prints errors to standard error, and doesn't use auto-completion.
+func StandardUI() UI {
+ return &stdUI{r: bufio.NewReader(os.Stdin)}
+}
+
+type stdUI struct {
+ r *bufio.Reader
+}
+
+func (ui *stdUI) ReadLine() (string, error) {
+ os.Stdout.WriteString("(pprof) ")
+ return ui.r.ReadString('\n')
+}
+
+func (ui *stdUI) Print(args ...interface{}) {
+ ui.fprint(os.Stderr, args)
+}
+
+func (ui *stdUI) PrintErr(args ...interface{}) {
+ ui.fprint(os.Stderr, args)
+}
+
+func (ui *stdUI) IsTerminal() bool {
+ return false
+}
+
+func (ui *stdUI) SetAutoComplete(func(string) string) {
+}
+
+func (ui *stdUI) fprint(f *os.File, args []interface{}) {
+ text := fmt.Sprint(args...)
+ if !strings.HasSuffix(text, "\n") {
+ text += "\n"
+ }
+ f.WriteString(text)
+}
+
+// A Fetcher reads and returns the profile named by src.
+// It gives up after the given timeout, unless src contains a timeout override
+// (as defined by the implementation).
+// It can print messages to ui.
+type Fetcher func(src string, timeout time.Duration, ui UI) (*profile.Profile, error)
+
+// A Symbolizer annotates a profile with symbol information.
+// The profile was fetch from src.
+// The meaning of mode is defined by the implementation.
+type Symbolizer func(mode, src string, prof *profile.Profile, obj ObjTool, ui UI) error
diff --git a/src/cmd/pprof/internal/profile/encode.go b/src/cmd/pprof/internal/profile/encode.go
new file mode 100644
index 000000000..455aca29f
--- /dev/null
+++ b/src/cmd/pprof/internal/profile/encode.go
@@ -0,0 +1,470 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package profile
+
+import (
+ "errors"
+ "fmt"
+ "sort"
+)
+
+func (p *Profile) decoder() []decoder {
+ return profileDecoder
+}
+
+// preEncode populates the unexported fields to be used by encode
+// (with suffix X) from the corresponding exported fields. The
+// exported fields are cleared up to facilitate testing.
+func (p *Profile) preEncode() {
+ strings := make(map[string]int)
+ addString(strings, "")
+
+ for _, st := range p.SampleType {
+ st.typeX = addString(strings, st.Type)
+ st.unitX = addString(strings, st.Unit)
+ }
+
+ for _, s := range p.Sample {
+ s.labelX = nil
+ var keys []string
+ for k := range s.Label {
+ keys = append(keys, k)
+ }
+ sort.Strings(keys)
+ for _, k := range keys {
+ vs := s.Label[k]
+ for _, v := range vs {
+ s.labelX = append(s.labelX,
+ Label{
+ keyX: addString(strings, k),
+ strX: addString(strings, v),
+ },
+ )
+ }
+ }
+ var numKeys []string
+ for k := range s.NumLabel {
+ numKeys = append(numKeys, k)
+ }
+ sort.Strings(numKeys)
+ for _, k := range numKeys {
+ vs := s.NumLabel[k]
+ for _, v := range vs {
+ s.labelX = append(s.labelX,
+ Label{
+ keyX: addString(strings, k),
+ numX: v,
+ },
+ )
+ }
+ }
+ s.locationIDX = nil
+ for _, l := range s.Location {
+ s.locationIDX = append(s.locationIDX, l.ID)
+ }
+ }
+
+ for _, m := range p.Mapping {
+ m.fileX = addString(strings, m.File)
+ m.buildIDX = addString(strings, m.BuildID)
+ }
+
+ for _, l := range p.Location {
+ for i, ln := range l.Line {
+ if ln.Function != nil {
+ l.Line[i].functionIDX = ln.Function.ID
+ } else {
+ l.Line[i].functionIDX = 0
+ }
+ }
+ if l.Mapping != nil {
+ l.mappingIDX = l.Mapping.ID
+ } else {
+ l.mappingIDX = 0
+ }
+ }
+ for _, f := range p.Function {
+ f.nameX = addString(strings, f.Name)
+ f.systemNameX = addString(strings, f.SystemName)
+ f.filenameX = addString(strings, f.Filename)
+ }
+
+ p.dropFramesX = addString(strings, p.DropFrames)
+ p.keepFramesX = addString(strings, p.KeepFrames)
+
+ if pt := p.PeriodType; pt != nil {
+ pt.typeX = addString(strings, pt.Type)
+ pt.unitX = addString(strings, pt.Unit)
+ }
+
+ p.stringTable = make([]string, len(strings))
+ for s, i := range strings {
+ p.stringTable[i] = s
+ }
+}
+
+func (p *Profile) encode(b *buffer) {
+ for _, x := range p.SampleType {
+ encodeMessage(b, 1, x)
+ }
+ for _, x := range p.Sample {
+ encodeMessage(b, 2, x)
+ }
+ for _, x := range p.Mapping {
+ encodeMessage(b, 3, x)
+ }
+ for _, x := range p.Location {
+ encodeMessage(b, 4, x)
+ }
+ for _, x := range p.Function {
+ encodeMessage(b, 5, x)
+ }
+ encodeStrings(b, 6, p.stringTable)
+ encodeInt64Opt(b, 7, p.dropFramesX)
+ encodeInt64Opt(b, 8, p.keepFramesX)
+ encodeInt64Opt(b, 9, p.TimeNanos)
+ encodeInt64Opt(b, 10, p.DurationNanos)
+ if pt := p.PeriodType; pt != nil && (pt.typeX != 0 || pt.unitX != 0) {
+ encodeMessage(b, 11, p.PeriodType)
+ }
+ encodeInt64Opt(b, 12, p.Period)
+}
+
+var profileDecoder = []decoder{
+ nil, // 0
+ // repeated ValueType sample_type = 1
+ func(b *buffer, m message) error {
+ x := new(ValueType)
+ pp := m.(*Profile)
+ pp.SampleType = append(pp.SampleType, x)
+ return decodeMessage(b, x)
+ },
+ // repeated Sample sample = 2
+ func(b *buffer, m message) error {
+ x := new(Sample)
+ pp := m.(*Profile)
+ pp.Sample = append(pp.Sample, x)
+ return decodeMessage(b, x)
+ },
+ // repeated Mapping mapping = 3
+ func(b *buffer, m message) error {
+ x := new(Mapping)
+ pp := m.(*Profile)
+ pp.Mapping = append(pp.Mapping, x)
+ return decodeMessage(b, x)
+ },
+ // repeated Location location = 4
+ func(b *buffer, m message) error {
+ x := new(Location)
+ pp := m.(*Profile)
+ pp.Location = append(pp.Location, x)
+ return decodeMessage(b, x)
+ },
+ // repeasted Function function = 5
+ func(b *buffer, m message) error {
+ x := new(Function)
+ pp := m.(*Profile)
+ pp.Function = append(pp.Function, x)
+ return decodeMessage(b, x)
+ },
+ // repeated string string_table = 6
+ func(b *buffer, m message) error {
+ err := decodeStrings(b, &m.(*Profile).stringTable)
+ if err != nil {
+ return err
+ }
+ if *&m.(*Profile).stringTable[0] != "" {
+ return errors.New("string_table[0] must be ''")
+ }
+ return nil
+ },
+ // repeated int64 drop_frames = 7
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).dropFramesX) },
+ // repeated int64 keep_frames = 8
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).keepFramesX) },
+ // repeated int64 time_nanos = 9
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).TimeNanos) },
+ // repeated int64 duration_nanos = 10
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).DurationNanos) },
+ // optional string period_type = 11
+ func(b *buffer, m message) error {
+ x := new(ValueType)
+ pp := m.(*Profile)
+ pp.PeriodType = x
+ return decodeMessage(b, x)
+ },
+ // repeated int64 period = 12
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).Period) },
+}
+
+// postDecode takes the unexported fields populated by decode (with
+// suffix X) and populates the corresponding exported fields.
+// The unexported fields are cleared up to facilitate testing.
+func (p *Profile) postDecode() error {
+ var err error
+
+ mappings := make(map[uint64]*Mapping)
+ for _, m := range p.Mapping {
+ m.File, err = getString(p.stringTable, &m.fileX, err)
+ m.BuildID, err = getString(p.stringTable, &m.buildIDX, err)
+ mappings[m.ID] = m
+ }
+
+ functions := make(map[uint64]*Function)
+ for _, f := range p.Function {
+ f.Name, err = getString(p.stringTable, &f.nameX, err)
+ f.SystemName, err = getString(p.stringTable, &f.systemNameX, err)
+ f.Filename, err = getString(p.stringTable, &f.filenameX, err)
+ functions[f.ID] = f
+ }
+
+ locations := make(map[uint64]*Location)
+ for _, l := range p.Location {
+ l.Mapping = mappings[l.mappingIDX]
+ l.mappingIDX = 0
+ for i, ln := range l.Line {
+ if id := ln.functionIDX; id != 0 {
+ l.Line[i].Function = functions[id]
+ if l.Line[i].Function == nil {
+ return fmt.Errorf("Function ID %d not found", id)
+ }
+ l.Line[i].functionIDX = 0
+ }
+ }
+ locations[l.ID] = l
+ }
+
+ for _, st := range p.SampleType {
+ st.Type, err = getString(p.stringTable, &st.typeX, err)
+ st.Unit, err = getString(p.stringTable, &st.unitX, err)
+ }
+
+ for _, s := range p.Sample {
+ labels := make(map[string][]string)
+ numLabels := make(map[string][]int64)
+ for _, l := range s.labelX {
+ var key, value string
+ key, err = getString(p.stringTable, &l.keyX, err)
+ if l.strX != 0 {
+ value, err = getString(p.stringTable, &l.strX, err)
+ labels[key] = append(labels[key], value)
+ } else {
+ numLabels[key] = append(numLabels[key], l.numX)
+ }
+ }
+ if len(labels) > 0 {
+ s.Label = labels
+ }
+ if len(numLabels) > 0 {
+ s.NumLabel = numLabels
+ }
+ s.Location = nil
+ for _, lid := range s.locationIDX {
+ s.Location = append(s.Location, locations[lid])
+ }
+ s.locationIDX = nil
+ }
+
+ p.DropFrames, err = getString(p.stringTable, &p.dropFramesX, err)
+ p.KeepFrames, err = getString(p.stringTable, &p.keepFramesX, err)
+
+ if pt := p.PeriodType; pt == nil {
+ p.PeriodType = &ValueType{}
+ }
+
+ if pt := p.PeriodType; pt != nil {
+ pt.Type, err = getString(p.stringTable, &pt.typeX, err)
+ pt.Unit, err = getString(p.stringTable, &pt.unitX, err)
+ }
+ p.stringTable = nil
+ return nil
+}
+
+func (p *ValueType) decoder() []decoder {
+ return valueTypeDecoder
+}
+
+func (p *ValueType) encode(b *buffer) {
+ encodeInt64Opt(b, 1, p.typeX)
+ encodeInt64Opt(b, 2, p.unitX)
+}
+
+var valueTypeDecoder = []decoder{
+ nil, // 0
+ // optional int64 type = 1
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*ValueType).typeX) },
+ // optional int64 unit = 2
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*ValueType).unitX) },
+}
+
+func (p *Sample) decoder() []decoder {
+ return sampleDecoder
+}
+
+func (p *Sample) encode(b *buffer) {
+ encodeUint64s(b, 1, p.locationIDX)
+ for _, x := range p.Value {
+ encodeInt64(b, 2, x)
+ }
+ for _, x := range p.labelX {
+ encodeMessage(b, 3, x)
+ }
+}
+
+var sampleDecoder = []decoder{
+ nil, // 0
+ // repeated uint64 location = 1
+ func(b *buffer, m message) error { return decodeUint64s(b, &m.(*Sample).locationIDX) },
+ // repeated int64 value = 2
+ func(b *buffer, m message) error { return decodeInt64s(b, &m.(*Sample).Value) },
+ // repeated Label label = 3
+ func(b *buffer, m message) error {
+ s := m.(*Sample)
+ n := len(s.labelX)
+ s.labelX = append(s.labelX, Label{})
+ return decodeMessage(b, &s.labelX[n])
+ },
+}
+
+func (p Label) decoder() []decoder {
+ return labelDecoder
+}
+
+func (p Label) encode(b *buffer) {
+ encodeInt64Opt(b, 1, p.keyX)
+ encodeInt64Opt(b, 2, p.strX)
+ encodeInt64Opt(b, 3, p.numX)
+}
+
+var labelDecoder = []decoder{
+ nil, // 0
+ // optional int64 key = 1
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Label).keyX) },
+ // optional int64 str = 2
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Label).strX) },
+ // optional int64 num = 3
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Label).numX) },
+}
+
+func (p *Mapping) decoder() []decoder {
+ return mappingDecoder
+}
+
+func (p *Mapping) encode(b *buffer) {
+ encodeUint64Opt(b, 1, p.ID)
+ encodeUint64Opt(b, 2, p.Start)
+ encodeUint64Opt(b, 3, p.Limit)
+ encodeUint64Opt(b, 4, p.Offset)
+ encodeInt64Opt(b, 5, p.fileX)
+ encodeInt64Opt(b, 6, p.buildIDX)
+ encodeBoolOpt(b, 7, p.HasFunctions)
+ encodeBoolOpt(b, 8, p.HasFilenames)
+ encodeBoolOpt(b, 9, p.HasLineNumbers)
+ encodeBoolOpt(b, 10, p.HasInlineFrames)
+}
+
+var mappingDecoder = []decoder{
+ nil, // 0
+ func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).ID) }, // optional uint64 id = 1
+ func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Start) }, // optional uint64 memory_offset = 2
+ func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Limit) }, // optional uint64 memory_limit = 3
+ func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Offset) }, // optional uint64 file_offset = 4
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Mapping).fileX) }, // optional int64 filename = 5
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Mapping).buildIDX) }, // optional int64 build_id = 6
+ func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasFunctions) }, // optional bool has_functions = 7
+ func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasFilenames) }, // optional bool has_filenames = 8
+ func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasLineNumbers) }, // optional bool has_line_numbers = 9
+ func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasInlineFrames) }, // optional bool has_inline_frames = 10
+}
+
+func (p *Location) decoder() []decoder {
+ return locationDecoder
+}
+
+func (p *Location) encode(b *buffer) {
+ encodeUint64Opt(b, 1, p.ID)
+ encodeUint64Opt(b, 2, p.mappingIDX)
+ encodeUint64Opt(b, 3, p.Address)
+ for i := range p.Line {
+ encodeMessage(b, 4, &p.Line[i])
+ }
+}
+
+var locationDecoder = []decoder{
+ nil, // 0
+ func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).ID) }, // optional uint64 id = 1;
+ func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).mappingIDX) }, // optional uint64 mapping_id = 2;
+ func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).Address) }, // optional uint64 address = 3;
+ func(b *buffer, m message) error { // repeated Line line = 4
+ pp := m.(*Location)
+ n := len(pp.Line)
+ pp.Line = append(pp.Line, Line{})
+ return decodeMessage(b, &pp.Line[n])
+ },
+}
+
+func (p *Line) decoder() []decoder {
+ return lineDecoder
+}
+
+func (p *Line) encode(b *buffer) {
+ encodeUint64Opt(b, 1, p.functionIDX)
+ encodeInt64Opt(b, 2, p.Line)
+}
+
+var lineDecoder = []decoder{
+ nil, // 0
+ // optional uint64 function_id = 1
+ func(b *buffer, m message) error { return decodeUint64(b, &m.(*Line).functionIDX) },
+ // optional int64 line = 2
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Line).Line) },
+}
+
+func (p *Function) decoder() []decoder {
+ return functionDecoder
+}
+
+func (p *Function) encode(b *buffer) {
+ encodeUint64Opt(b, 1, p.ID)
+ encodeInt64Opt(b, 2, p.nameX)
+ encodeInt64Opt(b, 3, p.systemNameX)
+ encodeInt64Opt(b, 4, p.filenameX)
+ encodeInt64Opt(b, 5, p.StartLine)
+}
+
+var functionDecoder = []decoder{
+ nil, // 0
+ // optional uint64 id = 1
+ func(b *buffer, m message) error { return decodeUint64(b, &m.(*Function).ID) },
+ // optional int64 function_name = 2
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).nameX) },
+ // optional int64 function_system_name = 3
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).systemNameX) },
+ // repeated int64 filename = 4
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).filenameX) },
+ // optional int64 start_line = 5
+ func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).StartLine) },
+}
+
+func addString(strings map[string]int, s string) int64 {
+ i, ok := strings[s]
+ if !ok {
+ i = len(strings)
+ strings[s] = i
+ }
+ return int64(i)
+}
+
+func getString(strings []string, strng *int64, err error) (string, error) {
+ if err != nil {
+ return "", err
+ }
+ s := int(*strng)
+ if s < 0 || s >= len(strings) {
+ return "", errMalformed
+ }
+ *strng = 0
+ return strings[s], nil
+}
diff --git a/src/cmd/pprof/internal/profile/filter.go b/src/cmd/pprof/internal/profile/filter.go
new file mode 100644
index 000000000..903616aac
--- /dev/null
+++ b/src/cmd/pprof/internal/profile/filter.go
@@ -0,0 +1,157 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Implements methods to filter samples from profiles.
+package profile
+
+import "regexp"
+
+// FilterSamplesByName filters the samples in a profile and only keeps
+// samples where at least one frame matches focus but none match ignore.
+// Returns true is the corresponding regexp matched at least one sample.
+func (p *Profile) FilterSamplesByName(focus, ignore, hide *regexp.Regexp) (fm, im, hm bool) {
+ focusOrIgnore := make(map[uint64]bool)
+ hidden := make(map[uint64]bool)
+ for _, l := range p.Location {
+ if ignore != nil && l.matchesName(ignore) {
+ im = true
+ focusOrIgnore[l.ID] = false
+ } else if focus == nil || l.matchesName(focus) {
+ fm = true
+ focusOrIgnore[l.ID] = true
+ }
+ if hide != nil && l.matchesName(hide) {
+ hm = true
+ l.Line = l.unmatchedLines(hide)
+ if len(l.Line) == 0 {
+ hidden[l.ID] = true
+ }
+ }
+ }
+
+ s := make([]*Sample, 0, len(p.Sample))
+ for _, sample := range p.Sample {
+ if focusedAndNotIgnored(sample.Location, focusOrIgnore) {
+ if len(hidden) > 0 {
+ var locs []*Location
+ for _, loc := range sample.Location {
+ if !hidden[loc.ID] {
+ locs = append(locs, loc)
+ }
+ }
+ if len(locs) == 0 {
+ // Remove sample with no locations (by not adding it to s).
+ continue
+ }
+ sample.Location = locs
+ }
+ s = append(s, sample)
+ }
+ }
+ p.Sample = s
+
+ return
+}
+
+// matchesName returns whether the function name or file in the
+// location matches the regular expression.
+func (loc *Location) matchesName(re *regexp.Regexp) bool {
+ for _, ln := range loc.Line {
+ if fn := ln.Function; fn != nil {
+ if re.MatchString(fn.Name) {
+ return true
+ }
+ if re.MatchString(fn.Filename) {
+ return true
+ }
+ }
+ }
+ return false
+}
+
+// unmatchedLines returns the lines in the location that do not match
+// the regular expression.
+func (loc *Location) unmatchedLines(re *regexp.Regexp) []Line {
+ var lines []Line
+ for _, ln := range loc.Line {
+ if fn := ln.Function; fn != nil {
+ if re.MatchString(fn.Name) {
+ continue
+ }
+ if re.MatchString(fn.Filename) {
+ continue
+ }
+ }
+ lines = append(lines, ln)
+ }
+ return lines
+}
+
+// focusedAndNotIgnored looks up a slice of ids against a map of
+// focused/ignored locations. The map only contains locations that are
+// explicitly focused or ignored. Returns whether there is at least
+// one focused location but no ignored locations.
+func focusedAndNotIgnored(locs []*Location, m map[uint64]bool) bool {
+ var f bool
+ for _, loc := range locs {
+ if focus, focusOrIgnore := m[loc.ID]; focusOrIgnore {
+ if focus {
+ // Found focused location. Must keep searching in case there
+ // is an ignored one as well.
+ f = true
+ } else {
+ // Found ignored location. Can return false right away.
+ return false
+ }
+ }
+ }
+ return f
+}
+
+// TagMatch selects tags for filtering
+type TagMatch func(key, val string, nval int64) bool
+
+// FilterSamplesByTag removes all samples from the profile, except
+// those that match focus and do not match the ignore regular
+// expression.
+func (p *Profile) FilterSamplesByTag(focus, ignore TagMatch) (fm, im bool) {
+ samples := make([]*Sample, 0, len(p.Sample))
+ for _, s := range p.Sample {
+ focused, ignored := focusedSample(s, focus, ignore)
+ fm = fm || focused
+ im = im || ignored
+ if focused && !ignored {
+ samples = append(samples, s)
+ }
+ }
+ p.Sample = samples
+ return
+}
+
+// focusedTag checks a sample against focus and ignore regexps.
+// Returns whether the focus/ignore regexps match any tags
+func focusedSample(s *Sample, focus, ignore TagMatch) (fm, im bool) {
+ fm = focus == nil
+ for key, vals := range s.Label {
+ for _, val := range vals {
+ if ignore != nil && ignore(key, val, 0) {
+ im = true
+ }
+ if !fm && focus(key, val, 0) {
+ fm = true
+ }
+ }
+ }
+ for key, vals := range s.NumLabel {
+ for _, val := range vals {
+ if ignore != nil && ignore(key, "", val) {
+ im = true
+ }
+ if !fm && focus(key, "", val) {
+ fm = true
+ }
+ }
+ }
+ return fm, im
+}
diff --git a/src/cmd/pprof/internal/profile/legacy_profile.go b/src/cmd/pprof/internal/profile/legacy_profile.go
new file mode 100644
index 000000000..bfc8110e4
--- /dev/null
+++ b/src/cmd/pprof/internal/profile/legacy_profile.go
@@ -0,0 +1,1250 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This file implements parsers to convert legacy profiles into the
+// profile.proto format.
+
+package profile
+
+import (
+ "bufio"
+ "bytes"
+ "fmt"
+ "io"
+ "math"
+ "regexp"
+ "strconv"
+ "strings"
+)
+
+var (
+ countStartRE = regexp.MustCompile(`\A(\w+) profile: total \d+\n\z`)
+ countRE = regexp.MustCompile(`\A(\d+) @(( 0x[0-9a-f]+)+)\n\z`)
+
+ heapHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] *@ *(heap[_a-z0-9]*)/?(\d*)`)
+ heapSampleRE = regexp.MustCompile(`(-?\d+): *(-?\d+) *\[ *(\d+): *(\d+) *] @([ x0-9a-f]*)`)
+
+ contentionSampleRE = regexp.MustCompile(`(\d+) *(\d+) @([ x0-9a-f]*)`)
+
+ hexNumberRE = regexp.MustCompile(`0x[0-9a-f]+`)
+
+ growthHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] @ growthz`)
+
+ fragmentationHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] @ fragmentationz`)
+
+ threadzStartRE = regexp.MustCompile(`--- threadz \d+ ---`)
+ threadStartRE = regexp.MustCompile(`--- Thread ([[:xdigit:]]+) \(name: (.*)/(\d+)\) stack: ---`)
+
+ procMapsRE = regexp.MustCompile(`([[:xdigit:]]+)-([[:xdigit:]]+)\s+([-rwxp]+)\s+([[:xdigit:]]+)\s+([[:xdigit:]]+):([[:xdigit:]]+)\s+([[:digit:]]+)\s*(\S+)?`)
+
+ briefMapsRE = regexp.MustCompile(`\s*([[:xdigit:]]+)-([[:xdigit:]]+):\s*(\S+)(\s.*@)?([[:xdigit:]]+)?`)
+
+ // LegacyHeapAllocated instructs the heapz parsers to use the
+ // allocated memory stats instead of the default in-use memory. Note
+ // that tcmalloc doesn't provide all allocated memory, only in-use
+ // stats.
+ LegacyHeapAllocated bool
+)
+
+func isSpaceOrComment(line string) bool {
+ trimmed := strings.TrimSpace(line)
+ return len(trimmed) == 0 || trimmed[0] == '#'
+}
+
+// parseGoCount parses a Go count profile (e.g., threadcreate or
+// goroutine) and returns a new Profile.
+func parseGoCount(b []byte) (*Profile, error) {
+ r := bytes.NewBuffer(b)
+
+ var line string
+ var err error
+ for {
+ // Skip past comments and empty lines seeking a real header.
+ line, err = r.ReadString('\n')
+ if err != nil {
+ return nil, err
+ }
+ if !isSpaceOrComment(line) {
+ break
+ }
+ }
+
+ m := countStartRE.FindStringSubmatch(line)
+ if m == nil {
+ return nil, errUnrecognized
+ }
+ profileType := string(m[1])
+ p := &Profile{
+ PeriodType: &ValueType{Type: profileType, Unit: "count"},
+ Period: 1,
+ SampleType: []*ValueType{{Type: profileType, Unit: "count"}},
+ }
+ locations := make(map[uint64]*Location)
+ for {
+ line, err = r.ReadString('\n')
+ if err != nil {
+ if err == io.EOF {
+ break
+ }
+ return nil, err
+ }
+ if isSpaceOrComment(line) {
+ continue
+ }
+ if strings.HasPrefix(line, "---") {
+ break
+ }
+ m := countRE.FindStringSubmatch(line)
+ if m == nil {
+ return nil, errMalformed
+ }
+ n, err := strconv.ParseInt(string(m[1]), 0, 64)
+ if err != nil {
+ return nil, errMalformed
+ }
+ fields := strings.Fields(string(m[2]))
+ locs := make([]*Location, 0, len(fields))
+ for _, stk := range fields {
+ addr, err := strconv.ParseUint(stk, 0, 64)
+ if err != nil {
+ return nil, errMalformed
+ }
+ // Adjust all frames by -1 (except the leaf) to land on top of
+ // the call instruction.
+ if len(locs) > 0 {
+ addr--
+ }
+ loc := locations[addr]
+ if loc == nil {
+ loc = &Location{
+ Address: addr,
+ }
+ locations[addr] = loc
+ p.Location = append(p.Location, loc)
+ }
+ locs = append(locs, loc)
+ }
+ p.Sample = append(p.Sample, &Sample{
+ Location: locs,
+ Value: []int64{n},
+ })
+ }
+
+ if err = parseAdditionalSections(strings.TrimSpace(line), r, p); err != nil {
+ return nil, err
+ }
+ return p, nil
+}
+
+// remapLocationIDs ensures there is a location for each address
+// referenced by a sample, and remaps the samples to point to the new
+// location ids.
+func (p *Profile) remapLocationIDs() {
+ seen := make(map[*Location]bool, len(p.Location))
+ var locs []*Location
+
+ for _, s := range p.Sample {
+ for _, l := range s.Location {
+ if seen[l] {
+ continue
+ }
+ l.ID = uint64(len(locs) + 1)
+ locs = append(locs, l)
+ seen[l] = true
+ }
+ }
+ p.Location = locs
+}
+
+func (p *Profile) remapFunctionIDs() {
+ seen := make(map[*Function]bool, len(p.Function))
+ var fns []*Function
+
+ for _, l := range p.Location {
+ for _, ln := range l.Line {
+ fn := ln.Function
+ if fn == nil || seen[fn] {
+ continue
+ }
+ fn.ID = uint64(len(fns) + 1)
+ fns = append(fns, fn)
+ seen[fn] = true
+ }
+ }
+ p.Function = fns
+}
+
+// remapMappingIDs matches location addresses with existing mappings
+// and updates them appropriately. This is O(N*M), if this ever shows
+// up as a bottleneck, evaluate sorting the mappings and doing a
+// binary search, which would make it O(N*log(M)).
+func (p *Profile) remapMappingIDs() {
+ if len(p.Mapping) == 0 {
+ return
+ }
+
+ // Some profile handlers will incorrectly set regions for the main
+ // executable if its section is remapped. Fix them through heuristics.
+
+ // Remove the initial mapping if named '/anon_hugepage' and has a
+ // consecutive adjacent mapping.
+ if m := p.Mapping[0]; strings.HasPrefix(m.File, "/anon_hugepage") {
+ if len(p.Mapping) > 1 && m.Limit == p.Mapping[1].Start {
+ p.Mapping = p.Mapping[1:]
+ }
+ }
+
+ // Subtract the offset from the start of the main mapping if it
+ // ends up at a recognizable start address.
+ const expectedStart = 0x400000
+ if m := p.Mapping[0]; m.Start-m.Offset == expectedStart {
+ m.Start = expectedStart
+ m.Offset = 0
+ }
+
+ for _, l := range p.Location {
+ if a := l.Address; a != 0 {
+ for _, m := range p.Mapping {
+ if m.Start <= a && a < m.Limit {
+ l.Mapping = m
+ break
+ }
+ }
+ }
+ }
+
+ // Reset all mapping IDs.
+ for i, m := range p.Mapping {
+ m.ID = uint64(i + 1)
+ }
+}
+
+var cpuInts = []func([]byte) (uint64, []byte){
+ get32l,
+ get32b,
+ get64l,
+ get64b,
+}
+
+func get32l(b []byte) (uint64, []byte) {
+ if len(b) < 4 {
+ return 0, nil
+ }
+ return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24, b[4:]
+}
+
+func get32b(b []byte) (uint64, []byte) {
+ if len(b) < 4 {
+ return 0, nil
+ }
+ return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24, b[4:]
+}
+
+func get64l(b []byte) (uint64, []byte) {
+ if len(b) < 8 {
+ return 0, nil
+ }
+ return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56, b[8:]
+}
+
+func get64b(b []byte) (uint64, []byte) {
+ if len(b) < 8 {
+ return 0, nil
+ }
+ return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56, b[8:]
+}
+
+// ParseTracebacks parses a set of tracebacks and returns a newly
+// populated profile. It will accept any text file and generate a
+// Profile out of it with any hex addresses it can identify, including
+// a process map if it can recognize one. Each sample will include a
+// tag "source" with the addresses recognized in string format.
+func ParseTracebacks(b []byte) (*Profile, error) {
+ r := bytes.NewBuffer(b)
+
+ p := &Profile{
+ PeriodType: &ValueType{Type: "trace", Unit: "count"},
+ Period: 1,
+ SampleType: []*ValueType{
+ {Type: "trace", Unit: "count"},
+ },
+ }
+
+ var sources []string
+ var sloc []*Location
+
+ locs := make(map[uint64]*Location)
+ for {
+ l, err := r.ReadString('\n')
+ if err != nil {
+ if err != io.EOF {
+ return nil, err
+ }
+ if l == "" {
+ break
+ }
+ }
+ if sectionTrigger(l) == memoryMapSection {
+ break
+ }
+ if s, addrs := extractHexAddresses(l); len(s) > 0 {
+ for _, addr := range addrs {
+ // Addresses from stack traces point to the next instruction after
+ // each call. Adjust by -1 to land somewhere on the actual call
+ // (except for the leaf, which is not a call).
+ if len(sloc) > 0 {
+ addr--
+ }
+ loc := locs[addr]
+ if locs[addr] == nil {
+ loc = &Location{
+ Address: addr,
+ }
+ p.Location = append(p.Location, loc)
+ locs[addr] = loc
+ }
+ sloc = append(sloc, loc)
+ }
+
+ sources = append(sources, s...)
+ } else {
+ if len(sources) > 0 || len(sloc) > 0 {
+ addTracebackSample(sloc, sources, p)
+ sloc, sources = nil, nil
+ }
+ }
+ }
+
+ // Add final sample to save any leftover data.
+ if len(sources) > 0 || len(sloc) > 0 {
+ addTracebackSample(sloc, sources, p)
+ }
+
+ if err := p.ParseMemoryMap(r); err != nil {
+ return nil, err
+ }
+ return p, nil
+}
+
+func addTracebackSample(l []*Location, s []string, p *Profile) {
+ p.Sample = append(p.Sample,
+ &Sample{
+ Value: []int64{1},
+ Location: l,
+ Label: map[string][]string{"source": s},
+ })
+}
+
+// parseCPU parses a profilez legacy profile and returns a newly
+// populated Profile.
+//
+// The general format for profilez samples is a sequence of words in
+// binary format. The first words are a header with the following data:
+// 1st word -- 0
+// 2nd word -- 3
+// 3rd word -- 0 if a c++ application, 1 if a java application.
+// 4th word -- Sampling period (in microseconds).
+// 5th word -- Padding.
+func parseCPU(b []byte) (*Profile, error) {
+ var parse func([]byte) (uint64, []byte)
+ var n1, n2, n3, n4, n5 uint64
+ for _, parse = range cpuInts {
+ var tmp []byte
+ n1, tmp = parse(b)
+ n2, tmp = parse(tmp)
+ n3, tmp = parse(tmp)
+ n4, tmp = parse(tmp)
+ n5, tmp = parse(tmp)
+
+ if tmp != nil && n1 == 0 && n2 == 3 && n3 == 0 && n4 > 0 && n5 == 0 {
+ b = tmp
+ return cpuProfile(b, int64(n4), parse)
+ }
+ }
+ return nil, errUnrecognized
+}
+
+// cpuProfile returns a new Profile from C++ profilez data.
+// b is the profile bytes after the header, period is the profiling
+// period, and parse is a function to parse 8-byte chunks from the
+// profile in its native endianness.
+func cpuProfile(b []byte, period int64, parse func(b []byte) (uint64, []byte)) (*Profile, error) {
+ p := &Profile{
+ Period: period * 1000,
+ PeriodType: &ValueType{Type: "cpu", Unit: "nanoseconds"},
+ SampleType: []*ValueType{
+ {Type: "samples", Unit: "count"},
+ {Type: "cpu", Unit: "nanoseconds"},
+ },
+ }
+ var err error
+ if b, _, err = parseCPUSamples(b, parse, true, p); err != nil {
+ return nil, err
+ }
+
+ // If all samples have the same second-to-the-bottom frame, it
+ // strongly suggests that it is an uninteresting artifact of
+ // measurement -- a stack frame pushed by the signal handler. The
+ // bottom frame is always correct as it is picked up from the signal
+ // structure, not the stack. Check if this is the case and if so,
+ // remove.
+ if len(p.Sample) > 1 && len(p.Sample[0].Location) > 1 {
+ allSame := true
+ id1 := p.Sample[0].Location[1].Address
+ for _, s := range p.Sample {
+ if len(s.Location) < 2 || id1 != s.Location[1].Address {
+ allSame = false
+ break
+ }
+ }
+ if allSame {
+ for _, s := range p.Sample {
+ s.Location = append(s.Location[:1], s.Location[2:]...)
+ }
+ }
+ }
+
+ if err := p.ParseMemoryMap(bytes.NewBuffer(b)); err != nil {
+ return nil, err
+ }
+ return p, nil
+}
+
+// parseCPUSamples parses a collection of profilez samples from a
+// profile.
+//
+// profilez samples are a repeated sequence of stack frames of the
+// form:
+// 1st word -- The number of times this stack was encountered.
+// 2nd word -- The size of the stack (StackSize).
+// 3rd word -- The first address on the stack.
+// ...
+// StackSize + 2 -- The last address on the stack
+// The last stack trace is of the form:
+// 1st word -- 0
+// 2nd word -- 1
+// 3rd word -- 0
+//
+// Addresses from stack traces may point to the next instruction after
+// each call. Optionally adjust by -1 to land somewhere on the actual
+// call (except for the leaf, which is not a call).
+func parseCPUSamples(b []byte, parse func(b []byte) (uint64, []byte), adjust bool, p *Profile) ([]byte, map[uint64]*Location, error) {
+ locs := make(map[uint64]*Location)
+ for len(b) > 0 {
+ var count, nstk uint64
+ count, b = parse(b)
+ nstk, b = parse(b)
+ if b == nil || nstk > uint64(len(b)/4) {
+ return nil, nil, errUnrecognized
+ }
+ var sloc []*Location
+ addrs := make([]uint64, nstk)
+ for i := 0; i < int(nstk); i++ {
+ addrs[i], b = parse(b)
+ }
+
+ if count == 0 && nstk == 1 && addrs[0] == 0 {
+ // End of data marker
+ break
+ }
+ for i, addr := range addrs {
+ if adjust && i > 0 {
+ addr--
+ }
+ loc := locs[addr]
+ if loc == nil {
+ loc = &Location{
+ Address: addr,
+ }
+ locs[addr] = loc
+ p.Location = append(p.Location, loc)
+ }
+ sloc = append(sloc, loc)
+ }
+ p.Sample = append(p.Sample,
+ &Sample{
+ Value: []int64{int64(count), int64(count) * int64(p.Period)},
+ Location: sloc,
+ })
+ }
+ // Reached the end without finding the EOD marker.
+ return b, locs, nil
+}
+
+// parseHeap parses a heapz legacy or a growthz profile and
+// returns a newly populated Profile.
+func parseHeap(b []byte) (p *Profile, err error) {
+ r := bytes.NewBuffer(b)
+ l, err := r.ReadString('\n')
+ if err != nil {
+ return nil, errUnrecognized
+ }
+
+ sampling := ""
+
+ if header := heapHeaderRE.FindStringSubmatch(l); header != nil {
+ p = &Profile{
+ SampleType: []*ValueType{
+ {Type: "objects", Unit: "count"},
+ {Type: "space", Unit: "bytes"},
+ },
+ PeriodType: &ValueType{Type: "objects", Unit: "bytes"},
+ }
+
+ var period int64
+ if len(header[6]) > 0 {
+ if period, err = strconv.ParseInt(string(header[6]), 10, 64); err != nil {
+ return nil, errUnrecognized
+ }
+ }
+
+ switch header[5] {
+ case "heapz_v2", "heap_v2":
+ sampling, p.Period = "v2", period
+ case "heapprofile":
+ sampling, p.Period = "", 1
+ case "heap":
+ sampling, p.Period = "v2", period/2
+ default:
+ return nil, errUnrecognized
+ }
+ } else if header = growthHeaderRE.FindStringSubmatch(l); header != nil {
+ p = &Profile{
+ SampleType: []*ValueType{
+ {Type: "objects", Unit: "count"},
+ {Type: "space", Unit: "bytes"},
+ },
+ PeriodType: &ValueType{Type: "heapgrowth", Unit: "count"},
+ Period: 1,
+ }
+ } else if header = fragmentationHeaderRE.FindStringSubmatch(l); header != nil {
+ p = &Profile{
+ SampleType: []*ValueType{
+ {Type: "objects", Unit: "count"},
+ {Type: "space", Unit: "bytes"},
+ },
+ PeriodType: &ValueType{Type: "allocations", Unit: "count"},
+ Period: 1,
+ }
+ } else {
+ return nil, errUnrecognized
+ }
+
+ if LegacyHeapAllocated {
+ for _, st := range p.SampleType {
+ st.Type = "alloc_" + st.Type
+ }
+ } else {
+ for _, st := range p.SampleType {
+ st.Type = "inuse_" + st.Type
+ }
+ }
+
+ locs := make(map[uint64]*Location)
+ for {
+ l, err = r.ReadString('\n')
+ if err != nil {
+ if err != io.EOF {
+ return nil, err
+ }
+
+ if l == "" {
+ break
+ }
+ }
+
+ if l = strings.TrimSpace(l); l == "" {
+ continue
+ }
+
+ if sectionTrigger(l) != unrecognizedSection {
+ break
+ }
+
+ value, blocksize, addrs, err := parseHeapSample(l, p.Period, sampling)
+ if err != nil {
+ return nil, err
+ }
+ var sloc []*Location
+ for i, addr := range addrs {
+ // Addresses from stack traces point to the next instruction after
+ // each call. Adjust by -1 to land somewhere on the actual call
+ // (except for the leaf, which is not a call).
+ if i > 0 {
+ addr--
+ }
+ loc := locs[addr]
+ if locs[addr] == nil {
+ loc = &Location{
+ Address: addr,
+ }
+ p.Location = append(p.Location, loc)
+ locs[addr] = loc
+ }
+ sloc = append(sloc, loc)
+ }
+
+ p.Sample = append(p.Sample, &Sample{
+ Value: value,
+ Location: sloc,
+ NumLabel: map[string][]int64{"bytes": []int64{blocksize}},
+ })
+ }
+
+ if err = parseAdditionalSections(l, r, p); err != nil {
+ return nil, err
+ }
+ return p, nil
+}
+
+// parseHeapSample parses a single row from a heap profile into a new Sample.
+func parseHeapSample(line string, rate int64, sampling string) (value []int64, blocksize int64, addrs []uint64, err error) {
+ sampleData := heapSampleRE.FindStringSubmatch(line)
+ if len(sampleData) != 6 {
+ return value, blocksize, addrs, fmt.Errorf("unexpected number of sample values: got %d, want 6", len(sampleData))
+ }
+
+ // Use first two values by default; tcmalloc sampling generates the
+ // same value for both, only the older heap-profile collect separate
+ // stats for in-use and allocated objects.
+ valueIndex := 1
+ if LegacyHeapAllocated {
+ valueIndex = 3
+ }
+
+ var v1, v2 int64
+ if v1, err = strconv.ParseInt(sampleData[valueIndex], 10, 64); err != nil {
+ return value, blocksize, addrs, fmt.Errorf("malformed sample: %s: %v", line, err)
+ }
+ if v2, err = strconv.ParseInt(sampleData[valueIndex+1], 10, 64); err != nil {
+ return value, blocksize, addrs, fmt.Errorf("malformed sample: %s: %v", line, err)
+ }
+
+ if v1 == 0 {
+ if v2 != 0 {
+ return value, blocksize, addrs, fmt.Errorf("allocation count was 0 but allocation bytes was %d", v2)
+ }
+ } else {
+ blocksize = v2 / v1
+ if sampling == "v2" {
+ v1, v2 = scaleHeapSample(v1, v2, rate)
+ }
+ }
+
+ value = []int64{v1, v2}
+ addrs = parseHexAddresses(sampleData[5])
+
+ return value, blocksize, addrs, nil
+}
+
+// extractHexAddresses extracts hex numbers from a string and returns
+// them, together with their numeric value, in a slice.
+func extractHexAddresses(s string) ([]string, []uint64) {
+ hexStrings := hexNumberRE.FindAllString(s, -1)
+ var ids []uint64
+ for _, s := range hexStrings {
+ if id, err := strconv.ParseUint(s, 0, 64); err == nil {
+ ids = append(ids, id)
+ } else {
+ // Do not expect any parsing failures due to the regexp matching.
+ panic("failed to parse hex value:" + s)
+ }
+ }
+ return hexStrings, ids
+}
+
+// parseHexAddresses parses hex numbers from a string and returns them
+// in a slice.
+func parseHexAddresses(s string) []uint64 {
+ _, ids := extractHexAddresses(s)
+ return ids
+}
+
+// scaleHeapSample adjusts the data from a heapz Sample to
+// account for its probability of appearing in the collected
+// data. heapz profiles are a sampling of the memory allocations
+// requests in a program. We estimate the unsampled value by dividing
+// each collected sample by its probability of appearing in the
+// profile. heapz v2 profiles rely on a poisson process to determine
+// which samples to collect, based on the desired average collection
+// rate R. The probability of a sample of size S to appear in that
+// profile is 1-exp(-S/R).
+func scaleHeapSample(count, size, rate int64) (int64, int64) {
+ if count == 0 || size == 0 {
+ return 0, 0
+ }
+
+ if rate <= 1 {
+ // if rate==1 all samples were collected so no adjustment is needed.
+ // if rate<1 treat as unknown and skip scaling.
+ return count, size
+ }
+
+ avgSize := float64(size) / float64(count)
+ scale := 1 / (1 - math.Exp(-avgSize/float64(rate)))
+
+ return int64(float64(count) * scale), int64(float64(size) * scale)
+}
+
+// parseContention parses a contentionz profile and returns a newly
+// populated Profile.
+func parseContention(b []byte) (p *Profile, err error) {
+ r := bytes.NewBuffer(b)
+ l, err := r.ReadString('\n')
+ if err != nil {
+ return nil, errUnrecognized
+ }
+
+ if !strings.HasPrefix(l, "--- contention") {
+ return nil, errUnrecognized
+ }
+
+ p = &Profile{
+ PeriodType: &ValueType{Type: "contentions", Unit: "count"},
+ Period: 1,
+ SampleType: []*ValueType{
+ {Type: "contentions", Unit: "count"},
+ {Type: "delay", Unit: "nanoseconds"},
+ },
+ }
+
+ var cpuHz int64
+ // Parse text of the form "attribute = value" before the samples.
+ const delimiter = "="
+ for {
+ l, err = r.ReadString('\n')
+ if err != nil {
+ if err != io.EOF {
+ return nil, err
+ }
+
+ if l == "" {
+ break
+ }
+ }
+
+ if l = strings.TrimSpace(l); l == "" {
+ continue
+ }
+
+ if strings.HasPrefix(l, "---") {
+ break
+ }
+
+ attr := strings.SplitN(l, delimiter, 2)
+ if len(attr) != 2 {
+ break
+ }
+ key, val := strings.TrimSpace(attr[0]), strings.TrimSpace(attr[1])
+ var err error
+ switch key {
+ case "cycles/second":
+ if cpuHz, err = strconv.ParseInt(val, 0, 64); err != nil {
+ return nil, errUnrecognized
+ }
+ case "sampling period":
+ if p.Period, err = strconv.ParseInt(val, 0, 64); err != nil {
+ return nil, errUnrecognized
+ }
+ case "ms since reset":
+ ms, err := strconv.ParseInt(val, 0, 64)
+ if err != nil {
+ return nil, errUnrecognized
+ }
+ p.DurationNanos = ms * 1000 * 1000
+ case "format":
+ // CPP contentionz profiles don't have format.
+ return nil, errUnrecognized
+ case "resolution":
+ // CPP contentionz profiles don't have resolution.
+ return nil, errUnrecognized
+ case "discarded samples":
+ default:
+ return nil, errUnrecognized
+ }
+ }
+
+ locs := make(map[uint64]*Location)
+ for {
+ if l = strings.TrimSpace(l); strings.HasPrefix(l, "---") {
+ break
+ }
+ value, addrs, err := parseContentionSample(l, p.Period, cpuHz)
+ if err != nil {
+ return nil, err
+ }
+ var sloc []*Location
+ for i, addr := range addrs {
+ // Addresses from stack traces point to the next instruction after
+ // each call. Adjust by -1 to land somewhere on the actual call
+ // (except for the leaf, which is not a call).
+ if i > 0 {
+ addr--
+ }
+ loc := locs[addr]
+ if locs[addr] == nil {
+ loc = &Location{
+ Address: addr,
+ }
+ p.Location = append(p.Location, loc)
+ locs[addr] = loc
+ }
+ sloc = append(sloc, loc)
+ }
+ p.Sample = append(p.Sample, &Sample{
+ Value: value,
+ Location: sloc,
+ })
+
+ if l, err = r.ReadString('\n'); err != nil {
+ if err != io.EOF {
+ return nil, err
+ }
+ if l == "" {
+ break
+ }
+ }
+ }
+
+ if err = parseAdditionalSections(l, r, p); err != nil {
+ return nil, err
+ }
+
+ return p, nil
+}
+
+// parseContentionSample parses a single row from a contention profile
+// into a new Sample.
+func parseContentionSample(line string, period, cpuHz int64) (value []int64, addrs []uint64, err error) {
+ sampleData := contentionSampleRE.FindStringSubmatch(line)
+ if sampleData == nil {
+ return value, addrs, errUnrecognized
+ }
+
+ v1, err := strconv.ParseInt(sampleData[1], 10, 64)
+ if err != nil {
+ return value, addrs, fmt.Errorf("malformed sample: %s: %v", line, err)
+ }
+ v2, err := strconv.ParseInt(sampleData[2], 10, 64)
+ if err != nil {
+ return value, addrs, fmt.Errorf("malformed sample: %s: %v", line, err)
+ }
+
+ // Unsample values if period and cpuHz are available.
+ // - Delays are scaled to cycles and then to nanoseconds.
+ // - Contentions are scaled to cycles.
+ if period > 0 {
+ if cpuHz > 0 {
+ cpuGHz := float64(cpuHz) / 1e9
+ v1 = int64(float64(v1) * float64(period) / cpuGHz)
+ }
+ v2 = v2 * period
+ }
+
+ value = []int64{v2, v1}
+ addrs = parseHexAddresses(sampleData[3])
+
+ return value, addrs, nil
+}
+
+// parseThread parses a Threadz profile and returns a new Profile.
+func parseThread(b []byte) (*Profile, error) {
+ r := bytes.NewBuffer(b)
+
+ var line string
+ var err error
+ for {
+ // Skip past comments and empty lines seeking a real header.
+ line, err = r.ReadString('\n')
+ if err != nil {
+ return nil, err
+ }
+ if !isSpaceOrComment(line) {
+ break
+ }
+ }
+
+ if m := threadzStartRE.FindStringSubmatch(line); m != nil {
+ // Advance over initial comments until first stack trace.
+ for {
+ line, err = r.ReadString('\n')
+ if err != nil {
+ if err != io.EOF {
+ return nil, err
+ }
+
+ if line == "" {
+ break
+ }
+ }
+ if sectionTrigger(line) != unrecognizedSection || line[0] == '-' {
+ break
+ }
+ }
+ } else if t := threadStartRE.FindStringSubmatch(line); len(t) != 4 {
+ return nil, errUnrecognized
+ }
+
+ p := &Profile{
+ SampleType: []*ValueType{{Type: "thread", Unit: "count"}},
+ PeriodType: &ValueType{Type: "thread", Unit: "count"},
+ Period: 1,
+ }
+
+ locs := make(map[uint64]*Location)
+ // Recognize each thread and populate profile samples.
+ for sectionTrigger(line) == unrecognizedSection {
+ if strings.HasPrefix(line, "---- no stack trace for") {
+ line = ""
+ break
+ }
+ if t := threadStartRE.FindStringSubmatch(line); len(t) != 4 {
+ return nil, errUnrecognized
+ }
+
+ var addrs []uint64
+ line, addrs, err = parseThreadSample(r)
+ if err != nil {
+ return nil, errUnrecognized
+ }
+ if len(addrs) == 0 {
+ // We got a --same as previous threads--. Bump counters.
+ if len(p.Sample) > 0 {
+ s := p.Sample[len(p.Sample)-1]
+ s.Value[0]++
+ }
+ continue
+ }
+
+ var sloc []*Location
+ for i, addr := range addrs {
+ // Addresses from stack traces point to the next instruction after
+ // each call. Adjust by -1 to land somewhere on the actual call
+ // (except for the leaf, which is not a call).
+ if i > 0 {
+ addr--
+ }
+ loc := locs[addr]
+ if locs[addr] == nil {
+ loc = &Location{
+ Address: addr,
+ }
+ p.Location = append(p.Location, loc)
+ locs[addr] = loc
+ }
+ sloc = append(sloc, loc)
+ }
+
+ p.Sample = append(p.Sample, &Sample{
+ Value: []int64{1},
+ Location: sloc,
+ })
+ }
+
+ if err = parseAdditionalSections(line, r, p); err != nil {
+ return nil, err
+ }
+
+ return p, nil
+}
+
+// parseThreadSample parses a symbolized or unsymbolized stack trace.
+// Returns the first line after the traceback, the sample (or nil if
+// it hits a 'same-as-previous' marker) and an error.
+func parseThreadSample(b *bytes.Buffer) (nextl string, addrs []uint64, err error) {
+ var l string
+ sameAsPrevious := false
+ for {
+ if l, err = b.ReadString('\n'); err != nil {
+ if err != io.EOF {
+ return "", nil, err
+ }
+ if l == "" {
+ break
+ }
+ }
+ if l = strings.TrimSpace(l); l == "" {
+ continue
+ }
+
+ if strings.HasPrefix(l, "---") {
+ break
+ }
+ if strings.Contains(l, "same as previous thread") {
+ sameAsPrevious = true
+ continue
+ }
+
+ addrs = append(addrs, parseHexAddresses(l)...)
+ }
+
+ if sameAsPrevious {
+ return l, nil, nil
+ }
+ return l, addrs, nil
+}
+
+// parseAdditionalSections parses any additional sections in the
+// profile, ignoring any unrecognized sections.
+func parseAdditionalSections(l string, b *bytes.Buffer, p *Profile) (err error) {
+ for {
+ if sectionTrigger(l) == memoryMapSection {
+ break
+ }
+ // Ignore any unrecognized sections.
+ if l, err := b.ReadString('\n'); err != nil {
+ if err != io.EOF {
+ return err
+ }
+ if l == "" {
+ break
+ }
+ }
+ }
+ return p.ParseMemoryMap(b)
+}
+
+// ParseMemoryMap parses a memory map in the format of
+// /proc/self/maps, and overrides the mappings in the current profile.
+// It renumbers the samples and locations in the profile correspondingly.
+func (p *Profile) ParseMemoryMap(rd io.Reader) error {
+ b := bufio.NewReader(rd)
+
+ var attrs []string
+ var r *strings.Replacer
+ const delimiter = "="
+ for {
+ l, err := b.ReadString('\n')
+ if err != nil {
+ if err != io.EOF {
+ return err
+ }
+ if l == "" {
+ break
+ }
+ }
+ if l = strings.TrimSpace(l); l == "" {
+ continue
+ }
+
+ if r != nil {
+ l = r.Replace(l)
+ }
+ m, err := parseMappingEntry(l)
+ if err != nil {
+ if err == errUnrecognized {
+ // Recognize assignments of the form: attr=value, and replace
+ // $attr with value on subsequent mappings.
+ if attr := strings.SplitN(l, delimiter, 2); len(attr) == 2 {
+ attrs = append(attrs, "$"+strings.TrimSpace(attr[0]), strings.TrimSpace(attr[1]))
+ r = strings.NewReplacer(attrs...)
+ }
+ // Ignore any unrecognized entries
+ continue
+ }
+ return err
+ }
+ if m == nil || (m.File == "" && len(p.Mapping) != 0) {
+ // In some cases the first entry may include the address range
+ // but not the name of the file. It should be followed by
+ // another entry with the name.
+ continue
+ }
+ if len(p.Mapping) == 1 && p.Mapping[0].File == "" {
+ // Update the name if this is the entry following that empty one.
+ p.Mapping[0].File = m.File
+ continue
+ }
+ p.Mapping = append(p.Mapping, m)
+ }
+ p.remapLocationIDs()
+ p.remapFunctionIDs()
+ p.remapMappingIDs()
+ return nil
+}
+
+func parseMappingEntry(l string) (*Mapping, error) {
+ mapping := &Mapping{}
+ var err error
+ if me := procMapsRE.FindStringSubmatch(l); len(me) == 9 {
+ if !strings.Contains(me[3], "x") {
+ // Skip non-executable entries.
+ return nil, nil
+ }
+ if mapping.Start, err = strconv.ParseUint(me[1], 16, 64); err != nil {
+ return nil, errUnrecognized
+ }
+ if mapping.Limit, err = strconv.ParseUint(me[2], 16, 64); err != nil {
+ return nil, errUnrecognized
+ }
+ if me[4] != "" {
+ if mapping.Offset, err = strconv.ParseUint(me[4], 16, 64); err != nil {
+ return nil, errUnrecognized
+ }
+ }
+ mapping.File = me[8]
+ return mapping, nil
+ }
+
+ if me := briefMapsRE.FindStringSubmatch(l); len(me) == 6 {
+ if mapping.Start, err = strconv.ParseUint(me[1], 16, 64); err != nil {
+ return nil, errUnrecognized
+ }
+ if mapping.Limit, err = strconv.ParseUint(me[2], 16, 64); err != nil {
+ return nil, errUnrecognized
+ }
+ mapping.File = me[3]
+ if me[5] != "" {
+ if mapping.Offset, err = strconv.ParseUint(me[5], 16, 64); err != nil {
+ return nil, errUnrecognized
+ }
+ }
+ return mapping, nil
+ }
+
+ return nil, errUnrecognized
+}
+
+type sectionType int
+
+const (
+ unrecognizedSection sectionType = iota
+ memoryMapSection
+)
+
+var memoryMapTriggers = []string{
+ "--- Memory map: ---",
+ "MAPPED_LIBRARIES:",
+}
+
+func sectionTrigger(line string) sectionType {
+ for _, trigger := range memoryMapTriggers {
+ if strings.Contains(line, trigger) {
+ return memoryMapSection
+ }
+ }
+ return unrecognizedSection
+}
+
+func (p *Profile) addLegacyFrameInfo() {
+ switch {
+ case isProfileType(p, heapzSampleTypes) ||
+ isProfileType(p, heapzInUseSampleTypes) ||
+ isProfileType(p, heapzAllocSampleTypes):
+ p.DropFrames, p.KeepFrames = allocRxStr, allocSkipRxStr
+ case isProfileType(p, contentionzSampleTypes):
+ p.DropFrames, p.KeepFrames = lockRxStr, ""
+ default:
+ p.DropFrames, p.KeepFrames = cpuProfilerRxStr, ""
+ }
+}
+
+var heapzSampleTypes = []string{"allocations", "size"} // early Go pprof profiles
+var heapzInUseSampleTypes = []string{"inuse_objects", "inuse_space"}
+var heapzAllocSampleTypes = []string{"alloc_objects", "alloc_space"}
+var contentionzSampleTypes = []string{"contentions", "delay"}
+
+func isProfileType(p *Profile, t []string) bool {
+ st := p.SampleType
+ if len(st) != len(t) {
+ return false
+ }
+
+ for i := range st {
+ if st[i].Type != t[i] {
+ return false
+ }
+ }
+ return true
+}
+
+var allocRxStr = strings.Join([]string{
+ // POSIX entry points.
+ `calloc`,
+ `cfree`,
+ `malloc`,
+ `free`,
+ `memalign`,
+ `do_memalign`,
+ `(__)?posix_memalign`,
+ `pvalloc`,
+ `valloc`,
+ `realloc`,
+
+ // TC malloc.
+ `tcmalloc::.*`,
+ `tc_calloc`,
+ `tc_cfree`,
+ `tc_malloc`,
+ `tc_free`,
+ `tc_memalign`,
+ `tc_posix_memalign`,
+ `tc_pvalloc`,
+ `tc_valloc`,
+ `tc_realloc`,
+ `tc_new`,
+ `tc_delete`,
+ `tc_newarray`,
+ `tc_deletearray`,
+ `tc_new_nothrow`,
+ `tc_newarray_nothrow`,
+
+ // Memory-allocation routines on OS X.
+ `malloc_zone_malloc`,
+ `malloc_zone_calloc`,
+ `malloc_zone_valloc`,
+ `malloc_zone_realloc`,
+ `malloc_zone_memalign`,
+ `malloc_zone_free`,
+
+ // Go runtime
+ `runtime\..*`,
+
+ // Other misc. memory allocation routines
+ `BaseArena::.*`,
+ `(::)?do_malloc_no_errno`,
+ `(::)?do_malloc_pages`,
+ `(::)?do_malloc`,
+ `DoSampledAllocation`,
+ `MallocedMemBlock::MallocedMemBlock`,
+ `_M_allocate`,
+ `__builtin_(vec_)?delete`,
+ `__builtin_(vec_)?new`,
+ `__gnu_cxx::new_allocator::allocate`,
+ `__libc_malloc`,
+ `__malloc_alloc_template::allocate`,
+ `allocate`,
+ `cpp_alloc`,
+ `operator new(\[\])?`,
+ `simple_alloc::allocate`,
+}, `|`)
+
+var allocSkipRxStr = strings.Join([]string{
+ // Preserve Go runtime frames that appear in the middle/bottom of
+ // the stack.
+ `runtime\.panic`,
+}, `|`)
+
+var cpuProfilerRxStr = strings.Join([]string{
+ `ProfileData::Add`,
+ `ProfileData::prof_handler`,
+ `CpuProfiler::prof_handler`,
+ `__pthread_sighandler`,
+ `__restore`,
+}, `|`)
+
+var lockRxStr = strings.Join([]string{
+ `RecordLockProfileData`,
+ `(base::)?RecordLockProfileData.*`,
+ `(base::)?SubmitMutexProfileData.*`,
+ `(base::)?SubmitSpinLockProfileData.*`,
+ `(Mutex::)?AwaitCommon.*`,
+ `(Mutex::)?Unlock.*`,
+ `(Mutex::)?UnlockSlow.*`,
+ `(Mutex::)?ReaderUnlock.*`,
+ `(MutexLock::)?~MutexLock.*`,
+ `(SpinLock::)?Unlock.*`,
+ `(SpinLock::)?SlowUnlock.*`,
+ `(SpinLockHolder::)?~SpinLockHolder.*`,
+}, `|`)
diff --git a/src/cmd/pprof/internal/profile/profile.go b/src/cmd/pprof/internal/profile/profile.go
new file mode 100644
index 000000000..7ee58eee7
--- /dev/null
+++ b/src/cmd/pprof/internal/profile/profile.go
@@ -0,0 +1,567 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package profile provides a representation of profile.proto and
+// methods to encode/decode profiles in this format.
+package profile
+
+import (
+ "bytes"
+ "compress/gzip"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "regexp"
+ "strings"
+ "time"
+)
+
+// Profile is an in-memory representation of profile.proto.
+type Profile struct {
+ SampleType []*ValueType
+ Sample []*Sample
+ Mapping []*Mapping
+ Location []*Location
+ Function []*Function
+
+ DropFrames string
+ KeepFrames string
+
+ TimeNanos int64
+ DurationNanos int64
+ PeriodType *ValueType
+ Period int64
+
+ dropFramesX int64
+ keepFramesX int64
+ stringTable []string
+}
+
+// ValueType corresponds to Profile.ValueType
+type ValueType struct {
+ Type string // cpu, wall, inuse_space, etc
+ Unit string // seconds, nanoseconds, bytes, etc
+
+ typeX int64
+ unitX int64
+}
+
+// Sample corresponds to Profile.Sample
+type Sample struct {
+ Location []*Location
+ Value []int64
+ Label map[string][]string
+ NumLabel map[string][]int64
+
+ locationIDX []uint64
+ labelX []Label
+}
+
+// Label corresponds to Profile.Label
+type Label struct {
+ keyX int64
+ // Exactly one of the two following values must be set
+ strX int64
+ numX int64 // Integer value for this label
+}
+
+// Mapping corresponds to Profile.Mapping
+type Mapping struct {
+ ID uint64
+ Start uint64
+ Limit uint64
+ Offset uint64
+ File string
+ BuildID string
+ HasFunctions bool
+ HasFilenames bool
+ HasLineNumbers bool
+ HasInlineFrames bool
+
+ fileX int64
+ buildIDX int64
+}
+
+// Location corresponds to Profile.Location
+type Location struct {
+ ID uint64
+ Mapping *Mapping
+ Address uint64
+ Line []Line
+
+ mappingIDX uint64
+}
+
+// Line corresponds to Profile.Line
+type Line struct {
+ Function *Function
+ Line int64
+
+ functionIDX uint64
+}
+
+// Function corresponds to Profile.Function
+type Function struct {
+ ID uint64
+ Name string
+ SystemName string
+ Filename string
+ StartLine int64
+
+ nameX int64
+ systemNameX int64
+ filenameX int64
+}
+
+// Parse parses a profile and checks for its validity. The input
+// may be a gzip-compressed encoded protobuf or one of many legacy
+// profile formats which may be unsupported in the future.
+func Parse(r io.Reader) (*Profile, error) {
+ orig, err := ioutil.ReadAll(r)
+ if err != nil {
+ return nil, err
+ }
+
+ var p *Profile
+ if len(orig) >= 2 && orig[0] == 0x1f && orig[1] == 0x8b {
+ var data []byte
+
+ if gz, err := gzip.NewReader(bytes.NewBuffer(orig)); err == nil {
+ data, err = ioutil.ReadAll(gz)
+ }
+ if err != nil {
+ return nil, fmt.Errorf("decompressing profile: %v", err)
+ }
+ orig = data
+ }
+ if p, err = parseUncompressed(orig); err != nil {
+ if p, err = parseLegacy(orig); err != nil {
+ return nil, fmt.Errorf("parsing profile: %v", err)
+ }
+ }
+
+ if err := p.CheckValid(); err != nil {
+ return nil, fmt.Errorf("malformed profile: %v", err)
+ }
+ return p, nil
+}
+
+var errUnrecognized = fmt.Errorf("unrecognized profile format")
+var errMalformed = fmt.Errorf("malformed profile format")
+
+func parseLegacy(data []byte) (*Profile, error) {
+ parsers := []func([]byte) (*Profile, error){
+ parseCPU,
+ parseHeap,
+ parseGoCount, // goroutine, threadcreate
+ parseThread,
+ parseContention,
+ }
+
+ for _, parser := range parsers {
+ p, err := parser(data)
+ if err == nil {
+ p.setMain()
+ p.addLegacyFrameInfo()
+ return p, nil
+ }
+ if err != errUnrecognized {
+ return nil, err
+ }
+ }
+ return nil, errUnrecognized
+}
+
+func parseUncompressed(data []byte) (*Profile, error) {
+ p := &Profile{}
+ if err := unmarshal(data, p); err != nil {
+ return nil, err
+ }
+
+ if err := p.postDecode(); err != nil {
+ return nil, err
+ }
+
+ return p, nil
+}
+
+var libRx = regexp.MustCompile(`([.]so$|[.]so[._][0-9]+)`)
+
+// setMain scans Mapping entries and guesses which entry is main
+// because legacy profiles don't obey the convention of putting main
+// first.
+func (p *Profile) setMain() {
+ for i := 0; i < len(p.Mapping); i++ {
+ file := strings.TrimSpace(strings.Replace(p.Mapping[i].File, "(deleted)", "", -1))
+ if len(file) == 0 {
+ continue
+ }
+ if len(libRx.FindStringSubmatch(file)) > 0 {
+ continue
+ }
+ if strings.HasPrefix(file, "[") {
+ continue
+ }
+ // Swap what we guess is main to position 0.
+ tmp := p.Mapping[i]
+ p.Mapping[i] = p.Mapping[0]
+ p.Mapping[0] = tmp
+ break
+ }
+}
+
+// Write writes the profile as a gzip-compressed marshaled protobuf.
+func (p *Profile) Write(w io.Writer) error {
+ p.preEncode()
+ b := marshal(p)
+ zw := gzip.NewWriter(w)
+ defer zw.Close()
+ _, err := zw.Write(b)
+ return err
+}
+
+// CheckValid tests whether the profile is valid. Checks include, but are
+// not limited to:
+// - len(Profile.Sample[n].value) == len(Profile.value_unit)
+// - Sample.id has a corresponding Profile.Location
+func (p *Profile) CheckValid() error {
+ // Check that sample values are consistent
+ sampleLen := len(p.SampleType)
+ if sampleLen == 0 && len(p.Sample) != 0 {
+ return fmt.Errorf("missing sample type information")
+ }
+ for _, s := range p.Sample {
+ if len(s.Value) != sampleLen {
+ return fmt.Errorf("mismatch: sample has: %d values vs. %d types", len(s.Value), len(p.SampleType))
+ }
+ }
+
+ // Check that all mappings/locations/functions are in the tables
+ // Check that there are no duplicate ids
+ mappings := make(map[uint64]*Mapping, len(p.Mapping))
+ for _, m := range p.Mapping {
+ if m.ID == 0 {
+ return fmt.Errorf("found mapping with reserved ID=0")
+ }
+ if mappings[m.ID] != nil {
+ return fmt.Errorf("multiple mappings with same id: %d", m.ID)
+ }
+ mappings[m.ID] = m
+ }
+ functions := make(map[uint64]*Function, len(p.Function))
+ for _, f := range p.Function {
+ if f.ID == 0 {
+ return fmt.Errorf("found function with reserved ID=0")
+ }
+ if functions[f.ID] != nil {
+ return fmt.Errorf("multiple functions with same id: %d", f.ID)
+ }
+ functions[f.ID] = f
+ }
+ locations := make(map[uint64]*Location, len(p.Location))
+ for _, l := range p.Location {
+ if l.ID == 0 {
+ return fmt.Errorf("found location with reserved id=0")
+ }
+ if locations[l.ID] != nil {
+ return fmt.Errorf("multiple locations with same id: %d", l.ID)
+ }
+ locations[l.ID] = l
+ if m := l.Mapping; m != nil {
+ if m.ID == 0 || mappings[m.ID] != m {
+ return fmt.Errorf("inconsistent mapping %p: %d", m, m.ID)
+ }
+ }
+ for _, ln := range l.Line {
+ if f := ln.Function; f != nil {
+ if f.ID == 0 || functions[f.ID] != f {
+ return fmt.Errorf("inconsistent function %p: %d", f, f.ID)
+ }
+ }
+ }
+ }
+ return nil
+}
+
+// Aggregate merges the locations in the profile into equivalence
+// classes preserving the request attributes. It also updates the
+// samples to point to the merged locations.
+func (p *Profile) Aggregate(inlineFrame, function, filename, linenumber, address bool) error {
+ for _, m := range p.Mapping {
+ m.HasInlineFrames = m.HasInlineFrames && inlineFrame
+ m.HasFunctions = m.HasFunctions && function
+ m.HasFilenames = m.HasFilenames && filename
+ m.HasLineNumbers = m.HasLineNumbers && linenumber
+ }
+
+ // Aggregate functions
+ if !function || !filename {
+ for _, f := range p.Function {
+ if !function {
+ f.Name = ""
+ f.SystemName = ""
+ }
+ if !filename {
+ f.Filename = ""
+ }
+ }
+ }
+
+ // Aggregate locations
+ if !inlineFrame || !address || !linenumber {
+ for _, l := range p.Location {
+ if !inlineFrame && len(l.Line) > 1 {
+ l.Line = l.Line[len(l.Line)-1:]
+ }
+ if !linenumber {
+ for i := range l.Line {
+ l.Line[i].Line = 0
+ }
+ }
+ if !address {
+ l.Address = 0
+ }
+ }
+ }
+
+ return p.CheckValid()
+}
+
+// Print dumps a text representation of a profile. Intended mainly
+// for debugging purposes.
+func (p *Profile) String() string {
+
+ ss := make([]string, 0, len(p.Sample)+len(p.Mapping)+len(p.Location))
+ if pt := p.PeriodType; pt != nil {
+ ss = append(ss, fmt.Sprintf("PeriodType: %s %s", pt.Type, pt.Unit))
+ }
+ ss = append(ss, fmt.Sprintf("Period: %d", p.Period))
+ if p.TimeNanos != 0 {
+ ss = append(ss, fmt.Sprintf("Time: %v", time.Unix(0, p.TimeNanos)))
+ }
+ if p.DurationNanos != 0 {
+ ss = append(ss, fmt.Sprintf("Duration: %v", time.Duration(p.DurationNanos)))
+ }
+
+ ss = append(ss, "Samples:")
+ var sh1 string
+ for _, s := range p.SampleType {
+ sh1 = sh1 + fmt.Sprintf("%s/%s ", s.Type, s.Unit)
+ }
+ ss = append(ss, strings.TrimSpace(sh1))
+ for _, s := range p.Sample {
+ var sv string
+ for _, v := range s.Value {
+ sv = fmt.Sprintf("%s %10d", sv, v)
+ }
+ sv = sv + ": "
+ for _, l := range s.Location {
+ sv = sv + fmt.Sprintf("%d ", l.ID)
+ }
+ ss = append(ss, sv)
+ const labelHeader = " "
+ if len(s.Label) > 0 {
+ ls := labelHeader
+ for k, v := range s.Label {
+ ls = ls + fmt.Sprintf("%s:%v ", k, v)
+ }
+ ss = append(ss, ls)
+ }
+ if len(s.NumLabel) > 0 {
+ ls := labelHeader
+ for k, v := range s.NumLabel {
+ ls = ls + fmt.Sprintf("%s:%v ", k, v)
+ }
+ ss = append(ss, ls)
+ }
+ }
+
+ ss = append(ss, "Locations")
+ for _, l := range p.Location {
+ locStr := fmt.Sprintf("%6d: %#x ", l.ID, l.Address)
+ if m := l.Mapping; m != nil {
+ locStr = locStr + fmt.Sprintf("M=%d ", m.ID)
+ }
+ if len(l.Line) == 0 {
+ ss = append(ss, locStr)
+ }
+ for li := range l.Line {
+ lnStr := "??"
+ if fn := l.Line[li].Function; fn != nil {
+ lnStr = fmt.Sprintf("%s %s:%d s=%d",
+ fn.Name,
+ fn.Filename,
+ l.Line[li].Line,
+ fn.StartLine)
+ if fn.Name != fn.SystemName {
+ lnStr = lnStr + "(" + fn.SystemName + ")"
+ }
+ }
+ ss = append(ss, locStr+lnStr)
+ // Do not print location details past the first line
+ locStr = " "
+ }
+ }
+
+ ss = append(ss, "Mappings")
+ for _, m := range p.Mapping {
+ bits := ""
+ if m.HasFunctions {
+ bits = bits + "[FN]"
+ }
+ if m.HasFilenames {
+ bits = bits + "[FL]"
+ }
+ if m.HasLineNumbers {
+ bits = bits + "[LN]"
+ }
+ if m.HasInlineFrames {
+ bits = bits + "[IN]"
+ }
+ ss = append(ss, fmt.Sprintf("%d: %#x/%#x/%#x %s %s %s",
+ m.ID,
+ m.Start, m.Limit, m.Offset,
+ m.File,
+ m.BuildID,
+ bits))
+ }
+
+ return strings.Join(ss, "\n") + "\n"
+}
+
+// Merge adds profile p adjusted by ratio r into profile p. Profiles
+// must be compatible (same Type and SampleType).
+// TODO(rsilvera): consider normalizing the profiles based on the
+// total samples collected.
+func (p *Profile) Merge(pb *Profile, r float64) error {
+ if err := p.Compatible(pb); err != nil {
+ return err
+ }
+
+ pb = pb.Copy()
+
+ // Keep the largest of the two periods.
+ if pb.Period > p.Period {
+ p.Period = pb.Period
+ }
+
+ p.DurationNanos += pb.DurationNanos
+
+ p.Mapping = append(p.Mapping, pb.Mapping...)
+ for i, m := range p.Mapping {
+ m.ID = uint64(i + 1)
+ }
+ p.Location = append(p.Location, pb.Location...)
+ for i, l := range p.Location {
+ l.ID = uint64(i + 1)
+ }
+ p.Function = append(p.Function, pb.Function...)
+ for i, f := range p.Function {
+ f.ID = uint64(i + 1)
+ }
+
+ if r != 1.0 {
+ for _, s := range pb.Sample {
+ for i, v := range s.Value {
+ s.Value[i] = int64((float64(v) * r))
+ }
+ }
+ }
+ p.Sample = append(p.Sample, pb.Sample...)
+ return p.CheckValid()
+}
+
+// Compatible determines if two profiles can be compared/merged.
+// returns nil if the profiles are compatible; otherwise an error with
+// details on the incompatibility.
+func (p *Profile) Compatible(pb *Profile) error {
+ if !compatibleValueTypes(p.PeriodType, pb.PeriodType) {
+ return fmt.Errorf("incompatible period types %v and %v", p.PeriodType, pb.PeriodType)
+ }
+
+ if len(p.SampleType) != len(pb.SampleType) {
+ return fmt.Errorf("incompatible sample types %v and %v", p.SampleType, pb.SampleType)
+ }
+
+ for i := range p.SampleType {
+ if !compatibleValueTypes(p.SampleType[i], pb.SampleType[i]) {
+ return fmt.Errorf("incompatible sample types %v and %v", p.SampleType, pb.SampleType)
+ }
+ }
+
+ return nil
+}
+
+// HasFunctions determines if all locations in this profile have
+// symbolized function information.
+func (p *Profile) HasFunctions() bool {
+ for _, l := range p.Location {
+ if l.Mapping == nil || !l.Mapping.HasFunctions {
+ return false
+ }
+ }
+ return true
+}
+
+// HasFileLines determines if all locations in this profile have
+// symbolized file and line number information.
+func (p *Profile) HasFileLines() bool {
+ for _, l := range p.Location {
+ if l.Mapping == nil || (!l.Mapping.HasFilenames || !l.Mapping.HasLineNumbers) {
+ return false
+ }
+ }
+ return true
+}
+
+func compatibleValueTypes(v1, v2 *ValueType) bool {
+ if v1 == nil || v2 == nil {
+ return true // No grounds to disqualify.
+ }
+ return v1.Type == v2.Type && v1.Unit == v2.Unit
+}
+
+// Copy makes a fully independent copy of a profile.
+func (p *Profile) Copy() *Profile {
+ p.preEncode()
+ b := marshal(p)
+
+ pp := &Profile{}
+ if err := unmarshal(b, pp); err != nil {
+ panic(err)
+ }
+ if err := pp.postDecode(); err != nil {
+ panic(err)
+ }
+
+ return pp
+}
+
+// Demangler maps symbol names to a human-readable form. This may
+// include C++ demangling and additional simplification. Names that
+// are not demangled may be missing from the resulting map.
+type Demangler func(name []string) (map[string]string, error)
+
+// Demangle attempts to demangle and optionally simplify any function
+// names referenced in the profile. It works on a best-effort basis:
+// it will silently preserve the original names in case of any errors.
+func (p *Profile) Demangle(d Demangler) error {
+ // Collect names to demangle.
+ var names []string
+ for _, fn := range p.Function {
+ names = append(names, fn.SystemName)
+ }
+
+ // Update profile with demangled names.
+ demangled, err := d(names)
+ if err != nil {
+ return err
+ }
+ for _, fn := range p.Function {
+ if dd, ok := demangled[fn.SystemName]; ok {
+ fn.Name = dd
+ }
+ }
+ return nil
+}
diff --git a/src/cmd/pprof/internal/profile/proto.go b/src/cmd/pprof/internal/profile/proto.go
new file mode 100644
index 000000000..475cf564f
--- /dev/null
+++ b/src/cmd/pprof/internal/profile/proto.go
@@ -0,0 +1,298 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This file is a simple protocol buffer encoder and decoder.
+//
+// A protocol message must implement the message interface:
+// decoder() []decoder
+// encode(*buffer)
+//
+// The decode method returns a slice indexed by field number that gives the
+// function to decode that field.
+// The encode method encodes its receiver into the given buffer.
+//
+// The two methods are simple enough to be implemented by hand rather than
+// by using a protocol compiler.
+//
+// See profile.go for examples of messages implementing this interface.
+//
+// There is no support for groups, message sets, or "has" bits.
+
+package profile
+
+import "errors"
+
+type buffer struct {
+ field int
+ typ int
+ u64 uint64
+ data []byte
+ tmp [16]byte
+}
+
+type decoder func(*buffer, message) error
+
+type message interface {
+ decoder() []decoder
+ encode(*buffer)
+}
+
+func marshal(m message) []byte {
+ var b buffer
+ m.encode(&b)
+ return b.data
+}
+
+func encodeVarint(b *buffer, x uint64) {
+ for x >= 128 {
+ b.data = append(b.data, byte(x)|0x80)
+ x >>= 7
+ }
+ b.data = append(b.data, byte(x))
+}
+
+func encodeLength(b *buffer, tag int, len int) {
+ encodeVarint(b, uint64(tag)<<3|2)
+ encodeVarint(b, uint64(len))
+}
+
+func encodeUint64(b *buffer, tag int, x uint64) {
+ // append varint to b.data
+ encodeVarint(b, uint64(tag)<<3|0)
+ encodeVarint(b, x)
+}
+
+func encodeUint64s(b *buffer, tag int, x []uint64) {
+ for _, u := range x {
+ encodeUint64(b, tag, u)
+ }
+}
+
+func encodeUint64Opt(b *buffer, tag int, x uint64) {
+ if x == 0 {
+ return
+ }
+ encodeUint64(b, tag, x)
+}
+
+func encodeInt64(b *buffer, tag int, x int64) {
+ u := uint64(x)
+ encodeUint64(b, tag, u)
+}
+
+func encodeInt64Opt(b *buffer, tag int, x int64) {
+ if x == 0 {
+ return
+ }
+ encodeInt64(b, tag, x)
+}
+
+func encodeString(b *buffer, tag int, x string) {
+ encodeLength(b, tag, len(x))
+ b.data = append(b.data, x...)
+}
+
+func encodeStrings(b *buffer, tag int, x []string) {
+ for _, s := range x {
+ encodeString(b, tag, s)
+ }
+}
+
+func encodeStringOpt(b *buffer, tag int, x string) {
+ if x == "" {
+ return
+ }
+ encodeString(b, tag, x)
+}
+
+func encodeBool(b *buffer, tag int, x bool) {
+ if x {
+ encodeUint64(b, tag, 1)
+ } else {
+ encodeUint64(b, tag, 0)
+ }
+}
+
+func encodeBoolOpt(b *buffer, tag int, x bool) {
+ if x == false {
+ return
+ }
+ encodeBool(b, tag, x)
+}
+
+func encodeMessage(b *buffer, tag int, m message) {
+ n1 := len(b.data)
+ m.encode(b)
+ n2 := len(b.data)
+ encodeLength(b, tag, n2-n1)
+ n3 := len(b.data)
+ copy(b.tmp[:], b.data[n2:n3])
+ copy(b.data[n1+(n3-n2):], b.data[n1:n2])
+ copy(b.data[n1:], b.tmp[:n3-n2])
+}
+
+func unmarshal(data []byte, m message) (err error) {
+ b := buffer{data: data, typ: 2}
+ return decodeMessage(&b, m)
+}
+
+func le64(p []byte) uint64 {
+ return uint64(p[0]) | uint64(p[1])<<8 | uint64(p[2])<<16 | uint64(p[3])<<24 | uint64(p[4])<<32 | uint64(p[5])<<40 | uint64(p[6])<<48 | uint64(p[7])<<56
+}
+
+func le32(p []byte) uint32 {
+ return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24
+}
+
+func decodeVarint(data []byte) (uint64, []byte, error) {
+ var i int
+ var u uint64
+ for i = 0; ; i++ {
+ if i >= 10 || i >= len(data) {
+ return 0, nil, errors.New("bad varint")
+ }
+ u |= uint64(data[i]&0x7F) << uint(7*i)
+ if data[i]&0x80 == 0 {
+ return u, data[i+1:], nil
+ }
+ }
+}
+
+func decodeField(b *buffer, data []byte) ([]byte, error) {
+ x, data, err := decodeVarint(data)
+ if err != nil {
+ return nil, err
+ }
+ b.field = int(x >> 3)
+ b.typ = int(x & 7)
+ b.data = nil
+ b.u64 = 0
+ switch b.typ {
+ case 0:
+ b.u64, data, err = decodeVarint(data)
+ if err != nil {
+ return nil, err
+ }
+ case 1:
+ if len(data) < 8 {
+ return nil, errors.New("not enough data")
+ }
+ b.u64 = le64(data[:8])
+ data = data[8:]
+ case 2:
+ var n uint64
+ n, data, err = decodeVarint(data)
+ if err != nil {
+ return nil, err
+ }
+ if n > uint64(len(data)) {
+ return nil, errors.New("too much data")
+ }
+ b.data = data[:n]
+ data = data[n:]
+ case 5:
+ if len(data) < 4 {
+ return nil, errors.New("not enough data")
+ }
+ b.u64 = uint64(le32(data[:4]))
+ data = data[4:]
+ default:
+ return nil, errors.New("unknown type: " + string(b.typ))
+ }
+
+ return data, nil
+}
+
+func checkType(b *buffer, typ int) error {
+ if b.typ != typ {
+ return errors.New("type mismatch")
+ }
+ return nil
+}
+
+func decodeMessage(b *buffer, m message) error {
+ if err := checkType(b, 2); err != nil {
+ return err
+ }
+ dec := m.decoder()
+ data := b.data
+ for len(data) > 0 {
+ // pull varint field# + type
+ var err error
+ data, err = decodeField(b, data)
+ if err != nil {
+ return err
+ }
+ if b.field >= len(dec) || dec[b.field] == nil {
+ continue
+ }
+ if err := dec[b.field](b, m); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func decodeInt64(b *buffer, x *int64) error {
+ if err := checkType(b, 0); err != nil {
+ return err
+ }
+ *x = int64(b.u64)
+ return nil
+}
+
+func decodeInt64s(b *buffer, x *[]int64) error {
+ var i int64
+ if err := decodeInt64(b, &i); err != nil {
+ return err
+ }
+ *x = append(*x, i)
+ return nil
+}
+
+func decodeUint64(b *buffer, x *uint64) error {
+ if err := checkType(b, 0); err != nil {
+ return err
+ }
+ *x = b.u64
+ return nil
+}
+
+func decodeUint64s(b *buffer, x *[]uint64) error {
+ var u uint64
+ if err := decodeUint64(b, &u); err != nil {
+ return err
+ }
+ *x = append(*x, u)
+ return nil
+}
+
+func decodeString(b *buffer, x *string) error {
+ if err := checkType(b, 2); err != nil {
+ return err
+ }
+ *x = string(b.data)
+ return nil
+}
+
+func decodeStrings(b *buffer, x *[]string) error {
+ var s string
+ if err := decodeString(b, &s); err != nil {
+ return err
+ }
+ *x = append(*x, s)
+ return nil
+}
+
+func decodeBool(b *buffer, x *bool) error {
+ if err := checkType(b, 0); err != nil {
+ return err
+ }
+ if int64(b.u64) == 0 {
+ *x = false
+ } else {
+ *x = true
+ }
+ return nil
+}
diff --git a/src/cmd/pprof/internal/profile/prune.go b/src/cmd/pprof/internal/profile/prune.go
new file mode 100644
index 000000000..abc898cb3
--- /dev/null
+++ b/src/cmd/pprof/internal/profile/prune.go
@@ -0,0 +1,97 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Implements methods to remove frames from profiles.
+
+package profile
+
+import (
+ "fmt"
+ "regexp"
+)
+
+// Prune removes all nodes beneath a node matching dropRx, and not
+// matching keepRx. If the root node of a Sample matches, the sample
+// will have an empty stack.
+func (p *Profile) Prune(dropRx, keepRx *regexp.Regexp) {
+ prune := make(map[uint64]bool)
+ pruneBeneath := make(map[uint64]bool)
+
+ for _, loc := range p.Location {
+ var i int
+ for i = len(loc.Line) - 1; i >= 0; i-- {
+ if fn := loc.Line[i].Function; fn != nil && fn.Name != "" {
+ funcName := fn.Name
+ // Account for leading '.' on the PPC ELF v1 ABI.
+ if funcName[0] == '.' {
+ funcName = funcName[1:]
+ }
+ if dropRx.MatchString(funcName) {
+ if keepRx == nil || !keepRx.MatchString(funcName) {
+ break
+ }
+ }
+ }
+ }
+
+ if i >= 0 {
+ // Found matching entry to prune.
+ pruneBeneath[loc.ID] = true
+
+ // Remove the matching location.
+ if i == len(loc.Line)-1 {
+ // Matched the top entry: prune the whole location.
+ prune[loc.ID] = true
+ } else {
+ loc.Line = loc.Line[i+1:]
+ }
+ }
+ }
+
+ // Prune locs from each Sample
+ for _, sample := range p.Sample {
+ // Scan from the root to the leaves to find the prune location.
+ // Do not prune frames before the first user frame, to avoid
+ // pruning everything.
+ foundUser := false
+ for i := len(sample.Location) - 1; i >= 0; i-- {
+ id := sample.Location[i].ID
+ if !prune[id] && !pruneBeneath[id] {
+ foundUser = true
+ continue
+ }
+ if !foundUser {
+ continue
+ }
+ if prune[id] {
+ sample.Location = sample.Location[i+1:]
+ break
+ }
+ if pruneBeneath[id] {
+ sample.Location = sample.Location[i:]
+ break
+ }
+ }
+ }
+}
+
+// RemoveUninteresting prunes and elides profiles using built-in
+// tables of uninteresting function names.
+func (p *Profile) RemoveUninteresting() error {
+ var keep, drop *regexp.Regexp
+ var err error
+
+ if p.DropFrames != "" {
+ if drop, err = regexp.Compile("^(" + p.DropFrames + ")$"); err != nil {
+ return fmt.Errorf("failed to compile regexp %s: %v", p.DropFrames, err)
+ }
+ if p.KeepFrames != "" {
+ if keep, err = regexp.Compile("^(" + p.KeepFrames + ")$"); err != nil {
+ return fmt.Errorf("failed to compile regexp %s: %v", p.KeepFrames, err)
+ }
+ }
+ p.Prune(drop, keep)
+ }
+ return nil
+}
diff --git a/src/cmd/pprof/internal/report/report.go b/src/cmd/pprof/internal/report/report.go
new file mode 100644
index 000000000..e5977fd03
--- /dev/null
+++ b/src/cmd/pprof/internal/report/report.go
@@ -0,0 +1,1718 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package report summarizes a performance profile into a
+// human-readable report.
+package report
+
+import (
+ "fmt"
+ "io"
+ "math"
+ "os"
+ "path/filepath"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+ "time"
+
+ "cmd/pprof/internal/plugin"
+ "cmd/pprof/internal/profile"
+)
+
+// Generate generates a report as directed by the Report.
+func Generate(w io.Writer, rpt *Report, obj plugin.ObjTool) error {
+ o := rpt.options
+
+ switch o.OutputFormat {
+ case Dot:
+ return printDOT(w, rpt)
+ case Tree:
+ return printTree(w, rpt)
+ case Text:
+ return printText(w, rpt)
+ case Raw:
+ fmt.Fprint(w, rpt.prof.String())
+ return nil
+ case Tags:
+ return printTags(w, rpt)
+ case Proto:
+ return rpt.prof.Write(w)
+ case Dis:
+ return printAssembly(w, rpt, obj)
+ case List:
+ return printSource(w, rpt)
+ case WebList:
+ return printWebSource(w, rpt, obj)
+ case Callgrind:
+ return printCallgrind(w, rpt)
+ }
+ return fmt.Errorf("unexpected output format")
+}
+
+// printAssembly prints an annotated assembly listing.
+func printAssembly(w io.Writer, rpt *Report, obj plugin.ObjTool) error {
+ g, err := newGraph(rpt)
+ if err != nil {
+ return err
+ }
+
+ o := rpt.options
+ prof := rpt.prof
+
+ // If the regexp source can be parsed as an address, also match
+ // functions that land on that address.
+ var address *uint64
+ if hex, err := strconv.ParseUint(o.Symbol.String(), 0, 64); err == nil {
+ address = &hex
+ }
+
+ fmt.Fprintln(w, "Total:", rpt.formatValue(rpt.total))
+ symbols := symbolsFromBinaries(prof, g, o.Symbol, address, obj)
+ symNodes := nodesPerSymbol(g.ns, symbols)
+ // Sort function names for printing.
+ var syms objSymbols
+ for s := range symNodes {
+ syms = append(syms, s)
+ }
+ sort.Sort(syms)
+
+ // Correlate the symbols from the binary with the profile samples.
+ for _, s := range syms {
+ sns := symNodes[s]
+
+ // Gather samples for this symbol.
+ flatSum, cumSum := sumNodes(sns)
+
+ // Get the function assembly.
+ insns, err := obj.Disasm(s.sym.File, s.sym.Start, s.sym.End)
+ if err != nil {
+ return err
+ }
+
+ ns := annotateAssembly(insns, sns, s.base)
+
+ fmt.Fprintf(w, "ROUTINE ======================== %s\n", s.sym.Name[0])
+ for _, name := range s.sym.Name[1:] {
+ fmt.Fprintf(w, " AKA ======================== %s\n", name)
+ }
+ fmt.Fprintf(w, "%10s %10s (flat, cum) %s of Total\n",
+ rpt.formatValue(flatSum), rpt.formatValue(cumSum),
+ percentage(cumSum, rpt.total))
+
+ for _, n := range ns {
+ fmt.Fprintf(w, "%10s %10s %10x: %s\n", valueOrDot(n.flat, rpt), valueOrDot(n.cum, rpt), n.info.address, n.info.name)
+ }
+ }
+ return nil
+}
+
+// symbolsFromBinaries examines the binaries listed on the profile
+// that have associated samples, and identifies symbols matching rx.
+func symbolsFromBinaries(prof *profile.Profile, g graph, rx *regexp.Regexp, address *uint64, obj plugin.ObjTool) []*objSymbol {
+ hasSamples := make(map[string]bool)
+ // Only examine mappings that have samples that match the
+ // regexp. This is an optimization to speed up pprof.
+ for _, n := range g.ns {
+ if name := n.info.prettyName(); rx.MatchString(name) && n.info.objfile != "" {
+ hasSamples[n.info.objfile] = true
+ }
+ }
+
+ // Walk all mappings looking for matching functions with samples.
+ var objSyms []*objSymbol
+ for _, m := range prof.Mapping {
+ if !hasSamples[filepath.Base(m.File)] {
+ if address == nil || !(m.Start <= *address && *address <= m.Limit) {
+ continue
+ }
+ }
+
+ f, err := obj.Open(m.File, m.Start)
+ if err != nil {
+ fmt.Printf("%v\n", err)
+ continue
+ }
+
+ // Find symbols in this binary matching the user regexp.
+ var addr uint64
+ if address != nil {
+ addr = *address
+ }
+ msyms, err := f.Symbols(rx, addr)
+ base := f.Base()
+ f.Close()
+ if err != nil {
+ continue
+ }
+ for _, ms := range msyms {
+ objSyms = append(objSyms,
+ &objSymbol{
+ sym: ms,
+ base: base,
+ },
+ )
+ }
+ }
+
+ return objSyms
+}
+
+// objSym represents a symbol identified from a binary. It includes
+// the SymbolInfo from the disasm package and the base that must be
+// added to correspond to sample addresses
+type objSymbol struct {
+ sym *plugin.Sym
+ base uint64
+}
+
+// objSymbols is a wrapper type to enable sorting of []*objSymbol.
+type objSymbols []*objSymbol
+
+func (o objSymbols) Len() int {
+ return len(o)
+}
+
+func (o objSymbols) Less(i, j int) bool {
+ if namei, namej := o[i].sym.Name[0], o[j].sym.Name[0]; namei != namej {
+ return namei < namej
+ }
+ return o[i].sym.Start < o[j].sym.Start
+}
+
+func (o objSymbols) Swap(i, j int) {
+ o[i], o[j] = o[j], o[i]
+}
+
+// nodesPerSymbol classifies nodes into a group of symbols.
+func nodesPerSymbol(ns nodes, symbols []*objSymbol) map[*objSymbol]nodes {
+ symNodes := make(map[*objSymbol]nodes)
+ for _, s := range symbols {
+ // Gather samples for this symbol.
+ for _, n := range ns {
+ address := n.info.address - s.base
+ if address >= s.sym.Start && address < s.sym.End {
+ symNodes[s] = append(symNodes[s], n)
+ }
+ }
+ }
+ return symNodes
+}
+
+// annotateAssembly annotates a set of assembly instructions with a
+// set of samples. It returns a set of nodes to display. base is an
+// offset to adjust the sample addresses.
+func annotateAssembly(insns []plugin.Inst, samples nodes, base uint64) nodes {
+ // Add end marker to simplify printing loop.
+ insns = append(insns, plugin.Inst{^uint64(0), "", "", 0})
+
+ // Ensure samples are sorted by address.
+ samples.sort(addressOrder)
+
+ var s int
+ var asm nodes
+ for ix, in := range insns[:len(insns)-1] {
+ n := node{
+ info: nodeInfo{
+ address: in.Addr,
+ name: in.Text,
+ file: trimPath(in.File),
+ lineno: in.Line,
+ },
+ }
+
+ // Sum all the samples until the next instruction (to account
+ // for samples attributed to the middle of an instruction).
+ for next := insns[ix+1].Addr; s < len(samples) && samples[s].info.address-base < next; s++ {
+ n.flat += samples[s].flat
+ n.cum += samples[s].cum
+ if samples[s].info.file != "" {
+ n.info.file = trimPath(samples[s].info.file)
+ n.info.lineno = samples[s].info.lineno
+ }
+ }
+ asm = append(asm, &n)
+ }
+
+ return asm
+}
+
+// valueOrDot formats a value according to a report, intercepting zero
+// values.
+func valueOrDot(value int64, rpt *Report) string {
+ if value == 0 {
+ return "."
+ }
+ return rpt.formatValue(value)
+}
+
+// canAccessFile determines if the filename can be opened for reading.
+func canAccessFile(path string) bool {
+ if fi, err := os.Stat(path); err == nil {
+ return fi.Mode().Perm()&0400 != 0
+ }
+ return false
+}
+
+// printTags collects all tags referenced in the profile and prints
+// them in a sorted table.
+func printTags(w io.Writer, rpt *Report) error {
+ p := rpt.prof
+
+ // Hashtable to keep accumulate tags as key,value,count.
+ tagMap := make(map[string]map[string]int64)
+ for _, s := range p.Sample {
+ for key, vals := range s.Label {
+ for _, val := range vals {
+ if valueMap, ok := tagMap[key]; ok {
+ valueMap[val] = valueMap[val] + s.Value[0]
+ continue
+ }
+ valueMap := make(map[string]int64)
+ valueMap[val] = s.Value[0]
+ tagMap[key] = valueMap
+ }
+ }
+ for key, vals := range s.NumLabel {
+ for _, nval := range vals {
+ val := scaledValueLabel(nval, key, "auto")
+ if valueMap, ok := tagMap[key]; ok {
+ valueMap[val] = valueMap[val] + s.Value[0]
+ continue
+ }
+ valueMap := make(map[string]int64)
+ valueMap[val] = s.Value[0]
+ tagMap[key] = valueMap
+ }
+ }
+ }
+
+ tagKeys := make(tags, 0, len(tagMap))
+ for key := range tagMap {
+ tagKeys = append(tagKeys, &tag{name: key})
+ }
+ sort.Sort(tagKeys)
+
+ for _, tagKey := range tagKeys {
+ var total int64
+ key := tagKey.name
+ tags := make(tags, 0, len(tagMap[key]))
+ for t, c := range tagMap[key] {
+ total += c
+ tags = append(tags, &tag{name: t, weight: c})
+ }
+
+ sort.Sort(tags)
+ fmt.Fprintf(w, "%s: Total %d\n", key, total)
+ for _, t := range tags {
+ if total > 0 {
+ fmt.Fprintf(w, " %8d (%s): %s\n", t.weight,
+ percentage(t.weight, total), t.name)
+ } else {
+ fmt.Fprintf(w, " %8d: %s\n", t.weight, t.name)
+ }
+ }
+ fmt.Fprintln(w)
+ }
+ return nil
+}
+
+// printText prints a flat text report for a profile.
+func printText(w io.Writer, rpt *Report) error {
+ g, err := newGraph(rpt)
+ if err != nil {
+ return err
+ }
+
+ origCount, droppedNodes, _ := g.preprocess(rpt)
+ fmt.Fprintln(w, strings.Join(legendDetailLabels(rpt, g, origCount, droppedNodes, 0), "\n"))
+
+ fmt.Fprintf(w, "%10s %5s%% %5s%% %10s %5s%%\n",
+ "flat", "flat", "sum", "cum", "cum")
+
+ var flatSum int64
+ for _, n := range g.ns {
+ name, flat, cum := n.info.prettyName(), n.flat, n.cum
+
+ flatSum += flat
+ fmt.Fprintf(w, "%10s %s %s %10s %s %s\n",
+ rpt.formatValue(flat),
+ percentage(flat, rpt.total),
+ percentage(flatSum, rpt.total),
+ rpt.formatValue(cum),
+ percentage(cum, rpt.total),
+ name)
+ }
+ return nil
+}
+
+// printCallgrind prints a graph for a profile on callgrind format.
+func printCallgrind(w io.Writer, rpt *Report) error {
+ g, err := newGraph(rpt)
+ if err != nil {
+ return err
+ }
+
+ o := rpt.options
+ rpt.options.NodeFraction = 0
+ rpt.options.EdgeFraction = 0
+ rpt.options.NodeCount = 0
+
+ g.preprocess(rpt)
+
+ fmt.Fprintln(w, "events:", o.SampleType+"("+o.OutputUnit+")")
+
+ files := make(map[string]int)
+ names := make(map[string]int)
+ for _, n := range g.ns {
+ fmt.Fprintln(w, "fl="+callgrindName(files, n.info.file))
+ fmt.Fprintln(w, "fn="+callgrindName(names, n.info.name))
+ sv, _ := ScaleValue(n.flat, o.SampleUnit, o.OutputUnit)
+ fmt.Fprintf(w, "%d %d\n", n.info.lineno, int(sv))
+
+ // Print outgoing edges.
+ for _, out := range sortedEdges(n.out) {
+ c, _ := ScaleValue(out.weight, o.SampleUnit, o.OutputUnit)
+ count := fmt.Sprintf("%d", int(c))
+ callee := out.dest
+ fmt.Fprintln(w, "cfl="+callgrindName(files, callee.info.file))
+ fmt.Fprintln(w, "cfn="+callgrindName(names, callee.info.name))
+ fmt.Fprintln(w, "calls="+count, callee.info.lineno)
+ fmt.Fprintln(w, n.info.lineno, count)
+ }
+ fmt.Fprintln(w)
+ }
+
+ return nil
+}
+
+// callgrindName implements the callgrind naming compression scheme.
+// For names not previously seen returns "(N) name", where N is a
+// unique index. For names previously seen returns "(N)" where N is
+// the index returned the first time.
+func callgrindName(names map[string]int, name string) string {
+ if name == "" {
+ return ""
+ }
+ if id, ok := names[name]; ok {
+ return fmt.Sprintf("(%d)", id)
+ }
+ id := len(names) + 1
+ names[name] = id
+ return fmt.Sprintf("(%d) %s", id, name)
+}
+
+// printTree prints a tree-based report in text form.
+func printTree(w io.Writer, rpt *Report) error {
+ const separator = "----------------------------------------------------------+-------------"
+ const legend = " flat flat% sum% cum cum% calls calls% + context "
+
+ g, err := newGraph(rpt)
+ if err != nil {
+ return err
+ }
+
+ origCount, droppedNodes, _ := g.preprocess(rpt)
+ fmt.Fprintln(w, strings.Join(legendDetailLabels(rpt, g, origCount, droppedNodes, 0), "\n"))
+
+ fmt.Fprintln(w, separator)
+ fmt.Fprintln(w, legend)
+ var flatSum int64
+
+ rx := rpt.options.Symbol
+ for _, n := range g.ns {
+ name, flat, cum := n.info.prettyName(), n.flat, n.cum
+
+ // Skip any entries that do not match the regexp (for the "peek" command).
+ if rx != nil && !rx.MatchString(name) {
+ continue
+ }
+
+ fmt.Fprintln(w, separator)
+ // Print incoming edges.
+ inEdges := sortedEdges(n.in)
+ inSum := inEdges.sum()
+ for _, in := range inEdges {
+ fmt.Fprintf(w, "%50s %s | %s\n", rpt.formatValue(in.weight),
+ percentage(in.weight, inSum), in.src.info.prettyName())
+ }
+
+ // Print current node.
+ flatSum += flat
+ fmt.Fprintf(w, "%10s %s %s %10s %s | %s\n",
+ rpt.formatValue(flat),
+ percentage(flat, rpt.total),
+ percentage(flatSum, rpt.total),
+ rpt.formatValue(cum),
+ percentage(cum, rpt.total),
+ name)
+
+ // Print outgoing edges.
+ outEdges := sortedEdges(n.out)
+ outSum := outEdges.sum()
+ for _, out := range outEdges {
+ fmt.Fprintf(w, "%50s %s | %s\n", rpt.formatValue(out.weight),
+ percentage(out.weight, outSum), out.dest.info.prettyName())
+ }
+ }
+ if len(g.ns) > 0 {
+ fmt.Fprintln(w, separator)
+ }
+ return nil
+}
+
+// printDOT prints an annotated callgraph in DOT format.
+func printDOT(w io.Writer, rpt *Report) error {
+ g, err := newGraph(rpt)
+ if err != nil {
+ return err
+ }
+
+ origCount, droppedNodes, droppedEdges := g.preprocess(rpt)
+
+ prof := rpt.prof
+ graphname := "unnamed"
+ if len(prof.Mapping) > 0 {
+ graphname = filepath.Base(prof.Mapping[0].File)
+ }
+ fmt.Fprintln(w, `digraph "`+graphname+`" {`)
+ fmt.Fprintln(w, `node [style=filled fillcolor="#f8f8f8"]`)
+ fmt.Fprintln(w, dotLegend(rpt, g, origCount, droppedNodes, droppedEdges))
+
+ if len(g.ns) == 0 {
+ fmt.Fprintln(w, "}")
+ return nil
+ }
+
+ // Make sure nodes have a unique consistent id.
+ nodeIndex := make(map[*node]int)
+ maxFlat := float64(g.ns[0].flat)
+ for i, n := range g.ns {
+ nodeIndex[n] = i + 1
+ if float64(n.flat) > maxFlat {
+ maxFlat = float64(n.flat)
+ }
+ }
+ var edges edgeList
+ for _, n := range g.ns {
+ node := dotNode(rpt, maxFlat, nodeIndex[n], n)
+ fmt.Fprintln(w, node)
+ if nodelets := dotNodelets(rpt, nodeIndex[n], n); nodelets != "" {
+ fmt.Fprint(w, nodelets)
+ }
+
+ // Collect outgoing edges.
+ for _, e := range n.out {
+ edges = append(edges, e)
+ }
+ }
+ // Sort edges by frequency as a hint to the graph layout engine.
+ sort.Sort(edges)
+ for _, e := range edges {
+ fmt.Fprintln(w, dotEdge(rpt, nodeIndex[e.src], nodeIndex[e.dest], e))
+ }
+ fmt.Fprintln(w, "}")
+ return nil
+}
+
+// percentage computes the percentage of total of a value, and encodes
+// it as a string. At least two digits of precision are printed.
+func percentage(value, total int64) string {
+ var ratio float64
+ if total != 0 {
+ ratio = float64(value) / float64(total) * 100
+ }
+ switch {
+ case ratio >= 99.95:
+ return " 100%"
+ case ratio >= 1.0:
+ return fmt.Sprintf("%5.2f%%", ratio)
+ default:
+ return fmt.Sprintf("%5.2g%%", ratio)
+ }
+}
+
+// dotLegend generates the overall graph label for a report in DOT format.
+func dotLegend(rpt *Report, g graph, origCount, droppedNodes, droppedEdges int) string {
+ label := legendLabels(rpt)
+ label = append(label, legendDetailLabels(rpt, g, origCount, droppedNodes, droppedEdges)...)
+ return fmt.Sprintf(`subgraph cluster_L { L [shape=box fontsize=32 label="%s\l"] }`, strings.Join(label, `\l`))
+}
+
+// legendLabels generates labels exclusive to graph visualization.
+func legendLabels(rpt *Report) []string {
+ prof := rpt.prof
+ o := rpt.options
+ var label []string
+ if len(prof.Mapping) > 0 {
+ if prof.Mapping[0].File != "" {
+ label = append(label, "File: "+filepath.Base(prof.Mapping[0].File))
+ }
+ if prof.Mapping[0].BuildID != "" {
+ label = append(label, "Build ID: "+prof.Mapping[0].BuildID)
+ }
+ }
+ if o.SampleType != "" {
+ label = append(label, "Type: "+o.SampleType)
+ }
+ if prof.TimeNanos != 0 {
+ const layout = "Jan 2, 2006 at 3:04pm (MST)"
+ label = append(label, "Time: "+time.Unix(0, prof.TimeNanos).Format(layout))
+ }
+ if prof.DurationNanos != 0 {
+ label = append(label, fmt.Sprintf("Duration: %v", time.Duration(prof.DurationNanos)))
+ }
+ return label
+}
+
+// legendDetailLabels generates labels common to graph and text visualization.
+func legendDetailLabels(rpt *Report, g graph, origCount, droppedNodes, droppedEdges int) []string {
+ nodeFraction := rpt.options.NodeFraction
+ edgeFraction := rpt.options.EdgeFraction
+ nodeCount := rpt.options.NodeCount
+
+ label := []string{}
+
+ var flatSum int64
+ for _, n := range g.ns {
+ flatSum = flatSum + n.flat
+ }
+
+ label = append(label, fmt.Sprintf("%s of %s total (%s)", rpt.formatValue(flatSum), rpt.formatValue(rpt.total), percentage(flatSum, rpt.total)))
+
+ if rpt.total > 0 {
+ if droppedNodes > 0 {
+ label = append(label, genLabel(droppedNodes, "node", "cum",
+ rpt.formatValue(int64(float64(rpt.total)*nodeFraction))))
+ }
+ if droppedEdges > 0 {
+ label = append(label, genLabel(droppedEdges, "edge", "freq",
+ rpt.formatValue(int64(float64(rpt.total)*edgeFraction))))
+ }
+ if nodeCount > 0 && nodeCount < origCount {
+ label = append(label, fmt.Sprintf("Showing top %d nodes out of %d (cum >= %s)",
+ nodeCount, origCount,
+ rpt.formatValue(g.ns[len(g.ns)-1].cum)))
+ }
+ }
+ return label
+}
+
+func genLabel(d int, n, l, f string) string {
+ if d > 1 {
+ n = n + "s"
+ }
+ return fmt.Sprintf("Dropped %d %s (%s <= %s)", d, n, l, f)
+}
+
+// dotNode generates a graph node in DOT format.
+func dotNode(rpt *Report, maxFlat float64, rIndex int, n *node) string {
+ flat, cum := n.flat, n.cum
+
+ labels := strings.Split(n.info.prettyName(), "::")
+ label := strings.Join(labels, `\n`) + `\n`
+
+ flatValue := rpt.formatValue(flat)
+ if flat > 0 {
+ label = label + fmt.Sprintf(`%s(%s)`,
+ flatValue,
+ strings.TrimSpace(percentage(flat, rpt.total)))
+ } else {
+ label = label + "0"
+ }
+ cumValue := flatValue
+ if cum != flat {
+ if flat > 0 {
+ label = label + `\n`
+ } else {
+ label = label + " "
+ }
+ cumValue = rpt.formatValue(cum)
+ label = label + fmt.Sprintf(`of %s(%s)`,
+ cumValue,
+ strings.TrimSpace(percentage(cum, rpt.total)))
+ }
+
+ // Scale font sizes from 8 to 24 based on percentage of flat frequency.
+ // Use non linear growth to emphasize the size difference.
+ baseFontSize, maxFontGrowth := 8, 16.0
+ fontSize := baseFontSize
+ if maxFlat > 0 && flat > 0 && float64(flat) <= maxFlat {
+ fontSize += int(math.Ceil(maxFontGrowth * math.Sqrt(float64(flat)/maxFlat)))
+ }
+ return fmt.Sprintf(`N%d [label="%s" fontsize=%d shape=box tooltip="%s (%s)"]`,
+ rIndex,
+ label,
+ fontSize, n.info.prettyName(), cumValue)
+}
+
+// dotEdge generates a graph edge in DOT format.
+func dotEdge(rpt *Report, from, to int, e *edgeInfo) string {
+ w := rpt.formatValue(e.weight)
+ attr := fmt.Sprintf(`label=" %s"`, w)
+ if rpt.total > 0 {
+ if weight := 1 + int(e.weight*100/rpt.total); weight > 1 {
+ attr = fmt.Sprintf(`%s weight=%d`, attr, weight)
+ }
+ if width := 1 + int(e.weight*5/rpt.total); width > 1 {
+ attr = fmt.Sprintf(`%s penwidth=%d`, attr, width)
+ }
+ }
+ arrow := "->"
+ if e.residual {
+ arrow = "..."
+ }
+ tooltip := fmt.Sprintf(`"%s %s %s (%s)"`,
+ e.src.info.prettyName(), arrow, e.dest.info.prettyName(), w)
+ attr = fmt.Sprintf(`%s tooltip=%s labeltooltip=%s`,
+ attr, tooltip, tooltip)
+
+ if e.residual {
+ attr = attr + ` style="dotted"`
+ }
+
+ if len(e.src.tags) > 0 {
+ // Separate children further if source has tags.
+ attr = attr + " minlen=2"
+ }
+ return fmt.Sprintf("N%d -> N%d [%s]", from, to, attr)
+}
+
+// dotNodelets generates the DOT boxes for the node tags.
+func dotNodelets(rpt *Report, rIndex int, n *node) (dot string) {
+ const maxNodelets = 4 // Number of nodelets for alphanumeric labels
+ const maxNumNodelets = 4 // Number of nodelets for numeric labels
+
+ var ts, nts tags
+ for _, t := range n.tags {
+ if t.unit == "" {
+ ts = append(ts, t)
+ } else {
+ nts = append(nts, t)
+ }
+ }
+
+ // Select the top maxNodelets alphanumeric labels by weight
+ sort.Sort(ts)
+ if len(ts) > maxNodelets {
+ ts = ts[:maxNodelets]
+ }
+ for i, t := range ts {
+ weight := rpt.formatValue(t.weight)
+ dot += fmt.Sprintf(`N%d_%d [label = "%s" fontsize=8 shape=box3d tooltip="%s"]`+"\n", rIndex, i, t.name, weight)
+ dot += fmt.Sprintf(`N%d -> N%d_%d [label=" %s" weight=100 tooltip="\L" labeltooltip="\L"]`+"\n", rIndex, rIndex, i, weight)
+ }
+
+ // Collapse numeric labels into maxNumNodelets buckets, of the form:
+ // 1MB..2MB, 3MB..5MB, ...
+ nts = collapseTags(nts, maxNumNodelets)
+ sort.Sort(nts)
+ for i, t := range nts {
+ weight := rpt.formatValue(t.weight)
+ dot += fmt.Sprintf(`NN%d_%d [label = "%s" fontsize=8 shape=box3d tooltip="%s"]`+"\n", rIndex, i, t.name, weight)
+ dot += fmt.Sprintf(`N%d -> NN%d_%d [label=" %s" weight=100 tooltip="\L" labeltooltip="\L"]`+"\n", rIndex, rIndex, i, weight)
+ }
+
+ return dot
+}
+
+// graph summarizes a performance profile into a format that is
+// suitable for visualization.
+type graph struct {
+ ns nodes
+}
+
+// nodes is an ordered collection of graph nodes.
+type nodes []*node
+
+// tags represent sample annotations
+type tags []*tag
+type tagMap map[string]*tag
+
+type tag struct {
+ name string
+ unit string // Describe the value, "" for non-numeric tags
+ value int64
+ weight int64
+}
+
+func (t tags) Len() int { return len(t) }
+func (t tags) Swap(i, j int) { t[i], t[j] = t[j], t[i] }
+func (t tags) Less(i, j int) bool {
+ if t[i].weight == t[j].weight {
+ return t[i].name < t[j].name
+ }
+ return t[i].weight > t[j].weight
+}
+
+// node is an entry on a profiling report. It represents a unique
+// program location. It can include multiple names to represent
+// inlined functions.
+type node struct {
+ info nodeInfo // Information associated to this entry.
+
+ // values associated to this node.
+ // flat is exclusive to this node, cum includes all descendents.
+ flat, cum int64
+
+ // in and out contains the nodes immediately reaching or reached by this nodes.
+ in, out edgeMap
+
+ // tags provide additional information about subsets of a sample.
+ tags tagMap
+}
+
+func (ts tags) string() string {
+ var ret string
+ for _, s := range ts {
+ ret = ret + fmt.Sprintf("%s %s %d %d\n", s.name, s.unit, s.value, s.weight)
+ }
+ return ret
+}
+
+type nodeInfo struct {
+ name string
+ origName string
+ address uint64
+ file string
+ startLine, lineno int
+ inline bool
+ lowPriority bool
+ objfile string
+ parent *node // Used only if creating a calltree
+}
+
+func (n *node) addTags(s *profile.Sample, weight int64) {
+ // Add a tag with all string labels
+ var labels []string
+ for key, vals := range s.Label {
+ for _, v := range vals {
+ labels = append(labels, key+":"+v)
+ }
+ }
+ if len(labels) > 0 {
+ sort.Strings(labels)
+ l := n.tags.findOrAddTag(strings.Join(labels, `\n`), "", 0)
+ l.weight += weight
+ }
+
+ for key, nvals := range s.NumLabel {
+ for _, v := range nvals {
+ label := scaledValueLabel(v, key, "auto")
+ l := n.tags.findOrAddTag(label, key, v)
+ l.weight += weight
+ }
+ }
+}
+
+func (m tagMap) findOrAddTag(label, unit string, value int64) *tag {
+ if l := m[label]; l != nil {
+ return l
+ }
+ l := &tag{
+ name: label,
+ unit: unit,
+ value: value,
+ }
+ m[label] = l
+ return l
+}
+
+// collapseTags reduces the number of entries in a tagMap by merging
+// adjacent nodes into ranges. It uses a greedy approach to merge
+// starting with the entries with the lowest weight.
+func collapseTags(ts tags, count int) tags {
+ if len(ts) <= count {
+ return ts
+ }
+
+ sort.Sort(ts)
+ tagGroups := make([]tags, count)
+ for i, t := range ts[:count] {
+ tagGroups[i] = tags{t}
+ }
+ for _, t := range ts[count:] {
+ g, d := 0, tagDistance(t, tagGroups[0][0])
+ for i := 1; i < count; i++ {
+ if nd := tagDistance(t, tagGroups[i][0]); nd < d {
+ g, d = i, nd
+ }
+ }
+ tagGroups[g] = append(tagGroups[g], t)
+ }
+
+ var nts tags
+ for _, g := range tagGroups {
+ l, w := tagGroupLabel(g)
+ nts = append(nts, &tag{
+ name: l,
+ weight: w,
+ })
+ }
+ return nts
+}
+
+func tagDistance(t, u *tag) float64 {
+ v, _ := ScaleValue(u.value, u.unit, t.unit)
+ if v < float64(t.value) {
+ return float64(t.value) - v
+ }
+ return v - float64(t.value)
+}
+
+func tagGroupLabel(g tags) (string, int64) {
+ if len(g) == 1 {
+ t := g[0]
+ return scaledValueLabel(t.value, t.unit, "auto"), t.weight
+ }
+ min := g[0]
+ max := g[0]
+ w := min.weight
+ for _, t := range g[1:] {
+ if v, _ := ScaleValue(t.value, t.unit, min.unit); int64(v) < min.value {
+ min = t
+ }
+ if v, _ := ScaleValue(t.value, t.unit, max.unit); int64(v) > max.value {
+ max = t
+ }
+ w += t.weight
+ }
+ return scaledValueLabel(min.value, min.unit, "auto") + ".." +
+ scaledValueLabel(max.value, max.unit, "auto"), w
+}
+
+// sumNodes adds the flat and sum values on a report.
+func sumNodes(ns nodes) (flat int64, cum int64) {
+ for _, n := range ns {
+ flat += n.flat
+ cum += n.cum
+ }
+ return
+}
+
+type edgeMap map[*node]*edgeInfo
+
+// edgeInfo contains any attributes to be represented about edges in a graph/
+type edgeInfo struct {
+ src, dest *node
+ // The summary weight of the edge
+ weight int64
+ // residual edges connect nodes that were connected through a
+ // separate node, which has been removed from the report.
+ residual bool
+}
+
+// bumpWeight increases the weight of an edge. If there isn't such an
+// edge in the map one is created.
+func bumpWeight(from, to *node, w int64, residual bool) {
+ if from.out[to] != to.in[from] {
+ panic(fmt.Errorf("asymmetric edges %v %v", *from, *to))
+ }
+
+ if n := from.out[to]; n != nil {
+ n.weight += w
+ if n.residual && !residual {
+ n.residual = false
+ }
+ return
+ }
+
+ info := &edgeInfo{src: from, dest: to, weight: w, residual: residual}
+ from.out[to] = info
+ to.in[from] = info
+}
+
+// Output formats.
+const (
+ Proto = iota
+ Dot
+ Tags
+ Tree
+ Text
+ Raw
+ Dis
+ List
+ WebList
+ Callgrind
+)
+
+// Options are the formatting and filtering options used to generate a
+// profile.
+type Options struct {
+ OutputFormat int
+
+ CumSort bool
+ CallTree bool
+ PrintAddresses bool
+ DropNegative bool
+ Ratio float64
+
+ NodeCount int
+ NodeFraction float64
+ EdgeFraction float64
+
+ SampleType string
+ SampleUnit string // Unit for the sample data from the profile.
+ OutputUnit string // Units for data formatting in report.
+
+ Symbol *regexp.Regexp // Symbols to include on disassembly report.
+}
+
+// newGraph summarizes performance data from a profile into a graph.
+func newGraph(rpt *Report) (g graph, err error) {
+ prof := rpt.prof
+ o := rpt.options
+
+ // Generate a tree for graphical output if requested.
+ buildTree := o.CallTree && o.OutputFormat == Dot
+
+ locations := make(map[uint64][]nodeInfo)
+ for _, l := range prof.Location {
+ locations[l.ID] = newLocInfo(l)
+ }
+
+ nm := make(nodeMap)
+ for _, sample := range prof.Sample {
+ if sample.Location == nil {
+ continue
+ }
+
+ // Construct list of node names for sample.
+ var stack []nodeInfo
+ for _, loc := range sample.Location {
+ id := loc.ID
+ stack = append(stack, locations[id]...)
+ }
+
+ // Upfront pass to update the parent chains, to prevent the
+ // merging of nodes with different parents.
+ if buildTree {
+ var nn *node
+ for i := len(stack); i > 0; i-- {
+ n := &stack[i-1]
+ n.parent = nn
+ nn = nm.findOrInsertNode(*n)
+ }
+ }
+
+ leaf := nm.findOrInsertNode(stack[0])
+ weight := rpt.sampleValue(sample)
+ leaf.addTags(sample, weight)
+
+ // Aggregate counter data.
+ leaf.flat += weight
+ seen := make(map[*node]bool)
+ var nn *node
+ for _, s := range stack {
+ n := nm.findOrInsertNode(s)
+ if !seen[n] {
+ seen[n] = true
+ n.cum += weight
+
+ if nn != nil {
+ bumpWeight(n, nn, weight, false)
+ }
+ }
+ nn = n
+ }
+ }
+
+ // Collect new nodes into a report.
+ ns := make(nodes, 0, len(nm))
+ for _, n := range nm {
+ if rpt.options.DropNegative && n.flat < 0 {
+ continue
+ }
+ ns = append(ns, n)
+ }
+
+ return graph{ns}, nil
+}
+
+// Create a slice of formatted names for a location.
+func newLocInfo(l *profile.Location) []nodeInfo {
+ var objfile string
+
+ if m := l.Mapping; m != nil {
+ objfile = filepath.Base(m.File)
+ }
+
+ if len(l.Line) == 0 {
+ return []nodeInfo{
+ {
+ address: l.Address,
+ objfile: objfile,
+ },
+ }
+ }
+ var info []nodeInfo
+ numInlineFrames := len(l.Line) - 1
+ for li, line := range l.Line {
+ ni := nodeInfo{
+ address: l.Address,
+ lineno: int(line.Line),
+ inline: li < numInlineFrames,
+ objfile: objfile,
+ }
+
+ if line.Function != nil {
+ ni.name = line.Function.Name
+ ni.origName = line.Function.SystemName
+ ni.file = line.Function.Filename
+ ni.startLine = int(line.Function.StartLine)
+ }
+
+ info = append(info, ni)
+ }
+ return info
+}
+
+// nodeMap maps from a node info struct to a node. It is used to merge
+// report entries with the same info.
+type nodeMap map[nodeInfo]*node
+
+func (m nodeMap) findOrInsertNode(info nodeInfo) *node {
+ rr := m[info]
+ if rr == nil {
+ rr = &node{
+ info: info,
+ in: make(edgeMap),
+ out: make(edgeMap),
+ tags: make(map[string]*tag),
+ }
+ m[info] = rr
+ }
+ return rr
+}
+
+// preprocess does any required filtering/sorting according to the
+// report options. Returns the mapping from each node to any nodes
+// removed by path compression and statistics on the nodes/edges removed.
+func (g *graph) preprocess(rpt *Report) (origCount, droppedNodes, droppedEdges int) {
+ o := rpt.options
+
+ // Compute total weight of current set of nodes.
+ // This is <= rpt.total because of node filtering.
+ var totalValue int64
+ for _, n := range g.ns {
+ totalValue += n.flat
+ }
+
+ // Remove nodes with value <= total*nodeFraction
+ if nodeFraction := o.NodeFraction; nodeFraction > 0 {
+ var removed nodes
+ minValue := int64(float64(totalValue) * nodeFraction)
+ kept := make(nodes, 0, len(g.ns))
+ for _, n := range g.ns {
+ if n.cum < minValue {
+ removed = append(removed, n)
+ } else {
+ kept = append(kept, n)
+ tagsKept := make(map[string]*tag)
+ for s, t := range n.tags {
+ if t.weight >= minValue {
+ tagsKept[s] = t
+ }
+ }
+ n.tags = tagsKept
+ }
+ }
+ droppedNodes = len(removed)
+ removeNodes(removed, false, false)
+ g.ns = kept
+ }
+
+ // Remove edges below minimum frequency.
+ if edgeFraction := o.EdgeFraction; edgeFraction > 0 {
+ minEdge := int64(float64(totalValue) * edgeFraction)
+ for _, n := range g.ns {
+ for src, e := range n.in {
+ if e.weight < minEdge {
+ delete(n.in, src)
+ delete(src.out, n)
+ droppedEdges++
+ }
+ }
+ }
+ }
+
+ sortOrder := flatName
+ if o.CumSort {
+ // Force cum sorting for graph output, to preserve connectivity.
+ sortOrder = cumName
+ }
+
+ // Nodes that have flat==0 and a single in/out do not provide much
+ // information. Give them first chance to be removed. Do not consider edges
+ // from/to nodes that are expected to be removed.
+ maxNodes := o.NodeCount
+ if o.OutputFormat == Dot {
+ if maxNodes > 0 && maxNodes < len(g.ns) {
+ sortOrder = cumName
+ g.ns.sort(cumName)
+ cumCutoff := g.ns[maxNodes].cum
+ for _, n := range g.ns {
+ if n.flat == 0 {
+ if count := countEdges(n.out, cumCutoff); count > 1 {
+ continue
+ }
+ if count := countEdges(n.in, cumCutoff); count != 1 {
+ continue
+ }
+ n.info.lowPriority = true
+ }
+ }
+ }
+ }
+
+ g.ns.sort(sortOrder)
+ if maxNodes > 0 {
+ origCount = len(g.ns)
+ for index, nodes := 0, 0; index < len(g.ns); index++ {
+ nodes++
+ // For DOT output, count the tags as nodes since we will draw
+ // boxes for them.
+ if o.OutputFormat == Dot {
+ nodes += len(g.ns[index].tags)
+ }
+ if nodes > maxNodes {
+ // Trim to the top n nodes. Create dotted edges to bridge any
+ // broken connections.
+ removeNodes(g.ns[index:], true, true)
+ g.ns = g.ns[:index]
+ break
+ }
+ }
+ }
+ removeRedundantEdges(g.ns)
+
+ // Select best unit for profile output.
+ // Find the appropriate units for the smallest non-zero sample
+ if o.OutputUnit == "minimum" && len(g.ns) > 0 {
+ var maxValue, minValue int64
+
+ for _, n := range g.ns {
+ if n.flat > 0 && (minValue == 0 || n.flat < minValue) {
+ minValue = n.flat
+ }
+ if n.cum > maxValue {
+ maxValue = n.cum
+ }
+ }
+ if r := o.Ratio; r > 0 && r != 1 {
+ minValue = int64(float64(minValue) * r)
+ maxValue = int64(float64(maxValue) * r)
+ }
+
+ _, minUnit := ScaleValue(minValue, o.SampleUnit, "minimum")
+ _, maxUnit := ScaleValue(maxValue, o.SampleUnit, "minimum")
+
+ unit := minUnit
+ if minUnit != maxUnit && minValue*100 < maxValue && o.OutputFormat != Callgrind {
+ // Minimum and maximum values have different units. Scale
+ // minimum by 100 to use larger units, allowing minimum value to
+ // be scaled down to 0.01, except for callgrind reports since
+ // they can only represent integer values.
+ _, unit = ScaleValue(100*minValue, o.SampleUnit, "minimum")
+ }
+
+ if unit != "" {
+ o.OutputUnit = unit
+ } else {
+ o.OutputUnit = o.SampleUnit
+ }
+ }
+ return
+}
+
+// countEdges counts the number of edges below the specified cutoff.
+func countEdges(el edgeMap, cutoff int64) int {
+ count := 0
+ for _, e := range el {
+ if e.weight > cutoff {
+ count++
+ }
+ }
+ return count
+}
+
+// removeNodes removes nodes from a report, optionally bridging
+// connections between in/out edges and spreading out their weights
+// proportionally. residual marks new bridge edges as residual
+// (dotted).
+func removeNodes(toRemove nodes, bridge, residual bool) {
+ for _, n := range toRemove {
+ for ei := range n.in {
+ delete(ei.out, n)
+ }
+ if bridge {
+ for ei, wi := range n.in {
+ for eo, wo := range n.out {
+ var weight int64
+ if n.cum != 0 {
+ weight = int64(float64(wo.weight) * (float64(wi.weight) / float64(n.cum)))
+ }
+ bumpWeight(ei, eo, weight, residual)
+ }
+ }
+ }
+ for eo := range n.out {
+ delete(eo.in, n)
+ }
+ }
+}
+
+// removeRedundantEdges removes residual edges if the destination can
+// be reached through another path. This is done to simplify the graph
+// while preserving connectivity.
+func removeRedundantEdges(ns nodes) {
+ // Walk the nodes and outgoing edges in reverse order to prefer
+ // removing edges with the lowest weight.
+ for i := len(ns); i > 0; i-- {
+ n := ns[i-1]
+ in := sortedEdges(n.in)
+ for j := len(in); j > 0; j-- {
+ if e := in[j-1]; e.residual && isRedundant(e) {
+ delete(e.src.out, e.dest)
+ delete(e.dest.in, e.src)
+ }
+ }
+ }
+}
+
+// isRedundant determines if an edge can be removed without impacting
+// connectivity of the whole graph. This is implemented by checking if the
+// nodes have a common ancestor after removing the edge.
+func isRedundant(e *edgeInfo) bool {
+ destPred := predecessors(e, e.dest)
+ if len(destPred) == 1 {
+ return false
+ }
+ srcPred := predecessors(e, e.src)
+
+ for n := range srcPred {
+ if destPred[n] && n != e.dest {
+ return true
+ }
+ }
+ return false
+}
+
+// predecessors collects all the predecessors to node n, excluding edge e.
+func predecessors(e *edgeInfo, n *node) map[*node]bool {
+ seen := map[*node]bool{n: true}
+ queue := []*node{n}
+ for len(queue) > 0 {
+ n := queue[0]
+ queue = queue[1:]
+ for _, ie := range n.in {
+ if e == ie || seen[ie.src] {
+ continue
+ }
+ seen[ie.src] = true
+ queue = append(queue, ie.src)
+ }
+ }
+ return seen
+}
+
+// nodeSorter is a mechanism used to allow a report to be sorted
+// in different ways.
+type nodeSorter struct {
+ rs nodes
+ less func(i, j int) bool
+}
+
+func (s nodeSorter) Len() int { return len(s.rs) }
+func (s nodeSorter) Swap(i, j int) { s.rs[i], s.rs[j] = s.rs[j], s.rs[i] }
+func (s nodeSorter) Less(i, j int) bool { return s.less(i, j) }
+
+type nodeOrder int
+
+const (
+ flatName nodeOrder = iota
+ flatCumName
+ cumName
+ nameOrder
+ fileOrder
+ addressOrder
+)
+
+// sort reoders the entries in a report based on the specified
+// ordering criteria. The result is sorted in decreasing order for
+// numeric quantities, alphabetically for text, and increasing for
+// addresses.
+func (ns nodes) sort(o nodeOrder) error {
+ var s nodeSorter
+
+ switch o {
+ case flatName:
+ s = nodeSorter{ns,
+ func(i, j int) bool {
+ if iv, jv := ns[i].flat, ns[j].flat; iv != jv {
+ return iv > jv
+ }
+ if ns[i].info.prettyName() != ns[j].info.prettyName() {
+ return ns[i].info.prettyName() < ns[j].info.prettyName()
+ }
+ iv, jv := ns[i].cum, ns[j].cum
+ return iv > jv
+ },
+ }
+ case flatCumName:
+ s = nodeSorter{ns,
+ func(i, j int) bool {
+ if iv, jv := ns[i].flat, ns[j].flat; iv != jv {
+ return iv > jv
+ }
+ if iv, jv := ns[i].cum, ns[j].cum; iv != jv {
+ return iv > jv
+ }
+ return ns[i].info.prettyName() < ns[j].info.prettyName()
+ },
+ }
+ case cumName:
+ s = nodeSorter{ns,
+ func(i, j int) bool {
+ if ns[i].info.lowPriority != ns[j].info.lowPriority {
+ return ns[j].info.lowPriority
+ }
+ if iv, jv := ns[i].cum, ns[j].cum; iv != jv {
+ return iv > jv
+ }
+ if ns[i].info.prettyName() != ns[j].info.prettyName() {
+ return ns[i].info.prettyName() < ns[j].info.prettyName()
+ }
+ iv, jv := ns[i].flat, ns[j].flat
+ return iv > jv
+ },
+ }
+ case nameOrder:
+ s = nodeSorter{ns,
+ func(i, j int) bool {
+ return ns[i].info.name < ns[j].info.name
+ },
+ }
+ case fileOrder:
+ s = nodeSorter{ns,
+ func(i, j int) bool {
+ return ns[i].info.file < ns[j].info.file
+ },
+ }
+ case addressOrder:
+ s = nodeSorter{ns,
+ func(i, j int) bool {
+ return ns[i].info.address < ns[j].info.address
+ },
+ }
+ default:
+ return fmt.Errorf("report: unrecognized sort ordering: %d", o)
+ }
+ sort.Sort(s)
+ return nil
+}
+
+type edgeList []*edgeInfo
+
+// sortedEdges return a slice of the edges in the map, sorted for
+// visualization. The sort order is first based on the edge weight
+// (higher-to-lower) and then by the node names to avoid flakiness.
+func sortedEdges(edges map[*node]*edgeInfo) edgeList {
+ el := make(edgeList, 0, len(edges))
+ for _, w := range edges {
+ el = append(el, w)
+ }
+
+ sort.Sort(el)
+ return el
+}
+
+func (el edgeList) Len() int {
+ return len(el)
+}
+
+func (el edgeList) Less(i, j int) bool {
+ if el[i].weight != el[j].weight {
+ return el[i].weight > el[j].weight
+ }
+
+ from1 := el[i].src.info.prettyName()
+ from2 := el[j].src.info.prettyName()
+ if from1 != from2 {
+ return from1 < from2
+ }
+
+ to1 := el[i].dest.info.prettyName()
+ to2 := el[j].dest.info.prettyName()
+
+ return to1 < to2
+}
+
+func (el edgeList) Swap(i, j int) {
+ el[i], el[j] = el[j], el[i]
+}
+
+func (el edgeList) sum() int64 {
+ var ret int64
+ for _, e := range el {
+ ret += e.weight
+ }
+ return ret
+}
+
+// ScaleValue reformats a value from a unit to a different unit.
+func ScaleValue(value int64, fromUnit, toUnit string) (sv float64, su string) {
+ // Avoid infinite recursion on overflow.
+ if value < 0 && -value > 0 {
+ v, u := ScaleValue(-value, fromUnit, toUnit)
+ return -v, u
+ }
+ if m, u, ok := memoryLabel(value, fromUnit, toUnit); ok {
+ return m, u
+ }
+ if t, u, ok := timeLabel(value, fromUnit, toUnit); ok {
+ return t, u
+ }
+ // Skip non-interesting units.
+ switch toUnit {
+ case "count", "sample", "unit", "minimum":
+ return float64(value), ""
+ default:
+ return float64(value), toUnit
+ }
+}
+
+func scaledValueLabel(value int64, fromUnit, toUnit string) string {
+ v, u := ScaleValue(value, fromUnit, toUnit)
+
+ sv := strings.TrimSuffix(fmt.Sprintf("%.2f", v), ".00")
+ if sv == "0" || sv == "-0" {
+ return "0"
+ }
+ return sv + u
+}
+
+func memoryLabel(value int64, fromUnit, toUnit string) (v float64, u string, ok bool) {
+ fromUnit = strings.TrimSuffix(strings.ToLower(fromUnit), "s")
+ toUnit = strings.TrimSuffix(strings.ToLower(toUnit), "s")
+
+ switch fromUnit {
+ case "byte", "b":
+ case "kilobyte", "kb":
+ value *= 1024
+ case "megabyte", "mb":
+ value *= 1024 * 1024
+ case "gigabyte", "gb":
+ value *= 1024 * 1024
+ default:
+ return 0, "", false
+ }
+
+ if toUnit == "minimum" || toUnit == "auto" {
+ switch {
+ case value < 1024:
+ toUnit = "b"
+ case value < 1024*1024:
+ toUnit = "kb"
+ case value < 1024*1024*1024:
+ toUnit = "mb"
+ default:
+ toUnit = "gb"
+ }
+ }
+
+ var output float64
+ switch toUnit {
+ default:
+ output, toUnit = float64(value), "B"
+ case "kb", "kbyte", "kilobyte":
+ output, toUnit = float64(value)/1024, "kB"
+ case "mb", "mbyte", "megabyte":
+ output, toUnit = float64(value)/(1024*1024), "MB"
+ case "gb", "gbyte", "giggabyte":
+ output, toUnit = float64(value)/(1024*1024*1024), "GB"
+ }
+ return output, toUnit, true
+}
+
+func timeLabel(value int64, fromUnit, toUnit string) (v float64, u string, ok bool) {
+ fromUnit = strings.ToLower(fromUnit)
+ if len(fromUnit) > 2 {
+ fromUnit = strings.TrimSuffix(fromUnit, "s")
+ }
+
+ toUnit = strings.ToLower(toUnit)
+ if len(toUnit) > 2 {
+ toUnit = strings.TrimSuffix(toUnit, "s")
+ }
+
+ var d time.Duration
+ switch fromUnit {
+ case "nanosecond", "ns":
+ d = time.Duration(value) * time.Nanosecond
+ case "microsecond":
+ d = time.Duration(value) * time.Microsecond
+ case "millisecond", "ms":
+ d = time.Duration(value) * time.Millisecond
+ case "second", "sec":
+ d = time.Duration(value) * time.Second
+ case "cycle":
+ return float64(value), "", true
+ default:
+ return 0, "", false
+ }
+
+ if toUnit == "minimum" || toUnit == "auto" {
+ switch {
+ case d < 1*time.Microsecond:
+ toUnit = "ns"
+ case d < 1*time.Millisecond:
+ toUnit = "us"
+ case d < 1*time.Second:
+ toUnit = "ms"
+ case d < 1*time.Minute:
+ toUnit = "sec"
+ case d < 1*time.Hour:
+ toUnit = "min"
+ case d < 24*time.Hour:
+ toUnit = "hour"
+ case d < 15*24*time.Hour:
+ toUnit = "day"
+ case d < 120*24*time.Hour:
+ toUnit = "week"
+ default:
+ toUnit = "year"
+ }
+ }
+
+ var output float64
+ dd := float64(d)
+ switch toUnit {
+ case "ns", "nanosecond":
+ output, toUnit = dd/float64(time.Nanosecond), "ns"
+ case "us", "microsecond":
+ output, toUnit = dd/float64(time.Microsecond), "us"
+ case "ms", "millisecond":
+ output, toUnit = dd/float64(time.Millisecond), "ms"
+ case "min", "minute":
+ output, toUnit = dd/float64(time.Minute), "mins"
+ case "hour", "hr":
+ output, toUnit = dd/float64(time.Hour), "hrs"
+ case "day":
+ output, toUnit = dd/float64(24*time.Hour), "days"
+ case "week", "wk":
+ output, toUnit = dd/float64(7*24*time.Hour), "wks"
+ case "year", "yr":
+ output, toUnit = dd/float64(365*7*24*time.Hour), "yrs"
+ default:
+ fallthrough
+ case "sec", "second", "s":
+ output, toUnit = dd/float64(time.Second), "s"
+ }
+ return output, toUnit, true
+}
+
+// prettyName determines the printable name to be used for a node.
+func (info *nodeInfo) prettyName() string {
+ var name string
+ if info.address != 0 {
+ name = fmt.Sprintf("%016x", info.address)
+ }
+
+ if info.name != "" {
+ name = name + " " + info.name
+ }
+
+ if info.file != "" {
+ name += " " + trimPath(info.file)
+ if info.lineno != 0 {
+ name += fmt.Sprintf(":%d", info.lineno)
+ }
+ }
+
+ if info.inline {
+ name = name + " (inline)"
+ }
+
+ if name = strings.TrimSpace(name); name == "" && info.objfile != "" {
+ name = "[" + info.objfile + "]"
+ }
+ return name
+}
+
+// New builds a new report indexing the sample values interpreting the
+// samples with the provided function.
+func New(prof *profile.Profile, options Options, value func(s *profile.Sample) int64, unit string) *Report {
+ o := &options
+ if o.SampleUnit == "" {
+ o.SampleUnit = unit
+ }
+ format := func(v int64) string {
+ if r := o.Ratio; r > 0 && r != 1 {
+ fv := float64(v) * r
+ v = int64(fv)
+ }
+ return scaledValueLabel(v, o.SampleUnit, o.OutputUnit)
+ }
+ return &Report{prof, computeTotal(prof, value), o, value, format}
+}
+
+// NewDefault builds a new report indexing the sample values with the
+// last value available.
+func NewDefault(prof *profile.Profile, options Options) *Report {
+ index := len(prof.SampleType) - 1
+ o := &options
+ if o.SampleUnit == "" {
+ o.SampleUnit = strings.ToLower(prof.SampleType[index].Unit)
+ }
+ value := func(s *profile.Sample) int64 {
+ return s.Value[index]
+ }
+ format := func(v int64) string {
+ if r := o.Ratio; r > 0 && r != 1 {
+ fv := float64(v) * r
+ v = int64(fv)
+ }
+ return scaledValueLabel(v, o.SampleUnit, o.OutputUnit)
+ }
+ return &Report{prof, computeTotal(prof, value), o, value, format}
+}
+
+func computeTotal(prof *profile.Profile, value func(s *profile.Sample) int64) int64 {
+ var ret int64
+ for _, sample := range prof.Sample {
+ ret += value(sample)
+ }
+ return ret
+}
+
+// Report contains the data and associated routines to extract a
+// report from a profile.
+type Report struct {
+ prof *profile.Profile
+ total int64
+ options *Options
+ sampleValue func(*profile.Sample) int64
+ formatValue func(int64) string
+}
+
+func (rpt *Report) formatTags(s *profile.Sample) (string, bool) {
+ var labels []string
+ for key, vals := range s.Label {
+ for _, v := range vals {
+ labels = append(labels, key+":"+v)
+ }
+ }
+ for key, nvals := range s.NumLabel {
+ for _, v := range nvals {
+ labels = append(labels, scaledValueLabel(v, key, "auto"))
+ }
+ }
+ if len(labels) == 0 {
+ return "", false
+ }
+ sort.Strings(labels)
+ return strings.Join(labels, `\n`), true
+}
diff --git a/src/cmd/pprof/internal/report/source.go b/src/cmd/pprof/internal/report/source.go
new file mode 100644
index 000000000..57300dd91
--- /dev/null
+++ b/src/cmd/pprof/internal/report/source.go
@@ -0,0 +1,450 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package report
+
+// This file contains routines related to the generation of annotated
+// source listings.
+
+import (
+ "bufio"
+ "fmt"
+ "html/template"
+ "io"
+ "os"
+ "path/filepath"
+ "sort"
+ "strconv"
+ "strings"
+
+ "cmd/pprof/internal/plugin"
+)
+
+// printSource prints an annotated source listing, include all
+// functions with samples that match the regexp rpt.options.symbol.
+// The sources are sorted by function name and then by filename to
+// eliminate potential nondeterminism.
+func printSource(w io.Writer, rpt *Report) error {
+ o := rpt.options
+ g, err := newGraph(rpt)
+ if err != nil {
+ return err
+ }
+
+ // Identify all the functions that match the regexp provided.
+ // Group nodes for each matching function.
+ var functions nodes
+ functionNodes := make(map[string]nodes)
+ for _, n := range g.ns {
+ if !o.Symbol.MatchString(n.info.name) {
+ continue
+ }
+ if functionNodes[n.info.name] == nil {
+ functions = append(functions, n)
+ }
+ functionNodes[n.info.name] = append(functionNodes[n.info.name], n)
+ }
+ functions.sort(nameOrder)
+
+ fmt.Fprintf(w, "Total: %s\n", rpt.formatValue(rpt.total))
+ for _, fn := range functions {
+ name := fn.info.name
+
+ // Identify all the source files associated to this function.
+ // Group nodes for each source file.
+ var sourceFiles nodes
+ fileNodes := make(map[string]nodes)
+ for _, n := range functionNodes[name] {
+ if n.info.file == "" {
+ continue
+ }
+ if fileNodes[n.info.file] == nil {
+ sourceFiles = append(sourceFiles, n)
+ }
+ fileNodes[n.info.file] = append(fileNodes[n.info.file], n)
+ }
+
+ if len(sourceFiles) == 0 {
+ fmt.Printf("No source information for %s\n", name)
+ continue
+ }
+
+ sourceFiles.sort(fileOrder)
+
+ // Print each file associated with this function.
+ for _, fl := range sourceFiles {
+ filename := fl.info.file
+ fns := fileNodes[filename]
+ flatSum, cumSum := sumNodes(fns)
+
+ fnodes, path, err := getFunctionSource(name, filename, fns, 0, 0)
+ fmt.Fprintf(w, "ROUTINE ======================== %s in %s\n", name, path)
+ fmt.Fprintf(w, "%10s %10s (flat, cum) %s of Total\n",
+ rpt.formatValue(flatSum), rpt.formatValue(cumSum),
+ percentage(cumSum, rpt.total))
+
+ if err != nil {
+ fmt.Fprintf(w, " Error: %v\n", err)
+ continue
+ }
+
+ for _, fn := range fnodes {
+ fmt.Fprintf(w, "%10s %10s %6d:%s\n", valueOrDot(fn.flat, rpt), valueOrDot(fn.cum, rpt), fn.info.lineno, fn.info.name)
+ }
+ }
+ }
+ return nil
+}
+
+// printWebSource prints an annotated source listing, include all
+// functions with samples that match the regexp rpt.options.symbol.
+func printWebSource(w io.Writer, rpt *Report, obj plugin.ObjTool) error {
+ o := rpt.options
+ g, err := newGraph(rpt)
+ if err != nil {
+ return err
+ }
+
+ // If the regexp source can be parsed as an address, also match
+ // functions that land on that address.
+ var address *uint64
+ if hex, err := strconv.ParseUint(o.Symbol.String(), 0, 64); err == nil {
+ address = &hex
+ }
+
+ // Extract interesting symbols from binary files in the profile and
+ // classify samples per symbol.
+ symbols := symbolsFromBinaries(rpt.prof, g, o.Symbol, address, obj)
+ symNodes := nodesPerSymbol(g.ns, symbols)
+
+ // Sort symbols for printing.
+ var syms objSymbols
+ for s := range symNodes {
+ syms = append(syms, s)
+ }
+ sort.Sort(syms)
+
+ if len(syms) == 0 {
+ return fmt.Errorf("no samples found on routines matching: %s", o.Symbol.String())
+ }
+
+ printHeader(w, rpt)
+ for _, s := range syms {
+ name := s.sym.Name[0]
+ // Identify sources associated to a symbol by examining
+ // symbol samples. Classify samples per source file.
+ var sourceFiles nodes
+ fileNodes := make(map[string]nodes)
+ for _, n := range symNodes[s] {
+ if n.info.file == "" {
+ continue
+ }
+ if fileNodes[n.info.file] == nil {
+ sourceFiles = append(sourceFiles, n)
+ }
+ fileNodes[n.info.file] = append(fileNodes[n.info.file], n)
+ }
+
+ if len(sourceFiles) == 0 {
+ fmt.Printf("No source information for %s\n", name)
+ continue
+ }
+
+ sourceFiles.sort(fileOrder)
+
+ // Print each file associated with this function.
+ for _, fl := range sourceFiles {
+ filename := fl.info.file
+ fns := fileNodes[filename]
+
+ asm := assemblyPerSourceLine(symbols, fns, filename, obj)
+ start, end := sourceCoordinates(asm)
+
+ fnodes, path, err := getFunctionSource(name, filename, fns, start, end)
+ if err != nil {
+ fnodes, path = getMissingFunctionSource(filename, asm, start, end)
+ }
+
+ flatSum, cumSum := sumNodes(fnodes)
+ printFunctionHeader(w, name, path, flatSum, cumSum, rpt)
+ for _, fn := range fnodes {
+ printFunctionSourceLine(w, fn, asm[fn.info.lineno], rpt)
+ }
+ printFunctionClosing(w)
+ }
+ }
+ printPageClosing(w)
+ return nil
+}
+
+// sourceCoordinates returns the lowest and highest line numbers from
+// a set of assembly statements.
+func sourceCoordinates(asm map[int]nodes) (start, end int) {
+ for l := range asm {
+ if start == 0 || l < start {
+ start = l
+ }
+ if end == 0 || l > end {
+ end = l
+ }
+ }
+ return start, end
+}
+
+// assemblyPerSourceLine disassembles the binary containing a symbol
+// and classifies the assembly instructions according to its
+// corresponding source line, annotating them with a set of samples.
+func assemblyPerSourceLine(objSyms []*objSymbol, rs nodes, src string, obj plugin.ObjTool) map[int]nodes {
+ assembly := make(map[int]nodes)
+ // Identify symbol to use for this collection of samples.
+ o := findMatchingSymbol(objSyms, rs)
+ if o == nil {
+ return assembly
+ }
+
+ // Extract assembly for matched symbol
+ insns, err := obj.Disasm(o.sym.File, o.sym.Start, o.sym.End)
+ if err != nil {
+ return assembly
+ }
+
+ srcBase := filepath.Base(src)
+ anodes := annotateAssembly(insns, rs, o.base)
+ var lineno = 0
+ for _, an := range anodes {
+ if filepath.Base(an.info.file) == srcBase {
+ lineno = an.info.lineno
+ }
+ if lineno != 0 {
+ assembly[lineno] = append(assembly[lineno], an)
+ }
+ }
+
+ return assembly
+}
+
+// findMatchingSymbol looks for the symbol that corresponds to a set
+// of samples, by comparing their addresses.
+func findMatchingSymbol(objSyms []*objSymbol, ns nodes) *objSymbol {
+ for _, n := range ns {
+ for _, o := range objSyms {
+ if filepath.Base(o.sym.File) == n.info.objfile &&
+ o.sym.Start <= n.info.address-o.base &&
+ n.info.address-o.base <= o.sym.End {
+ return o
+ }
+ }
+ }
+ return nil
+}
+
+// printHeader prints the page header for a weblist report.
+func printHeader(w io.Writer, rpt *Report) {
+ fmt.Fprintln(w, weblistPageHeader)
+
+ var labels []string
+ for _, l := range legendLabels(rpt) {
+ labels = append(labels, template.HTMLEscapeString(l))
+ }
+
+ fmt.Fprintf(w, `<div class="legend">%s<br>Total: %s</div>`,
+ strings.Join(labels, "<br>\n"),
+ rpt.formatValue(rpt.total),
+ )
+}
+
+// printFunctionHeader prints a function header for a weblist report.
+func printFunctionHeader(w io.Writer, name, path string, flatSum, cumSum int64, rpt *Report) {
+ fmt.Fprintf(w, `<h1>%s</h1>%s
+<pre onClick="pprof_toggle_asm()">
+ Total: %10s %10s (flat, cum) %s
+`,
+ template.HTMLEscapeString(name), template.HTMLEscapeString(path),
+ rpt.formatValue(flatSum), rpt.formatValue(cumSum),
+ percentage(cumSum, rpt.total))
+}
+
+// printFunctionSourceLine prints a source line and the corresponding assembly.
+func printFunctionSourceLine(w io.Writer, fn *node, assembly nodes, rpt *Report) {
+ if len(assembly) == 0 {
+ fmt.Fprintf(w,
+ "<span class=line> %6d</span> <span class=nop> %10s %10s %s </span>\n",
+ fn.info.lineno,
+ valueOrDot(fn.flat, rpt), valueOrDot(fn.cum, rpt),
+ template.HTMLEscapeString(fn.info.name))
+ return
+ }
+
+ fmt.Fprintf(w,
+ "<span class=line> %6d</span> <span class=deadsrc> %10s %10s %s </span>",
+ fn.info.lineno,
+ valueOrDot(fn.flat, rpt), valueOrDot(fn.cum, rpt),
+ template.HTMLEscapeString(fn.info.name))
+ fmt.Fprint(w, "<span class=asm>")
+ for _, an := range assembly {
+ var fileline string
+ class := "disasmloc"
+ if an.info.file != "" {
+ fileline = fmt.Sprintf("%s:%d", template.HTMLEscapeString(an.info.file), an.info.lineno)
+ if an.info.lineno != fn.info.lineno {
+ class = "unimportant"
+ }
+ }
+ fmt.Fprintf(w, " %8s %10s %10s %8x: %-48s <span class=%s>%s</span>\n", "",
+ valueOrDot(an.flat, rpt), valueOrDot(an.cum, rpt),
+ an.info.address,
+ template.HTMLEscapeString(an.info.name),
+ class,
+ template.HTMLEscapeString(fileline))
+ }
+ fmt.Fprintln(w, "</span>")
+}
+
+// printFunctionClosing prints the end of a function in a weblist report.
+func printFunctionClosing(w io.Writer) {
+ fmt.Fprintln(w, "</pre>")
+}
+
+// printPageClosing prints the end of the page in a weblist report.
+func printPageClosing(w io.Writer) {
+ fmt.Fprintln(w, weblistPageClosing)
+}
+
+// getFunctionSource collects the sources of a function from a source
+// file and annotates it with the samples in fns. Returns the sources
+// as nodes, using the info.name field to hold the source code.
+func getFunctionSource(fun, file string, fns nodes, start, end int) (nodes, string, error) {
+ f, file, err := adjustSourcePath(file)
+ if err != nil {
+ return nil, file, err
+ }
+
+ lineNodes := make(map[int]nodes)
+
+ // Collect source coordinates from profile.
+ const margin = 5 // Lines before first/after last sample.
+ if start == 0 {
+ if fns[0].info.startLine != 0 {
+ start = fns[0].info.startLine
+ } else {
+ start = fns[0].info.lineno - margin
+ }
+ } else {
+ start -= margin
+ }
+ if end == 0 {
+ end = fns[0].info.lineno
+ }
+ end += margin
+ for _, n := range fns {
+ lineno := n.info.lineno
+ nodeStart := n.info.startLine
+ if nodeStart == 0 {
+ nodeStart = lineno - margin
+ }
+ nodeEnd := lineno + margin
+ if nodeStart < start {
+ start = nodeStart
+ } else if nodeEnd > end {
+ end = nodeEnd
+ }
+ lineNodes[lineno] = append(lineNodes[lineno], n)
+ }
+
+ var src nodes
+ buf := bufio.NewReader(f)
+ lineno := 1
+ for {
+ line, err := buf.ReadString('\n')
+ if err != nil {
+ if line == "" || err != io.EOF {
+ return nil, file, err
+ }
+ }
+ if lineno >= start {
+ flat, cum := sumNodes(lineNodes[lineno])
+
+ src = append(src, &node{
+ info: nodeInfo{
+ name: strings.TrimRight(line, "\n"),
+ lineno: lineno,
+ },
+ flat: flat,
+ cum: cum,
+ })
+ }
+ lineno++
+ if lineno > end {
+ break
+ }
+ }
+ return src, file, nil
+}
+
+// getMissingFunctionSource creates a dummy function body to point to
+// the source file and annotates it with the samples in asm.
+func getMissingFunctionSource(filename string, asm map[int]nodes, start, end int) (nodes, string) {
+ var fnodes nodes
+ for i := start; i <= end; i++ {
+ lrs := asm[i]
+ if len(lrs) == 0 {
+ continue
+ }
+ flat, cum := sumNodes(lrs)
+ fnodes = append(fnodes, &node{
+ info: nodeInfo{
+ name: "???",
+ lineno: i,
+ },
+ flat: flat,
+ cum: cum,
+ })
+ }
+ return fnodes, filename
+}
+
+// adjustSourcePath adjusts the pathe for a source file by trimmming
+// known prefixes and searching for the file on all parents of the
+// current working dir.
+func adjustSourcePath(path string) (*os.File, string, error) {
+ path = trimPath(path)
+ f, err := os.Open(path)
+ if err == nil {
+ return f, path, nil
+ }
+
+ if dir, wderr := os.Getwd(); wderr == nil {
+ for {
+ parent := filepath.Dir(dir)
+ if parent == dir {
+ break
+ }
+ if f, err := os.Open(filepath.Join(parent, path)); err == nil {
+ return f, filepath.Join(parent, path), nil
+ }
+
+ dir = parent
+ }
+ }
+
+ return nil, path, err
+}
+
+// trimPath cleans up a path by removing prefixes that are commonly
+// found on profiles.
+func trimPath(path string) string {
+ basePaths := []string{
+ "/proc/self/cwd/./",
+ "/proc/self/cwd/",
+ }
+
+ sPath := filepath.ToSlash(path)
+
+ for _, base := range basePaths {
+ if strings.HasPrefix(sPath, base) {
+ return filepath.FromSlash(sPath[len(base):])
+ }
+ }
+ return path
+}
diff --git a/src/cmd/pprof/internal/report/source_html.go b/src/cmd/pprof/internal/report/source_html.go
new file mode 100644
index 000000000..267fabdc4
--- /dev/null
+++ b/src/cmd/pprof/internal/report/source_html.go
@@ -0,0 +1,77 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package report
+
+const weblistPageHeader = `
+<!DOCTYPE html>
+<html>
+<head>
+<title>Pprof listing</title>
+<style type="text/css">
+body {
+font-family: sans-serif;
+}
+h1 {
+ font-size: 1.5em;
+ margin-bottom: 4px;
+}
+.legend {
+ font-size: 1.25em;
+}
+.line {
+color: #aaaaaa;
+}
+.nop {
+color: #aaaaaa;
+}
+.unimportant {
+color: #cccccc;
+}
+.disasmloc {
+color: #000000;
+}
+.deadsrc {
+cursor: pointer;
+}
+.deadsrc:hover {
+background-color: #eeeeee;
+}
+.livesrc {
+color: #0000ff;
+cursor: pointer;
+}
+.livesrc:hover {
+background-color: #eeeeee;
+}
+.asm {
+color: #008800;
+display: none;
+}
+</style>
+<script type="text/javascript">
+function pprof_toggle_asm(e) {
+ var target;
+ if (!e) e = window.event;
+ if (e.target) target = e.target;
+ else if (e.srcElement) target = e.srcElement;
+
+ if (target) {
+ var asm = target.nextSibling;
+ if (asm && asm.className == "asm") {
+ asm.style.display = (asm.style.display == "block" ? "" : "block");
+ e.preventDefault();
+ return false;
+ }
+ }
+}
+</script>
+</head>
+<body>
+`
+
+const weblistPageClosing = `
+</body>
+</html>
+`
diff --git a/src/cmd/pprof/internal/svg/svg.go b/src/cmd/pprof/internal/svg/svg.go
new file mode 100644
index 000000000..aa65a1a08
--- /dev/null
+++ b/src/cmd/pprof/internal/svg/svg.go
@@ -0,0 +1,75 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package svg provides tools related to handling of SVG files
+package svg
+
+import (
+ "bytes"
+ "regexp"
+ "strings"
+)
+
+var (
+ viewBox = regexp.MustCompile(`<svg\s*width="[^"]+"\s*height="[^"]+"\s*viewBox="[^"]+"`)
+ graphId = regexp.MustCompile(`<g id="graph\d"`)
+ svgClose = regexp.MustCompile(`</svg>`)
+)
+
+// Massage enhances the SVG output from DOT to provide bettern
+// panning inside a web browser. It uses the SVGPan library, which is
+// accessed through the svgPan URL.
+func Massage(in bytes.Buffer, svgPan string) string {
+ svg := string(in.Bytes())
+
+ // Work around for dot bug which misses quoting some ampersands,
+ // resulting on unparsable SVG.
+ svg = strings.Replace(svg, "&;", "&amp;;", -1)
+ if svgPan == "" {
+ return svg
+ }
+
+ //Dot's SVG output is
+ //
+ // <svg width="___" height="___"
+ // viewBox="___" xmlns=...>
+ // <g id="graph0" transform="...">
+ // ...
+ // </g>
+ // </svg>
+ //
+ // Change it to
+ //
+ // <svg width="100%" height="100%"
+ // xmlns=...>
+ // <script xlink:href=" ...$svgpan.. "/>
+
+ // <g id="viewport" transform="translate(0,0)">
+ // <g id="graph0" transform="...">
+ // ...
+ // </g>
+ // </g>
+ // </svg>
+
+ if loc := viewBox.FindStringIndex(svg); loc != nil {
+ svg = svg[:loc[0]] +
+ `<svg width="100%" height="100%"` +
+ svg[loc[1]:]
+ }
+
+ if loc := graphId.FindStringIndex(svg); loc != nil {
+ svg = svg[:loc[0]] +
+ `<script xlink:href="` + svgPan + `"/>` +
+ `<g id="viewport" transform="scale(0.5,0.5) translate(0,0)">` +
+ svg[loc[0]:]
+ }
+
+ if loc := svgClose.FindStringIndex(svg); loc != nil {
+ svg = svg[:loc[0]] +
+ `</g>` +
+ svg[loc[0]:]
+ }
+
+ return svg
+}
diff --git a/src/cmd/pprof/internal/symbolizer/symbolizer.go b/src/cmd/pprof/internal/symbolizer/symbolizer.go
new file mode 100644
index 000000000..86de5640d
--- /dev/null
+++ b/src/cmd/pprof/internal/symbolizer/symbolizer.go
@@ -0,0 +1,195 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package symbolizer provides a routine to populate a profile with
+// symbol, file and line number information. It relies on the
+// addr2liner and demangler packages to do the actual work.
+package symbolizer
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "cmd/pprof/internal/plugin"
+ "cmd/pprof/internal/profile"
+)
+
+// Symbolize adds symbol and line number information to all locations
+// in a profile. mode enables some options to control
+// symbolization. Currently only recognizes "force", which causes it
+// to overwrite any existing data.
+func Symbolize(mode string, prof *profile.Profile, obj plugin.ObjTool, ui plugin.UI) error {
+ force := false
+ // Disable some mechanisms based on mode string.
+ for _, o := range strings.Split(strings.ToLower(mode), ":") {
+ switch o {
+ case "force":
+ force = true
+ default:
+ }
+ }
+
+ if len(prof.Mapping) == 0 {
+ return fmt.Errorf("no known mappings")
+ }
+
+ mt, err := newMapping(prof, obj, ui, force)
+ if err != nil {
+ return err
+ }
+ defer mt.close()
+
+ functions := make(map[profile.Function]*profile.Function)
+ for _, l := range mt.prof.Location {
+ m := l.Mapping
+ segment := mt.segments[m]
+ if segment == nil {
+ // Nothing to do
+ continue
+ }
+
+ stack, err := segment.SourceLine(l.Address)
+ if err != nil || len(stack) == 0 {
+ // No answers from addr2line
+ continue
+ }
+
+ l.Line = make([]profile.Line, len(stack))
+ for i, frame := range stack {
+ if frame.Func != "" {
+ m.HasFunctions = true
+ }
+ if frame.File != "" {
+ m.HasFilenames = true
+ }
+ if frame.Line != 0 {
+ m.HasLineNumbers = true
+ }
+ f := &profile.Function{
+ Name: frame.Func,
+ SystemName: frame.Func,
+ Filename: frame.File,
+ }
+ if fp := functions[*f]; fp != nil {
+ f = fp
+ } else {
+ functions[*f] = f
+ f.ID = uint64(len(mt.prof.Function)) + 1
+ mt.prof.Function = append(mt.prof.Function, f)
+ }
+ l.Line[i] = profile.Line{
+ Function: f,
+ Line: int64(frame.Line),
+ }
+ }
+
+ if len(stack) > 0 {
+ m.HasInlineFrames = true
+ }
+ }
+ return nil
+}
+
+// newMapping creates a mappingTable for a profile.
+func newMapping(prof *profile.Profile, obj plugin.ObjTool, ui plugin.UI, force bool) (*mappingTable, error) {
+ mt := &mappingTable{
+ prof: prof,
+ segments: make(map[*profile.Mapping]plugin.ObjFile),
+ }
+
+ // Identify used mappings
+ mappings := make(map[*profile.Mapping]bool)
+ for _, l := range prof.Location {
+ mappings[l.Mapping] = true
+ }
+
+ for _, m := range prof.Mapping {
+ if !mappings[m] {
+ continue
+ }
+ // Do not attempt to re-symbolize a mapping that has already been symbolized.
+ if !force && (m.HasFunctions || m.HasFilenames || m.HasLineNumbers) {
+ continue
+ }
+
+ f, err := locateFile(obj, m.File, m.BuildID, m.Start)
+ if err != nil {
+ ui.PrintErr("Local symbolization failed for ", filepath.Base(m.File), ": ", err)
+ // Move on to other mappings
+ continue
+ }
+
+ if fid := f.BuildID(); m.BuildID != "" && fid != "" && fid != m.BuildID {
+ // Build ID mismatch - ignore.
+ f.Close()
+ continue
+ }
+
+ mt.segments[m] = f
+ }
+
+ return mt, nil
+}
+
+// locateFile opens a local file for symbolization on the search path
+// at $PPROF_BINARY_PATH. Looks inside these directories for files
+// named $BUILDID/$BASENAME and $BASENAME (if build id is available).
+func locateFile(obj plugin.ObjTool, file, buildID string, start uint64) (plugin.ObjFile, error) {
+ // Construct search path to examine
+ searchPath := os.Getenv("PPROF_BINARY_PATH")
+ if searchPath == "" {
+ // Use $HOME/pprof/binaries as default directory for local symbolization binaries
+ searchPath = filepath.Join(os.Getenv("HOME"), "pprof", "binaries")
+ }
+
+ // Collect names to search: {buildid/basename, basename}
+ var fileNames []string
+ if baseName := filepath.Base(file); buildID != "" {
+ fileNames = []string{filepath.Join(buildID, baseName), baseName}
+ } else {
+ fileNames = []string{baseName}
+ }
+ for _, path := range filepath.SplitList(searchPath) {
+ for nameIndex, name := range fileNames {
+ file := filepath.Join(path, name)
+ if f, err := obj.Open(file, start); err == nil {
+ fileBuildID := f.BuildID()
+ if buildID == "" || buildID == fileBuildID {
+ return f, nil
+ }
+ f.Close()
+ if nameIndex == 0 {
+ // If this is the first name, the path includes the build id. Report inconsistency.
+ return nil, fmt.Errorf("found file %s with inconsistent build id %s", file, fileBuildID)
+ }
+ }
+ }
+ }
+ // Try original file name
+ f, err := obj.Open(file, start)
+ if err == nil && buildID != "" {
+ if fileBuildID := f.BuildID(); fileBuildID != "" && fileBuildID != buildID {
+ // Mismatched build IDs, ignore
+ f.Close()
+ return nil, fmt.Errorf("mismatched build ids %s != %s", fileBuildID, buildID)
+ }
+ }
+ return f, err
+}
+
+// mappingTable contains the mechanisms for symbolization of a
+// profile.
+type mappingTable struct {
+ prof *profile.Profile
+ segments map[*profile.Mapping]plugin.ObjFile
+}
+
+// Close releases any external processes being used for the mapping.
+func (mt *mappingTable) close() {
+ for _, segment := range mt.segments {
+ segment.Close()
+ }
+}
diff --git a/src/cmd/pprof/internal/symbolz/symbolz.go b/src/cmd/pprof/internal/symbolz/symbolz.go
new file mode 100644
index 000000000..c81e52220
--- /dev/null
+++ b/src/cmd/pprof/internal/symbolz/symbolz.go
@@ -0,0 +1,111 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package symbolz symbolizes a profile using the output from the symbolz
+// service.
+package symbolz
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "net/url"
+ "regexp"
+ "strconv"
+ "strings"
+
+ "cmd/pprof/internal/profile"
+)
+
+var (
+ symbolzRE = regexp.MustCompile(`(0x[[:xdigit:]]+)\s+(.*)`)
+)
+
+// Symbolize symbolizes profile p by parsing data returned by a
+// symbolz handler. syms receives the symbolz query (hex addresses
+// separated by '+') and returns the symbolz output in a string. It
+// symbolizes all locations based on their addresses, regardless of
+// mapping.
+func Symbolize(source string, syms func(string, string) ([]byte, error), p *profile.Profile) error {
+ if source = symbolz(source, p); source == "" {
+ // If the source is not a recognizable URL, do nothing.
+ return nil
+ }
+
+ // Construct query of addresses to symbolize.
+ var a []string
+ for _, l := range p.Location {
+ if l.Address != 0 && len(l.Line) == 0 {
+ a = append(a, fmt.Sprintf("%#x", l.Address))
+ }
+ }
+
+ if len(a) == 0 {
+ // No addresses to symbolize.
+ return nil
+ }
+ lines := make(map[uint64]profile.Line)
+ functions := make(map[string]*profile.Function)
+ if b, err := syms(source, strings.Join(a, "+")); err == nil {
+ buf := bytes.NewBuffer(b)
+ for {
+ l, err := buf.ReadString('\n')
+
+ if err != nil {
+ if err == io.EOF {
+ break
+ }
+ return err
+ }
+
+ if symbol := symbolzRE.FindStringSubmatch(l); len(symbol) == 3 {
+ addr, err := strconv.ParseUint(symbol[1], 0, 64)
+ if err != nil {
+ return fmt.Errorf("unexpected parse failure %s: %v", symbol[1], err)
+ }
+
+ name := symbol[2]
+ fn := functions[name]
+ if fn == nil {
+ fn = &profile.Function{
+ ID: uint64(len(p.Function) + 1),
+ Name: name,
+ SystemName: name,
+ }
+ functions[name] = fn
+ p.Function = append(p.Function, fn)
+ }
+
+ lines[addr] = profile.Line{Function: fn}
+ }
+ }
+ }
+
+ for _, l := range p.Location {
+ if line, ok := lines[l.Address]; ok {
+ l.Line = []profile.Line{line}
+ if l.Mapping != nil {
+ l.Mapping.HasFunctions = true
+ }
+ }
+ }
+
+ return nil
+}
+
+// symbolz returns the corresponding symbolz source for a profile URL.
+func symbolz(source string, p *profile.Profile) string {
+ if url, err := url.Parse(source); err == nil && url.Host != "" {
+ if last := strings.LastIndex(url.Path, "/"); last != -1 {
+ if strings.HasSuffix(url.Path[:last], "pprof") {
+ url.Path = url.Path[:last] + "/symbol"
+ } else {
+ url.Path = url.Path[:last] + "/symbolz"
+ }
+ return url.String()
+ }
+ }
+
+ return ""
+}
diff --git a/src/cmd/pprof/internal/tempfile/tempfile.go b/src/cmd/pprof/internal/tempfile/tempfile.go
new file mode 100644
index 000000000..31c117690
--- /dev/null
+++ b/src/cmd/pprof/internal/tempfile/tempfile.go
@@ -0,0 +1,45 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package tempfile provides tools to create and delete temporary files
+package tempfile
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "sync"
+)
+
+// New returns an unused filename for output files.
+func New(dir, prefix, suffix string) (*os.File, error) {
+ for index := 1; index < 10000; index++ {
+ path := filepath.Join(dir, fmt.Sprintf("%s%03d%s", prefix, index, suffix))
+ if _, err := os.Stat(path); err != nil {
+ return os.Create(path)
+ }
+ }
+ // Give up
+ return nil, fmt.Errorf("could not create file of the form %s%03d%s", prefix, 1, suffix)
+}
+
+var tempFiles []string
+var tempFilesMu = sync.Mutex{}
+
+// DeferDelete marks a file to be deleted by next call to Cleanup()
+func DeferDelete(path string) {
+ tempFilesMu.Lock()
+ tempFiles = append(tempFiles, path)
+ tempFilesMu.Unlock()
+}
+
+// Cleanup removes any temporary files selected for deferred cleaning.
+func Cleanup() {
+ tempFilesMu.Lock()
+ for _, f := range tempFiles {
+ os.Remove(f)
+ }
+ tempFiles = nil
+ tempFilesMu.Unlock()
+}
diff --git a/src/cmd/pprof/pprof.go b/src/cmd/pprof/pprof.go
new file mode 100644
index 000000000..44f4f6cb7
--- /dev/null
+++ b/src/cmd/pprof/pprof.go
@@ -0,0 +1,237 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+ "debug/gosym"
+ "flag"
+ "fmt"
+ "os"
+ "regexp"
+ "strings"
+ "sync"
+
+ "cmd/internal/objfile"
+ "cmd/pprof/internal/commands"
+ "cmd/pprof/internal/driver"
+ "cmd/pprof/internal/fetch"
+ "cmd/pprof/internal/plugin"
+ "cmd/pprof/internal/profile"
+ "cmd/pprof/internal/symbolizer"
+ "cmd/pprof/internal/symbolz"
+)
+
+func main() {
+ var extraCommands map[string]*commands.Command // no added Go-specific commands
+ if err := driver.PProf(flags{}, fetch.Fetcher, symbolize, new(objTool), plugin.StandardUI(), extraCommands); err != nil {
+ fmt.Fprintf(os.Stderr, "%v\n", err)
+ }
+}
+
+// symbolize attempts to symbolize profile p.
+// If the source is a local binary, it tries using symbolizer and obj.
+// If the source is a URL, it fetches symbol information using symbolz.
+func symbolize(mode, source string, p *profile.Profile, obj plugin.ObjTool, ui plugin.UI) error {
+ remote, local := true, true
+ for _, o := range strings.Split(strings.ToLower(mode), ":") {
+ switch o {
+ case "none", "no":
+ return nil
+ case "local":
+ remote, local = false, true
+ case "remote":
+ remote, local = true, false
+ default:
+ ui.PrintErr("ignoring unrecognized symbolization option: " + mode)
+ ui.PrintErr("expecting -symbolize=[local|remote|none][:force]")
+ fallthrough
+ case "", "force":
+ // Ignore these options, -force is recognized by symbolizer.Symbolize
+ }
+ }
+
+ var err error
+ if local {
+ // Symbolize using binutils.
+ if err = symbolizer.Symbolize(mode, p, obj, ui); err == nil {
+ return nil
+ }
+ }
+ if remote {
+ err = symbolz.Symbolize(source, fetch.PostURL, p)
+ }
+ return err
+}
+
+// flags implements the driver.FlagPackage interface using the builtin flag package.
+type flags struct {
+}
+
+func (flags) Bool(o string, d bool, c string) *bool {
+ return flag.Bool(o, d, c)
+}
+
+func (flags) Int(o string, d int, c string) *int {
+ return flag.Int(o, d, c)
+}
+
+func (flags) Float64(o string, d float64, c string) *float64 {
+ return flag.Float64(o, d, c)
+}
+
+func (flags) String(o, d, c string) *string {
+ return flag.String(o, d, c)
+}
+
+func (flags) Parse(usage func()) []string {
+ flag.Usage = usage
+ flag.Parse()
+ args := flag.Args()
+ if len(args) == 0 {
+ usage()
+ }
+ return args
+}
+
+func (flags) ExtraUsage() string {
+ return ""
+}
+
+// objTool implements plugin.ObjTool using Go libraries
+// (instead of invoking GNU binutils).
+type objTool struct {
+ mu sync.Mutex
+ disasmCache map[string]*objfile.Disasm
+}
+
+func (*objTool) Open(name string, start uint64) (plugin.ObjFile, error) {
+ of, err := objfile.Open(name)
+ if err != nil {
+ return nil, err
+ }
+ f := &file{
+ name: name,
+ file: of,
+ }
+ return f, nil
+}
+
+func (*objTool) Demangle(names []string) (map[string]string, error) {
+ // No C++, nothing to demangle.
+ return make(map[string]string), nil
+}
+
+func (t *objTool) Disasm(file string, start, end uint64) ([]plugin.Inst, error) {
+ d, err := t.cachedDisasm(file)
+ if err != nil {
+ return nil, err
+ }
+ var asm []plugin.Inst
+ d.Decode(start, end, func(pc, size uint64, file string, line int, text string) {
+ asm = append(asm, plugin.Inst{Addr: pc, File: file, Line: line, Text: text})
+ })
+ return asm, nil
+}
+
+func (t *objTool) cachedDisasm(file string) (*objfile.Disasm, error) {
+ t.mu.Lock()
+ defer t.mu.Unlock()
+ if t.disasmCache == nil {
+ t.disasmCache = make(map[string]*objfile.Disasm)
+ }
+ d := t.disasmCache[file]
+ if d != nil {
+ return d, nil
+ }
+ f, err := objfile.Open(file)
+ if err != nil {
+ return nil, err
+ }
+ d, err = f.Disasm()
+ f.Close()
+ if err != nil {
+ return nil, err
+ }
+ t.disasmCache[file] = d
+ return d, nil
+}
+
+func (*objTool) SetConfig(config string) {
+ // config is usually used to say what binaries to invoke.
+ // Ignore entirely.
+}
+
+// file implements plugin.ObjFile using Go libraries
+// (instead of invoking GNU binutils).
+// A file represents a single executable being analyzed.
+type file struct {
+ name string
+ sym []objfile.Sym
+ file *objfile.File
+ pcln *gosym.Table
+}
+
+func (f *file) Name() string {
+ return f.name
+}
+
+func (f *file) Base() uint64 {
+ // No support for shared libraries.
+ return 0
+}
+
+func (f *file) BuildID() string {
+ // No support for build ID.
+ return ""
+}
+
+func (f *file) SourceLine(addr uint64) ([]plugin.Frame, error) {
+ if f.pcln == nil {
+ pcln, err := f.file.PCLineTable()
+ if err != nil {
+ return nil, err
+ }
+ f.pcln = pcln
+ }
+ file, line, fn := f.pcln.PCToLine(addr)
+ if fn == nil {
+ return nil, fmt.Errorf("no line information for PC=%#x", addr)
+ }
+ frame := []plugin.Frame{
+ {
+ Func: fn.Name,
+ File: file,
+ Line: line,
+ },
+ }
+ return frame, nil
+}
+
+func (f *file) Symbols(r *regexp.Regexp, addr uint64) ([]*plugin.Sym, error) {
+ if f.sym == nil {
+ sym, err := f.file.Symbols()
+ if err != nil {
+ return nil, err
+ }
+ f.sym = sym
+ }
+ var out []*plugin.Sym
+ for _, s := range f.sym {
+ if (r == nil || r.MatchString(s.Name)) && (addr == 0 || s.Addr <= addr && addr < s.Addr+uint64(s.Size)) {
+ out = append(out, &plugin.Sym{
+ Name: []string{s.Name},
+ File: f.name,
+ Start: s.Addr,
+ End: s.Addr + uint64(s.Size) - 1,
+ })
+ }
+ }
+ return out, nil
+}
+
+func (f *file) Close() error {
+ f.file.Close()
+ return nil
+}
diff --git a/src/cmd/yacc/Makefile b/src/cmd/yacc/Makefile
deleted file mode 100644
index f8c8169bd..000000000
--- a/src/cmd/yacc/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright 2009 The Go Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-TARG=expr$(shell go env GOEXE)
-
-$(TARG): yacc.go expr.y
- go run yacc.go -p expr expr.y
- go build -o $(TARG) y.go
-
-clean:
- rm -f y.go y.output $(TARG)
diff --git a/src/cmd/yacc/doc.go b/src/cmd/yacc/doc.go
index ceaaf2448..702c9f0d2 100644
--- a/src/cmd/yacc/doc.go
+++ b/src/cmd/yacc/doc.go
@@ -20,8 +20,9 @@ written in C and documented at
Adepts of the original yacc will have no trouble adapting to this
form of the tool.
-The file expr.y in this directory is a yacc grammar for a very simple
-expression parser. It needs the flag "-p expr" (see below).
+The directory $GOROOT/cmd/yacc/testdata/expr is a yacc program
+for a very simple expression parser. See expr.y and main.go in that
+directory for examples of how to write and build yacc programs.
The generated parser is reentrant. Parse expects to be given an
argument that conforms to the following interface:
diff --git a/src/cmd/yacc/testdata/expr/README b/src/cmd/yacc/testdata/expr/README
new file mode 100644
index 000000000..302ef57a7
--- /dev/null
+++ b/src/cmd/yacc/testdata/expr/README
@@ -0,0 +1,20 @@
+This directory contains a simple program demonstrating how to use
+the Go version of yacc.
+
+To build it:
+
+ $ go generate
+ $ go build
+
+or
+
+ $ go generate
+ $ go run expr.go
+
+The file main.go contains the "go generate" command to run yacc to
+create expr.go from expr.y. It also has the package doc comment,
+as godoc will not scan the .y file.
+
+The actual implementation is in expr.y.
+
+The program is not installed in the binary distributions of Go.
diff --git a/src/cmd/yacc/expr.y b/src/cmd/yacc/testdata/expr/expr.y
index 77e9259da..721b1c917 100644
--- a/src/cmd/yacc/expr.y
+++ b/src/cmd/yacc/testdata/expr/expr.y
@@ -11,11 +11,6 @@
%{
-// This tag will be copied to the generated file to prevent that file
-// confusing a future build.
-
-// +build ignore
-
package main
import (
@@ -37,6 +32,8 @@ import (
%type <num> expr expr1 expr2 expr3
+%token '+' '-' '*' '/' '(' ')'
+
%token <num> NUM
%%
diff --git a/src/cmd/yacc/testdata/expr/main.go b/src/cmd/yacc/testdata/expr/main.go
new file mode 100644
index 000000000..8d5b6911f
--- /dev/null
+++ b/src/cmd/yacc/testdata/expr/main.go
@@ -0,0 +1,15 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This file holds the go generate command to run yacc on the grammar in expr.y.
+// To build expr:
+// % go generate
+// % go build
+
+//go:generate -command yacc go tool yacc
+//go:generate yacc -o expr.go -p "expr" expr.y
+
+// Expr is a simple expression evaluator that serves as a working example of
+// how to use Go's yacc implemenation.
+package main
diff --git a/src/cmd/yacc/yacc.go b/src/cmd/yacc/yacc.go
index c53403266..4dba376fc 100644
--- a/src/cmd/yacc/yacc.go
+++ b/src/cmd/yacc/yacc.go
@@ -52,9 +52,9 @@ import (
"go/format"
"io/ioutil"
"os"
+ "strconv"
"strings"
"unicode"
- "unicode/utf8"
)
// the following are adjustable
@@ -195,8 +195,9 @@ type Item struct {
}
type Symb struct {
- name string
- value int
+ name string
+ noconst bool
+ value int
}
type Wset struct {
@@ -509,8 +510,7 @@ outer:
// put out non-literal terminals
for i := TOKSTART; i <= ntokens; i++ {
// non-literals
- c := tokset[i].name[0]
- if c != ' ' && c != '$' {
+ if !tokset[i].noconst {
fmt.Fprintf(ftable, "const %v = %v\n", tokset[i].name, tokset[i].value)
}
}
@@ -734,7 +734,7 @@ func defin(nt int, s string) int {
copy(anontrst, nontrst)
nontrst = anontrst
}
- nontrst[nnonter] = Symb{s, 0}
+ nontrst[nnonter] = Symb{name: s}
return NTBASE + nnonter
}
@@ -756,70 +756,26 @@ func defin(nt int, s string) int {
// establish value for token
// single character literal
- if s[0] == ' ' {
- s = s[1:]
- r, size := utf8.DecodeRuneInString(s)
- if r == utf8.RuneError && size == 1 {
- errorf("invalid UTF-8 sequence %q", s)
- }
- val = int(r)
- if val == '\\' { // escape sequence
- switch {
- case len(s) == 2:
- // single character escape sequence
- switch s[1] {
- case '\'':
- val = '\''
- case '"':
- val = '"'
- case '\\':
- val = '\\'
- case 'a':
- val = '\a'
- case 'b':
- val = '\b'
- case 'f':
- val = '\f'
- case 'n':
- val = '\n'
- case 'r':
- val = '\r'
- case 't':
- val = '\t'
- case 'v':
- val = '\v'
- default:
- errorf("invalid escape %s", s)
- }
- case s[1] == 'u' && len(s) == 2+4, // \unnnn sequence
- s[1] == 'U' && len(s) == 2+8: // \Unnnnnnnn sequence
- val = 0
- s = s[2:]
- for s != "" {
- c := int(s[0])
- switch {
- case c >= '0' && c <= '9':
- c -= '0'
- case c >= 'a' && c <= 'f':
- c -= 'a' - 10
- case c >= 'A' && c <= 'F':
- c -= 'A' - 10
- default:
- errorf(`illegal \u or \U construction`)
- }
- val = val*16 + c
- s = s[1:]
- }
- default:
- errorf("invalid escape %s", s)
- }
+ if s[0] == '\'' || s[0] == '"' {
+ q, err := strconv.Unquote(s)
+ if err != nil {
+ errorf("invalid token: %s", err)
+ }
+ rq := []rune(q)
+ if len(rq) != 1 {
+ errorf("character token too long: %s", s)
}
+ val = int(rq[0])
if val == 0 {
errorf("token value 0 is illegal")
}
+ tokset[ntokens].noconst = true
} else {
val = extval
extval++
+ if s[0] == '$' {
+ tokset[ntokens].noconst = true
+ }
}
tokset[ntokens].value = val
@@ -896,7 +852,7 @@ func gettok() int {
case '"', '\'':
match = c
- tokname = " "
+ tokname = string(c)
for {
c = getrune(finput)
if c == '\n' || c == EOF {
@@ -909,6 +865,7 @@ func gettok() int {
if tokflag {
fmt.Printf(">>> IDENTIFIER \"%v\" %v\n", tokname, lineno)
}
+ tokname += string(c)
return IDENTIFIER
}
tokname += string(c)
@@ -1029,7 +986,7 @@ func fdtype(t int) int {
}
func chfind(t int, s string) int {
- if s[0] == ' ' {
+ if s[0] == '"' || s[0] == '\'' {
t = 0
}
for i := 0; i <= ntokens; i++ {
@@ -1516,9 +1473,6 @@ func symnam(i int) string {
} else {
s = tokset[i].name
}
- if s[0] == ' ' {
- s = s[1:]
- }
return s
}